dart 如何使用go_router和riverpod根据auth状态创建可用路由列表?

vfhzx4xs  于 2023-05-26  发布在  Go
关注(0)|答案(1)|浏览(112)

我如何使用go_router在flutter应用程序中根据auth状态使路由可用。
我在我的flutter应用程序中有logged_in,logged_out和need_verification auth状态,我有几个路由,我希望用户可以根据他们的auth状态访问它们。我正在使用riverpod来管理状态和go_router进行路由。
我实现了一个逻辑,根据当前的身份验证状态重定向到HomeScreen,LogInScreen或VerifyEmailScreen,它工作正常。问题是我还有一个SignUpScreen和ForgotPasswordScreen,它们应该在logged_out状态下可用,但是当我使用context.go()导航到它们中的任何一个时,重定向逻辑启动并阻止我进入新屏幕,因为状态未更改。
如何使所有注销路由在logged_out状态下可用?

h5qlskok

h5qlskok1#

您可以在重定向代码中添加一些if,当您在SignUpScreenForgotPasswordScreen上时,这些代码将不会重定向。就像这样:

redirect(...) {
  String currentPath;
  if (state == HomeScreen.state && 
     (currentPath != SignUpScreen.path ||
      currentPath != ForgotPasswordScreen.path)) {
    return HomeScreen.path;
  }
  ... and others
}

否则:

redirect(...) {
  String currentPath;
  if (currentPath == SignUpScreen.path ||
      currentPath == ForgotPasswordScreen.path) {
    return null; // do not redirect
  }
  ... and others
}

相关问题