Как сделать вложенную коллекцию пользовательских данных в Firebase? - PullRequest
0 голосов
/ 08 марта 2020

Я создаю приложение для больницы в трепетании. Моя цель - настроить firebase таким образом, чтобы коллекция root называлась 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. Но когда я пытаюсь ввести некоторые личные данные в папку User / uid / VaccineAdmnistered, я не могу передать значение текущего пользовательского uid в этой строке кода

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

Ошибка I получаю

Only static members can be accessed in initializers.

1 Ответ

1 голос
/ 08 марта 2020

Вы используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...