我有一个 StatelessWidget 类:
class PopupMenu extends StatelessWidget {
final VoidCallback editTaskCallback;
const PopupMenu({
required this.editTaskCallback,
super.key,
});
@override
Widget build(BuildContext context) {
return PopupMenuButton(
itemBuilder:(context) => [
PopupMenuItem(
onTap: null,
child: TextButton.icon(
onPressed: editTaskCallback,
icon: const Icon(Icons.edit),
label: const Text('Edit'),
),
),
],
);
}
}
只是想知道为什么当我按下 TextButton 时 VoidCallback 与
OnPressed
一起工作,但当我点击 PopupMenuItem 时与 onTap
一起工作。
在这里我如何调用 PopupMenu 类:
PopupMenu(
editTaskCallback: () {_editTask(context)},
),
这里是
_editTask(context)
方法:
void _editTask(BuildContext context) {
showModalBottomSheet(
isScrollControlled: true,
context: context,
builder: (context) => SingleChildScrollView(
child: Container(
padding:
EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
child: EditTaskBottom(
oldTask: task,
),
),
),
);
}
编辑:奇怪的是,当我将
print
语句添加到回调中时,OnTap
正在打印结果但没有 showModalBottomSheet
出现。
将
final VoidCallback editTaskCallback;
更改为final void Function()? editTaskCallback;