SuperAPI AI 工具集

flutter-navigation

编程与开发

查看项目

更新于 10-15 13:34

技能介绍

Flutter Navigation 是一个 Flutter 导航与路由实现技能(Skill),定位为“Flutter 导航实现代理”。其目标是让路由状态、浏览器/深链接行为与页面转场适配目标应用,同时不破坏既有状态、认证流程或平台预期。

用途

该技能用于实现、修复、重构、审查、迁移或验证 Flutter 的导航与路由。适用于处理 Navigator、MaterialPageRoute、Router API、go_router、深链接、Web 浏览器历史、嵌套标签页或壳层(Shell)、认证重定向、路由错误处理以及导航测试等任务。

核心原则

技能开篇提出“Principle 0:导航即用户状态”。在检查当前 MaterialApp、Router、Navigator、状态管理、认证、支持的平台与测试之前,不要替换应用的路由模型或添加深链接声明。修改导航后,需验证 Dart 代码通过分析器且受影响的路径行为正确。

工作流程

技能给出的工作流包括:先识别请求类型(简单页面转场、数据传递、返回结果、路由迁移、深链接设置、Web 浏览器历史、嵌套标签或壳层、认证重定向、路由错误处理或导航测试);在代码可用时优先检查本地 Flutter 项目,包括 pubspec.yaml、lib/、应用根、现有路由定义、导航调用、认证/状态提供者、平台文件夹、Web 托管配置与相关测试;选择满足产品需求的最小路由模型;谨慎地建模路由数据;以应用既有风格实现;在可行时为变更的路由行为添加或更新测试;并尽可能使用最强的本地检查进行验证。

路由模型选择决策指南

技能提供了一张“需求 → 默认方案”的决策表:

  • 推入一个详情页并返回:使用 Navigator.push<T> 配合 MaterialPageRoute<T>。
  • 需要分享/书签/浏览器路由:使用基于 URL 位置的 go_router。
  • 必需资源标识:路径参数,例如 /users/:userId。
  • 可选筛选、标签或搜索状态:通过 Uri(...).toString() 使用查询参数。
  • 认证门或入职门:go_router 的 redirect 或 onEnter,与认证状态绑定。
  • 持久导航外壳:ShellRoute;当分支需要独立栈时使用 StatefulShellRoute。
  • Web 路径 URL:usePathUrlStrategy() 加上 SPA 服务器重写到 index.html。
  • 原生已验证 Web 链接:Android App Links 或 iOS Universal Links 加托管关联文件。
  • 应用专属自定义 URI:自定义 scheme,需明确安全与降级权衡。

资源路由

技能将参考资料视为“按需路由的细节”,将示例资产视为“起始示例”而非生产模块,不建议默认阅读所有参考资料。任务与资源的对应关系包括:

  • 选择 Navigator 与 go_router 或审查路由权衡:navigation-patterns.md(方案对比、数据传递、浏览器/深链接限制)。
  • 实现或修复 go_router 路由表、重定向、壳层、错误、命名路由或路由数据:go_router-guide.md。
  • 配置 Android App Links、iOS Universal Links、自定义 scheme 或深链接测试:deep-linking.md。
  • 修复 Flutter Web URL、浏览器历史、SPA 重写或非根路径托管:web-navigation.md。
  • 需要最小 Navigator 起步示例:navigator_basic.dart。
  • 需要最小 go_router 起步示例:go_router_basic.dart。
  • 需要 Navigator 本地数据传递:passing_data.dart。
  • 需要 Navigator 返回数据:returning_data.dart。

复制示例前需适配类名、应用外壳、依赖、路由与测试。

实现规则

技能列出多项实现规则,包括:不要随意混用主要导航模型(应用使用 go_router 时,主路由优先用 context.go、context.push、context.goNamed、context.pushNamed,命令式 Navigator 仅用于本地覆盖层或有意不可深链的流程);查询字符串位置应使用 Uri(path: ..., queryParameters: ...).toString() 或 go_router 命名路由 API 构建,不要向 context.push 或 context.go 传入 queryParameters 参数;从 state.uri.queryParameters 读取查询参数,从 state.pathParameters 读取路径参数;不要把复杂状态只存于 URL;不要用 extra 传必须经受刷新、浏览器恢复、分享或原生深链接的数据;认证重定向要避免死循环并保留目标地址;iOS Universal Links 应在 Xcode 或 ios/Runner/Runner.entitlements 中配置 Associated Domains,而不是 Info.plist 路由表;Web 路径策略在非根路径托管时需更新 web/index.html 的 base href 与服务器重写;不要盲复制资产,需适配导入、路由名、键、应用外壳、包版本、空安全、lint 与测试。

验证

修改 Flutter 项目后,技能建议:对编辑的 Dart 文件运行 dart format;对项目或最近包运行 flutter analyze;当路由解析、重定向、壳层/标签状态、返回结果或导航 UI 变更时,运行聚焦的 flutter test 测试套件;针对 Web URL 变更,在可行时于 Chrome 中运行并验证直接加载、刷新、后退、前进与未找到行为;针对深链接,在平台与设备可用时用 adb、xcrun simctl 或 Flutter DevTools 深链接验证工具测试目标 URL。若验证无法运行,需报告命令、阻塞点以及仍未验证的路由行为,不能仅凭静态阅读就声称导航、浏览器历史或深链接行为已验证。

回退

如果目标项目不可用,可仅基于用户提供的文件给出路由方案或补丁草稿,并说明缺失的验证。如果应用已有不一致的路由模型,应先做最小可逆修复,再提出分阶段迁移,而非整体替换路由。

限制

该技能的官方文本中未提供收费、价格、平台版本要求、性能指标或具体效果数据,这些信息暂未提供。技能的适用性依赖目标 Flutter 项目的实际代码与配置,验证命令能否执行取决于本地环境与设备可用性。