news 2026/7/23 12:52:31

Flutter第十七节-----路由管理(3)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter第十七节-----路由管理(3)

一.路由管理-动态路由与高级控制

●场景:更复杂的场景,如需根据参数动态生成页面,或实现路由拦截,可以使用onGenerateRoute和onUnknownRoute。

●onGenerateRoute:允许你根据RouteSettings(包含路由名称和参数)动态创建不同的Route

代码实例:

import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; void main(List<String> args) { runApp(Mainpage()); } class Mainpage extends StatelessWidget { const Mainpage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( initialRoute: "/goodsList", routes: {"/goodsList": (context) => GoodsList()}, onGenerateRoute: (settings) { print(settings.name); if (settings.name == "/cardList") { bool isLogin = true; if (isLogin) { return MaterialPageRoute(builder: (context) => cardList()); } else { return MaterialPageRoute(builder: (context) => Loginpage()); } } }, ); } } class GoodsList extends StatefulWidget { GoodsList({Key? key}) : super(key: key); @override _GoodsListState createState() => _GoodsListState(); } class _GoodsListState extends State<GoodsList> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("商品列表")), body: Center( child: TextButton( onPressed: () { Navigator.pushNamed(context, "/cardList"); }, child: Text('加入购物车'), ), ), ); } } class cardList extends StatefulWidget { cardList({Key? key}) : super(key: key); @override _cardListState createState() => _cardListState(); } class _cardListState extends State<cardList> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("购物车列表")), body: Center( child: TextButton(onPressed: () {}, child: Text('去支付')), ), ); } } class Loginpage extends StatefulWidget { Loginpage({Key? key}) : super(key: key); @override _LoginpageState createState() => _LoginpageState(); } class _LoginpageState extends State<Loginpage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("登录页面")), body: Center( child: TextButton(onPressed: () {}, child: Text('去登录')), ), ); } }

==========》

当isLogin为false时:

==========》

二.404页面

●onUnknownRoute::跳转一个未在路由表中注册、也未在onGenerateRoute中处理的路由,会调用此回调。通常显示"404"页面

import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; void main(List<String> args) { runApp(Mainpage()); } class Mainpage extends StatelessWidget { const Mainpage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( initialRoute: "/goodsList", routes: {"/goodsList": (context) => GoodsList()}, onGenerateRoute: (settings) { print(settings.name); if (settings.name == "/cardList") { bool isLogin = false; if (isLogin) { return MaterialPageRoute(builder: (context) => cardList()); } else { return MaterialPageRoute(builder: (context) => Loginpage()); } } }, onUnknownRoute: (settings) { return MaterialPageRoute(builder: (context) => NotFound()); }, ); } } class GoodsList extends StatefulWidget { GoodsList({Key? key}) : super(key: key); @override _GoodsListState createState() => _GoodsListState(); } class _GoodsListState extends State<GoodsList> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("商品列表")), body: Center( child: TextButton( onPressed: () { Navigator.pushNamed(context, "/abc"); }, child: Text('加入购物车'), ), ), ); } } class cardList extends StatefulWidget { cardList({Key? key}) : super(key: key); @override _cardListState createState() => _cardListState(); } class _cardListState extends State<cardList> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("购物车列表")), body: Center( child: TextButton(onPressed: () {}, child: Text('去支付')), ), ); } } class Loginpage extends StatefulWidget { Loginpage({Key? key}) : super(key: key); @override _LoginpageState createState() => _LoginpageState(); } class _LoginpageState extends State<Loginpage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("登录页面")), body: Center( child: TextButton(onPressed: () {}, child: Text('去登录')), ), ); } } class NotFound extends StatefulWidget { NotFound({Key? key}) : super(key: key); @override _NotFoundState createState() => _NotFoundState(); } class _NotFoundState extends State<NotFound> { @override Widget build(BuildContext context) { return Container( child: Center( child: Image.asset("lib/image/1.png", width: 300, height: 400), ), ); } }

现在我们点击按钮跳转到了一个随便写的不存在的地址abc当中,则会加载我们的图片(正常业务中图片显示404):

============》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 12:52:09

财务分析报告是什么?财务分析报告怎么写?

又到月末最后一天&#xff0c;整层楼都黑了&#xff0c;财务部的灯还亮着。我盯着电脑屏幕上几十个Excel工作簿来回切换&#xff0c;眼睛又干又涩。这已经是第三次发现数据对不上了——业务部给的收入台账和系统导出来的科目余额表差了整整两百万&#xff0c;逐行核对了一个下午…

作者头像 李华
网站建设 2026/7/23 12:51:38

TLV320ADC3001音频ADC实战:接口模式与PLL时钟配置详解

1. TLV320ADC3001音频ADC&#xff1a;从数据手册到实战配置如果你正在设计一个需要高质量音频采集的系统&#xff0c;比如智能音箱、录音笔、会议终端或者专业的音频接口&#xff0c;那么你大概率绕不开一颗关键的芯片&#xff1a;音频编解码器&#xff08;Codec&#xff09;。…

作者头像 李华
网站建设 2026/7/23 12:51:30

深入解析MSPM0调试子系统:从SWD接口到DEBUGSS架构与实战应用

1. 项目概述&#xff1a;从零开始理解MSPM0的DEBUGSS与SWD在嵌入式开发这条路上&#xff0c;调试能力的高低直接决定了你定位问题的速度和项目推进的效率。无论是刚入行的新手&#xff0c;还是经验丰富的工程师&#xff0c;面对一块新的MCU&#xff0c;搞懂它的调试子系统都是绕…

作者头像 李华
网站建设 2026/7/23 12:50:52

遥感与AI技术在农业保险定损中的应用实践

1. 项目背景与行业痛点农业保险作为分散农业生产经营风险的重要手段&#xff0c;近年来在政策推动下快速发展。但在传统作业模式下&#xff0c;农险业务面临着三大核心痛点&#xff1a;定损难&#xff1a;农作物生长周期长&#xff0c;灾害影响具有滞后性和隐蔽性&#xff0c;人…

作者头像 李华
网站建设 2026/7/23 12:49:32

川菜鱼香肉丝的标准化历程与现代应用

1. 鱼香肉丝的历史溯源与技法演变鱼香肉丝作为川菜经典名菜&#xff0c;其技法规范化历程与川菜发展史紧密相连。这道菜最早可追溯至民国初年成都地区&#xff0c;当时川菜正处于"一菜一格&#xff0c;百菜百味"的鼎盛时期。据《川菜烹饪事典》记载&#xff0c;鱼香肉…

作者头像 李华
网站建设 2026/7/23 12:48:26

lu,生理药理实验多用仪

依托数字集成电路完成振荡频率逐级分频&#xff0c;输出多组标准频率与时间信号&#xff0c;可充当方波刺激装置。输出方波前沿陡直、波形平顶平整&#xff0c;刺激效果优良&#xff1b;脉宽、输出电压支持连续调节&#xff0c;配备单次、双次、定时、持续输出多种工作模式&…

作者头像 李华