Flutter火力基地:从子集合中获取当前用户数据[重复]

q8l4jmvw  于 2023-03-24  发布在  Flutter
关注(0)|答案(1)|浏览(95)

此问题已存在

Flutter Firebase: Current user gets data from sub-collection
2天前关闭。
假设一个用户(A)创建一个名为ADS的集合。User(B)发送对按钮的点击并在user中创建子集合(A)的集合叫做Requests。它工作正常。现在,用户如何(B)获取用户数据(A)在集合ADS中。这就像你向一个用户发送好友请求,你想知道你向哪个用户发出了请求。我已经尝试了一些代码,但没有工作。
//code 1 -返回一个红色屏幕的错误,如红色图片所示

Stream<QuerySnapshot<Map<String, dynamic>>> myRide =
      FirebaseFirestore.instance.collectionGroup('Requests').snapshots();

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
          stream: myRide,
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            return Center(
              child: Text(snapshot.data['Name']),
            );
          }),
    );
  }

//代码2也返回代码1中的结果

Stream<QuerySnapshot<Map<String, dynamic>>> myRide =
      FirebaseFirestore.instance.collectionGroup('Requests').snapshots();

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
          stream: myRide,
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            return Center(
              child: Text(snapshot.data['Name']),
            );
          }),
    );
  }

但是,代码3返回一个空白屏幕

Stream<QuerySnapshot<Map<String, dynamic>>> myRide = FirebaseFirestore
      .instance
      .collection('ADS')
      .doc(FirebaseAuth.instance.currentUser!.uid)
      .collection('Requests')
      .snapshots();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
          stream: myRide,
          builder:
              (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
            final data = snapshot.data!;
            return ListView.builder(
                itemCount: snapshot.data!.docs.length,
                itemBuilder: (context, index) {
                  return Card(
                    child: ListTile(
                      onTap: () {},
                      title: Text(data.docs[index].get('Name')),
                    ),
                  );
                });
          }),
    );
  }

有人能帮忙吗?

vuv7lop3

vuv7lop31#

一种方法是将用户uid存储在ADS集合的每个文档中,然后在requests文档中包括发出请求的用户B的uid和接收请求的用户A的uid
当您从requests集合中检索文档时,您可以使用用户uid通过查询来过滤文档,以获得UserA创建的ADS列表。
如果你想澄清,让我知道。
我不熟悉Dart,但检查文档,试试这个:

// uid is the variable which holds UserA's uid
FirebaseFirestore
  .instance
  .collection("ADS").where("Uid", isEqualTo: uid).get().then(
      (querySnapshot) {
        for (var docSnapshot in querySnapshot.docs) {
          print('${docSnapshot.id} => ${docSnapshot.data()}');
        }
      },
      onError: (e) => print("Error completing: $e"),
    );

相关问题