flutter - Flutter PopupMenuButton - 选择时不要关闭菜单
问题描述
我的弹出菜单中有一个复选框项目(PopupMenuItem)列表,它由 popupMenuButton 触发。我希望用户能够选择多个复选框,但是一旦选择了一个项目,它就会关闭窗口。
有什么办法可以防止这种情况发生吗?我需要它保持打开状态,或者立即强制它再次打开。
(我尝试创建自己的 PopupItem 类来覆盖“handleTap()”,但我需要更新父菜单视图的状态,我无法从另一个类调用它。所以我再次删除了它。)
class TopicsNotificationMenu extends StatefulWidget {
List<Topic> topics = [];
TopicsNotificationMenu(this.topics);
@override
_TopicsNotificationMenuState createState() =>
_TopicsNotificationMenuState();
}
class _TopicsNotificationMenuState extends State<TopicsNotificationMenu> {
_TopicsNotificationMenuState();
_updateTopics(_tp){
setState(() {
if(_tp.value == true){
_tp.value = false;
}else{
_tp.value = true;
_registerTopic(_tp.name);
}
});
}
@override
Widget build(BuildContext context) {
return PopupMenuButton(
onSelected: (value) {
_updateTopics(value);
},
itemBuilder: (BuildContext context) {
return widget.topics.map((var tp) {
var _icon = (tp.value == true) ? Icons.check_box : Icons.check_box_outline_blank;
return PopupMenuItem(
value: tp,
child: ListTile(
leading: Icon(_icon),
title: Text(tp.name),
),
);
}).toList();
});
}
解决方案
每次用户选择后,您都可以尝试重新打开它。我在这里做了一个例子
或者,我建议您使用所需的行为创建自己的小部件。
推荐阅读
- flutter - 当我使用 ScrollController 侦听器时颤动锁定一秒 ui
- ruby-on-rails - 如何在 rails_admin 的嵌套字段中自定义输入字段的操作?
- azure - 将自定义数据传递给 azure vmss 的操作系统选项 - Terraform
- python - 有没有办法在 Python 中管理大量导入语句?
- python-3.x - Python按浮点值排序字典列表
- c++ - 如何设置 .vcxproj 让 MSBuild 编译一个 dll
- php - PHP 致命错误:无法声明类 CreateUsersTable,因为该名称已在使用中
- seaborn - 在使用 Seaborn Distplot 时了解 bin 和相关分布
- javascript - 加载新页面时如何保持链接的活动状态
- azure - 通过 RDP 连接到 Azure VM:发生内部错误