Go Router (Flutter) - 推送完全相同的路由并刷新该路由

Pet*_*ing 16 dart flutter flutter-go-router

使用GoRouter,有没有办法用不同的参数推送完全相同的路由并使页面重新加载?我正在考虑类似 Navigator.pushReplacement 的东西

我正在使用 context.go('/my_page/?param={someID}') 推送到 MyPage (一个有状态的小部件)

对该路由的初始推送工作正常,我加载了特定 ID 的页面

我尝试使用 context.go('/my_page/?param={ differentID}') 再次推送相同的路线(替换路线并使用不同的 ID 重新加载)。我的断点击中了 GoRoute pageBuilder 中的 return 语句,并且我还在 MyPage.build 中击中了断点。在构建中设置断点时,我看到传递到此小部件的新 ID。

但是页面不会在视觉上重建(或者在 initState 中中断 - 旁注,初始化状态用于使用传入的 ID 加载几肘 - 页面作为有状态小部件可能是问题吗?)

材料页面上的维护状态为 false。此外,推动不同的路线效果也很好。

这是一个有状态小部件问题(意味着重新定位我所有的 cubit init 调用)吗?还是有不同的方式来推动同一条路线?

编辑 _____________

这个问题特定于重建相同的路线,但我正在解决的更大问题是一遍又一遍地无限钻取同一页面,同时维护导航堆栈。

我使用状态管理器来保存路线列表,并通过使用 context.go() 来完全替换当前路线来触发导航。

有没有办法在维护整个导航堆栈的同时使用 context.push() 动态嵌套路由?

Pab*_*sua 16

After some research, I have noticed that you can redirect to the same page by using pageKey: UniqueKey() in the definition of the GoRoute().

Example code from my project:

GoRoute(
    path: RoutePaths.serviceDetail.value,
    name: RouteNames.serviceDetail.value,
    pageBuilder: (context, state) {
        return CustomTransitionPage<void>(
            key: UniqueKey(),
            child: const ServiceDetailPage(),
            transitionsBuilder: (context, animation, secondaryAnimation, child) =>
            PageTransitions.subpageTransition(animation, child),
        );
    },
),
Run Code Online (Sandbox Code Playgroud)