Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter WillPopScope不适合我,Flatter_Flutter_Dart_Navigation_Stack - Fatal编程技术网

Flutter WillPopScope不适合我,Flatter

Flutter WillPopScope不适合我,Flatter,flutter,dart,navigation,stack,Flutter,Dart,Navigation,Stack,我有4个不同的项目在我的底部导航菜单,在一种情况下,我需要导航到一个页面,并删除我的堆栈中的所有页面,以便我使用此代码来导航我的另一个屏幕 Navigator.pushAndRemoveUntil( context, PageRouteBuilder( pageBuilder: (context, anim1, anim2) => AnamenuTemelSayfa(currentIndex: 2), transitionsBuilder: (context, an

我有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包装第二个页面以不返回,我定义了此代码

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

如果您想使用willpopscope,您应该使用
Navigator.push
而不是
Navigator.push和moveuntil

按下并移动直到删除所有页面直到当前页面,然后您无法返回到上一页,并且您的WillPopScope不会调用,因此如果您想阻止用户返回到上一页,您应该使用WillPopScope小部件包装您的支架,如下所示:

WillPopScope(
          onWillPop: () async => false,
          child: Scaffold(
              // your code here
          )
    )
编辑: 使用此导航器(在新建页面之前,它将删除所有页面)

Navigator.pushandremoveintil(上下文,MaterialPage路由(生成器:(BuildContext上下文){
返回您的新页面();
}),(路由)=>false);

路由谓词应返回
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

你的帖子里没有问题。很抱歉给我的问题下了定义。这就是我的问题“当我使用上面的代码导航到另一个屏幕时,它应该删除堆栈中的所有页面,无法使用物理设备上的“后退”按钮”实际上这正是我需要的,“在导航到seocnd页面后删除堆栈中的所有页面”。这就是为什么我定义了WillPopScope和PushAndRemoveTill,使其没有返回的机会,但仍然会导航到上一个屏幕。Navigator.PushAndRemoveTill(b上下文,PageRouteBuilder)(pageBuilder:(上下文,动画1,动画2)=>AnamenuTemelSayfa(当前索引:2),TransitionBuilder:(上下文,动画1,动画2,儿童)=>Container(儿童:儿童),转换持续时间:持续时间(毫秒:200),(路由)=>false);我需要将MaterialPage路由更改为PageBuilder,因为我将当前上下文发送到自定义导航包的根目录,以更改切换我的底部导航项您可以从应用程序发送图片吗?或者发送你的代码这是一个特殊的项目,先生,这样我就无法发送所有的代码,但是如果你告诉我你需要看什么,我可以将它们与代码粘贴在一起发送。我希望看到你的底部导航项,并更喜欢屏幕截图和代码在一起。你是对的,我以前尝试过,然后后退按钮在应用程序中永远不起作用。当我导航到另一个页面时,有什么方法可以实现它吗
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
);