mutate<T> method

Future<T> mutate<T>(
  1. String mutation,
  2. Map<String, dynamic> variables, {
  3. T fromJson(
    1. Map<String, dynamic>
    )?,
  4. String? expectedDataType,
  5. bool convertEnums = true,
  6. bool retryOnTransientNetworkErrors = true,
})

Implementation

Future<T> mutate<T>(
  String mutation,
  Map<String, dynamic> variables, {
  T Function(Map<String, dynamic>)? fromJson,
  String? expectedDataType,
  bool convertEnums = true,
  bool retryOnTransientNetworkErrors = true,
}) async {
  var data = await _executeGraphQLOperation(
    mutation,
    variables,
    true,
    expectedDataType,
    convertEnums: convertEnums,
    retryOnTransientNetworkErrors: retryOnTransientNetworkErrors,
  );

  if (data == null) {
    throw Exception('No data returned from mutate');
  }

  if (data is Map || data is List) {
    // Response normalization: always convertEnums=false because entity
    // .g.dart files now use @JsonValue enum maps (_$EnumNameEnumMap) which
    // expect the raw GraphQL enum values (e.g. 'USD', 'INSUFFICIENT_STOCK_ERROR').
    // The __typename -> runtimeType conversion still runs for union discrimination.
    data = VendureUtils.normalizeGraphQLData(
      data,
      convertEnums: false,
    );
  }
  if (fromJson != null) {
    if (data is! Map) {
      throw Exception(
          'Expected map data but got ${data.runtimeType}');
    }
    return fromJson(Map<String, dynamic>.from(data));
  }
  return data;
}