friends_requests.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import 'package:flutter/material.dart';
  2. import '../models/friend_request.dart';
  3. import '../services/friends_service.dart';
  4. class FriendsRequests extends StatefulWidget {
  5. const FriendsRequests({Key? key}) : super(key: key);
  6. @override
  7. State<FriendsRequests> createState() => _FriendsRequestsState();
  8. }
  9. class _FriendsRequestsState extends State<FriendsRequests> {
  10. List<FriendRequest> _requests = [];
  11. late Future<List<FriendRequest>> _requestsQuery;
  12. @override
  13. void initState() {
  14. _requestsQuery = FriendsService.getPendingRequests();
  15. _requestsQuery.then((requests) => setState(() => _requests = requests));
  16. super.initState();
  17. }
  18. @override
  19. Widget build(BuildContext context) {
  20. return Column(
  21. children: [
  22. const Text(
  23. "Friend's Requests",
  24. style: TextStyle(fontSize: 24),
  25. textAlign: TextAlign.center,
  26. ),
  27. FutureBuilder<List<FriendRequest>>(
  28. future: _requestsQuery,
  29. builder: (context, snapshot) {
  30. if (!snapshot.hasData) {
  31. return const CircularProgressIndicator();
  32. }
  33. if (_requests.isEmpty) {
  34. return const Text("You don't have any friend's requests");
  35. }
  36. return ListView.builder(
  37. shrinkWrap: true,
  38. itemBuilder: ((context, index) => _requestTile(_requests[index])),
  39. itemCount: _requests.length,
  40. );
  41. },
  42. ),
  43. ],
  44. );
  45. }
  46. void _acceptRequest(FriendRequest request) async {
  47. await FriendsService.acceptFriendRequest(request);
  48. setState(() {
  49. _requests = _requests.where((r) => r.requestId != request.requestId).toList();
  50. });
  51. }
  52. void _refuseRequest(FriendRequest request) async {
  53. await FriendsService.refuseFriendRequest(request);
  54. setState(() {
  55. _requests = _requests.where((r) => r.requestId != request.requestId).toList();
  56. });
  57. }
  58. Widget _requestTile(FriendRequest friendRequest) {
  59. return Card(
  60. child: ListTile(
  61. title: Text("${friendRequest.friendName} ${friendRequest.friendSurname}"),
  62. trailing: Row(
  63. mainAxisSize: MainAxisSize.min,
  64. children: [
  65. TextButton(
  66. child: const Text("Refuse"),
  67. onPressed: () => _refuseRequest(friendRequest),
  68. ),
  69. TextButton(
  70. child: const Text("Accept"),
  71. onPressed: () => _acceptRequest(friendRequest),
  72. ),
  73. ],
  74. ),
  75. ),
  76. );
  77. }
  78. }