У меня короткий вопрос. Я ищу способ выполнить код во Flutter, когда приложение находится в режиме отладки. Возможно ли такое во Flutter? Кажется, я не могу найти его в документации.
Что-то вроде этого
If(app.inDebugMode) {
print("Print only in debug mode");
}
Как проверить, работает ли приложение flutter в режиме отладки или выпуска?
flutter
debugging
dart
flutter-run
flutter-debug
Кевин Уолтер
источник
источник
Ответы:
Хотя это работает, предпочтительно использовать константы
kReleaseMode
илиkDebugMode
. См . Ответ Реми ниже для полного объяснения, который, вероятно, должен быть принятым вопросом.Самый простой способ - использовать,
assert
поскольку он работает только в режиме отладки.Вот пример из исходного кода Flutter's Navigator:
assert(() { if (navigator == null && !nullOk) { throw new FlutterError( 'Navigator operation requested with a context that does not include a Navigator.\n' 'The context used to push or pop routes from the Navigator must be that of a ' 'widget that is a descendant of a Navigator widget.' ); } return true; }());
Обратите внимание, в частности,
()
в конце вызова - assert может работать только с логическим значением, поэтому простая передача функции не работает.источник
() { .... }
вы определяете функцию, но не вызываете ее. Добавление()
фактически вызывает функцию.Хотя утверждения технически работают, вы не должны их использовать.
Вместо этого используйте константу
kReleaseMode
изpackage:flutter/foundation.dart
Вся разница в тряске деревьев
Встряхивание дерева (также известное как компилятор, удаляющее неиспользуемый код) зависит от того, являются ли переменные константами.
Проблема в том, что с asserts наше
isInReleaseMode
логическое значение не является константой. Поэтому при отправке нашего приложения включены как код разработки, так и код выпуска.С другой стороны,
kReleaseMode
является константой. Поэтому компилятор может правильно удалить неиспользуемый код, и мы можем безопасно:if (kReleaseMode) { } else { // Will be tree-shaked on release builds. }
источник
import 'package:flutter/foundation.dart' as Foundation;
Foundation. kReleaseMode
kDebugMode
эти маленькие фрагменты должны делать то, что вам нужно
bool get isInDebugMode { bool inDebugMode = false; assert(inDebugMode = true); return inDebugMode; }
если нет, вы можете настроить свою IDE для запуска другого
main.dart
в режиме отладки, где вы можете установить логическое значение.источник
Application
класс, чтобы я мог писатьApplication.isInDebugMode
там, где мне это нужно.Вот простое решение:
import 'package:flutter/foundation.dart';
тогда вы можете использовать
kReleaseMode
какif(kReleaseMode){ // is Release Mode ?? print('release mode'); } else { print('debug mode'); }
источник
Не привередничать, но в фундаментный пакет входит
kDebugMode
константа; Так :import 'package:flutter/foundation.dart' as Foundation; if(Foundation.kDebugMode) { print("App in debug mode"); }
источник
kDebugMode
Теперь вы можете использовать
kDebugMode
константу .if (kDebugMode) { // Code here will only be included in debug mode. // As kDebugMode is a constant, the tree shaker // will remove the code entirely from compiled code. } else { }
Это предпочтительнее, так
!kReleaseMode
как он также проверяет режим профиля, то естьkDebugMode
означает, что не в режиме выпуска и не в режиме профиля .kReleaseMode
Если вы просто хотите проверить режим выпуска, а не режим профиля, вы можете
kReleaseMode
вместо этого использовать :if (kReleaseMode) { // Code here will only be run in release mode. // As kReleaseMode is a constant, the tree shaker // will remove the code entirely from other builds. } else { }
kProfileMode
Если вы просто хотите проверить режим профиля, а не режим выпуска, вы можете
kProfileMode
вместо этого использовать :if (kProfileMode) { // Code here will only be run in release mode. // As kProfileMode is a constant, the tree shaker // will remove the code entirely from other builds. } else { }
источник
Это два шага, чтобы узнать, в каком режиме работает приложение.
Добавьте следующий импорт для получения
import 'package:flutter/foundation.dart' as Foundation;
И
kReleaseMode
проверьте, в каком режиме работает приложениеif(Foundation.kReleaseMode){ print('app release mode'); } else { print('App debug mode'); }
источник
Я считаю, что последний способ сделать это:
const bool prod = const bool.fromEnvironment('dart.vm.product');
src
источник
Извлечено из документации Dart :
источник