2024-09-23 09:34:20 +00:00
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
|
|
import 'package:agrilink_vocpro/core/route/app_route.dart';
|
2024-10-16 01:34:13 +00:00
|
|
|
import 'package:flutter/foundation.dart';
|
2024-09-05 03:46:07 +00:00
|
|
|
import 'package:flutter/material.dart';
|
2024-09-23 09:34:20 +00:00
|
|
|
import 'package:go_router/go_router.dart';
|
2024-10-16 01:34:13 +00:00
|
|
|
import 'package:jwt_decoder/jwt_decoder.dart';
|
|
|
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
2024-09-05 03:46:07 +00:00
|
|
|
|
|
|
|
|
class SplashScreen extends StatefulWidget {
|
|
|
|
|
const SplashScreen({super.key});
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
State<SplashScreen> createState() => _SplashScreenState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _SplashScreenState extends State<SplashScreen> {
|
2024-09-23 09:34:20 +00:00
|
|
|
bool isLoggedIn = false;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
super.initState();
|
|
|
|
|
_initialize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> _initialize() async {
|
2024-10-16 01:34:13 +00:00
|
|
|
bool isLoggedIn = await _checkLoginStatus();
|
2024-09-23 09:34:20 +00:00
|
|
|
_navigateAfterSplash(isLoggedIn);
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-16 01:34:13 +00:00
|
|
|
Future<bool> _checkLoginStatus() async {
|
|
|
|
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
2024-09-23 09:34:20 +00:00
|
|
|
|
2024-10-16 01:34:13 +00:00
|
|
|
if (prefs.getKeys().isEmpty) return false;
|
2024-09-23 09:34:20 +00:00
|
|
|
|
2024-10-16 01:34:13 +00:00
|
|
|
if (prefs.getBool('isLoggedIn') == true) {
|
|
|
|
|
String? token = prefs.getString('jwtToken');
|
2024-09-23 09:34:20 +00:00
|
|
|
|
2024-10-16 01:34:13 +00:00
|
|
|
if (token != null && !JwtDecoder.isExpired(token)) {
|
|
|
|
|
if (kDebugMode) {
|
|
|
|
|
print('Token : ${prefs.getString('token')}');
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
prefs.remove('token');
|
|
|
|
|
prefs.remove('jwtToken');
|
|
|
|
|
prefs.remove('username');
|
|
|
|
|
prefs.remove('email');
|
|
|
|
|
prefs.remove('fullName');
|
|
|
|
|
prefs.remove('isLoggedIn');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-09-23 09:34:20 +00:00
|
|
|
|
2024-10-16 01:34:13 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
2024-09-23 09:34:20 +00:00
|
|
|
|
|
|
|
|
void _navigateAfterSplash(bool isLoggedIn) {
|
|
|
|
|
Timer(const Duration(seconds: 2), () {
|
|
|
|
|
if (isLoggedIn == true) {
|
|
|
|
|
context.go(AppRoute.dashboard);
|
|
|
|
|
} else {
|
|
|
|
|
context.go(AppRoute.login);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-05 03:46:07 +00:00
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
2024-09-23 09:34:20 +00:00
|
|
|
return Scaffold(
|
|
|
|
|
body: SafeArea(
|
|
|
|
|
child: Center(
|
|
|
|
|
child: Image.asset(
|
|
|
|
|
'assets/images/app_logo.png',
|
|
|
|
|
width: 80,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
2024-09-05 03:46:07 +00:00
|
|
|
}
|
|
|
|
|
}
|