扑。应用程序不会崩溃并发送崩溃报告

And*_*dan 4 flutter flutter-dependencies flutter-layout

我已经集成Firebase Crashlytics到我的应用程序中,并且正在测试 Android 应用程序。我强迫崩溃来检查它:

if (true){
  List arr = [];
  throw arr[1] =2;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是应用程序不会崩溃。我只是在日志中得到这个,但它不会崩溃,以便 Crashlytics 将堆栈跟踪发送到服务器。

E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 1

在此输入图像描述

为什么会发生这种情况以及为什么这不能“正常工作”。

我知道人们不希望他们的应用程序崩溃,但是......我如何知道应用程序在生产过程中是否崩溃?

FirebaseCrashlytics.instance.crash()另一方面,PS 对作品进行测试。应用程序崩溃并发送报告。为什么这样有效?

Mak*_*hov 7

我遇到了同样的问题,并找到了您的问题的答案和有效的解决方案。

为什么会发生这种情况以及为什么这不能“正常工作”

根据 Crashlytics,有两种类型的事件:崩溃和非致命事件。像您这样的未处理异常被视为非致命事件,并且 Crashlytics 默认情况下不会记录它们。 https://firebase.flutter.dev/docs/crashlytics/reports#filtering-crash-types

但是...我如何知道应用程序在生产过程中是否崩溃?

您可以通过在 main.dart 中执行此操作来启用非致命记录

FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
Run Code Online (Sandbox Code Playgroud)

https://firebase.flutter.dev/docs/crashlytics/usage#handling-uncaught-errors

另一方面,使用 FirebaseCrashlytics.instance.crash() 进行 PS 测试是有效的。应用程序崩溃并发送报告。为什么这样有效?

因为 FirebaseCrashlytics.instance.crash() 会导致应用程序本机崩溃。 https://pub.dev/documentation/firebase_crashlytics/latest/firebase_crashlytics/FirebaseCrashlytics/crash.html


来自评论:

我认为,如果用户点击后没有任何反应,这比应用程序崩溃更令人沮丧。如果它崩溃了,那么很明显发生了什么,存在问题,而不是什么也没发生并让用户大吃一惊......

除了提交非致命错误报告之外,您还可以实现以下方案之一:

  1. 终止应用程序(模拟崩溃)

exit(0) 终止应用程序并且不会向 Crashlytics 报告额外的崩溃

FlutterError.onError = (FlutterErrorDetails details) async {
    await FirebaseCrashlytics.instance.recordFlutterError(details);
    exit(0);
};
Run Code Online (Sandbox Code Playgroud)
  1. 显示一些警报,例如“出了问题”

根据应用程序处理的数据和操作的性质,显示警报可能会更好。