如何在各平台的Flutter代码中读取--flavor参数值?
在任意Flutter平台读取--flavor参数值的方案
核心思路:通过编译时注入环境变量实现跨平台读取
Flutter本身没有提供直接跨平台读取--flavor参数的API,但可以通过注入环境变量的方式,让所有Flutter支持的平台(Android、iOS、Web、Windows、macOS、Linux)都能获取到flavor名称,具体步骤如下:
1. 构建/运行时同步传递flavor值
使用--dart-define参数配合--flavor一起传递flavor标识,确保两者值一致:
# 开发环境运行命令 flutter run --flavor dev --dart-define=FLAVOR=dev # 生产环境构建APK命令 flutter build apk --flavor prod --dart-define=FLAVOR=prod # Web平台构建命令 flutter build web --flavor staging --dart-define=FLAVOR=staging
2. 在Flutter代码中统一读取环境变量
通过Dart内置的String.fromEnvironment方法读取注入的flavor值,该方法支持所有Flutter平台:
// 封装获取flavor的方法,设置默认值避免无注入时出错 String getCurrentFlavor() { return const String.fromEnvironment('FLAVOR', defaultValue: 'production'); } // 使用示例 void main() { final flavor = getCurrentFlavor(); print('当前环境: $flavor'); // 根据flavor执行不同逻辑 switch (flavor) { case 'dev': // 初始化开发环境配置 break; case 'staging': // 初始化预发布环境配置 break; default: // 初始化生产环境配置 break; } }
3. 简化命令的小技巧
为了避免每次输入重复的参数,可以在项目根目录创建Makefile或自定义脚本,统一管理不同flavor的命令:
# Makefile示例 run-dev: flutter run --flavor dev --dart-define=FLAVOR=dev build-prod-ios: flutter build ios --flavor prod --dart-define=FLAVOR=prod run-staging-web: flutter run -d chrome --flavor staging --dart-define=FLAVOR=staging
之后只需执行make run-dev这类简短命令,就能快速启动对应环境的项目。
补充说明
- 这种方式的优势是完全跨平台,不需要为不同平台单独编写原生配置代码,统一通过Dart层处理即可。
- 如果原生代码(Android/iOS)也需要使用flavor值,可以保持与Dart侧一致的环境变量注入逻辑,再通过原生方式读取(比如Android的
BuildConfig、iOS的Info.plist配置)。
内容的提问来源于stack exchange,提问作者hurelhuyag
相关产品推荐
相关产品推荐

