This repository has been archived on 2023-11-13. You can view files and clone it, but cannot push or open issues or pull requests.
imagini/web_native/lib/api/api_provider.dart

142 lines
3.9 KiB
Dart
Raw Permalink Normal View History

2021-02-11 20:47:42 +00:00
import 'dart:async';
2021-04-06 00:40:23 +00:00
import "package:imagini/api/auth_client/base_auth_client.dart";
import 'package:flutter/material.dart' show BoxFit, Center, SizedBox;
2021-02-11 20:47:42 +00:00
2021-04-06 00:40:23 +00:00
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';
2021-02-11 20:47:42 +00:00
2021-02-20 19:10:25 +00:00
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';
2021-02-11 20:47:42 +00:00
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:imagini/graphql/imagini_graphql.dart';
class APIProvider{
2021-02-20 19:10:25 +00:00
static const String _GRAPHQL_ENDPOINT = "/query";
2021-02-11 20:47:42 +00:00
2021-02-20 19:10:25 +00:00
BaseStorageClient _storage;
2021-04-06 00:40:23 +00:00
BaseAuthClient _authClient;
2021-02-11 20:47:42 +00:00
GraphQLClient _client;
HttpLink httpLink;
2021-02-20 19:10:25 +00:00
APIProvider(BaseStorageClient storage) {
_storage = storage;
}
Future<void> init() async {
2021-04-06 00:40:23 +00:00
// Initialize Server
2021-02-20 19:10:25 +00:00
String _server = await _storage.get("server");
2021-04-06 00:40:23 +00:00
if (_server == null) {
_server = "http://localhost";
2021-04-06 00:40:23 +00:00
await _storage.set("server", _server);
}
// Initialize Auth Client
_authClient = getAuthClient(_storage);
2021-04-06 00:40:23 +00:00
// Initialize HTTP Link
2021-02-11 20:47:42 +00:00
httpLink = HttpLink(_server + _GRAPHQL_ENDPOINT,
2021-04-06 00:40:23 +00:00
httpClient: _authClient,
2021-02-11 20:47:42 +00:00
);
2021-04-06 00:40:23 +00:00
// Initialize GraphQL Client
2021-02-11 20:47:42 +00:00
_client = GraphQLClient(
cache: GraphQLCache(),
link: httpLink,
);
}
2021-02-20 19:10:25 +00:00
Future<QueryResult> login(
2021-02-11 20:47:42 +00:00
String username,
String password,
2021-02-20 19:10:25 +00:00
String server,
) async {
2021-02-11 20:47:42 +00:00
assert(
2021-02-20 19:10:25 +00:00
(username != null && password != null && server != null)
2021-02-11 20:47:42 +00:00
);
// Initialize New Connection
2021-02-20 19:10:25 +00:00
await _storage.set("server", server);
await init();
2021-02-11 20:47:42 +00:00
QueryResult response = await _client.query(
QueryOptions(
document: LoginQuery().document,
variables: {
"user": username,
"password": password
},
)
);
2021-02-20 19:10:25 +00:00
return response;
2021-02-11 20:47:42 +00:00
}
2021-04-06 00:40:23 +00:00
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,
2021-04-06 00:40:23 +00:00
httpHeaders: _authClient.getHeaders(),
2021-02-21 17:31:03 +00:00
fit: BoxFit.contain,
);
}
2021-04-06 00:40:23 +00:00
// Future<CachedNetworkImage> 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,
// );
// }
2021-02-20 19:10:25 +00:00
Future<QueryResult> me() async {
2021-02-11 20:47:42 +00:00
QueryResult response = await _client.query(
QueryOptions(
document: MeQuery().document,
)
);
2021-02-20 19:10:25 +00:00
return response;
2021-02-11 20:47:42 +00:00
}
Future<QueryResult> mediaItems(Page page) async {
2021-02-20 19:10:25 +00:00
QueryResult response = await _client.query(
QueryOptions(
document: MediaItemsQuery().document,
variables: {
"page": page,
},
2021-02-20 19:10:25 +00:00
)
);
return response;
2021-02-11 20:47:42 +00:00
}
void dispose() {}
}