关闭 ModalBottomSheet 时颤动 return 数据

Flutter return data when ModalBottomSheet is dismissed

当在屏幕上按下 FAB 时,我正在显示 ModelBottomSheet。当 ModelBottomSheet 弹出时,我 运行 一个方法,该方法使用从 ModelBottomSheet 返回的数据更新屏幕。

onPressed: () {
              print('FAB Pressed');
              showModalBottomSheet<SearchData>(
                isScrollControlled: true,
                context: context,
                builder: (context) => SingleChildScrollView(
                  child: SearchScreen(
                    searchData: _searchData,
                    locationEnabled: !userPosition.error,
                  ),
                ),
              ).then((value) => _updateList(value));
            },

在 ModelBottomSheet 上,我有一个弹出 ModelBottomSheet 和 returns 数据 (_searchData) 的按钮。

ElevatedButton(
                onPressed: () {
                  print('search button pressed');
                  if (_textSearch.text == null || _textSearch.text.isEmpty) {
                    _searchData.searchTerm = '';
                  } else {
                    _searchData.searchTerm = 'value=${_textSearch.text}';
                  }
                  if (_idSearch.text == null || _idSearch.text.isEmpty) {
                    _searchData.guideId = '';
                  } else {
                    _searchData.guideId = '&location=${_idSearch.text}';
                    _searchData.showOfficial = false;
                  }
                  Navigator.pop(context, _searchData);
                },

当 ModelBottomSheet 被关闭(即用户点击屏幕的上半部分)时,如何实现与按下 ModelBottomSheet 上的按钮相同的结果?

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

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

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

来源: