用途:处理 Flutter 应用中的路由、导航与深度链接,适用于在屏幕之间跳转或设置基于 URL 的导航。
核心概念:在 Flutter 中,屏幕和页面统称路由(Route),路由本质上是 widget。Navigator(命令式)管理 Route 对象栈,适合无复杂深度链接要求的小型应用;Router(声明式)适合需要高级导航、Web URL 同步与特定深度链接要求的应用。深度链接支持 iOS、Android 与 Web,其中 Web 无需额外设置。资料建议避免使用命名路由(MaterialApp.routes、Navigator.pushNamed),因其深度链接行为僵化且不支持浏览器前进按钮,改用 go_router 等路由包。
主要能力:命令式导航使用 Navigator.push 跳转、Navigator.pop 返回,另有 pushReplacement 替换当前路由、pushAndRemoveUntil 按条件清空栈。数据传递可直接写入目标 widget 构造函数,或通过 RouteSettings(arguments) 传递并用 ModalRoute.of(context)!.settings.arguments 提取;返回数据用 Navigator.pop(context, resultData),接收方用 await 获取。声明式导航需将 MaterialApp 换成 MaterialApp.router,定义解析路径的路由配置,并使用包特定 API(如 context.go('/path'))。嵌套导航通过在宿主 widget 内实例化 Navigator、分配 GlobalKey<NavigatorState>、实现 onGenerateRoute 解析子路由,并用 PopScope 拦截返回键。
使用方式:基本屏幕跳转需创建目标 widget、定义数据参数、在源 widget 调用 Navigator.push 并包裹 MaterialPageRoute 或 CupertinoPageRoute、在目标 widget 调用 Navigator.pop。需要深度链接时添加 go_router 包,改用 MaterialApp.router,定义顶级路由配置,并用 context.go() 或 context.push() 替代 Navigator.push()。嵌套流程需定义路由字符串常量、创建 GlobalKey、在 build 中返回带 key 的 Navigator、实现 onGenerateRoute、用 PopScope 包裹宿主 Scaffold,并通过 navigatorKey.currentState!.pushNamed() 推进步骤。
限制与说明:页面型(page-backed)声明式路由可深度链接,命令式推入的对话框、底部弹窗等无页面路由在移除页面型路由时会一并被移除。其他如具体收费、平台差异细节暂未提供。