in packages/amplify_api/android/src/main/kotlin/com/amazonaws/amplify/amplify_api/FlutterGraphQLApi.kt [118:194]
fun mutate(flutterResult: MethodChannel.Result, request: Map<String, Any>) {
val apiName: String?
val document: String
val variables: Map<String, Any>
val cancelToken: String
try {
apiName = FlutterApiRequest.getGraphQlApiName(request)
document = FlutterApiRequest.getGraphQLDocument(request)
variables = FlutterApiRequest.getVariables(request)
cancelToken = FlutterApiRequest.getCancelToken(request)
} catch (e: Exception) {
handler.post {
ExceptionUtil.postExceptionToFlutterChannel(
flutterResult, "ApiException",
ExceptionUtil.createSerializedUnrecognizedError(e)
)
}
return
}
val responseCallback = Consumer<GraphQLResponse<String>> { response ->
if (cancelToken.isNotEmpty()) OperationsManager.removeOperation(cancelToken)
val result: Map<String, Any> = mapOf(
"data" to response.data,
"errors" to response.errors.map { it.toMap() }
)
LOG.debug("GraphQL mutate operation succeeded with response : $result")
handler.post { flutterResult.success(result) }
}
val errorCallback = Consumer<ApiException> { exception ->
if (cancelToken.isNotEmpty()) OperationsManager.removeOperation(cancelToken)
LOG.error("GraphQL mutate operation failed", exception)
handler.post {
ExceptionUtil.postExceptionToFlutterChannel(
flutterResult, "ApiException",
ExceptionUtil.createSerializedError(exception)
)
}
}
scope.launch(dispatcher) {
val operation: GraphQLOperation<String?>?
if (apiName != null) {
operation = Amplify.API.mutate(
apiName,
SimpleGraphQLRequest<String>(
document,
variables,
String::class.java,
GsonVariablesSerializer()
),
responseCallback,
errorCallback
)
} else {
operation = Amplify.API.mutate(
SimpleGraphQLRequest<String>(
document,
variables,
String::class.java,
GsonVariablesSerializer()
),
responseCallback,
errorCallback
)
}
if (operation != null) {
OperationsManager.addOperation(cancelToken, operation)
}
}
}