首页 > 解决方案 > 如何在 Flutter 中缓存来自 GraphQL 的查询和变异?

问题描述

我有一个从 GraphQL 检索数据的应用程序,该应用程序有查询和突变请求,该应用程序的每个屏幕都有至少一个或多个查询来从 GraphQL 检索数据,其中一些有突变请求来发送数据,所有查询都接收值从早期的屏幕中获取与打开的内容一致的新数据。

我正在使用包hasura_connect来检索和发送数据,该包接受一个拦截器,我将要测试包shared_preferences_cache_interceptor但它只缓存查询,而不是突变,另一个问题是,查询在发出请求之前接收来自早期屏幕的参数.

考虑到这种情况,缓存查询和变异的最佳方法是什么?

import 'package:hasura_connect/hasura_connect.dart';
import 'package:meta/meta.dart';

class GraphQLHelper {

  static final String host = 'https://apigraphql.staging....';

  static HasuraConnect _hasuraConnect;

  static Future<dynamic> query({
    String path = "",
    @required String docQuery,
    @required Map<String, dynamic> variables,
    Map<String, String> headers
    }) async{


    _hasuraConnect = HasuraConnect(
      host+path,
      headers: headers,
      reconnectionAttemp: 0
    );

    try{

      var data = await _hasuraConnect.query(
          docQuery,
          variables: variables,
      );

      //print("query DATA: $data");

      return data;

    } catch(e){
      print("query ERROR: $e");
      CustomToast.error(Errors.get(e));
      return null;
    }


  }

  static Future<dynamic> mutation({
    String path = "",
    @required String docMutation,
    @required Map<String, dynamic> variables,
    Map<String, String> headers}) async{


    _hasuraConnect = HasuraConnect(
        host+path,
        headers: headers,
        reconnectionAttemp: 0
    );

    try{

      var data = await _hasuraConnect.mutation(
          docMutation,
          variables: variables
      );

      //print("mutation DATA: $data");

      return data;

    } catch(e){
      print("mutation ERROR: $e");
      CustomToast.error(Errors.get(e));
    }

  }


}

标签: flutterdartcachinggraphql

解决方案


推荐阅读