diff --git a/packages/flutter/lib/src/foundation/stack_frame.dart b/packages/flutter/lib/src/foundation/stack_frame.dart index f10d9cf496b..1e4de75ebaa 100644 --- a/packages/flutter/lib/src/foundation/stack_frame.dart +++ b/packages/flutter/lib/src/foundation/stack_frame.dart @@ -211,7 +211,9 @@ class StackFrame { String className = ''; String method = match.group(2)!.replaceAll('.', ''); if (method.startsWith('new')) { - className = method.split(' ')[1]; + final List methodParts = method.split(' '); + // Sometimes a web frame will only read "new" and have no class name. + className = methodParts.length > 1 ? method.split(' ')[1] : ''; method = ''; if (className.contains('.')) { final List parts = className.split('.'); diff --git a/packages/flutter/test/foundation/stack_frame_test.dart b/packages/flutter/test/foundation/stack_frame_test.dart index 1dd29fa451a..be855e136ae 100644 --- a/packages/flutter/test/foundation/stack_frame_test.dart +++ b/packages/flutter/test/foundation/stack_frame_test.dart @@ -81,6 +81,24 @@ void main() { expect('$e', contains('Got a stack frame from package:stack_trace')); } }); + + test('Can parse web constructor invocation with unknown class name', () { + const String stackTraceLine = '#32 new (http://localhost:42191/dart-sdk/lib/async/stream_controller.dart:880:9)'; + expect( + StackFrame.fromStackTraceLine(stackTraceLine), + const StackFrame( + number: 32, + className: '', + method: '', + packageScheme: 'http', + package: '', + packagePath: 'dart-sdk/lib/async/stream_controller.dart', + line: 880, + column: 9, + source: stackTraceLine, + ), + ); + }); } const String stackString = '''