我需要在PopupMenuButton中使用RadioListTile,但PopupMenuButton的默认实现不允许这样做,因为PopupMenuButton有它的onSelected方法,Radio类有它的onChanged方法,所以它们管理自己的状态。如果我使用Radio类的onChanged方法,那么它不会在我使用它的<代码>D10方法时忽略/关闭<代码>D9的默认行为,并且它不会更新单选按钮,因此我使用的是所描述的C11的变通方法,但进行了一些修改。我正在使用ValueListenableBuilder而不是AnimatedBuilder,但问题是,当我现在选择一个不是来自onSelected的项目时,我希望它的默认行为是自动解除/关闭。
这是最小的样本
import 'package:flutter/material.dart';
void main() => runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
actions: [
SelectionPopupMenu(),
],
),
),
),
);
class SelectionPopupMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
final _selectionList = [
'First',
'Second',
];
final _selectedValueNotifier = ValueNotifier(0);
return PopupMenuButton<int>(
onSelected: ,
itemBuilder: (context) => List.generate(
_selectionList.length,
(index) => PopupMenuItem(
child: ValueListenableBuilder(
valueListenable: _selectedValueNotifier,
builder: (context, value, child) => RadioListTile<int>(
value: index,
title: Text(_selectionList[index]),
groupValue: _selectedValueNotifier.value,
onChanged: (value) {
_selectedValueNotifier.value = value!;
},
),
),
),
),
);
}
}发布于 2021-10-15 21:56:34
解决方案只需使用Navigator.pop(context);的任何对话框,弹出菜单,或屏幕返回或从屏幕上删除我使用它如下
onChanged: (value) {
selectedValueNotifier.value = value!;
Navigator.pop(context);
},https://stackoverflow.com/questions/69346862
复制相似问题