Что ж, это очень странно, я использую removeWhere для удаления всех нулевых значений на карте, но они проходят! Какого черта!
firebaseUploadMap.removeWhere((key, value) => value == null);
Вот распечатка карты после ее запуска:
{languages: null, latitude: 55.9521138, longitude: -3.196447, houseNum: 1, street: Princes Street, city: Edinburgh, postcode: EH2 2EQ, country: GB, toolsInPossession: null, jobsPropositioned: null, jobsCompleted: null, jobTypesLiked: null, jobsShared: null, jobRatings: null, signUpDate: Timestamp(seconds=1586989986, nanoseconds=301779000)}
Многие нулевые значения все еще там. Это как-то связано с типом переменной? languages - это список, и в моем средстве удаления null он отсутствует. jobRatings имеет логическое значение и значение NULL, может ли Дарт не распознать их как Null?
Я пробовал скопировать карту, перебирая ключи в исходной карте и удаляя их в копии, но результат совпадает с результатом .removeWhere Дарта.
Как мне решить эту проблему?
1 ответ
Ах хорошо. Простите за внимание, @jamesdlin привел меня к ответу. Пытаясь предоставить полностью воспроизводимый пример, я обнаружил, что когда я превращаю свой объект Person в карту, по какой-то причине я решил, что все поля объекта должны быть строками, поэтому languages: String (value). Поэтому я превратил null, как в NULL, в String типа "Null". Следовательно, я не смог их удалить.
Я исправил это, оставил сопоставление ключей с исходными типами данных и теперь removeWhere полностью работает. Я предполагаю, что моя база данных Firebase будет автоматически переводить списки Dart в их тип данных Array, поэтому урок таков: не превращайте поля, допускающие значение NULL, в строки, если вы хотите исключить записи, допускающие значение NULL.
Снова жаль, что зря потратил народное время, счастлив, что проблема решена.
Похожие вопросы
Новые вопросы
dictionary
Словарь сопоставляет ключи со значениями, позволяя эффективно извлекать значения по ключам. ИСПОЛЬЗУЙТЕ [map-function] ТЕГ для функций отображения; а по географии - [карты].