blob: 9f674e5011203c23b90fb178a61258eed3310163 [file] [log] [blame] [edit]
// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// 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.
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;
}