Revert "Fix FlutterError.onError in debug mode (#53843)" (#55484)
This reverts commit d35671c6d10b2aa7cf7f8e5c022fd8eea902cf44.
diff --git a/packages/flutter/lib/src/foundation/assertions.dart b/packages/flutter/lib/src/foundation/assertions.dart
index ab2d13e..cf7b070 100644
--- a/packages/flutter/lib/src/foundation/assertions.dart
+++ b/packages/flutter/lib/src/foundation/assertions.dart
@@ -715,7 +715,7 @@
/// Called whenever the Flutter framework catches an error.
///
- /// The default behavior is to call [presentError].
+ /// The default behavior is to call [dumpErrorToConsole].
///
/// You can set this to your own function to override this default behavior.
/// For example, you could report all errors to your server.
@@ -725,18 +725,7 @@
///
/// Set this to null to silently catch and ignore errors. This is not
/// recommended.
- static FlutterExceptionHandler onError = (FlutterErrorDetails details) => presentError(details);
-
- /// Called whenever the Flutter framework wants to present an error to the
- /// users.
- ///
- /// The default behavior is to call [dumpErrorToConsole].
- ///
- /// Plugins can override how an error is to be presented to the user. For
- /// example, the structured errors service extension sets its own method when
- /// the extension is enabled. If you want to change how Flutter responds to an
- /// error, use [onError] instead.
- static FlutterExceptionHandler presentError = dumpErrorToConsole;
+ static FlutterExceptionHandler onError = dumpErrorToConsole;
static int _errorCount = 0;
diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart
index 361ff1e..3e17698 100644
--- a/packages/flutter/lib/src/widgets/widget_inspector.dart
+++ b/packages/flutter/lib/src/widgets/widget_inspector.dart
@@ -959,13 +959,13 @@
SchedulerBinding.instance.addPersistentFrameCallback(_onFrameStart);
final FlutterExceptionHandler structuredExceptionHandler = _reportError;
- final FlutterExceptionHandler defaultExceptionHandler = FlutterError.presentError;
+ final FlutterExceptionHandler defaultExceptionHandler = FlutterError.onError;
_registerBoolServiceExtension(
name: 'structuredErrors',
- getter: () async => FlutterError.presentError == structuredExceptionHandler,
+ getter: () async => FlutterError.onError == structuredExceptionHandler,
setter: (bool value) {
- FlutterError.presentError = value ? structuredExceptionHandler : defaultExceptionHandler;
+ FlutterError.onError = value ? structuredExceptionHandler : defaultExceptionHandler;
return Future<void>.value();
},
);
diff --git a/packages/flutter/test/material/scaffold_test.dart b/packages/flutter/test/material/scaffold_test.dart
index 4e1dbb3..afcaebe 100644
--- a/packages/flutter/test/material/scaffold_test.dart
+++ b/packages/flutter/test/material/scaffold_test.dart
@@ -1840,7 +1840,7 @@
final GlobalKey<ScaffoldState> key = GlobalKey<ScaffoldState>();
const Key buttonKey = Key('button');
final List<FlutterErrorDetails> errors = <FlutterErrorDetails>[];
- FlutterError.presentError = (FlutterErrorDetails error) => errors.add(error);
+ FlutterError.onError = (FlutterErrorDetails error) => errors.add(error);
int state = 0;
await tester.pumpWidget(
MaterialApp(
diff --git a/packages/flutter/test/widgets/image_test.dart b/packages/flutter/test/widgets/image_test.dart
index d4a98e2..bea9a12 100644
--- a/packages/flutter/test/widgets/image_test.dart
+++ b/packages/flutter/test/widgets/image_test.dart
@@ -528,7 +528,6 @@
final ImageListener listener = (ImageInfo info, bool synchronous) {
capturedImage = info;
};
- final FlutterExceptionHandler oldHandler = FlutterError.onError;
FlutterError.onError = (FlutterErrorDetails flutterError) {
reportedException = flutterError.exception;
reportedStackTrace = flutterError.stack;
@@ -565,7 +564,6 @@
// The image stream error handler should have the original exception.
expect(capturedException, testException);
expect(capturedStackTrace, testStack);
- FlutterError.onError = oldHandler;
});
testWidgets('Duplicate listener registration does not affect error listeners', (WidgetTester tester) async {
diff --git a/packages/flutter/test/widgets/widget_inspector_structure_error_test.dart b/packages/flutter/test/widgets/widget_inspector_structure_error_test.dart
deleted file mode 100644
index c87746d..0000000
--- a/packages/flutter/test/widgets/widget_inspector_structure_error_test.dart
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2014 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:convert';
-
-import 'package:flutter/foundation.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter/widgets.dart';
-import 'package:flutter_test/flutter_test.dart';
-
-void main() {
- StructureErrorTestWidgetInspectorService.runTests();
-}
-
-typedef InspectorServiceExtensionCallback = FutureOr<Map<String, Object>> Function(Map<String, String> parameters);
-
-class StructureErrorTestWidgetInspectorService extends Object with WidgetInspectorService {
- final Map<String, InspectorServiceExtensionCallback> extensions = <String, InspectorServiceExtensionCallback>{};
-
- final Map<String, List<Map<Object, Object>>> eventsDispatched = <String, List<Map<Object, Object>>>{};
-
- @override
- void registerServiceExtension({
- @required String name,
- @required FutureOr<Map<String, Object>> callback(Map<String, String> parameters),
- }) {
- assert(!extensions.containsKey(name));
- extensions[name] = callback;
- }
-
- @override
- void postEvent(String eventKind, Map<Object, Object> eventData) {
- getEventsDispatched(eventKind).add(eventData);
- }
-
- List<Map<Object, Object>> getEventsDispatched(String eventKind) {
- return eventsDispatched.putIfAbsent(eventKind, () => <Map<Object, Object>>[]);
- }
-
- Iterable<Map<Object, Object>> getServiceExtensionStateChangedEvents(String extensionName) {
- return getEventsDispatched('Flutter.ServiceExtensionStateChanged')
- .where((Map<Object, Object> event) => event['extension'] == extensionName);
- }
-
- Future<String> testBoolExtension(String name, Map<String, String> arguments) async {
- expect(extensions, contains(name));
- // Encode and decode to JSON to match behavior using a real service
- // extension where only JSON is allowed.
- return json.decode(json.encode(await extensions[name](arguments)))['enabled'] as String;
- }
-
-
- static void runTests() {
- final StructureErrorTestWidgetInspectorService service = StructureErrorTestWidgetInspectorService();
- WidgetInspectorService.instance = service;
-
- test('ext.flutter.inspector.structuredErrors still report error to original on error', () async {
- final FlutterExceptionHandler oldHandler = FlutterError.onError;
-
- FlutterErrorDetails actualError;
- // Creates a spy onError. This spy needs to be set before widgets binding
- // initializes.
- FlutterError.onError = (FlutterErrorDetails details) {
- actualError = details;
- };
-
- WidgetsFlutterBinding.ensureInitialized();
- try {
- // Enables structured errors.
- expect(await service.testBoolExtension(
- 'structuredErrors', <String, String>{'enabled': 'true'}),
- equals('true'));
-
- // Creates an error.
- final FlutterErrorDetails expectedError = FlutterErrorDetailsForRendering(
- library: 'rendering library',
- context: ErrorDescription('during layout'),
- exception: StackTrace.current,
- );
- FlutterError.reportError(expectedError);
-
- // Validates the spy still received an error.
- expect(actualError, expectedError);
- } finally {
- FlutterError.onError = oldHandler;
- }
- });
- }
-}
\ No newline at end of file
diff --git a/packages/flutter/test/widgets/widget_inspector_test.dart b/packages/flutter/test/widgets/widget_inspector_test.dart
index 04b5281..a0b5b5c 100644
--- a/packages/flutter/test/widgets/widget_inspector_test.dart
+++ b/packages/flutter/test/widgets/widget_inspector_test.dart
@@ -2280,7 +2280,7 @@
List<Map<Object, Object>> flutterErrorEvents = service.getEventsDispatched('Flutter.Error');
expect(flutterErrorEvents, isEmpty);
- final FlutterExceptionHandler oldHandler = FlutterError.presentError;
+ final FlutterExceptionHandler oldHandler = FlutterError.onError;
try {
// Enable structured errors.
@@ -2337,7 +2337,7 @@
error = flutterErrorEvents.last;
expect(error['errorsSinceReload'], 0);
} finally {
- FlutterError.presentError = oldHandler;
+ FlutterError.onError = oldHandler;
}
});
diff --git a/packages/flutter_test/lib/src/binding.dart b/packages/flutter_test/lib/src/binding.dart
index d1d4ecb..4e217ff 100644
--- a/packages/flutter_test/lib/src/binding.dart
+++ b/packages/flutter_test/lib/src/binding.dart
@@ -572,9 +572,9 @@
}) {
assert(description != null);
assert(inTest);
- _oldExceptionHandler = FlutterError.presentError;
+ _oldExceptionHandler = FlutterError.onError;
int _exceptionCount = 0; // number of un-taken exceptions
- FlutterError.presentError = (FlutterErrorDetails details) {
+ FlutterError.onError = (FlutterErrorDetails details) {
if (_pendingExceptionDetails != null) {
debugPrint = debugPrintOverride; // just in case the test overrides it -- otherwise we won't see the errors!
if (_exceptionCount == 0) {
@@ -800,7 +800,7 @@
/// Called by the [testWidgets] function after a test is executed.
void postTest() {
assert(inTest);
- FlutterError.presentError = _oldExceptionHandler;
+ FlutterError.onError = _oldExceptionHandler;
_pendingExceptionDetails = null;
_parentZone = null;
buildOwner.focusManager = FocusManager();