首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flutter 零基础入门(四十二):Flutter 路由与导航进阶 —— 命名路由与参数传递实战

Flutter 零基础入门(四十二):Flutter 路由与导航进阶 —— 命名路由与参数传递实战

作者头像
LarryLan
发布2026-03-05 17:19:50
发布2026-03-05 17:19:50
2290
举报

Flutter 路由与导航进阶 —— 命名路由与参数传递实战

到目前为止,你已经掌握了:

  • 多页面 App 框架(TabBar + BottomNavigationBar)
  • 动态列表刷新与分页
  • 异步数据与状态刷新
  • App 美化(主题、统一颜色、字体)

但是在复杂 App 中,页面跳转与参数传递是必备技能。

Flutter 提供了两种跳转方式:

  1. 匿名路由(直接 Widget)
  2. 命名路由(通过路由表)

本篇我们重点学习 命名路由 + 参数传递,更适合大型项目。


一、命名路由基础

1️⃣ 配置 routes

在 MaterialApp 中:

代码语言:javascript
复制
MaterialApp(
  title: '路由示例',
  initialRoute: '/',
  routes: {
    '/': (context) => HomePage(),
    '/detail': (context) => DetailPage(),
  },
);

📌 说明:

  • initialRoute → 初始页面
  • routes → 路由表
  • 键 → 路由名称,值 → 对应 Widget 构建函数

2️⃣ 页面跳转

代码语言:javascript
复制
ElevatedButton(
  onPressed: () {
    Navigator.pushNamed(context, '/detail');
  },
  child: Text('跳转到详情页'),
)

📌 跳转方式简洁,方便统一管理页面


二、命名路由传递参数

1️⃣ pushNamed 带参数

代码语言:javascript
复制
Navigator.pushNamed(
  context,
  '/detail',
  arguments: {'id': 1001, 'title': '详情页标题'},
);

2️⃣ 接收参数

在 DetailPage 中:

代码语言:javascript
复制
class DetailPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final args = ModalRoute.of(context)!.settings.arguments as Map;
    final id = args['id'];
    final title = args['title'];

    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: Center(
        child: Text('接收到参数 id = $id'),
      ),
    );
  }
}

📌 ModalRoute.of(context)!.settings.arguments 获取传递参数


三、返回值获取

1️⃣ 返回上一页并传值

代码语言:javascript
复制
ElevatedButton(
  onPressed: () {
    Navigator.pop(context, '我是返回值');
  },
  child: Text('返回上一页'),
)

2️⃣ 接收返回值

代码语言:javascript
复制
void _openDetail() async {
  final result = await Navigator.pushNamed(
    context,
    '/detail',
    arguments: {'id': 1001, 'title': '详情页'},
  );
  print('返回值: $result');
}

📌 await → 等待页面返回结果 → 接收返回值


四、完整示例:列表跳转 + 参数传递 + 返回值

代码语言:javascript
复制
class HomePage extends StatelessWidget {
  final List<Map> items = List.generate(
    10,
    (index) => {'id': index, 'title': '条目 $index'},
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('首页列表')),
      body: ListView.builder(
        itemCount: items.length,
        itemBuilder: (context, index) {
          final item = items[index];
          return ListTile(
            title: Text(item['title']),
            onTap: () async {
              final result = await Navigator.pushNamed(
                context,
                '/detail',
                arguments: item,
              );
              if (result != null) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('返回值: $result')),
                );
              }
            },
          );
        },
      ),
    );
  }
}

class DetailPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final args = ModalRoute.of(context)!.settings.arguments as Map;
    final id = args['id'];
    final title = args['title'];

    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pop(context, '已阅读 id=$id');
          },
          child: Text('返回并传值'),
        ),
      ),
    );
  }
}

📌 功能总结:

  • 列表点击 → 跳转详情页
  • pushNamed 传递参数
  • pop 返回值 → HomePage 获取并显示 SnackBar

五、常见坑

❌ 没配置 routes → pushNamed 找不到路由 ❌ arguments 类型转换错误 → as Map / List / 自定义类型 ❌ 返回值未 await → 无法获取结果 ❌ 命名重复 → 路由冲突

📌 建议:

  • 使用统一命名路由表
  • 参数类型明确
  • 异步 await 获取返回值
  • 大型项目可封装路由管理类

六、本篇你真正掌握了什么?

你已经学会:

  • 命名路由配置与跳转
  • 参数传递到下一页
  • 异步接收返回值
  • 列表 + 详情页完整跳转逻辑

📌 到这里为止:

你的 App 页面跳转能力已经接近生产级别


七、一句话总结

命名路由统一管理页面 arguments 传参 pop 返回值 + await 接收 多页面跳转轻松实现


🔜 下一篇预告

《Flutter 零基础入门(四十三):Flutter 动画基础 —— 动态交互与过渡效果》

下一篇我们将学习:

  • Flutter 基础动画组件
  • 简单过渡效果
  • 点击 / 页面切换动画

🚀 让你的 App 更加生动有趣

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Larry的Hub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flutter 路由与导航进阶 —— 命名路由与参数传递实战
    • 一、命名路由基础
      • 1️⃣ 配置 routes
      • 2️⃣ 页面跳转
    • 二、命名路由传递参数
      • 1️⃣ pushNamed 带参数
      • 2️⃣ 接收参数
    • 三、返回值获取
      • 1️⃣ 返回上一页并传值
      • 2️⃣ 接收返回值
    • 四、完整示例:列表跳转 + 参数传递 + 返回值
    • 五、常见坑
    • 六、本篇你真正掌握了什么?
    • 七、一句话总结
    • 🔜 下一篇预告
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档