feat(#96): harmoniser les icones de rôles en liste et modale

Uniformise l'identité visuelle des rôles (admin, super admin, gestionnaire, parent) avec icônes dédiées dans les listes et la modale, et affiche le téléphone dans la ligne admin en retirant le rôle redondant.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
MARTIN Julien 2026-02-24 22:31:23 +01:00
parent 2645cf1cd6
commit d14550a1cf
4 changed files with 59 additions and 10 deletions

View File

@ -43,6 +43,46 @@ class _AdminUserFormDialogState extends State<AdminUserFormDialog> {
widget.initialUser?.role.toLowerCase() == 'super_admin'; widget.initialUser?.role.toLowerCase() == 'super_admin';
bool get _isLockedAdminIdentity => bool get _isLockedAdminIdentity =>
_isEditMode && widget.adminMode && _isSuperAdminTarget; _isEditMode && widget.adminMode && _isSuperAdminTarget;
String get _targetRoleKey {
if (widget.initialUser != null) {
return widget.initialUser!.role.toLowerCase();
}
return widget.adminMode ? 'administrateur' : 'gestionnaire';
}
String get _targetRoleLabel {
switch (_targetRoleKey) {
case 'super_admin':
return 'Super administrateur';
case 'administrateur':
return 'Administrateur';
case 'gestionnaire':
return 'Gestionnaire';
case 'assistante_maternelle':
return 'Assistante maternelle';
case 'parent':
return 'Parent';
default:
return 'Utilisateur';
}
}
IconData get _targetRoleIcon {
switch (_targetRoleKey) {
case 'super_admin':
return Icons.verified_user_outlined;
case 'administrateur':
return Icons.admin_panel_settings_outlined;
case 'gestionnaire':
return Icons.assignment_ind_outlined;
case 'assistante_maternelle':
return Icons.child_care_outlined;
case 'parent':
return Icons.supervisor_account_outlined;
default:
return Icons.person_outline;
}
}
@override @override
void initState() { void initState() {
@ -371,19 +411,23 @@ class _AdminUserFormDialogState extends State<AdminUserFormDialog> {
return AlertDialog( return AlertDialog(
title: Row( title: Row(
children: [ children: [
CircleAvatar(
radius: 16,
backgroundColor: const Color(0xFFEDE5FA),
child: Icon(
_targetRoleIcon,
size: 20,
color: const Color(0xFF6B3FA0),
),
),
const SizedBox(width: 8),
Expanded( Expanded(
child: Text( child: Text(
_isEditMode _isEditMode
? (widget.readOnly ? (widget.readOnly
? (widget.adminMode ? 'Consulter un "$_targetRoleLabel"'
? 'Consulter un administrateur' : 'Modifier un "$_targetRoleLabel"')
: 'Consulter un gestionnaire') : 'Créer un "$_targetRoleLabel"',
: (widget.adminMode
? 'Modifier un administrateur'
: 'Modifier un gestionnaire'))
: (widget.adminMode
? 'Créer un administrateur'
: 'Créer un gestionnaire'),
), ),
), ),
if (_isEditMode && !widget.readOnly) if (_isEditMode && !widget.readOnly)

View File

@ -118,9 +118,12 @@ class _AdminManagementWidgetState extends State<AdminManagementWidget> {
final canEdit = _canEditAdmin(user); final canEdit = _canEditAdmin(user);
return AdminUserCard( return AdminUserCard(
title: user.fullName, title: user.fullName,
fallbackIcon: isSuperAdmin
? Icons.verified_user_outlined
: Icons.manage_accounts_outlined,
subtitleLines: [ subtitleLines: [
user.email, user.email,
'Rôle : ${user.role}', 'Téléphone : ${user.telephone?.trim().isNotEmpty == true ? user.telephone : 'Non renseigné'}',
], ],
avatarUrl: user.photoUrl, avatarUrl: user.photoUrl,
borderColor: isSuperAdmin borderColor: isSuperAdmin

View File

@ -86,6 +86,7 @@ class _GestionnaireManagementWidgetState
final user = filteredGestionnaires[index]; final user = filteredGestionnaires[index];
return AdminUserCard( return AdminUserCard(
title: user.fullName, title: user.fullName,
fallbackIcon: Icons.assignment_ind_outlined,
avatarUrl: user.photoUrl, avatarUrl: user.photoUrl,
subtitleLines: [ subtitleLines: [
user.email, user.email,

View File

@ -75,6 +75,7 @@ class _ParentManagementWidgetState extends State<ParentManagementWidget> {
final parent = filteredParents[index]; final parent = filteredParents[index];
return AdminUserCard( return AdminUserCard(
title: parent.user.fullName, title: parent.user.fullName,
fallbackIcon: Icons.supervisor_account_outlined,
avatarUrl: parent.user.photoUrl, avatarUrl: parent.user.photoUrl,
subtitleLines: [ subtitleLines: [
parent.user.email, parent.user.email,