Flutter - Как получить уведомление, когда страница, которую я нажал, была открыта кнопкой назад?

Предположим этот сценарий: page1 Navigator.push на page2. Пользователь на странице 2 нажимает кнопку "Назад", поэтому страница 2 появляется, а страница 1 восстанавливает вид. Как мне поймать это событие на странице 1?


person shaharsol    schedule 14.11.2019    source источник


Ответы (3)


Вы можете проверить это, передав параметр из Navigator.pop ...

со второго экрана: -

 Navigator.pop(context, 'updateList'),

и на первом экране проверьте это и передайте условие, которое вы хотите: -

FloatingActionButton(
                  onPressed: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (BuildContext context) =>
                            new ManageAssignments(),
                      ),
                    ).then((val) {
                      if (val == 'updateList') getAssignementList();
                    });
                  },
                  backgroundColor: Theme.of(context).primaryColor,
                  child: Icon(Icons.add),
                )

Надеюсь, это сработает для вас :-)

person Zeeshan Ansari    schedule 14.11.2019
comment
В Dart 2 новое ключевое слово необязательно. Кроме того, использование new не рекомендуется в соответствии с рекомендациями по эффективному использованию Dart. - person Ravinder Kumar; 14.11.2019

Поэтому, когда происходит Navigator.push (), он возвращает Future. А за Navigator.pop () решено будущее. Вы можете вернуть значение из Navigator.pop, например, Navigator.pop (context, "MyResult"); Этот результат будет записан так - final result = Navigator.push (). Вы можете использовать результат в виджете, откуда был вызван Navigator.push ().

person Braj    schedule 14.11.2019

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

Нравится:

return WillPopScope(
      child: Scaffold(
          body: new Container(), // your body content
      onWillPop: (){
      //Screen is poped.
    },
    );
    
)
person Chetan Raval    schedule 14.11.2019