本文主要针对纯flutter项目的多环境配置,如果是基于原生项目的多环境需求,可以参考使用
Channel
在
flutter项目初始化的时候向原生代码获取项目的环境信息。
主要有两种方式:换启动文件、使用–dart-define
基于换入口文件方式
我们可以指定不同的启动文件,并在相应的main
函数中,指定环境变量。
- 新建各环境的启动文件
main_dev.dart
、main_pro.dart
/// lib/main_dev.dart
void main() {
// 设置开发环境
Config.env = Env.DEV;
runApp(MyApp());
}
/// lib/main_pro.dart
void main() {
// 设置生产环境
Config.env = Env.PRO;
runApp(MyApp());
}
- 配置类
enum Env {
PRO,
DEV,
}
/// 环境配置类
class Config {
static Env? env;
static String get apiHost {
switch (env) {
case Env.PRO:
return "http://pro.com";
case Env.DEV:
return "http://develop.com";
default:
return "default";
}
}
}
- 运行
- 命令行
flutter run -t lib/main_pro.dart
-
AS
更改Edit Configuration
-
VSCode
新建.vscode/launch.json
, 之后在Run and Debug
窗口,选择相关配置项运行
{
"version": "0.2.0",
"configurations": [
{
"name": "",
"request": "launch",
"type": "dart",
"args": [
"-t lib/main_pro.dart",
]
}
]
}
- 打包
- android
flutter build apk -t lib/main_pro.dart
如果打生产包的话,还需要先配置证书
- ios
第一步:
flutter build ios -t lib/main_pro.dart
第二步:
用XCode打开iOS项目,配置完相关证书,然后打包Product - Archive,选择Distrubiion,打包完毕后,可以通过Window - Devices and Simulta
基于–dart-define实现
用多文件虽然能解决问题,但实现起来不够优雅,Flutter 1.17开始支持使用–dart-define,以键值对的形式传入编译参数
- main函数中获取参数
/// lib/mian.dart
void main() {
const env = String.fromEnvironment("APP_ENV", defaultValue: "DEV");
Config.env = Config.ConfigFromString(env);
runApp(MyApp());
}
- 运行
flutter run --dart-define=APP_ENV=PRO
也可以传入多个值,将应用名称、版本号直接通过命令行参数,传入方便Jenkins CI
flutter run --dart-define=APP_NAME=test --dart-define=VERSION_CODE=111
- AS
同上,更改Edit Configuration
- 打包
- android
先配置证书,然后
flutter build apk --dart-define=APP_ENV=PRO
- iOS
flutter build ios --dart-define=APP_ENV=PRO
然后同上第二步,打开XCode,Archive