You can cancel ongoing operations using a CancellationToken or by using convenience methods like queryCancellable and mutateCancellable.
Using CancellationToken
final cancellationToken = CancellationToken();
final resultFuture = client.query(
QueryOptions(
document: gql(readRepositories),
variables: {'nRepositories': 50},
cancellationToken: cancellationToken,
),
);
// Cancel the operation
cancellationToken.cancel();
final result = await resultFuture;
if (result.hasException && result.exception!.linkException is CancelledException) {
print('Operation was cancelled');
}
cancellationToken.dispose();
Using queryCancellable and mutateCancellable
These methods return a CancellableOperation which manages the token automatically.
// Query
final operation = client.queryCancellable(
QueryOptions(
document: gql(readRepositories),
variables: {'nRepositories': 50},
),
);
operation.cancel();
final result = await operation.result;
// Mutation
final mutationOp = client.mutateCancellable(
MutationOptions(
document: gql(addStar),
variables: {'starrableId': repositoryID},
),
);
mutationOp.cancel();
final result = await mutationOp.result;
// Using CancellationToken
final cancellationToken = CancellationToken();
final resultFuture = client.query(
QueryOptions(
document: gql(readRepositories),
variables: {'nRepositories': 50},
cancellationToken: cancellationToken,
),
);
cancellationToken.cancel();
final result = await resultFuture;
if (result.hasException && result.exception!.linkException is CancelledException) {
print('Operation was cancelled');
}
cancellationToken.dispose();
// Using queryCancellable
final operation = client.queryCancellable(
QueryOptions(
document: gql(readRepositories),
variables: {'nRepositories': 50},
),
);
operation.cancel();
final result = await operation.result;
// Using mutateCancellable
final mutationOp = client.mutateCancellable(
MutationOptions(
document: gql(addStar),
variables: {'starrableId': repositoryID},
),
);
mutationOp.cancel();
final result = await mutationOp.result;