Обновление кэша Flutter graphql работает только один раз

#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() метод, какой кэш вы используете? память, улей …и так далее.