import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../data/providers/friends_provider.dart'; import '../../data/models/friend_suggestion_model.dart'; import 'friend_suggestion_card.dart'; /// Widget pour afficher une liste de suggestions d'amis. /// /// Ce widget charge et affiche automatiquement les suggestions d'amis /// basées sur les amis en commun et d'autres critères. /// /// **Principe WOU (Write Once Use) :** Ce widget encapsule toute la /// logique de chargement et d'affichage, utilisable partout. class FriendSuggestions extends StatefulWidget { const FriendSuggestions({ this.maxSuggestions = 5, super.key, }); /// Nombre maximum de suggestions à afficher final int maxSuggestions; @override State createState() => _FriendSuggestionsState(); } class _FriendSuggestionsState extends State { @override void initState() { super.initState(); // Charger les suggestions au démarrage WidgetsBinding.instance.addPostFrameCallback((_) { _loadSuggestions(); }); } Future _loadSuggestions() async { final provider = Provider.of(context, listen: false); try { await provider.fetchFriendSuggestions(limit: widget.maxSuggestions); } catch (e) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Impossible de charger les suggestions: $e'), behavior: SnackBarBehavior.floating, backgroundColor: Colors.red, ), ); } } } Future _addFriend(BuildContext context, String friendId) async { final provider = Provider.of(context, listen: false); try { await provider.addFriend(friendId); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('Demande d\'ami envoyée avec succès'), behavior: SnackBarBehavior.floating, backgroundColor: Colors.green, ), ); // Recharger les suggestions pour mettre à jour la liste await _loadSuggestions(); } } catch (e) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Erreur: ${e.toString()}'), behavior: SnackBarBehavior.floating, backgroundColor: Colors.red, ), ); } } } @override Widget build(BuildContext context) { return Consumer( builder: (context, provider, child) { // Afficher un loader pendant le chargement if (provider.isLoadingSuggestions) { return const Center( child: Padding( padding: EdgeInsets.all(20), child: CircularProgressIndicator(), ), ); } // Afficher un message si aucune suggestion if (provider.friendSuggestions.isEmpty) { return const Padding( padding: EdgeInsets.all(20), child: Center( child: Text( 'Aucune suggestion disponible pour le moment', style: TextStyle(color: Colors.grey), ), ), ); } // Afficher la liste des suggestions return Column( mainAxisSize: MainAxisSize.min, children: provider.friendSuggestions.map((suggestion) { final suggestionModel = FriendSuggestionModel.fromJson(suggestion); return FriendSuggestionCard( suggestion: suggestion, onAddFriend: () => _addFriend(context, suggestionModel.userId), ); }).toList(), ); }, ); } }