如何在Firebase中创建用户数据的子集合?

时间:2020-03-08 13:50:32

标签: firebase flutter dart google-cloud-firestore

我正在创建医院应用程序。我的目标是以这种方式配置Firebase,以使根集合名为User / uid(创建用户时自动生成的uid)/ someText / documentID(由Firebase自动生成)。这是我的代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:mgm_app/models/vaccList.dart';


class DatabaseService {
  final String uid;
  DatabaseService({this.uid});

  CollectionReference userReg = Firestore.instance.collection('User');
  CollectionReference vaccTaken = Firestore.instance.collection('User').document(uid).collection('Vaccine Administered');

  Future regUserData(String email) async {
    return await userReg.document(uid).setData({
      'email': email,
    });
  }

  Future updateUserData(String vaccName,String dateAdmin) async {
  return await vaccTaken.document().setData({
     'name': vaccName,
      'vaccine given': dateAdmin,
  }
 );
  }

新用户注册后,将在User集合中自动创建带有其uid的文档。但是,当我尝试在User / uid / VaccineAdmnistered文件夹中输入一些个人数据时, 我无法在此代码行上传递当前用户uid的值

Firestore.instance.collection('User').document(uid).collection('Vaccine Administered');

我遇到的错误是

Only static members can be accessed in initializers.

1 个答案:

答案 0 :(得分:1)

在调用构造函数之前,您正在方法uid中使用document。因此,请执行以下操作:

class DatabaseService {
  final String uid;
  DatabaseService({this.uid});

  CollectionReference vaccTaken = Firestore.instance.collection('User');
  Future regUserData(String email) async {
    return await vaccTaken.document(uid).setData({
      'email': email,
    });
  }

  Future updateUserData(String vaccName,String dateAdmin) async {
  return await vaccTaken.document(uid).collection('Vaccine Administered').document().setData({
     'name': vaccName,
      'vaccine given': dateAdmin,
  }
 );
  }

创建一个变量vaccTaken,该变量将引用集合User,然后在方法updateUserData中访问uid