import 'package:flutter/material.dart'; /// Sous-barre : [À valider] | Gestionnaires | Parents | Assistantes maternelles | [Administrateurs]. /// [tabLabels] : liste des libellés d'onglets (ex. avec « À valider » en premier si dossiers en attente). /// [subTabCount] = 3 pour masquer Administrateurs (dashboard gestionnaire). class DashboardUserManagementSubBar extends StatelessWidget { final int selectedSubIndex; final ValueChanged onSubTabChange; final TextEditingController searchController; final String searchHint; final Widget? filterControl; final VoidCallback? onAddPressed; final String addLabel; final int subTabCount; /// Si non null, utilisé à la place des labels par défaut (ex. ['À valider', 'Parents', ...]). final List? tabLabels; static const List _defaultTabLabels = [ 'Gestionnaires', 'Parents', 'Assistantes maternelles', 'Administrateurs', ]; const DashboardUserManagementSubBar({ Key? key, required this.selectedSubIndex, required this.onSubTabChange, required this.searchController, required this.searchHint, this.filterControl, this.onAddPressed, this.addLabel = '+ Ajouter', this.subTabCount = 4, this.tabLabels, }) : super(key: key); List get _labels => tabLabels ?? _defaultTabLabels.sublist(0, subTabCount.clamp(1, _defaultTabLabels.length)); @override Widget build(BuildContext context) { final labels = _labels; return Container( height: 56, decoration: BoxDecoration( color: Colors.grey.shade100, border: Border(bottom: BorderSide(color: Colors.grey.shade300)), ), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 6), child: Row( children: [ for (int i = 0; i < labels.length; i++) ...[ if (i > 0) const SizedBox(width: 12), _buildSubNavItem(context, labels[i], i), ], const SizedBox(width: 36), _pillField( width: 320, child: TextField( controller: searchController, decoration: InputDecoration( hintText: searchHint, prefixIcon: const Icon(Icons.search, size: 18), border: InputBorder.none, isDense: true, contentPadding: const EdgeInsets.symmetric( horizontal: 10, vertical: 8, ), ), ), ), if (filterControl != null) ...[ const SizedBox(width: 12), _pillField(width: 150, child: filterControl!), ], const Spacer(), if (onAddPressed != null) _buildAddButton(), ], ), ); } Widget _pillField({required double width, required Widget child}) { return Container( width: width, height: 34, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(18), border: Border.all(color: Colors.black26), ), alignment: Alignment.centerLeft, child: child, ); } Widget _buildAddButton() { return ElevatedButton.icon( onPressed: onAddPressed, icon: const Icon(Icons.add), label: Text(addLabel), ); } Widget _buildSubNavItem(BuildContext context, String title, int index) { final bool isActive = index == selectedSubIndex; return InkWell( onTap: () => onSubTabChange(index), child: Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6), decoration: BoxDecoration( color: isActive ? const Color(0xFF9CC5C0) : Colors.transparent, borderRadius: BorderRadius.circular(16), border: isActive ? null : Border.all(color: Colors.black26), ), child: Text( title, style: TextStyle( color: isActive ? Colors.white : Colors.black87, fontWeight: isActive ? FontWeight.w600 : FontWeight.normal, fontSize: 13, ), ), ), ); } } /// Sous-barre Paramètres : Paramètres généraux | Paramètres territoriaux. class DashboardSettingsSubBar extends StatelessWidget { final int selectedSubIndex; final ValueChanged onSubTabChange; const DashboardSettingsSubBar({ Key? key, required this.selectedSubIndex, required this.onSubTabChange, }) : super(key: key); @override Widget build(BuildContext context) { return Container( height: 48, decoration: BoxDecoration( color: Colors.grey.shade100, border: Border(bottom: BorderSide(color: Colors.grey.shade300)), ), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 6), child: Center( child: Row( mainAxisSize: MainAxisSize.min, children: [ _buildSubNavItem(context, 'Paramètres généraux', 0), const SizedBox(width: 16), _buildSubNavItem(context, 'Paramètres territoriaux', 1), ], ), ), ); } Widget _buildSubNavItem(BuildContext context, String title, int index) { final bool isActive = index == selectedSubIndex; return InkWell( onTap: () => onSubTabChange(index), child: Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6), decoration: BoxDecoration( color: isActive ? const Color(0xFF9CC5C0) : Colors.transparent, borderRadius: BorderRadius.circular(16), border: isActive ? null : Border.all(color: Colors.black26), ), child: Text( title, style: TextStyle( color: isActive ? Colors.white : Colors.black87, fontWeight: isActive ? FontWeight.w600 : FontWeight.normal, fontSize: 13, ), ), ), ); } }