firebase 检索仅与当前用户关联的子集合

2sbarzqh  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(139)

我已经用flutter和firebase为一个特定的帖子创建了一个集合和子集合。当用户按下一个按钮时,当前用户的信息会存储在firebasefirestore子集合中。现在我希望当帖子的所有者进入一个特定的屏幕时,他会看到一个点击按钮的用户列表。我该怎么做呢?我的UI是不必要的。
这是我曾经尝试过的:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hitch_ride/model/ads_model.dart';
import 'package:hitch_ride/model/user_model.dart';
import 'package:hitch_ride/serives/auth_provider.dart';
import 'package:provider/provider.dart';

class NotificationScreen extends StatefulWidget {
  const NotificationScreen({super.key});

  @override
  State<NotificationScreen> createState() => _NotificationScreenState();
}

class _NotificationScreenState extends State<NotificationScreen> {
  @override
  Widget build(BuildContext context) {
    final screenHeight = MediaQuery.of(context).size.height;
    final screenWidth = MediaQuery.of(context).size.width;

    final authProvider = Provider.of<AuthProvider>(context, listen: false);

    return Scaffold(
      body: Column(
        children: [
          Container(
            padding: const EdgeInsets.only(right: 15, left: 15),
            alignment: Alignment.center,
            height: screenHeight * 0.07,
            width: screenWidth,
            color: Colors.blue,
            child: Text(
              'Requests',
              style: GoogleFonts.diplomata(fontSize: 25),
            ),
          ),
          GestureDetector(
            onTap: retrieveDoc,
            child: Text(
              'Press',
              style: TextStyle(color: Colors.blue, fontSize: 20),
            ),
          )
        ],
      ),
    );
  }

  Future<void> retrieveDoc() async {
    var userId = FirebaseAuth.instance.currentUser!.uid;

    AdsModel? adsModel;
    UserModel userModel;

    FirebaseFirestore.instance
        .collection('ADS')
        .where(adsModel!.uid.toString(), isEqualTo: userId.toString())
        .get()
        .then((value) {
      value.docs.forEach((result) {
        FirebaseFirestore.instance
            .collection('ADS')
            .doc(result.id)
            .collection('Requests')
            .get()
            .then((subcol) {
          subcol.docs.forEach((element) {
            print(element.data());
          });
        });
      });
    });
  }
}

adsModel将帖子存储在集合"ADS"中。子集合是"Requests"子集合。用户将当前用户信息存储在集合名称"users"中。
我需要帮助请..

qco9c6ql

qco9c6ql1#

如果您在ADS中以用户的UID命名文档,那么您可以很容易地为具有以下条件的用户找到包含所有Requests的集合:

FirebaseFirestore.instance
    .collection('ADS')
    .doc(userId) // 👈
    .collection('Requests')

如果您想在UI中显示所有这些Requests,请将其onSnapshot侦听器 Package 在StreamBuilder中,如关于侦听实时更新的文档中的第二个示例所示。

相关问题