import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart' as http; import 'package:aitrainer_app/model/auth.dart'; class APIClient extends ChangeNotifier { Future get(String endPoint, String param) async { final url = Auth.getBaseUrl() + endPoint + param; String authToken = Auth().getAuthToken(); if ( authToken.length == 0 ) { var responseJson = await APIClient.authenticateUser( Auth.username, Auth.password ); authToken = responseJson['token']; } final response = await http.get(url, headers: { 'Content-Type': 'application/json', 'Authorization' : "Bearer " + authToken } ); notifyListeners(); if(response.statusCode == 200) { return utf8.decode(response.bodyBytes); } else { throw Exception("Unable to perform HTTP request!"); } } Future post(String endPoint, String body) async { final url = Auth.getBaseUrl() + endPoint; print(" ------------ http/post endpoint $endPoint body $body - url: $url "); String authToken = Auth().getAuthToken(); if ( authToken.length == 0 ) { var responseJson = await APIClient.authenticateUser( Auth.username, Auth.password ); authToken = responseJson['token']; } final response = await http.post(url, headers: { 'Content-Type': 'application/json', 'Authorization' : "Bearer " + authToken }, body: body ); print(" ------------ response: " + response.body.toString()); notifyListeners(); return response.body; } static dynamic authenticateUser(String email, String password) async { var uri = Auth.getBaseUrl() + "authenticate"; try { final body = '{"username":"$email", "password":"$password"}'; final response = await http.post( uri, headers: { 'Authorization': '1', 'Content-Type': 'application/json' }, body: body ); final responseCode = response.statusCode; if ( responseCode != 200) { return { "error" : "Authentication error, total failure", }; } final responseJson = json.decode(response.body); return responseJson; } catch (exception) { return { "error" : "Network error, try again later " + exception.toString()}; } } static fetch(var authToken, var endPoint) async { var uri = Auth.getBaseUrl() + endPoint; try { final response = await http.get( uri, headers: { 'Authorization': authToken }, ); final responseJson = json.decode(response.body); return responseJson; } catch (exception) { print(exception); if(exception.toString().contains('SocketException')) { return 'NetworkError'; } else { return null; } } } }