当我单击弹出菜单按钮时,如何删除项目列表?但是,我的列表和弹出菜单位于两个单独的文件中。我需要知道根据按下的列表项删除了哪一个即时消息。
pop_up_menu.dart:
drawRect(1, 1, this.getWidth() - 3, this.getHeight() - 3)
因此,将这个弹出菜单导入到list_tile.dart中,每当我单击弹出菜单按钮“删除”时,我都需要删除已按下弹出菜单的选定列表项
List_tile.dart:
import 'package:flutter/material.dart';
class PopUpMenu extends StatelessWidget {
void showMenuSelection(String value) {
print("pressed");
}
@override
Widget build(BuildContext context) {
return PopupMenuButton<String>(
padding: EdgeInsets.zero,
icon: Icon(Icons.more_vert),
onSelected: showMenuSelection,
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: 'Create another',
child: ListTile(
leading: Icon(Icons.add), title: Text('Create another'))),
const PopupMenuItem<String>(
value: 'Delete',
child: ListTile(
leading: Icon(Icons.delete), title: Text('Delete')))
],
);
}
}
因此,此列表中的每个项目都有一个弹出菜单,该菜单中有删除选项。当按下删除选项时,它必须删除触发它的项目。
示例:当按下user2的弹出菜单按钮delete时,应删除user2。
答案 0 :(得分:0)
向您的PopUpMenu
类添加回调函数:
class PopUpMenu extends StatelessWidget {
VoidCallback onDelete;
PopUpMenu({this.onDelete});
void showMenuSelection(String value) {
switch (value) {
case 'Delete':
onDelete();
break;
// Other cases for other menu options
}
}
然后在原始类中创建它时:
...
trailing: PopUpMenu(
onDelete: () {
levelsData.removeWhere((element) => element == element);
}
)));
}
Flutter的一般经验法则是将回调传递给子级,而不是尝试访问父级中的数据。
您可能还需要将StuffInTiles
小部件设为有状态,并将setState(() {});
添加到onDelete
,因为仅删除该值实际上并不会使用新列表来更新视图。 / p>