From 42d3464d2e4be09d482c88b39f046b22eb68f889 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Thu, 11 Apr 2019 00:31:06 -0700 Subject: [PATCH] Let `sliver.dart` `_createErrorWidget` work with other Widgets (#30880) Credit to @ymback --- packages/flutter/lib/src/widgets/sliver.dart | 4 ++-- packages/flutter/test/widgets/slivers_test.dart | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/widgets/sliver.dart b/packages/flutter/lib/src/widgets/sliver.dart index a033ed9cfc..d551a0986c 100644 --- a/packages/flutter/lib/src/widgets/sliver.dart +++ b/packages/flutter/lib/src/widgets/sliver.dart @@ -1291,8 +1291,8 @@ class KeepAlive extends ParentDataWidget { } } -// Return an ErrorWidget for the given Exception -ErrorWidget _createErrorWidget(dynamic exception, StackTrace stackTrace) { +// Return a Widget for the given Exception +Widget _createErrorWidget(dynamic exception, StackTrace stackTrace) { final FlutterErrorDetails details = FlutterErrorDetails( exception: exception, stack: stackTrace, diff --git a/packages/flutter/test/widgets/slivers_test.dart b/packages/flutter/test/widgets/slivers_test.dart index c25ee665b1..91b8041209 100644 --- a/packages/flutter/test/widgets/slivers_test.dart +++ b/packages/flutter/test/widgets/slivers_test.dart @@ -195,4 +195,19 @@ void main() { expect(find.text('B'), findsNothing); expect(find.text('BOTTOM'), findsOneWidget); }); + + testWidgets('Can override ErrorWidget.build', (WidgetTester tester) async { + const Text errorText = Text('error'); + final ErrorWidgetBuilder oldBuilder = ErrorWidget.builder; + ErrorWidget.builder = (FlutterErrorDetails details) => errorText; + final SliverChildBuilderDelegate builderThrowsDelegate = SliverChildBuilderDelegate( + (_, __) => throw 'builder', + addAutomaticKeepAlives: false, + addRepaintBoundaries: false, + addSemanticIndexes: false, + ); + expect(builderThrowsDelegate.build(null, 0), errorText); + expect(tester.takeException(), 'builder'); + ErrorWidget.builder = oldBuilder; + }); }