flutter/dart配置多环境

120 阅读1分钟

env.dart

class EnvConfig {
  final String appTitle;
  final String appDomain;
  EnvConfig({
    required this.appTitle,
    required this.appDomain,
  });
}

class Env {
  // 获取到当前环境
  static const appEnv = String.fromEnvironment(EnvName.envKey);

  // 开发环境
  static final EnvConfig _debugConfig = EnvConfig(
    appTitle: "debugTitle",
    appDomain: "http://www.debugxxx.com",
  );
  // 发布环境
  static final EnvConfig _releaseConfig = EnvConfig(
    appTitle: "releaseTitle",
    appDomain: "http://www.releasexxx.com",
  );
  // 测试环境
  static final EnvConfig _testConfig = EnvConfig(
    appTitle: "testTitle",
    appDomain: "http://www.testxxx.com",
  );

  static EnvConfig get envConfig => _getEnvConfig();

// 根据不同环境返回对应的环境配置
  static EnvConfig _getEnvConfig() {
    switch (appEnv) {
      case EnvName.debug:
        return _debugConfig;
      case EnvName.release:
        return _releaseConfig;
      case EnvName.test:
        return _testConfig;
      default:
        return _debugConfig;
    }
  }
}

// 声明的环境
abstract class EnvName {
  // 环境key
  static const String envKey = "DART_DEFINE_APP_ENV";
  // 环境value
  static const String debug = "debug";
  static const String release = "release";
  static const String test = "test";
}

test.dart

import 'package:demo_01/env.dart';

void main() {
  print(Env.envConfig.appTitle);
}

运行:

dart run  --define=DART_DEFINE_APP_ENV=test .\test.dart 
testTitle
dart run  --define=DART_DEFINE_APP_ENV=release .\test.dart 
releaseTitle
dart run  .\test.dart  
debugTitle

参考资料

拒绝魔改,Flutter动态配置多环境 - 掘金 (juejin.cn)

dart_define - Dart API docs (pub.dev)