diff --git a/packages/flutter/lib/src/material/button_bar.dart b/packages/flutter/lib/src/material/button_bar.dart index ddcfbac9bd4..62318762f6a 100644 --- a/packages/flutter/lib/src/material/button_bar.dart +++ b/packages/flutter/lib/src/material/button_bar.dart @@ -334,7 +334,7 @@ class _RenderButtonBarRow extends RenderFlex { BoxConstraints get constraints { if (_hasCheckedLayoutWidth) return super.constraints; - return super.constraints.copyWith(maxWidth: double.infinity); + return super.constraints?.copyWith(maxWidth: double.infinity); } @override diff --git a/packages/flutter/test/material/button_bar_test.dart b/packages/flutter/test/material/button_bar_test.dart index 014bb9509a4..1b852af816b 100644 --- a/packages/flutter/test/material/button_bar_test.dart +++ b/packages/flutter/test/material/button_bar_test.dart @@ -627,4 +627,18 @@ void main() { }, ); }); + + testWidgets('_RenderButtonBarRow.constraints works before layout', (WidgetTester tester) async { + await tester.pumpWidget( + const MaterialApp(home: ButtonBar()), + Duration.zero, + EnginePhase.build, + ); + + final Finder buttonBar = find.byWidgetPredicate((Widget w) => '${w.runtimeType}' == '_ButtonBarRow'); + final RenderBox renderButtonBar = tester.renderObject(buttonBar) as RenderBox; + + expect(renderButtonBar.debugNeedsLayout, isTrue); + expect(renderButtonBar.constraints, isNull); + }); }