go_router库中的push和go导航路由栈的疑惑。
这里使用go_router库在浏览器地址栏的地址进行解惑,如果你在安卓、window等客户端软件的话,应该不会有这个疑惑,因为没有地址栏(类似浏览器的地址栏),你也看不到地址栏的变化,而且也只会有一个路由栈。
对于浏览器有2个路由栈,一个是浏览器内部的history栈,一个是flutter的路由栈。
以下的地址栏都是指浏览器顶部的地址栏处的内容。
以下的push和go方法都是go_router暴漏出的方法,完整的写法是context.push(...)
和context.go(...)
。
如果你在使用go_router库作为flutter的路由管理的话,那么你可能会对push和go的导航行为对浏览器端的地址栏产生疑惑。
使用push进行导航路由并不会使地址栏产生改变,这在导致你通过浏览器刷新页面的时候,会指向地址栏所指的页面。
例如:通过go方法导航到登录页 -> push到首页 -> push到详情页,这时如果你浏览器刷新的话,就会导致当前页面加载登录页的内容。
如果你使用go方法进行导航路由的话,这会使用地址栏产生变化,但是这会导致你在客户端(如安卓、window、ios等)软件中,会无法返回到上一页,
因为go导航方法会清空内部的全部路由后,再将当前要导航的页面插入到路由栈中,使其成为顶级首路由。
然后如果你在浏览器端使用go方法的话,是可以正常导航和返回上一页的,那是因为你当前使用的是浏览器的history路由栈,
并不是flutter的路由栈,flutter内部的路由站始终只有一条当前处于活跃的当前页面的路由。
如果你需要push导航也需要地址栏的路由进行变化的话,需要在flutter的main方法处(在runApp方法前)添加GoRouter.optionURLReflectsImperativeAPIs = true;
参数,你可以测试下是否是一致的行为。
个人见解,由于go_router的这种行为,如果需要开发适用于web端(也就是浏览器端)、客户端软件的话,需要考量下这种行为。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-12-23 Oracle :value too large for column "SCHEMA"."TABLE"."COLUMN" (actual: 519, maximum: 500)的解决方案
2018-12-23 Spring MVC的学习笔记