Flutter中Router的概念 | Navigator
解读 在讲 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(),
},
);
复制代码

路由器控制
与学生的控制,其中包括学生控制,否则每个学生都没有规则,整个班级一片混乱。有的学生想坐在第一排,有的学生想坐在最后排,整个教室就成了一锅粥。目前,我们的主角导航器已经准备好今天发布了。
Navigator
Navigator用于管理栈操作(即push和pop)
如果你对栈有基本的了解,你就知道push和pop,push就是在栈顶添加一个元素堆栈,并且 Yao 从同一堆栈中删除顶部元素。
所以在 Flutter 的情况下,当我们导航到另一个屏幕时,我们使用 Navigator.push 方法将新屏幕添加到堆栈顶部。当然,这些 Yao 方法会从堆栈中删除该显示。这里我们以上图为例,看看如何从屏幕1转到屏幕2。
初始状态:
点击小明会激活 MPSh'cko的下界面。
点击顶部返回按钮或者Android返回按钮,flutter默认调用flutter。pop法,小明界面弹出
点击小李使进入推送流程大小推送到李的界面。上图栈函数的
总结
其实我还没写完
到现在你可能会觉得小编说的是坑。一把。没有太多有用的信息。记者写得很熟悉,所以这里有一些有用的信息。
查了很多相关文章,大多都是关于push方法pushName方法这篇文章就结束了。但这两种方法都无法证明flutter NB。
静态方法
以下是Navigator官网的静态方法。接下来,我将解释最重要的部分。 .
maybePop
如果您直接打开堆栈唯一的UI到应用程序的主页(堆栈中只有一个元素),那么恭喜您,明天您可以继续查看财务报表。为了避免这个问题,我们可以调用 MaybePop() 方法。此方法是您可以尝试将其弹起并在其无法移动时将其向下拉的方法。
效果测试:
这是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 时才返回 false。
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
// 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');
复制代码
与上面相同。两者都用于替换当前堆栈的顶部元素。它们只是接口。演奏风格不同。我不会详细介绍这一点。效果取决于demo。点击第二个世界测试页面的按钮后,进入新界面,点击返回。让我们回到首页
pushAndRemoveUntil 和pushNamedAndRemoveUntil
我们正在构建一个非常复杂的应用程序。用户登录、滚动并查看各种信息...用户想要注销并返回主页。您不能只按主页。此时,应将所有路由从堆栈中删除,以免用户退出后无法返回到之前的界面。官方demo的方法是回到栈底按MyHome。
// flutter sample
void _finishAccountCreation() {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (BuildContext context) => MyHomePage()),
ModalRoute.withName('/'),
);
}
复制代码
pop向上
当我们构建多面创作场景时,用户要填写不同的表格按顺序排列在不同的页面上。当用户填写第三页时,他决定取消填写表单。我们期望的逻辑是返回到填写表单之前的页面。
Navigator.popUntil(context, ModalRoute.withName('/Dashboard'));
作者:好吃的小布丁
链接:https://juejin.im/post/5c3ed794f265da616b10f14e
来源:掘金
版权所有如需商业转载请联系作者获得许可。非商业转载请注明出处。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。