fromMap static method

DynamicMap fromMap(
  1. DynamicMap value
)

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("#"),
      ),
    ),
  );
}