import 'package:flutter/material.dart'; import 'package:physigo/friends/models/challenge_location_request.dart'; import 'package:physigo/friends/services/challenge_location_service.dart'; class ChallengeLocationRequests extends StatefulWidget { const ChallengeLocationRequests({Key? key}) : super(key: key); @override State createState() => _ChallengeLocationRequestsState(); } class _ChallengeLocationRequestsState extends State { List _requests = []; late Future> _requestsQuery; @override void initState() { _requestsQuery = ChallengeLocationService.getShareChallengeLocationRequests(); _requestsQuery.then((requests) => setState(() => _requests = requests)); super.initState(); } @override Widget build(BuildContext context) { return Column( children: [ const Text( "Challenge Location's Requests", style: TextStyle(fontSize: 24), textAlign: TextAlign.center, ), FutureBuilder>( future: _requestsQuery, builder: (context, snapshot) { if (!snapshot.hasData) { return const CircularProgressIndicator(); } if (_requests.isEmpty) { return const Text("You don't have any share location's requests"); } return ListView.builder( shrinkWrap: true, itemBuilder: ((context, index) => _requestTile(_requests[index])), itemCount: _requests.length, ); }, ), ], ); } void _acceptRequest(ChallengeLocationRequest request) async { await ChallengeLocationService.acceptChallengeLocationRequest(request); setState(() { _requests = _requests.where((r) => r.id != request.id).toList(); }); } void _refuseRequest(ChallengeLocationRequest request) async { await ChallengeLocationService.refuseChallengeLocationRequest(request); setState(() { _requests = _requests.where((r) => r.id != request.id).toList(); }); } Widget _requestTile(ChallengeLocationRequest request) { return Card( child: ListTile( title: Text(request.locationName, maxLines: 2, overflow: TextOverflow.ellipsis,), subtitle: Text("From ${request.name} ${request.surname}"), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ TextButton( child: const Text("Refuse"), onPressed: () => _refuseRequest(request), ), TextButton( child: const Text("Accept"), onPressed: () => _acceptRequest(request), ), ], ), ), ); } }