WillPopScope对我不起作用,颤抖

时间:2020-02-04 08:33:53

标签: flutter dart navigation stack

我的底部导航菜单中有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,
);

在导航之后,当我按下物理设备上的“后退”按钮时,它会返回到我刚出现的最后一个屏幕,为解决此问题,我将true值更改为false,但是当我在导航事件中执行此操作时物理设备上的“返回”按钮上应用程序的任何页面均不起作用,因此我尝试做另一件事是用WillPopScope包装第二页而不要返回我已经定义了此代码;

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

2 个答案:

答案 0 :(得分:0)

如果要使用willpopscope,则应使用Navigator.push而不是Navigator.pushAndRemoveUntil

pushAndRemoveUntil 删除所有页面,直到您当前的页面为止,然后您将无法返回上一页,并且您的 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);

答案 1 :(得分:0)

您的路线谓词应返回false,以删除所有上一页并推送新页面。

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