Могу ли я использовать пользовательские переменные среды в Flutter?

#flutter #dart

#flutter #dart

Вопрос:

Я хочу настроить нашу библиотеку ведения журналов иначе, чем мои коллеги, и я не хочу рисковать проверкой своей локальной конфигурации, т.е.:

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

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

Я, конечно, могу вручную исключать эти строки каждый раз, когда я делаю коммит, но рано или поздно я забуду это сделать.

Каков наилучший способ защиты от случайной проверки и запуска этого кода на компьютерах моих коллег? Есть ли какой-либо способ автоматической проверки переменных среды в Flutter / Dart (что-то вроде kDebugMode / kReleaseMode , но я могу настроить только на своем локальном компьютере)?

Кстати, я использую IntelliJ.

Ответ №1:

Вы можете использовать переменные среды во время компиляции:

--dart-define

flutter run (и другие команды сборки) позволяют передавать переменные среды с помощью --dart-define .
Синтаксис для этого будет примерно таким:

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

.fromEnvironment

Вы можете использовать три предопределенных средства получения среды: String.fromEnvironment (базовая функция), int.fromEnvironment , и bool.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
  

Примечание

Переменные среды работают только с const модификатором в dart2js (сборки веб-релизов), потому что они работают только как константы времени компиляции, а не как средства получения во время выполнения. См. Вопрос GitHub для справки.

Комментарии:

1.Вероятно, в ответе следует упомянуть, что это будет работать только при использовании const String.fromEnvironment() . См. [github.com/dart-lang/sdk/issues/42177 ]. Неиспользование const всегда приводило к значениям по умолчанию для меня.

2. @MagnusW Правильно! Я добавил это 🙂 Обратите внимание, что это относится только к dart2js.

3. Отлично! Хотя, похоже, это влияет на мое приложение Flutter, когда я запускаю его и на Android?