Firebase multiprovider-将值从第一个提供程序传递到第二个提供程序
我正在尝试设置一个多Provider,但我正在努力找出如何将值从一个传递到另一个。我有一个包含用户ID的数据列表,我的应用程序之前会为用户信息创建一个StreamProvider,然后为数据列表创建另一个StreamProvider。这很好,因为我可以将user.uid传递给数据,然后应用过滤器。像这样的Firebase multiprovider-将值从第一个提供程序传递到第二个提供程序,firebase,flutter,firebase-authentication,provider,Firebase,Flutter,Firebase Authentication,Provider,我正在尝试设置一个多Provider,但我正在努力找出如何将值从一个传递到另一个。我有一个包含用户ID的数据列表,我的应用程序之前会为用户信息创建一个StreamProvider,然后为数据列表创建另一个StreamProvider。这很好,因为我可以将user.uid传递给数据,然后应用过滤器。像这样的 final user = Provider.of<User>(context); return StreamProvider<List<UserLevelTw
final user = Provider.of<User>(context);
return StreamProvider<List<UserLevelTwo>>.value(
value: DatabaseService(uid: user.uid).levelTwoSelector,
final user=Provider.of(上下文);
返回StreamProvider.value(
值:DatabaseService(uid:user.uid).levelTwoSelector,
问题是,我无法在整个应用程序中访问列表,因此在研究之后,它看起来应该放在其他提供商的MaterialApp之前。我已经完成了此设置,但只需要手动传递UID
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<User>.value(value: AuthService().user),
StreamProvider<List<UserLevelTwo>>.value(value: DatabaseService(uid: 'rgDe5I0QgFfa123mIgxo8VQew9T2').levelTwoSelector),
],
child: MaterialApp(
小部件构建(构建上下文){
回程多供应商(
供应商:[
StreamProvider.value(值:AuthService().user),
StreamProvider.value(值:DatabaseService(uid:'rgDe5I0QgFfa123mIgxo8VQew9T2')。levelTwoSelector),
],
孩子:MaterialApp(
我需要的帮助是如何将uid从第一个提供程序传递到第二个提供程序
第二个streamprovider调用my DB服务,如下所示:
class DatabaseService {
final String uid;
DatabaseService({this.uid});
Query getLevelTwoSelectorData(){
return Firestore.instance.collection('ULTs')
.where("UserID", isEqualTo: uid)
.where("D", isEqualTo: false)
.orderBy("R", descending: true)
.orderBy("Desc");
}
Stream<List<UserLevelTwo>> get levelTwoSelector {
return getLevelTwoSelectorData().snapshots().map(_userLevelTwoListFromSnapshot);
}
}
类数据库服务{
最后一个字符串uid;
数据库服务({this.uid});
查询getLevelTwoSelectorData(){
返回Firestore.instance.collection('ULTs')
.where(“UserID”,isEqualTo:uid)
.其中(“D”,isEqualTo:false)
.orderBy(“R”,降序:true)
.orderBy(“Desc”);
}
流获取levelTwoSelector{
返回getLevelTwoSelectorData().snapshots().map(\u userLevelTwoListFromSnapshot);
}
}
如果有人能帮助我,我将不胜感激
谢谢谢谢你的帮助。我用这里描述的方法完成了这个任务 或多或少,用户信息似乎只有一个StreamProvider,一旦它不为null,就可以使用原始提供程序的uid为列表创建一个多提供程序
再次感谢!你在使用Firebase吗?另外,你能给我们看一下你的UserLevelTwo模型代码吗?嗨,是的,我在使用Firebase…我已经编辑了我的原稿,将UserLevelTwo信息放入…谢谢!你不需要传递数据。只需这样做就可以在任何.dart页面中获得id:final id=FirebaseAuth.instance.currentUser.uid;这很有意义,tha谢谢!但不幸的是,我似乎在uid部分遇到了一个错误…”“没有为类型“Future Function()”定义getter“uid”另外,如果当前没有用户登录,在这种情况下会发生什么?感谢您的帮助!我不知道您如何将类型更改为将来的类型。您可以检查FirebaseAuth.instance.currentUser是否也为null。这将告诉您该用户是否登录。如果您调用Fireb…currentU,将出现错误ser.uid。(uid是在null上调用的)将是错误。只需使用and if语句检查Fireb…currentUser是否为null,如果不是,则获取id