Как мне сбросить значение обратного вызова Navigator.pop во Flutter? - PullRequest
1 голос
/ 03 августа 2020

Пожалуйста, примите мое объяснение ниже. У меня есть страница с 2 элементами BottomNavigationBar:

Page1(),
Page2(),

В Page1 есть кнопка, которая переходит на другую страницу с именем PostSomethingPage:

// in Page1
onPressed: () => Navigator.push(
   context, MaterialPageRoute<bool>(builder: 
     (context) => PostSomethingPage()))
        .then((isPostSuccess) => isPostSuccess 
          ? print('is Success!') : print('Failed!'));

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

Вот код в PostSomethingPage, который возвращает результат:

// in PostSomethingPage
Navigator.pop(context, isSuccess);

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

Но затем возникает проблема, когда я перехожу к Page2 и назад к Page1
Примечание: на данный момент я был от Page1 => PostSomethingPage => обратно к Page1 с результатом, после этого затем go к Page2

Потому что, когда я снова вернулся к Page1, оператор печати будет снова напечатан на основе ПОСЛЕДНЕГО известного значения. Но я хочу, чтобы значение обратного вызова было пустым вместо true или false

1 Ответ

1 голос
/ 03 августа 2020

используйте переменную для хранения значения, возвращаемого PostSomethingPage

//our variable initialized with null
bool isPostSuccess;

@override
Widget build(BuildContext context) {
  return FlatButton(onPressed: () async {
    //going to PostSomethingPage from Page1
    isPostSuccess = await Navigator.of(context).push(
        MaterialPageRoute<bool>(builder: (context) {
          return PostSomethingPage();
        })
    );
  }, child: Text(''));
  //we are back at the Page1
  //isPostSuccess will not be null
}

теперь, прежде чем вы go на Page2, просто снова установите для значения isPostSuccess значение null

    //going to Page2 from Page1
    isPostSuccess = null;
    Navigator.of(context).push(
        MaterialPageRoute<bool>(builder: (context) {
          return Page2();
        })
    );
...