import "package:flutter/material.dart"; import "package:google_fonts/google_fonts.dart"; import "../theme/ensup_colors.dart"; /// Barre supérieure ENSUP. L'utilisateur est optionnel (absent sur l'écran /// d'identification, présent une fois l'étudiant connecté). class EnsupTopBar extends StatelessWidget { const EnsupTopBar({ super.key, this.brandText = "EME", required this.campusTag, this.userName, this.userInitials, }); final String brandText; final String campusTag; final String? userName; final String? userInitials; @override Widget build(BuildContext context) { final name = userName; final initials = userInitials; return Container( height: 56, padding: const EdgeInsets.symmetric(horizontal: 28), color: EnsupColors.blue3, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ const Icon(Icons.badge_outlined, color: Colors.white, size: 18), const SizedBox(width: 10), Text( brandText, style: GoogleFonts.darkerGrotesque( color: Colors.white, fontWeight: FontWeight.w900, fontSize: 22, letterSpacing: 0.3, ), ), ], ), Row( children: [ Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4), decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.15), borderRadius: BorderRadius.circular(999), border: Border.all(color: Colors.white.withValues(alpha: 0.2)), ), child: Text( campusTag, style: GoogleFonts.titilliumWeb( color: Colors.white, fontSize: 12, fontWeight: FontWeight.w600, ), ), ), if (name != null && initials != null) ...[ const SizedBox(width: 12), _Avatar(initials: initials), const SizedBox(width: 8), Text( name, style: GoogleFonts.titilliumWeb( color: Colors.white, fontSize: 13, 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, gradient: const LinearGradient(colors: [EnsupColors.teal, EnsupColors.cyan]), 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, ), ), ); } }