flutter使用动态路由传参的最小案例

flutter中使用动态路由传递参数的封装案例,子组件页面只需要接收arguments参数即可,参数是一个map,里面包含有所需要的参数,类似于json。在MaterialApp中配置onGenerateRoute,然后动态判断传递参数:

routes列表:

    // 命名路由传参Map routes = {"/home": (content) => Home(),"/search": (context) => SearchPage(),// 传递参数的形式"/store": (context, {arguments}) => Store(arguments: arguments)};

 onGenerateRoute函数:

      onGenerateRoute: (RouteSettings settings) {// 获取声明的路由页面函数var pageBuilder = routes[settings.name];if (pageBuilder != null) {if (settings.arguments != null) {// 创建路由页面并携带参数return MaterialPageRoute(builder: (context) =>pageBuilder(context, arguments: settings.arguments));} else {return MaterialPageRoute(builder: (context) => pageBuilder(context));}}return MaterialPageRoute(builder: (context) => HomePage());}

然后在路由跳转的时候, 使用pushNamed进行传递参数:

                Navigator.pushNamed(context, "/store",arguments: {"title": "京东首页", "price": 100});

在子组件里面,定义并接收参数:

import "package:flutter/material.dart";class Store extends StatefulWidget {const Store({super.key, this.arguments});final dynamic arguments;@overrideState<Store> createState() => _StoreState();
}class _StoreState extends State<Store> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("${widget.arguments != null ? widget.arguments['title'] : "ThirdPage"}"),),body: Center(child: ElevatedButton(child: Text("返回上一家"),onPressed: () {print("返回上一家");Navigator.pop(context);},),),);}
}

最后的优化,可以将route封装成一个dart包,然后引入到materialApp中,让逻辑更清晰:

router.dart源代码: 

