#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
);