通过 go_router 导航,它并不是每次都重建屏幕

Roh*_*ala 5 dart flutter flutter-web flutter-go-router

我正在我的网络应用程序中通过 go router 进行导航。但我在更改屏幕时遇到的问题是,当我第一次打开特定屏幕时,它会使用 InitState() 构建整个屏幕,但在转到另一个屏幕后,我再次单击该屏幕,然后它不会重建(意味着不运行 initState())。我也附上了我的代码片段。

final routerProvider = Provider<GoRouter>((ref) {
  final loggedInState = ref.read(isLoggedInProvider);
  return GoRouter(
    refreshListenable: loggedInState,
    routes: [
      HomeRoute(), // /
      PeopleRoute(), //   /people
      LoginRoute(),
    ],
    redirect: (state) {
      // if the user is not logged in, they need to login
      final loggedIn = loggedInState.value;
      final loggingIn = state.subloc == '/login';
      if (!loggedIn) return loggingIn ? null : '/login';

      // if the user is logged in but still on the login page, send them to
      // the home page
      if (loggingIn) return '/';

      // no need to redirect at all
      return null;
    },
  );
});

class HomeRoute extends GoRoute {
  HomeRoute()
      : super(
          path: '/',
          pageBuilder: (context, state) => const NoTransitionPage(
            child: HomeScreen(),
          ),
        );
}

class LoginRoute extends GoRoute {
  LoginRoute()
      : super(
          path: '/login',
          pageBuilder: (context, state) => const NoTransitionPage(
            child: LoginScreen(),
          ),
        );
}

class PeopleRoute extends GoRoute {
  PeopleRoute()
      : super(
          path: '/people',
          pageBuilder: (context, state) => const NoTransitionPage(
            child: PeopleLandingScreen(),
          ),
        );
}
Run Code Online (Sandbox Code Playgroud)

导航代码。

context.go('/people');
Run Code Online (Sandbox Code Playgroud)

我们将不胜感激您的帮助。