toList<T> static method

List<T> toList<T>(
  1. dynamic value, {
  2. ValueConverter<T>? converter,
  3. EntryConverter<T>? entryConverter,
  4. bool hardCast = false,
})

Tries to parse value into List.

List, Map, Iterable.

Use converter or entryConverter to convert values into new List. Use hardCast if you are sure that value contains expected Types and there is no need to convert items.

Implementation

static List<T> toList<T>(dynamic value,
    {ValueConverter<T>? converter,
    EntryConverter<T>? entryConverter,
    bool hardCast = false}) {
  final items = <T>[];
  Map? valueMap;

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

  if (value is Map) {
    valueMap = value;
    value = value.values;
  }

  if (value is Iterable) {
    if (converter != null) {
      value.forEach((item) {
        final listItem = convert(item, converter: converter);

        if (listItem != null) {
          items.add(listItem);
        }
      });
    } else if (entryConverter != null) {
      if (valueMap == null) {
        valueMap = value.toList().asMap();
      }

      valueMap.forEach((key, item) {
        final listItem = convertEntry(key, item, converter: entryConverter);

        if (listItem != null) {
          items.add(listItem);
        }
      });
    } else {
      if (value is List && hardCast) {
        try {
          return value.cast<T>();
        } catch (err) {
          printDebug(err.toString());
        }
      }

      value.forEach((item) {
        if (item is T) {
          items.add(item);
        }
      });
    }
  } else {
    if (converter != null) {
      final listItem = convert(value, converter: converter);

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

      if (listItem != null) {
        items.add(listItem);
      }
    } else {
      if (value is T) {
        items.add(value);
      }
    }
  }

  return items;
}