Flutter - установить результат для возврата при переходе пользователя назад - PullRequest
0 голосов
/ 04 мая 2020

При вызове Navigator.pop() результат может быть передан на предыдущий экран. Есть ли способ установить результат так, чтобы, если пользователь переходит обратно самостоятельно, результат все еще возвращается на предыдущую страницу?

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

Переопределение детектора касания кнопки «назад», как я видел в другом месте, не является приемлемое решение, потому что пользователь может перейти назад каким-либо другим способом, например, проведя пальцем по экрану или нажав кнопку возврата Android.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Да, вы можете передавать данные между экранами в обоих направлениях. Когда вы возвращаетесь назад, отправьте data you wi sh, чтобы отправить это со второго экрана

RaisedButton(
  onPressed: () {
    // The Nope button returns "data" as the result.
    Navigator.pop(context, 'data');
  },
  child: Text('Nope!'),
);

и получите результат на вашем первом экране, как этот

final result = await Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => SecondScreen()),
  );

источник

Что касается другой проблемы, когда пользователь может go вернуться к предыдущему экрану, нажав кнопку назад, вы можете перенести второй экран с виджетом WillPopScope и предоставить onWillPop обратный вызов. Это отменит всплывающее окно второго экрана и выполнит обратный вызов, где вы можете определить значение, которое вы sh вернете со второго экрана.

@override
  Widget build(BuildContext context) {
    return WillPopScope(
      child: Scaffold(), // or your widget
      onWillPop: () {
        return Future.delayed(Duration(microseconds: 0), () {
          return Navigator.pop(context, "return-data");
        });
      },
    );
  }
0 голосов
/ 04 мая 2020

Да, это возможно, при переходе к Screen B из Screen A, сделайте функцию onTap() asynchronous и дождитесь результата от Screen B.

Проверьте код ниже: Это отлично работает:

На Screen A, введите этот код:

 onTap: () async {
        // receive the data you are sending from screen B here
        final result = await Navigator.push( context);
       },

На Screen B, введите этот код:

onTap: (){
    // pass the data you want to use in screen A as the second paramter
     Navigator.pop(context,number);
      },

Надеюсь, это поможет

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