From 9357e70dfd200f912b5f4d9548681ad4199de192 Mon Sep 17 00:00:00 2001 From: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Mon, 29 Jul 2019 22:11:51 -0700 Subject: [PATCH] use FlutterError in MultiChildRenderObjectWidget (#37187) --- .../flutter/lib/src/widgets/framework.dart | 5 +++-- .../flutter/test/widgets/multichild_test.dart | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart index e0ee34124f..38be932cb4 100644 --- a/packages/flutter/lib/src/widgets/framework.dart +++ b/packages/flutter/lib/src/widgets/framework.dart @@ -1688,8 +1688,9 @@ abstract class MultiChildRenderObjectWidget extends RenderObjectWidget { assert(() { final int index = children.indexOf(null); if (index >= 0) { - throw AssertionError( - "The widget's children must not contain any null values, but a null value was found at index $index" + throw FlutterError( + "$runtimeType's children must not contain any null values, " + 'but a null value was found at index $index' ); } return true; diff --git a/packages/flutter/test/widgets/multichild_test.dart b/packages/flutter/test/widgets/multichild_test.dart index ad37aeef16..fc6f55bd78 100644 --- a/packages/flutter/test/widgets/multichild_test.dart +++ b/packages/flutter/test/widgets/multichild_test.dart @@ -31,6 +31,13 @@ void checkTree(WidgetTester tester, List expectedDecorations) { } } +class MockMultiChildRenderObjectWidget extends MultiChildRenderObjectWidget { + MockMultiChildRenderObjectWidget({ Key key, List children }) : super(key: key, children: children); + + @override + RenderObject createRenderObject(BuildContext context) => null; +} + void main() { testWidgets('MultiChildRenderObjectElement control test', (WidgetTester tester) async { @@ -345,4 +352,17 @@ void main() { checkTree(tester, [kBoxDecorationB, kBoxDecorationC]); }); + + // Regression test for https://github.com/flutter/flutter/issues/37136. + test('provides useful assertion message when one of the children is null', () { + bool assertionTriggered = false; + try { + MockMultiChildRenderObjectWidget(children: const [null]); + } catch (e) { + expect(e.toString(), contains("MockMultiChildRenderObjectWidget's children must not contain any null values,")); + assertionTriggered = true; + } + + expect(assertionTriggered, isTrue); + }); }