step 22 : no_login -> login dan list riwayat pake JWT done, masih belum done di refreshToken karena check waktu expired salah
This commit is contained in:
@@ -1,5 +1,59 @@
|
||||
import 'package:jiffy/jiffy.dart';
|
||||
import 'package:shared_preferences/shared_preferences.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");
|
||||
|
||||
print("📌 Expire Date dari SharedPreferences: $expireDateStr");
|
||||
|
||||
if (expireDateStr == null) {
|
||||
print("❌ Expire date tidak ditemukan, dianggap expired.");
|
||||
return true;
|
||||
}
|
||||
|
||||
DateTime? expireDateTime;
|
||||
try {
|
||||
expireDateTime = DateTime.parse(expireDateStr);
|
||||
} catch (e) {
|
||||
print("❌ Format expire_date tidak valid: $expireDateStr, Error: $e");
|
||||
return true;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../screen/no-login-home/no_login_home_screen.dart';
|
||||
import '../screen/no-login-splash/no_login_splash_screen.dart';
|
||||
import '../screen/no-login/no_login_screen.dart';
|
||||
|
||||
import '../screen/home/home_screen.dart';
|
||||
import '../screen/login/login_screen.dart';
|
||||
@@ -12,6 +15,12 @@ const homeRoute = "/homeRoute";
|
||||
const scanRoute = "/scanRoute";
|
||||
const editScanRoute = "/editScanRoute";
|
||||
|
||||
const noLoginSplashRoute = "/noLoginSplashRoute";
|
||||
const noLoginRoute = "/noLoginRoute";
|
||||
const noLoginHomeRoute = "/noLoginHomeRoute";
|
||||
const noLoginScanRoute = "/noLoginScanRoute";
|
||||
const noLoginEditScanRoute = "/noLoginEditScanRoute";
|
||||
|
||||
class AppRoute {
|
||||
static Route<dynamic> generateRoute(RouteSettings settings) {
|
||||
// splash screen
|
||||
@@ -25,6 +34,16 @@ class AppRoute {
|
||||
});
|
||||
}
|
||||
|
||||
if (settings.name == noLoginSplashRoute) {
|
||||
return MaterialPageRoute(builder: (context) {
|
||||
return MediaQuery(
|
||||
data: MediaQuery.of(context).copyWith(
|
||||
textScaler: TextScaler.linear(1.0), padding: EdgeInsets.all(0)),
|
||||
child: NoLoginSplashScreen(),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// login screen
|
||||
if (settings.name == loginRoute) {
|
||||
return MaterialPageRoute(builder: (context) {
|
||||
@@ -36,6 +55,16 @@ class AppRoute {
|
||||
});
|
||||
}
|
||||
|
||||
if (settings.name == noLoginRoute) {
|
||||
return MaterialPageRoute(builder: (context) {
|
||||
return MediaQuery(
|
||||
data: MediaQuery.of(context).copyWith(
|
||||
textScaler: TextScaler.linear(1.0), padding: EdgeInsets.all(0)),
|
||||
child: NoLoginScreen(),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// home screen
|
||||
if (settings.name == homeRoute) {
|
||||
return MaterialPageRoute(builder: (context) {
|
||||
@@ -47,6 +76,16 @@ class AppRoute {
|
||||
});
|
||||
}
|
||||
|
||||
if (settings.name == noLoginHomeRoute) {
|
||||
return MaterialPageRoute(builder: (context) {
|
||||
return MediaQuery(
|
||||
data: MediaQuery.of(context).copyWith(
|
||||
textScaler: TextScaler.linear(1.0), padding: EdgeInsets.all(0)),
|
||||
child: NoLoginHomeScreen(),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// scan screen
|
||||
if (settings.name == scanRoute) {
|
||||
return MaterialPageRoute(builder: (context) {
|
||||
@@ -74,7 +113,7 @@ class AppRoute {
|
||||
data: MediaQuery.of(context).copyWith(
|
||||
padding: const EdgeInsets.all(0),
|
||||
textScaler: TextScaler.linear(1.0)),
|
||||
child: SplashScreen(),
|
||||
child: NoLoginSplashScreen(),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user