在 Flutter 中动态配置多环境,可以通过以下方法实现:
1. 使用 --dart-define 参数
运行应用时通过命令行传递环境变量:
flutter run --dart-define=ENV=prod --dart-define=API_URL=https://api.example.com
在代码中读取配置:
const env = String.fromEnvironment('ENV', defaultValue: 'dev');
const apiUrl = String.fromEnvironment('API_URL', defaultValue: 'https://dev.api.example.com');
2. 配置文件 + 条件导入
创建多个配置文件:
config_dev.dart
config_prod.dart
config_staging.dart
主配置文件 config.dart:
abstract class Config {
String get apiUrl;
String get appName;
}
class DevConfig implements Config {
@override String get apiUrl => 'https://dev.api.example.com';
@override String get appName => 'MyApp Dev';
}
在 main.dart 中根据环境选择配置:
import 'config.dart';
void main() {
const env = String.fromEnvironment('ENV', defaultValue: 'dev');
Config config;
switch (env) {
case 'prod':
config = ProdConfig();
break;
case 'staging':
config = StagingConfig();
break;
default:
config = DevConfig();
}
runApp(MyApp(config: config));
}
3. 使用 flutter_dotenv 包
添加依赖:
dependencies:
flutter_dotenv: ^5.0.2
创建 .env 文件:
API_URL=https://dev.api.example.com
APP_NAME=MyApp Dev
在 main.dart 中加载:
import 'package:flutter_dotenv/flutter_dotenv.dart';
void main() async {
await dotenv.load(fileName: ".env");
runApp(MyApp());
}
// 使用配置
String apiUrl = dotenv.get('API_URL');
4. 通过不同 Flavor 配置
在 android/app/build.gradle 中配置:
android {
flavorDimensions "environment"
productFlavors {
dev {
dimension "environment"
applicationIdSuffix ".dev"
}
prod {
dimension "environment"
}
}
}
在 iOS 中通过 Scheme 配置。
运行指定环境:
flutter run --flavor dev
最佳实践建议:
- 开发环境使用
--dart-define
- 复杂配置使用 Flavor + 配置文件
- 敏感信息使用
.env 并加入 .gitignore
- 通过 CI/CD 自动注入环境变量
选择适合项目规模的方法,小型项目推荐 --dart-define,企业级项目建议使用 Flavor 方式。