Flutter:使用envied包搭建开发、测试、生产环境
基于envied包实现DEV/TEST/PROD环境区分的两种方案
方案一:多.env文件 + 构建参数(推荐轻量场景)
这种方式无需修改原生项目配置,仅通过文件和构建参数切换环境,适合只需要区分环境变量的场景:
创建环境专属.env文件
在项目根目录创建三个.env文件:.env.dev:开发环境变量(测试API地址、测试密钥等).env.test:测试环境变量.env.prod:生产环境变量
修改Env类的envied配置
通过String.fromEnvironment动态读取构建参数,指定对应.env文件路径:import 'package:envied/envied.dart'; part 'env.g.dart'; // 默认使用dev环境,可通过--dart-define=ENV=xxx切换 @envied(path: '.env.${String.fromEnvironment('ENV', defaultValue: 'dev')}') abstract class Env { @EnviedField(varName: 'KEY') static const key = _Env.key; @EnviedField(varName: 'BASE_URL') static const baseUrl = _Env.baseUrl; }生成对应环境的代码
执行build_runner时通过--define指定环境:# 开发环境 dart run build_runner build --define=ENV=dev # 测试环境 dart run build_runner build --define=ENV=test # 生产环境 dart run build_runner build --define=ENV=prod运行/打包时指定环境
启动项目或打包时传递环境参数:flutter run --dart-define=ENV=dev flutter build apk --dart-define=ENV=prod
方案二:结合Flutter Flavors(适合复杂场景)
如果项目需要为不同环境配置不同的应用图标、名称或原生资源,Flavors是更合适的选择:
配置Flavors
在Android的build.gradle和iOS的project.pbxproj中配置dev、test、prod三个Flavors(具体配置可参考Flutter官方Flavors说明)关联Flavors与.env文件
通过构建模式或Flavor标识匹配对应的.env文件:import 'package:envied/envied.dart'; import 'package:flutter/foundation.dart'; part 'env.g.dart'; String get _envFilePath { // 根据构建模式自动匹配环境 if (kDebugMode) return '.env.dev'; if (kProfileMode) return '.env.test'; return '.env.prod'; // 若需严格绑定Flavor,可通过原生通道传递Flavor名称后判断 } @envied(path: _envFilePath) abstract class Env { @EnviedField(varName: 'KEY') static const key = _Env.key; @EnviedField(varName: 'BASE_URL') static const baseUrl = _Env.baseUrl; }按Flavor运行/打包
针对不同Flavor执行命令:# 运行开发环境Flavor flutter run --flavor dev -t lib/main_dev.dart # 打包生产环境Flavor flutter build apk --flavor prod -t lib/main_prod.dart
方案选择建议
- 仅需区分环境变量:选方案一,配置成本低,切换灵活;
- 需要环境专属资源/配置:选方案二,实现更彻底的环境隔离。
内容的提问来源于stack exchange,提问作者neha patel
相关产品推荐
相关产品推荐

