setKeyValue method

void setKeyValue(
  1. Object? keyPath,
  2. Object value
)

return a list if keyPath is an array

if keyPath is a, the list cannot contain null values and null is returned instead.

Implementation

void setKeyValue(Object? keyPath, Object value) {
  if (keyPath is String) {
    return setFieldValue(keyPath, value);
  } else if (keyPath is List) {
    final keyList = keyPath;
    if (isDebug) {
      if (value is! List) {
        throw ArgumentError.value(value, 'key value', 'is not a list');
      }
      if (keyPath is! List<String>) {
        throw ArgumentError.value(
          keyPath,
          'keyPath',
          'is not a list of string',
        );
      }
      if (value.length != keyList.length) {
        throw ArgumentError.value(
          '$keyPath: $value',
          'keyPath: value',
          'length do not match (${keyList.length} vs ${value.length}',
        );
      }
    }

    /// value must be a list

    final valueList = value as List<Object?>;
    assert(keyList.length == valueList.length);
    for (var i = 0; i < keyList.length; i++) {
      setFieldValue(keyList[i] as String, valueList[i]!);
    }
  } else {
    throw 'keyPath $keyPath not supported';
  }
}