fromMap static method
Performs the process of converting data read from the server.
Pass the data read from the server to value
.
The converted data is passed to the return value.
サーバーから読み取られたデータを変換する処理を実行します。
value
にサーバーから読み取られたデータを渡します。
戻り値に変換後のデータが渡されます。
Implementation
static DynamicMap fromMap(DynamicMap value) {
final res = <String, dynamic>{};
for (final tmp in value.entries) {
final key = tmp.key;
final val = tmp.value;
if (_converters.any((e) => e.check(val))) {
res[key] = val;
} else if (val is DynamicMap && val.containsKey(kTypeFieldKey)) {
final type = val.get(kTypeFieldKey, "");
final conveter = _converters.firstWhereOrNull((e) => e.type == type);
if (conveter != null) {
res[key] = conveter.fromJson(val);
} else {
res[key] = val;
}
} else if (val is List) {
final vRes = <dynamic>[];
for (final v in val) {
final conveter = _converters.firstWhereOrNull((e) => e.check(v));
if (conveter != null) {
vRes.add(conveter.fromJson(v));
} else if (v is DynamicMap && v.containsKey(kTypeFieldKey)) {
final type = v.get(kTypeFieldKey, "");
final conveter =
_converters.firstWhereOrNull((e) => e.type == type);
if (conveter != null) {
vRes.add(conveter.fromJson(v));
} else {
vRes.add(v);
}
} else {
vRes.add(v);
}
}
res[key] = vRes;
} else if (val is Set) {
final vRes = <dynamic>[];
for (final v in val) {
final conveter = _converters.firstWhereOrNull((e) => e.check(v));
if (conveter != null) {
vRes.add(conveter.fromJson(v));
} else if (v is DynamicMap && v.containsKey(kTypeFieldKey)) {
final type = v.get(kTypeFieldKey, "");
final conveter =
_converters.firstWhereOrNull((e) => e.type == type);
if (conveter != null) {
vRes.add(conveter.fromJson(v));
} else {
vRes.add(v);
}
} else {
vRes.add(v);
}
}
res[key] = vRes;
} else if (val is Map) {
final vRes = <String, dynamic>{};
for (final v in val.entries) {
final vVal = v.value;
final conveter = _converters.firstWhereOrNull((e) => e.check(vVal));
if (conveter != null) {
vRes[v.key] = conveter.fromJson(vVal);
} else if (vVal is DynamicMap && vVal.containsKey(kTypeFieldKey)) {
final type = vVal.get(kTypeFieldKey, "");
final conveter =
_converters.firstWhereOrNull((e) => e.type == type);
if (conveter != null) {
vRes[v.key] = conveter.fromJson(vVal);
} else {
vRes[v.key] = vVal;
}
} else {
vRes[v.key] = vVal;
}
}
res[key] = vRes;
} else {
res[key] = val;
}
}
return Map.unmodifiable(
Map<String, dynamic>.fromEntries(
res.entries.where(
(entry) => !entry.key.startsWith("@") && !entry.key.startsWith("#"),
),
),
);
}