Flutter基础之Navigator路由跳转

简介

Flutter中页面之间的跳转是由Navigator完成的,Navigator用来实现不同Widget之间的跳转和数据传递。本文介绍页面跳转的两种方式及数据传递,满足日常开发需求。

页面跳转

先看效果

直接跳转

Navigator.push(BuildContext context, Route route)

Flutter提供的Navigator支持直接跳转。如图所示:

Navigator调用push方法将SecondNavigatorRoute()实例 压入栈中,进行页面显示。

注册跳转

Navigator.pushNamed(String routeName, arguments: arguments)

Flutter不仅提供了直接跳转还支持自定义路由跳转,使用 Navigator.pushName()函数,传入需要跳转页面的路由,实现页面跳转,但是路由必须先要进行注册。类似Android中的Activity需要在清单文件中注册一样。页面路由也需要注册。

  1. 首页在MyApp中进行路由注册。

routes 接收map作为值。定义路由和对应的页面,将secondNavigatorRoute对应的路由注册进去。

  1. 注册完路由后,使用Navigator.pushName进行页面跳转。

跳转返回

Navigator.pop(BuildContext context, [ result ])

页面之间的跳转使用Navigator的push方法,对应的跳转返回需要调用Navigator的pop方法进行页面的关闭。

页面传值

Navigator.pushNamed(String routeName, arguments: arguments)

和Intent一样,Flutter中的Navigator不仅可以进行页面之间的跳转,还可以进行页面的传值。

Navigator的push方法的第二个参数arguments类型为可空的Object。通常用来表示需要传递的数据。

先看效果:

在第一页跳转时,给arguments参数赋值,当跳转到第二页时,接收第一页传递过来的数据。

接收传递的数据:

使用ModalRoute.of(context)?.settings.arguments.toString() 接收第一页传递过来的数据,这里传递的是字符串,所以直接toString显示,如果传递的是map,接收时需要转换成map接收。对比android,使用Flutter进行页面传递数据不需要对数据进行序列化。

数据回传

Navigator.pop(BuildContext context, [ T? result ])

在日常开发中我们都会遇到这样的场景,从相册中获取图片,回传给上一个页面,Flutter同样支持数据的回传。

先来看Navigator.pop的构造函数。

Navigator.pop 函数同样提供了result参数,用来回传数据。下面看看具体使用。

当第二页收到第一页传递来的数据后,需要做出回应。这里调用Navigatpr.pop方法,同时回传数据告诉第一页数据已经收到。

由于接收返回数据是耗时操作,这里使用async 和await接收返回是数据。

数据打印如下:

总结

Flutter中的页面跳转和数据传递比较简单,看完本篇文章日常开发不成问题。如果使用路由跳转,切记一定要提前注册路由表。

相关推荐
xiangpanf31 分钟前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx3 小时前
安卓线程相关
android
消失的旧时光-19434 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon5 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon5 小时前
VSYNC 信号完整流程2
android
dalancon5 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户69371750013846 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android6 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才7 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶8 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle