背景
相信很多人刚用flutter的时候,看到自带的异常捕捉log打印都懵圈过,即使是上手之后,也不能快速的找到对应的异常代码行数
前言
在寻找开源库的时候,发现了一个dart团队做的可以调整log格式的库,但是很遗憾这个库只会捕捉系统包和插件包的异常,并不会捕捉本项目的异常,所以本人就做了一个基于此库的异常捕捉log打印库,并且做了一些flutter系统包异常的过滤
stack_trace打印
I/flutter ( 3068): PlatformException(error, Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference, null)I/flutter ( 3068): package:flutter/src/services/message_codecs.dart 551:7 StandardMethodCodec.decodeEnvelopeI/flutter ( 3068): package:flutter/src/services/platform_channel.dart 292:18 MethodChannel.invokeMethodI/flutter ( 3068): dart:async/future_impl.dart 22:43 _Completer.completeErrorI/flutter ( 3068): dart:async/runtime/libasync_patch.dart 40:18 _AsyncAwaitCompleter.completeErrorI/flutter ( 3068): package:flutter/src/services/platform_channel.dart MethodChannel.invokeMethodI/flutter ( 3068): dart:async/zone.dart 1053:19 _CustomZone.registerUnaryCallbackI/flutter ( 3068): dart:async/runtime/libasync_patch.dart 77:23 _asyncThenWrapperHelperI/flutter ( 3068): package:flutter/src/services/platform_channel.dart MethodChannel.invokeMethodI/flutter ( 3068): package:fluttertoast/fluttertoast.dart 53:33 Fluttertoast.showToast复制代码
flutter_stack_trace打印
I/flutter ( 3068): PlatformException(error, Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference, null)I/flutter ( 3068): package:flutter/src/services/message_codecs.dart 551:7 StandardMethodCodec.decodeEnvelopeI/flutter ( 3068): package:flutter/src/services/platform_channel.dart 292:18 MethodChannel.invokeMethodI/flutter ( 3068): package:fluttertoast/fluttertoast.dart 53:33 Fluttertoast.showToastI/flutter ( 3068): package:example/ui/login_page.dart 198:18 _LoginPageState.showAccountNameEmptyI/flutter ( 3068): package:example/presenter/login_presenter.dart 19:12 LoginPresenter.loginI/flutter ( 3068): package:example/ui/login_page.dart 135:31 _LoginPageState.buildBody.I/flutter ( 3068): package:flutter/src/material/ink_well.dart 507:14 _InkResponseState._handleTapI/flutter ( 3068): package:flutter/src/material/ink_well.dart 562:30 _InkResponseState.build. I/flutter ( 3068): package:flutter/src/gestures/recognizer.dart 102:24 GestureRecognizer.invokeCallbackI/flutter ( 3068): package:flutter/src/gestures/tap.dart 242:9 TapGestureRecognizer._checkUpI/flutter ( 3068): package:flutter/src/gestures/tap.dart 175:7 TapGestureRecognizer.handlePrimaryPointerI/flutter ( 3068): package:flutter/src/gestures/recognizer.dart 315:9 PrimaryPointerGestureRecognizer.handleEventI/flutter ( 3068): package:flutter/src/gestures/pointer_router.dart 73:12 PointerRouter._dispatchI/flutter ( 3068): package:flutter/src/gestures/pointer_router.dart 101:11 PointerRouter.routeI/flutter ( 3068): package:flutter/src/gestures/binding.dart 180:19 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEventI/flutter ( 3068): package:flutter/src/gestures/binding.dart 158:22 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEventI/flutter ( 3068): package:flutter/src/gestures/binding.dart 138:7 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEventI/flutter ( 3068): package:flutter/src/gestures/binding.dart 101:7 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueueI/flutter ( 3068): package:flutter/src/gestures/binding.dart 85:7 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacketI/flutter ( 3068): dart:async/zone.dart 1136:13 _rootRunUnaryI/flutter ( 3068): dart:async/zone.dart 1029:19 _CustomZone.runUnaryI/flutter ( 3068): dart:async/zone.dart 931:7 _CustomZone.runUnaryGuardedI/flutter ( 3068): dart:ui/hooks.dart 170:10 _invoke1I/flutter ( 3068): dart:ui/hooks.dart 122:5 _dispatchPointerDataPacket复制代码
flutter_stack_trace的Simple Mode打印
I/flutter ( 3068): PlatformException(error, Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference, null)I/flutter ( 3068): package:fluttertoast/fluttertoast.dart 53:33 Fluttertoast.showToastI/flutter ( 3068): package:example/ui/login_page.dart 198:18 _LoginPageState.showAccountNameEmptyI/flutter ( 3068): package:example/presenter/login_presenter.dart 19:12 LoginPresenter.loginI/flutter ( 3068): package:example/ui/login_page.dart 135:31 _LoginPageState.buildBody.复制代码
用法
import 'package:flutter_stack_trace/flutter_stack_trace.dart';//default simple modevoid main() => FlutterChain.capture( () { runApp(MyApp()); }, );//just print in debug mode//isShowTime default trueFlutterChain.print("test",isShowTime: false);复制代码