我正在尝试创建一个包含可选单选按钮的弹出菜单,以便更改视图类型(例如图库、卡片、滑动、网格、列表等)。
我遇到的问题是 PopupMenu 有自己的用于选择值的回调,Radio 和 RadioListTile 也是如此。
忽略RadioListTile的onChanged
这是我的第一次尝试。这实际上是有效的,只是按钮永远呈灰色。为 RadioListTiles 提供非空 noop 函数会导致按钮不再变灰(禁用),但弹出菜单不再起作用。
new PopupMenuButton<String>(
...
itemBuilder: (ctx) => <PopupMenuEntry<String>>[
new PopupMenuItem(
child: new RadioListTile(
title: new Text("Cards"),
value: 'cards',
groupValue: _view,
onChanged: null),
value: 'cards'),
new PopupMenuItem(
child: new RadioListTile(
title: new Text("Swipe"),
value: 'swipe',
groupValue: _view,
onChanged: null),
value: 'swipe'),
],
onSelected: (String viewType) {
_view = viewType;
}));
使用RadioListTile,忽略PopupMenu
第二次尝试是完全忽略 PopupMenu 并仅使用 RadioListTileonChanged
。这些按钮不会变灰/禁用,但也不起作用。
new PopupMenuButton<String>(
...
itemBuilder: (ctx) => <PopupMenuEntry<Null>>[
new PopupMenuItem(
child: new RadioListTile(
title: new Text("Cards"),
value: 'cards',
groupValue: _view,
onChanged: (v) => setState(() => _view = v)),
value: 'cards'),
new PopupMenuItem(
child: new RadioListTile(
title: new Text("Swipe"),
value: 'swipe',
groupValue: _view,
onChanged: (v) => setState(() => _view = v)),
value: 'swipe'),
],
));
正确的做法是什么? PopupMenu 可以很好地处理极其简单的菜单,但元素选择给我带来了冲突。有没有办法获得一个“哑”弹出菜单,在按钮上显示一列小部件(样式像菜单)?