我有一个项目列表。每个项目都有一个按钮来显示一个子菜单来执行一些操作。我想只显示一个子菜单并隐藏其他子菜单。当我点击IconButton
时,它会显示和隐藏一个子菜单,并且工作正常,但当另一个项目子菜单打开时,我点击另一个,我无法处理隐藏另一个打开的子菜单和打开新点击的子菜单。
下面是截图:
下面是列表生成器
class List extends StatelessWidget {
const List({super.key, this.items});
final List<ListItem> items;
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (context, index) {
return ItemListTile(
miner: items[index],
);
},
itemCount: items.length,
);
}
}
下面是ItemListTile
代码:
class ItemListTile extends StatelessWidget {
const ItemListTile({super.key, this.item});
final Item item;
@override
Widget build(BuildContext context) {
return ListTile(
title: Text('title'),
trailing: IconButton(
onPressed: () {
// How to toggle menus open and close state?
if (isOpen) {
closeMenu();
} else {
openMenu();
}
},
icon: const Icon(
Icons.more_vert_outlined,
color: Colors.white,
),
color: Colors.white,
),
);
}
void openMenu() {
// How to handle state?
findButton();
overlayEntry = _overlayEntryBuilder();
Overlay.of(context, debugRequiredFor: widget).insert(overlayEntry!);
}
void closeMenu() {
// How to handle state?
overlayEntry?.remove();
}
@override
void dispose() {
overlayEntry?.remove();
overlayEntry = null;
super.dispose();
}
}
我想学习使用有状态的小部件或块模式解决这个问题。提前感谢。
1条答案
按热度按时间bvk5enib1#
很抱歉使用setstate,因为我不知道您使用的是哪种状态管理,但我可以向您展示一个简单的示例,说明如何在一个状态打开时关闭其他状态: