【问题标题】:Flutter how to navigate back to a particular pageFlutter 如何导航回特定页面
【发布时间】:2019-08-02 23:34:30
【问题描述】:

我有一个包含多个页面的应用程序,其中一些页面会根据用户选择跳过...

例如,我有以下页面

details.dart

contact.dart

address.dart

code.dart

summary.dart

我想从上述任何一个页面转到另一个页面...但是,我想先检查它们是否在堆栈中,然后弹出到它。否则将该页面压入堆栈

我如何在 Flutter 中做到这一点

【问题讨论】:

  • 也许是 Navigator.of(context).canPop() 方法。看看这个中等页面。它有一些关于推送和弹出的有用信息。 link.medium.com/9OxEJw0ZPY

标签: flutter dart navigation


【解决方案1】:

我想你可能想使用Navigator.of(context).pushNamedAndRemoveUntilNavigator.popUntil

它们非常相似,但顾名思义,pushNamedAndRemoveUntil 在谓词匹配时推送一条新路由,而popUntil 重用树中现有的 Route/Widget。

您可以在这个精彩的Medium post 上阅读有关它们的更多信息,更详细地解释所有选项。

【讨论】:

  • 谢谢,但是如何判断路由是否不在堆栈中
  • 你可以使用 onUnknownRoute 。
【解决方案2】:

你可以在materialApp里面使用路由,在home之后

return MaterialApp(
    home:... ,
    routes:{
       "/routeName" : (context) => PageRoute()
    }

然后从任何页面调用路由名称 例如:联系人页面中的应用程序需要移动到 PageRoute

//Contact Page
  ... 
 onTap:(){
   Navigator.pushReplacementName(context,'/routeName');
   }

【讨论】:

    【解决方案3】:

    只需使用多个Navigator.pop

    【讨论】:

      【解决方案4】:

      以下是如何在两条路线之间导航,使用以下步骤:

      -创建两条路线。

      -使用Navigator.push()导航到第二条路线。

      -使用Navigator.pop()返回第一条路由。

      import 'package:flutter/material.dart';
      
      void main() {
        runApp(MaterialApp(
          title: 'Navigation Basics',
          home: FirstRoute(),
        ));
      }
      
      class FirstRoute extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(
              title: Text('First Route'),
            ),
            body: Center(
              child: ElevatedButton(
                child: Text('Open route'),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => SecondRoute()),
                  );
                },
              ),
            ),
          );
        }
      }
      
      class SecondRoute extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            appBar: AppBar(
              title: Text("Second Route"),
            ),
            body: Center(
              child: ElevatedButton(
                onPressed: () {
                  Navigator.pop(context);
                },
                child: Text('Go back!'),
              ),
            ),
          );
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-30
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多