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

В моем приложении Flutter у меня есть 2 страницы: Page1 и Page2. На странице Page 1 у меня есть кнопка, которая переводит пользователя на страницу Page2 через эту строку кода:

Navigator.pushNamed(
  context,
  '/page2',
  arguments: someParam,
),

Page2 использует Scaffold и AppBar, через которые пользователь может перейти обратно на страницу 1.
На странице 2 я получаю переданный аргумент с:

ModalRoute.of(context).settings.arguments

Кроме того, Page2 также выполняет некоторую задачу, которая имеет смысл, только если пользователь действительно находится на Page2.

Я заметил, что когда я нахожусь на Page2 и нажимаю стрелка назад вызывает метод build () как Page1, так и Page2.

Почему это проблема (для меня)? Приложение также получает уведомления pu sh, и когда пользователь открывает их, он / она направляется на страницу Page1. Однако, если пользователь был на странице 2, поместите приложение в фоновом режиме, а затем откройте уведомление, благодаря эффекту, описанному выше, оно также запускает эту фоновую задачу, что крайне негативно влияет на работу пользователя.

Как я могу запретить формированию Page2 build () при переходе от нее? Или, если это невозможно или плохая идея, как я могу определить в методе build () Page2, что текущий вызов исходит от навигации?

Спасибо и с уважением!

1 Ответ

0 голосов
/ 02 апреля 2020

ОК, тем временем я мог бы найти обходной путь, чтобы предотвратить срабатывание триггера при переходе прочь:

if (ModalRoute.of(context).isActive) {
  fireTrigger();
}

Может быть, это полезно для кого-то, кто сталкивается с проблемой.

Как отметил в комментариях Реми, предпочтительнее было бы иметь чистую функцию сборки (без побочных эффектов).

...