使用 go_router 包时热重载的未知行为

Mig*_*lca 11 flutter flutter-packages flutter-bloc

我在项目中使用go_router 。我有一个单独的文件,其中包含一个 GoRouter 实例以及所有路由(主页、登录、注册)。然后,我用肘加了认证。因此,我必须将 GoRouter 实例修改为通过 auth cubit 接收的函数,并使用它重定向到适当的路由。

一切看起来都很好,但后来我意识到了一些事情。例如,如果我在登录路径中并将寄存器推送到堆栈并修改寄存器页面并保存文件,则热重载将使我返回登录。因此,每次我想对注册页面进行一些更改时,我都会返回登录路线,然后手动返回注册页面以查看我的更改。

这是一个例子:

演示应用程序

PS:我刚刚开始使用go_router包,所以也许我做错了什么。

Erk*_*bay 9

解决办法很简单


GoRouter存储您的路由状态。如果您创建GoRouter的新实例,那么它会丢失状态并导航到初始路线。

为了解决这个问题,我创建了GoRouter实例并将其存储为单例或全局实例。

class AuthNavigation {

  static const String settings = '/';
  static const String myFriends = '/my_friends';
  
  
  final GoRouter goRouter; // This instance will be store route state
  
  AuthNavigation() : goRouter = _router;

  static GoRouter get _router => GoRouter(
        routes: <GoRoute>[...],
      );
      
}
Run Code Online (Sandbox Code Playgroud)

  • 我理解为什么每个人都说将 GoRouter 对象设置为最终变量或将其设置为单例,但是这如何与 Riverpod 提供的刷新可听对象一起使用? (2认同)