我正在寻找一种在应用程序处于调试模式时在Flutter中执行代码的方法。在颤振有可能吗?我在文件里找不到。

就像这样

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

如何检查Flutter应用程序是运行在调试模式还是发布模式?


当前回答

这里有一个简单的解决方案:

import 'package:flutter/foundation.dart';

然后你可以使用kReleaseMode like

if(kReleaseMode){ // Is Release Mode??
    print('release mode');
} else {
    print('debug mode');
}

其他回答

这里有一个简单的解决方案:

import 'package:flutter/foundation.dart';

然后你可以使用kReleaseMode like

if(kReleaseMode){ // Is Release Mode??
    print('release mode');
} else {
    print('debug mode');
}

不要挑剔,但是基础包包含一个kDebugMode常量。

So:

import 'package:flutter/foundation.dart' as Foundation;

if(Foundation.kDebugMode) {
   print("App in debug mode");
}

导入这个

import 'package:flutter/foundation.dart' 


String bulid = kReleaseMode ? "Release" : "";

or

String bulid = kDebugMode ? "Debug" : "";

or

String bulid = kProfileMode ? "Profile" : "";

或者试试这个

if (kDebugMode) {
   print("Debug");
} else if (kReleaseMode) {
    print("Release"); 
} else if (kProfileMode) {
  print("Profile"); 
}

虽然这是可行的,但使用常量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只能操作布尔值,因此仅仅传入一个函数是行不通的。

创建一个名为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");