ฉันจะสร้างคอลเลกชันย่อยของข้อมูลผู้ใช้ใน Firebase ได้อย่างไร

ฉันกำลังสร้างแอป Hospital อย่างรวดเร็ว เป้าหมายของฉันคือการกำหนดค่า 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,
  }
 );
  }

เมื่อผู้ใช้ใหม่ลงทะเบียน เอกสารที่มี uid จะถูกสร้างขึ้นโดยอัตโนมัติในคอลเลกชันผู้ใช้ แต่เมื่อฉันพยายามป้อนข้อมูลส่วนบุคคลในโฟลเดอร์ User/uid/VaccineAdmnistered ฉันไม่สามารถส่งค่าของ uid ผู้ใช้ปัจจุบันในบรรทัดโค้ดนี้ได้

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

ข้อผิดพลาดที่ฉันได้รับคือ

Only static members can be accessed in initializers.

person Arpit    schedule 08.03.2020    source แหล่งที่มา


คำตอบ (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

person Peter Haddad    schedule 08.03.2020