#flutter #dart #graphql #flutter-graphql
Вопрос:
static Future<QueryResult> updateOrderStatus({required dynamic input, required String status, required String orderId, required String buyerId}) {
final client = GraphqlClient.getGraphQlClient();
print(input);
final MutationOptions options = MutationOptions(
document: gql(OrderMutaions.updateOrderStatus),
variables: {'input': input},
update: (cache, result) {
print(orderId);
print(buyerId);
final req = QueryOptions(
document: gql(OrderQueries.getOrderByOrderId),
variables: {
'input': {"orderId": orderId, "buyerUid": buyerId},
},
).asRequest;
final response = cache.readQuery(req);
print('cache response');
print(response);
response?["getOrderByOrderId"]["status"] = status;
print('cache response new');
print(response);
if (response != null) {
cache.writeQuery(
req,
broadcast: true,
data: response,
);
}
return cache;
},
);
return client.mutate(options);
}
Я использую этот пакет для использования graphql в flutter, так как не хочу использовать виджеты запросов/мутаций. Я использую watchQuery для getOrderByOrderId и прослушиваю изменения. Когда вызывается запрос updateOrderStatus, я обновляю кэш, поэтому watchQuery получает изменения. Однако при первом изменении статуса он работает нормально. кэш обновляется, и watchquery получает изменения. Но при следующем изменении статуса cache.readQuery(req) возвращает нулевое значение для данного запроса. Следовательно, это работает только один раз. Я не понимаю, почему второй раз становится нулевым. В чем же ошибка?
Комментарии:
1. можете ли вы указать
GraphqlClient
класс, в котором вы используетеgetGraphQlClient()
метод, какой кэш вы используете? память, улей …и так далее.