gpt4 book ai didi

Flutter 导航,重新打开页面而不是再次推送

转载 作者:行者123 更新时间:2023-12-03 13:29:36 35 4
gpt4 key购买 nike

我是 flutter 的新手,我正在开发一个具有多个屏幕的应用程序。

我想知道如何阻止 flutter 创建同一路线的多个屏幕,
例如我有 第1页第2页 ,如果我单击按钮导航到第 2 页并再次单击同一个按钮,应用程序将推送一个新屏幕 第2页我会得到它两次,如果我点击返回按钮,它会将我发送回第一个创建的 第2页

有没有办法只创建每个页面一次然后重新打开它,如果它已经被推送到堆栈中?

我正在使用 Navigator.push对于我所有的导航

最佳答案

在这里使用一个简单的逻辑

  • 如果新页面与当前页面相同,则使用 Navigator.push(context,route) .
  • 如果新页面不同,则使用 Navigator.pushReplacement(context,route) .


  • 如果您使用的是命名路由,则为
  • 与当前页面相同,使用 Navigator.pushNamed(context,name) .
  • 不同的页面,使用 Navigator.pushReplacementNamed(context,name) .


  • 完整代码示例
    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    home: SO(),
    );
    }
    }

    class SO extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    body: PageOne(),
    );
    }
    }

    class PageOne extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('Page 1'),
    ),
    backgroundColor: Colors.amber,
    body: Center(
    child: Column(
    mainAxisSize: MainAxisSize.min,
    children: <Widget>[
    RaisedButton(
    onPressed: () {
    print('creating replacement page 1');
    Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) {
    return PageOne();
    }));
    },
    child: Text('Go to page 1'),
    ),
    RaisedButton(
    onPressed: () {
    print('creating new page 2');
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
    return PageTwo();
    }));
    },
    child: Text('Go to page 2'),
    ),
    ],
    ),
    ),
    );
    }
    }

    class PageTwo extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text('Page 2'),
    ),
    backgroundColor: Colors.brown,
    body: Center(
    child: Column(
    mainAxisSize: MainAxisSize.min,
    children: <Widget>[
    RaisedButton(
    onPressed: () {
    print('creating new page 1');
    Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => PageOne()));
    },
    child: Text('Go to page 1'),
    ),
    RaisedButton(
    onPressed: () {
    print('creating replacement page 2');
    Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) => PageTwo()));
    },
    child: Text('Go to page 2'),
    ),
    ],
    ),
    ),
    );
    }
    }

    关于Flutter 导航,重新打开页面而不是再次推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59457306/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com