import "package:flutter/material.dart";
import "../main.dart";
import "../pages/home.dart";
import "../pages/search.dart";
import "../pages/store.dart";// 命名路由传参
Map routes = {"/home": (content) => Home(),"/search": (context) => SearchPage(),"/store": (context, {arguments}) => Store(arguments: arguments)
};// 定义一个函数,并返回MaterialPageRoute
var onGenerateRoute = (RouteSettings settings) {var pageBuilder = routes[settings.name];if (pageBuilder != null) {if (settings.arguments != null) {// 创建路由页面并携带参数return MaterialPageRoute(builder: (context) =>pageBuilder(context, arguments: settings.arguments));} else {return MaterialPageRoute(builder: (context) => pageBuilder(context));}}return MaterialPageRoute(builder: (context) => HomePage());
};

在materialApp中引入:

​​​​​​​ 

 

最后的效果图:

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

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

相关文章

如何二次封装一个Vue3组件库?

为什么要二次封装组件库 目前开源的Vue3组件库有很多&#xff0c;包括Element Plus、Ant Design Vue、Naive UI、Vuetify、Varlet等等。 在大部分场景中&#xff0c;我们直接使用现有组件库中的组件即可实现功能。如果遇到部分组件的特殊配置或者特殊逻辑&#xff0c;或者当前…

Rust国内sparse镜像源配置

文章目录 1. 遇到问题1.1 问题现象1.2 解决办法 2. 重新设置最新 sparse源3. 更多参考资料3.1 字节源3.2 ustc 源3.3 清华源3.4 其他人的总结 1. 遇到问题 有好一阵子没有更新源和安装软件了&#xff0c; 使用ustc的源&#xff0c; 更新了好一阵子&#xff0c; 最后安装居然还出…

费解的开关

费解的开关 模拟一下开关的过程&#xff1a; 直接对第一行进行开关灯即可&#xff0c;那么第一行开关等的方案有多少个呢&#xff1f; 可以第一个想到的是5次&#xff0c;但实际上是25次&#xff0c;因为没有规定说只能开关一次吧。 那么如何获得这32种方案呢&#xff1f; 可…

十五届海峡两岸电视主持新秀大会竞赛流程

海峡两岸电视主持新秀会是两岸电视媒体共同举办的一项活动&#xff0c;旨在为两岸年轻的电视主持人提供一个展示才华的舞台&#xff0c;促进两岸文化交流和青年交流。本届新秀会是第十二届海峡两岸电视艺术节的重要活动之一。本次竞赛赛制流程如下&#xff1a; &#xff08;1&…

面向对象中的方法是对实例的属性进行操作的函数吗?

问题描述&#xff1a;”面向对象中的方法是对实例的属性进行操作的函数吗&#xff1f; 问题解决&#xff1a;可以这么理解。需要搞清楚面向对象中类、实例、属性和方法的区别和联系。 在面向对象编程中&#xff0c;类&#xff08;Class&#xff09;、实例&#xff08;Instance…

wxml和html的异同?

WXML和HTML的异同如下&#xff1a; 异同点一&#xff1a;WXML仅能在微信小程序开发工具中预览&#xff0c;而HTML可以在浏览器内预览1。异同点二&#xff1a;WXML对组件进行了重新封装&#xff0c;为后续的性能优化提供了可能&#xff0c;同时避免开发者写出低质量的代码1。异…

springboot助农管理系统

springboot助农管理系统 成品项目已经更新&#xff01;同学们可以打开链接查看&#xff01;需要定做的及时联系我&#xff01;专业团队定做&#xff01;全程包售后&#xff01; 2000套项目视频链接&#xff1a;https://pan.baidu.com/s/1N4L3zMQ9nNm8nvEVfIR2pg?pwdekjv 提…

初探Java之旅:探寻Java的奥秘

✨个人主页&#xff1a;全栈程序猿的CSDN博客 &#x1f4a8;系列专栏&#xff1a;Java从入门到精通 ✌座右铭&#xff1a;编码如诗&#xff0c;Bug似流星&#xff0c;持续追求优雅的代码&#xff0c;解决问题如同星辰般自如 在计算机编程的世界中&#xff0c;有一门被誉为“千变…

分享87个节日PPT,总有一款适合您

分享87个节日PPT&#xff0c;总有一款适合您 87个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1eUxA59uQ-hZWWpFzzDuCkQ?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

affinity好用还是ps好用?2024年最新功能解析

多年来&#xff0c;ps已经有了大量竞争对手。然而每次Photoshop都足以保持其领先地位。开源GIMP和Pixelmator都试图取代Photoshop&#xff0c;不过Photoshop对此不屑一顾。英国Serif公司研发了一款名为Affinity Photo的软件&#xff0c;声称可以叫板ps。今天我们看看有最有可能…

【CPU 架构】x86、x86_64、x64、arm64、aarch64

x86、x86_64、x64、arm64、aarch64 1.服务器分类2.CPU 架构2.1 x86 架构&#xff1a;x86、x86_64、x642.2 arm 架构&#xff1a;arm64 和 aarch64 3.发展历史 1.服务器分类 按照 CPU 体系架构来区分&#xff0c;服务器主要分为两类&#xff1a; 非 x86 服务器&#xff1a;使用…

linux下安装nginx

第一步&#xff1a;压缩包 准备压缩包&#xff0c;最好准备一个稳定的版本&#xff1a;下载地址 我这边选用的是1.24.0双版本号 第二步&#xff1a;解压 在相对应的目录下&#xff0c;执行命令&#xff1a;tar -zxvf nginx-1.18.0.tar.gz 第三步&#xff1a;配置\编译 推荐…

解决 Python中错误 TypeError: Not All Arguments Converted During String Formatting

Python 中的字符串格式化可以通过多种方式完成,模 (%) 运算符就是其中一种方法。 它是 Python 中最古老的字符串格式化方法之一,以错误的方式使用它可能会导致 TypeError: not all arguments converted during string formatting chewy。 不仅如此,许多其他原因也可能导致同…

详解—[C++ 数据结构]—AVL树

目录 一.AVL树的概念 二、AVL树节点的定义 三、AVL树的插入 3.1插入方法 四、AVL树的旋转 1. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 2. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 3.新节点插入较高左子树的右侧---左右&#xff1a;先左单旋…

07、基于LunarLander登陆器的强化学习案例(含PYTHON工程)

07、基于LunarLander登陆器的强化学习&#xff08;含PYTHON工程&#xff09; 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。全部工程可从最上方链接下载。 基于TENSORFLOW2.10 0、实践背景 gym的LunarLander是一个用于…

第十五届蓝桥杯模拟赛(第二期)

大家好&#xff0c;我是晴天学长&#xff0c;本次分享&#xff0c;制作不易&#xff0c;本次题解只用于学习用途&#xff0c;如果有考试需要的小伙伴请考完试再来看题解进行学习&#xff0c;需要的小伙伴可以点赞关注评论一波哦&#xff01;后续会继续更新第三期的。&#x1f4…

解决uview中uni-popup弹出层不能设置高度问题

开发场景&#xff1a;点击条件筛选按钮&#xff0c;在弹出的popup框中让用户选择条件进行筛选 但是在iphone12/13pro展示是正常&#xff0c;但是切换至其他手机型号就填充满了整个屏幕&#xff0c;需要给这个弹窗设置一个固定的高度 iphone12/13pro与其他型号手机对比 一开始…

Golang 模块版本管理与语义版本控制详解

目录 语义版本控制&#xff08;SemVer&#xff09; Go 模块版本 模块版本的选择和升级 go.mod 文件 版本管理最佳实践 小结 在 Golang 中&#xff0c;模块&#xff08;module&#xff09;是 Go 1.11 版本引入的依赖管理系统&#xff0c;帮助开发者管理项目的依赖。在 Go …

Python学习路线 - Python语言基础入门 - 学习汇总

Python学习路线 - Python语言基础入门 - 学习汇总 目录准备工作基础语法判断语句功能快捷键功能快捷键功能快捷键功能快捷键功能快捷键功能快捷键功能快捷键功能快捷键 目录 准备工作 基础语法 判断语句 功能快捷键 功能快捷键 功能快捷键 功能快捷键 功能快捷键 功能…

微信小程序:button微信开放能力打开客服会话

文档 https://developers.weixin.qq.com/miniprogram/dev/component/button.html 按钮关键属性 open-type"contact"功能按钮 <button class"button__open-type"open-type"contact"> </button>css样式 父元素需要设置为相对定位…