导航器PushReplacementName弹出按钮

时间:2020-02-20 12:13:54

标签: android flutter navigation runtime-error back

这很奇怪,但是下面的代码对我不起作用。使用以下代码时,我在主屏幕上看到一个向后箭头。

下面的第一行用于关闭对话框。第二个是进入主屏幕。

 Navigator.of(context, rootNavigator: true).pop();
 Navigator.of(context).pushReplacementNamed(HomeScreen.id);

这是我第一次遇到pushReplacementNamed这种情况。这是怎么回事?

2 个答案:

答案 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:)