【问题标题】:Flutter Firestore Collection GroupFlutter Firestore 集合组
【发布时间】:2021-11-25 01:53:56
【问题描述】:

我有一个collection 公司,每个公司都有一个集合employee。我想创建一个查询以根据其文档 ID 检索特定员工。你知道怎么做吗? 我在考虑使用 collectionGroup("employee"),但找不到访问文档 ID 的方法。

Stream<UserModel> streamFirestoreUser() {
 return _db
        .collectionGroup('employee')
        .where("email", isEqualTo: emailController.text)
        .limit(1)
        .snapshots()
        .map((event) => UserModel.fromJson(event.docs.first.data()));
  }

【问题讨论】:

    标签: flutter google-cloud-firestore flutter-web


    【解决方案1】:

    试试这样的:

    FirebaseFirestore _firestore = FirebaseFirestore.instance;
    final _controller = StreamController<QuerySnapshot>.broadcast();
    
    _listener() {
        final stream = _firestore 
            .collection("company")
            .doc(_idCompany)
            .collection("employee")
            .snapshots(); //retrieve all clients
    
    stream.listen((data) {
        _controller.add(data);
        });
    }
    
    @override
    void initState() {
       super.initState();
       _listener();
    }
    @override
    void dispose() {
        
      _controller.close();
    }
    
    ...
    
    
    body: StreamBuilder<QuerySnapshot>(
            stream: _controller.stream,
            builder: (context, snapshot) {
                switch (snapshot.connectionState) {
                        case ConnectionState.none:
                        case ConnectionState.waiting:
                            return //Message: loading;
                        case ConnectionState.active:
                        case ConnectionState.done:
                            if (snapshot.hasError) {
                                return //Message: error;
                            } else {
                                QuerySnapshot? querySnapshot = snapshot.data;
                                if (querySnapshot!.docs.length == 0) {
                                    return //Message: no clients ;
                                } else {
                                    return ListView.builder(
                                            itemCount: querySnapshot.docs.length,
                                            itemBuilder: (context, indice) {
                                            List<DocumentSnapshot> clients = querySnapshot.docs.toList();
                                            DocumentSnapshot item = clients[indice];
    
                                            return //Clients;
                             
                                            },
                                    );
                                }
                            }
                }
            },
      ),
    

    希望能帮到你。

    【讨论】:

    • 感谢您的回答。问题是我不知道“_idCompany”,我正在寻找一种使用 collectionGroup('employee') 并根据其 ID 查找特定员工的方法。你知道实现这一目标的方法吗?
    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 2021-03-04
    • 2019-12-03
    • 2021-03-10
    • 2021-04-04
    • 2020-02-03
    • 2020-11-29
    • 2021-04-08
    相关资源
    最近更新 更多