Unverified Commit a9c71d7e authored by Taha Tesser's avatar Taha Tesser Committed by GitHub

[Reland]: Fix `DropdownButton` menu clip (#104251)

parent 406d86b4
...@@ -286,27 +286,33 @@ class _DropdownMenuState<T> extends State<_DropdownMenu<T>> { ...@@ -286,27 +286,33 @@ class _DropdownMenuState<T> extends State<_DropdownMenu<T>> {
namesRoute: true, namesRoute: true,
explicitChildNodes: true, explicitChildNodes: true,
label: localizations.popupMenuLabel, label: localizations.popupMenuLabel,
child: Material( child: ClipRRect(
type: MaterialType.transparency, borderRadius: widget.borderRadius ?? BorderRadius.zero,
textStyle: route.style, clipBehavior: widget.borderRadius != null
child: ScrollConfiguration( ? Clip.antiAlias
// Dropdown menus should never overscroll or display an overscroll indicator. : Clip.none,
// Scrollbars are built-in below. child: Material(
// Platform must use Theme and ScrollPhysics must be Clamping. type: MaterialType.transparency,
behavior: ScrollConfiguration.of(context).copyWith( textStyle: route.style,
scrollbars: false, child: ScrollConfiguration(
overscroll: false, // Dropdown menus should never overscroll or display an overscroll indicator.
physics: const ClampingScrollPhysics(), // Scrollbars are built-in below.
platform: Theme.of(context).platform, // Platform must use Theme and ScrollPhysics must be Clamping.
), behavior: ScrollConfiguration.of(context).copyWith(
child: PrimaryScrollController( scrollbars: false,
controller: widget.route.scrollController!, overscroll: false,
child: Scrollbar( physics: const ClampingScrollPhysics(),
thumbVisibility: true, platform: Theme.of(context).platform,
child: ListView( ),
padding: kMaterialListPadding, child: PrimaryScrollController(
shrinkWrap: true, controller: widget.route.scrollController!,
children: children, child: Scrollbar(
thumbVisibility: true,
child: ListView(
padding: kMaterialListPadding,
shrinkWrap: true,
children: children,
),
), ),
), ),
), ),
......
...@@ -3809,4 +3809,35 @@ void main() { ...@@ -3809,4 +3809,35 @@ void main() {
expect(tester.getBottomRight(find.text(hintText)).dx, 776.0); expect(tester.getBottomRight(find.text(hintText)).dx, 776.0);
expect(tester.getBottomRight(find.text(hintText)).dy, 350.0); expect(tester.getBottomRight(find.text(hintText)).dy, 350.0);
}); });
testWidgets('BorderRadius property clips dropdown menu', (WidgetTester tester) async {
const double radius = 20.0;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Center(
child: DropdownButtonFormField<String>(
borderRadius: BorderRadius.circular(radius),
value: 'One',
items: <String>['One', 'Two', 'Three', 'Four']
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (_) { },
),
),
),
),
);
await tester.tap(find.text('One'));
await tester.pumpAndSettle();
final RenderClipRRect renderClip = tester.allRenderObjects.whereType<RenderClipRRect>().first;
expect(renderClip.borderRadius, BorderRadius.circular(radius));
});
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment