第三百七十六回

文章目录

  • 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');
    },
        ///如果路由中包含参数,一定要给这个属性赋值,不然路由中的参数为null
        settings: 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.mfbz.cn/a/420433.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java进阶(锁)——锁的升级,synchronized与lock锁区别

目录 引出Java中锁升级synchronized与lock锁区别 缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java进阶(锁)——锁的升级,synchronized与lock锁区别 Java中锁升级 看一段代码: public class…

Python学习 day06(类、对象、构造方法、私有方法、继承

类 程序中数据的组织多种多样,如果我们简单用变量来记录,就会混乱、不统一,如下所示: 类比现实中的表格,我们可以用类来组织数据,如下: 类的定义和使用 类中的变量叫做成员变量,类中…

mysql,for循环执行sql

遇到一个问题,我需要模拟上百万数据来优化sql,线上数据down不下来,测试库又没有,写代码执行要么慢要么就是sql语句太长。 于是,直接用mysql自带的功能去实现! 简单而简单 mysql可以for循环?没…

python中版本,操作系统等问题汇总

1. linux源码部署到windows 1.1ModuleNotFoundError: No module named pwd 这个问题&#xff0c;是因为源码是给linux的。这里在windows中&#xff0c;没有该命令。 解决方法之一&#xff0c;在相应的环境目录中&#xff0c;如图中<MetaGPTenv>虚拟环境中&#xff0c;在…

Unity 预制体与变体

预制体作用&#xff1a; 更改预制体&#xff0c;则更改全部的以预制体复制出的模型。 生成预制体&#xff1a; 当你建立好了一个模型&#xff0c;从层级拖动到项目中即可生成预制体。 预制体复制模型&#xff1a; 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…

可用于智能客服的完全开源免费商用的知识库项目

介绍 FastWiki项目是一个高性能、基于最新技术栈的知识库系统&#xff0c;专为大规模信息检索和智能搜索设计。利用微软Semantic Kernel进行深度学习和自然语言处理&#xff0c;结合.NET 8和MasaBlazor前端框架&#xff0c;后台采用.NET 8MasaFrameworkSemanticKernel&#xff…

微信小程序云开发教程——墨刀原型工具入门(安装以及基础使用教程)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

IO-DAY2

用发write、fread将一张随意图片修改成德国国旗 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> int main(int argc, char *argv[]) {FILE* fpfopen("./122.bmp","r");int w 0,h 0;fseek(fp,18,…

队列的结构概念和实现

文章目录 一、队列的结构和概念二、队列的实现三、队列的实现函数四、队列的思维导图 一、队列的结构和概念 什么是队列&#xff1f; 队列就是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 如上图所示&#x…

经典文献阅读之--CamMap(基于SLAM地图对不共视相机进行外参标定)

0. 简介 由于多相机之间通常存在有限或无重叠的视场&#xff0c;因此在估计外参相机参数时面临着一定的挑战&#xff0c;为了解决这个问题&#xff0c;本文提出了CamMap&#xff1a;一种新颖的6自由度外参标定流程。根据三个操作规则&#xff0c;使一个多相机系统单独捕捉一些…

《Spring Security 简易速速上手小册》第4章 授权与角色管理(2024 最新版)

文章目录 4.1 理解授权4.1.1 基础知识详解授权的核心授权策略方法级安全动态权限检查 4.1.2 主要案例&#xff1a;基于角色的页面访问控制案例 Demo 4.1.3 拓展案例 1&#xff1a;自定义投票策略案例 Demo测试自定义投票策略 4.1.4 拓展案例 2&#xff1a;使用方法级安全进行细…

MyBatis 学习(三)之 MyBatis 全局配置文件

目录 1 MyBatis 全局配置文件 2 properties 元素 3 setting 设置 4 typeAlianses 别名处理器 5 typeHandler 类型处理器 6 objectFacotry 对象工厂&#xff08;了解&#xff09; 7 plugins 插件&#xff08;了解&#xff09; 8 environments 运行环境 9 databaseIdPro…

cpp基础学习笔记03:类型转换

static_cast 静态转换 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的&#xff1b;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。用于基本数据类型之间的转换&#xff…

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

[HackMyVM]靶场 Adria

kali:192.168.56.104 主机发现 arp-scan -l 靶机:192.168.56.108 端口扫描 nmap -p- 192.168.56.108 开启了 22 80 139 445端口 进入web 编辑 /etc/hosts&#xff0c;把192.168.56.108 adria.hmv添加进去重新访问 里面没什么有用的东西&#xff0c;注册需要邮箱&#xff0c;…

在线ai写作,让你随时随地创作优质内容

如今的ai技术已经渗透到我们生活的方方面面。其中&#xff0c;AI写作成为了一个备受关注的领域。如今&#xff0c;我们可以利用在线ai写作在任何时间、任何地点创作出优质的内容。 传统的写作过程需要大量的时间和精力。从构思到写作再到修改&#xff0c;每一个环节都需要我们投…

kotlin单例模式,4年小Android的心路历程

一、Java基础 我知道大家一定有很久都没有注意到这个点了&#xff0c;平时的工作应该也很少涉及到这些底层知识吧&#xff0c;但是这些东西很重要。如果是想要跳槽加薪或者是应对即将到来的面试&#xff0c;这些都是不可忽视的知识。 在这一点里&#xff0c;需要重视的点有&am…

常见查找算法Java实现

顺序&#xff08;线性&#xff09;查找二分查找/折半查找插值查找斐波那契查找 线性查找 判断数列是否包含要求&#xff0c;如果找到了&#xff0c;就提示找到了&#xff0c;并给出下标值 // 线性查找 public static ArrayList<Integer> seqSearch(int[] arr, int value…

Windows 10 合并磁盘分区 (G and H)

Windows 10 合并磁盘分区 [G and H] 1. 设备和驱动器2. 计算机 -> 管理 -> 存储 -> 磁盘管理3. 删除卷4. 新建简单卷5. 设备和驱动器References 1. 设备和驱动器 2. 计算机 -> 管理 -> 存储 -> 磁盘管理 3. 删除卷 H: -> right-click -> 删除卷 H: 变…

项目案例:图像分类技术在直播电商中的应用与实践

一、引言 在数字化浪潮的推动下&#xff0c;电商行业迎来了一场革命性的变革。直播电商&#xff0c;作为一种新兴的购物模式&#xff0c;正以其独特的互动性和娱乐性&#xff0c;重塑着消费者的购物习惯。通过实时的直播展示&#xff0c;商品的细节得以清晰呈现&#xff0c;而互…