onError
是 的公共静态成员FlutterError
,所以从技术上讲,它可以被任何地方的任何人覆盖。在运行测试主体之前,函数本身也会用自己的错误处理程序testWidgets()
覆盖。FlutterError.onError
您可以阅读其源代码以获取更多信息。
基本上,以下是发生的事情:
testWidgets('', (tester) async { // onError is overridden with the handler of the test framework
await app.main(); // onError is overridden again with crashlytics error handler
//...
expect(); // Flutter yells that you should have not touched its onError
});
关键是 Flutter 测试框架需要它onError
才能正常工作。所以无论你做什么,记得调用测试框架的错误处理程序。
以下是我在项目中用来“恢复” FlutterError.onError
(并做其他事情)的方式:
testWidgets('', (tester) async {
final originalOnError = FlutterError.onError!;
FlutterError.onError = (FlutterErrorDetails details) {
// do something like ignoring an exception
originalOnError(details); // call test framework's error handler
};
// ...
expect();
});
通过一些修改,我认为您的问题是可以解决的。