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

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):

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

http://www.jsqmd.com/news/1247874/

相关文章:

  • 幼儿园工作总结模板:PDCA循环与数据可视化实践
  • 032、YOLOv8改进实战:TripletAttention三重注意力机制原理与C2f_Triplet模块代码实现
  • Python毕设项目:基于 Python 的数字化音乐资源管理与播放平台 个性化音乐收藏与播放记录系统 (源码+文档,讲解、调试运行,定制等)
  • AI社交平台如何提升工作与学习效率
  • 卡萨帝冰箱CASARTE推出全国统一24小时售后服务电话人工上线2026最新公布 - 优企名品
  • AIGC助手如何提升内容创作效率与质量
  • 安阳文峰区新房除甲醛怎么选?多家深度对比测评,靠谱除醛门店首选安阳森家环保 - 专注室内空气检测治理
  • WT7015三功能手电筒芯片WT7015
  • 独立站供应链协同与订单履约效率研究——基于BBWEYY一体化后台的考察,含零代码SAAS、AI编程、源码定制交付
  • AI智能体的核心能力与工程实现详解
  • 深入解析MSPM0 RTC寄存器:从原理到实战,解决嵌入式时钟开发难题
  • AI大模型就业市场分析与技能指南
  • 想给爸妈补补身体,哪种奶源可追溯的羊奶粉靠谱一点 - 资讯在线
  • 深度学习模型压缩:稀疏计算与结构化剪枝实践
  • 形态学实战:基于形态学的图像噪声去除优化
  • 万国手表回收2026吉林市须知|毓典寄卖行本地实体回收门店 - 毓典寄卖行
  • 2026江苏公考备战,选对“封闭式基地班“到底有多重要?
  • 摄像头频繁重启、关键录像凭空消失?一份企业监控运维排障 + 改造全流程手册!
  • 技术解析|Google Gemini 3.6 正式发布!推理、代码、多模态全方位技术升级
  • 欧米茄服务项目及价格查询|全新地址及售后热线权威信息公告(2026年7月最新) - 欧米茄官方服务中心
  • 033、YOLOv8改进实战:GAM全局注意力机制原理与C2f_GAM模块代码实现
  • 探秘外贸专业的谷歌自然排名服务商,究竟有何独特之处?
  • 亨得利售后维修怎么样?专业保养服务与客户口碑解析权威公示(2026年7月最新) - 亨得利官方
  • 太好了!千问App给新用户发8元红包啦!下载后只要输入 千问新人福利uqo6UY 即可领取8元通用立减券,简单又好用,快来领取吧!
  • NLP文本预处理核心技术解析与实践指南
  • GEO优化服务与AI搜索的本地化实践
  • 【GNSS】 MATLAB读取GNSSLogger数据:Fix记录筛选与提取实战【含matlab代码】
  • 陇中定西黄金回收避坑干货|一文看懂旧黄金怎么卖,六家实体门店整理参考 - 不晚生活号
  • 嵌入式GPIO寄存器深度解析:从原理到实战驱动开发
  • 美尔凯特使命:“让中国每一个家庭都用上厨房专用空调” - GrowUME