import 'package:wanisdriver/Screen/HomeScreen.dart'; import 'package:wanisdriver/Screen/LoginScreen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:get/get_core/src/get_main.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../Provider/authentification_provider.dart'; import '../Provider/utils_provider.dart'; import '../Provider/utils_singleton.dart'; import '../config/FilledWaveRingPainter.dart'; import 'dart:math' as math; import '../config/constants/app_constant.dart'; import '../routes/app_routes.dart'; import '../services/ride_socket_service_manager.dart'; import '../utils/colors.dart'; import 'location_screen.dart'; class SplashScreen extends StatefulWidget { @override _SplashScreenState createState() => _SplashScreenState(); } class _SplashScreenState extends State with SingleTickerProviderStateMixin { late AnimationController _controller; bool _isInitializing = true; late final UtilsProvider utilsProvider; late final AuthProvider authProvider; @override void initState() { super.initState(); _controller = AnimationController( duration: const Duration(seconds: 6), // Smooth, slower rotation vsync: this, )..repeat(); _performInitializationTasks(); } @override void dispose() { _controller.dispose(); super.dispose(); } Future _performInitializationTasks() async { _setInitializing(true); try { utilsProvider = context.read(); authProvider = context.read(); final prefs = await SharedPreferences.getInstance(); await Future.wait([ utilsProvider.initPlatformState(), utilsProvider.getIpAddress(), ]); await authProvider.getLoginData(context); final isSecondTime = prefs.getBool("isSecondTime") ?? false; if (await _isUserTokenValid(prefs)) { await RideSocketServiceManager.startService(username: utils.user!.username!, pubKey: pubKey, subKey: subKey); if (isSecondTime) { prefs.setBool("isSecondTime",true); Get.toNamed(AppRoutes.allowLocation); } else { Get.toNamed(AppRoutes.main); } return; } else { prefs.setString("token", ""); Get.offAll(() => LoginScreen()); } } catch (e) { print("Initialization error: $e"); } finally { _setInitializing(false); } } void _setInitializing(bool value) { if (_isInitializing != value) { setState(() { _isInitializing = value; }); } } Future _isUserTokenValid(SharedPreferences prefs) async { var tokenData = prefs.getString("token"); bool tokenverif = tokenData != null && tokenData.isNotEmpty && tokenData != "InvalidToken"; bool fetchprofile =await authProvider.fetchProfile(); return fetchprofile && tokenverif; } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.white, body: Stack( fit: StackFit.expand, children: [ Center( child: Stack( alignment: Alignment.center, children: [ SvgPicture.asset("assets/images/logosplash2.svg",width: 250), ], ), ), ], ), ); } }