Manter sessão e loading

This commit is contained in:
2026-05-08 11:53:18 +01:00
parent c1d1a0fce1
commit 490cdf5aab
5 changed files with 279 additions and 11 deletions

View File

@@ -2,6 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:go_router/go_router.dart';
import '../../../../core/theme/app_colors.dart';
import '../../../../core/services/auth_service.dart';
import '../../../../core/services/session_service.dart';
import '../../../../l10n/app_localizations.dart';
class SplashPage extends StatefulWidget {
@@ -15,13 +17,58 @@ class _SplashPageState extends State<SplashPage> {
@override
void initState() {
super.initState();
_navigateToRoleSelection();
_checkAuthenticationAndNavigate();
}
void _navigateToRoleSelection() async {
await Future.delayed(const Duration(seconds: 3));
if (mounted) {
context.go('/role-selection');
void _checkAuthenticationAndNavigate() async {
try {
print('DEBUG: Checking authentication state...');
// Always show splash for full 3 seconds for complete animation
await Future.delayed(const Duration(seconds: 3));
// Check if user is currently authenticated
final currentUser = AuthService.currentUser;
if (currentUser != null) {
print('DEBUG: User already authenticated: ${currentUser.email}');
// Update session with current user if needed
await SessionService.updateSessionWithCurrentUser();
// Navigate to dashboard
if (mounted) {
print('DEBUG: Navigating to student dashboard');
context.go('/student-dashboard');
}
return;
}
// Check if user should be auto-logged in
final sessionData = await SessionService.shouldAutoLogin();
if (sessionData['shouldAutoLogin'] == true) {
print('DEBUG: Auto-login available for: ${sessionData['email']}');
if (mounted) {
// Navigate to login page with pre-filled data
print('DEBUG: Navigating to login for auto-login');
context.go('/login');
}
} else {
print('DEBUG: No auto-login available, going to role selection');
if (mounted) {
context.go('/role-selection');
}
}
} catch (e) {
print('DEBUG: Error in authentication check: $e');
// Fallback to role selection
if (mounted) {
context.go('/role-selection');
}
}
}