84 lines
2.6 KiB
Dart
84 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:p_tits_pas/models/user.dart';
|
||
import 'package:p_tits_pas/services/auth_service.dart';
|
||
import 'package:p_tits_pas/widgets/quotidien/quotidien_shell.dart';
|
||
import 'package:p_tits_pas/widgets/quotidien/quotidien_theme.dart';
|
||
|
||
/// Tableau de bord parent — coquille 3 colonnes quotidien (#166).
|
||
/// Métier cartes / blog / messagerie : tickets C/D/E.
|
||
class ParentDashboardScreen extends StatefulWidget {
|
||
const ParentDashboardScreen({super.key});
|
||
|
||
@override
|
||
State<ParentDashboardScreen> createState() => _ParentDashboardScreenState();
|
||
}
|
||
|
||
class _ParentDashboardScreenState extends State<ParentDashboardScreen> {
|
||
QuotidienNavSection _section = QuotidienNavSection.liaison;
|
||
AppUser? _user;
|
||
|
||
@override
|
||
void initState() {
|
||
super.initState();
|
||
_loadUser();
|
||
}
|
||
|
||
Future<void> _loadUser() async {
|
||
final user = await AuthService.getCurrentUser();
|
||
if (mounted) setState(() => _user = user);
|
||
}
|
||
|
||
String get _displayName {
|
||
final n = _user?.fullName.trim() ?? '';
|
||
if (n.isNotEmpty) return n;
|
||
final email = _user?.email.trim() ?? '';
|
||
if (email.isNotEmpty) return email.split('@').first;
|
||
return 'Parent';
|
||
}
|
||
|
||
void _soon(String label) {
|
||
ScaffoldMessenger.of(context).showSnackBar(
|
||
SnackBar(content: Text('$label — à venir')),
|
||
);
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return QuotidienShell(
|
||
selectedSection: _section,
|
||
onSectionSelected: (s) => setState(() => _section = s),
|
||
userDisplayName: _displayName,
|
||
userEmail: _user?.email,
|
||
onProfileTap: () => _soon('Profil'),
|
||
onSearchAmTap: () => _soon('Recherche AM'),
|
||
onSettingsTap: () => _soon('Paramètres'),
|
||
leftColumn: const QuotidienColumnPlaceholder(
|
||
title: 'Cartes',
|
||
subtitle:
|
||
'Couple enfant–nounou et flux de cartes\n(à brancher — tickets #167 / #173).',
|
||
icon: Icons.style_outlined,
|
||
),
|
||
centerColumn: const QuotidienColumnPlaceholder(
|
||
title: 'Blog',
|
||
subtitle:
|
||
'Fil du quotidien (affichage par défaut)\n(à brancher — ticket #178).',
|
||
icon: Icons.auto_stories_outlined,
|
||
),
|
||
rightColumn: const QuotidienColumnPlaceholder(
|
||
title: 'Messagerie',
|
||
subtitle:
|
||
'Mess. AM · Mess. RPE\n(à brancher — ticket #184).',
|
||
icon: Icons.chat_bubble_outline,
|
||
),
|
||
agendaBody: const QuotidienStubPage(
|
||
title: 'Agenda',
|
||
message: 'Agenda — contenu à venir (stub #187).',
|
||
),
|
||
contratBody: const QuotidienStubPage(
|
||
title: 'Contrat',
|
||
message: 'Contrat — contenu à venir (stub #187).',
|
||
),
|
||
);
|
||
}
|
||
}
|