Что ж, это очень странно, я использую 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
Sam 16 Апр 2020 в 01:42

1 ответ

Лучший ответ

Ах хорошо. Простите за внимание, @jamesdlin привел меня к ответу. Пытаясь предоставить полностью воспроизводимый пример, я обнаружил, что когда я превращаю свой объект Person в карту, по какой-то причине я решил, что все поля объекта должны быть строками, поэтому languages: String (value). Поэтому я превратил null, как в NULL, в String типа "Null". Следовательно, я не смог их удалить.

Я исправил это, оставил сопоставление ключей с исходными типами данных и теперь removeWhere полностью работает. Я предполагаю, что моя база данных Firebase будет автоматически переводить списки Dart в их тип данных Array, поэтому урок таков: не превращайте поля, допускающие значение NULL, в строки, если вы хотите исключить записи, допускающие значение NULL.

Снова жаль, что зря потратил народное время, счастлив, что проблема решена.

1
Sam 16 Апр 2020 в 09:27