step 23 : fix check isTokenExpired > 3 menit refreshToken

This commit is contained in:
sindhu
2025-02-27 01:25:19 +07:00
parent a28830deb0
commit b723dc4596
4 changed files with 62 additions and 125 deletions

View File

@@ -1,59 +1,45 @@
import 'dart:convert';
import 'package:jiffy/jiffy.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'constant.dart';
String formatDateJiffy(String serverDate) {
return Jiffy.parse(serverDate).format(pattern: 'dd-MM-yyyy');
}
// Future<bool> isTokenExpired() async {
// final prefs = await SharedPreferences.getInstance();
// final String? expireDateStr = prefs.getString("expire_date");
// if (expireDateStr == null) return true;
// final DateTime expireDateTime = DateTime.parse(expireDateStr);
// final DateTime now = DateTime.now();
// print('expireDateTime : '+expireDateTime.toString());
// print('now : '+now.toString());
// // return DateTime.now().isAfter(expireDateTime);
// // Jika token kurang dari 1 menit lagi akan kedaluwarsa,
// // atau lebih dari = 2 menit, maka harus refresh
// return (expireDateTime.difference(now).inMinutes == 1) || (expireDateTime.difference(now).inMinutes >= 2);
// }
Future<bool> isTokenExpired() async {
final prefs = await SharedPreferences.getInstance();
final String? expireDateStr = prefs.getString("expire_date");
final bearerString = prefs.getString(Constant.bearerName);
print("📌 Expire Date dari SharedPreferences: $expireDateStr");
if (expireDateStr == null) {
print("❌ Expire date tidak ditemukan, dianggap expired.");
if (bearerString == null || bearerString == "null") {
print("BEARER STRING NULL");
return true;
}
DateTime? expireDateTime;
final xmodel = jsonDecode(bearerString);
if (xmodel == null) return true;
final String? expireDateStr = xmodel['expire_date'];
print("EXPIRE DATE $expireDateStr");
if (expireDateStr == null || expireDateStr.isEmpty) {
print("Token EXPIRED (Tidak Ada Tanggal Expire)");
return true; // Anggap expired jika tidak ada data
}
try {
expireDateTime = DateTime.parse(expireDateStr);
DateTime expiredDate = DateTime.parse(expireDateStr);
DateTime batasExpired = expiredDate.subtract(Duration(minutes: 3));
DateTime now = DateTime.now();
final bool expired = now.isAfter(batasExpired);
print(expired ? "Token EXPIRED (Perlu Refresh)" : "Token MASIH AKTIF");
return expired;
} catch (e) {
print("❌ Format expire_date tidak valid: $expireDateStr, Error: $e");
return true;
print("Token EXPIRED (Format Salah)");
return true; // Anggap expired jika terjadi error parsing
}
final DateTime now = DateTime.now();
final int diffInMinutes = expireDateTime.difference(now).inMinutes;
print("🕒 Expire date: $expireDateTime");
print("🕒 Waktu sekarang: $now");
print("⏳ Selisih waktu dalam menit: $diffInMinutes");
// Jika sudah lewat atau kurang dari 4 menit, anggap expired agar bisa di-refresh sebelum benar-benar habis
final bool expired = now.isAfter(expireDateTime) || diffInMinutes <= 4;
print(expired ? "🔴 Token EXPIRED (Perlu Refresh)" : "🟢 Token MASIH AKTIF");
// final bool expired = now.isAfter(expireDateTime);
return expired;
}