如何实现依赖于另一个提供程序的提供程序?

时间:2020-03-25 00:31:57

标签: flutter dart

我正在使用带有flutter和dart的提供程序包,我有一个身份验证提供程序和一个提供用户模型的流提供程序。提供用户模型的流提供程序取决于身份验证提供程序。如何获取我的用户ID到流提供商?

这是我的多提供商

MultiProvider(
      providers: [
        Provider<AuthenticationProvider>(builder: (context) => AuthenticationProvider(),),
        StreamProvider<UserModel>.value(value: userStream(//here we call the async method in the Authentication provider to get the user id),
        ),
      ]

这是身份验证提供程序内部的方法返回包含用户ID的身份验证模型

  Future<UserAuthenticationCertificate> userAuthenticationCertificate() async
  {
    FirebaseUser authenticatedUser = await _authentication.currentUser();
    if(authenticatedUser != null)
      return UserAuthenticationCertificate.fromFirebaseAuthentication(authenticatedUser);
    return null;
  }

这是身份验证证书

import 'package:firebase_auth/firebase_auth.dart';

class UserAuthenticationCertificate
{
  String _userID;

  String get userID{
    return _userID;
  }

  UserAuthenticationCertificate(this._userID);

  UserAuthenticationCertificate._internal(this._userID);

  factory UserAuthenticationCertificate.fromFirebase(FirebaseUser firebaseUser)
  {
    return UserAuthenticationCertificate._internal(
      firebaseUser.uid
    );
  }
}

修改

这是我目前拥有的

Provider<AuthenticationProvider>(create: (_) => AuthenticationProvider(),),
Provider<UserProvider>(
  create: (_) => UserProvider(),
),
StreamProvider(create: (context) {
  return Provider.of<UserProvider>(context).userStream(Provider.of<AuthenticationProvider>(context).userAuthenticationCertificate());
}),

那么现在我在流提供程序中提供用户提供程序?我想提供userModel作为流,我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用传递给context供应商的create参数来读取其他供应商:

Provider(create: (_) => Auth()),
StreamProvider(create: (context) {
  return Provider.of<Auth>(context).something;
});