【发布时间】:2021-12-11 05:19:49
【问题描述】:
在我的 Flutter 应用程序中,我希望允许登录用户能够读取他们创建的文档(仅当 DocumentID 与 UserID 相同时)。问题是 documentID 是由 firebase 自动生成的。当我使用登录的 UserID 明确指定 documentID 时,用户无法创建多个文档,因为 documentID 已经存在。请帮忙...
结果总是在下面显示快照错误...
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('orders').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
if (snapshot.hasError) {
return const Center(
child: Text('Oops, something went wrong...'),
);
}
}
向 Firestore 添加数据
onPressed: () {
var firebaseUser = FirebaseAuth.instance.currentUser;
FirebaseFirestore.instance.collection('orders').add({
'date': FieldValue.serverTimestamp(),
'product': 'Jeans',
'total': cart.totalAmount,
'uid': firebaseUser!.uid,
});
cart.clearCart();
},
显示来自 Firestore 的数据
StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('orders').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
if (snapshot.hasError) {
return const Center(
child: Text('Oops, something went wrong...'),
);
}
}
安全规则
【问题讨论】:
-
如果您想创建一个与登录用户 ID 具有相同 ID 的文档,那么您将只能制作一个文档,因为用户的 ID 不会更改。要解决此问题,您必须在创建新文档之前删除旧文档。或者允许生成订单文档 ID 并在该文档上保存用户 ID,这样您就可以查询“userID 为 currentUser.id 的所有订单”
-
嗨@Amxela,感谢您的及时回复。我想我将不得不查询 UserID 为 currentUserID 的所有订单。
-
与firebase firestore和flutter相关的一切都可以在这里找到firebase.flutter.dev/docs/firestore/usage查询具体在这里firebase.flutter.dev/docs/firestore/usage/#querying
-
谢谢,我正在努力...
标签: flutter google-cloud-firestore firebase-authentication firebase-security