From 4804dc1839539b41c5ee8dca590f931cb858c764 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 26 Dec 2023 17:29:21 +0300 Subject: [PATCH] refresh indicator added. --- .../recent_activites_fragment.dart | 82 +++++++++++-------- .../requests_fragment.dart | 42 ++++++---- .../notifications/notification_item.dart | 10 ++- 3 files changed, 80 insertions(+), 54 deletions(-) diff --git a/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart index 063eba90..dca8b180 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/text_extensions.dart'; @@ -10,44 +11,59 @@ import 'package:test_sa/views/widgets/notifications/notification_item.dart'; class RecentActivitiesFragment extends StatelessWidget { RecentActivitiesFragment({Key key}) : super(key: key); - NotificationsProvider _notificationsProvider; + //NotificationsProvider _notificationsProvider; @override Widget build(BuildContext context) { - _notificationsProvider ??= Provider.of(context, listen: false); - return SingleChildScrollView( - padding: const EdgeInsets.all(16), - child: Container( - decoration: ShapeDecoration( - color: AppColor.background(context), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), - shadows: [boxShadowR14], - ), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - context.translation.recentActivities.heading5(context).paddingOnly(top: 16, start: 16, end: 16), - ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - padding: const EdgeInsets.all(16), - itemCount: _notificationsProvider.notifications.length, - separatorBuilder: (context, itemIndex) => const Divider().defaultStyle(context).paddingOnly(top: 16, bottom: 16), - itemBuilder: (context, itemIndex) { - // todo add priority & progress tag to show chip - return NotificationItem( - notification: _notificationsProvider.notifications[itemIndex], - onPressed: (notification) { - // todo @sikander, check notifications payload, because notification model is different to need to check from backend - //Navigator.of(context).pushNamed(FutureRequestServiceDetails.id, arguments: notification.requestId); + //_notificationsProvider ??= Provider.of(context, listen: false); + return Consumer(builder: (context, _notificationsProvider, _) { + return RefreshIndicator( + onRefresh: () { + Provider.of(context, listen: false).getRequests(); + _notificationsProvider.getSystemNotifications(); + return Future.delayed(const Duration(microseconds: 250)); + }, + child: SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Container( + decoration: ShapeDecoration( + color: AppColor.background(context), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + shadows: [boxShadowR14], + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + context.translation.recentActivities + .heading5(context) + .toShimmer( + isShow: _notificationsProvider.isLoading, + ) + .paddingOnly(top: 16, start: 16, end: 16), + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + padding: const EdgeInsets.all(16), + itemCount: _notificationsProvider.notifications.length, + separatorBuilder: (context, itemIndex) => const Divider().defaultStyle(context).paddingOnly(top: 16, bottom: 16), + itemBuilder: (context, itemIndex) { + // todo add priority & progress tag to show chip + return NotificationItem( + isLoading: _notificationsProvider.isLoading, + notification: _notificationsProvider.notifications[itemIndex], + onPressed: (notification) { + // todo @sikander, check notifications payload, because notification model is different to need to check from backend + //Navigator.of(context).pushNamed(FutureRequestServiceDetails.id, arguments: notification.requestId); + }, + ); }, - ); - }, + ), + ], ), - ], + ), ), - ), - ); + ); + }); } } diff --git a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart index 14bf971e..3e758d90 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; +import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; @@ -18,23 +19,30 @@ class RequestsFragment extends StatelessWidget { // todo check here, nurse can add request not engineer floatingActionButton: const AppFloatingActionButton(), body: Consumer( - builder: (context, snapshot, _) => GridView( - padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16), - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 237, crossAxisSpacing: 16, mainAxisSpacing: 16), - children: [ - gridItem( - snapshot.highPriorityRequests?.total?.count, - "high_priority", - context.translation.highPriority, - context, - snapshot.isHighPriorityLoading, - 0, - context.isDark ? AppColor.redStatus(context) : AppColor.red50, - ), - gridItem(snapshot.overdueRequests?.total?.count, "overdue", context.translation.overdue, context, snapshot.isOverdueLoading, 1, AppColor.yellowStatus(context)), - gridItem(snapshot.openRequests?.total?.count, "new_request", context.translation.newR, context, snapshot.isOpenLoading, 2, AppColor.primary40), - gridItem(snapshot.completedRequests?.total?.count, "complete_request", context.translation.completed, context, snapshot.isCompleteLoading, 3, AppColor.greenStatus(context)), - ], + builder: (context, snapshot, _) => RefreshIndicator( + onRefresh: () { + snapshot.getRequests(); + Provider.of(context, listen: false).getSystemNotifications(); + return Future.delayed(const Duration(microseconds: 250)); + }, + child: GridView( + padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 237, crossAxisSpacing: 16, mainAxisSpacing: 16), + children: [ + gridItem( + snapshot.highPriorityRequests?.total?.count, + "high_priority", + context.translation.highPriority, + context, + snapshot.isHighPriorityLoading, + 0, + context.isDark ? AppColor.redStatus(context) : AppColor.red50, + ), + gridItem(snapshot.overdueRequests?.total?.count, "overdue", context.translation.overdue, context, snapshot.isOverdueLoading, 1, AppColor.yellowStatus(context)), + gridItem(snapshot.openRequests?.total?.count, "new_request", context.translation.newR, context, snapshot.isOpenLoading, 2, AppColor.primary40), + gridItem(snapshot.completedRequests?.total?.count, "complete_request", context.translation.completed, context, snapshot.isCompleteLoading, 3, AppColor.greenStatus(context)), + ], + ), ), ), ); diff --git a/lib/views/widgets/notifications/notification_item.dart b/lib/views/widgets/notifications/notification_item.dart index 1f5d45e1..e581b47f 100644 --- a/lib/views/widgets/notifications/notification_item.dart +++ b/lib/views/widgets/notifications/notification_item.dart @@ -11,7 +11,9 @@ class NotificationItem extends StatelessWidget { final SystemNotificationModel notification; final Function(SystemNotificationModel) onPressed; - const NotificationItem({Key key, this.notification, this.onPressed}) : super(key: key); + final bool isLoading; + + const NotificationItem({Key key, this.notification, this.onPressed, this.isLoading = false}) : super(key: key); @override Widget build(BuildContext context) { @@ -26,7 +28,7 @@ class NotificationItem extends StatelessWidget { style: AppTextStyles.heading6.copyWith( color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, ), - ).expanded, + ).toShimmer(isShow: isLoading).expanded, 8.width, Text( notification.createdOn.toServiceRequestCardFormat ?? "", @@ -34,7 +36,7 @@ class NotificationItem extends StatelessWidget { style: AppTextStyles.tinyFont.copyWith( color: context.isDark ? AppColor.neutral20 : AppColor.neutral50, ), - ), + ).toShimmer(isShow: isLoading), ], ), Text( @@ -42,7 +44,7 @@ class NotificationItem extends StatelessWidget { style: AppTextStyles.bodyText2.copyWith( color: context.isDark ? AppColor.neutral10 : Color(0xFF757575), ), - ), + ).toShimmer(isShow: isLoading), ], ).onPress(() { onPressed(notification);