这会产生运行时错误。
Future<int> nuclearPlant() async {
await Future.delayed(Duration(seconds: 1));
throw "up";
return 999999999;
}
Future<void> main() async {
final zillionVolts = await nuclearPlant().catchError((e) => "0");
print(zillionVolts);
print("Done, safely shutdown the plant.");
}
Future.catchError 的错误处理程序必须返回一个值 未来的类型
我同意这个错误。但为什么它是一个运行时?不是编译器错误吗?如何启用 linter 分析检查以防止包含此内容的代码?
在上面的关键代码示例中,有人在迁移 2.0 期间错误地将 0 作为 String。结果,发电厂并没有关闭造成大规模破坏,因为
Dart
允许该代码在生产中运行。
默认情况下它具有
warning
级别,以下是强制其为 error
的方法:
analyzer:
errors:
invalid_return_type_for_catch_error: error
重要提示:您必须在代码上运行
dart analyze
,因为规则本身不会破坏 flutter build
或 flutter run
命令。基于此,你实际上有 2 个选择:
error
,就像我之前说的,然后在 CI 管道中运行 dart analyze
analysis_options.yaml
进行任何更改,然后运行 dart analyse --fatal-infos --fatal-warnings
– 这样您将获得最干净的代码。我个人更喜欢第二种选择。