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

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());
}
}