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();
