| // 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; | |
| } |