flutter工程中如何实现动态环境配置

在Flutter项目中,如何实现不同环境(开发/测试/生产)的动态配置?比如想通过一个配置文件自动切换API域名、应用图标等资源,但不想每次打包都手动修改代码。目前看到有–dart-define和flavor两种方案,不知道哪种更适合中小型项目?求推荐具体的实现方法和注意事项。

2 回复

在Flutter中实现动态环境配置,可通过以下步骤:

  1. 创建不同环境的配置文件(如dev.jsonprod.json)。
  2. 使用flutter_dotenv包加载环境变量。
  3. 通过--dart-define命令行参数传递环境标识。
  4. 在代码中根据环境加载对应配置。

示例:

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 配合配置文件。

回到顶部