@@ -24,64 +24,21 @@ class Crashlytics {
2424 static const MethodChannel channel =
2525 MethodChannel ('plugins.flutter.io/firebase_crashlytics' );
2626
27- /// Submits non-fatal crash report to Firebase Crashlytics.
27+ /// Submits non-fatal flutter crash report based on `FlutterErrorDetails`
28+ /// to Firebase Crashlytics.
2829 Future <void > recordFlutterError (FlutterErrorDetails details) async {
2930 print ('Error caught by Crashlytics plugin <recordFlutterError>:' );
3031
31- bool inDebugMode = false ;
32- if (! enableInDevMode) {
33- assert (inDebugMode = true );
34- }
35-
36- if (inDebugMode && ! enableInDevMode) {
37- print (Trace .format (details.stack));
38- } else {
39- // Report error
40- final List <String > stackTraceLines =
41- Trace .format (details.stack).trimRight ().split ('\n ' );
42- final List <Map <String , String >> stackTraceElements =
43- getStackTraceElements (stackTraceLines);
44- await channel
45- .invokeMethod <dynamic >('Crashlytics#onError' , < String , dynamic > {
46- 'exception' : details.exceptionAsString (),
47- // FlutterErrorDetails.context has been migrated from a String to a
48- // DiagnosticsNode. Coerce it to a String here in a way that will work
49- // on both Strings and the new DiagnosticsNode values. See https://groups.google.com/forum/#!topic/flutter-announce/hp1RNIgej38
50- 'context' : '${details .context }' ,
51- 'stackTraceElements' : stackTraceElements,
52- 'logs' : _logs.toList (),
53- 'keys' : _prepareKeys (),
54- });
55- }
32+ _recordError (details.exceptionAsString (), details.stack,
33+ context: details.context);
5634 }
5735
36+ /// Submits non-fatal crash report to Firebase Crashlytics.
5837 Future <void > recordError (dynamic exception, StackTrace stack,
5938 {dynamic context}) async {
6039 print ('Error caught by Crashlytics plugin <recordError>:' );
6140
62- bool inDebugMode = false ;
63- if (! enableInDevMode) {
64- assert (inDebugMode = true );
65- }
66-
67- if (inDebugMode && ! enableInDevMode) {
68- print (Trace .format (stack));
69- } else {
70- // Report error
71- final List <String > stackTraceLines =
72- Trace .format (stack).trimRight ().split ('\n ' );
73- final List <Map <String , String >> stackTraceElements =
74- getStackTraceElements (stackTraceLines);
75- final dynamic result = await channel
76- .invokeMethod <dynamic >('Crashlytics#onError' , < String , dynamic > {
77- 'exception' : "${exception .toString ()}" ,
78- 'context' : '$context ' ,
79- 'stackTraceElements' : stackTraceElements,
80- 'logs' : _logs.toList (),
81- 'keys' : _prepareKeys (),
82- });
83- print (result);
84- }
41+ _recordError (exception, stack, context: context);
8542 }
8643
8744 void crash () {
@@ -225,4 +182,30 @@ class Crashlytics {
225182 }
226183 return elements;
227184 }
185+
186+ Future <void > _recordError (dynamic exception, StackTrace stack,
187+ {dynamic context}) async {
188+ bool inDebugMode = false ;
189+ if (! enableInDevMode) {
190+ assert (inDebugMode = true );
191+ }
192+
193+ if (inDebugMode && ! enableInDevMode) {
194+ print (Trace .format (stack));
195+ } else {
196+ // Report error
197+ final List <String > stackTraceLines =
198+ Trace .format (stack).trimRight ().split ('\n ' );
199+ final List <Map <String , String >> stackTraceElements =
200+ getStackTraceElements (stackTraceLines);
201+ await channel
202+ .invokeMethod <dynamic >('Crashlytics#onError' , < String , dynamic > {
203+ 'exception' : "${exception .toString ()}" ,
204+ 'context' : '$context ' ,
205+ 'stackTraceElements' : stackTraceElements,
206+ 'logs' : _logs.toList (),
207+ 'keys' : _prepareKeys (),
208+ });
209+ }
210+ }
228211}
0 commit comments