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

news2025/1/20 3:48:20

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;

  @override
  State<Store> createState() => _StoreState();
}

class _StoreState extends State<Store> {
  @override
  Widget 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.coloradmin.cn/o/1280290.html

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

相关文章

Python程序员入门指南:就业前景

文章目录 标题Python程序员入门指南&#xff1a;就业前景Python 就业数据Python的就业前景SWOT分析法Python 就业分析 标题 Python程序员入门指南&#xff1a;就业前景 Python是一种流行的编程语言&#xff0c;它具有简洁、易读和灵活的特点。Python可以用于多种领域&#xff…

Mininet学习记录(常用命令+创建网络拓扑+OpenDaylight显示拓扑结构)

目录 1.Mininet简介2.Mininet常用命令2.1创建网络拓扑常用参数2.2常用的内部交换命令3.创建网络拓扑的三种方式3.1通过命令行创建3.2通过miniedit可视化界面创建3.3通过python脚本创建4.问题总结1.Mininet简介 Mininet 是由一些虚拟的终端节点 (end-hosts) 、交换机、路由器连接…

PPT设置背景颜色

问题描述&#xff1a;PPT如何设置背景颜色&#xff1f; 问题解决&#xff1a;设计→设置背景格式→颜色→蓝色&#xff08;最好选择看着比较舒服的颜色&#xff09;

「C++」位图和布隆过滤器

&#x1f4bb;文章目录 位图概念位图的实现位图的应用 布隆过滤器概念布隆过滤器的哈希函数布隆过滤器的插入布隆过滤器的查找布隆过滤器的删除 &#x1f4d3;总结 位图 概念 所谓位图&#xff0c;就是在每一位bit位上存放某种状态&#xff0c;1就代表存在&#xff0c;0就代表…

linux常用命令-grep命令与ps命令详解(超详细)

文章目录 前言一、grep命令介绍1. grep命令简介2. grep命令的基本语法3. 常用的grep命令选项 二、grep命令示例用法1. 在文件中搜索匹配模式的行2. 忽略大小写地搜索匹配模式的行3. 反转匹配&#xff0c;只打印不匹配模式的行4. 显示匹配行的行号5. 统计匹配的行数6. 打印包含匹…

C++:C++11新特性--lambda表达式和包装器

文章目录 lambda表达式lambda表达式的使用规则lambda表达式的用法lambda表达式的理解函数对象和lambda表达式 包装器bind lambda表达式 首先介绍什么是lambda表达式&#xff0c;在介绍这个情景前&#xff0c;可以回忆一下算法库中的sort排序&#xff1a; // lambda表达式 voi…

HADOOP::Fsimage和Edits解析

NameNode被格式化之后&#xff0c;将在/opt/module hadoop-3.1.3/data/tmp/dfs/name/curent目录 中产生如下文件 fsimage_ 0000000000000000000 fsimage_ 0000000000000000000.md5 seen_txid VERSION (1) Fsimage文件: HDFS文件系统元数据的一个永久性的检查点&#xff0…

基于微信小程序的高校活动系统

1 前言 1.1开发背景及意义 高校课余活动管理是中职学生素质教育的重要途径及有效方式&#xff0c;特别是对于一个院校的校园文化建设、校风学风建设和学生综合素质方面的提高至关重要t叫"。良好的学生活动组织可以更好地调动学生参与活动&#xff0c;让学生展示自己的能力…

【超全】React学习笔记 中:进阶语法与原理机制

React学习笔记 React系列笔记学习 上篇笔记地址&#xff1a;【超全】React学习笔记 上&#xff1a;基础使用与脚手架 下篇笔记地址&#xff1a;【超全】React学习笔记 下&#xff1a;路由与Redux状态管理 React进阶组件概念与使用 1. React 组件进阶导读 在掌握了 React 的基…

Windows修改MAC地址的方法(以windows11为例)

我们在日常的工作中&#xff0c;如果mac地址被限制&#xff0c;就需要修改mac地址&#xff0c;本文总结一下修改windows的mac地址的方法。 方法一&#xff1a;网络适配器中配置 网络适配器中配置的方式适用于能够在网络适配器中找到物理地址(NetworkAddress)的情况。 1、打开…

CPU标高load标高;linux故障日志排查

一般情况下&#xff0c;服务器不太会出问题。但是遇到特别诡异的情况&#xff0c;多半是服务器本身的问题。遇到问题&#xff0c;我们不能一味的去排查应用&#xff0c;中间件。更应该想到服务器的问题。否则很容易出现南辕北辙的情况。 这次分享的是一次服务器故障&#xff0c…

JavaScript添加快捷键、取消浏览器默认的快捷操作、js查看键盘按钮keycode值

document.addEventListener("keydown",function (event) {// 如果不知道按键对应的数字&#xff08;keyCode&#xff09;是多少可以弹出查看一下// alert(event.keyCode)if (event.ctrlKey && event.altKey && event.view["0"] null){if(…

Spring学习笔记:Day2

昨天定的学习计划发现通过文心4.0来实现不靠谱&#xff0c;坑太多&#xff0c;今天开始跟随B站进行学习&#xff0c;争取10-15天学习一遍&#xff0c;冲啊&#xff01; 地址&#xff1a;001-课程介绍_哔哩哔哩_bilibili 今日规划&#xff1a; pt 001 - pt 018&#xff0c;提到…

Vue3实现滚动到容器底部时发送请求,加载新数据

问题来源 在项目中出现了需要在容器滚动到底部时&#xff0c;加载新的数据的需求&#xff0c;以下是解决的方案笔记 解决 画了个流程图&#xff1a; 如图&#xff0c;先添加一个动态加载的图标&#xff0c;还有全部数据载完的《到底啦...》 大概这么个样子&#xff0c;之后呢…

【C++ Primer Plus学习记录】第5章复习题

1.入口条件循环和出口条件循环之间的区别是什么&#xff1f;各种C循环分别属于其中的哪一种&#xff1f; C提供了3种循环&#xff1a;for、while和do while循环。for和while循环都是入口条件循环&#xff0c;意味着程序将在执行循环体中的语句之前检查测试条件。do while循环是…

【IDEA】导入项目发现目录消失

错误截图 这个目录里我是有文件的&#xff0c;但是导入到idea后却看不见文件 错误原因&#xff1a; 删除目录的时候不小心将.iml文件给删除了&#xff01; 解决办法 进入项目结构 选择模块&#xff0c;点击 导入模块 选择需要导入的模块的目录 从现有项目创建模块 --> 下…

智慧用电安全动态监控系统

智慧用电安全动态监控系统是一种先进的电力监控技术系统&#xff0c;它运用物联网、大数据、云计算等先进技术&#xff0c;对电力系统的运行状况进行实时监控和预警。 该系统依托电易云-智慧电力物联网&#xff0c;通过智能传感终端采集电气线路的实时运行数据&#xff0c;客户…

Redis的高可用模式

1. 什么是高可用&#xff1f; 高可用&#xff08;High Availability, HA&#xff09;是指在信息技术中确保系统、服务或应用程序在绝大多数时间内都是可操作和可访问的能力。这通常涉及以下几个关键方面&#xff1a; 最小化停机时间: 高可用系统的目标是减少因硬件故障、系统升…

【面试HOT200】二叉树——广度优先搜索篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot200】进行的&#xff0c;每个知识点的修正和深入主要参…

怎样使用rtsp,rtmp摄像头低延时参于Web视频会议互动直播

业务系统中有大量的rtsp&#xff0c;rtmp等监控直播设备&#xff0c;原大部分都是单一业务监控直播之类&#xff0c;目前很多业务需要会议互动&#xff0c;需要监控参会&#xff0c;提出需摄像头拉流参会的需求&#xff0c;由于rtmp&#xff0c;rtsp原生不支持web播放&#xff…