【问题标题】:Best practice to report errors in FlutterFlutter 报错的最佳实践
【发布时间】: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


【解决方案1】:

您看到的行为是 Flutter 上 Crashlytics 的默认行为,至少目前是这样。如果您想退出您的应用,我可以向您推荐以下选项:

  1. 导航到错误屏幕,使用Navigator.pushAndRemoveUntil() 显示一般错误消息。然后当用户单击OK 或在计时器之后,您退出应用程序。为了退出应用程序,您可以在本机端抛出异常或使用SystemChannels.platform.invokeMethod('SystemNavigator.pop');,尽管您的应用程序可能在 App Store 被阻止,因为 Apple 以编程方式拒绝退出。

  2. 小心有一个错误屏幕,带有友好的错误消息,为每个可能的错误做好准备,这样用户就不必退出应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-09
    • 2020-05-11
    • 2018-03-03
    • 2019-11-21
    • 2020-06-20
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多