我可以在Flutter中使用自定义环境变量吗?

时间:2020-09-28 14:59:13

标签: flutter dart

我想配置日志库的方式与同事不同,并且我不想冒险检查本地配置,即:

void main() {
  LOG.minLevel = Logger.VERBOSE;
  LOG.showSymbols = false;

  runApp( RestartWidget(child: ResponsApp()) );
}

我当然可以在每次提交时手动排除这些行,但我迟早会忘记这样做。

防止此代码意外签入并在同事计算机上运行的最佳方法是什么?有什么方法可以静默地检查Flutter / Dart中的环境变量(类似kDebugMode / kReleaseMode,但只能在本地计算机上自定义)?

我正在使用IntelliJ btw。

1 个答案:

答案 0 :(得分:2)

您可以使用编译时环境变量:

--dart-define

flutter run(和其他构建命令)允许您使用--dart-define传递环境变量。
语法如下:

flutter run --dart-define=VARIABLE_ONE=test --dart-define=VARIABLE_TWO=42

.fromEnvironment

您可以使用三个预定义的环境获取器:String.fromEnvironment(基本函数),int.fromEnvironmentbool.fromEnvironment

第一个参数是变量名,第二个参数是后备值。

代码中的用法

因此,如果要使用不同的日志模式,可以执行以下操作:

void main() {
  switch (const String.fromEnvironment('MIN_LOG_LEVEL', 'verbose')) {
    case 'verbose':
       LOG.minLevel = Logger.VERBOSE;
       break;
    case 'info':
       ..
       break;
    ...
  }

  ...
}

运行时的用法

flutter run --dart-define=MIN_LOG_LEVEL=info

注意

环境变量仅在dart2js(网络发行版)中与const修饰符一起使用,因为它们仅作为编译时常量而不是运行时获取程序。参见GitHub issue for reference