我有一个简短的问题。当应用程序处于调试模式时,我正在寻找一种在Flutter中执行代码的方法。这可能在Flutter?我似乎无法在文档中找到它。
像这样的东西
If(app.inDebugMode) {
print("Print only in debug mode");
}
答案 0 :(得分:39)
这些小片段应该做你需要的
bool get isInDebugMode {
bool inDebugMode = false;
assert(inDebugMode = true);
return inDebugMode;
}
如果没有,您可以将IDE配置为在调试模式下启动不同的main.dart
,您可以在其中设置布尔值。
答案 1 :(得分:22)
kDebugMode
您现在可以使用kDebugMode
constant。
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 {
}
答案 2 :(得分:20)
不要挑剔,但基础包中包含一个kDebugMode
常量;
所以:
import 'package:flutter/foundation.dart' as Foundation;
if(Foundation.kDebugMode) {
print("App in debug mode");
}
答案 3 :(得分:14)
最简单的方法是使用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;
}());
特别注意调用结束时的()
- 断言只能对布尔值进行操作,所以只传入一个函数不起作用。
答案 4 :(得分:14)
虽然断言技术上可行,但您不应使用它们。
相反,请使用kReleaseMode
中的竞争package:flutter/foundation.dart
不同之处仅在于摇树
摇树(也就是编译器删除未使用的代码)取决于变量是常量。
问题在于,断言我们的isInReleaseMode
布尔值不是是常数。因此,在交付我们的应用程序时,会同时包含开发代码和发布代码。
另一方面,kReleaseMode
是一个常量。因此,编译器能够正确删除未使用的代码,我们可以放心地这样做:
if (kReleaseMode) {
} else {
// Will be tree-shaked on release builds.
}
答案 5 :(得分:5)
这是一个简单的解决方案:
import 'package:flutter/foundation.dart';
然后您可以像使用kReleaseMode
if(kReleaseMode){ // is Release Mode ??
print('release mode');
} else {
print('debug mode');
}
答案 6 :(得分:3)
这是找出应用程序以哪种模式运行的两个步骤
添加以下导入以获取
import 'package:flutter/foundation.dart' as Foundation;
然后kReleaseMode
检查应用程序正在运行的模式
if(Foundation.kReleaseMode){
print('app release mode');
} else {
print('App debug mode');
}
答案 7 :(得分:1)
答案 8 :(得分:0)
从Dart Documentation中提取:
什么时候断言确切起作用?这取决于工具和 您正在使用的框架:
- Flutter在 debug 模式下启用断言。
- 仅开发工具(例如dartdevc)通常默认情况下启用断言。
- 某些工具(例如dart和dart2js)通过命令行标志--enable-asserts支持断言。
在生产代码中,断言被忽略,并且参数 断言没有得到评估。
答案 9 :(得分:-1)