
以上图片中的按钮是我试图复制的。当它被点击时,它应该显示一个不同温度单位的列表。我从一个凸起的按钮开始,发现只显示弹出式列表并不容易。所以我换了个容器。它的工作方式,除了当点击按钮丢失时的涟漪效应。如果我删除BoxDecoration的颜色,它确实有效,但我确实希望按钮的颜色是白色的。有什么办法可以做到这一点吗?
Expanded(
flex: 2,
child: PopupMenuButton(
elevation: 3.0,
onSelected: (String value) {
setState(() {
_selection = value;
});
},
child: Container(
height: double.maxFinite,
width: double.maxFinite,
child: Center(
child: Text(
'C\n\nCelsius',
textAlign: TextAlign.center,
),
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
border: Border.all(
color: Colors.grey[kButtonBorderShade],
width: 0.5)),
),
itemBuilder: (BuildContext context) =>
<PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: 'Value1',
child: Text('Choose value 1'),
),
const PopupMenuItem<String>(
value: 'Value2',
child: Text('Choose value 2'),
),
const PopupMenuItem<String>(
value: 'Value3',
child: Text('Choose value 3'),
),
],
),
),编辑:谢谢你以下的回答。我得到了我想要的工作方式,并给出了建议。这是我的最后一个按钮:
Expanded(
flex: 2,
child: ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(10),
),
child: Material(
color: Colors.white,
child: PopupMenuButton(
onSelected: (String value) {
setState(() {
_selection = value;
});
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
border: Border.all(
color:
Colors.grey[kButtonBorderShade],
width: 0.5)),
child: Center(
child: Text(
'C\n\nCelsius',
textAlign: TextAlign.center,
),
),
),
itemBuilder: (BuildContext context) =>
<PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: 'Value1',
child: Text('Choose value 1'),
),
const PopupMenuItem<String>(
value: 'Value2',
child: Text('Choose value 2'),
),
const PopupMenuItem<String>(
value: 'Value3',
child: Text('Choose value 3'),
),
],
),
),
),
),发布于 2019-10-20 16:46:52
您可以使用Material包装PopupMenuButton,并将color属性放在Material小部件中而不是BoxDecoration中,如下所示:
Material(
color: Colors.white,
child: PopupMenuButton(...https://stackoverflow.com/questions/58474870
复制相似问题