如何排除调试代码

JAr*_*Are 5 dart dart2js flutter

假设我有一个简单的记录器:

void main() {
  var logger = new MyLogger();
  logger.log("hello Dart");
}
Run Code Online (Sandbox Code Playgroud)

我希望这段代码在开发模式(虚拟机检查模式)下运行,但我不希望它出现在我的生产代码中。我希望它能被 dart2js 编译器“摇晃”掉。有一些标准的方法吗?

Gün*_*uer 6

您可以将代码嵌入到assert. 断言在生产代码中被忽略,并且我确信pub build在模式下运行时不会构建为 JS release

class X {
  X() {
    print('x created');
  }

  void log(String m) {
    print(m);
  }
}

bool log(String m) {
  new X()..log(m);
      return true;
}

void main() {
  assert(() {
    new X()..log('in Assert');
    return true;
  });

  assert(() => log('in Assert')); // use a wrapper function
}
Run Code Online (Sandbox Code Playgroud)

当您创建一个返回的包装方法时,true您不必每次都显式地执行它。

您还可以看看这个问题如何实现预编译器指令之类的功能