我正在寻找一种在应用程序处于调试模式时在Flutter中执行代码的方法。在颤振有可能吗?我在文件里找不到。
就像这样
If(app.inDebugMode) {
print("Print only in debug mode");
}
如何检查Flutter应用程序是运行在调试模式还是发布模式?
我正在寻找一种在应用程序处于调试模式时在Flutter中执行代码的方法。在颤振有可能吗?我在文件里找不到。
就像这样
If(app.inDebugMode) {
print("Print only in debug mode");
}
如何检查Flutter应用程序是运行在调试模式还是发布模式?
当前回答
摘自Dart文档:
断言到底在什么时候起作用?这取决于工具和 你正在使用的框架: Flutter在调试模式下启用断言。 仅用于开发的工具(如dartdevc)通常默认启用断言。 有些工具,如dart和dart2js,通过命令行标志——enable- assertions来支持断言。 在产品代码中,断言将被忽略,而参数将被忽略 Assert没有被求值。
其他回答
我创建了这个有用的类,基于其他答案和Android使用的启发。 如果“Foundation”包上有任何更改,则不需要更改整个应用程序,只需要更改这个类。
import 'package:flutter/foundation.dart' as Foundation;
abstract class Build {
static const bool isDebugMode = Foundation.kDebugMode;
static const bool isReleaseMode = Foundation.kReleaseMode;
static const bool isWeb = Foundation.kIsWeb;
static const bool isProfileMode = Foundation.kProfileMode;
}
在以后的版本中,你可以使用kDebugMode:
if (kDebugMode)
doSomething();
虽然在技术上可以使用断言手动创建“is调试模式”变量,但应该避免这样做。
相反,使用package:flutter/foundation.dart中的常量kReleaseMode
区别就在于摇树。
摇树(即编译器删除未使用的代码)依赖于变量是常量。
问题是,通过断言,我们的isInReleaseMode布尔值不是常量。所以在发布我们的应用时,开发代码和发布代码都包含在内。
另一方面,kReleaseMode是一个常量。因此,编译器能够正确地删除未使用的代码,我们可以安全地做:
if (kReleaseMode) {
} else {
// Will be tree-shaked on release builds.
}
创建一个名为constants.dart的文件。把这些变量加进去:
const bool kReleaseMode = bool.fromEnvironment('dart.vm.product');
const bool kProfileMode = bool.fromEnvironment('dart.vm.profile');
const bool kDebugMode = !kReleaseMode && !kProfileMode;
printk(String string) {
if (kDebugMode) {
// ignore: avoid_print
print(string);
}
}
然后在任何其他文件中导入这个常量文件,并像这样使用它:
import 'package:package_name/constants.dart';
if(kDebugMode){
//Debug code
}else{
//Non-Debug code
}
printk("Debug Log");
我相信最新的做法是:
const bool prod = const bool.fromEnvironment('dart.vm.product');
src
摘自Dart文档:
断言到底在什么时候起作用?这取决于工具和 你正在使用的框架: Flutter在调试模式下启用断言。 仅用于开发的工具(如dartdevc)通常默认启用断言。 有些工具,如dart和dart2js,通过命令行标志——enable- assertions来支持断言。 在产品代码中,断言将被忽略,而参数将被忽略 Assert没有被求值。