flutter工程中如何实现动态环境配置
在Flutter项目中,如何实现不同环境(开发/测试/生产)的动态配置?比如想通过一个配置文件自动切换API域名、应用图标等资源,但不想每次打包都手动修改代码。目前看到有–dart-define和flavor两种方案,不知道哪种更适合中小型项目?求推荐具体的实现方法和注意事项。
2 回复
在Flutter中实现动态环境配置,可通过以下步骤:
- 创建不同环境的配置文件(如
dev.json、prod.json)。 - 使用
flutter_dotenv包加载环境变量。 - 通过
--dart-define命令行参数传递环境标识。 - 在代码中根据环境加载对应配置。
示例:
flutter run --dart-define=ENV=prod
更多关于flutter工程中如何实现动态环境配置的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现动态环境配置,可以通过以下几种方式:
1. 使用不同配置文件
创建多个配置文件:
// lib/config/dev_config.dart
const config = {
'apiUrl': 'https://dev.api.com',
'debug': true,
};
// lib/config/prod_config.dart
const config = {
'apiUrl': 'https://api.com',
'debug': false,
};
2. 使用环境变量和编译参数
在 main.dart 中:
import 'config/dev_config.dart' as dev;
import 'config/prod_config.dart' as prod;
void main() {
const bool isProduction = bool.fromEnvironment('dart.vm.product');
final config = isProduction ? prod.config : dev.config;
runApp(MyApp(config: config));
}
3. 使用 flutter_dotenv 包
安装依赖:
dependencies:
flutter_dotenv: ^5.0.2
创建 .env 文件:
API_URL=https://api.example.com
DEBUG=true
使用:
import 'package:flutter_dotenv/flutter_dotenv.dart';
await dotenv.load();
String apiUrl = dotenv.get('API_URL');
4. 使用 flavors(风味)
在 android/app/build.gradle 中配置:
android {
flavorDimensions "env"
productFlavors {
dev {
dimension "env"
applicationIdSuffix ".dev"
}
prod {
dimension "env"
}
}
}
运行命令:
flutter run --flavor dev
flutter build apk --flavor prod
5. 推荐的综合方案
class AppConfig {
final String apiBaseUrl;
final bool isDebug;
AppConfig({required this.apiBaseUrl, required this.isDebug});
static AppConfig get instance {
const bool isProduction = bool.fromEnvironment('dart.vm.product');
if (isProduction) {
return AppConfig(
apiBaseUrl: 'https://api.prod.com',
isDebug: false,
);
} else {
return AppConfig(
apiBaseUrl: 'https://api.dev.com',
isDebug: true,
);
}
}
}
选择哪种方式取决于项目复杂度,简单项目推荐使用环境变量,复杂项目建议使用 flavors 配合配置文件。

