Flutter 实现根据环境加载不同配置
之前做后端开发的时候,不管是什么语言或者框架,都习惯根据不同环境加载不同的开发配置,比如本地开发的时候,加载local.env配置,部署开发环境的时候加载develop.env配置,通常通过一个环境变量来决定加载相应的配置。最近在开发一款Flutter App,我也希望App在不同的环境中加载不同的配置文件,实现的方式如下,如有不妥还请指出。
首先在lib
建立多个main.dart
,比如main_local.dart
表示本地开发运行时执行的入口文件,main_develop.dart
和main.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 实现根据环境加载不同配置相关推荐
- springboot多环境加载yml和logback配置
大家好,我是烤鸭: 这是一篇关于springboot多环境加载yml和logback配置文件. 环境: 开发工具 idea(推荐)/eclipse(对yml支持不好) jdk 1.8 springb ...
- Selenium基础 — 拓展:使用浏览器加载项配置实现用户免登陆
1.什么是加载项配置 在很多情况下,我们在登录网站的时候,浏览器都会弹出一个是否保存登录账号的信息.如果我们选择保存,那么我们在下次登录时就不用再次输入账号,直接免登录了. 在我们实际的测试过程中,测 ...
- Apollo配置中心热加载mysql_Apollo配置中心介绍
1.What is Apollo 1.1 背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址-- 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分 ...
- 海思涵科技WIFI认证服务器不在线,在海思平台外加一个usb wifi模块,mt7601 加载ok,配置网络ok,但不能ping通?...
请教下:我用mt7601 usb wifi模块 加载驱动 配置网络后经常打印 PeerBeaconAtJoinAction(): Set CentralChannel=1 PeerBeaconAtJo ...
- springboot 启动分析【难点】——如何自动扫描 @SpringBootApplication||如何加载自动配置类 @EnableAutoConfiguration||如何加载前端控制器
springboot 启动分析[难点] 自动扫描的特点 默认扫描与 启动类 同级的所有包及其子包都可以自动扫描 如果不可要使用@ComponentScan(basePackage={"&qu ...
- 加载 Firefox 配置
有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用 firebug在打开的页面上继续定位页面元素,调试起来不方便 . 加载浏览器配置,需要用 FirefoxProfile(profile_ ...
- Spark加载hadoop配置原理
0x0 背景 最近为了将hadoop&hive的五大配置文件,即: core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml hive ...
- Spring 3.1 –从数据库加载XML配置的属性
Spring使通过其PropertyPlaceholderConfigurer和(Spring 3.1之前)PropertySourcesPlaceholderConfigurer(Spring 3. ...
- atitit.动态加载数据库配置in orm hibernate mybatis
atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象, ...
最新文章
- VS Code 调试 OneFlow
- 使用AIX系统及基本命令
- adb和adbd详尽分析
- Sublime Text 3 MarkdownEditing布局设置
- Ubuntu 16.04 QT ‘usr/bin/ld cannot find -IGL‘
- 5.由键盘任意输入1个整形数据(小于10亿,位数不限),将其倒置,如:输入12345,则输出54321。
- 方案解析:纸张计数精准测量出200张纸?!第1名妥妥的
- win7 + vs2015+ matlab2016a + python3.5安装matcaffe cpu版本
- python输出运行时间表_Python编程第十二课 了解程序运行的时间
- MySQL求类型为GX的平均积分_mysql基本操作
- Swift4.0 从相册中获取图片和拍照
- 阿里云MySQL及Redis灵异断连现象:安全组静默丢包解决方法
- 60个有用CSS代码片段
- 2022山东省安全员C证考试试题及答案
- Codeforces Round #469 (Div. 2) F. Curfew
- Python常用英文单词
- 使用k3s部署轻量Kubernetes集群快速教程
- Leetcode刷题java之1079. 活字印刷
- B树索引,面向海量数据的金钥匙
- Linux 虚拟文件系统(一)概述