You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用Firebase时如何正确处理崩溃并上报非致命错误?

解决Flutter中try-catch捕获的错误上报Firebase Crashlytics的问题

你的问题核心是:被try-catch手动捕获的错误不会自动触发Firebase Crashlytics的上报,因为这类错误不属于"未捕获的致命崩溃"。要实现应用不崩溃且错误能上报,只需在catch块中主动调用Crashlytics的错误上报方法即可。

正确用法示例

  1. 保留你当前的Firebase初始化代码(已经正确配置了致命崩溃捕获)
  2. 在try-catch的catch块中,调用FirebaseCrashlytics.instance.recordError(),并标记为非致命错误:
try {
  final result = await someThrowErrorFunctions;     
} catch (e, stackTrace) {
  print('error:$e');
  // 主动上报非致命错误到Crashlytics
  FirebaseCrashlytics.instance.recordError(
    e,
    stackTrace,
    fatal: false, // 关键:标记为非致命,不统计为崩溃
    reason: '调用someThrowErrorFunctions时发生错误', // 可选:添加错误上下文,便于排查
  );
}

关键注意事项

  • 必须捕获stackTrace并传入上报方法,否则Crashlytics无法提供错误的堆栈信息,难以定位问题
  • fatal: false会让Crashlytics将这类错误归类到"非致命错误"栏目,和致命崩溃区分开
  • 可以提前添加自定义日志,辅助排查:
    FirebaseCrashlytics.instance.log('准备调用someThrowErrorFunctions');
    try {
      final result = await someThrowErrorFunctions;     
    } catch (e, stackTrace) {
      // ...上报代码
    }
    

进阶:封装全局上报工具

为了避免重复编写上报代码,可以封装一个工具类:

class CrashlyticsHelper {
  // 上报非致命错误
  static Future<void> reportNonFatal(Object error, StackTrace stackTrace, {String? reason}) async {
    await FirebaseCrashlytics.instance.recordError(
      error,
      stackTrace,
      fatal: false,
      reason: reason,
    );
  }

  // 添加自定义日志
  static void log(String message) {
    FirebaseCrashlytics.instance.log(message);
  }
}

使用时只需在catch块中调用:

try {
  final result = await someThrowErrorFunctions;     
} catch (e, stackTrace) {
  print('error:$e');
  CrashlyticsHelper.reportNonFatal(e, stackTrace, reason: '调用someThrowErrorFunctions失败');
}

内容的提问来源于stack exchange,提问作者magic_9527

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:33:16