import 'dart:convert'; import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:onufitness/constants/api_endpoints.dart'; import 'package:onufitness/models/general/access_token_update_response_model.dart'; import 'package:onufitness/routes/route_constant.dart'; import 'package:onufitness/services/local_storage_services/shared_services.dart'; import 'package:http/http.dart' as http; class UpdateAccesTokenController extends GetxController { static AccessTokenUpdateResponseModel accessTokenModel = AccessTokenUpdateResponseModel(); static RxString newAccessToken = "".obs; static RxString newRefreshToken = "".obs; static RxBool isLoading = false.obs; static Future updateAccessToken() async { final loginDetails = SharedServices.getLoginDetails(); //................................................................. if (loginDetails?.data?.tokenResponse?.refreshToken == null || loginDetails?.data?.tokenResponse?.accessToken == null) { return false; } //................................................................. else { var ret = false; isLoading(true); try { var body = { "refreshToken": loginDetails?.data?.tokenResponse?.refreshToken, "IsSocial": SharedServices.getUserDetails()?.data?.loginType == "Email" ? false : true, }; log("request Body ------> ${body.toString()}"); var response = await http.post( Uri.parse("${ApiUrl.baseUrl}${ApiUrl.updateAccessToken}"), headers: {'Content-Type': 'application/json'}, body: jsonEncode(body), ); log("Access Token Update Statuscode ------> ${response.statusCode}"); log("Access Token Update Response Body ------> ${response.body}"); accessTokenModel = accessTokenUpdateResponseModelFromJson( response.body, ); if (response.statusCode == 200 || response.statusCode == 201) { if (accessTokenModel.isSuccess == true) { ret = true; newAccessToken.value = accessTokenModel.data!.accessToken!; newRefreshToken.value = accessTokenModel.data!.refreshToken!; log("Statuscode from IF : ${response.statusCode.toString()}"); // Update token in SharedPreferences................................................ var user = SharedServices.getLoginDetails(); if (user != null && user.data != null && user.data!.tokenResponse != null) { user.data!.tokenResponse!.accessToken = newAccessToken.value; user.data!.tokenResponse!.refreshToken = newRefreshToken.value; await SharedServices.setLoginDetails(user); //................................................................................ } } else { ret = false; log("Statuscode Else 1 : ${response.statusCode.toString()}"); await showTokenExpiresDialog(); } } else { ret = false; log("Statuscode Else 2 : ${response.statusCode.toString()}"); await showTokenExpiresDialog(); } } catch (e) { ret = false; log("Catch from Access Token Update: $e"); await showTokenExpiresDialog(); } isLoading(false); return ret; } } static Future showTokenExpiresDialog() async { await Get.defaultDialog( title: "Session Expired", middleText: "Your session has expired. Please log in again to continue.", barrierDismissible: false, confirm: TextButton( onPressed: () async { await SharedServices.logout(); Get.offNamedUntil(RouteConstant.loginFirstScreen, (route) => false); }, child: Text("OK"), ), ); } }