【发布时间】:2020-12-15 20:32:51
【问题描述】:
我试图限制从 Firestore 返回的数据仅限于当前用户。目前,我的应用程序正在将所有用户信息返回到我的主屏幕上的 listveiw,这不是预期的结果。我已经阅读了许多描述如何实现这一点的文章,但似乎无法通过我的代码实现这一点(如下)。我有一个带有单个顶级集合的 Firestore 数据库,该集合为每个经过 Firebase 身份验证的用户保存一个文档。我不希望返回所有文档/用户信息,只返回当前用户文档/用户信息。希望我已经提供了正确的代码来应用此更改...
--- 数据库服务代码 ------
import 'package:example_app/models/family.dart'; import
'package:example_app/models/user.dart'; import
'package:cloud_firestore/cloud_firestore.dart';
class DatabaseService { final String uid; DatabaseService({
this.uid });
// collection reference final CollectionReference familyCollection
= Firestore.instance.collection('family'); Future<void> updateUserData(
String nameFirst,
String nameLast,
String phoneNumber,
String profilePicture,
String familyMemberID,
String userID,
) async { // String sugars, int strength) async {
return await familyCollection.document(uid).setData({
'nameFirst': nameFirst,
'nameLast': nameLast,
'phoneNumber': phoneNumber,
'profilePicture': profilePicture,
'familyMemberID': familyMemberID,
'userID': userID,
}); }
// family list from snapshot List<Family>
_familyListFormSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc){
//print(doc.data);
return Family(
nameFirst: doc.data['nameFirst'] ?? '',
nameLast: doc.data['nameLast'] ?? '',
phoneNumber: doc.data['phoneNumber'] ?? '',
profilePicture: doc.data['profilePicture'] ?? '',
familyMemberID: doc.data['familyMemberID'] ?? '',
userID: doc.data['userID'] ?? ''
);
}).toList(); }
// user data from snapshots UserData
_userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
nameFirst: snapshot.data['nameFirst'],
nameLast: snapshot.data['nameLast'],
phoneNumber: snapshot.data['phoneNumber'],
profilePicture: snapshot.data['profilePicture'],
familyMemberID: snapshot.data['familyMemberID'],
userID: snapshot.data['userID'],
); }
// get profiles stream Stream<List<Family>> get profiles {
return familyCollection.snapshots()
.map(_familyListFormSnapshot); }
// get user doc stream Stream<UserData> get userData {
return familyCollection.document(uid).snapshots()
.map(_userDataFromSnapshot); } }
【问题讨论】:
-
请不要想出你自己的代码格式,因为你发布它的方式几乎是不可读的。我快速编辑它以清理它,但请自己也单击编辑链接并修复任何挥之不去的问题,例如额外/缺失的换行,以及第 7 行的评论。
标签: firebase flutter dart google-cloud-firestore