import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:intl/intl.dart'; import 'package:prosappco/src/components/drawer_professional.dart'; import 'package:prosappco/src/models/event_model.dart'; import 'package:prosappco/src/models/scores_model.dart'; import 'package:prosappco/src/screens/cita.dart'; class SolicitudScreen extends StatelessWidget { SolicitudScreen({super.key}); DateTime today = DateTime.now(); @override Widget build(BuildContext context) { return SafeArea( child: Scaffold( appBar: AppBar( backgroundColor: Colors.white, iconTheme: const IconThemeData( color: Colors.black, ), title: const Text( 'Solicitudes', style: TextStyle( color: Colors.black, ), ), ), drawer: DrawerProfessional(), body: SingleChildScrollView( child: Column( children: [ _eventList(), ], ), ), ), ); } Widget _eventList() { return StreamBuilder>( stream: FirebaseFirestore.instance .collection('services') .where('professional_id', isEqualTo: uid) .where('status', whereIn: ['pendiente', '']) .snapshots() .asyncMap((snapshot) async { try { List eventos = []; for (var element in snapshot.docs) { final event = Event.fromJson(element.data()); event.scoresModel = await ScoresModel.scoreTo(event.userId, false, false); event.id = element.id; eventos.add(event); } print('eventos $eventos'); return eventos; } catch (e) { print('Error getByProId $e'); return []; } }), builder: (BuildContext context, AsyncSnapshot> snapshot) { if (!snapshot.hasData) { return const Center( child: CircularProgressIndicator(), ); } List eventos = []; try { eventos.addAll(snapshot.data!); } catch (e) { print("Error" + e.toString()); } if (eventos.isEmpty) { return const Padding( padding: EdgeInsets.symmetric(vertical: 50), child: Center(child: Text('No tienes citas')), ); } return Column( children: [ ...eventos.map( (event) => ListTile( onTap: () { Navigator.push( context, CupertinoPageRoute( builder: (BuildContext context) { return CitaScreen(evento: event); }, ), ); }, leading: Text( TimeOfDay.fromDateTime(DateTime.parse(event.range1Hour1)) .format(context), ), title: RichText( text: TextSpan( children: [ TextSpan( text: '${event.title}, ', style: const TextStyle( color: Colors.black, fontWeight: FontWeight.bold, fontSize: 16, ), ), TextSpan( text: DateFormat('dd MMM', 'es') .format(DateTime.parse(event.day)), style: const TextStyle( color: Colors.grey, fontSize: 16, ), ), ], ), ), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ RatingBar.builder( initialRating: event.scoresModel?.average ?? 0, minRating: 1, direction: Axis.horizontal, allowHalfRating: true, itemCount: 5, itemSize: 25, maxRating: 5, itemPadding: const EdgeInsets.symmetric(horizontal: 0), itemBuilder: (context, _) => const Icon( Icons.star, color: Color(0xFF2BA4EC), ), onRatingUpdate: (rating) {}, ignoreGestures: true, ), const SizedBox(width: 5), Text( '(${event.scoresModel?.total.toString()}) ${event.scoresModel?.average.toStringAsFixed(1)}'), ], ), Text( '" ${event.description}"', style: const TextStyle(fontStyle: FontStyle.italic), ), ], ), trailing: const Icon(Icons.keyboard_arrow_right), ), ), ], ); }, ); } }