Флаттер передает UID Firestore в хранилище - PullRequest
1 голос
/ 19 апреля 2020

Для моего проекта я использую firestore для получения данных на пользователя. Поэтому я создал следующую структуру в Firestore.

Данные хранятся в: Коллекция: пользователи> Документ: UID (переменная)> Коллекция: напоминания

Чтобы получить данные из Firestore I необходимо передать UID в хранилище. У моего репозитория напоминаний нет этого стандарта данных, поэтому я получаю его через звонок в Firebase.

Позвольте мне показать код, чтобы сделать его более понятным:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';

import 'package:diabetes/src/model/models.dart';
import 'package:diabetes/src/entities/entities.dart';
import 'package:diabetes/src/repositories/repositories.dart';

class FirebaseRemindersRepository implements RemindersRepository {
  final reminderCollection = Firestore.instance.collection("users");

  @override
  Future<void> addNewReminder(Reminder reminder) async {
    try {
      final user = await FirebaseAuth.instance.currentUser();
      final uid = user.uid;
      return reminderCollection
          .document(uid)
          .collection("reminders")
          .add(reminder.toEntity().toDocument());
    } catch (error) {
      print(error);
    }
  }

  @override
  Future<void> deleteReminder(Reminder reminder) async {
    try {
      final user = await FirebaseAuth.instance.currentUser();
      final uid = user.uid;
      return reminderCollection
          .document(uid)
          .collection("reminders")
          .document(reminder.id)
          .delete();
    } catch (error) {
      print(error);
    }
  }

  @override
  Stream<List<Reminder>> reminders() {
    return reminderCollection.snapshots().map((snapshot) {
      return snapshot.documents
          .map((doc) => Reminder.fromEntity(ReminderEntity.fromSnapshot(doc)))
          .toList();
    });
  }

  @override
  Future<void> updateReminder(Reminder update) async {
    try {
      final user = await FirebaseAuth.instance.currentUser();
      final uid = user.uid;
      return reminderCollection
          .document(uid)
          .collection("reminders")
          .document(update.id)
          .updateData(update.toEntity().toDocument());
    } catch (error) {
      print(error);
    }
  }
}

Как вы можете видеть это заставляет меня повторять эту часть много раз:

final user = await FirebaseAuth.instance.currentUser();
final uid = user.uid;

Кроме того, я не могу сделать то же самое здесь:

Stream<List<Reminder>> reminders() {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...