import 'package:wanisclient/screens/login_screnn.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 '../providers/authentification_provider.dart'; import '../providers/utils_provider.dart'; import '../providers/utils_singleton.dart'; import '../routes/app_routes.dart'; import '../services/Sockets/PubNubManager.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(); // Continuous rotation _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(); // Check if user has seen onboarding first final bool hasSeenOnboarding = prefs.getBool('set_onboarding_Completed') ?? false; if (!hasSeenOnboarding) { // We will call the update check from the onboarding screen itself Get.offAllNamed(AppRoutes.onboardingFirstScreen); return; } // If onboarding has been seen, continue with token and login checks await Future.wait([ utilsProvider.initPlatformState(), utilsProvider.getIpAddress(), ]); await authProvider.getLoginData(context); final isSecondTime = prefs.getBool("isSecondTime") ?? false; if (await _isUserTokenValid(prefs)) { final userContext = UserContext(username: utils.user!.username!); context.read().init(userContext); if (isSecondTime) { prefs.setBool("isSecondTime", true); Get.toNamed(AppRoutes.allowLocation); } else { Get.toNamed(AppRoutes.home); } return; } else { prefs.setString("token", ""); Get.offAll(() => const 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"; utils.updatetoken(tokenData ?? "InvalidToken"); bool fetchprofile = await authProvider.fetchProfile(); return fetchprofile && tokenverif; } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFF5E17EB), body: Stack( fit: StackFit.expand, children: [ // Background image // Image.asset( // 'assets/images/background_image_splash.png', // Replace with your actual background image asset path // fit: BoxFit.cover, // ), // Center logo with rotating glowing wave around it Center( child: Stack( alignment: Alignment.center, children: [ SvgPicture.asset( "assets/images/wanislogo.svg", width: 300, ), ], ), ), ], ), ); } }