import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; /// [FriendDetailScreen] affiche les détails d'un ami, incluant son nom, son image de profil, /// et une option pour envoyer un message. /// /// Utilisé lorsque l'utilisateur clique sur un ami pour voir plus de détails. class FriendDetailScreen extends StatelessWidget { final String name; // Nom de l'ami final String imageUrl; // URL de l'image de profil de l'ami final String friendId; // ID de l'ami pour des actions futures final Logger _logger = Logger(); // Logger pour suivre les actions dans le terminal /// Constructeur de la classe [FriendDetailScreen]. /// [name], [imageUrl], et [friendId] doivent être fournis. FriendDetailScreen({ Key? key, required this.name, required this.imageUrl, required this.friendId, }) : super(key: key); /// Méthode statique pour lancer l'écran des détails d'un ami. static void open(BuildContext context, String friendId, String name, String imageUrl) { Navigator.push( context, MaterialPageRoute( builder: (_) => FriendDetailScreen( friendId: friendId, name: name, imageUrl: imageUrl, ), ), ); } @override Widget build(BuildContext context) { _logger.i('[LOG] Affichage des détails de l\'ami : $name (ID: $friendId)'); // Utilise `AssetImage` si `imageUrl` est vide ou ne contient pas d'URL valide. final imageProvider = imageUrl.isNotEmpty && Uri.tryParse(imageUrl)?.hasAbsolutePath == true ? NetworkImage(imageUrl) : const AssetImage('lib/assets/images/default_avatar.png') as ImageProvider; return Scaffold( appBar: AppBar( title: Text(name), // Titre de l'écran affichant le nom de l'ami backgroundColor: Colors.grey.shade800, ), body: Padding( padding: const EdgeInsets.all(16.0), // Espacement autour du contenu child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ // Affichage de l'image de l'ami avec animation `Hero` Hero( tag: friendId, // Tag unique pour l'animation Hero basée sur l'ID de l'ami child: CircleAvatar( radius: 50, backgroundImage: imageProvider, backgroundColor: Colors.grey.shade800, onBackgroundImageError: (error, stackTrace) { _logger.e('[ERROR] Erreur lors du chargement de l\'image pour $name (ID: $friendId): $error'); }, child: imageUrl.isEmpty ? const Icon(Icons.person, size: 50, color: Colors.white) // Icône par défaut si aucune image n'est disponible : null, ), ), const SizedBox(height: 16), // Espacement entre l'image et le texte // Affichage du nom de l'ami Text( name, style: const TextStyle( fontSize: 24, // Taille de la police pour le nom fontWeight: FontWeight.bold, // Texte en gras color: Colors.white, ), ), const SizedBox(height: 20), // Espacement avant le bouton // Bouton pour envoyer un message à l'ami ElevatedButton.icon( onPressed: () { _logger.i('[LOG] Envoi d\'un message à $name (ID: $friendId)'); // Logique future pour envoyer un message à l'ami }, icon: const Icon(Icons.message), label: const Text('Envoyer un message'), style: ElevatedButton.styleFrom( backgroundColor: Colors.teal, // Couleur de fond du bouton foregroundColor: Colors.white, // Couleur du texte et de l'icône shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ), ), ), ], ), ), ); } }