Code前端首页关于Code前端联系我们

Flutter中Router的概念 | Navigator

terry 2年前 (2023-09-23) 阅读数 72 #移动小程序

解读 在讲 Navigator 之前,我们先简单说一下 router Flutter Router♸ 是对真实屏幕用户的抽象界面。例如,“/home”将您带到主页,“/login”将您带到登录页面。简单来说,每个界面对应一个对应的页面。我们可以将 ​​router 视为一个类。每个学生都是这个班的注册人,并由老师点名。邀请学生或通过老师邀请学生,无需说出他的名字或用手抓住他。在一些 Flutter 演示应用中,我们声明了多条路由

MaterialApp(
    title: 'Flutter Demo',
    theme: ThemeData(
        primarySwatch: Colors.blue,
    ),
    home: MyHomePage(title: 'Flutter Demo Home Page'),
    routes: <String, WidgetBuilder> {
        '/xiaoming': (_) => new XiaoMingPage(),
        '/lili': (_) => new LiLiPage(),
    },
);
复制代码
Flutter中Router的概念 | Navigator解读

路由器控制

与学生的控制,其中包括学生控制,否则每个学生都没有规则,整个班级一片混乱。有的学生想坐在第一排,有的学生想坐在最后排,整个教室就成了一锅粥。目前,我们的主角导航器已经准备好今天发布了。

Navigator

Navigator用于管理栈操作(即push和pop)

如果你对栈有基本的了解,你就知道push和pop,push就是在栈顶添加一个元素堆栈,并且 Yao 从同一堆栈中删除顶部元素。

所以在 Flutter 的情况下,当我们导航到另一个屏幕时,我们使用 Navigator.push 方法将新屏幕添加到堆栈顶部。当然,这些 Yao 方法会从堆栈中删除该显示。这里我们以上图为例,看看如何从屏幕1转到屏幕2。

初始状态:Flutter中Router的概念 | Navigator解读

点击小明会激活 MPSh'cko的下界面。 Flutter中Router的概念 | Navigator解读

点击顶部返回按钮或者Android返回按钮,flutter默认调用flutter。pop法,小明界面弹出Flutter中Router的概念 | Navigator解读

点击小李使进入推送流程大小推送到李的界面。上图栈函数的

总结

其实我还没写完

到现在你可能会觉得小编说的是坑。一把。没有太多有用的信息。记者写得很熟悉,所以这里有一些有用的信息。 Flutter中Router的概念 | Navigator解读

查了很多相关文章,大多都是关于push方法pushName方法这篇文章就结束了。但这两种方法都无法证明flutter NB。

静态方法

以下是Navigator官网的静态方法。接下来,我将解释最重要的部分。 .Flutter中Router的概念 | Navigator解读

maybePop

如果您直接打开堆栈唯一的UI到应用程序的主页(堆栈中只有一个元素),那么恭喜您,明天您可以继续查看财务报表。为了避免这个问题,我们可以调用 MaybePop() 方法。此方法是您可以尝试将其弹起并在其无法移动时将其向下拉的方法。 Flutter中Router的概念 | Navigator解读

效果测试:Flutter中Router的概念 | Navigator解读

这是gif中最后一个按钮的代码

// 试试然后成功反回
RaisedButton(
    onPressed: () {
        Navigator.maybePop(context);
    },
    child: Text("栈中测试试maybePop"),
),
// 试试,发现自己是栈里唯一的元素, 放弃pop
RaisedButton(
    onPressed: () {
        Navigator.maybePop(context);
    },
    child: Text("栈首测试试maybePop"),
),
// 直接退, 然后挂了
RaisedButton(
    onPressed: () {
        Navigator.pop(context);
    },
    child: Text("直接pop()"),
),
复制代码

canPop

拉丁canPop,我在MaybePop之后再说。那是因为它非常简单(其实我懒得做介绍图了)。 canPop 只有在栈中只有一个元素且其他都为 true 时才返回 falseFlutter中Router的概念 | Navigator解读

maybePop 可以理解为

Navigator.canPop(context) ? Navigator.pop(context): null;
复制代码

push 和 pushNamed 操作效果相同,但是用户界面的调用方式不同。它们都将 UI 压入堆栈。不同的是push是手动将接口入栈,而pushNames是使用router自行将接口入栈。
// push的调用方法
Navigator.push(context,  new MaterialPageRoute(
    builder: (context)  {
      return Scaffold(
        appBar: AppBar(
          title: Text('我是新的界面'),
        )
      );
    }
));

// pushNamed的调用方法
// 先在Router上定义Page;
routes: <String, WidgetBuilder> {
    '/xiaoming': (_) => new XiaoMingPage(),
}
...
Navigator.pushNamed(context, '/XiaoMingPage');
复制代码

pushReplacement 和 pushReplacementNamed

与上面相同。两者都用于替换当前堆栈的顶部元素。它们只是接口。演奏风格不同。我不会详细介绍这一点。效果取决于demo。点击第二个世界测试页面的按钮后,进入新界面,点击返回。让我们回到首页Flutter中Router的概念 | Navigator解读

pushAndRemoveUntil 和pushNamedAndRemoveUntil

我们正在构建一个非常复杂的应用程序。用户登录、滚动并查看各种信息...用户想要注销并返回主页。您不能只按主页。此时,应将所有路由从堆栈中删除,以免用户退出后无法返回到之前的界面。官方demo的方法是回到栈底按MyHomeFlutter中Router的概念 | Navigator解读

// flutter sample
void _finishAccountCreation() {
  Navigator.pushAndRemoveUntil(
    context,
    MaterialPageRoute(builder: (BuildContext context) => MyHomePage()),
    ModalRoute.withName('/'),
  );
}
复制代码

pop向上

当我们构建多面创作场景时,用户要填写不同的表格按顺序排列在不同的页面上。当用户填写第三页时,他决定取消填写表单。我们期望的逻辑是返回到填写表单之前的页面。 Flutter中Router的概念 | Navigator解读

Navigator.popUntil(context, ModalRoute.withName('/Dashboard'));

作者:好吃的小布丁
链接:https://juejin.im/post/5c3ed794f265da616b10f14e
来源:掘金
版权所有如需商业转载请联系作者获得许可。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门