Skip to content

Commit

Permalink
Fix DropdownButton menu clip (#102970)
Browse files Browse the repository at this point in the history
  • Loading branch information
TahaTesser committed May 7, 2022
1 parent 90868d3 commit 2f65753
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 21 deletions.
45 changes: 24 additions & 21 deletions packages/flutter/lib/src/material/dropdown.dart
Original file line number Diff line number Diff line change
Expand Up @@ -286,27 +286,30 @@ class _DropdownMenuState<T> extends State<_DropdownMenu<T>> {
namesRoute: true,
explicitChildNodes: true,
label: localizations.popupMenuLabel,
child: Material(
type: MaterialType.transparency,
textStyle: route.style,
child: ScrollConfiguration(
// Dropdown menus should never overscroll or display an overscroll indicator.
// Scrollbars are built-in below.
// Platform must use Theme and ScrollPhysics must be Clamping.
behavior: ScrollConfiguration.of(context).copyWith(
scrollbars: false,
overscroll: false,
physics: const ClampingScrollPhysics(),
platform: Theme.of(context).platform,
),
child: PrimaryScrollController(
controller: widget.route.scrollController!,
child: Scrollbar(
thumbVisibility: true,
child: ListView(
padding: kMaterialListPadding,
shrinkWrap: true,
children: children,
child: ClipRRect(
borderRadius: widget.borderRadius ?? BorderRadius.zero,
child: Material(
type: MaterialType.transparency,
textStyle: route.style,
child: ScrollConfiguration(
// Dropdown menus should never overscroll or display an overscroll indicator.
// Scrollbars are built-in below.
// Platform must use Theme and ScrollPhysics must be Clamping.
behavior: ScrollConfiguration.of(context).copyWith(
scrollbars: false,
overscroll: false,
physics: const ClampingScrollPhysics(),
platform: Theme.of(context).platform,
),
child: PrimaryScrollController(
controller: widget.route.scrollController!,
child: Scrollbar(
thumbVisibility: true,
child: ListView(
padding: kMaterialListPadding,
shrinkWrap: true,
children: children,
),
),
),
),
Expand Down
31 changes: 31 additions & 0 deletions packages/flutter/test/material/dropdown_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3839,4 +3839,35 @@ void main() {
expect(tester.getBottomRight(find.text(hintText)).dx, 776.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));
});
}

0 comments on commit 2f65753

Please sign in to comment.