【发布时间】:2021-09-25 14:29:03
【问题描述】:
void main() async {
...
final AuthenticationProvider authenticationProvider = AuthenticationProvider();
await authenticationProvider.initialize();
runApp(
MultiProvider(
providers: [
Provider<AuthenticationProvider>(create: (_) => authenticationProvider),
StreamProvider<UserModel>(
create: (_) => authenticationProvider.currentUser,
initialData: UserModel(
id: '',
email: '',
displayName: '',
photo: null,
premium: false,
travels: [],
),
)
],
child: MiRoulotte(),
),
);
}
我创建了一个提供程序,它使用当前用户数据生成一个流,当用户退出或登录时,这些数据会发生变化,但数据不会改变。当我退出时,流应该为空,然后当我登录时,流应该是用户数据。
class AuthenticationProvider {
Stream<UserModel>? _currentUser;
Stream<UserModel>? get currentUser => this._currentUser;
initialize() async {
...
this._currentUser = FirebaseFirestore.instance
.collection('users')
.doc(FirebaseAuth.instance.currentUser?.uid)
.snapshots()
.map((user) => UserModel.fromJson(user.data() as Map<String, dynamic>));
...
}
Future signIn({required String email, required String password}) async {
...
this._currentUser = FirebaseFirestore.instance
.collection('users')
.doc(userCredential.user?.uid)
.snapshots()
.map((user) => UserModel.fromJson(user.data() as Map<String, dynamic>));
...
}
Future signOut() async {
...
this._currentUser = null;
...
}
}
【问题讨论】:
标签: firebase flutter dart stream provider