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

2024-01-08

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

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

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

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

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

顺便说一句,我正在使用 IntelliJ。


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

--dart-define

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

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

.fromEnvironment

您可以使用三个预定义的环境 getter:String.fromEnvironment https://api.dart.dev/stable/2.9.3/dart-core/String/String.fromEnvironment.html(基函数),int.fromEnvironment https://api.dart.dev/stable/2.9.3/dart-core/int/int.fromEnvironment.html, and bool.fromEnvironment https://api.dart.dev/stable/2.9.3/dart-core/bool/bool.fromEnvironment.html.

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

代码中的用法

因此,如果你想要不同的日志模式,你可以这样做:

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

Note

环境变量仅适用于constdart2js(Web 发布版本)中的修饰符,因为它们仅用作编译时常量,而不用作运行时 getter。请参阅GitHub问题供参考 https://github.com/dart-lang/sdk/issues/42177#issuecomment-638696158.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 Flutter 中使用自定义环境变量吗? 的相关文章