Fixed Buttons with icon RenderFlex overflow (#78018)

This commit is contained in:
lsaudon 2021-03-17 21:00:00 +01:00 committed by GitHub
parent 8aca65a92d
commit e260a73d9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 126 additions and 6 deletions

View file

@ -468,7 +468,7 @@ class _ElevatedButtonWithIconChild extends StatelessWidget {
final double gap = scale <= 1 ? 8 : lerpDouble(8, 4, math.min(scale - 1, 1))!;
return Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[icon, SizedBox(width: gap), label],
children: <Widget>[icon, SizedBox(width: gap), Flexible(child: label)],
);
}
}

View file

@ -229,7 +229,7 @@ class _FlatButtonWithIcon extends FlatButton with MaterialButtonWithIconMixin {
children: <Widget>[
icon,
const SizedBox(width: 8.0),
label,
Flexible(child: label),
],
),
minWidth: minWidth,

View file

@ -274,7 +274,7 @@ class _OutlineButtonWithIcon extends OutlineButton with MaterialButtonWithIconMi
children: <Widget>[
icon,
const SizedBox(width: 8.0),
label,
Flexible(child:label),
],
),
);

View file

@ -374,7 +374,7 @@ class _OutlinedButtonWithIconChild extends StatelessWidget {
final double gap = scale <= 1 ? 8 : lerpDouble(8, 4, math.min(scale - 1, 1))!;
return Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[icon, SizedBox(width: gap), label],
children: <Widget>[icon, SizedBox(width: gap), Flexible(child:label)],
);
}
}

View file

@ -265,7 +265,7 @@ class _RaisedButtonWithIcon extends RaisedButton with MaterialButtonWithIconMixi
children: <Widget>[
icon,
const SizedBox(width: 8.0),
label,
Flexible(child: label),
],
),
);

View file

@ -465,7 +465,7 @@ class _TextButtonWithIconChild extends StatelessWidget {
final double gap = scale <= 1 ? 8 : lerpDouble(8, 4, math.min(scale - 1, 1))!;
return Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[icon, SizedBox(width: gap), label],
children: <Widget>[icon, SizedBox(width: gap), Flexible(child:label)],
);
}
}

View file

@ -1112,6 +1112,26 @@ void main() {
await tester.pumpAndSettle();
}
});
testWidgets('Fixed ElevatedButton.icon RenderFlex overflow', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
width: 200,
child: ElevatedButton.icon(
onPressed: () {},
icon: const Icon(Icons.add),
label: const Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a euismod nibh. Morbi laoreet purus.',
),
),
),
),
),
);
expect(tester.takeException(), null);
});
}
TextStyle _iconStyle(WidgetTester tester, IconData icon) {

View file

@ -882,6 +882,26 @@ void main() {
await buildWidget(buttonMinWidth: buttonMinWidth);
expect(tester.widget<RawMaterialButton>(rawMaterialButtonFinder).constraints.minWidth, buttonMinWidth);
});
testWidgets('Fixed FlatButton.icon RenderFlex overflow', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
width: 200,
child: FlatButton.icon(
onPressed: () {},
icon: const Icon(Icons.add),
label: const Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a euismod nibh. Morbi laoreet purus.',
),
),
),
),
),
);
expect(tester.takeException(), null);
});
}
TextStyle? _iconStyle(WidgetTester tester, IconData icon) {

View file

@ -1222,6 +1222,26 @@ void main() {
expect(box.size, equals(const Size(76, 36)));
expect(childRect, equals(const Rect.fromLTRB(372.0, 293.0, 428.0, 307.0)));
});
testWidgets('Fixed OutlineButton.icon RenderFlex overflow', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
width: 200,
child: OutlineButton.icon(
onPressed: () {},
icon: const Icon(Icons.add),
label: const Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a euismod nibh. Morbi laoreet purus.',
),
),
),
),
),
);
expect(tester.takeException(), null);
});
}
PhysicalModelLayer _findPhysicalLayer(Element element) {

View file

@ -1288,6 +1288,26 @@ void main() {
await tester.pumpAndSettle();
}
});
testWidgets('Fixed OutlinedButton.icon RenderFlex overflow', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
width: 200,
child: OutlinedButton.icon(
onPressed: () {},
icon: const Icon(Icons.add),
label: const Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a euismod nibh. Morbi laoreet purus.',
),
),
),
),
),
);
expect(tester.takeException(), null);
});
}
PhysicalModelLayer _findPhysicalLayer(Element element) {

View file

@ -727,6 +727,26 @@ void main() {
expect(paddingRect.top, tallerWidget.top - 5);
expect(paddingRect.bottom, tallerWidget.bottom + 12);
});
testWidgets('Fixed RaisedButton.icon RenderFlex overflow', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
width: 200,
child: RaisedButton.icon(
onPressed: () {},
icon: const Icon(Icons.add),
label: const Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a euismod nibh. Morbi laoreet purus.',
),
),
),
),
),
);
expect(tester.takeException(), null);
});
}
TextStyle _iconStyle(WidgetTester tester, IconData icon) {

View file

@ -1084,6 +1084,26 @@ void main() {
await tester.pumpAndSettle();
}
});
testWidgets('Fixed TextButton.icon RenderFlex overflow', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
width: 200,
child: TextButton.icon(
onPressed: () {},
icon: const Icon(Icons.add),
label: const Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a euismod nibh. Morbi laoreet purus.',
),
),
),
),
),
);
expect(tester.takeException(), null);
});
}
TextStyle? _iconStyle(WidgetTester tester, IconData icon) {