首页 > 解决方案 > Flutter 将 Firestore UID 传递到存储库

问题描述

对于我的项目,我使用 firestore 来获取每个用户的数据。因此,我在 Firestore 中创建了以下结构。

数据存储在:集合:用户>文档:UID(变量)>集合:提醒

为了从 Firestore 获取数据,我需要将 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() {

标签: firebasefluttergoogle-cloud-firestore

解决方案


推荐阅读