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

How can I control what is passed to Navigator.pop() when clicking outside of a showModalBottomSheet?

我启动了一个模态底部 sheet,然后使用 returned 的数据作为它的未来。

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

我 return 从模态小部件向它发送数据:

Navigator.pop(context, data);

这在完成与我设置的小部件的模式交互时效果很好。 单击模式外部时遇到问题。在模态框外单击会导致模态框自动关闭(使用 Navigator.pop(context) 调用?)。我对这种结束互动没意见,但我想用它发回数据(通过 Navigator.pop(context, data) 调用)。在 showModalBottomSheet 模态之外单击时,是否可以覆盖隐式弹出?

您可以使用 WillPopScope 包装您的 ModalWidget。你可以看下面的例子

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

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