当前位置: 首页 > news >正文

Flutter路由的几种用法

Flutter路由跳转

基本路由跳转 

ElevatedButton(onPressed: () {//基本路由跳转Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const SearchPage();}),);},child: const Text("基本路由跳转"),
),

search.dart页面

import 'package:flutter/material.dart';class SearchPage extends StatefulWidget {final String context;final int aid;const SearchPage({super.key,this.context = "",this.aid = 0,});@overrideState<SearchPage> createState() => _SearchPageStateState();
}class _SearchPageStateState extends State<SearchPage> {@overridevoid initState() {super.initState();}@overrideWidget build(BuildContext context) {return Scaffold(floatingActionButton: FloatingActionButton(onPressed: () {//返回到上一页路由Navigator.pop(context);},child: const Icon(Icons.close),),appBar: AppBar(title: const Text("搜索页面"),),body: Center(child: Text("${widget.context} ""${widget.aid == 0 ? "" : ",代号:${widget.aid}"}"),),);}
}

返回上一页路由

Navigator.pop(context);

基本路由跳转传参

ElevatedButton(onPressed: () {//基本路由跳转传参Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const SearchPage(context: "首页传过来的参数", aid: 123456);}),);},child: const Text("基本路由跳转传参"),
),

命名路由跳转

ElevatedButton(onPressed: () {//命名路由跳转Navigator.pushNamed(context, "/search");},child: const Text("命名路由跳转"),
),

命名路由跳转需要先配置路由

routers.dart配置文件

import 'package:flutter/material.dart';
import 'package:flutter_demo/form.dart';
import 'package:flutter_demo/register2.dart';
import 'package:flutter_demo/search.dart';//配置路由
Map routes = {"/search": (context) => const SearchPage(),"/register2": (context) => const Register2(),"/form": (context, {arguments}) => FormPage(arguments: arguments),
};//配置onGenerateRoute固定写法,这个方法相当于一个中间件,可以做权限判断
var onGenerateRoute = (RouteSettings settings) {final String? name = settings.name;final Function? pageContentBuilder = routes[name];if (pageContentBuilder != null) {if (settings.arguments != null) {final Route route = MaterialPageRoute(builder: (context) =>pageContentBuilder(context, arguments: settings.arguments),);return route;} else {final Route route = MaterialPageRoute(builder: (context) => pageContentBuilder(context),);return route;}}return null;
};

然后需要在首页添加initialRoute和onGenerateRoute配置

import 'package:flutter_demo/routers/routers.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(//隐藏DEBUG图标debugShowCheckedModeBanner: false,theme: ThemeData(primarySwatch: Colors.blue),home: const Scaffold(body: MyHomePage(),),initialRoute: "/",onGenerateRoute: onGenerateRoute,);}
}

命名路由跳转传参

ElevatedButton(onPressed: () {//命名路由传参Navigator.pushNamed(context,"/form",arguments: {"aid": 123456,"name": "张三","age": "18",},);},child: const Text("命名路由传参"),
),

context属性中写配置中的路径,arguments属性中是跳转需要带的参数,跳转到form.dart页面并接收参数。

import 'package:flutter/material.dart';class FormPage extends StatefulWidget {final Map arguments;const FormPage({super.key,required this.arguments,});@overrideState<FormPage> createState() => _FormPageStateState();
}class _FormPageStateState extends State<FormPage> {@overridevoid initState() {super.initState();}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text("表单页面"),),body: Center(child: Text(widget.arguments.isEmpty? "": "我是${widget.arguments["name"]},我${widget.arguments["age"]}了,""代号:${widget.arguments["aid"]}",),),);}
}

命名路由替换跳转

Navigator.of(context).pushReplacementNamed("/register2");

命名路由替换跳转用pushReplacementNamed,跳转新页面后本页面被替换掉。

移除所有页面返回到根页面

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (BuildContext context) {return const MyApp();
}), (route) => false);

移除所有页面并返回到指定页面用pushAndRemoveUntil。

相关文章:

Flutter路由的几种用法

Flutter路由跳转 基本路由跳转 ElevatedButton(onPressed: () {//基本路由跳转Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const SearchPage();}),);},child: const Text("基本路由跳转"), ), search.dart页面 impo…...

力扣119双周赛

第 119 场双周赛 文章目录 第 119 场双周赛找到两个数组中的公共元素消除相邻近似相等字符最多 K 个重复元素的最长子数组找到最大非递减数组的长度 找到两个数组中的公共元素 模拟 class Solution { public:vector<int> findIntersectionValues(vector<int>&…...

Redux,react-redux,dva,RTK

1.redux的介绍 Redux – 李立超 | lilichao.com 2.react-redux 1&#xff09;react-Redux将所有组件分成两大类 UI组件 只负责 UI 的呈现&#xff0c;不带有任何业务逻辑通过props接收数据(一般数据和函数)不使用任何 Redux 的 API一般保存在components文件夹下容器组件 …...

基于Java SSM框架实现高校信息资源共享平台系统【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现高校信息资源共享平台系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们…...

SpringMvc入坑系列(一)----maven插件启动tomcat

springboot傻瓜式教程用久了&#xff0c;回过来研究下SSM的工作流程&#xff0c;当然从Spring MVC开始&#xff0c;从傻瓜式入门处理请求和页面交互&#xff0c;再到后面深入源码分析。 本人写了一年多的后端和半年多的前端了。用的都是springbioot和vue&#xff0c;源码一直来…...

Leetcode—337.打家劫舍III【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—337.打家劫舍III 算法思想 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(null…...

列表标签的介绍与使用

列表的作用&#xff1a; 整齐、整洁、有序&#xff0c;它作为布局会更加自由和方便。 根据使用情景不同&#xff0c;列表可以分为三大类&#xff1a;无序列表、有序列表和自定义列表 无序列表 <ul> 标签表示 HTML 页面中项目的无序列表&#xff0c;一般会以项目符号呈…...

浅谈什么是语音芯片的白噪音支持功能:打造舒适家居与优质音频体验

随着科技的不断进步和人们对生活质量要求的提升&#xff0c;语音芯片已经成为了现代电子产品中不可或缺的一部分。而在这些语音芯片中&#xff0c;支持白噪音的功能逐渐受到人们的关注。本文将围绕语音芯片中的白噪音支持功能展开讨论&#xff0c;带您领略其带来的舒适家居与优…...

【QED】高昂的猫 Ⅰ

目录 题目背景题目描述输入格式输出格式 测试样例样例说明数据范围 思路核心代码 题目背景 这是小橘。因为它总是看起来很高傲&#xff0c;所以人送外号“高昂的猫”。 题目描述 "锕狗"的房间里放着 n n n ( 1 ≤ n ≤ 1 0 9 ) (1 \leq n \leq 10^9) (1≤n≤109)个…...

Redis如何做内存优化?

Redis如何做内存优化&#xff1f; 1、缩短键值的长度 缩短值的长度才是关键&#xff0c;如果值是一个大的业务对象&#xff0c;可以将对象序列化成二进制数组&#xff1b; 首先应该在业务上进行精简&#xff0c;去掉不必要的属性&#xff0c;避免存储一些没用的数据&#xff1…...

倪海厦:教你正确煮中药,发挥最大药效

同样的一个汤剂&#xff0c;我开给你&#xff0c;你如果煮的方法不对&#xff0c;吃下去效果就没那么好。 所以&#xff0c;汤&#xff0c;取它的迅捷&#xff0c;速度很快&#xff0c;煮汤的时候还有技巧&#xff0c;你喝汤料的时候&#xff0c;你到底是喝它的气&#xff0c;…...

C++学习笔记:继承

继承 什么是继承?继承的写法基类和派生类的赋值转换继承中的作用域派生类的默认成员函数单继承,多继承,虚拟继承is-a 和 has-a 什么是继承? 继承是C语言面向对象的三大特性之一&#xff0c;是面向对象程序设计使代码可以复用的最重要的手段,基本都是在一个类的基础上为了增加…...

音频/视频、信息和通信技术设备安全标准UL62368-1

UL 62368-1&#xff0c;第 3 版&#xff0c;2019 年 12 月 13 日- UL 音频/视频、信息和通信技术设备安全标准 - 第 1 部分&#xff1a;安全要求 IEC 62368 的这一部分适用于该领域内电气和电子设备的安全音频、视频、信息和通信技术&#xff0c;以及额定电压不超过 600 V 的商…...

macos下安装科研绘图软件Origin

科研人必备软件Origin&#xff0c;主要是考虑到很多期刊都要求绘制origin可编辑的图&#xff0c;所以有些时候必须用这个软件&#xff0c;但是这个软件macos并不支持&#xff0c;所以必须考虑其他的方案&#xff0c;我没有安装虚拟机&#xff0c;而是使用crossover 安装crosso…...

安全快速地删除 MySQL 大表数据并释放空间

一、需求 按业务逻辑删除大量表数据操作不卡库&#xff0c;不能影响正常业务操作操作不能造成 60 秒以上的复制延迟满足以上条件的前提下&#xff0c;尽快删除数据并释放所占空间 表结构如下&#xff1a; create table space_visit_av (userid bigint(20) not null comment 用…...

未使用 “严格模式“(js的问题)

"严格模式"&#xff08;即在JavaScript源文件的开头包括 "use strict"&#xff1b;&#xff09;是一种自愿在运行时对JavaScript代码执行更严格的解析和错误处理的方式&#xff0c;同时也使它更安全。 但是&#xff0c;不使用严格模式本身并不是一个 &quo…...

Verilog基础:$random系统函数的使用

相关阅读 Verilog基础​编辑https://blog.csdn.net/weixin_45791458/category_12263729.html $random系统函数语法的BNF范式如下所示&#xff0c;有关BNF范式相关内容&#xff0c;可以浏览以往文章Verilog基础&#xff1a;巴科斯范式(BNF)。 $random系统函数在每次调用时返回一…...

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的&#xff0c;它是数据库操作中的一种重要操作&#xff0c;能够帮助用户删除不需要的数据&#xff0c;以便保持数据库的整洁和高效。在使用Delete操作时&#xff0c;需要注意确保操作的准确性和安全性&#xff0c;以免误删重要…...

鸿蒙前端开发-构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Serv…...

从零开始搭建链上dex自动化价差套利程序(12)

其他品种 扩展到其他币种的价差套利 1.eth 新建文件get_depth_data_eth.py import asyncio from apexpro.http_public import HttpPublic from dydx3 import Client from dydx3.constants import MARKET_ETH_USD# 定义交易对列表 symbol ETHUSDC market MARKET_ETH_USD# …...

Claude Code代码泄露第二天,Anthropic 把最骚的功能悄悄上线了。

昨天 512,000 行源码裸奔上 npm&#xff0c;今天 /buddy 来了。这到底是发布&#xff0c;还是还在愚人节&#xff1f;昨天发生了什么先帮没跟上的人补个课。3月31日凌晨4点多&#xff0c;有人发现 Claude Code v2.1.88 的 npm 包里藏着一个 59.8 MB 的 .map 文件&#xff0c;而…...

Hermes性能优化:如何提高邮件生成速度和降低资源消耗

Hermes性能优化&#xff1a;如何提高邮件生成速度和降低资源消耗 【免费下载链接】hermes Golang package that generates clean, responsive HTML e-mails for sending transactional mail 项目地址: https://gitcode.com/gh_mirrors/he/hermes Hermes是一个Golang包&a…...

告别上位机!纯FPGA实现exFAT文件系统,让你的高速数据直接存成标准文件

纯FPGA实现exFAT文件系统&#xff1a;硬件工程师的高速存储革命 在高速数据采集领域&#xff0c;从雷达信号处理到卫星通信&#xff0c;工程师们长期面临一个核心痛点&#xff1a;如何将海量原始数据高效、可靠地转换为标准文件格式。传统方案依赖上位机或嵌入式处理器进行文件…...

2025届毕业生推荐的十大降重复率神器横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 眼下&#xff0c;人工智能生成内容愈发普遍&#xff0c;各类AI检测工具便跟着出现了&#xf…...

Halcon拼图算子tile_images_offset实战:从图像裁切到精准拼接

1. 认识tile_images_offset算子 第一次接触Halcon的tile_images_offset算子时&#xff0c;我正面临一个棘手的工业检测项目。客户需要将多个摄像头拍摄的电路板局部图像拼接成完整视图&#xff0c;传统手动拼接方式效率低下且误差大。这个算子就像及时雨&#xff0c;完美解决了…...

AMD Ryzen处理器深度调试指南:解锁硬件性能的终极利器

AMD Ryzen处理器深度调试指南&#xff1a;解锁硬件性能的终极利器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…...

AIGC技术实操:AI生图、AI视频开发与工具集成

2026年&#xff0c;AIGC技术已从“玩具级应用”走向“产业级工具”&#xff0c;其中AI生图、AI视频成为开发者的热门布局领域&#xff0c;据统计&#xff0c;AIGC/传媒领域商业化进程最快&#xff0c;MCN行业人工智能渗透率超60%&#xff0c;广告行业渗透率达55%。对于开发者而…...

告别系统卡顿:RyTuneX全方位性能优化指南

告别系统卡顿&#xff1a;RyTuneX全方位性能优化指南 【免费下载链接】RyTuneX RyTuneX is a cutting-edge optimizer built with the WinUI 3 framework, designed to amplify the performance of Windows devices. Crafted for both Windows 10 and 11. 项目地址: https://…...

AI写专著超实用攻略:精选工具推荐,提升写作效率与质量

第一次尝试写学术专著的挑战与AI写作工具介绍 对于第一次尝试写学术专著的研究者来说&#xff0c;写作的过程就像是一场充满挑战的冒险之旅&#xff0c;伴随着许多不确定的困难。在选题方面常常陷入困扰&#xff0c;难以在“具有价值”和“可行性”之间找到合适的平衡。有时选…...

告别手动配置:用快马AI生成openclaw自动化安装与环境管理脚本

作为一名经常需要配置各种开发环境的程序员&#xff0c;我深刻体会到手动安装工具的繁琐。最近在搭建一个爬虫项目时需要用到openclaw&#xff0c;发现传统安装方式存在几个明显的效率痛点&#xff1a; 版本查找耗时&#xff1a;需要反复在官网和文档间切换&#xff0c;确认最…...