fun mutate()

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)
            }
        }
    }