| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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<ChallengeLocationRequests> createState() => _ChallengeLocationRequestsState();
- }
- class _ChallengeLocationRequestsState extends State<ChallengeLocationRequests> {
- List<ChallengeLocationRequest> _requests = [];
- late Future<List<ChallengeLocationRequest>> _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<List<ChallengeLocationRequest>>(
- 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),
- ),
- ],
- ),
- ),
- );
- }
- }
|