#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?