我FirebaseAuth
用于身份验证,并定义了以下提供程序:
final _authStateChangesProvider = StreamProvider<User>(
(ref) => ref.watch(authServiceProvider).authStateChanges);
数据库依赖于用户,所以我只能在用户登录后创建它。问题是数据库创建是异步的,所以它的提供者必须是 FutureProvider。
final databaseFutureProvider = FutureProvider<Database>((ref) {
final authStateChange = ref.watch(_authStateChangesProvider);
final user = authStateChange.data?.value;
if (user != null) {
return FirestoreDatabase.create(user: user);
}
throw UnsupportedError("The database cannot be accessed before the sign-in");
});
这将使整个应用程序的代码更加繁琐。我想让应用程序的代码更databaseFutureProvider
简洁。Provider
怎么可能做到?
编辑
最好让数据库创建成为身份验证过程的一部分,这样authStateChangesProvider
只有在数据库创建后才会触发。类似于以下内容:
final authStateChangesProvider = FutureProvider<User>((ref) {
final authStateChanged = ref.watch(_authStateChangesProvider);
final user = authStateChanged.data?.value;
if (user != null) {
// await the creation of the database provider
}
return user;
});
这样,只有authStateChangesProvider
将成为 FutureProvider。但我对 Riverpod 还很陌生,我不确定是否以及如何在另一个提供程序中创建一个提供程序。