import "package:flutter/material.dart"; import "package:google_fonts/google_fonts.dart"; import "../theme/ensup_colors.dart"; /// Barre supérieure ENSUP. L'utilisateur et le bouton retour sont optionnels /// (absents sur l'écran d'identification). class EnsupTopBar extends StatelessWidget { const EnsupTopBar({ super.key, this.brandText = "EME", required this.campusTag, this.userName, this.userInitials, this.onBack, }); final String brandText; final String campusTag; final String? userName; final String? userInitials; final VoidCallback? onBack; @override Widget build(BuildContext context) { final name = userName; final initials = userInitials; final onBack = this.onBack; return Container( height: 60, padding: const EdgeInsets.symmetric(horizontal: 18), color: EnsupColors.blue3, child: LayoutBuilder( builder: (context, constraints) { final compact = constraints.maxWidth < 620; final showCampus = constraints.maxWidth >= 520; final showName = constraints.maxWidth >= 760; return Row( children: [ if (onBack != null) ...[ _BackButton(onTap: onBack, compact: compact), SizedBox(width: compact ? 5 : 8), ], const Icon(Icons.badge_outlined, color: Colors.white, size: 18), const SizedBox(width: 9), Expanded( child: Text( brandText, maxLines: 1, overflow: TextOverflow.ellipsis, style: GoogleFonts.darkerGrotesque( color: Colors.white, fontWeight: FontWeight.w900, fontSize: compact ? 18 : 21, ), ), ), const SizedBox(width: 10), if (showCampus) Container( padding: const EdgeInsets.symmetric( horizontal: 11, vertical: 5, ), decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.14), borderRadius: BorderRadius.circular(999), border: Border.all( color: Colors.white.withValues(alpha: 0.2), ), ), child: Text( campusTag, style: GoogleFonts.titilliumWeb( color: Colors.white, fontSize: 11, fontWeight: FontWeight.w600, ), ), ), if (name != null && initials != null) ...[ const SizedBox(width: 10), _Avatar(initials: initials), if (showName) ...[ const SizedBox(width: 8), Text( name, style: GoogleFonts.titilliumWeb( color: Colors.white, fontSize: 12, fontWeight: FontWeight.w600, ), ), ], ], ], ); }, ), ); } } class _BackButton extends StatelessWidget { const _BackButton({required this.onTap, required this.compact}); final VoidCallback onTap; final bool compact; @override Widget build(BuildContext context) { return Tooltip( message: "Retour", child: InkWell( onTap: onTap, borderRadius: BorderRadius.circular(7), child: Container( height: 34, padding: EdgeInsets.symmetric(horizontal: compact ? 8 : 10), decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.08), borderRadius: BorderRadius.circular(7), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( Icons.arrow_back_rounded, size: 17, color: Colors.white.withValues(alpha: 0.9), ), if (!compact) ...[ const SizedBox(width: 6), Text( "Retour", style: GoogleFonts.titilliumWeb( color: Colors.white.withValues(alpha: 0.9), fontSize: 12, fontWeight: FontWeight.w600, ), ), ], ], ), ), ), ); } } class _Avatar extends StatelessWidget { const _Avatar({required this.initials}); final String initials; @override Widget build(BuildContext context) { return Container( width: 30, height: 30, decoration: BoxDecoration( shape: BoxShape.circle, color: EnsupColors.purple, border: Border.all( color: Colors.white.withValues(alpha: 0.3), width: 2, ), ), alignment: Alignment.center, child: Text( initials, style: GoogleFonts.darkerGrotesque( color: Colors.white, fontWeight: FontWeight.w900, fontSize: 12, ), ), ); } }