Flutter:VoidCallback 不适用于 OnTap 但适用于 OnPressed

问题描述 投票:0回答:1

我有一个 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
出现。

flutter dart void
1个回答
0
投票

final VoidCallback editTaskCallback;
更改为
final void Function()? editTaskCallback;

© www.soinside.com 2019 - 2024. All rights reserved.