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

View File

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

View File

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

View File

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