【问题标题】:Flutter GraphQl client cacheFlutter GraphQl 客户端缓存
【发布时间】:2020-08-30 18:13:47
【问题描述】:
我正在使用 Flutter graphql_client,它的实现几乎与 this example 中的一样
我的客户端创建如下所示:
abstract class AbstractAdapter {
Link get httpLink;
GraphQLClient client;
AbstractAdapter() {
client = GraphQLClient(cache: InMemoryCache(), link: httpLink);
}
Future<QueryResult> query(QueryOptions options) {
return client.query(options);
}
}
它工作得很好,但问题在于缓存
如果我两次发送相同的突变,它会返回缓存的结果而不是再次发送!
感谢任何帮助。
【问题讨论】:
标签:
flutter
graphql
flutter-graphql
【解决方案1】:
我发现了问题,
我试图在查询 api 上发送突变,这将返回最后一个缓存的响应,这对突变不利。
我已经向我的 GraphQL 适配器添加了带有 MutationOptions 的突变查询,如下所示:
abstract class AbstractAdapter {
Link get httpLink;
GraphQLClient client;
AbstractAdapter() {
client = GraphQLClient(cache: InMemoryCache(), link: httpLink);
}
Future<QueryResult> query(QueryOptions options) {
return client.query(options);
}
Future<QueryResult> mutate(MutationOptions options) {
return client.mutate(options);
}
}
【解决方案2】:
您必须在 QueryOptions 和 MutationOptions 中使用 FetchPolicy.networkOnly , fetchPolicy 属性
String query, Map<String, dynamic> variables) async {
QueryOptions options = QueryOptions(
documentNode: gql(query),
variables: variables,
fetchPolicy: FetchPolicy.networkOnly);
final result = await _client.query(options);
return result;
}
Future<QueryResult> performMutation(
String query, Map<String, dynamic> variables) async {
MutationOptions options = MutationOptions(
documentNode: gql(query),
variables: variables,
fetchPolicy: FetchPolicy.networkOnly);
final result = await _client.mutate(options);
return result;
}
【解决方案3】:
你可以在突变完成后使用 FetchPolicy.networkOnly 或 updateCache。