toKeyMap<K, T> static method

Map<K, T> toKeyMap<K, T>(
  1. dynamic value,
  2. EntryConverter<K> keyConverter, {
  3. ValueConverter<T>? converter,
  4. EntryConverter<T>? entryConverter,
})

Tries to parse value into Map.

List, Map, Iterable.

Use converter or entryConverter to convert value to T. keyConverter converts key to K. Use hardCast if you are sure that value contains expected Types and there is no need to convert items.

Implementation

static Map<K, T> toKeyMap<K, T>(dynamic value, EntryConverter<K> keyConverter,
    {ValueConverter<T>? converter, EntryConverter<T>? entryConverter}) {
  final items = Map<K, T>();

  if (value == null) {
    return items;
  }

  if (value is Iterable) {
    value = value.toList().asMap();
  }

  if (value is Map) {
    if (converter != null) {
      value.forEach((key, item) {
        final mapItem = convert(item, converter: converter);

        if (mapItem != null) {
          items[keyConverter(key, item)] = mapItem;
        }
      });
    } else if (entryConverter != null) {
      value.forEach((key, item) {
        final mapItem = convertEntry(key, item, converter: entryConverter);

        if (mapItem != null) {
          items[keyConverter(key, item)] = mapItem;
        }
      });
    } else {
      value.forEach((key, item) {
        if (item is T) {
          items[keyConverter(key, item)] = item;
        }
      });
    }
  } else {
    if (converter != null) {
      final listItem = convert(value, converter: converter);

      if (listItem != null) {
        items[keyConverter(0, listItem)] = listItem;
      }
    } else if (entryConverter != null) {
      final listItem = convertEntry(0, value, converter: entryConverter);

      if (listItem != null) {
        items[keyConverter(0, listItem)] = listItem;
      }
    } else {
      if (value is T) {
        items[keyConverter(0, value)] = value;
      }
    }
  }

  return items;
}