我有以下代码:
我使用云Firestore作为数据库
用户模型:
class DbUser {
String id;
final String authUserID;
final String userName;
final List<String>? itemsForSale;
final List<String>? itemFavourites;
final List<String>? bids;
DbUser(
{this.id = '',
required this.authUserID,
required this.userName,
this.itemsForSale,
this.itemFavourites,
this.bids});
Map<String, dynamic> toJson() => {
'id': id,
'authUserID': authUserID,
'userName': userName,
'itemsForSale': itemsForSale,
'itemFavourites': itemFavourites,
'bids': bids,
};
static DbUser fromJson(Map<String, dynamic> json) => DbUser(
id: json['id'],
authUserID: json['authUserID'],
userName: json['userName'],
itemsForSale: json['itemsForSale'] is Iterable
? List.from(json['itemsForSale'])
: null,
itemFavourites: json['itemFavourites'] is Iterable
? List.from(json['itemFavourites'])
: null,
bids: json['bids'] is Iterable ? List.from(json['bids']) : null,
);
}
存储库类
final _firestoreDB = FirebaseFirestore.instance;
Future<DbUser?> getDBUserByDBUserId({required String dbUserID}) async {
final docUser = _firestoreDB.collection('users').doc(dbUserID);
final snapshot = await docUser.get();
if (snapshot.exists) {
return DbUser.fromJson(snapshot.data()!);
}
return null;
}
snapshot.exists返回false。我不明白为什么?我的snapshot返回null,但我不明白为什么它会这样做,有人能帮帮我吗?
谢谢
2条答案
按热度按时间u4dcyp6a1#
Space
发现我的问题,有一个空间之前,我的Id已被retreived,我一定是accedentally把它放在那里时,创建数据库...
tpgth1q72#
查看您共享的文档的屏幕截图,第二列中的文档ID与第三列中
authUserID
的值不同,因此您似乎是通过调用add
添加文档的,这意味着Firestore为您生成了一个唯一的ID。然后使用以下代码创建对文档的引用:
但是这里您指定
dbUserID
作为文档ID,这与您创建文档时所做的不匹配。Firestore现在查找一个ID与用户ID相同的文档,而用户ID并不存在,因此会给您一个快照,其中exists
是false
。如果要在当前结构中查找用户的文档,可以使用查询来执行此操作:
但是一个更好的解决方案可能是将用户文档实际存储在其用户ID下,您可以按照文档设置中所示指定文档ID,因此这里您将调用
.document('theuserid').set(...)
而不是add(...)
。