Как перезагрузить или вызвать некоторую функцию initState() во флаттере при использовании pop

Я пытаюсь запустить какой-то метод, когда пользователь нажимает «Назад» или я использую Navigator.pop() на втором экране.

У меня два экрана.

  1. Экран настройки
  2. Экран редактирования

После редактирования я выталкиваю пользователя на первую секунду. Теперь на первом экране я использую SharedPreference. Но мне нужно повторно запустить метод, когда пользователь вернется на 1-й экран. Как я могу это сделать?


person Hkm Sadek    schedule 14.10.2019    source источник


Ответы (1)


При переходе на экран Edit с экрана Settings используйте это (внутри экрана Settings)

Navigator.pushNamed(context, "/editScreen").then((_) {
  // you have come back to your Settings screen 
  yourSharedPreferenceCode();
});

Если вы хотите запустить этот код только для какого-то события, которое произошло на вашем Edit экране, вы можете использовать pop метод внутри Edit экрана, например

Navigator.pop(context, true); // pass true value

И выше код должен быть:

Navigator.pushNamed(context, "/editScreen").then((value) {
  if (value) // if true and you have come back to your Settings screen 
    yourSharedPreferenceCode();
});

Изменить:

async-await будет выглядеть примерно так:

bool value = await Navigator.pushNamed(context, "/editScreen");
if (value) // if true and you have come back to your Settings screen 
  yourSharedPreferenceCode();
person CopsOnRoad    schedule 14.10.2019
comment
Как будет выглядеть код с async и await? - person Alex Vang; 07.03.2020