Переменные окружения
На этой странице описаны переменные окружения времени компиляции, используемые в пакетах DUIT, и способы их включения/отключения в разных сценариях сборки и запуска.
Все перечисленные ниже переменные — это константы времени компиляции, получаемые через bool.fromEnvironment, то есть они вычисляются на этапе сборки и должны передаваться через флаги инструментов сборки.
Доступные переменные
duit:throw-on-unspecified-widget-type
- Пакет:
flutter_duit - Тип:
bool(compile-time) - Значение по умолчанию:
true - Назначение: при встрече неизвестного типа виджета выбрасывает
ArgumentError(еслиtrue) вместо возврата пустого fallback‑виджета (еслиfalse). Полезно в разработке, чтобы рано выявлять проблемы схемы/модели.
duit:enable-warm-up
- Пакет:
duit_kernel - Тип:
bool(compile-time) - Значение по умолчанию:
false - Назначение: включает тёплый старт (warm‑up) атрибутов. При включении ядро может предварительно инициализировать структуры, связанные с атрибутами, чтобы уменьшить задержку первого использования.
duit:prefer-inline
- Пакет:
duit_kernel - Тип:
bool(compile-time) - Значение по умолчанию:
true - Назначение: предпочитает inline‑стратегии для функций в ядре там, где это поддерживается. Предназначено для тонкой настройки производительности и экспериментов.
duit:allow-focus-node-override
- Пакет:
flutter_duit - Тип:
bool(compile-time) - Значение по умолчанию:
false - Назначение: определяет поведение при привязке
FocusNodeк драйверу, если происходит попытка повторной привязки ноды с одним и тем ееnodeId.
Как задавать значения
Это флаги времени компиляции — их нужно передавать в команды сборки/запуска/тестов.
Dart
Для команд Dart CLI используйте -Dkey=value (или --define=key=value).
Запуск консольного приложения:
dart run -Dduit:enable-warm-up=true -Dduit:prefer-inline=true
Запуск Dart‑тестов:
dart test -Dduit:enable-warm-up=true
Flutter (run/build/test)
Для команд Flutter CLI используйте --dart-define.
Запуск приложения:
fvm flutter run -d macos \
--dart-define=duit:throw-on-unspecified-widget-type=false \
--dart-define=duit:enable-warm-up=true \
--dart-define=duit:prefer-inline=true
Сборка релиза (пример для iOS/Android/Web):
# Android APK
fvm flutter build apk \
--dart-define=duit:throw-on-unspecified-widget-type=true \
--dart-define=duit:enable-warm-up=true
# iOS
flutter build ios \
--dart-define=duit:prefer-inline=true
# Web
flutter build web \
--dart-define=duit:enable-warm-up=true \
--dart-define=duit:prefer-inline=true
Запуск тестов:
flutter test \
--dart-define=duit:throw-on-unspecified-widget-type=false
Рекомендации
- Комбинируйте несколько
--dart-defineпо необходимости — переменные независимы. - Передавайте флаги единообразно в CI, локальных запусках и разных таргетах, чтобы избежать расхождений поведения.
- При изменении значения выполните «чистую» пересборку, чтобы новое значение гарантированно попало во все артефакты.