WillPopScope у меня не работает, трепетать - PullRequest
0 голосов
/ 04 февраля 2020

В моем нижнем меню навигации есть 4 разных элемента, и в одном случае мне нужно перейти на одну страницу и удалить все страницы в моем стеке, чтобы использовать этот код для навигации по другому экрану;

Navigator.pushAndRemoveUntil(
  context,
  PageRouteBuilder(
    pageBuilder: (context, anim1, anim2) => AnamenuTemelSayfa(currentIndex: 2),
    transitionsBuilder: (context, anim1, anim2, child) => Container(child: child),
    transitionDuration: Duration(milliseconds: 200),
  ),
  (_) => true,
);

После этой навигации, когда я нажимаю кнопку «Назад» на физическом устройстве, она возвращается к последнему экрану, который только что появился, чтобы справиться с этой проблемой, я изменяю истинное значение на ложное, но когда я делаю это после этого события навигации в все страницы приложения на кнопке «Назад» физического устройства не работают, поэтому я пытаюсь сделать еще одну вещь, чтобы обернуть вторую страницу с помощью WillPopScope, а не go назад. Я определил этот код;

//Second page
onWillPop: () async {
  return await Future.value(false);
},

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Ваш предикат маршрута должен вернуть false, чтобы удалить всю предыдущую страницу, и pu sh новую страницу.

Navigator.pushAndRemoveUntil(
  context,
  PageRouteBuilder(
    pageBuilder: (context, anim1, anim2) => AnamenuTemelSayfa(currentIndex: 2),
    transitionsBuilder: (context, anim1, anim2, child) => Container(child: child),
    transitionDuration: Duration(milliseconds: 200),
  ),
  (_) => false, // routePredicate
);

И теперь вам не нужно использовать WillPopScope.

0 голосов
/ 04 февраля 2020

Если вы хотите использовать willpopscope, вы должны использовать Navigator.push вместо Navigator.pushAndRemoveUntil

pushAndRemoveUntil удалить все страницы до текущей страницы, тогда вы не можете go вернуться на предыдущую страницу и ваш WillPopScope не звонит, поэтому, если вы хотите, чтобы пользователь не мог вернуться на предыдущую страницу, вам нужно обернуть эшафот виджетом WillPopScope следующим образом:

WillPopScope(
          onWillPop: () async => false,
          child: Scaffold(
              // your code here
          )
    )

РЕДАКТИРОВАТЬ: используйте этот навигатор (он удалит всю страницу до YourNewPage)

 Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (BuildContext context){
      return YourNewPage();
    }), (Route<dynamic> route) => false);
...