106 lines
3.9 KiB
Dart
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"),
|
|
),
|
|
);
|
|
}
|
|
}
|