getValue method

Object? getValue({
  1. Object? parameters,
  2. List? positionalParameters,
  3. Map<String, Object?>? namedParameters,
  4. Map<String, Object?>? encodingParameters,
})

Implementation

Object? getValue(
    {Object? parameters,
    List? positionalParameters,
    Map<String, Object?>? namedParameters,
    Map<String, Object?>? encodingParameters}) {
  if (parameters != null) {
    if (parameters is! Map && parameters is! Iterable) {
      var obj = parameters as dynamic;
      try {
        var json = Json.toJson(obj);
        parameters = json;
      } catch (_) {}
    }

    if (parameters is Map) {
      namedParameters ??= parameters is Map<String, Object?>
          ? parameters
          : parameters.map<String, Object?>(
              (key, value) => MapEntry<String, Object?>('$key', value));
    } else if (parameters is Iterable) {
      positionalParameters ??= parameters is List
          ? parameters
          : parameters.toList(growable: false);
    }
  }

  var key = this.key;

  if (key != null && key.isNotEmpty) {
    var value = namedParameters?[key] ?? encodingParameters?[key];
    if (value != null) {
      return value;
    }
  }

  var index = this.index;

  if (index == null) {
    var key = contextKey;
    if (key != null && key.isNotEmpty) {
      var value = namedParameters?[key] ?? encodingParameters?[key];
      if (value != null) {
        return value;
      }
    }
  }

  if (index == null || index < 0) {
    index = contextPosition ?? contextKeyPosition;
  }

  if (index != null) {
    if (positionalParameters != null) {
      return index < positionalParameters.length
          ? positionalParameters[index]
          : null;
    }

    if (namedParameters != null && index < namedParameters.length) {
      var key = namedParameters.keys.elementAt(index);
      return namedParameters[key];
    }

    return null;
  }

  if (key == null || key.isEmpty) {
    key = contextKey;

    if (key != null && key.isNotEmpty) {
      return namedParameters?[key] ?? encodingParameters?[key];
    }
  }

  return null;
}