Flutter Firebase Firestore запросы с путями полей документов с картами

#firebase #flutter #dart #google-cloud-firestore

#firebase #flutter #dart #google-облако-firestore

Вопрос:

Я пытаюсь отсортировать список документов в зависимости от того, видел его другой пользователь или нет. Моя структура базы данных следующая:

 following (Document Field){
Dy2k9f2m7uXnnBBPHssPxJucCrK2 : true (Map)
HOIXdQkoerRBgYCGHFRylQD2VKi1 : true (Map)
}
  

Я попытался запустить эту команду

 print(
user.data()['following'].toString(),
);
  

и получил результат

{HOIXdQkoerRBgYCGHFRylQD2VKi1: true, Dy2k9f2m7uXnnBBPHssPxJucCrK2: true}

Но я хочу знать, имеет ли указанный идентификатор пользователя, скажем, HOIXdQkoerRBgYCGHFRylQD2VKi1 значение true или false.

Как мне это сделать? Любая помощь приветствуется.

Ответ №1:

Поля типа карты Firestore, доступные с user.data()['following'] помощью return a Map<String, dynamic> , поэтому вы можете обрабатывать ее как любую другую карту в dart. Если вы хотите предположить, что он содержит bool значения:

 Map<String, bool> following = user.data()['following'];
bool seen = following['the-user-id-to-check'];
  

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

1. Вывод показывает, что тип ‘String’ не является подтипом типа ‘Map<String, bool>’

2. Итак, используйте заглавную букву S в строке.

3. Я думаю, проблема снова в том, что тип данных является динамическим

Ответ №2:

Как предположил Дуг, проблема здесь в том, что значение, вероятно, является динамическим. Вы можете преобразовать его в переменную bool :

 bool see = false;
String userKey = "Dy2k9f2m7uXnnBBPHssPxJucCrK2"; // <-- User Key

print(
  see = user.data()['following'][userKey] as bool, // <-- cast as bool
);