首页 > 解决方案 > 扑火商店得到最后一个结果

问题描述

朋友们 我有问题 文档中只显示最后一个id,不是全部 代码有什么问题?

此图像包含有关用户的信息

在这张图片中,其中一个人的信息被添加到好友集合中,并通过用户 ID 链接

我以One to Many的形式链接数据,每个用户有一群朋友你可以看代码解决问题

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:tawasul/components/myResponsiveLibrary.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';

class MainDrawer extends StatefulWidget {
  const MainDrawer({Key key}) : super(key: key);

  @override
  _MainDrawerState createState() => _MainDrawerState();
}

class _MainDrawerState extends State<MainDrawer> {
  @override
  void initState() {
    super.initState();
    Firebase.initializeApp();
    getUsers();
  }

  final friendsRef = FirebaseFirestore.instance.collection('friends');
  String id;
  String getUsers() {
    friendsRef.get().then((QuerySnapshot snapshot) {
      snapshot.docs.forEach((DocumentSnapshot doc) {
        setState(() {
          id = doc.id;
          return id;
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    User user = FirebaseAuth.instance.currentUser;
    final userID = user.uid;
    return Drawer(
        child: SafeArea(
            child: FutureBuilder<DocumentSnapshot>(
      future: friendsRef.doc(id).get(),
      builder: (
        BuildContext context,
        AsyncSnapshot<DocumentSnapshot> snapshot,
      ) {
        if (snapshot.hasError) {
          return Text("Something went wrong");
        }
        if (snapshot.hasData && !snapshot.data.exists) {
          return Text("Document does not exist");
        }
        if (snapshot.connectionState == ConnectionState.done) {
          Map<String, dynamic> data = snapshot.data.data();
          if (data['user'] == "users/" + userID) {
            return Container(
                padding: EdgeInsets.only(top: MainModel().largePadding * 2),
                color: MainModel().mainColor,
                child: Column(
                  children: [
                    Container(
                      padding: EdgeInsets.only(
                        left: MainModel().middlePadding,
                        top: MainModel().middlePadding,
                      ),
                      child: ListTile(
                        title: Text(
                          "${data['name']}",
                          style: TextStyle(
                              color: MainModel().whiteColor,
                              fontWeight: FontWeight.bold,
                              fontSize: 24),
                        ),
                        subtitle: InkWell(
                          onTap: () {},
                          child: Container(
                            padding: EdgeInsets.only(top: 10),
                            child: Text(
                              "${data['phone']}",
                              style: TextStyle(
                                  color: MainModel().whiteColor, fontSize: 14),
                            ),
                          ),
                        ),
                        trailing: IconButton(
                          onPressed: () {
                            Navigator.of(context).pushNamed(
                              '/screens/MemberPage',
                            );
                          },
                          icon: Icon(Icons.info,
                              color: MainModel().thirdColor, size: 40),
                        ),
                      ),
                    ),
                    Divider(
                      thickness: 3,
                      color: MainModel().thirdColor,
                    ),
                  ],
                ));
          }
        }
        return Text("loading");
      },
    )));
  }
}

我希望你能解决问题,谢谢你的帮助

标签: firebasefluttergoogle-cloud-firestore

解决方案


我认为这是因为您正在使用 forEach 然后将值分配给变量。您调用该函数,分配值然后打印该值,因此始终打印最后一个值。


推荐阅读