SuperAPI AI 工具集

navigation-and-routing

通用与其它

查看项目

更新于 10-15 23:57

技能介绍

用途:为 Flutter 应用统一管理导航与路由,基于 go_router。全应用只存在一个 GoRouter,定义在 lib/routing/,通过 app.dart 中的 MaterialApp.router 接入;每个页面都可由 URL 到达,导航被视为数据结构(路由表加纯 redirect),而非大量命令式 Navigator.push。

主要能力:单一路由器的构建与接入;路径参数承载页面标识,state.extra 仅作可选的非身份优化;typed route 常量辅助类;context.go 替换栈、context.push 压栈、context.pop 返回的选择规则;纯 redirect 守卫配合 Riverpod 的 refreshListenable 实现响应式鉴权与引导门控,并避免重定向循环;StatefulShellRoute.indexedStack 实现底部导航/侧栏壳并保留分支栈;CustomTransitionPage 支持减少动效;PopScope 拦截返回与未保存更改;errorBuilder 与 404 路由;await 前后 BuildContext 安全。PR 前运行 scripts/check_routing.sh。

使用方式:在 routing/app_router.dart 通过 provider 构建 GoRouter,设置 initialLocation、refreshListenable、redirect、errorBuilder 与来自各功能的路由列表;app.dart 用 ref.watch 取得路由器交给 MaterialApp.router。页面 id 从 state.pathParameters 读取,保证冷启动深链接可重建;每个调用点明确使用 go 还是 push。

适用场景:含底部导航/侧栏壳、深链接、鉴权与引导跳转、未保存更改拦截、自定义转场的 Flutter 应用。

限制与反模式:不得存在第二个 GoRouter 或在页面内嵌套导航器;不得把身份 id 放入 state.extra 后在 build 中 extra!;redirect 内不得做 I/O、调用 context.go 或产生副作用;不得混用 Navigator.pushNamed 与 go_router;使用 PopScope 而非已移除的 WillPopScope;功能模块不得自建路由器。go_router_builder 代码生成为可选升级,非默认。