refactor(#93): extraire un widget UserList réutilisable

Centralise le pattern d'affichage des listes utilisateurs pour garantir une UI homogène entre gestionnaires, parents, assistantes maternelles et administrateurs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-23 17:59:03 +01:00
co-authored by Cursor
parent ac3178903d
commit bc8362bdb7
7 changed files with 352 additions and 238 deletions
@@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
import 'package:p_tits_pas/models/parent_model.dart';
import 'package:p_tits_pas/services/user_service.dart';
import 'package:p_tits_pas/widgets/admin/common/admin_detail_modal.dart';
import 'package:p_tits_pas/widgets/admin/common/admin_list_state.dart';
import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart';
import 'package:p_tits_pas/widgets/admin/common/user_list.dart';
class ParentManagementWidget extends StatefulWidget {
final String searchQuery;
@@ -65,42 +65,32 @@ class _ParentManagementWidgetState extends State<ParentManagementWidget> {
return matchesName && matchesStatus;
}).toList();
return Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AdminListState(
isLoading: _isLoading,
error: _error,
isEmpty: filteredParents.isEmpty,
emptyMessage: 'Aucun parent trouvé.',
list: ListView.builder(
itemCount: filteredParents.length,
itemBuilder: (context, index) {
final parent = filteredParents[index];
return AdminUserCard(
title: parent.user.fullName,
avatarUrl: parent.user.photoUrl,
subtitleLines: [
parent.user.email,
'Statut : ${_displayStatus(parent.user.statut)} | Enfants : ${parent.childrenCount}',
],
actions: [
IconButton(
icon: const Icon(Icons.edit),
tooltip: 'Modifier',
onPressed: () {
_openParentDetails(parent);
},
),
],
);
return UserList(
isLoading: _isLoading,
error: _error,
isEmpty: filteredParents.isEmpty,
emptyMessage: 'Aucun parent trouvé.',
itemCount: filteredParents.length,
itemBuilder: (context, index) {
final parent = filteredParents[index];
return AdminUserCard(
title: parent.user.fullName,
avatarUrl: parent.user.photoUrl,
subtitleLines: [
parent.user.email,
'Statut : ${_displayStatus(parent.user.statut)} | Enfants : ${parent.childrenCount}',
],
actions: [
IconButton(
icon: const Icon(Icons.edit),
tooltip: 'Modifier',
onPressed: () {
_openParentDetails(parent);
},
),
),
],
),
],
);
},
);
}