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

@@ -3,6 +3,7 @@ import 'package:flutter_animate/flutter_animate.dart';
import 'package:go_router/go_router.dart';
import '../../../../l10n/app_localizations.dart';
import '../../../../core/services/auth_service.dart';
import '../../../../core/services/session_service.dart';
import '../../../../shared/presentation/widgets/custom_notification.dart';
class LoginPage extends StatefulWidget {
@@ -18,6 +19,7 @@ class _LoginPageState extends State<LoginPage> {
final _passwordController = TextEditingController();
bool _isLoading = false;
bool _obscurePassword = true;
bool _rememberMe = false;
@override
void dispose() {
@@ -26,6 +28,26 @@ class _LoginPageState extends State<LoginPage> {
super.dispose();
}
@override
void initState() {
super.initState();
_loadSavedSession();
}
void _loadSavedSession() async {
try {
final sessionData = await SessionService.getCurrentSession();
if (sessionData['email'] != null) {
setState(() {
_emailController.text = sessionData['email'];
_rememberMe = sessionData['rememberMe'] ?? false;
});
}
} catch (e) {
print('DEBUG: Error loading saved session: $e');
}
}
void _handleLogin() async {
if (_formKey.currentState!.validate()) {
setState(() {
@@ -45,7 +67,16 @@ class _LoginPageState extends State<LoginPage> {
password: password,
);
print('DEBUG: Login Firebase bem-sucedido, navegando para dashboard');
print('DEBUG: Login Firebase bem-sucedido, salvando sessão');
// Save session based on remember me preference
await SessionService.saveSession(
rememberMe: _rememberMe,
email: email,
displayName: AuthService.currentUser?.displayName,
);
print('DEBUG: Sessão salva, navegando para dashboard');
// Navigate to student dashboard after successful login
if (mounted) {
@@ -282,7 +313,41 @@ class _LoginPageState extends State<LoginPage> {
return null;
},
),
const SizedBox(height: 24),
const SizedBox(height: 12),
// Remember me checkbox
Row(
children: [
Checkbox(
value: _rememberMe,
onChanged: (bool? value) {
setState(() {
_rememberMe = value ?? false;
});
},
activeColor: const Color(0xFF82C9BD),
checkColor: Colors.white,
),
GestureDetector(
onTap: () {
setState(() {
_rememberMe = !_rememberMe;
});
},
child: Text(
'Manter sessão iniciada',
style: TextStyle(
color: const Color(0xFF2D3748),
fontSize: 14,
fontWeight: _rememberMe
? FontWeight.w500
: FontWeight.normal,
),
),
),
],
),
const SizedBox(height: 12),
// Login button
SizedBox(