尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Flutter第十七节-----路由管理(3)
📅 发布时间:2026/7/23 13:09:25

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

●场景:更复杂的场景,如需根据参数动态生成页面,或实现路由拦截,可以使用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):

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

相关新闻

  • 2026 推荐舟山非急救长途转运|正规救护车跨省护送服务 - 官方推广
  • 嵌入式Flash性能优化:预取缓冲与镜像模式实战解析
  • AIGC助手如何提升内容创作效率与质量

最新新闻

  • 恒美智造种子发芽箱—国产主流一线厂家种子催芽箱品牌推荐 - 专业仪器测评品牌推荐
  • 2026年河南基层健康水工程建设与优质服务商选择指南 - 装修教育财税推荐2026
  • 沈阳萧邦售后服务门店|售后电话及地址权威公告(2026年7月最新) - 萧邦官方售后服务中心
  • 大模型在营销文案生成中的工程实践与优化
  • Tiva Hibernate模块RTC配置:嵌入式低功耗精准定时唤醒实战指南
  • SolidWorks航母三维建模技术与工程实践

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号