dropdrown.dart
中的类_DropdownMenuPainter
和_DropdownMenuState
。在_DropdownMenuPainter
中,更改构造函数中设置的BoxDecoration
半径即可。请保留HTML标签。_DropdownMenuPainter({
...
this.resize,
}) : _painter = BoxDecoration(
...
borderRadius: BorderRadius.circular(16.0), // Set the radius you want here
boxShadow: kElevationToShadow[elevation],
).createBoxPainter(),
super(repaint: resize);
_DropdownMenuState
中的build()
方法内,使用ClipRRect
包裹Material
小部件,并将其borderRadius
设置为与_DropdownMenuPainter
相同:return FadeTransition(
opacity: _fadeOpacity,
child: CustomPaint(
...
child: Semantics(
...
child: ClipRRect(
borderRadius: BorderRadius.circular(16.0), // This must be identical to the one set before
child: Material(
...
),
),
),
),
);
https://gist.github.com/hugocbpassos/2a63594a21d7f231e97dd7dc1f18ee68
要使用它,只需设置radius
属性:
DropdownButton(
radius: 16,
items: [
...
],
);
ClipRRect
的原因是有的。如果你增加半径(例如24),并点击第一个或最后一个菜单项,你会发现涟漪效果会绘制在下拉菜单外部。使用ClipRRect
可以避免这种情况发生,所以我强烈建议你使用它,因为即使在某些不同的屏幕尺寸下,使用16半径也可能出现这种错误行为。 - Hugo Passos