import 'package:flutter/material.dart'; import 'package:logger/logger.dart'; import 'package:provider/provider.dart'; import '../../../assets/animations/friend_expanding_card.dart'; import '../../../data/providers/friends_provider.dart'; import '../../../domain/entities/friend.dart'; import '../../widgets/friend_detail_screen.dart'; import '../../widgets/friends_appbar.dart'; import '../../widgets/search_friends.dart'; /// Écran d'affichage des amis avec gestion des amis via un provider. class FriendsScreenWithProvider extends StatelessWidget { FriendsScreenWithProvider({super.key}); final Logger _logger = Logger(); // Logger pour la traçabilité détaillée. @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black, // Fond noir pour une ambiance immersive. appBar: FriendsAppBar(), // AppBar personnalisé pour l'écran. body: SafeArea( child: Column( children: [ const Padding( padding: EdgeInsets.all(8), child: SearchFriends(), // Barre de recherche pour trouver des amis. ), Expanded( child: Consumer( builder: (context, friendsProvider, _) { final friends = friendsProvider.friendsList; if (friends.isEmpty) { _logger.i('[LOG] Aucun ami trouvé.'); // Log pour la recherche sans résultat. return const Center( child: Text( 'Aucun ami trouvé', // Message affiché si aucun ami n'est trouvé. style: TextStyle(color: Colors.white70), ), ); } return ListView.builder( physics: const BouncingScrollPhysics(), itemCount: friends.length, itemBuilder: (context, index) { final friend = friends[index]; // Log lorsque chaque ami est affiché _logger.i("[LOG] Affichage de l'ami : ${friend.friendFirstName ?? 'Ami inconnu'}"); return Dismissible( key: Key(friend.friendId), background: Container( color: Colors.redAccent, alignment: Alignment.centerLeft, padding: const EdgeInsets.only(left: 20), child: const Icon(Icons.delete, color: Colors.white), ), onDismissed: (direction) { _logger.i("[LOG] Suppression de l'ami avec l'ID : ${friend.friendId}"); friendsProvider.removeFriend(friend.friendId); // Suppression de l'ami via le provider. ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Ami supprimé : ${friend.friendFirstName}')), ); }, child: FriendExpandingCard( name: friend.friendFirstName ?? 'Ami inconnu', imageUrl: friend.imageUrl ?? '', description: "Amis depuis ${friend.dateAdded ?? 'Inconnu'}\nStatut : ${friend.status ?? 'Inconnu'}", onTap: () { _navigateToFriendDetail(context, friend); // Navigation vers les détails de l'ami. }, onMessageTap: () { _logger.i("[LOG] Envoi d'un message à l'ami : ${friend.friendFirstName ?? 'Ami inconnu'}"); }, onRemoveTap: () { _logger.i("[LOG] Tentative de suppression de l'ami : ${friend.friendFirstName ?? 'Ami inconnu'}"); friendsProvider.removeFriend(friend.friendId); // Suppression via le provider. }, ), ); }, ); }, ), ), ], ), ), ); } /// Navigue vers l'écran de détails de l'ami. void _navigateToFriendDetail(BuildContext context, Friend friend) { _logger.i("[LOG] Navigation vers les détails de l'ami : ${friend.friendFirstName}"); Navigator.of(context).push(MaterialPageRoute( builder: (context) => FriendDetailScreen( friendId: friend.friendId, friendFirstName: friend.friendFirstName, friendLastName: friend.friendLastName, imageUrl: friend.imageUrl ?? '', status: friend.status, lastInteraction: friend.lastInteraction ?? 'Aucune', dateAdded: friend.dateAdded ?? 'Inconnu', ), ),); } }