Jonatas

added querys and mutations from graphql to getConnect

  1 +## [3.23.1]
  2 +- Fix allowSelfSigned on Flutter web
  3 +
1 ## [3.23.0] 4 ## [3.23.0]
2 - Add GetResponsive (@SchabanBo) 5 - Add GetResponsive (@SchabanBo)
3 - Update tests, fix predicate for offNamedUntil (@vbuberen) 6 - Update tests, fix predicate for offNamedUntil (@vbuberen)
1 import '../get_instance/src/lifecycle.dart'; 1 import '../get_instance/src/lifecycle.dart';
2 import 'http/src/certificates/certificates.dart'; 2 import 'http/src/certificates/certificates.dart';
  3 +import 'http/src/exceptions/exceptions.dart';
3 import 'http/src/http.dart'; 4 import 'http/src/http.dart';
4 import 'http/src/response/response.dart'; 5 import 'http/src/response/response.dart';
5 import 'sockets/sockets.dart'; 6 import 'sockets/sockets.dart';
@@ -206,14 +207,105 @@ class GetConnect extends GetConnectInterface { @@ -206,14 +207,105 @@ class GetConnect extends GetConnectInterface {
206 } 207 }
207 208
208 @override 209 @override
209 - GetSocket socket(String url, {Duration ping = const Duration(seconds: 5)}) { 210 + GetSocket socket(
  211 + String url, {
  212 + Duration ping = const Duration(seconds: 5),
  213 + }) {
210 _checkIfDisposed(isHttp: false); 214 _checkIfDisposed(isHttp: false);
211 - final _url = baseUrl == null ? url : baseUrl + url;  
212 - final _socket = GetSocket(_url, ping: ping); 215 +
  216 + final _socket = GetSocket(_concatUrl(url), ping: ping);
213 sockets.add(_socket); 217 sockets.add(_socket);
214 return _socket; 218 return _socket;
215 } 219 }
216 220
  221 + String _concatUrl(String url) {
  222 + if (url == null) return baseUrl;
  223 + return baseUrl == null ? url : baseUrl + url;
  224 + }
  225 +
  226 + /// query allow made GraphQL raw querys
  227 + /// final connect = GetConnect();
  228 + /// connect.baseUrl = 'https://countries.trevorblades.com/';
  229 + /// final response = await connect.query(
  230 + /// r"""
  231 + /// {
  232 + /// country(code: "BR") {
  233 + /// name
  234 + /// native
  235 + /// currency
  236 + /// languages {
  237 + /// code
  238 + /// name
  239 + /// }
  240 + /// }
  241 + ///}
  242 + ///""",
  243 + ///);
  244 + ///print(response.body);
  245 + Future<GraphQLResponse<T>> query<T>(
  246 + String query, {
  247 + String url,
  248 + Map<String, dynamic> variables,
  249 + Map<String, String> headers,
  250 + }) async {
  251 + try {
  252 + final res =
  253 + await post(_concatUrl(url), {'query': query, 'variables': variables});
  254 +
  255 + final listError = res.body['errors'];
  256 + if ((listError is List) && listError.isNotEmpty) {
  257 + // return GraphQLResponse<T>(body: res.body['data'] as T);
  258 + return GraphQLResponse<T>(
  259 + graphQLErrors: listError
  260 + .map((e) => GraphQLError(
  261 + code: e['extensions']['code']?.toString(),
  262 + message: e['message']?.toString(),
  263 + ))
  264 + .toList());
  265 + }
  266 + return GraphQLResponse<T>(body: res.body['data'] as T);
  267 + } on Exception catch (_) {
  268 + return GraphQLResponse<T>(graphQLErrors: [
  269 + GraphQLError(
  270 + code: null,
  271 + message: _.toString(),
  272 + )
  273 + ]);
  274 + }
  275 + }
  276 +
  277 + Future<GraphQLResponse<T>> mutation<T>(
  278 + String mutation, {
  279 + String url,
  280 + Map<String, dynamic> variables,
  281 + Map<String, String> headers,
  282 + }) async {
  283 + try {
  284 + final res = await post(
  285 + _concatUrl(url), {'query': mutation, 'variables': variables});
  286 +
  287 + final listError = res.body['errors'];
  288 + if ((listError is List) && listError.isNotEmpty) {
  289 + // return GraphQLResponse<T>(body: res.body['data'] as T);
  290 + return GraphQLResponse<T>(
  291 + graphQLErrors: listError
  292 + .map((e) => GraphQLError(
  293 + code: e['extensions']['code']?.toString(),
  294 + message: e['message']?.toString(),
  295 + ))
  296 + .toList());
  297 + }
  298 + return GraphQLResponse<T>(body: res.body['data'] as T);
  299 + } on Exception catch (_) {
  300 + return GraphQLResponse<T>(graphQLErrors: [
  301 + GraphQLError(
  302 + code: null,
  303 + message: _.toString(),
  304 + )
  305 + ]);
  306 + }
  307 + }
  308 +
217 bool _isDisposed = false; 309 bool _isDisposed = false;
218 310
219 bool get isDisposed => _isDisposed; 311 bool get isDisposed => _isDisposed;
@@ -9,6 +9,15 @@ class GetHttpException implements Exception { @@ -9,6 +9,15 @@ class GetHttpException implements Exception {
9 String toString() => message; 9 String toString() => message;
10 } 10 }
11 11
  12 +class GraphQLError {
  13 + GraphQLError({this.code, this.message});
  14 + final String message;
  15 + final String code;
  16 +
  17 + @override
  18 + String toString() => 'GETCONNECT ERROR:\n\tcode:$code\n\tmessage:$message';
  19 +}
  20 +
12 class UnauthorizedException implements Exception { 21 class UnauthorizedException implements Exception {
13 @override 22 @override
14 String toString() { 23 String toString() {
1 import 'dart:collection'; 1 import 'dart:collection';
2 import 'dart:convert'; 2 import 'dart:convert';
  3 +import '../exceptions/exceptions.dart';
3 import '../request/request.dart'; 4 import '../request/request.dart';
4 import '../status/http_status.dart'; 5 import '../status/http_status.dart';
5 6
  7 +class GraphQLResponse<T> extends Response<T> {
  8 + final List<GraphQLError> graphQLErrors;
  9 + GraphQLResponse({T body, this.graphQLErrors}) : super(body: body);
  10 +}
  11 +
6 class Response<T> { 12 class Response<T> {
7 const Response({ 13 const Response({
8 this.request, 14 this.request,
1 name: get 1 name: get
2 description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX. 2 description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX.
3 -version: 3.23.0 3 +version: 3.23.1
4 homepage: https://github.com/jonataslaw/getx 4 homepage: https://github.com/jonataslaw/getx
5 5
6 environment: 6 environment: