第三百七十六回

文章目录

  • 1 .概念介绍
  • 2. 实现方法
  • 3. 示例代码

我们在上一章回中介绍了在页面之间共传递数据相关的内容,本章回中将介绍如何拦截路由.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1 .概念介绍

本章回中介绍的路由拦截是指在路由运行过程中,对路由做一些处理。在Flutter中通过路由来实现页面之间的跳转,如果想在跳转过程中做一些事情怎么办呢?那么就
需要路由拦截了。本章回中将详细介绍如何实现路由拦截。

2. 实现方法

通常情况下路由都存放在MaterialApp组件的routes属性中,我们也叫它路由表,该表中的内容明确指出了路由的方向,如果遇到一些不在路由表中的路由,不知道它
的方向,那么就可以对这种路由进行拦截。MaterialApp组件提供了两个属性:onGenerateRoute和onUnknownRoute。这两个属性都是方法类型,详细如下:

  • 方法返回的值就是路由的方向,或者说路由跳转到的页面;
  • 方法的参数中包含路由参数中内容,比如路由名称,路由参数等;
  • onGenerateRoute属性优先于onUnknownRoute执行;
  • 如果onGenerateRoute属性已经拦截了路由,那么onUnknownRoute属性不再重复拦截;
    最后我在强调一下,这两个属性对应的方法只能拦截不在路由表中的路由,而且需要和pushNamed方法配合使用才可以。稍后我们将通过示例代码来演示。

3. 示例代码

