实现不同环境加载不同的配置?

来源:14-3 开发Flutter包和插件的流程步骤

Daniyar

2025-01-24

老师,我们开发的过程中会遇到各环境加载不同的配置。比如,在开发环境中后端接口地址为http://localhost:8080/api,在测试环境中可能是http://192.168.XXX.XXX:8081/api。最后打包发布应用的时候可能会是https://api.domain.com。除了接口URL地址之外可能还有很多的配置,如何优雅的解决这个问题 ?

写回答

1回答

CrazyCodeBoy

2025-01-25

为了解决开发中加载不同环境配置的问题,您可以通过以下方法实现环境配置的优雅管理:


---

方法 1: 使用 dart-define

在构建 Flutter 应用时,可以使用 --dart-define 传递环境变量。根据环境注入不同的配置。

步骤

1. 创建配置文件 在项目根目录创建一个配置文件,例如 config.dart:

class Config {
  static const apiUrl = String.fromEnvironment('API_URL');
  static const environment = String.fromEnvironment('ENVIRONMENT');
}


2. 运行命令传递变量

开发环境:

flutter run --dart-define=API_URL=http://localhost:8080/api --dart-define=ENVIRONMENT=development

测试环境:

flutter run --dart-define=API_URL=http://192.168.xxx.xxx:8081/api --dart-define=ENVIRONMENT=test

生产环境:

flutter build apk --dart-define=API_URL=https://api.domain.com --dart-define=ENVIRONMENT=production



3. 在代码中使用

void main() {
  print('Environment: ${Config.environment}');
  print('API URL: ${Config.apiUrl}');
}




---

方法 2: 使用环境配置文件

根据不同环境定义多个配置文件,并在运行时加载对应配置。

步骤

1. 创建配置文件 在 lib 目录下创建配置文件夹 config/,并创建以下文件:

config_dev.dart


const config = {
  'apiUrl': 'http://localhost:8080/api',
  'environment': 'development',
};

config_test.dart


const config = {
  'apiUrl': 'http://192.168.xxx.xxx:8081/api',
  'environment': 'test',
};

config_prod.dart


const config = {
  'apiUrl': 'https://api.domain.com',
  'environment': 'production',
};


2. 通过文件管理加载配置 在 main.dart 中,根据环境条件加载对应配置:

import 'config/config_dev.dart' as devConfig;
import 'config/config_test.dart' as testConfig;
import 'config/config_prod.dart' as prodConfig;

Map<String, String> getConfig(String env) {
  switch (env) {
    case 'test':
      return testConfig.config;
    case 'production':
      return prodConfig.config;
    default:
      return devConfig.config;
  }
}

void main() {
  const environment = String.fromEnvironment('ENVIRONMENT', defaultValue: 'development');
  final config = getConfig(environment);
  print('Environment: ${config['environment']}');
  print('API URL: ${config['apiUrl']}');
}


3. 运行命令传递环境

开发环境:

flutter run --dart-define=ENVIRONMENT=development

测试环境:

flutter run --dart-define=ENVIRONMENT=test

生产环境:

flutter build apk --dart-define=ENVIRONMENT=production





---

方法 3: 第三方库辅助管理

使用第三方库如 flutter_dotenv 管理环境配置。

步骤

1. 添加依赖 在 pubspec.yaml 中添加:

dependencies:
  flutter_dotenv: ^5.0.2


2. 创建 .env 文件 在项目根目录下创建 .env 文件:

API_URL=http://localhost:8080/api
ENVIRONMENT=development


3. 加载和使用配置 在 main.dart 中:

import 'package:flutter_dotenv/flutter_dotenv.dart';

void main() async {
  await dotenv.load();
  final apiUrl = dotenv.env['API_URL'];
  final environment = dotenv.env['ENVIRONMENT'];
  print('Environment: $environment');
  print('API URL: $apiUrl');
}


4. 为不同环境创建 .env 文件 创建 .env.test 和 .env.prod 文件,并在运行时加载对应的文件:

flutter run --dart-define=ENV_FILE=.env.test




---

总结

优雅推荐:dart-define 是最灵活和原生的方式,适合大型项目。

适合中小型项目:环境配置文件结合 flutter_dotenv 简单易用。

动态加载:根据文件路径加载配置适合多人协作场景。


根据项目需求选择最适合的方式来实现不同环境的配置管理。

2
1
Daniyar
好的,谢谢老师
2025-01-26
共1条回复

慕课甄选-Flutter零基础极速入门到进阶实战

全新Flutter从入门到进阶,实战仿携程网App

661 学习 · 316 问题

查看课程