diff --git a/packages/firebase_crashlytics/CHANGELOG.md b/packages/firebase_crashlytics/CHANGELOG.md index 124b410f9881..f0feb192864b 100644 --- a/packages/firebase_crashlytics/CHANGELOG.md +++ b/packages/firebase_crashlytics/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.4+11 + +* Fixed an issue where `Crashlytics#getStackTraceElements` didn't handle functions without classes. + ## 0.0.4+10 * Update README. diff --git a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java index 9b23a2306308..b3b04c6f37c3 100644 --- a/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java +++ b/packages/firebase_crashlytics/android/src/main/java/io/flutter/plugins/firebase/crashlytics/firebasecrashlytics/FirebaseCrashlyticsPlugin.java @@ -103,7 +103,8 @@ private StackTraceElement generateStackTraceElement(Map errorEle String className = errorElement.get("class"); String methodName = errorElement.get("method"); - return new StackTraceElement(className, methodName, fileName, Integer.parseInt(lineNumber)); + return new StackTraceElement( + className == null ? "" : className, methodName, fileName, Integer.parseInt(lineNumber)); } catch (Exception e) { Log.e(TAG, "Unable to generate stack trace element from Dart side error."); return null; diff --git a/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart b/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart index dd43f7fd02f7..aa5a67ef99e7 100644 --- a/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart +++ b/packages/firebase_crashlytics/lib/src/firebase_crashlytics.dart @@ -171,17 +171,25 @@ class Crashlytics { final String lineNumber = lineParts[1].contains(":") ? lineParts[1].substring(0, lineParts[1].indexOf(":")).trim() : lineParts[1]; - final String className = - lineParts[2].substring(0, lineParts[2].indexOf(".")).trim(); - final String methodName = - lineParts[2].substring(lineParts[2].indexOf(".") + 1).trim(); - - elements.add({ - 'class': className, - 'method': methodName, + + final Map element = { 'file': fileName, 'line': lineNumber, - }); + }; + + if (lineParts[2].contains(".")) { + final String className = + lineParts[2].substring(0, lineParts[2].indexOf(".")).trim(); + final String methodName = + lineParts[2].substring(lineParts[2].indexOf(".") + 1).trim(); + + element['class'] = className; + element['method'] = methodName; + } else { + element['method'] = lineParts[2]; + } + + elements.add(element); } catch (e) { print(e.toString()); } diff --git a/packages/firebase_crashlytics/pubspec.yaml b/packages/firebase_crashlytics/pubspec.yaml index 7510f37b167a..4ca07da6f6c0 100644 --- a/packages/firebase_crashlytics/pubspec.yaml +++ b/packages/firebase_crashlytics/pubspec.yaml @@ -1,7 +1,7 @@ name: firebase_crashlytics description: Flutter plugin for Firebase Crashlytics. It reports uncaught errors to the Firebase console. -version: 0.0.4+10 +version: 0.0.4+11 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/firebase_crashlytics diff --git a/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart b/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart index 8eb771ee2707..22319891bcf1 100644 --- a/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart +++ b/packages/firebase_crashlytics/test/firebase_crashlytics_test.dart @@ -142,5 +142,19 @@ void main() { 'line': '3825', }); }); + + test('getStackTraceElements without class', () async { + final List lines = [ + 'package:firebase_crashlytics/test/main.dart 12 main' + ]; + final List> elements = + crashlytics.getStackTraceElements(lines); + expect(elements.length, 1); + expect(elements.first, { + 'method': 'main', + 'file': 'package:firebase_crashlytics/test/main.dart', + 'line': '12', + }); + }); }); }