Bagaimana cara membuat subkumpulan data pengguna di Firebase?

Saya sedang membuat Aplikasi Rumah Sakit dengan bergetar. Tujuan saya adalah mengonfigurasi firebase sedemikian rupa sehingga koleksi root diberi nama Pengguna/uid (uid yang dibuat secara otomatis saat pengguna dibuat)/someText/documentID (dibuat secara otomatis oleh Firebase). Ini kode saya:

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,
  }
 );
  }

Ketika pengguna baru mendaftar, dokumen dengan uid mereka secara otomatis dibuat di koleksi Pengguna. Tetapi ketika saya mencoba memasukkan beberapa data pribadi ke dalam folder Pengguna/uid/VaksinAdmnistered, saya tidak dapat memberikan nilai uid pengguna saat ini pada baris kode ini

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

Kesalahan yang saya dapatkan adalah

Only static members can be accessed in initializers.

person Arpit    schedule 08.03.2020    source sumber


Jawaban (1)


Anda menggunakan uid di dalam metode document sebelum konstruktor dipanggil. Oleh karena itu lakukan hal berikut:

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,
  }
 );
  }

Buat variabel vaccTaken yang akan mereferensikan koleksi User, lalu di dalam metode updateUserData akses uid.

person Peter Haddad    schedule 08.03.2020