Partage AdminEnfantUserCard entre fiche parent et onglet Enfants, enrichit ParentChildSummary (photo, dates) et compacte la modale parent. Co-authored-by: Cursor <cursoragent@cursor.com>
108 lines
2.7 KiB
Dart
108 lines
2.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:p_tits_pas/models/enfant_admin_model.dart';
|
|
import 'package:p_tits_pas/models/parent_child_summary.dart';
|
|
import 'package:p_tits_pas/utils/date_display_utils.dart';
|
|
import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart';
|
|
|
|
String enfantStatusLabel(String status) {
|
|
switch (status) {
|
|
case 'a_naitre':
|
|
return 'À naître';
|
|
case 'actif':
|
|
return 'Actif';
|
|
case 'scolarise':
|
|
return 'Scolarisé';
|
|
default:
|
|
return status;
|
|
}
|
|
}
|
|
|
|
List<String> enfantAdminSubtitleLines({
|
|
required String status,
|
|
String? birthDate,
|
|
String? dueDate,
|
|
List<String> extra = const [],
|
|
}) {
|
|
final lines = <String>[];
|
|
final age = formatChildAgeLabel(
|
|
birthDate: birthDate,
|
|
dueDate: dueDate,
|
|
status: status,
|
|
);
|
|
if (age.isNotEmpty) lines.add(age);
|
|
if (status.isNotEmpty) {
|
|
lines.add('Statut : ${enfantStatusLabel(status)}');
|
|
}
|
|
lines.addAll(extra);
|
|
return lines;
|
|
}
|
|
|
|
/// Carte enfant admin (photo, nom, âge) — même rendu onglet Enfants / fiche parent.
|
|
class AdminEnfantUserCard extends StatelessWidget {
|
|
final String title;
|
|
final String? photoUrl;
|
|
final List<String> subtitleLines;
|
|
final List<Widget> actions;
|
|
|
|
const AdminEnfantUserCard({
|
|
super.key,
|
|
required this.title,
|
|
this.photoUrl,
|
|
required this.subtitleLines,
|
|
this.actions = const [],
|
|
});
|
|
|
|
factory AdminEnfantUserCard.fromEnfant(
|
|
EnfantAdminModel enfant, {
|
|
List<String> extraSubtitleLines = const [],
|
|
List<Widget> actions = const [],
|
|
}) {
|
|
final parents = enfant.parentLinks
|
|
.map((l) => l.parentName ?? 'Parent')
|
|
.join(', ');
|
|
return AdminEnfantUserCard(
|
|
title: enfant.fullName,
|
|
photoUrl: enfant.photoUrl,
|
|
subtitleLines: enfantAdminSubtitleLines(
|
|
status: enfant.status,
|
|
birthDate: enfant.birthDate,
|
|
dueDate: enfant.dueDate,
|
|
extra: [
|
|
if (parents.isNotEmpty) 'Responsables : $parents',
|
|
...extraSubtitleLines,
|
|
],
|
|
),
|
|
actions: actions,
|
|
);
|
|
}
|
|
|
|
factory AdminEnfantUserCard.fromSummary(
|
|
ParentChildSummary child, {
|
|
List<String> extraSubtitleLines = const [],
|
|
List<Widget> actions = const [],
|
|
}) {
|
|
return AdminEnfantUserCard(
|
|
title: child.fullName,
|
|
photoUrl: child.photoUrl,
|
|
subtitleLines: enfantAdminSubtitleLines(
|
|
status: child.status,
|
|
birthDate: child.birthDate,
|
|
dueDate: child.dueDate,
|
|
extra: extraSubtitleLines,
|
|
),
|
|
actions: actions,
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return AdminUserCard(
|
|
title: title,
|
|
fallbackIcon: Icons.child_care_outlined,
|
|
avatarUrl: photoUrl,
|
|
subtitleLines: subtitleLines,
|
|
actions: actions,
|
|
);
|
|
}
|
|
}
|