Как получить значения из Firestore в Flutter

#firebase #flutter #google-cloud-firestore

#firebase #трепетать #google-облако-firestore #flutter

Вопрос:

Мне нужно получить значения внутри моего документа Firestore, в котором есть вложенная коллекция.

ДОБАВЛЕНИЕ ДАННЫХ В БАЗУ ДАННЫХ

Добавляя, что я пытаюсь выполнить в userPolls коллекции, мне нужно добавить документ с Id на основе userId , затем создать коллекцию «Ежедневных рассылок», в которой есть документ с Id текущей датой, но без ‘/’, и в нем я помещаю все свои данные следующим образом:

 final CollectionReference userPollCollection =
      Firestore.instance.collection('userPolls');
Future setPoll(UserPoll userPoll) async {
    var dt = userPoll.pollDate.replaceAll('/', '');
    return await userPollCollection
        .document(userId)
        .collection('daillyPolls')
        .document(dt)
        .setData({
      'uid': userId,
      'pollDate': userPoll.pollDate,
      'status': userPoll.status,
      'statusCode': userPoll.statusCode
    });
  }
  

ЗАПРОС ДАННЫХ Из БАЗЫ ДАННЫХ

При извлечении данных мне нужно перейти к userPolls , затем получить документ с Id который является userId , затем перейти к коллекции dailyPolls , затем получить документ с Id , который основан на текущей дате без ‘/’, затем получить данные, которые находятся внутри него.

  Future getPoll() async {
    final DateTime now = DateTime.now();
    final DateFormat formatter = DateFormat('yyyy/MM/dd');
    final String formatted = formatter.format(now);
    var pollDate = formatted;
    var dt = pollDate.replaceAll('/', '');

    var docRef = userPollCollection
        .document(userId)
        .collection('dailyPolls')
        .document(dt);

    docRef.get().then((onValue) {
      print(onValue.data);
    });
  }
  

введите описание изображения здесь

Красный квадрат — это путь, а синий — это то, что мне нужно.

Я очень новичок в плоских базах данных.

Комментарии:

1. Я попробовал этот код с .documents, и он не работает со мной.. должно быть .doc

Ответ №1:

Я не уверен, какие классы вы пытаетесь использовать, но вот самый простой способ получить дату в правильном формате:

 final DateTime now = DateTime.now();
final DateFormat formatter = DateFormat('yyyy/MM/dd');
final String formatted = formatter.format(now);

print(formatted);

var docRef = userPollCollection
    .document(userId)
    .collection('dailyPolls')
    .document(formatted);
  

Чтобы затем получить поле состояния, вы должны сделать:

 docRef.get().then((onValue) {
  print(onValue.data().status);
});
  

Если у вас все еще возникают проблемы, проверьте вывод первого print оператора, чтобы увидеть, соответствует ли его значение тому, что вы видите в базе данных.

Комментарии:

1. Извините, если я не был ясен, сэр. Что я пытаюсь получить, сэр, так это данные документа 20200826 . Мне нужно свойство ‘status’, чтобы я мог сравнить его с чем-то.

2. Я обновил свой ответ, чтобы показать, как получить это конкретное поле. Также смотрите firebase.google.com/docs/firestore/query-data /…

3. Спасибо, сэр. Я изменил способ сохранения своих данных, чтобы мне было легче получить результат. Но ваше предложение помогло мне.