fix(#146): densifier la liste et corriger l'affichage des responsables.

Les cartes compactes montrent plus d'enfants d'un coup ; le nom ne monopolise plus la largeur au détriment des infos.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
MARTIN Julien 2026-07-17 15:39:59 +02:00
parent 2d80ad0d7e
commit 3277f77846
4 changed files with 23 additions and 6 deletions

View File

@ -35,6 +35,7 @@ class AdminEnfantUserCard extends StatelessWidget {
final List<Widget> actions;
final VoidCallback? onCardTap;
final EdgeInsetsGeometry? margin;
final EdgeInsetsGeometry? contentPadding;
const AdminEnfantUserCard({
super.key,
@ -44,6 +45,7 @@ class AdminEnfantUserCard extends StatelessWidget {
this.actions = const [],
this.onCardTap,
this.margin,
this.contentPadding,
});
factory AdminEnfantUserCard.fromEnfant(
@ -52,6 +54,7 @@ class AdminEnfantUserCard extends StatelessWidget {
List<Widget> actions = const [],
VoidCallback? onCardTap,
EdgeInsetsGeometry? margin,
EdgeInsetsGeometry? contentPadding,
}) {
final parents = enfant.parentLinks
.map((l) => l.parentName ?? 'Parent')
@ -72,6 +75,7 @@ class AdminEnfantUserCard extends StatelessWidget {
actions: actions,
onCardTap: onCardTap,
margin: margin,
contentPadding: contentPadding,
);
}
@ -81,6 +85,7 @@ class AdminEnfantUserCard extends StatelessWidget {
List<Widget> actions = const [],
VoidCallback? onCardTap,
EdgeInsetsGeometry? margin,
EdgeInsetsGeometry? contentPadding,
}) {
return AdminEnfantUserCard(
title: child.fullName,
@ -94,6 +99,7 @@ class AdminEnfantUserCard extends StatelessWidget {
actions: actions,
onCardTap: onCardTap,
margin: margin,
contentPadding: contentPadding,
);
}
@ -107,6 +113,7 @@ class AdminEnfantUserCard extends StatelessWidget {
actions: actions,
onCardTap: onCardTap,
margin: margin,
contentPadding: contentPadding,
);
}
}

View File

@ -53,7 +53,11 @@ class AdminSelectEnfantModal {
return AdminEnfantUserCard.fromEnfant(
e,
onCardTap: onSelect,
margin: const EdgeInsets.only(bottom: 6),
margin: const EdgeInsets.only(bottom: 4),
contentPadding: const EdgeInsets.symmetric(
horizontal: 10,
vertical: 5,
),
actions: [
IconButton(
icon: const Icon(Icons.add_link),

View File

@ -52,8 +52,8 @@ class AdminSelectListModal<T> extends StatefulWidget {
this.emptyMessage = 'Aucun élément disponible',
this.noResultsMessage = 'Aucun résultat pour cette recherche',
this.modalWidth = 930,
this.cardExtent = 70,
this.minVisibleCards = 5,
this.cardExtent = 52,
this.minVisibleCards = 8,
this.toggleFilter,
});
@ -71,8 +71,8 @@ class AdminSelectListModal<T> extends StatefulWidget {
String emptyMessage = 'Aucun élément disponible',
String noResultsMessage = 'Aucun résultat pour cette recherche',
double modalWidth = 930,
double cardExtent = 70,
int minVisibleCards = 5,
double cardExtent = 52,
int minVisibleCards = 8,
AdminSelectToggleFilter<T>? toggleFilter,
}) {
return showDialog<T>(

View File

@ -15,6 +15,7 @@ class AdminUserCard extends StatefulWidget {
final String? vigilanceTooltip;
final VoidCallback? onCardTap;
final EdgeInsetsGeometry? margin;
final EdgeInsetsGeometry? contentPadding;
const AdminUserCard({
super.key,
@ -30,6 +31,7 @@ class AdminUserCard extends StatefulWidget {
this.vigilanceTooltip,
this.onCardTap,
this.margin,
this.contentPadding,
});
@override
@ -69,7 +71,8 @@ class _AdminUserCardState extends State<AdminUserCard> {
side: BorderSide(color: widget.borderColor ?? Colors.grey.shade300),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 9),
padding: widget.contentPadding ??
const EdgeInsets.symmetric(horizontal: 12, vertical: 9),
child: Row(
children: [
_buildAvatar(avatarUrl),
@ -88,7 +91,10 @@ class _AdminUserCardState extends State<AdminUserCard> {
Expanded(
child: Row(
children: [
// flex: 0 largeur du nom ; le reste va aux infos
// (évite le partage 50/50 qui tronque « Responsables »).
Flexible(
flex: 0,
fit: FlexFit.loose,
child: Text(
widget.title.isNotEmpty ? widget.title : 'Sans nom',