import 'dart:convert'; import 'dart:io'; import 'package:aman_kassa_flutter/core/base/base_service.dart'; import 'package:device_info/device_info.dart'; import 'package:aman_kassa_flutter/core/models/message.dart'; import 'package:aman_kassa_flutter/core/models/response.dart'; import 'package:aman_kassa_flutter/core/models/smena.dart'; import 'package:aman_kassa_flutter/core/route_names.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; import 'package:aman_kassa_flutter/core/services/navigator_service.dart'; import 'package:aman_kassa_flutter/core/locator.dart'; import '../models/auth_response.dart'; import 'package:http/http.dart' as http; /// The service responsible for networking requests class ApiService extends BaseService { static const endpoint = 'https://kassa-test.aman.com.kz/ru/api/v2'; final NavigatorService _navigatorService = locator(); final DialogService _dialogService = locator(); var client = new http.Client(); Future authenticate(String email, String password, { bool statusCheck = true}) async { Map requestBody = { 'email': email, 'password': password }; String response = await requestFormData('/authenticate', requestBody, statusCheck: statusCheck ); AuthResponse aman = AuthResponse.fromJson(json.decode(response)); return aman.body; } Future authenticate_token(String token, { bool statusCheck = true}) async { Map requestBody = { 'token': token }; String response = await requestFormData('/activate_token', requestBody, statusCheck: statusCheck ); AuthResponse aman = AuthResponse.fromJson(json.decode(response)); return aman.body; } Future> isActive(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/test_auth', requestBody); return Response.fromJson(json.decode(response), Message.fromJson); } Future> logout(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/logout', requestBody); print(json.decode(response)); return Response.fromJsonDynamic(json.decode(response)); } Future> money(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/money', requestBody); return Response.fromJsonDynamic(json.decode(response)); } Future> deposit(String token, String sum) async { Map requestBody = {'api_token': token, 'summ': sum}; var response = await requestFormData('/deposit', requestBody); return Response.fromJsonDynamic(json.decode(response)); } Future> withdrawal(String token, String sum) async { Map requestBody = {'api_token': token, 'summ': sum}; var response = await requestFormData('/withdrawal', requestBody); return Response.fromJsonDynamic(json.decode(response)); } Future> smena(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/smena', requestBody); return Response.fromJson(json.decode(response), Smena.fromJson); } Future> closeSmena(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/close_smena', requestBody); return Response.fromJson(json.decode(response), Smena.fromJson); } Future> openSmena(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/open_smena', requestBody); return Response.fromJson(json.decode(response), Smena.fromJson); } Future> xReport(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/report_x', requestBody); return Response.fromJsonDynamic(json.decode(response)); } Future> sell(String token, String checkData) async { Map requestBody = {'api_token': token, 'data': checkData}; var response = await requestFormData('/sell', requestBody); print(response); return Response.fromJsonDynamic(json.decode(response)); } Future> sellReturn(String token, String checkData) async { Map requestBody = {'api_token': token, 'data': checkData}; var response = await requestFormData('/sell_return', requestBody); print(response); return Response.fromJsonDynamic(json.decode(response)); } Future requestFormData(String point, Map requestBody, { bool statusCheck = true } ) async { DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); Map headers = { HttpHeaders.contentTypeHeader: "multipart/form-data", HttpHeaders.cacheControlHeader: "no-cache" }; if(Platform.isAndroid) { AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; print(androidInfo.model); headers.addAll({ HttpHeaders.userAgentHeader: androidInfo.model, }); } if(Platform.isIOS) { IosDeviceInfo iosInfo = await deviceInfo.iosInfo; print(iosInfo.utsname.machine); headers.addAll({ HttpHeaders.userAgentHeader: iosInfo.utsname.machine, }); } var uri = Uri.parse('$endpoint$point'); var request = http.MultipartRequest('POST', uri) ..headers.addAll(headers) ..fields.addAll(requestBody); var response = await request.send(); String body = await response.stream.bytesToString(); if(statusCheck) { //Проверка на авторизованный запрос, необязательный параметр Response check = Response.fromJsonDynamic(json.decode(body)); if (!check.operation && check.status == 401) { _dialogService.showDialog(description: 'Необходимо пройти повторную авторизацию'); _navigatorService.replace(LoginViewRoute); } } return body; } Future> getGoodsFromServer(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/goods', requestBody); print(response); return Response.fromJsonDynamic(json.decode(response)); } Future> getCategoryFromServer(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/goods_category', requestBody); print(response); return Response.fromJsonDynamic(json.decode(response)); } Future> getServiceFromServer(String token) async { Map requestBody = {'api_token': token}; var response = await requestFormData('/services', requestBody); print(response); return Response.fromJsonDynamic(json.decode(response)); } }