Flutter应用中如何借助Firebase将物流货件数据存储至指定用户账户
基于Firebase实现货件关联指定用户的方案
前置配置
- Flutter项目已集成
firebase_core、cloud_firestore、firebase_auth依赖,完成Firebase初始化 - 所有用户已接入Firebase Auth体系,每个用户持有唯一的UID标识
两种可选实现方案
方案1:用户文档下嵌套专属货件子集合(更推荐,数据天然隔离)
管理端添加货件时,直接将数据写入目标用户UID对应的子集合路径即可:
// 目标用户的UID(可通过管理端查询用户列表获取对应UID) String targetUserUid = "xxx"; // 货件数据 Map<String, dynamic> shipmentInfo = { "trackingNo": "7849215630", "status": "运输中", "receiveAddress": "xxx省xxx市", "createTime": FieldValue.serverTimestamp() }; // 写入对应用户的货件子集合 await FirebaseFirestore.instance .collection("users") .doc(targetUserUid) .collection("shipments") .add(shipmentInfo);
配套Firebase安全规则配置,可实现仅用户本人能查看自己的货件,仅管理员可写入货件:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{uid}/shipments/{shipmentId} { allow read: if request.auth != null && request.auth.uid == uid; allow write: if request.auth != null && request.auth.token.admin == true; } } }
用户端查询自身货件无需额外过滤,直接读取对应子集合即可:
var myShipments = await FirebaseFirestore.instance .collection("users") .doc(FirebaseAuth.instance.currentUser!.uid) .collection("shipments") .get();
方案2:根集合加关联字段(适合需要统一管控全量货件的场景)
所有货件存储在根级shipments集合,每个货件文档新增userId字段关联对应用户:
await FirebaseFirestore.instance .collection("shipments") .add({ ...shipmentInfo, "userId": targetUserUid });
用户端查询时加过滤条件筛选自身货件即可:
var myShipments = await FirebaseFirestore.instance .collection("shipments") .where("userId", isEqualTo: FirebaseAuth.instance.currentUser!.uid) .get();
内容的提问来源于stack exchange,提问作者KTJ
相关产品推荐
相关产品推荐

