diff --git a/frontend/assets/images/cartes/icon_carte_absence.png b/frontend/assets/images/cartes/icon_carte_absence.png new file mode 100644 index 0000000..36593fe Binary files /dev/null and b/frontend/assets/images/cartes/icon_carte_absence.png differ diff --git a/frontend/assets/images/cartes/icon_carte_conges.png b/frontend/assets/images/cartes/icon_carte_conges.png new file mode 100644 index 0000000..95aaf7d Binary files /dev/null and b/frontend/assets/images/cartes/icon_carte_conges.png differ diff --git a/frontend/assets/images/cartes/icon_carte_maladie.png b/frontend/assets/images/cartes/icon_carte_maladie.png new file mode 100644 index 0000000..7eafb2d Binary files /dev/null and b/frontend/assets/images/cartes/icon_carte_maladie.png differ diff --git a/frontend/lib/models/carte_bulle.dart b/frontend/lib/models/carte_bulle.dart index 1fa1013..87032af 100644 --- a/frontend/lib/models/carte_bulle.dart +++ b/frontend/lib/models/carte_bulle.dart @@ -104,6 +104,21 @@ class CarteBulle { bool get isArretMaladie => typeCode == 'arret_maladie_am'; bool get isCongeAm => typeCode == 'conge_am'; + /// Icône dessin (haut droite) selon le type de bulle. + String? get iconAsset { + switch (typeCode) { + case 'conge_am': + return 'assets/images/cartes/icon_carte_conges.png'; + case 'arret_maladie_am': + return 'assets/images/cartes/icon_carte_maladie.png'; + case 'absence_enfant': + case 'absence_enfant_modif': + return 'assets/images/cartes/icon_carte_absence.png'; + default: + return null; + } + } + /// Fin de période (jour inclus). Null si dates absentes / invalides. DateTime? get dateFinJour { final raw = dateFin; diff --git a/frontend/lib/widgets/quotidien/cartes_feed.dart b/frontend/lib/widgets/quotidien/cartes_feed.dart index 12ed221..d1caeb7 100644 --- a/frontend/lib/widgets/quotidien/cartes_feed.dart +++ b/frontend/lib/widgets/quotidien/cartes_feed.dart @@ -383,15 +383,31 @@ class _BulleTile extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Text( - card.titreAffiche, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: GoogleFonts.merienda( - fontSize: 18, - fontWeight: FontWeight.w700, - color: QuotidienTheme.ink, - ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Text( + card.titreAffiche, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: GoogleFonts.merienda( + fontSize: 18, + fontWeight: FontWeight.w700, + color: QuotidienTheme.ink, + ), + ), + ), + if (card.iconAsset != null) ...[ + const SizedBox(width: 8), + Image.asset( + card.iconAsset!, + width: 44, + height: 44, + fit: BoxFit.contain, + ), + ], + ], ), if (card.dateDebut != null || card.dateFin != null) ...[ const SizedBox(height: 10),