///主要用来拦截不在routes属性中定义的路由,需要和pushNamed方法配合使用才能回调该属性对应的方法
onGenerateRoute:(settings) {if(settings.name == 'SecondRouter') {debugPrint('setting: ${settings.toString()}');return MaterialPageRoute(builder: (context){return SecondRouter(data: 'data from home');},///如果路由中包含参数,一定要给这个属性赋值,不然路由中的参数为nullsettings: settings);}else {debugPrint('setting: ${settings.toString()}');return null;}
},
///主要用来拦截不在routes属性中定义的路由,需要和pushNamed方法配合使用才能回调该属性对应的方法
///优先级低于onGenerateRoute,只有onGenerateRoute方法返回Null时才回调此属性对应的方法
onUnknownRoute: (settings) {debugPrint('unknown setting: ${settings.toString()}');return MaterialPageRoute(builder: (context){///这里可以创建一个未知错误的界面,遇到未知路由则跳转到该界面return SecondRouter(data: 'data from home');});
},onPressed: () {debugPrint('second router clicked');///创建两个路由,SecondRouter不会被拦截,因为routers属性对应的路由表中有该属性///ThirdRouter会被拦截,因它不在路由表中,先是onGenerateRoute拦截,但是没有处理,转到onUnknownRoute中Navigator.pushNamed(context, 'SecondRouter',arguments: 'data from arguments');Navigator.pushNamed(context, 'ThirdRouter',arguments: 'data from arguments');
}

上面的代码中给出了路由拦截的代码,并且添加了详细的注释。onPressed属性中的代码可以放到Button中,这样可以在点击按钮的时候进行通过路由来跳转。代码中
拦截拦截路由后只打印出了路由中的参数,大家可以依据项目需求在这里添加一些业务逻辑。这里只列出了核心代码,完整的代码可以到Github上查看main.dart文件。
看官们,关于"如何拦截路由"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会了会了会了

public class text9 {/*在实际开发中,如果我们需要在多种情况中选择其中一个,就可以用switch语句。当我m们拨打电话,会有一些按键选择。假设我们拨打了一个机票预订电话,电话中提示:1机票查询2机票预订3机票改签4退出服务其他按键…

论文阅读_代码生成模型_CodeLlama

英文名称: Code Llama: Open Foundation Models for Code 中文名称: Code Llama:开放基础代码模型 链接: https://arxiv.org/abs/2308.12950 代码: https://github.com/facebookresearch/codellama 作者: Baptiste Rozire, Jonas Gehring, Fabian Gloeckle, Sten So…

【前端素材】推荐优质在线花卉商城电商网页Flowery平台模板(附源码)

一、需求分析 1、系统定义 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台,用户可以在该平台上浏览、选择和购买各种花卉产品。 2、功能需求 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台,用户可以在该平台上浏览、选…

vscode在windows环境不能使用终端安装依赖

会报这样的错误提示 解决思路: 1、vscode用管理员打开 (非必须) 2、设置策略 打开 windows powerShell . 输入命令 set-ExecutionPolicy RemoteSigned 然后 Y . 查看是否设置成功 get-executionpolicy 3、下载总是超时,设置镜像源 查看镜像源 npm …

【知识分享】vue制作一个页面计算器

1.制作思路 制作一个简单的页面计算器可以分为以下几个步骤: (1)创建 Vue 组件,包括显示屏和按钮组件。 (2)设置数据属性,用于存储计算器的当前状态(如显示屏上的数字&#xff09…

蓝桥杯-天数

//此题属于简单 #include <iostream> using namespace std; int main() { int n; cin>>n; if(n2) { cout<<28; return 0; } if(n1||n3||n5||n7||n8||n10||n12)//一定要记得写成n什么&#xff0c;每个都要写&#xff0c;不要漏掉 { cou…

常见漏洞的流量特征

1、SQL注入漏洞 查看url / Referer字段/User-Agent字段/cookie字段 出现一些特殊字符&#xff08;eg&#xff1a;单引号【‘】、双引号【“”】、括号【&#xff08;&#xff09;】、单引号括号【‘&#xff08;】、双引号括号【“&#xff08;】等一些常见的特殊的字符&#…

数通HCIE和云计算HCIE哪个好一点?

数通是网络的基础知识&#xff0c;也是入门人员必学的方向&#xff0c;相对也会简单些&#xff0c;学习数通&#xff0c;可以很好的学习其他的方向。数通的就业范围也比较广&#xff0c;运营商、企业、政府还是互联网公司&#xff0c;都需要大量的数通工程师来搭建和维护网络&a…

探索rsync远程同步和SSH免密登录的奥秘

目录 集群分发脚本xsyncscp&#xff08;secure copy&#xff09;安全拷贝rsync 远程同步工具集群分发脚本 SSH免密登录免密登录原理SSH免密登录配置生成公钥和私钥授权测试 在现代科技飞速发展的时代&#xff0c;数据的备份和迁移成为了一个重要的课题。其中&#xff0c;rsync远…

大数据毕业设计之前端04:管理系统为什么要自己实现图标组件

关键字&#xff1a;BuildAdmin、Icon、图标、Vue、ElementUI 前言 说到图标&#xff0c;在BuildAdmin中用到的地方很多。比如上一篇中的折叠图标&#xff0c;还有菜单栏图标、导航菜单栏图标等。常见的图标有&#xff1a;ElementUI图标、font-awesome、iconfont阿里图标以及本…

94. 递归实现排列型枚举 刷题笔记

思路 依次枚举 每个位置用哪个数字 要求按照字典序最小来输出 而每次搜索下一层时i都是从1开始 也就是说 如果有小的数可以填上 那么该方案会填上这个数字 例如 当n等于3 第一次搜索 1 2 3输出后返回 返回后此时i3 第二个位置填3 1 3 2 输出后返回 此时返回到第一层…

云计算 2月21号 (linux文件及用户管理)

一、文件管理 1.1快捷键 编辑命令&#xff1a; Ctrl a &#xff1a;移到命令行首 Ctrl e &#xff1a;移到命令行尾 Ctrl u &#xff1a;从光标处删除至命令行首 Ctrl k &#xff1a;从光标处删除至命令行尾 Ctrl w &#xff1a;从光标处删除至字首 Ctrl d &#x…

20240301-2-ZooKeeper面试题(二)

11. Chroot 特性 3.2.0 版本后&#xff0c;添加了 Chroot 特性&#xff0c;该特性允许每个客户端为自己设置一个命名空间。如果一个客户端设置了 Chroot&#xff0c;那么该客户端对服务器的任何操作&#xff0c;都将会被限制在其自己的命名空间下。 通过设置 Chroot&#xff…

Win11远程桌面登陆教程

必备软件 Remote Desktop 这个软件用于便捷操作 Tailscale 这个用于创建虚拟局域网让两台设备处于同一个网段便于远程连接 详细步骤 0、打开电脑设置允许远程连接模式 把这里的开关打开就行。 1、设置允许登陆的用户以及密码 在管理员模式下的宿主电脑上面输入以下命令…

支付宝小程序中唤起支付(前后端)

Java后台获取支付宝支付唯一订单号 /*** 支付宝小程序支付*/PostMapping(value "/xcxPayZFBTHREE")ResponseBodypublic Map<String,Object> xcxPayZFBTHREE(RequestBody byte[] req) {HashMap<String, Object> objectObjectMap new HashMap<>();…

jax可微分编程的笔记(7)

jax可微分编程的笔记(7) 第七章 优化算法 从优化理论的整体框架来看&#xff0c;任何优化问题都可以被分解为 模型的建立&#xff0c;损失函数的构造以及优化算法的选取这三个部分。 其中优化算法的具体形式&#xff0c;又依赖于步长下降方向和终止条件 的选取。 对于多维函…

JavaScript 浏览器元素滚动 scrollIntoView()

scrollIntoView() ​ DOM 规范中没有涉及的一个问题是如何滚动页面中的某个区域。为填充这方面的缺失&#xff0c;不同浏览器实现了不同的控制滚动的方式。在所有这些专有方法中&#xff0c;HTML5 选择了标准化 scrollIntoView()。 ​ scrollIntoView() 方法存在于所有 HTML …

深度学习中常见的backbone、neck、head的理解

在深度学习中&#xff0c;常见的backbone、neck和head是指网络结构的不同部分&#xff0c;它们各自承担着不同的功能&#xff1a; Backbone&#xff08;骨干网络&#xff09;&#xff1a;骨干网络通常是指整个深度神经网络的主要部分&#xff0c;负责提取输入数据的特征。骨干网…

寒假作业Day 02

这是第二天的作业&#xff0c;fighting&#xff01; Day 02 一、选择题 首先char* s[6]是指针数组&#xff0c;也就是其存储的都是这些字符串的地址&#xff0c;其实际上的类型为char**&#xff0c;而fun函数传入了s数组的首地址。而后续fun函数中打印字符&#xff0c;p[i]即…

ad18学习笔记十六:如何放置精准焊盘到特定位置,捕抓功能的讲解

网上倒是一堆相关的指导 AD软件熟练度提升&#xff0c;如何设置板框捕捉&#xff1f;_哔哩哔哩_bilibili 关于Altium Designer 20 的捕抓功能的讲解_ad捕捉设置-CSDN博客 AD软件捕捉进阶实例&#xff0c;如何精确的放置布局元器件&#xff1f;_哔哩哔哩_bilibili AD绘制PCB…