当点击showModalBottomSheet外部时,如何控制传递给Navigator.pop()的内容?

4

我启动了一个底部弹出式模态窗口,然后将返回的数据作为其future使用。

var modalFuture = showModalBottomSheet(
                // ...
              );
              modalFuture.then((data) {
                // Use data
              });

我使用以下方式将数据从modal窗口小部件返回给它:

Navigator.pop(context, data);

当我使用已经设置好的小部件完成模态交互时,这个功能很好用。但是当我在模态框外部点击时,遇到了问题。点击模态框外部会自动关闭模态框(通过Navigator.pop(context)调用?)。我可以接受这种关闭交互,但我想和它一起发送数据(通过Navigator.pop(context, data)调用)。有没有办法在单击showModalBottomSheet模态框外部时覆盖隐式弹出操作?

1个回答

4

您可以使用WillPopScope将ModalWidget包装起来。可以参考以下示例:

 WillPopScope(
  onWillPop: () async {
    Navigator.pop(context, data);
    return true; // return true if needs to be popped
  },
  child: ModelWidget(
    …
  ),
);

这将确保在使用返回按钮自动弹出时调用Navigator.pop。

正是我所需要的。非常感谢你。 - Zach Foster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接