【发布时间】:2020-03-06 19:17:15
【问题描述】:
我正在尝试在我的 Flutter 项目中使用 firebase_crashlytics lib,问题是 Flutter 永远不会崩溃,我可以在代码中抛出异常,但 dart 中的所有异常都被认为是非致命异常。这些将正常报告给控制台,但我希望将 Flutter、本机和未处理的异常视为致命异常。
我想要以下之一:
- 出现意外异常时使应用程序崩溃(以“无响应”关闭应用程序)
- 向 Firebase 控制台报告致命异常
- 解决方法?
我的 main.dart 代码:
Future main() async {
runZoned<Future<void>>(() async {
await DotEnv().load('.env');
setupNotifications();
FlutterError.onError = Crashlytics.instance.recordFlutterError;
runApp(MyApp());
}, onError: Crashlytics.instance.recordError);
}
我已经尝试过的事情:
-
SystemChannels.platform.invokeMethod('SystemNavigator.pop');可以,但不是很友好 - 调用 kotlin 函数试图通过
MethodChannel使应用崩溃,但没有成功。
我可能会做的事情:
- 致电
toast通知用户出现问题 - 显示一个弹出窗口,通知用户出现问题并关闭应用程序
- 只需关闭应用程序
- 尝试加载应用程序主屏幕的初始状态
【问题讨论】:
-
鉴于每个人都喜欢默认行为,因此可能值得解释一下为什么您要尝试实现这种行为。非致命异常(即使未处理)是应用程序可能能够从中恢复的情况,而致命异常是应用程序无法恢复的情况,因此用户体验会更差。您也不能强制 Firebase 将它们报告为致命异常,因为它们不是。你确实可以做你在“我可能做的事情”下列出的所有事情,但它们不在这个问题的范围内。 “最佳”做法是默认做法。
-
即使是非致命异常,它也可能导致应用程序崩溃问题,例如界面无法正确加载、按钮不执行任何操作等。虽然这些会被颤振视为“非致命”,但它肯定是让用户感受到变化的东西,那么通知他们出现问题的最佳方式是什么?为什么我们不能将我们自己已经知道并已处理的异常与更严重、未知的未处理异常区分开来?
标签: firebase flutter crashlytics