Happy
Happy

Reputation: 121

Http Headers in GraphQL Flutter

I am working with GraphQL. I need to pass parameters to Http headers. However, I see an option to pass only normal parameters (code below). PLEASE tell me how to do it!!

Query(
   options: QueryOptions(
      document: gql(userGraphQL),
      variables: {
             "..." : "..."
                 }
   ),
   builder: ...
)

Upvotes: 1

Views: 827

Answers (1)

Hemali Vekariya
Hemali Vekariya

Reputation: 386

I have created this file to related the GraphQL

gql_utils.dart file

class GraphQLUtils {
  static final GraphQLUtils _instance = GraphQLUtils._internal();
  GraphQLClient? _client;
  factory GraphQLUtils() {
    return _instance;
  }
  GraphQLUtils._internal() {
    final httpLink = HttpLink(
      'your base url',
    );
   final authLink = AuthLink(
ignore: undefined_identifier
getToken: () async => 'Bearer $YOUR_PERSONAL_ACCESS_TOKEN',
 );

    var link = authLink.concat(httpLink);
    var link = httpLink;
    var link = httpLink;
    final policies = Policies(
      fetch: FetchPolicy.networkOnly,
    );
    _client = GraphQLClient(
      cache: GraphQLCache(),
      link: link,
      defaultPolicies: DefaultPolicies(
        watchQuery: policies,
        query: policies,
        mutate: policies,
      ),
    );
  }
  Future<Map<String, dynamic>> queryRepo(
      DocumentNode readRepositories, map) async {
    final options = WatchQueryOptions(
      document: readRepositories,
      variables: map,
      pollInterval: const Duration(seconds: 4),
      fetchResults: true,
    );
    QueryResult result = await _client!.query(options);
    if (result.hasException) {
      Map<String, dynamic> response = <String, dynamic>{};
      response['success'] = false;
      response['message'] = result.exception!.graphqlErrors[0].message;
      return response;
    } else {
      Map<String, dynamic> response = <String, dynamic>{};
      response['success'] = true;
      response['data'] = result.data;
      return response;
    }
  }
}

this is Example query class

class UserQueries {
  static final userInsertQuery = gql(r'''
mutation Insert_users($objects: [users_insert_input!]!, $onConflict: users_on_conflict) {
  insert_users(objects: $objects, on_conflict: $onConflict) {
    returning {
      id
      name
      timestamp
    }
  }
}
''');
}

and how to call api

Future insertUserApi(String name) async {
  try {
    Map<String, dynamic> variables = <String, dynamic>{};
    variables = {
      "objects": [
        {"name": name}
      ],
      "onConflict": {
        "constraint": "users_pkey",
        "update_columns": [
          "id",
          "name",
        ]
      }
    };
    await GraphQLUtils()
        .queryRepo(UserQueries.userInsertQuery, variables)
        .then((response) async {
      if (response["data"] != null) {
        print("----Data---:${response["data"]}");
        Get.back();
      } else {
        Get.snackbar(
          "Error",
          "Something Went wrong",
        );
      }
    });
  } catch (e, st) {
    Get.snackbar(
      "Error",
      e.toString(),
    );
  }
}

Upvotes: 1

Related Questions