import 'package:flutter/material.dart'; /// [FriendExpandingCard] est un widget animé qui s'agrandit pour afficher des options supplémentaires. /// Il permet de voir plus de détails, d'envoyer un message ou de supprimer un ami. class FriendExpandingCard extends StatefulWidget { const FriendExpandingCard({ required this.name, required this.imageUrl, required this.description, required this.onTap, required this.onMessageTap, required this.onRemoveTap, super.key, }); final String name; final String imageUrl; final String description; final VoidCallback onTap; final VoidCallback onMessageTap; final VoidCallback onRemoveTap; @override _FriendExpandingCardState createState() => _FriendExpandingCardState(); } class _FriendExpandingCardState extends State { bool _isExpanded = false; @override Widget build(BuildContext context) { return GestureDetector( onTap: widget.onTap, onLongPress: () { setState(() { _isExpanded = !_isExpanded; }); }, child: AnimatedContainer( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, height: _isExpanded ? 200 : 100, margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 5), padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.grey.shade900, borderRadius: BorderRadius.circular(16), boxShadow: const [ BoxShadow( color: Colors.black26, blurRadius: 10, offset: Offset(2, 2), ), ], ), child: Column( children: [ Row( children: [ Hero( tag: widget.name, child: CircleAvatar( backgroundImage: NetworkImage(widget.imageUrl), radius: 30, ), ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( widget.name, style: const TextStyle( color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 5), AnimatedOpacity( opacity: _isExpanded ? 1.0 : 0.0, duration: const Duration(milliseconds: 300), child: Text( widget.description, style: const TextStyle( color: Colors.white70, fontSize: 14, ), ), ), ], ), ), if (_isExpanded) IconButton( icon: const Icon(Icons.close, color: Colors.white54), onPressed: () { setState(() { _isExpanded = false; }); }, ), ], ), if (_isExpanded) ...[ const SizedBox(height: 10), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ ElevatedButton.icon( onPressed: widget.onMessageTap, icon: const Icon(Icons.message, color: Colors.white), label: const Text('Message'), style: ElevatedButton.styleFrom( iconColor: Colors.green, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ), ), ), ElevatedButton.icon( onPressed: widget.onRemoveTap, icon: const Icon(Icons.delete, color: Colors.red), label: const Text('Remove'), style: ElevatedButton.styleFrom( iconColor: Colors.redAccent, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ), ), ), ], ), ], ], ), ), ); } }