当前位置: 首页 > 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.cnnetsun.cn/news/3601482.html

相关文章:

  • 财务分析报告是什么?财务分析报告怎么写?
  • TLV320ADC3001音频ADC实战:接口模式与PLL时钟配置详解
  • 深入解析MSPM0调试子系统:从SWD接口到DEBUGSS架构与实战应用
  • 遥感与AI技术在农业保险定损中的应用实践
  • 川菜鱼香肉丝的标准化历程与现代应用
  • lu,生理药理实验多用仪
  • 别再瞎试了!Sora提示词效能评估体系首次披露(含可复用评分表V2.3)
  • 机房共建商业模式与盈利策略详解
  • DP83620以太网PHY芯片寄存器配置与驱动开发实战指南
  • 医学影像分割中的多专家标注分歧解决方案
  • 拼凑式AGI安全挑战与分布式治理框架设计
  • 神经网络基础与实战:从原理到Python实现
  • MIGM-Shortcut:AI图像生成4倍加速技术解析
  • Unity集成硬件SDK:彻底解决DllNotFoundException的完整指南
  • 031、YOLOv8改进实战:ShuffleAttention原理与C2f_ShuffleAttention模块代码实现
  • 信创落地实践:银河麒麟 aarch64 平台轻量 SQLite 管理工具选型与 SQLiteGo 实测
  • AI深度学习提升fMRI脑成像信噪比与分辨率
  • 打开HMTL报告,查看详细测试结果:
  • UE5性能优化实战:用Stat命令与Unreal Insights精准定位卡顿根源
  • 云雾环境模拟试验舱实景效果与能力验证
  • Unity粒子瀑布特效:开源项目解析与性能优化实战
  • 避坑指南:2026 枸杞原浆十大品牌发布,警惕添加剂与虚假宣传问题
  • OpenClaw智能文件处理:AI模型与养文件技术解析
  • 2026 集团化员工心理风险测评盘点:TOP7 系统分级干预方案与数据看板能力对比
  • 科研自动化工具解析:EvoScientist与Auto-claude应用实践
  • 深入解析BQ41Z50充电算法:温度电压分段控制与电池寿命管理
  • IBIS陆地生态系统模型从环境搭建、多源数据预处理到水-热-碳-氮耦合模拟、模型验证与论文成果衔接全链路实战应用
  • CDN带宽采购策略与成本优化实战指南
  • 告别烧钱时代:诚心呈意为中小创业者指出的三条路
  • 测试文章 001130 - 请忽略