簡體   English   中英

在Flutter中使用Riverpod實現session用戶數據管理

[英]Using Riverpod in Flutter to implement session user data management

我在 Flutter 中使用 Riverpod 來處理 Firebase 身份驗證,它似乎工作正常。 此外,我想使用 Riverpod 來處理核心用戶數據(即“會話”數據)。 問題是,如果一個用戶注銷並且另一個用戶登錄,則不會為該新用戶獲取/刷新用戶 session 數據。

身份驗證(以及半工作 session 數據處理)按以下方式處理:

return authState.when(
    data: (authData) {
      if (authData != null) {

        // Get user data here:
        final userState = ref.watch(appUserProvider);

        return userState.when(
            data: (appUser) {
              if (appUser.isFirstRun) {
                return const OnboardingPage();
              } else {
                return const AppRoot();
              }
            },
            loading: () => const LoadingScreen(),
            error: (e, stackTrace) => ErrorDisplay(e, stackTrace));
      }
      return const LoginPage();
    },
    loading: () => const LoadingScreen(),
    error: (e, stackTrace) => ErrorScreen(e, stackTrace));

如上所示,我希望在提供 auth state 后提供 appUserProvider,但我無法讓這種嵌套方法正常工作。 當一個用戶注銷而另一個用戶登錄時,如果不重新啟動應用程序,數據不會自動刷新。 嘗試顯式刷新 appUserProvider(使用 ref.read())也不起作用。

appUserProvider 看起來像這樣:

   final appUserProvider = StateNotifierProvider<AppUserNotifier, AsyncValue<AppUser>>((ref) {
      return AppUserNotifier(ref);
    });
        
    class AppUserNotifier extends StateNotifier<AsyncValue<AppUser>> {
      final StateNotifierProviderRef ref;
        
      late final UserService service;
        
      AppUserNotifier(this.ref) : super(AsyncValue.data(AppUser())) {
        service = ref.watch(userService);
        get();
    } 
// get method omitted

我怎樣才能讓它正常工作? 這甚至是一個好方法嗎?

感謝您在這里的任何輸入!

您可以將它用於您的 StateNotifierProvider:

final appUserProvider = StateNotifierProvider.autoDispose<AppUserNotifier, AsyncValue<AppUser>>((ref) {
      return AppUserNotifier(ref);
    });

然后,一旦不再使用該提供程序,它將立即被處理掉。 當新用戶登錄時,將使用正確的數據再次初始化提供程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM