import 'package:animated_splash_screen/animated_splash_screen.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:idrocap/storage/secure_store.dart'; import 'package:idrocap/storage/storage_keys.dart'; import '../constant/globals.dart' as globals; import '../login.dart'; class Splash extends StatefulWidget { @override State createState() => _SplashState(); } class _SplashState extends State { Widget _nextScreen = Login(); @override void initState() { super.initState(); _decideNext(); } Future _decideNext() async { try { final remember = await SecureStore.readBool(StorageKeys.rememberMe); final token = await SecureStore.read(StorageKeys.accessToken); if (remember && token != null && token.isNotEmpty) { globals.token = token; globals.headers = { "Content-Type": "application/json", "Authorization": "Bearer $token", }; setState(() { _nextScreen = const _GoToPratiche(); }); } else { setState(() { _nextScreen = Login(); }); } } catch (_) { setState(() { _nextScreen = Login(); }); } } @override Widget build(BuildContext context) { return PopScope( canPop: false, child: AnimatedSplashScreen( splashIconSize: 200, duration: 3000, splash: const Text( "Idrocap", style: TextStyle(color: Colors.white), ), nextScreen: _nextScreen, splashTransition: SplashTransition.fadeTransition, backgroundColor: HexColor(globals.colorAppbar), ), ); } } /// Schermata “ponte” che fa redirect alla route principale. /// Così non devi importare la pagina Pratiche e non rompi dipendenze. class _GoToPratiche extends StatefulWidget { const _GoToPratiche(); @override State<_GoToPratiche> createState() => _GoToPraticheState(); } class _GoToPraticheState extends State<_GoToPratiche> { @override void initState() { super.initState(); // dopo il primo frame, per evitare errori di navigation WidgetsBinding.instance.addPostFrameCallback((_) { Navigator.of(context).pushNamedAndRemoveUntil( 'pratiche', (route) => false, ); }); } @override Widget build(BuildContext context) { // schermata vuota mentre fa redirect return const Scaffold(body: SizedBox.shrink()); } }