resolveFieldValue<T> method

Future<T?> resolveFieldValue<T>(
  1. GraphQLObjectType objectType,
  2. T objectValue,
  3. String? fieldName,
  4. Map<String, dynamic> argumentValues,
)

Reads one field off objectValue.

A Map is read by key, which takes precedence over the field's own resolver. Otherwise the resolver runs, and failing that the defaultFieldResolver given to the constructor, if any.

Implementation

Future<T?> resolveFieldValue<T>(
  GraphQLObjectType objectType,
  T objectValue,
  String? fieldName,
  Map<String, dynamic> argumentValues,
) async {
  final field = objectType.fields.firstWhere((f) => f.name == fieldName);
  final fieldResolve = field.resolve;

  if (objectValue is Map) {
    return objectValue[fieldName] as T;
  } else if (fieldResolve == null) {
    if (defaultFieldResolver != null) {
      return await defaultFieldResolver!(
        objectValue,
        fieldName,
        argumentValues,
      );
    }
    return null;
  } else {
    return await fieldResolve(objectValue, argumentValues) as T?;
  }
}