Flutter---路由与导航

路由的概念

路由代表一个页面或屏幕,路由管理就是管理页面之间的跳转方式。

导航器(Navigator)的概念

Navigator是一个组件,它通过栈的数据结构在管理所有的路由

入栈(push):打开新页面,新页面成为栈顶

出栈(pop):关闭当前页面,返回上一个页面

命名式路由

基本跳转

Dart 复制代码
// 打开新页面
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => NewPage()),
);

// 返回上一页
Navigator.pop(context);

页面传参

Dart 复制代码
// 发送方
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => DetailPage(product: product),
  ),
);

// 接收方
class DetailPage extends StatelessWidget {
  final Product product;
  const DetailPage({required this.product});
}

返回数据给上一个页面

Dart 复制代码
// 在B页面返回数据
Navigator.pop(context, '这是返回的数据');

// 在A页面接收
final result = await Navigator.push(...);
print(result); // '这是返回的数据'

给路由命名,直接用名字跳转

首先在MaterialApp中注册路由表(给页面起名字)

Dart 复制代码
MaterialApp(
  initialRoute: '/', // 首页路由
  routes: {
    '/': (context) => HomePage(),
    '/detail': (context) => DetailPage(),
    '/settings': (context) => SettingsPage(),
  },
)

使用命名路由跳转

Dart 复制代码
Navigator.pushNamed(context, '/detail');

// 带参数跳转
Navigator.pushNamed(
  context,
  '/detail',
  arguments: {'id': 123, 'title': '商品标题'},
);

// 接收参数
final args = ModalRoute.of(context)!.settings.arguments as Map;

高级栈操作

Dart 复制代码
// 替换当前页面-通常在路由栈顶页面替换
//比如有页面1,页面2(页面2在栈顶)。在页面2使用pushReplacementNamed进入页面3,那么现在路由栈里面就是页面1和页面3
Navigator.pushReplacementNamed(context, '/newPage');

// 弹出当前页面并推入新页面-与pushReplacementNamed功能类似,就是有出栈动画和入栈动画,而pushReplacementNamed只有入栈动画
Navigator.popAndPushNamed(context, '/newPage');

// 一直弹出直到满足条件
Navigator.popUntil(context, ModalRoute.withName('/home'));

// 推入新页面并移除之前所有页面(常用于登录后)
Navigator.pushNamedAndRemoveUntil(
  context,
  '/home',
  (route) => false, // 移除所有
);
相关推荐
hiahiahia12318 分钟前
Streaming Model Output
开发语言·前端
paopaokaka_luck19 分钟前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
Ruiery20 分钟前
Linux 6.6内核内存管理深度解析(十七):vmalloc — 内核要“虚拟连续“就够:物理页逐个凑,页表来连
linux·运维·服务器
栀椩29 分钟前
Electron 内嵌页面跨域问题(CORS/PNA)解决全记录
前端·javascript·electron
asaotomo34 分钟前
截图识题、AI 讲解、笔记沉淀:Chrome 扩展体验
前端·chrome·笔记
前端架构师-老李36 分钟前
HTML与CSS基础第五课—HTML的空格、换行、横线相关知识
前端·css·html
SEO_juper37 分钟前
Chrome 扩展一键查看当前页面 SEO 信息:不用切页面,点一下全出来
前端·javascript·chrome
Highcharts.js40 分钟前
CSUN 2026|Highcharts无障碍数据与AI分享
javascript·人工智能·数据分析·highcharts·图表开发
Nymph_Zhu44 分钟前
vue3+element-plus 文件上传
前端·typescript·vue3·element-plus
R²AIN SUITE1 小时前
企业智能体平台私有化部署需要什么服务器?CPU、内存、显卡与项目管理集成的7个评估项
运维·服务器