Mas*_*oki 9 provider flutter riverpod
如何将 FirebaseAuth 用户传递给 Riverpod 中的 StreamProvider?
使用旧的提供程序包时,我曾经从 FirebaseAuth 获取 user.uid 并将变量传递给 StreamProvider,如果可以获得 user.uid,则返回 StreamProvider。
@override
Widget build(BuildContext context) {
final FirebaseAuthService authService =
Provider.of<FirebaseAuthService>(context, listen: false);
return StreamBuilder<User>(
stream: authService.onAuthStateChanged,
builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
final User loggedInUser = snapshot.data;
if (loggedInUser != null) {
final String userId = loggedInUser.userId;
return MultiProvider(
providers: <SingleChildWidget>[
StreamProvider<User>(
initialData: User.initialData(),
create: (_) => DB.instance.getLoggedInUserStream(
loggedInUserId: userId,
),
Run Code Online (Sandbox Code Playgroud)
Vin*_*ino 14
使用family修饰符将外部值传递给提供者。
final userStreamProvider = StreamProvider.family<User, String>((ref, uid) {
return User(id: uid);
});
Run Code Online (Sandbox Code Playgroud)
使用provider时,我们需要将值传递给userStreamProvider
对于flutter_riverpod用户,
Widget build(BuildContext context, WidgetRef ref) {
final user = ref.watch(userStreamProvider(uid));
}
Run Code Online (Sandbox Code Playgroud)
对于hooks_riverpod用户,
Widget build(BuildContext) {
final user = useProvider(userStreamProvider(uid));
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*ord 11
您可以使用Riverpod 的家庭功能。
final user = StreamProvider.family<User, String>((ref, uid) {
// use uid to get User
return User;
});
Run Code Online (Sandbox Code Playgroud)
然后使用提供者:
useProvider(user(uid));
Run Code Online (Sandbox Code Playgroud)
或者,您可以直接从 FirebaseAuthService 提供商读取用户提供商的值。
final user = StreamProvider<User>((ref) {
final stream = ref.watch(FirebaseAuthService.stream);
// get uid from stream data
return User;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12259 次 |
| 最近记录: |