You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/controllers/api_routes/api_manager.dart

147 lines
4.1 KiB
Dart

import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart' as http;
import 'package:http/http.dart';
import 'package:test_sa/models/user.dart';
class ApiManager {
ApiManager._();
Map<String, String> get _headers => {
'Content-Type': 'application/json',
if (user != null) 'Authorization': 'Bearer ${user.token}',
};
static ApiManager instance = ApiManager._();
User user;
Future<http.Response> get(
String url, {
Map<String, String> headers,
}) async {
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
// print(_url);
// print(headers);
http.Response response = await http.get(_url, headers: headers);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
Future<http.Response> post(
String url, {
Map<String, String> headers,
@required Map<String, dynamic> body,
}) async {
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
// print(_url);
// print(headers);
// log(json.encode(body));
var request = http.Request('POST', _url);
request.body = json.encode(body);
request.headers.addAll(headers);
http.StreamedResponse _streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(_streamedResponse);
// print(response.statusCode);
// log(response.body);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
Future<http.Response> put(
String url, {
Map<String, String> headers,
@required Map<String, dynamic> body,
}) async {
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
// print(_url);
// print(headers);
// log(json.encode(body));
var request = http.Request('PUT', _url);
request.body = json.encode(body);
request.headers.addAll(headers);
http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse);
// print(response.statusCode);
// log(response.body);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
Future<http.Response> multiPart(
String url, {
Map<String, String> headers,
@required Map<String, String> body,
@required List<Future<MultipartFile>> files,
}) async {
Map<String, String> _headers = const {
'Content-Type': 'multipart/form-data',
};
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
// print(_url);
// print(_headers);
// print(json.encode(body));
var request = http.MultipartRequest('POST', _url);
request.fields.addAll(body);
request.headers.addAll(_headers);
for (var element in files) {
request.files.add(await element);
}
//request.files.addAll(_files);
// print(request.files);
http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse);
// print(response.statusCode);
// log(response.body);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
}