检查正在运行的应用是否处于调试模式

时间:2018-04-07 11:45:19

标签: flutter

我有一个简短的问题。当应用程序处于调试模式时,我正在寻找一种在Flutter中执行代码的方法。这可能在Flutter?我似乎无法在文档中找到它。

像这样的东西

If(app.inDebugMode) {
   print("Print only in debug mode");
}

10 个答案:

答案 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)

这是找出应用程序以哪种模式运行的两个步骤

  1. 添加以下导入以获取

    import 'package:flutter/foundation.dart' as Foundation;
    
  2. 然后kReleaseMode检查应用程序正在运行的模式

    if(Foundation.kReleaseMode){ 
      print('app release mode');
    } else {
      print('App debug mode');
    }
    

答案 7 :(得分:1)

我相信最新的方法是:

const bool prod = const bool.fromEnvironment('dart.vm.product');

src

答案 8 :(得分:0)

从Dart Documentation中提取:

什么时候断言确切起作用?这取决于工具和 您正在使用的框架:

  • Flutter在 debug 模式下启用断言。
  • 仅开发工具(例如dartdevc)通常默认情况下启用断言。
  • 某些工具(例如dart和dart2js)通过命令行标志--enable-asserts支持断言。

生产代码中,断言被忽略,并且参数 断言没有得到评估。

答案 9 :(得分:-1)

在调试模式下

  

启用Dart断言语句,Flutter框架使用   这可以执行许多运行时检查,验证不变量不是   被侵犯。

Debug mode assertions