import 'dart:async'; import "package:imagini/api/auth_client/base_auth_client.dart"; import 'package:flutter/material.dart' show BoxFit, Center, SizedBox; import 'package:imagini/api/auth_client/auth_client.dart' if (dart.library.html) 'package:imagini/api/auth_client/browser_auth_client.dart' if (dart.library.io) 'package:imagini/api/auth_client/io_auth_client.dart'; import 'package:imagini/core/storage_client/base_storage_client.dart'; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:imagini/graphql/imagini_graphql.dart'; class APIProvider{ static const String _GRAPHQL_ENDPOINT = "/query"; BaseStorageClient _storage; BaseAuthClient _authClient; GraphQLClient _client; HttpLink httpLink; APIProvider(BaseStorageClient storage) { _storage = storage; } Future init() async { // Initialize Server String _server = await _storage.get("server"); if (_server == null) { _server = "http://localhost"; await _storage.set("server", _server); } // Initialize Auth Client _authClient = getAuthClient(_storage); // Initialize HTTP Link httpLink = HttpLink(_server + _GRAPHQL_ENDPOINT, httpClient: _authClient, ); // Initialize GraphQL Client _client = GraphQLClient( cache: GraphQLCache(), link: httpLink, ); } Future login( String username, String password, String server, ) async { assert( (username != null && password != null && server != null) ); // Initialize New Connection await _storage.set("server", server); await init(); QueryResult response = await _client.query( QueryOptions( document: LoginQuery().document, variables: { "user": username, "password": password }, ) ); return response; } CachedNetworkImage getImage(String fileName, int width, int height) { String server = _authClient.getServer(); String fullURL = "$server/media/$fileName?width=$width"; print(fullURL); return CachedNetworkImage( imageUrl: fullURL, placeholder: (context, url) => Center( child: SizedBox( width: width.toDouble() / 3.5, height: height.toDouble() / 3.5, child: new PlatformCircularProgressIndicator(), ), ), imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet, httpHeaders: _authClient.getHeaders(), fit: BoxFit.contain, ); } // Future getImage(String fileName, int width, int height) async { // String server = await _storage.get("server"); // String accessToken = await _storage.get("accessToken"); // String refreshToken = await _storage.get("refreshToken"); // String fullURL = "$server/media/$fileName?width=$width"; // print(fullURL); // return CachedNetworkImage( // imageUrl: fullURL, // placeholder: (context, url) => Center( // child: SizedBox( // width: width.toDouble() / 3.5, // height: height.toDouble() / 3.5, // child: new PlatformCircularProgressIndicator(), // ), // ), // imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet, // httpHeaders: { // "X-Imagini-AccessToken": accessToken, // "X-Imagini-RefreshToken": refreshToken, // }, // fit: BoxFit.contain, // ); // } Future me() async { QueryResult response = await _client.query( QueryOptions( document: MeQuery().document, ) ); return response; } Future mediaItems(Page page) async { QueryResult response = await _client.query( QueryOptions( document: MediaItemsQuery().document, variables: { "page": page, }, ) ); return response; } void dispose() {} }