Flutter 如何检查颤振应用程序是否在调试中运行?
我有一个简短的问题。我正在寻找一种在应用程序处于调试模式时以Flutter方式执行代码的方法。这在颤振中是可能的吗?我似乎在文档中的任何地方都找不到它 像这样的Flutter 如何检查颤振应用程序是否在调试中运行?,flutter,debugging,dart,flutter-run,flutter-debug,Flutter,Debugging,Dart,Flutter Run,Flutter Debug,我有一个简短的问题。我正在寻找一种在应用程序处于调试模式时以Flutter方式执行代码的方法。这在颤振中是可能的吗?我似乎在文档中的任何地方都找不到它 像这样的 If(app.inDebugMode) { print("Print only in debug mode"); } 如何检查颤振应用程序是否在调试或发布模式下运行? 当这起作用时,最好使用常量kReleaseMode或kDebugMode。请参阅下面的完整解释,这可能是公认的问题 最简单的方法是使用ass
If(app.inDebugMode) {
print("Print only in debug mode");
}
如何检查颤振应用程序是否在调试或发布模式下运行?当这起作用时,最好使用常量
kReleaseMode
或kDebugMode
。请参阅下面的完整解释,这可能是公认的问题
最简单的方法是使用
assert
,因为它只在调试模式下运行
下面是来自Flatter的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只能对布尔值进行操作,因此仅传入函数是不起作用的。Update
请将Remi的答案与kReleaseMode
和kDebugMode
一起使用,否则Dart编译将无法对代码进行树震动
这些小片段应该可以满足您的需要
bool get isInDebugMode {
bool inDebugMode = false;
assert(inDebugMode = true);
return inDebugMode;
}
如果没有,您可以将IDE配置为在调试模式下启动不同的
main.dart
,您可以在其中设置布尔值。这里有一个简单的解决方案:
import 'package:flutter/foundation.dart';
然后您可以像这样使用kReleaseMode
if(kReleaseMode){ // is Release Mode ??
print('release mode');
} else {
print('debug mode');
}
虽然断言在技术上有效,但不应使用它们 相反,使用
包中的常量kReleaseMode
:flatter/foundation.dart
区别在于树木的晃动 树抖动(即编译器删除未使用的代码)取决于变量是否为常量 问题是,对于断言,我们的
isInReleaseMode
boolean不是一个常量。因此,在发布我们的应用程序时,同时包含了开发代码和发布代码
另一方面,kReleaseMode
是一个常数。因此,编译器能够正确地删除未使用的代码,我们可以安全地执行以下操作:
if (kReleaseMode) {
} else {
// Will be tree-shaked on release builds.
}
不挑剔,但基础包包括<代码> kDebug模式< /代码>常数; 因此:
从Dart中提取: 断言什么时候起作用?这取决于工具和工具 您正在使用的框架:- 颤振在调试模式下启用断言李>
- 默认情况下,只有开发工具(如dartdevc)才能启用断言李>
- 有些工具,如dart和dart2js,通过命令行标志支持断言:--启用断言
if(kDebugMode){
//此处的代码将仅包含在调试模式中。
//由于kDebugMode是一个常数,因此树震动器
//将从编译后的代码中完全删除代码。
}否则{
}
这比更可取!kReleaseMode
还检查配置文件模式,即kDebugMode
表示未处于释放模式和未处于配置文件模式
如果您只想检查释放模式而不想检查配置文件模式,则可以使用kReleaseMode
:
if(kReleaseMode){
//此处的代码将仅在发布模式下运行。
//因为kReleaseMode是一个常数,所以摇树器
//将从其他版本中完全删除代码。
}否则{
}
如果您只想检查配置文件模式而不想检查发布模式,则可以改用kProfileMode
:
if(kProfileMode){
//此处的代码将仅在发布模式下运行。
//由于kProfileMode是一个常数,树震动器
//将从其他版本中完全删除代码。
}否则{
}
我认为最新的方法是:
const bool prod = const bool.fromEnvironment('dart.vm.product');
这是确定应用程序运行模式的两个步骤
import 'package:flutter/foundation.dart' as Foundation;
kReleaseMode
检查应用程序运行的模式
if(Foundation.kReleaseMode){
print('app release mode');
} else {
print('App debug mode');
}
我尝试了断言((){print(“Debug mode”);return true;});但这只是给了我一个无法编译的错误。他们稍后在帖子中谈论的“个人资料”对我来说没有多大意义。你能解释一下如何使用它吗?“特别注意”是我的IDE被绊倒的部分。非常感谢你!当您编写
(){..}
时,您正在定义函数,但没有调用它。添加()
实际上调用了该函数。我将其作为静态函数放在应用程序
类中,这样我就可以编写应用程序。isInDebugMode
在我需要它的地方。非常优雅,在我的应用程序中实现了这一点。还有一个小提示,为了避免污染,您的未知类导入如下:代码>导入包:颤动/基础。代码>然后你就可以做Foundation了。kReleaseMode
到目前为止情况如何,这应该是公认的答案!还有kDebugMode
小部件也会发生树抖动吗?因此,如果我使用visible:kDebugMode创建了一个可见性小部件,那么编译器会在发布版本中删除该小部件吗?我们还可以知道.apk是否使用相同的常量签名signingConfigs.debug
?
if(Foundation.kReleaseMode){
print('app release mode');
} else {
print('App debug mode');
}