我将 navigator 2.0 与 GoRouter 一起使用。我发现在小部件树中,当我转到子路由时,该路由的所有父路由也会被创建,并且它们的构建方法也会被触发。这是为什么?。当我实际返回时,不应该创建这些父页面吗?同样,当我推送新路线而不弹出旧路线时,以前的路线仍然存在于小部件树中。当旧页面甚至不可见时,将旧页面的状态保留在内存中,这不是浪费内存吗?
在 Flutter 中,导航器的工作方式类似于堆栈。
后进先出
这意味着,最后进入的页面在弹出时会先出来。这样,当您将新页面推入堆栈时,新页面将位于旧页面的顶部并一直存在,直到您弹出。因此,当您弹出时,新页面将首先弹出并登陆到旧页面,因为它已经位于新页面下方。
这样,如果您不需要旧页面,则可以弹出旧页面 之后首先推送新页面。那么旧的页面就不再存在了 在新页面下,因为旧页面先弹出。
并且,对于 GoRouter 的说法, 它的工作原理是这样的,如果您将一个页面定义为另一个页面的子页面,那么当您调用该页面时,您必须通过其父页面。因为孩子总是要依赖父母的。
如果您孩子的页面可以在没有父母的情况下工作并且您必须调用它 分开,那么你应该在父级之外声明它