listToMap function

Map<String, dynamic> listToMap(
  1. List list, {
  2. String? type,
})

Converts a list of key-value pairs into a map.

The list is expected to be in the format: 'key1', value1, 'key2', value2, ...

Or, if type is provided: 'Type', 'key1', value1, 'key2', value2, ...

If type is provided, the first element of the list must match type, and the key-value pairs start from the second element.

Implementation

Map<String, dynamic> listToMap(List<dynamic> list, {String? type}) {
  var startIndex = 0;
  if (type != null) {
    if (list.isEmpty || list.first != type) {
      throw FormatException('Expected "$type" as first element', list);
    }
    startIndex = 1;
  }

  if ((list.length - startIndex).isOdd) {
    throw FormatException(
      'Expected an even number of elements${type != null ? " after $type" : ""}',
      list,
    );
  }
  final map = <String, dynamic>{};
  var i = startIndex;
  while (i < list.length - 1) {
    final key = list[i] as String;
    final value = list[i + 1];
    map[key] = value;
    i += 2;
  }
  return map;
}