Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
97 righe
2.4 KiB
97 righe
2.4 KiB
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<Splash> createState() => _SplashState(); |
|
} |
|
|
|
class _SplashState extends State<Splash> { |
|
Widget _nextScreen = Login(); |
|
|
|
@override |
|
void initState() { |
|
super.initState(); |
|
_decideNext(); |
|
} |
|
|
|
Future<void> _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()); |
|
} |
|
}
|
|
|