Dart 中确定调试或发布的方法之间的差异

Wil*_*llW 5 dart flutter

我知道有两种方法可以确定我的应用程序是否在调试模式下运行:

const bool.fromEnvironment("dart.vm.product")如果释放则返回 true。

这来自 Flutter 文档的 Sentry 部分:

bool get isInDebugMode {
  // Assume we're in production mode
  bool inDebugMode = false;

  // Assert expressions are only evaluated during development. They are ignored
  // in production. Therefore, this code will only turn `inDebugMode` to true
  // in our development environments!
  assert(inDebugMode = true);

  return inDebugMode;
}
Run Code Online (Sandbox Code Playgroud)

这两者总是等价的还是在某些情况下他们会给出不同的答案?我应该使用哪个?第一种方法是编译时似乎更有利。

Gün*_*uer 6

一般来说,它们应该是相同的,但也可能存在差异。

const bool.fromEnvironment("dart.vm.product")取决于正在执行的发布版本。我还没有检查profile构建是否返回truefalse

assert(inDebugMode = true);取决于断言是否启用。断言默认在调试模式下启用,默认情况下在发布版本中禁用,但应该有一种方法可以独立于发布/调试模式启用/禁用断言,但我还没有找到方法。也许它还没有在 Flutter 中公开,或者还没有在 Dart 中实现。

我认为bool.fromEnvironment()使用 tree-shaking 效果更好,因为它可以用来创建 const 值。

  • 我认为 `bool.fromEnvironment()` 与 tree-shaking 配合使用效果更好,因为它可以用来创建 const 值。 (2认同)