import 'package:flutter/material.dart'; /// En-tête de section avec icône et support du thème. /// /// Ce widget fournit un en-tête cohérent pour les sections de l'application, /// utilisant automatiquement les couleurs du thème actif. /// /// **Usage:** /// ```dart /// SectionHeader( /// title: 'Événements', /// icon: Icons.event, /// ) /// ``` class SectionHeader extends StatelessWidget { /// Crée un nouveau [SectionHeader]. /// /// [title] Le titre de la section /// [icon] L'icône à afficher /// [textStyle] Style de texte personnalisé (optionnel) /// [iconColor] Couleur de l'icône (optionnel) /// [onTap] Fonction à exécuter lors du clic (optionnel) /// [trailing] Widget optionnel à afficher à droite const SectionHeader({ required this.title, required this.icon, super.key, this.textStyle, this.iconColor, this.onTap, this.trailing, }); /// Le titre de la section final String title; /// L'icône à afficher final IconData icon; /// Style de texte personnalisé (optionnel) final TextStyle? textStyle; /// Couleur de l'icône (optionnel) final Color? iconColor; /// Fonction à exécuter lors du clic (optionnel) final VoidCallback? onTap; /// Widget optionnel à afficher à droite final Widget? trailing; @override Widget build(BuildContext context) { final theme = Theme.of(context); final defaultTextStyle = theme.textTheme.titleLarge?.copyWith( fontWeight: FontWeight.bold, color: theme.colorScheme.onSurface, ); Widget headerContent = Row( children: [ Icon( icon, color: iconColor ?? theme.colorScheme.primary, size: 24, ), const SizedBox(width: 12), Expanded( child: Text( title, style: textStyle ?? defaultTextStyle, ), ), if (trailing != null) trailing!, ], ); if (onTap != null) { return InkWell( onTap: onTap, borderRadius: BorderRadius.circular(8), child: Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 4), child: headerContent, ), ); } return Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 4), child: headerContent, ); } }