У меня есть карта, возвращенная из json .decode типа Map<String,dynamic>
Динамическая c часть содержит другую карту, которую я хочу иметь в отдельной переменной. Мне удалось сделать это следующим образом:
Map<DateTime, List<DayOffDto>> mapToReturn = Map();
Map<String, dynamic> responseBody = json.decode(
response.body,
reviver: _reviver,
);
if (responseBody == null) {
throw NoDataServerException();
}
responseBody.entries.forEach((element) {
Map map = element.value;
//map.values;
map.entries.forEach((element2) {
mapToReturn[element2.key] = element2.value;
});
});
//mapToReturn contains now the extracted map from responseBody
и функция reviver просто выполняет некоторые преобразования для меня
_reviver(dynamic key, dynamic value) {
if (key != null && value is Map && (key as String).contains("-")) {
var object = value;
final DayOffDto dayOffDto = DayOffDto.fromFirebase(
key_firebase: key as String,
parsedJson: value,
rota: rotaParam,
chosenYear: yearParam);
DateTime datetime = Helper.getDateTimeFromDayNumber(
dayOffDto.dayNumber,
dayOffDto.year,
);
Map<DateTime, List<DayOffDto>> internalMap = LinkedHashMap();
internalMap[datetime] = [dayOffDto];
return internalMap;
}
return value;}
Я не думаю, что это лучший способ извлечения. Есть идеи для оптимизированного кода? responseBody.values
возвращает Iterable<V>
, поэтому, когда я делаю mapToReturn = responseBody.values
, я получаю ошибку