From cf34fdfb8e9d9d0e09a89ec9520286d15c73c414 Mon Sep 17 00:00:00 2001 From: Felipe Date: Tue, 2 Jan 2024 16:16:02 -0500 Subject: [PATCH] update calendar --- lib/main.dart | 8 +-- lib/src/models/event_model.dart | 4 +- lib/src/presentation/screens/calendar.dart | 35 ++++++++++--- lib/src/presentation/screens/chat.dart | 1 - .../presentation/screens/professional.dart | 2 +- .../widgets/shared/loading_item_list.dart | 21 ++++++-- .../widgets/shared/notificacion_snackbar.dart | 51 +++++++++++++++++++ 7 files changed, 100 insertions(+), 22 deletions(-) create mode 100644 lib/src/presentation/widgets/shared/notificacion_snackbar.dart diff --git a/lib/main.dart b/lib/main.dart index 612a42d..39ecfbf 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -47,7 +47,7 @@ void main() async { if (!kIsWeb) { FirebaseMessaging messaging = FirebaseMessaging.instance; - NotificationSettings settings = await messaging.requestPermission( + await messaging.requestPermission( alert: true, announcement: false, badge: true, @@ -57,14 +57,10 @@ void main() async { sound: true, ); - print('User granted permission: ${settings.authorizationStatus}'); - FirebaseMessaging.onBackgroundMessage( (_firebaseMessagingBackgroundHandler)); - FirebaseMessaging.onMessage.listen((RemoteMessage message) { - // Tu código para manejar las notificaciones aquí - }); + FirebaseMessaging.onMessage.listen((RemoteMessage message) {}); } await initNotifications(); diff --git a/lib/src/models/event_model.dart b/lib/src/models/event_model.dart index 4f32dea..f1bd3fb 100644 --- a/lib/src/models/event_model.dart +++ b/lib/src/models/event_model.dart @@ -62,10 +62,10 @@ Future> getByProId(String day) async { try { var snapshot = await FirebaseFirestore.instance .collection('services') - .where('professional_id', isEqualTo: uid) + // .where('professional_id', isEqualTo: uid) .where('day', isEqualTo: day.toString()) .where('status', isEqualTo: 'aprobado') - .orderBy('Timestamp', descending: true) + // .orderBy('Timestamp', descending: true) .get(); List eventos = []; diff --git a/lib/src/presentation/screens/calendar.dart b/lib/src/presentation/screens/calendar.dart index 7a97e64..a9f412c 100644 --- a/lib/src/presentation/screens/calendar.dart +++ b/lib/src/presentation/screens/calendar.dart @@ -7,6 +7,7 @@ import 'package:prosappco/src/components/pop_appbar.dart'; import 'package:prosappco/src/components/primary_btn.dart'; import 'package:prosappco/src/models/event_model.dart'; import 'package:prosappco/src/presentation/screens/cita.dart'; +import 'package:prosappco/src/presentation/widgets/shared/loading_item_list.dart'; import 'package:table_calendar/table_calendar.dart'; import 'package:intl/intl.dart'; @@ -64,6 +65,8 @@ class _CalendarScreenState extends State { void initState() { super.initState(); + today = DateTime.utc(today.year, today.month, today.day); + if (_events == null) { Event.getEventsAllByIdStatus(uid ?? "", 'aprobado') .then((value) => setState(() { @@ -87,8 +90,10 @@ class _CalendarScreenState extends State { @override Widget build(BuildContext context) { if (_events == null) { - return const Center( - child: CircularProgressIndicator(), + return const Scaffold( + body: Center( + child: CircularProgressIndicator(), + ), ); } @@ -351,16 +356,32 @@ class _CalendarScreenState extends State { return FutureBuilder( future: getByProId(DateFormat("yyyy-MM-dd 00:00:00.000").format(today)), builder: (BuildContext context, AsyncSnapshot> snapshot) { - if (!snapshot.hasData) { - return const Text('No tienes citas'); - } - List eventos = []; + if (snapshot.connectionState == ConnectionState.waiting) { + return const Column( + children: [ + LoadingItemList(useCircleAvatar: false), + LoadingItemList(useCircleAvatar: false), + LoadingItemList(useCircleAvatar: false), + LoadingItemList(useCircleAvatar: false), + ], + ); + } try { + snapshot.data!.sort((a, b) { + String? range1Hour1A = a.range1Hour1; + String? range1Hour1B = b.range1Hour1; + + DateTime dateTimeA = DateTime.parse(range1Hour1A); + DateTime dateTimeB = DateTime.parse(range1Hour1B); + + return dateTimeB.compareTo(dateTimeA); + }); + eventos.addAll(snapshot.data!); } catch (e) { - print("Error" + e.toString()); + print("Error al cargar eventos: inflar $e"); } if (eventos.isEmpty) { diff --git a/lib/src/presentation/screens/chat.dart b/lib/src/presentation/screens/chat.dart index e246f64..90c8520 100644 --- a/lib/src/presentation/screens/chat.dart +++ b/lib/src/presentation/screens/chat.dart @@ -262,7 +262,6 @@ class _ChatScreenState extends State { final ultimoMensaje = mensajes.last; final ultimoMensajeUser = ultimoMensaje['user']; if (ultimoMensajeUser == uid) { - // El último mensaje fue enviado por ti, no se envía la notificación } else { sendPushNotification(user!.token!); } diff --git a/lib/src/presentation/screens/professional.dart b/lib/src/presentation/screens/professional.dart index 01f1c22..3fa9745 100644 --- a/lib/src/presentation/screens/professional.dart +++ b/lib/src/presentation/screens/professional.dart @@ -327,7 +327,7 @@ class _ProfessionalScreenState extends State { child: ListView.builder( itemCount: 8, itemBuilder: (BuildContext context, int index) { - return const LoadingItemList(); + return const LoadingItemList(useCircleAvatar: true); }, ), ), diff --git a/lib/src/presentation/widgets/shared/loading_item_list.dart b/lib/src/presentation/widgets/shared/loading_item_list.dart index 94018ec..f4efedd 100644 --- a/lib/src/presentation/widgets/shared/loading_item_list.dart +++ b/lib/src/presentation/widgets/shared/loading_item_list.dart @@ -2,7 +2,9 @@ import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; class LoadingItemList extends StatelessWidget { - const LoadingItemList({super.key}); + final bool useCircleAvatar; + + const LoadingItemList({super.key, required this.useCircleAvatar}); @override Widget build(BuildContext context) { @@ -10,10 +12,19 @@ class LoadingItemList extends StatelessWidget { baseColor: Colors.grey[300]!, highlightColor: Colors.grey[100]!, child: ListTile( - leading: const CircleAvatar( - radius: 25, - backgroundColor: Colors.white, - ), + leading: useCircleAvatar + ? const CircleAvatar( + radius: 25, + backgroundColor: Colors.white, + ) + : Container( + width: 45, + height: 20, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + ), + ), title: Container( height: 20, decoration: BoxDecoration( diff --git a/lib/src/presentation/widgets/shared/notificacion_snackbar.dart b/lib/src/presentation/widgets/shared/notificacion_snackbar.dart new file mode 100644 index 0000000..4262954 --- /dev/null +++ b/lib/src/presentation/widgets/shared/notificacion_snackbar.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class NotificationSnackbar { + static void show({ + required String title, + required String message, + SnackPosition position = SnackPosition.TOP, + Duration duration = const Duration(seconds: 4), + Color backgroundColor = Colors.red, + Color textColor = Colors.white, + double borderRadius = 10.0, + EdgeInsets margin = const EdgeInsets.all(10.0), + SnackStyle snackStyle = SnackStyle.FLOATING, + Duration animationDuration = const Duration(milliseconds: 800), + bool isDismissible = true, + DismissDirection dismissDirection = DismissDirection.horizontal, + Curve forwardAnimationCurve = Curves.easeOutBack, + Curve reverseAnimationCurve = Curves.easeInBack, + Icon icon = const Icon(Icons.warning, color: Colors.white), + bool shouldIconPulse = true, + }) { + Get.snackbar( + title, + message, + snackPosition: position, + duration: duration, + backgroundColor: backgroundColor, + colorText: textColor, + borderRadius: borderRadius, + margin: margin, + snackStyle: snackStyle, + animationDuration: animationDuration, + isDismissible: isDismissible, + dismissDirection: dismissDirection, + forwardAnimationCurve: forwardAnimationCurve, + reverseAnimationCurve: reverseAnimationCurve, + icon: icon, + shouldIconPulse: shouldIconPulse, + titleText: Text( + title, + style: const TextStyle( + fontSize: 18.0, fontWeight: FontWeight.bold, color: Colors.white), + ), + messageText: Text( + message, + style: const TextStyle(fontSize: 16.0, color: Colors.white), + ), + ); + } +}