flutter如何动态配置多环境

在Flutter项目中,如何实现多环境的动态配置?比如开发、测试、生产等不同环境需要切换不同的API地址、应用图标和其他配置项。目前官方文档提到的基本配置方式比较静态,想了解是否有更灵活的方案,能够在不重新打包的情况下动态切换环境?最好能支持通过命令行或配置文件快速切换,同时避免在代码中硬编码环境变量。有没有成熟的插件或最佳实践可以推荐?

2 回复

使用Flutter配置多环境,可通过定义不同配置文件和启动参数实现。常用方法:

  1. 创建多个配置文件(如dev.json、prod.json)
  2. 使用–dart-define传入环境变量
  3. 在代码中根据环境加载对应配置

示例启动命令: flutter run --dart-define=ENV=dev

更多关于flutter如何动态配置多环境的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 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 方式。

回到顶部