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

flutter路由配置

路由配置文件

import 'package:flutter/material.dart';
import 'package:ichat/routers/pages/form_page.dart';
import 'package:ichat/routers/pages/person_page.dart';
import 'package:ichat/routers/pages/search_page.dart';
import 'package:ichat/routers/router_page.dart';
class RouteConfig {static String initRoute="/";static Map<String, WidgetBuilder> routes = {initRoute: (context) => const StaticRouterPage(),'/person': (context) => const PersonPage(),'/search': (context) => const SearchPage(),"/form": (context,{arguments}) => FormPage(arguments:arguments),};static var onGenerateRoute = (RouteSettings settings) {// print("$settings  ,name: ${settings.name} ,arguments: ${settings.arguments}");
//生成路由String? name = settings.name;var arguments = settings.arguments;Function? func = routes[name];if (func != null) {if (arguments == null) {return MaterialPageRoute(builder: (context) => func!(context));} else {return MaterialPageRoute(builder: (context) => func!(context, arguments));}}return null;};
}

程序启动主函数文件


import 'package:flutter/material.dart';
import 'package:ichat/routers/route_config.dart';main(){runApp(MaterialApp(title: "dynamic router",debugShowCheckedModeBanner: false,theme: ThemeData(primarySwatch: Colors.blue),// home: const StaticRouterPage(), //home和 initialRoute不能同时存在,否则会报错initialRoute: RouteConfig.initRoute,routes: RouteConfig.routes,onGenerateRoute: RouteConfig.onGenerateRoute,));}

路由使用

import 'package:flutter/material.dart';
import 'package:ichat/routers/pages/news_page.dart';
import 'package:ichat/routers/pages/person_page.dart';
import 'package:ichat/routers/pages/search_page.dart';class StaticRouterPage extends StatefulWidget {const StaticRouterPage({super.key});@overrideState<StaticRouterPage> createState() => _StaticRouterPageState();
}class _StaticRouterPageState extends State<StaticRouterPage> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("路由"),),body: Container(child: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [ElevatedButton(onPressed: () {Navigator.of(context).push(MaterialPageRoute(builder: (context) => const SearchPage(),));},child: Text("搜索")),SizedBox(width: 20,),ElevatedButton(onPressed: () {Navigator.of(context).push(MaterialPageRoute(builder: (context) => const PersonPage(),));},child: Text("我的")),SizedBox(width: 20,),ElevatedButton(onPressed: () {Navigator.of(context).push(MaterialPageRoute(builder: (context) => const NewsPage(title: "国际小新闻",newsId: 20),));},child: Text("新闻")),]),SizedBox(height: 20,),Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [ElevatedButton(onPressed: () {Navigator.of(context).pushNamed("/search");},child: Text("搜索")),SizedBox(width: 20,),ElevatedButton(onPressed: () {Navigator.of(context).pushNamed("/form",arguments: {"key1":"value1","key2":"value2",});},child: Text("form")),SizedBox(width: 20,),ElevatedButton(onPressed: () {Navigator.pushNamed(context,"/person");},child: Text("我的")),// SizedBox(width: 20,),// ElevatedButton(//     onPressed: () {//       Navigator.of(context).push(MaterialPageRoute(//         builder: (context) => const NewsPage(title: "国际小新闻",newsId: 20),//       ));//     },//     child: Text("新闻")),]),]))));}
}

路由使用的几种方式

1、push不带参数

Navigator.of(context).push(MaterialPageRoute(builder: (context) => const PersonPage(),));

2、push带参数

Navigator.of(context).push(MaterialPageRoute(builder: (context) => const NewsPage(title: "国际小新闻",newsId: 20),));

3、通过命名路由配置pushNamed

Navigator.of(context).pushNamed("/search");

4、 通过命名路由配置带参数pushNamed

Navigator.of(context).pushNamed("/form",arguments: {"key1":"value1","key2":"value2",
});

5、路由返回

Navigator.of(context).pop()

6、pushReplacementNamed

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Python实现深度学习模型:智能垃圾分类与环境保护
  • Navicat—如何查看历史日志
  • 默认序列化会报警告Hessian/Burlap: calss is an unknown class in WebappClassLoader
  • [MRCTF2020]Ezpop
  • Linux驱动开发—设备树描述引脚复用 Pinmux 与Pinctrl
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • 【图书推荐】《数据资产管理核心技术与应用》
  • JAVA中的Wrapper类
  • 认识消息队列:Spring Boot 实现 MQ 消息队列,解锁异步、削峰、广播等高级功能!
  • Pygame游戏开发进阶:碰撞检测和声音效果
  • 武汉流星汇聚:中国制造业与跨境电商共舞,性价比领先全球电商平台
  • django基于大数据的电影推荐系统-计算机毕业设计源码71246
  • 【计算机网络——1.4接入网和物理媒体】
  • 【编程笔记】解决移动硬盘无法访问文件或目录损坏且无法读取
  • 深入解析数据仓库ADS层-从理论到实践的全面指南
  • [译]如何构建服务器端web组件,为何要构建?
  • 【笔记】你不知道的JS读书笔记——Promise
  • ECMAScript入门(七)--Module语法
  • ES6核心特性
  • golang 发送GET和POST示例
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • js中forEach回调同异步问题
  • Laravel5.4 Queues队列学习
  • nodejs:开发并发布一个nodejs包
  • ReactNative开发常用的三方模块
  • spring + angular 实现导出excel
  • Terraform入门 - 3. 变更基础设施
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 产品三维模型在线预览
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 回顾2016
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何解决微信端直接跳WAP端
  • 我从编程教室毕业
  • 2017年360最后一道编程题
  • 积累各种好的链接
  • ​香农与信息论三大定律
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #mysql 8.0 踩坑日记
  • #单片机(TB6600驱动42步进电机)
  • (1)无线电失控保护(二)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)fgets与fputs函数详解
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三)c52学习之旅-点亮LED灯
  • (转)负载均衡,回话保持,cookie
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net wcf memory gates checking failed