之前做后端开发的时候,不管是什么语言或者框架,都习惯根据不同环境加载不同的开发配置,比如本地开发的时候,加载local.env配置,部署开发环境的时候加载develop.env配置,通常通过一个环境变量来决定加载相应的配置。最近在开发一款Flutter App,我也希望App在不同的环境中加载不同的配置文件,实现的方式如下,如有不妥还请指出。

首先在lib建立多个main.dart,比如main_local.dart表示本地开发运行时执行的入口文件,main_develop.dartmain.dart分别表示开发环境和生产环境:

lib/
├── api/
├── main.dart
├── main_develop.dart
├── main_local.dart
├── models/
├── pages/
├── utils/
└── widgets/

这样如果我们运行在本地开发,那么执行

flutter run -t lib/main_local.dart

那么如何在执行本地开发环境的时候来调用本地开发的配置呢?其实很简单,我来定义配置文件,比如utils/config.dart

enum Env {PROD,DEV,LOCAL,
}class Config {static Env env;static String get apiHost {switch (env) {case Env.PROD:return "http://yuanxuxu.com";case Env.DEV:return "http://develop.yuanxuxu.com";case Env.LOCAL:default:return "http://local.yuanxuxu.com";}}
}

其中Env就是一个环境变量,比如我们要获取api请求的地址,那么根据环境变量来获取不同的请求地址,接下来我们只要在运行的入口函数main中定义我们当前运行的环境变量,在main_local.dart中定义:

import 'package:xxx/utils/config.dart';
void main() {Config.env = Env.LOCAL; //设定运行环境的环境变量runApp(new MaterialApp(...));

本地开发环境的话我们就获取到http://local.yuanxuxu.com:

import 'package:xxx/utils/config.dart';
...
static request(String method, path,{Map<String, dynamic> data, header}) async {options.baseUrl = Config.apiHost; //这里获取到http://local.yuanxuxu.com...return response;}

这样就是实现了不同环境对于获取不同的配置了,如果我们现在要编译打包一个apk文件用于分发到手机上用于测试预览使用,那么可以打包一个调用develop环境配置的apk文件:

flutter build apk -t lib/main_develop.dart

打包生产配置的安装包也是一样的,直接build main.dart 文件。

转载请注明: 转载自Ryan是菜鸟 | LNMP技术栈笔记

如果觉得本篇文章对您十分有益,何不 打赏一下

本文链接地址: Flutter 实现根据环境加载不同配置

Flutter 实现根据环境加载不同配置相关推荐

  1. springboot多环境加载yml和logback配置

    大家好,我是烤鸭: 这是一篇关于springboot多环境加载yml和logback配置文件. 环境: 开发工具 idea(推荐)/eclipse(对yml支持不好) jdk  1.8 springb ...

  2. Selenium基础 — 拓展:使用浏览器加载项配置实现用户免登陆

    1.什么是加载项配置 在很多情况下,我们在登录网站的时候,浏览器都会弹出一个是否保存登录账号的信息.如果我们选择保存,那么我们在下次登录时就不用再次输入账号,直接免登录了. 在我们实际的测试过程中,测 ...

  3. Apollo配置中心热加载mysql_Apollo配置中心介绍

    1.What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址-- 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分 ...

  4. 海思涵科技WIFI认证服务器不在线,在海思平台外加一个usb wifi模块,mt7601 加载ok,配置网络ok,但不能ping通?...

    请教下:我用mt7601 usb wifi模块 加载驱动 配置网络后经常打印 PeerBeaconAtJoinAction(): Set CentralChannel=1 PeerBeaconAtJo ...

  5. springboot 启动分析【难点】——如何自动扫描 @SpringBootApplication||如何加载自动配置类 @EnableAutoConfiguration||如何加载前端控制器

    springboot 启动分析[难点] 自动扫描的特点 默认扫描与 启动类 同级的所有包及其子包都可以自动扫描 如果不可要使用@ComponentScan(basePackage={"&qu ...

  6. 加载 Firefox 配置

    有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用 firebug在打开的页面上继续定位页面元素,调试起来不方便 . 加载浏览器配置,需要用 FirefoxProfile(profile_ ...

  7. Spark加载hadoop配置原理

    0x0 背景 最近为了将hadoop&hive的五大配置文件,即: core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml hive ...

  8. Spring 3.1 –从数据库加载XML配置的属性

    Spring使通过其PropertyPlaceholderConfigurer和(Spring 3.1之前)PropertySourcesPlaceholderConfigurer(Spring 3. ...

  9. atitit.动态加载数据库配置in orm hibernate mybatis

    atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象, ...

最新文章

  1. VS Code 调试 OneFlow
  2. 使用AIX系统及基本命令
  3. adb和adbd详尽分析
  4. Sublime Text 3 MarkdownEditing布局设置
  5. Ubuntu 16.04 QT ‘usr/bin/ld cannot find -IGL‘
  6. 5.由键盘任意输入1个整形数据(小于10亿,位数不限),将其倒置,如:输入12345,则输出54321。
  7. 方案解析:纸张计数精准测量出200张纸?!第1名妥妥的
  8. win7 + vs2015+ matlab2016a + python3.5安装matcaffe cpu版本
  9. python输出运行时间表_Python编程第十二课 了解程序运行的时间
  10. MySQL求类型为GX的平均积分_mysql基本操作
  11. Swift4.0 从相册中获取图片和拍照
  12. 阿里云MySQL及Redis灵异断连现象:安全组静默丢包解决方法
  13. 60个有用CSS代码片段
  14. 2022山东省安全员C证考试试题及答案
  15. Codeforces Round #469 (Div. 2) F. Curfew
  16. Python常用英文单词
  17. 使用k3s部署轻量Kubernetes集群快速教程
  18. Leetcode刷题java之1079. 活字印刷
  19. B树索引,面向海量数据的金钥匙
  20. Linux 虚拟文件系统(一)概述

热门文章

  1. RedHat使用163源
  2. c++成员函数的调用
  3. has been modified since the precompiled header
  4. sublime几个插件
  5. 【学术研究基础】聚类分析学习
  6. 返回顶部的js实现(jQuery/MooTools)
  7. 把一台Cisco路由器配置为帧中继交换机
  8. 刷新aspx页面的六种方法
  9. python 打印列表对象,python – 打印对象列表
  10. 解析postgresql 删除重复数据案例