这很奇怪,但是下面的代码对我不起作用。使用以下代码时,我在主屏幕上看到一个向后箭头。
下面的第一行用于关闭对话框。第二个是进入主屏幕。
Navigator.of(context, rootNavigator: true).pop();
Navigator.of(context).pushReplacementNamed(HomeScreen.id);
这是我第一次遇到pushReplacementNamed
这种情况。这是怎么回事?
答案 0 :(得分:1)
可能是因为堆栈中还有另一个屏幕。当您调用pushReplacementNamed
时,它不会将整个堆栈替换为您提供的堆栈。您可以尝试以下代码吗?
// true根据上述查询条件不起作用
Navigator.of(context).pushNamedAndRemoveUntil(HomeScreen.id, (Route<dynamic> route) => true);
//错误的作品
Navigator.of(context).pushNamedAndRemoveUntil(HomeScreen.id, (Route<dynamic> route) => false);
答案 1 :(得分:0)
这不会提供所需的结果,因为在调用另一个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:)