首页 > 解决方案 > 有没有办法在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,
                ),

标签: flutterproviderriverpod

解决方案


您可以使用 Riverpod 的家庭功能。

final user = StreamProvider.family<User, String>((ref, uid) {
  // use uid to get User
  return User;
});

然后使用提供者:

useProvider(user(uid));

或者,您可以直接从 FirebaseAuthService 提供程序读取用户提供程序的值。

final user = StreamProvider<User>((ref) {
  final stream = ref.watch(FirebaseAuthService.stream);
  // get uid from stream data
  return User;
});

推荐阅读