| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import 'package:flutter/material.dart';
- import '../models/friend_request.dart';
- import '../services/friends_service.dart';
- class FriendsRequests extends StatefulWidget {
- const FriendsRequests({Key? key}) : super(key: key);
- @override
- State<FriendsRequests> createState() => _FriendsRequestsState();
- }
- class _FriendsRequestsState extends State<FriendsRequests> {
- List<FriendRequest> _requests = [];
- late Future<List<FriendRequest>> _requestsQuery;
- @override
- void initState() {
- _requestsQuery = FriendsService.getPendingRequests();
- _requestsQuery.then((requests) => setState(() => _requests = requests));
- super.initState();
- }
- @override
- Widget build(BuildContext context) {
- return Column(
- children: [
- const Text(
- "Friend's Requests",
- style: TextStyle(fontSize: 24),
- textAlign: TextAlign.center,
- ),
- FutureBuilder<List<FriendRequest>>(
- future: _requestsQuery,
- builder: (context, snapshot) {
- if (!snapshot.hasData) {
- return const CircularProgressIndicator();
- }
- if (_requests.isEmpty) {
- return const Text("You don't have any friend's requests");
- }
- return ListView.builder(
- shrinkWrap: true,
- itemBuilder: ((context, index) => _requestTile(_requests[index])),
- itemCount: _requests.length,
- );
- },
- ),
- ],
- );
- }
- void _acceptRequest(FriendRequest request) async {
- await FriendsService.acceptFriendRequest(request);
- setState(() {
- _requests = _requests.where((r) => r.requestId != request.requestId).toList();
- });
- }
- void _refuseRequest(FriendRequest request) async {
- await FriendsService.refuseFriendRequest(request);
- setState(() {
- _requests = _requests.where((r) => r.requestId != request.requestId).toList();
- });
- }
- Widget _requestTile(FriendRequest friendRequest) {
- return Card(
- child: ListTile(
- title: Text("${friendRequest.friendName} ${friendRequest.friendSurname}"),
- trailing: Row(
- mainAxisSize: MainAxisSize.min,
- children: [
- TextButton(
- child: const Text("Refuse"),
- onPressed: () => _refuseRequest(friendRequest),
- ),
- TextButton(
- child: const Text("Accept"),
- onPressed: () => _acceptRequest(friendRequest),
- ),
- ],
- ),
- ),
- );
- }
- }
|