Как вызвать функцию для обновления значения после всплывающего экрана во флаттере? - PullRequest
0 голосов
/ 06 мая 2020

Экран 1: показывает список элементов с кнопкой добавления. Экран 2: форма для добавления нового элемента в список.

Экран 2》 Экран 1 При вызове navigator.pop () на экране 2, как вызвать метод / setstate (для обновления списка) на экране 1? Может кто-нибудь мне помочь?

Я не хотел снова запускать экран. Мне просто нужно запустить метод для обновления моего списка после открытия предыдущего экрана?

Ответы [ 4 ]

2 голосов
/ 06 мая 2020

При переходе от экрана 1 к экрану 2 вы используете метод push. Метод push возвращает объект Future. Вы можете использовать метод then из Future для выполнения кода после того, как экран 2 был извлечен из стека навигации.

Navigator.of(context)
  .push(MaterialPageRoute(
   builder: (context) => Screen2(),
  ))
  .then((value) {
    // you can do what you need here
    // setState etc.
  });
1 голос
/ 06 мая 2020

Вы можете использовать Provider или BLo c, или вы можете дождаться результата, когда вы sh страницу

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

Вы можете сделать это так:

// this method waits for the pop to be called
var data = await Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => LoginScreen()),
);

debugPrint(data); 

// here the second argument is the data 
Navigator.pop(context, "data");  // popped from LoginScreen().

вывод

данные

Тот же метод можно выполнить, как показано ниже

   // this method waits for the pop to be called
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => LoginScreen()),
).then((data){
    // then will return value when the loginScreen's pop is called.
    debugPrint(data); 
});

Вот хорошая статья, чтобы узнать об этом https://medium.com/flutter-community/flutter-push-pop-push-1bb718b13c31

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

Navigator.pop имеет второй аргумент с именем result. Затем вы можете вернуть значение, которое вам нужно, на первую страницу, которая его прочитает, как возвращаемое значение Navigator.push

...