如何在Firebase的users集合中添加medication子集合?
如何将药物信息存储到Firebase用户的子集合中
要实现将药物信息存入users集合下对应用户的medication子集合,核心是关联用户文档ID,确保药物数据和用户绑定,以下是具体修改步骤:
第一步:修改用户信息添加代码(确保能获取用户文档ID)
推荐直接使用Firebase Auth的用户UID作为users集合的文档ID,后续关联子集合更便捷:
import 'package:firebase_auth/firebase_auth.dart'; Future addUserDetails(String name, String surname, String email, int age, int weight, String gender, int phonenumber) async { // 获取当前登录用户的UID String userId = FirebaseAuth.instance.currentUser!.uid; // 用UID作为文档ID写入用户信息 await FirebaseFirestore.instance.collection('users').doc(userId).set({ 'name': name, 'surname': surname, 'email': email, 'age': age, 'weight': weight, 'gender': gender, 'phonenumber': phonenumber }); }
如果坚持用add()自动生成文档ID,需要返回并保存这个ID(后续添加药物时要用):
Future<String> addUserDetails(String name, String surname, String email, int age, int weight, String gender, int phonenumber) async { DocumentReference docRef = await FirebaseFirestore.instance.collection('users').add({ 'name': name, 'surname': surname, 'email': email, 'age': age, 'weight': weight, 'gender': gender, 'phonenumber': phonenumber }); // 返回生成的用户文档ID,需自行存储(比如用SharedPreferences或状态管理) return docRef.id; }
第二步:修改药物信息添加代码(存入用户的medication子集合)
根据获取用户ID的方式,修改药物存储逻辑:
方式1:用Firebase Auth的UID(推荐)
SizedBox(height: 4), OutlinedButton( onPressed: () async { // 获取当前登录用户的UID String userId = FirebaseAuth.instance.currentUser!.uid; Map<String, dynamic> data = { 'Triggers': '${_triggersController.text}, ${_triggersController2.text}', 'Preventer inhaler': _preventController.text, 'Reliever inhaler': _relieverController.text, 'Other medication': _othermedicationController.text }; // 写入对应用户的medication子集合 await FirebaseFirestore.instance .collection('users') .doc(userId) .collection('medication') .add(data); // 可选:清空输入框,提升用户体验 _triggersController.clear(); _triggersController2.clear(); _preventController.clear(); _relieverController.clear(); _othermedicationController.clear(); }, child: Text('保存药物信息'), ),
方式2:用之前保存的用户文档ID
SizedBox(height: 4), OutlinedButton( onPressed: () async { // 替换为你之前保存的用户文档ID String userId = '用户文档ID'; Map<String, dynamic> data = { 'Triggers': '${_triggersController.text}, ${_triggersController2.text}', 'Preventer inhaler': _preventController.text, 'Reliever inhaler': _relieverController.text, 'Other medication': _othermedicationController.text }; await FirebaseFirestore.instance .collection('users') .doc(userId) .collection('medication') .add(data); // 可选:清空输入框 _triggersController.clear(); _triggersController2.clear(); _preventController.clear(); _relieverController.clear(); _othermedicationController.clear(); }, child: Text('保存药物信息'), ),
关键说明
- 数据路径为
users/{userId}/medication,每个用户的药物数据独立存储,便于后续查询单个用户的所有药物记录。 - 若使用Firebase Auth,需确保用户已登录,否则
currentUser会为null,建议添加登录状态判断。
内容的提问来源于stack exchange,提问作者DARIO
相关产品推荐
相关产品推荐

