Flutter 优雅的区分开发、生产环境
更新记录
<2020-12-26 Sat> 更新 Android Build 配置指定环境
引言
APP开发中经常会碰到至少两个不同的环境: 一个测试环境,一个生产环境。
那如何在我们就测试开发后,不破坏现有的代码,切换到不同的环境呢?
官方fluter文档并没有给出推荐的方案, 在寻找使用不同的方式,认为多个main_ enviroment.dart 是最优雅的办法。
创建不同环境
方式
在项目lib目录下创建不同的 main_ enviroment.dart 文件,来区分不同的环境, 而每个main_.dart 包含不同的初始化配置
目录结构
lib/main_com.dart # 共有main_com文件
lib/main_dev.dart # 测试环境
lib/main_release.dart # 生产环境
定义配置
定义好配置类, 一般可能是key,api_url这里我仅仅用最常用的base_url
enum BuildFlavor { dev, release }
class BuildEnvironment {
final BuildFlavor flavor;
final String apiBaseUrl;
BuildEnvironment.dev({
this.apiBaseUrl,
}) : this.flavor = BuildFlavor.dev;
BuildEnvironment.release({
this.apiBaseUrl,
}) : this.flavor = BuildFlavor.release;
}
初始化配置
初始化不同的环境配置, 把配置作为全局变量, 或依赖注入用getIt、getx都行, 我比较喜欢用依赖注入,这样代码可测试,清晰。 demo里用了getx
-
测试环境 main_dev.dart
// lib/main_dev.dart void main() async { final buildEnv = BuildEnvironment.dev( apiBaseUrl: 'https://domain.dev/api', ); // 放到一个可以全局访问的地方 Get.put(buildEnv); mainCom(); }
-
生产环境 main_release.dart
// lib/main_release.dart void main() async { final buildEnv = BuildEnvironment.release( apiBaseUrl: 'https://domain.release/api', ); // 1. 放到一个可以全局访问的地方 Get.put(buildEnv); mainCom(); }
-
共有代码 main_com.dart
// lib/main_com.dart void mainCom() { runApp(MyApp()); }
运行
-
命令行 配置
flutter run main_dev.dart
-
Android stuio 配置 在配置文件指定运行main_ enviroment.dart 举个例子测试环境
lib/main_dev.dart
-
Vistual studio 配置 .vscode/launch.json
{ "version": "0.2.0", "configurations": [ { " "program": "lib/main_dev.dart", "request": "launch", "type": "dart" }, { "name": "production", "program": "lib/main_prod.dart", "request": "launch", "type": "dart" } ] }
打包
指定想要的环境打包 flutter build -t lib/main_ /enviroment/.dart
Android Build 配置指定环境
由于Android build时gradle默认是找 main.dart 此时你会发现你可能build 失败。 这时你可能需要知道在哪里配置, 经过一顿翻源码, 只需要在 gradle.properties 文件加上如下
# android/gradle.properties
target=lib/main_dev.dart
点赞、关注、Star
参考引用
转载自:https://juejin.cn/post/6907883676097314829