import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../../../../core/services/auth_service.dart'; import '../../../../core/theme/app_theme_extension.dart'; import '../../../../core/routing/app_router.dart'; import '../widgets/teacher_hero_widget.dart'; import '../widgets/teacher_quick_actions_widget.dart'; import '../widgets/teacher_classes_list_widget.dart'; class TeacherDashboardPage extends StatefulWidget { const TeacherDashboardPage({super.key}); /// Clear the cached user name (call when name is updated in settings) static void clearCachedUserName() { _cachedUserName = null; } /// Cached user name to prevent flickering static String? _cachedUserName; @override State createState() => _TeacherDashboardPageState(); } class _TeacherDashboardPageState extends State { String _userName = 'Professor'; @override void initState() { super.initState(); // Use cached name if available, otherwise load data if (TeacherDashboardPage._cachedUserName != null) { _userName = TeacherDashboardPage._cachedUserName!; } else { _checkRoleAndLoadData(); } } Future _checkRoleAndLoadData() async { final user = AuthService.currentUser; if (user == null) { if (mounted) context.go('/role-selection'); return; } final role = await AuthService.getUserRole(user.uid); if (role != 'teacher') { if (mounted) { context.go('/role-selection'); } return; } await _loadUserData(); } Future _loadUserData() async { try { final user = AuthService.currentUser; if (user != null) { print('DEBUG: Loading teacher data for dashboard'); print('DEBUG: User email: ${user.email}'); print('DEBUG: User displayName before reload: ${user.displayName}'); await user.reload(); final updatedUser = AuthService.currentUser; if (updatedUser != null) { print( 'DEBUG: User displayName after reload: ${updatedUser.displayName}', ); String displayName = updatedUser.displayName ?? ''; print('DEBUG: Initial displayName value: "$displayName"'); if (displayName.isEmpty && updatedUser.email != null) { displayName = updatedUser.email!.split('@')[0]; print('DEBUG: Extracted name from email: "$displayName"'); } if (displayName.isEmpty) { displayName = 'Professor'; print('DEBUG: Using fallback "Professor"'); } print('DEBUG: Final displayName to use: "$displayName"'); setState(() { _userName = displayName; TeacherDashboardPage._cachedUserName = displayName; }); } } } catch (e) { print('DEBUG: Error loading user data: $e'); } } @override Widget build(BuildContext context) { final themeExtras = AppThemeExtras.of(context); final headerColor = themeExtras.dashboardHeaderTextColor; return Scaffold( body: Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: themeExtras.dashboardBackgroundGradient, stops: themeExtras.dashboardGradientStops, ), ), child: SafeArea( top: false, child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.only( left: 24.0, right: 24.0, bottom: 28.0, top: 52.0, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Header with logout and settings Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Bem-vindo, $_userName!', style: TextStyle( color: headerColor, fontSize: 28, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( 'Painel de Gestão de Conteúdo', style: TextStyle( color: headerColor, fontSize: 16, fontWeight: FontWeight.w300, ), ), ], ), ), IconButton( icon: Icon(Icons.settings, color: headerColor), onPressed: () { AppRouter.goToSettings(context); }, tooltip: 'Configurações', ), IconButton( icon: Icon(Icons.logout, color: headerColor), onPressed: () async { await AuthService.signOut(); if (mounted) { context.go('/login'); } }, tooltip: 'Sair', ), ], ), const SizedBox(height: 32), // Hero Section - Class Overview TeacherHeroWidget(userName: _userName), const SizedBox(height: 24), // Quick Actions Section const TeacherQuickActionsWidget(), const SizedBox(height: 24), // Classes List Section const TeacherClassesListWidget(), const SizedBox(height: 40), ], ), ), ), ), ), ); } }