![](/img/trans.png)
[英]Flutter Riverpod : Problems fetching data from Firebase using Riverpod
[英]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.