firebase - 扑火商店得到最后一个结果
问题描述
朋友们 我有问题 文档中只显示最后一个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");
},
)));
}
}
我希望你能解决问题,谢谢你的帮助
解决方案
我认为这是因为您正在使用 forEach 然后将值分配给变量。您调用该函数,分配值然后打印该值,因此始终打印最后一个值。
推荐阅读
- automotive - Ebike 速度传感器如何调节其油门的电压?
- c - 来自c源代码的python3.6.2(Spyder环境)模块
- ruby-on-rails - 在 rspec 上使用 render_views 方法时出现路由问题
- reactjs - joi-browser 不允许空字符串
- python - 在 elif 语句之后使用 if 语句如何工作?
- javascript - 如何在对象数组中找到一个对象,其中每个对象都可以再次具有相同对象类型的数组
- php - 行条件格式化 PHP
- php - Ajax 查询不通过 PHP 脚本
- firebase - 登录/注册后获取和存储用户数据
- php - NOT EXISTS 未在结果中考虑