Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase multiprovider-将值从第一个提供程序传递到第二个提供程序_Firebase_Flutter_Firebase Authentication_Provider - Fatal编程技术网

Firebase multiprovider-将值从第一个提供程序传递到第二个提供程序

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

我正在尝试设置一个多Provider,但我正在努力找出如何将值从一个传递到另一个。我有一个包含用户ID的数据列表,我的应用程序之前会为用户信息创建一个StreamProvider,然后为数据列表创建另一个StreamProvider。这很好,因为我可以将user.uid传递给数据,然后应用过滤器。像这样的

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