这很奇怪,但下面的代码对我不起作用。当使用下面的代码时,我会在主屏幕上看到一个返回箭头。
下面的第一行用于关闭对话框。第二个是转到主屏幕。
Navigator.of(context, rootNavigator: true).pop();
Navigator.of(context).pushReplacementNamed(HomeScreen.id);
这是我第一次用pushReplacementNamed
面对这种情况。这是怎么回事?
这可能是因为堆栈中有另一个屏幕。当您调用pushReplacementNamed
时,它不会用您给出的堆栈替换整个堆栈。你能试试下面的代码吗;
//基于上述查询条件,true不起作用
Navigator.of(context).pushNamedAndRemoveUntil(HomeScreen.id, (Route<dynamic> route) => true);
//虚假作品Navigator.of(context).pushNamedAndRemoveUntil(HomeScreen.id, (Route<dynamic> route) => false);
这不会给出所需的结果,因为在调用另一个Navigator类之前,您甚至已经弹出了上下文。我尝试了Navigator.of(context).pushNamedAndRemoveUntil()
功能,但还是用屏幕1上的后退按钮在堆栈上按下了两次HomeScreen。因此,我终于通过内置函数Navigator.of(context).popUntil()
得到了这个。您可以运行dartpad代码https://dartpad.dev/a10ed43452736b5c6b3d1abe6a7eda45以查看所需效果或查看下面的代码。以下是要点代码的一部分:
...
class ThirdPage extends StatelessWidget{
static const routeName = '/third';
@override
Widget build(BuildContext context){
void _nextPage(){
//Logic here - ***************************
Navigator.of(context).popUntil((Route<dynamic> route) => route.isFirst);
}
return Scaffold(
appBar: AppBar(
title: Text('Third Page'),
),
body: Center(
child: Text('Third Page'),
),
floatingActionButton: FloatingActionButton(
onPressed: _nextPage,
child: Icon(Icons.add),
),
);
}
}
快乐编码D:(