Flutter的路由router-页面跳转
文章目录
- 概念介绍
- 基本路由(Basic Routing)
- 跳转到某个页面
- 弹出页面
- 命名路由(Named Routing)
- 第三方路由管理库(Third-Party Routing Libraries)
- Android原生的路由
- Intent-based Routing(基于Intent的路由)
- 使用隐式Intent进行路由
- 使用显式Intent进行路由
- Manifest-based Routing(基于Manifest的路由)
- 总结
概念介绍
在Flutter中,路由(Router)是用于管理不同页面之间导航的机制。它允许您在应用程序中切换和管理不同的屏幕或视图。Flutter提供了多种方式来实现路由,包括基本路由、命名路由和第三方路由管理库。下面是对这些不同方式的详细介绍:
基本路由(Basic Routing)
Flutter提供了一种基本的路由管理方式,通过Navigator类来实现。Navigator类提供了一组方法,用于在应用程序的不同页面之间进行导航,例如push、pop和pushReplacement等。您可以使用这些方法在堆栈中推送或弹出页面,实现页面之间的切换和管理。
跳转到某个页面
//跳转到页面
Navigator.push(context,MaterialPageRoute(builder: (context) => SecondScreen()),
);
弹出页面
Navigator.of(context).pop();
上面的示例代码演示了如何使用Navigator.push
方法将应用程序从当前页面切换到名为SecondScreen
的新页面。基本路由适用于简单的导航场景,但在大型应用程序中可能需要更高级的路由管理。
命名路由(Named Routing)
命名路由是一种更高级的路由管理方式,通过给每个页面分配唯一的名称,并使用这些名称进行导航。它提供了更清晰和可维护的路由配置方式,并支持参数传递。
首先,在应用程序的MaterialApp中配置命名路由表:
MaterialApp(routes: {'/': (context) => HomeScreen(),'/second': (context) => SecondScreen(),},
)
然后,使用Navigator.pushNamed
方法导航到指定的命名路由:
Navigator.pushNamed(context, '/second');
命名路由提供了一种更结构化和清晰的方式来配置和管理应用程序的路由。它适用于中小型应用程序,并且在需要扩展或修改路由时更加灵活。
第三方路由管理库(Third-Party Routing Libraries)
除了Flutter提供的基本路由和命名路由,还有一些强大的第三方路由管理库可供选择,例如fluro、auto_route、get等。这些库提供了更高级和更灵活的路由管理功能。
这些库通常提供了更强大的路由配置方式、参数传递、路由拦截、动画效果、路由传参、深层链接等功能。它们可以帮助您更好地组织和管理应用程序的路由,并提供更好的用户导航体验。
例如,使用fluro库配置和导航到命名路由的示例代码如下:
final router = FluroRouter();
router.define('/second', handler: Handler(handlerFunc: (context, params) => SecondScreen()));// 导航到命名路由
router.navigateTo(context, '/second');
第三方路由管理库通常具有更复杂的配置和使用方式,但它们提供了更高级和灵活的路由管理功能,适用于大型应用程序或需要更复杂导航逻辑的场景。
Android原生的路由
在原生Android开发中,路由(Routing)是指通过特定的机制将用户从一个界面(Activity)导航到另一个界面的过程。
Android提供了多种方式来实现页面导航和路由管理,其中最常用的方式是使用Intent和Manifest文件。
Intent-based Routing(基于Intent的路由)
在Android中,Intent是一种用于在组件之间传递消息和触发操作的机制。通过使用Intent,可以实现页面之间的导航和通信。
使用隐式Intent进行路由
在Android中,可以使用隐式Intent来指定要启动的目标Activity。通过设置Intent的Action、Category和Data等属性,可以将用户导航到匹配指定条件的Activity。
Intent intent = new Intent();
intent.setAction("com.example.ACTION_PROFILE");
intent.setData(Uri.parse("http://example.com/profile/123"));
startActivity(intent);
上述示例中,我们创建了一个隐式Intent,并设置了Action为"com.example.ACTION_PROFILE",Data为"http://example.com/profile/123"。系统会根据Intent的条件匹配来查找并启动匹配的Activity。
使用显式Intent进行路由
除了隐式Intent,还可以使用显式Intent来直接指定要启动的目标Activity的类名。
Intent intent = new Intent(MainActivity.this, ProfileActivity.class);
intent.putExtra("userId", "123");
startActivity(intent);
上述示例中,我们创建了一个显式Intent,并指定了目标Activity的类名为ProfileActivity。同时,我们还可以通过Intent的putExtra
方法传递参数给目标Activity。
Manifest-based Routing(基于Manifest的路由)
Android的Manifest文件(AndroidManifest.xml)是应用程序的配置文件,其中包含了应用程序的元数据和组件声明。通过在Manifest文件中声明Activity和设置其Intent过滤器,可以实现基于Manifest的路由。
<activityandroid:name=".ProfileActivity"android:label="Profile"><intent-filter><action android:name="com.example.ACTION_PROFILE" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="http"android:host="example.com"android:pathPrefix="/profile/" /></intent-filter>
</activity>
在上述示例中,我们在Manifest文件中声明了一个ProfileActivity,并设置了其Intent过滤器。通过设置Action为"com.example.ACTION_PROFILE"和Data为"http://example.com/profile/",我们指定了ProfileActivity可以处理满足这些条件的Intent。
当满足指定条件的Intent被触发时,Android系统会根据Manifest文件中的配置,自动找到匹配的Activity并启动。
这些是原生Android开发中常用的路由实现方式。Intent和Manifest文件提供了强大的机制来管理页面的导航和路由。通过使用Intent和Manifest文件,开发者可以灵活地定义和配置Activity之间的导航关系,并实现复杂的页面跳转逻辑。
对比下Flutter的路由和原生Android的路由,能更好的理解flutter的路由。
总结
通过使用这些不同的路由管理方式,您可以根据应用程序的规模和需求选择最适合的方式来管理和处理Flutter应用程序中的页面导航。无论是基本路由、命名路由还是第三方路由管理库,它们都提供了一种方便的方式来实现页面之间的切换和导航。
相关文章:

