以前作后端开发的时候,无论是什么语言或者框架,都习惯根据不一样环境加载不一样的开发配置,好比本地开发的时候,加载local.env配置,部署开发环境的时候加载develop.env配置,一般经过一个环境变量来决定加载相应的配置。最近在开发一款Flutter App,我也但愿App在不一样的环境中加载不一样的配置文件,实现的方式以下,若有不妥还请指出。javascript
首先在lib
创建多个main.dart
,好比main_local.dart
表示本地开发运行时执行的入口文件,main_develop.dart
和main.dart
分别表示开发环境和生产环境:java
lib/ ├── api/ ├── main.dart ├── main_develop.dart ├── main_local.dart ├── models/ ├── pages/ ├── utils/ └── widgets/
这样若是咱们运行在本地开发,那么执行后端
flutter run -t lib/main_local.dart
那么如何在执行本地开发环境的时候来调用本地开发的配置呢?其实很简单,我来定义配置文件,好比utils/config.dart
api
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
:async
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技术栈笔记ui
若是以为本篇文章对您十分有益,何不 打赏一下spa
本文连接地址: Flutter 实现根据环境加载不一样配置