Я написал следующую небольшую служебную функцию, которая облегчает чтение моего кода:
mapValues(Map map, Function f) => map.map((k, v) => MapEntry(k, f(v)));
Вот пример использования этой функции для преобразования данных json, как это делает и учебник AngularDart Heros:
class RouteRefs {
final Map<String, List<RouteRef>> routesByNetwork;
RouteRefs(this.routesByNetwork);
static RouteRefs fromJson(Map<String, dynamic> json) {
var rawMap = json["routesByNetwork"] as Map;
return RouteRefs(mapValues(rawMap, routeRefsFromJson)); // !! here !!
}
static Iterable routeRefsFromJson(routeList) {
return (routeList as List)
.map((rawRef) => RouteRef.fromJson(rawRef as Map))
.toList();
}
}
Есть ли уже стандартная библиотека или функция библиотеки утилит, которая делает это? Если нет, рекомендуется ли писать это как функцию верхнего уровня в пакете утилит (или для начала, чтобы он был компактнее) в файле с исходным кодом утилиты?
И так как я уже скопировал этот код здесь, я мог бы также спросить кое-что связанное: код, как в routeRefsFromJson
, имеет небольшую избыточность с аналогичными методами во многих других модельных классах. Есть ли еще лучший способ уменьшить избыточность без чрезмерного абстрагирования кода?