我有一个简短的问题。我正在寻找一种在应用程序处于调试模式时在Flutter中执行代码的方法。在Flutter中有可能吗?我似乎在文档的任何地方都找不到它。
像这样
If(app.inDebugMode) {
print("Print only in debug mode");
}
如何检查Flutter应用程序是否以调试或发布模式运行?
我有一个简短的问题。我正在寻找一种在应用程序处于调试模式时在Flutter中执行代码的方法。在Flutter中有可能吗?我似乎在文档的任何地方都找不到它。
像这样
If(app.inDebugMode) {
print("Print only in debug mode");
}
如何检查Flutter应用程序是否以调试或发布模式运行?
Answers:
虽然这可行,但最好使用常量kReleaseMode
或kDebugMode
。有关完整的解释,请参见下面的Rémi答案,这可能是公认的问题。
最简单的方法是使用assert
它,因为它仅在调试模式下运行。
这是Flutter的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
区别在于摇树
摇树(也就是编译器删除未使用的代码)取决于变量是常量。
问题在于,断言我们的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
在需要的地方写。
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');
}