You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:54:23