Как я могу контролировать, что передается в Navigator.pop () при щелчке за пределами showModalBottomSheet?

Я запускаю модальный нижний лист, а затем использую возвращенные данные в качестве его будущего.

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

Я возвращаю ему данные из модального виджета с помощью:

Navigator.pop(context, data);

Это хорошо работает при завершении модального взаимодействия с установленным мной виджетом. У меня проблема при нажатии вне модального окна. Щелчок за пределами модального окна приводит к автоматическому закрытию модального окна (с Navigator.pop(context) вызовом?). Я согласен с этим завершающим взаимодействием, но я хотел бы отправить данные обратно вместе с ним (с помощью Navigator.pop(context, data) вызова). Есть ли способ переопределить неявное всплывающее окно при щелчке вне модального окна showModalBottomSheet?


person Zach Foster    schedule 28.11.2019    source источник


Ответы (1)


Вы можете обернуть свой ModalWidget с помощью WillPopScope. Вы можете увидеть пример ниже

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

Это гарантирует, что Navigator.pop будет вызываться при автоматическом открытии с помощью кнопки возврата.

person Harkunwar    schedule 28.11.2019
comment
Именно то, что я искал. Большое Вам спасибо. - person Zach Foster; 28.11.2019