Flutter的路由router-页面跳转
文章目录 概念介绍基本路由(Basic Routing)跳转到某个页面弹出页面 命名路由(Named Routing)第三方路由管理库(Third-Party Routing Libraries) Android原生的路由Intent-based Routing(基于Int…...

24v转5v稳压芯片-5A大电流输出ic
这款24V转5V5A汽车充电芯片具有以下特性和参数: - 宽输入电压范围:4.5V至36V - 最大输出电流:5.0A - 高达92%的转换效率 - 恒流/恒压模式控制 - 最大占空比100% - 可调输出电压 - 2%的输出电压精度 - 集成40mΩ高侧开关 - 集成18mΩ低侧开关 …...
Layui + Flask | 表单元素(组件篇)(06)
表单元素是输入框、选择框、复选框、开关、单选框等表单项组件,用于对表单域进行输入。layui 的表单元素对原生的表单元素进行了大幅的用着,有好看的 UI 同时又有非常方便操作的 API。 输入框 https://layui.dev/docs/2.8/form/input.html 输入框组件是对文本框 <input ty…...

Kakfa - Producer机制原理与调优
Producer是Kakfa模型中生产者组件,也就是Kafka架构中数据的生产来源,虽然其整体是比较简单的组件,但依然有很多细节需要细品一番。比如Kafka的Producer实现原理是什么,怎么发送的消息?IO通讯模型是什么?在实…...

基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 [Rr,Cc] size(Image1);% 获取 Image1 矩阵的大小(行数和列数) % 创…...

opencv 基础(持续更新中)
1 前言 https://www.couragesteak.com/ 2 安装 3 基础属性demo 打开一张图片: import cv2img cv2.imread(./girl.jpg)print(img.shape) # (1536, 1024, 3) 数组形状 print(type(img)) # numpy 数组 print(img) # 三维数组(彩色图片&am…...

科普现场!万博智云参加第五届张江汇智科普节
9月15日,第五届张江汇智科普节在汇智国际商业中心如期开展,展会中汇集了众多信息科技领域的新兴产品,展示内容主要分为国产替代和元宇宙场景展示两个方面。展现国产化最新科技成果,践行技术普惠理念,把高、精、专的技术…...
【记录】实现从Linux下载下载文件(文件导出功能)并记录过程产生的BUG问题。
前言 导出功能的实现,主要记录总结导出过程中出现的一些问题。 代码实现导出功能 public R templateDown(HttpServletResponse response) {String fileName "template.xlsx";// 清空responseresponse.reset();response.setCharacterEncoding("UTF…...
可扩展性表设计方案
文章目录 1 使用预留字段2 使用JSON字段3 使用单表继承4 构建属性表5 直接构建新表6 适当冗余 1 使用预留字段 在表设计初期,可以预留一些命名通用的备用字段,例如field1、field2、field3。当业务需要增加新字段时,就直接使用这些预留字段,无…...

Scotch: Combining SGX and SMM to Monitor Cloud Resource Usage【TEE的应用】
目录 摘要引言贡献 背景SMMXen Credit Scheduler与资源核算SGX 威胁模型Scheduler attacksResource interference attacksVM Escape attacks 架构Resource Accounting WorkflowCost of Accounting 具体的部署和评估见论文相关工作Resource Accounting基于SMM的方法基于SGX的系统…...
腾讯mini项目-【指标监控服务重构】2023-08-19
今日已办 benchmark How can we create a configuration for gobench with -benchmem – IDEs Support (IntelliJ Platform) | JetBrains 本机进行watermill-benchmark 使用 apifox 自动化测试上报固定数量的消息 启动watermill-pub/sub的 benchmark 函数 func BenchmarkPu…...
go实现grpc-快速开始
准备工作 Go, 最新版的 如果不会安装看Getting Started. Protocol buffer compiler, protoc, version 3. 想要安装, 请读Protocol Buffer Compiler Installation. 为 protocol compiler安装Go plugins: 想要安装运行以下命令: $ go install google.golang.org/protobuf/cmd/…...
linux上的init 0-6指令作用以及一些快捷键和系统指令
目录 linux上的init 0-6指令作用 CtrlAltF1-F7作用 Linux常用系统指令 查看linux内核版本 ubuntu和centos查看系统版本信息以及硬件信息 linux上的init 0-6指令作用 在Linux系统中,运行级别(也称为init级别)用来表示系统的不同状态或操作…...

Mixin 混入
Mixin 混入 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。 怎么理解呢,就是每一个组件都会有一…...
pycharm快捷键
CtrlAltL 代码规范化 CtrlHome 回到代码最开始 CtrlEnd 回到代码最后面 shift回车 鼠标任意位置的下一行 altj 一直按可以选中相同的变量 alt鼠标左键 可以选择多个需要修改的变量或值 将光标放在某一行,home到最前面,end到最后…...
【面试刷题】——Linux基础命令
Linux基础命令是在Linux操作系统中执行常见任务的一组命令。以下是一些常用的Linux基础命令,它们用于管理文件系统、执行系统任务、查看文件内容等。 文件和目录操作: ls: 列出目录中的文件和子目录。 pwd: 显示当前工作目录的路径。 cd: 更改当前工作…...
第四步 Vue2 配置ESLint
ESLint 是一个广泛使用的 JavaScript 代码检查工具,可以帮助开发者在编写代码时发现并修复潜在的问题和错误。 在 第一步 创建工程 时虽然已经选择了包含 ESLint 预设配置,但还需要做一些调整,让我们使用起来能够更加的丝滑。 vue.config.j…...

[.NET学习笔记] - Thread.Sleep与Task.Delay在生产中应用的性能测试
场景 有个Service类,自己在内部实现生产者/消费者模式。即多个指令输入该服务后对象后,Service内部有专门的消费线程执行传入的指令。每个指令的执行间隔为1秒。这里有两部分组成, 工作线程的载体。new Thread与Task.Run。执行等待的方法。…...

【单线图的系统级微电网仿真】基于 PQ 的可再生能源和柴油发电机组微电网仿真(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

人脸识别技术应用安全管理规定(试行)|企业采用人脸打卡方式,这4条规定值得关注
近日,为规范人脸识别技术应用,国家互联网信息办公室起草了,并向全社会公开征求意见。该规定一共列举了25条,企业如借助人脸识别技术采集考勤打卡数据,以下4条规定值得关注。 第四条 只有在具有特定的目的和充分的必要…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...