onufitness_mobile/lib/controller/update_acces_token_controller.dart
2026-01-13 11:36:24 +05:30

106 lines
3.9 KiB
Dart

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<bool> 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"),
),
);
}
}