Flutter异常捕获与日志管理插件catcher_2的使用
Flutter异常捕获与日志管理插件catcher_2的使用
介绍
Catcher 2 是一个Flutter插件,它可以自动捕捉错误/异常,并提供多种处理这些异常的方式。它是基于Jakub Homlala开发的Catcher进行改进和修复后的版本。
它受到ACRA(ACRA)的启发,支持Android、iOS、Web、Linux、Windows和MacOS平台。
安装
pubspec.yaml 添加依赖
dependencies:
catcher_2: ^2.0.0-alpha.0
获取包
$ flutter packages get
导入
import 'package:catcher_2/catcher_2.dart';
升级自catcher
如果您之前正确使用了catcher
,则只需替换以下字符串:
Catcher
->Catcher2
catcher
->catcher_2
(在少数地方需要使用catcher2
)
注意:
HttpHandler
由于升级到dio
5.x有一些破坏性更改。
如果不确定或遇到问题,请提交新问题。
基本示例
下面是一个完整的例子,展示了如何配置和使用Catcher 2来捕捉异常并处理它们。
示例代码
import 'package:flutter/material.dart';
import 'package:catcher_2/catcher_2.dart';
void main() {
/// 配置调试选项(开发模式下使用的设置)
final debugOptions = Catcher2Options(
/// 在对话框中显示捕获到的错误信息
DialogReportMode(),
[
/// 将日志发送到HTTP服务器
HttpHandler(
HttpRequestType.post,
Uri.parse('https://jsonplaceholder.typicode.com/posts'),
printLogs: true,
),
/// 在控制台打印日志
ConsoleHandler(),
],
);
/// 配置生产选项(发布模式下使用的设置)
final releaseOptions = Catcher2Options(
/// 显示新页面,包含捕获到的错误信息
PageReportMode(),
[
/// 将日志发送到Sentry
SentryHandler(
SentryClient(
SentryOptions(dsn: '<DSN>'),
),
),
/// 在控制台打印日志
ConsoleHandler(),
],
);
/// 启动Catcher并启动应用程序。现在Catcher将守护并报告任何错误到您配置的服务!
Catcher2(
runAppFunction: () {
runApp(const MyApp());
},
ensureInitialized: true,
debugConfig: debugOptions,
releaseConfig: releaseOptions,
);
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) => MaterialApp(
/// 最后一步:在这里添加Catcher的navigator key,以便Catcher可以显示页面和对话框!
navigatorKey: Catcher2.navigatorKey,
home: Scaffold(
appBar: AppBar(
title: const Text('Catcher example'),
),
body: const ChildWidget(),
),
);
}
class ChildWidget extends StatelessWidget {
const ChildWidget({super.key});
@override
Widget build(BuildContext context) => TextButton(
onPressed: generateError,
child: const Text('Generate error'),
);
/// 触发一些错误。
Future<void> generateError() async {
Catcher2.sendTestException();
}
}
更多功能
报告模式
Catcher 2 支持四种报告模式:
- Silent Report Mode:静默模式,不会询问用户是否处理崩溃日志,而是直接发送给处理器。
- Dialog Report Mode:对话框模式,通过对话框提示用户是否发送错误报告。
- Page Report Mode:页面模式,通过新页面提示用户是否发送错误报告。
- Notification Report Mode:通知模式(已移除,因为与Firebase不兼容)。
处理器
Catcher 2 提供了多种处理器用于处理错误报告:
- Console Handler:在控制台打印错误日志。
- Email Manual Handler:手动发送邮件。
- Email Auto Handler:自动发送邮件。
- Http Handler:通过HTTP请求发送日志。
- File Handler:将日志保存到文件。
- Toast Handler:以Toast形式显示短消息。
- Sentry Handler:发送错误报告到Sentry.io。
- Slack Handler:发送消息到Slack。
- Discord Handler:发送消息到Discord。
- Snackbar Handler:显示定制化的Snackbar消息。
- Crashlytics Handler:已被移除,但可以通过自定义报告模式重新启用。
错误小部件
您可以添加一个错误小部件来替代红色死亡屏幕。具体方法如下:
builder: (BuildContext context, Widget widget) {
Catcher2.addDefaultErrorWidget(
showStacktrace: true,
title: "Custom error title",
description: "Custom error description",
maxWidthForSmallMode: 150,
);
return widget;
},
获取当前配置
获取当前使用的配置:
Catcher2Options options = catcher2.getCurrentConfig();
更新配置
在运行时更新Catcher 2配置:
catcher2.updateConfig(
debugConfig: Catcher2Options(
PageReportMode(),
[ConsoleHandler()],
),
);
截图功能
Catcher 2可以在报告中自动创建并包含截图。只需要用Catcher2Screenshot
包装您的根组件,并提供截图存储路径即可。
MaterialApp(
navigatorKey: Catcher2.navigatorKey,
home: Catcher2Screenshot(
catcher2: Catcher2.getInstance(),
child: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: ChildWidget(),
),
),
);
final Catcher2Options debugOptions = Catcher2Options(
DialogReportMode(),
[ToastHandler()],
screenshotsPath: path,
);
以上就是关于Flutter异常捕获与日志管理插件catcher_2的基本使用说明。希望对您有所帮助!
更多关于Flutter异常捕获与日志管理插件catcher_2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter异常捕获与日志管理插件catcher_2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,catcher_2
是一个强大的异常捕获与日志管理插件,它能够帮助开发者有效地捕获应用中的异常、错误,并将这些异常信息发送到指定的服务端进行监控和分析。以下是如何在Flutter项目中使用 catcher_2
插件的代码示例。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 catcher_2
插件的依赖:
dependencies:
flutter:
sdk: flutter
catcher_2: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来安装依赖。
2. 配置 Catcher
在你的 Flutter 应用中配置 Catcher。通常,这可以在 main.dart
文件中完成。
import 'package:flutter/material.dart';
import 'package:catcher_2/catcher_2.dart';
void main() {
// 初始化Catcher
CatcherConfig config = CatcherConfig(
enableLog: true, // 是否启用日志捕获
enableReport: true, // 是否启用报告
enableConsoleLog: true, // 是否在控制台打印日志
enableDialog: true, // 是否显示错误对话框
debugMode: true, // 是否为调试模式
logLevel: LogLevel.VERBOSE, // 设置日志级别
unhandledExceptionHandler: (context, error, stackTrace) {
// 自定义未处理的异常处理
print("Unhandled Exception: $error");
print("Stack Trace: $stackTrace");
},
reportMode: ReportMode.DIALOG, // 报告模式(对话框、通知等)
reportSubmitCallback: (report) async {
// 自定义报告提交回调
// 例如,将报告发送到你的服务器
print("Sending report: $report");
// await sendReportToServer(report);
},
serverConfigs: [
ServerConfig(
url: "https://your-server-endpoint.com/report", // 报告发送的URL
method: RequestMethod.POST, // 请求方法
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_TOKEN", // 示例:添加授权头
},
bodyTemplate: (report) => Map.fromEntries(
report.toJson()!.entries.map(
(entry) => MapEntry(entry.key, entry.value.toString()),
),
), // 将报告转换为JSON格式发送到服务器
),
],
);
Catcher.initialize(config).then((_) {
runApp(MyApp());
});
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Catcher Demo'),
),
body: Center(
child: Text('Throw an error to see Catcher in action!'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 示例:手动触发一个异常
throw Exception("This is a test exception!");
},
tooltip: 'Throw Exception',
child: Icon(Icons.error),
),
),
);
}
}
3. 捕获日志和异常
在应用中,你可以使用 Catcher.log
方法来捕获日志,Catcher.report
方法来捕获异常。不过,在大多数情况下,Catcher 会自动捕获未处理的异常和日志。
void someFunction() {
try {
// 可能会抛出异常的代码
int result = 10 / 0; // 示例:除以零会引发异常
} catch (e, stack) {
// 手动捕获并报告异常
Catcher.report(e, stack);
}
// 捕获日志
Catcher.log("This is a log message", LogLevel.INFO);
}
4. 运行和测试
运行你的 Flutter 应用,并触发一些异常(如点击上面的浮动按钮)。你应该能够看到 Catcher 捕获并处理的异常对话框,或者在控制台中看到捕获的日志。
以上代码示例展示了如何在 Flutter 项目中配置和使用 catcher_2
插件来捕获和管理异常及日志。根据实际需求,你可以进一步自定义和扩展这些配置。