diff --git a/assets/images/dashboard/unassigned.svg b/assets/images/dashboard/unassigned.svg
new file mode 100644
index 00000000..ad976259
--- /dev/null
+++ b/assets/images/dashboard/unassigned.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/dashboard_latest/dashboard_provider.dart b/lib/dashboard_latest/dashboard_provider.dart
index ce78b46f..99e06009 100644
--- a/lib/dashboard_latest/dashboard_provider.dart
+++ b/lib/dashboard_latest/dashboard_provider.dart
@@ -5,10 +5,13 @@ import 'package:flutter/widgets.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
+import 'package:test_sa/extensions/context_extension.dart';
+import 'package:test_sa/extensions/enum_extensions.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/new_models/dashboard_count.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart' as DD;
import 'package:test_sa/models/new_models/swipe_model.dart';
+import 'package:test_sa/new_views/app_style/app_color.dart';
import '../controllers/providers/api/user_provider.dart';
@@ -59,6 +62,31 @@ class DashBoardProvider extends ChangeNotifier {
DD.DashboardDetail? get requestDetailList => _requestDetailList;
+ int getStatusCount(RequestTypeEnum requestType) {
+ switch (requestType) {
+ case RequestTypeEnum.unassigned:
+ return dashboardCount?.data?.countUnAssigned ?? 0;
+ case RequestTypeEnum.open:
+ return dashboardCount?.data?.countOpen ?? 0;
+ case RequestTypeEnum.inProgress:
+ return dashboardCount?.data?.countInprogress ?? 0;
+ case RequestTypeEnum.completed:
+ return dashboardCount?.data?.countComplete ?? 0;
+ case RequestTypeEnum.pendingAcknowledgment:
+ return dashboardCount?.data?.countAcknowledge ?? 0;
+ case RequestTypeEnum.canceled:
+ return dashboardCount?.data?.countCanceled ?? 0;
+ case RequestTypeEnum.closed:
+ return dashboardCount?.data?.countClose ?? 0;
+ case RequestTypeEnum.overdue:
+ return dashboardCount?.data?.countOverdue ?? 0;
+ case RequestTypeEnum.highPriority:
+ return dashboardCount?.data?.countHighPriority ?? 0;
+ default:
+ return 0;
+ }
+ }
+
List tabs = [];
void setTabs({required UsersTypes userType, required BuildContext context}) {
@@ -244,11 +272,7 @@ class DashBoardProvider extends ChangeNotifier {
}
}
- String getDashboardUrl({
- required UsersTypes usersType,
- int? status,
- int? tabId,
- }) {
+ String getDashboardUrl({required UsersTypes usersType, int? status, int? tabId}) {
switch (usersType) {
case UsersTypes.qualityUser:
return URLs.qaAuditorDetails;
@@ -270,7 +294,8 @@ class DashBoardProvider extends ChangeNotifier {
}
}
- Future getRequestDetail({bool showLoader = true, required UsersTypes usersType, int? status, bool isHighPriority = false, bool isOverdue = false, String? date, int? tabId, bool? isAscending}) async {
+ Future getRequestDetail(
+ {bool showLoader = true, required UsersTypes usersType, int? status, bool isHighPriority = false, bool isOverdue = false, String? date, int? tabId, bool? isAscending}) async {
if (showLoader) {
isDetailLoading = showLoader;
notifyListeners();
@@ -396,42 +421,45 @@ class CategoryTabs {
String label;
int tag;
int id;
+ RequestTypeEnum requestType;
+ String icon;
+ Color iconColor;
+ bool isHighPriority;
+ bool isOverDue;
- CategoryTabs({
- required this.label,
- required this.tag,
- required this.id,
- });
+ CategoryTabs({this.isHighPriority = false, this.isOverDue = false, required this.label, required this.tag, required this.id, required this.requestType, required this.icon, required this.iconColor});
static List getTabs({required UsersTypes userType, required BuildContext context}) {
List tabs = [];
if (userType == UsersTypes.engineer) {
- // tabs.add(CategoryTabs(label: 'Upcoming', tag: 0, id: 0));
- // tabs.add(CategoryTabs('Open', 1));
- tabs.add(CategoryTabs(label: 'UnAssigned', tag: 1, id: 1));
- tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2));
- tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3));
- tabs.add(CategoryTabs(label: 'Completed', tag: 3, id: 4));
+ tabs.add(CategoryTabs(label: 'UnAssigned', tag: 1, id: 1, requestType: RequestTypeEnum.unassigned, icon: "dashboard/unassigned", iconColor: AppColor.unassignedStatus(context)));
+ tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
+ tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
+ tabs.add(CategoryTabs(label: 'Completed', tag: 3, id: 4, requestType: RequestTypeEnum.completed, icon: "complete_request", iconColor: AppColor.completedColor));
+ tabs.add(CategoryTabs(label: context.translation.overdue, tag: 3, id: 4, requestType: RequestTypeEnum.overdue, icon: "overdue", iconColor: AppColor.yellowIcon(context), isOverDue: true));
+ tabs.add(CategoryTabs(label: context.translation.highPriority, tag: 3, id: 4, requestType: RequestTypeEnum.highPriority, icon: "high_priority", iconColor: AppColor.red30, isHighPriority: true));
+
return tabs;
}
if (userType == UsersTypes.qualityUser) {
- tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2));
- tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3));
- tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4));
+ tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
+ tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
+ tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestTypeEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs;
}
if (userType == UsersTypes.commissioningEngineer) {
- tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2));
- tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3));
- tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4));
+ tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
+ tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
+ tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestTypeEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs;
}
- tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2));
- tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3));
- tabs.add(CategoryTabs(label: 'Pending Acknowledgement', tag: 3, id: 1));
- tabs.add(CategoryTabs(label: 'Canceled', tag: 6, id: 4));
+ tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
+ tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
+ // tabs.add(CategoryTabs(label: 'Pending Acknowledgement', tag: 3, id: 1, requestType: RequestTypeEnum.pendingAcknowledgment, icon: "complete_request", iconColor: AppColor.overdueColor));
+ tabs.add(CategoryTabs(label: 'Acknowledgement', tag: 3, id: 1, requestType: RequestTypeEnum.pendingAcknowledgment, icon: "complete_request", iconColor: AppColor.overdueColor));
+ tabs.add(CategoryTabs(label: 'Canceled', tag: 6, id: 4, requestType: RequestTypeEnum.canceled, icon: "dashboard/unassigned", iconColor: AppColor.red30));
return tabs;
}
}
diff --git a/lib/dashboard_latest/dashboard_view.dart b/lib/dashboard_latest/dashboard_view.dart
index 8e898fb4..f527ac06 100644
--- a/lib/dashboard_latest/dashboard_view.dart
+++ b/lib/dashboard_latest/dashboard_view.dart
@@ -57,8 +57,13 @@ class _DashboardViewState extends State {
_dashBoardProvider.setTabs(userType: userProvider.user!.type!, context: context);
_dashBoardProvider.getDashBoardCount(usersType: userProvider.user!.type!);
_dashBoardProvider.resetRequestDataList();
+ _dashBoardProvider.currentListIndex=0;
_dashBoardProvider.getRequestDetail(
- usersType: userProvider.user!.type!, status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag, tabId: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].id);
+ usersType: userProvider.user!.type!,
+ status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag,
+ tabId: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].id,
+ isHighPriority: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].isHighPriority,
+ isOverdue: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].isOverDue);
}
void getInitialData() {
@@ -126,7 +131,9 @@ class _DashboardViewState extends State {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
- children: [16.height, ProgressFragment(), 16.height, if (isEngineer) const RequestsFragment(), const RequestCategoryFragment()],
+ children: [16.height, ProgressFragment(), 16.height,
+ // const RequestsFragment(),
+ const RequestCategoryFragment()],
),
),
),
diff --git a/lib/dashboard_latest/widgets/request_category_fragment.dart b/lib/dashboard_latest/widgets/request_category_fragment.dart
index 9207a172..5fb56375 100644
--- a/lib/dashboard_latest/widgets/request_category_fragment.dart
+++ b/lib/dashboard_latest/widgets/request_category_fragment.dart
@@ -56,7 +56,11 @@ class _RequestCategoryFragmentState extends State {
final bool isFMSEngineer = user?.type == UsersTypes.engineer && settingProvider.isUserFMS;
return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [
- //TODO uncommit this to get the calendar card..
+ getTabs(
+ requestsProvider: dashboardProvider,
+ context: context,
+ userType: Provider.of(context, listen: false).user?.type,
+ ),
!isNurse && dashboardProvider.tabs.isNotEmpty && dashboardProvider.tabs[dashboardProvider.currentListIndex].tag == 0
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -110,11 +114,6 @@ class _RequestCategoryFragmentState extends State {
// ).paddingOnly(start: 16, end: 16)
// : context.translation.allWorkOrder.heading4(context).paddingOnly(start: 16, end: 16),
- getTabs(
- requestsProvider: dashboardProvider,
- context: context,
- userType: Provider.of(context, listen: false).user?.type,
- ),
dashboardProvider.isDetailLoading
? Column(
mainAxisSize: MainAxisSize.max,
@@ -133,29 +132,62 @@ class _RequestCategoryFragmentState extends State {
Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes? userType}) {
List tabs = CategoryTabs.getTabs(userType: userType ?? UsersTypes.normal_user, context: context);
- return SizedBox(
- height: 44 + (context.isTablet() ? 36 : 16).toScreenHeight,
- child: ListView.separated(
- scrollDirection: Axis.horizontal,
- separatorBuilder: (cxt, index) => 12.width,
- padding: const EdgeInsets.only(top: 6 + 16, left: 16, right: 16),
- itemBuilder: (cxt, index) {
- return TabButton(
- label: tabs[index].label,
- loading: requestsProvider.isDetailLoading,
- isSelected: requestsProvider.currentListIndex == index,
- count: requestsProvider.requestDetailList != null ? requestsProvider.requestDetailList!.count ?? 0 : 0,
- onPressed: () async {
- setState(() {
- isAscending=false;
- });
- requestsProvider.currentListIndex = index;
- requestsProvider.resetRequestDataList();
- requestsProvider.getRequestDetail(usersType: userType ?? UsersTypes.normal_user, showLoader: true, status: tabs[index].tag, tabId: tabs[index].id);
- },
+ // SizedBox(
+ // height: 44 + (context.isTablet() ? 36 : 16).toScreenHeight,
+ // child: ListView.separated(
+ // scrollDirection: Axis.horizontal,
+ // separatorBuilder: (cxt, index) => 12.width,
+ // padding: const EdgeInsets.only(top: 6 + 16, left: 16, right: 16),
+ // itemBuilder: (cxt, index) {
+ // return TabButton(
+ // label: tabs[index].label,
+ // loading: requestsProvider.isDetailLoading,
+ // isSelected: requestsProvider.currentListIndex == index,
+ // count: requestsProvider.requestDetailList != null ? requestsProvider.requestDetailList!.count ?? 0 : 0,
+ // onPressed: () async {
+ // setState(() {
+ // isAscending = false;
+ // });
+ // requestsProvider.currentListIndex = index;
+ // requestsProvider.resetRequestDataList();
+ // requestsProvider.getRequestDetail(usersType: userType ?? UsersTypes.normal_user, showLoader: true, status: tabs[index].tag, tabId: tabs[index].id);
+ // },
+ // );
+ // },
+ // itemCount: tabs.length),
+ // );
+
+ return GridView.builder(
+ padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
+ physics: const NeverScrollableScrollPhysics(),
+ shrinkWrap: true,
+ gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: context.isTablet() ? 5 : 4, childAspectRatio: 85 / 85, crossAxisSpacing: 8, mainAxisSpacing: 8),
+ itemBuilder: (cxt, index) {
+ return RequestTypeButton(
+ label: tabs[index].label,
+ loading: requestsProvider.isDetailLoading && requestsProvider.currentListIndex == index,
+ isSelected: requestsProvider.currentListIndex == index,
+ count: requestsProvider.getStatusCount(tabs[index].requestType),
+ onPressed: () async {
+ setState(() {
+ isAscending = false;
+ });
+ requestsProvider.currentListIndex = index;
+ requestsProvider.resetRequestDataList();
+ requestsProvider.getRequestDetail(
+ usersType: userType ?? UsersTypes.normal_user,
+ showLoader: true,
+ status: tabs[index].tag,
+ tabId: tabs[index].id,
+ isHighPriority: tabs[index].isHighPriority,
+ isOverdue: tabs[index].isOverDue,
);
},
- itemCount: tabs.length),
+ icon: tabs[index].icon,
+ iconColor: tabs[index].iconColor,
+ );
+ },
+ itemCount: tabs.length,
);
}
}
diff --git a/lib/dashboard_latest/widgets/requests_fragment.dart b/lib/dashboard_latest/widgets/requests_fragment.dart
index 6eb64f7e..e613d0eb 100644
--- a/lib/dashboard_latest/widgets/requests_fragment.dart
+++ b/lib/dashboard_latest/widgets/requests_fragment.dart
@@ -5,6 +5,7 @@ import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
+import 'package:test_sa/extensions/enum_extensions.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
@@ -39,39 +40,44 @@ class RequestsFragment extends StatelessWidget {
@override
Widget build(BuildContext context) {
- // OPTIMIZATION: Using Selector instead of Consumer
- // This reduces rebuilds by 70% - only rebuilds when dashboardCount or isLoading changes
- // Previously rebuilt on ANY provider change (tabs, filters, navigation, etc.)
return Selector(
- selector: (_, provider) => _DashboardCountData(
- dashboardCount: provider.dashboardCount,
- isLoading: provider.isAllCountLoading,
- ),
- builder: (context, data, _) => GridView(
- padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
- physics: const NeverScrollableScrollPhysics(),
- shrinkWrap: true,
- gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: context.isTablet() ? 5 : 4, childAspectRatio: 85 / 85, crossAxisSpacing: 8, mainAxisSpacing: 8),
- children: [
- listItem(
- data.dashboardCount?.data?.countHighPriority ?? 0,
- "high_priority",
- context.translation.highPriority,
- context,
- data.isLoading,
- 0,
- context.isDark ? AppColor.redStatus(context) : AppColor.red30,
- ),
- listItem(data.dashboardCount?.data?.countOverdue ?? 0, "overdue", context.translation.overdue, context, data.isLoading, 1, AppColor.yellowIcon(context)),
- listItem(data.dashboardCount?.data?.countInprogress ?? 0, "new_request", ApiManager.instance.user?.type == UsersTypes.engineer ? context.translation.inProgress : context.translation.newR,
- context, data.isLoading, 2, AppColor.primary10),
- listItem(data.dashboardCount?.data?.countComplete ?? 0, "complete_request", context.translation.completed, context, data.isLoading, 3, AppColor.greenStatus(context)),
- ],
- ),
- );
+ selector: (_, provider) => _DashboardCountData(dashboardCount: provider.dashboardCount, isLoading: provider.isAllCountLoading),
+ builder: (context, data, _) {
+ List listItems = [];
+ if (context.userProvider.isNurse) {
+ listItems = [
+ requestType(data.dashboardCount?.data?.countOpen ?? 0, "dashboard/open_icon", context.translation.open, context, data.isLoading, RequestTypeEnum.open, AppColor.openColor),
+ requestType(data.dashboardCount?.data?.countInprogress ?? 0, "dashboard/inprogress_icon", context.translation.inProgress, context, data.isLoading, RequestTypeEnum.inProgress,
+ AppColor.primary10),
+ requestType(
+ data.dashboardCount?.data?.countAcknowledge ?? 0, "complete_request", "Acknowledgement", context, data.isLoading, RequestTypeEnum.pendingAcknowledgment, AppColor.overdueColor),
+ requestType(data.dashboardCount?.data?.countCanceled ?? 0, "dashboard/unassigned", "Canceled", context, data.isLoading, RequestTypeEnum.canceled, AppColor.red30),
+ ];
+ } else {
+ listItems = [
+ requestType(
+ data.dashboardCount?.data?.countUnAssigned ?? 0, "dashboard/unassigned", "UnAssigned", context, data.isLoading, RequestTypeEnum.unassigned, AppColor.unassignedStatus(context)),
+ requestType(data.dashboardCount?.data?.countOpen ?? 0, "dashboard/open_icon", context.translation.open, context, data.isLoading, RequestTypeEnum.open, AppColor.openColor),
+ requestType(data.dashboardCount?.data?.countInprogress ?? 0, "dashboard/inprogress_icon", context.translation.inProgress, context, data.isLoading, RequestTypeEnum.inProgress,
+ AppColor.primary10),
+ requestType(
+ data.dashboardCount?.data?.countComplete ?? 0, "complete_request", context.translation.completed, context, data.isLoading, RequestTypeEnum.completed, AppColor.completedColor),
+ requestType(data.dashboardCount?.data?.countOverdue ?? 0, "overdue", context.translation.overdue, context, data.isLoading, RequestTypeEnum.overdue, AppColor.yellowIcon(context)),
+ requestType(data.dashboardCount?.data?.countHighPriority ?? 0, "high_priority", context.translation.highPriority, context, data.isLoading, RequestTypeEnum.highPriority, AppColor.red30),
+ ];
+ }
+
+ return GridView(
+ padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
+ physics: const NeverScrollableScrollPhysics(),
+ shrinkWrap: true,
+ gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: context.isTablet() ? 5 : 4, childAspectRatio: 85 / 85, crossAxisSpacing: 8, mainAxisSpacing: 8),
+ children: listItems,
+ );
+ });
}
- Widget listItem(int value, String icon, String title, BuildContext context, bool isLoading, int index, Color iconColor) {
+ Widget requestType(int value, String icon, String title, BuildContext context, bool isLoading, RequestTypeEnum requestType, Color iconColor) {
return CustomBadge(
value: isLoading ? 0 : value,
positionR: -4,
@@ -93,748 +99,9 @@ class RequestsFragment extends StatelessWidget {
.onPress(isLoading
? null
: () async {
- await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index, title)));
+ await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(1, title)));
Provider.of(context, listen: false).refreshDashboard(userType: Provider.of(context, listen: false).user!.type!, context: context);
})
.paddingOnly(end: 4, top: 4);
}
}
-
-//
-// import 'package:flutter/material.dart';
-// import 'package:provider/provider.dart';
-// import 'package:test_sa/controllers/api_routes/api_manager.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/controllers/providers/api/user_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';
-// import 'package:test_sa/extensions/widget_extensions.dart';
-// import 'package:badges/badges.dart' as badges;
-// import 'package:test_sa/models/enums/user_types.dart';
-// import 'package:test_sa/new_views/app_style/app_color.dart';
-// import 'package:test_sa/new_views/common_widgets/app_floating_action_button.dart';
-// import 'package:test_sa/new_views/pages/land_page/requests_list_page.dart';
-//
-// class RequestsFragment extends StatelessWidget {
-// const RequestsFragment({Key? key}) : super(key: key);
-//
-// @override
-// Widget build(BuildContext context) {
-// return Consumer(
-// builder: (context, snapshot, _) => RefreshIndicator(
-// onRefresh: () async {
-// snapshot.getRequests();
-// await Provider.of(context, listen: false).getSystemNotifications(
-// user: Provider.of(context, listen: false).user,
-// resetProvider: true,
-// );
-// return Future.delayed(const Duration(milliseconds: 250));
-// },
-// child: Row(
-// mainAxisAlignment: MainAxisAlignment.spaceBetween,
-// children: _buildListItems(context, snapshot),
-// ),
-// ),
-// );
-// }
-//
-// List _buildListItems(BuildContext context, AllRequestsProvider snapshot) {
-// final Map requestItems = {
-// 'high_priority': {
-// 'count': snapshot.highPriorityRequests?.total?.count,
-// 'translation': context.translation.highPriority,
-// 'isLoading': snapshot.isAllLoading,
-// 'color': context.isDark ? AppColor.redStatus(context) : AppColor.red50,
-// },
-// 'overdue': {
-// 'count': snapshot.overdueRequests?.total?.count,
-// 'translation': context.translation.overdue,
-// 'isLoading': snapshot.isAllLoading,
-// 'color': AppColor.yellowStatus(context),
-// },
-// 'new_request': {
-// 'count': snapshot.openRequests?.total?.count,
-// 'translation': ApiManager.instance.user.type == UsersTypes.engineer ? context.translation.inProgress : context.translation.newR,
-// 'isLoading': snapshot.isAllLoading,
-// 'color': AppColor.primary40,
-// },
-// 'complete_request': {
-// 'count': snapshot.completedRequests?.total?.count,
-// 'translation': context.translation.completed,
-// 'isLoading': snapshot.isAllLoading,
-// 'color': AppColor.greenStatus(context),
-// },
-// };
-//
-// return requestItems.entries.map((entry) {
-// final key = entry.key;
-// final value = entry.value;
-//
-// return listItem(
-// value['count'],
-// key,
-// value['translation'],
-// context,
-// value['isLoading'],
-// requestItems.keys.toList().indexOf(key),
-// value['color'],
-// );
-// }).toList();
-// }
-//
-// Widget listItem(
-// int value,
-// String icon,
-// String title,
-// BuildContext context,
-// bool isLoading,
-// int index,
-// Color iconColor,
-// ) {
-// return GestureDetector(
-// onTap: isLoading
-// ? null
-// : () {
-// Navigator.push(
-// context,
-// MaterialPageRoute(
-// builder: (context) => RequestsListPage(index),
-// ),
-// );
-// // Provider.of(context, listen: false).isAllLoading = true;
-// // Provider.of(context, listen: false)
-// // .getRequests();
-// },
-// child: Column(
-// crossAxisAlignment: CrossAxisAlignment.start,
-// children: [
-// value != null && value > 0 && !isLoading
-// ? badges.Badge(
-// badgeContent: Text(
-// value.toString(),
-// style: const TextStyle(
-// color: AppColor.white20,
-// fontWeight: FontWeight.normal,
-// ),
-// ),
-// badgeStyle: const badges.BadgeStyle(padding: EdgeInsets.all(4), badgeColor: AppColor.red30),
-// child: Container(
-// child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading),
-// ).toShadowCircleContainer(context, padding: 18),
-// )
-// : Container(
-// child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading),
-// ).toShadowCircleContainer(context, padding: 18),
-// 10.height,
-// Text(
-// title,
-// style: AppTextStyles.bodyText.copyWith(
-// color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,
-// ),
-// ),
-// ],
-// ),
-// );
-// }
-// }
-
-// import 'package:flutter/material.dart';
-// import 'package:provider/provider.dart';
-// import 'package:test_sa/controllers/api_routes/api_manager.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/controllers/providers/api/user_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';
-// import 'package:test_sa/extensions/widget_extensions.dart';
-// import 'package:badges/badges.dart' as badges;
-// import 'package:test_sa/models/enums/user_types.dart';
-// import 'package:test_sa/new_views/app_style/app_color.dart';
-// import 'package:test_sa/new_views/common_widgets/app_floating_action_button.dart';
-// import 'package:test_sa/new_views/pages/land_page/requests_list_page.dart';
-//
-// class RequestsFragment extends StatelessWidget {
-// const RequestsFragment({Key? key}) : super(key: key);
-//
-// @override
-// Widget build(BuildContext context) {
-// return Scaffold(
-// // todo check here, nurse can add request not engineer
-// floatingActionButton: const AppFloatingActionButton(),
-// body: Consumer(
-// builder: (context, snapshot, _) => RefreshIndicator(
-// onRefresh: () {
-// snapshot.getRequests();
-// Provider.of(context, listen: false)
-// .getSystemNotifications(
-// user: Provider.of(context, listen: false)
-// .user,
-// resetProvider: true);
-// return Future.delayed(const Duration(microseconds: 250));
-// },
-// child: Container(
-// height: 200.toScreenHeight,
-// color: Colors.blue,
-// child: Wrap(
-// children: [
-// listItem(
-// snapshot.highPriorityRequests?.total?.count,
-// "high_priority",
-// context.translation.highPriority,
-// context,
-// snapshot.isHighPriorityLoading,
-// 0,
-// context.isDark ? AppColor.redStatus(context) : AppColor.red50,
-// ),
-// ],
-// ),
-// // child: ListView(
-// // // padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
-// // children: [
-// // listItem(
-// // snapshot.highPriorityRequests?.total?.count,
-// // "high_priority",
-// // context.translation.highPriority,
-// // context,
-// // snapshot.isHighPriorityLoading,
-// // 0,
-// // context.isDark ? AppColor.redStatus(context) : AppColor.red50,
-// // ),
-// // listItem(
-// // snapshot.overdueRequests?.total?.count,
-// // "overdue",
-// // context.translation.overdue,
-// // context,
-// // snapshot.isOverdueLoading,
-// // 1,
-// // AppColor.yellowStatus(context),
-// // ),
-// // listItem(
-// // snapshot.openRequests?.total?.count,
-// // "new_request",
-// // ApiManager.instance.user.type == UsersTypes.engineer
-// // ? context.translation.inProgress
-// // : context.translation.newR,
-// // context,
-// // snapshot.isOpenLoading,
-// // 2,
-// // AppColor.primary40,
-// // ),
-// // listItem(
-// // snapshot.completedRequests?.total?.count,
-// // "complete_request",
-// // context.translation.completed,
-// // context,
-// // snapshot.isCompleteLoading,
-// // 3,
-// // AppColor.greenStatus(context),
-// // ),
-// // ],
-// // ),
-// )),
-// ),
-// );
-// }
-//
-// Widget listItem(
-// int value,
-// String icon,
-// String title,
-// BuildContext context,
-// bool isLoading,
-// int index,
-// Color iconColor,
-// ) {
-// return GestureDetector(
-// onTap: isLoading
-// ? null
-// : () async {
-// await Navigator.push(
-// context,
-// MaterialPageRoute(
-// builder: (context) => RequestsListPage(index)));
-// Provider.of(context, listen: false)
-// .getRequests();
-// },
-// child: Column(
-// crossAxisAlignment: CrossAxisAlignment.start,
-// children: [
-// value != null && value > 0 && !isLoading
-// ? badges.Badge(
-// badgeContent: Text(
-// value.toString(),
-// style: const TextStyle(
-// color: AppColor.white20,
-// fontWeight: FontWeight.normal,
-// ),
-// ),
-// badgeStyle: const badges.BadgeStyle(padding: EdgeInsets.all(4), badgeColor: AppColor.red30),
-// child: Container(
-// child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading),
-// ).toShadowCircleContainer(context, padding: 18),
-// )
-// : Container(
-// child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading),
-// ).toShadowCircleContainer(context, padding: 18),
-// 10.height,
-// Text(
-// title,
-// style: AppTextStyles.bodyText.copyWith(
-// color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,
-// ),
-// ),
-// ],
-// ),
-// );
-// }
-// }
-
-// import 'package:flutter/material.dart';
-// import 'package:provider/provider.dart';
-// import 'package:test_sa/controllers/api_routes/api_manager.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/controllers/providers/api/user_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';
-// import 'package:test_sa/extensions/widget_extensions.dart';
-// import 'package:badges/badges.dart' as badges;
-// import 'package:test_sa/models/enums/user_types.dart';
-// import 'package:test_sa/new_views/app_style/app_color.dart';
-// import 'package:test_sa/new_views/common_widgets/app_floating_action_button.dart';
-// import 'package:test_sa/new_views/pages/land_page/requests_list_page.dart';
-//
-// class RequestsFragment extends StatelessWidget {
-// const RequestsFragment({Key? key}) : super(key: key);
-//
-// @override
-// Widget build(BuildContext context) {
-// return Scaffold(
-// // todo check here, nurse can add request not engineer
-// floatingActionButton: const AppFloatingActionButton(),
-// body: Consumer(
-// builder: (context, snapshot, _) => RefreshIndicator(
-// onRefresh: () {
-// snapshot.getRequests();
-// Provider.of(context, listen: false)
-// .getSystemNotifications(
-// user: Provider.of(context, listen: false)
-// .user,
-// resetProvider: true);
-// return Future.delayed(const Duration(microseconds: 250));
-// },
-// child: Container(
-// height: 200.toScreenHeight,
-// color: Colors.blue,
-// child: Wrap(
-// children: [
-// listItem(
-// snapshot.highPriorityRequests?.total?.count,
-// "high_priority",
-// context.translation.highPriority,
-// context,
-// snapshot.isHighPriorityLoading,
-// 0,
-// context.isDark ? AppColor.redStatus(context) : AppColor.red50,
-// ),
-// ],
-// ),
-// // child: ListView(
-// // // padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
-// // children: [
-// // listItem(
-// // snapshot.highPriorityRequests?.total?.count,
-// // "high_priority",
-// // context.translation.highPriority,
-// // context,
-// // snapshot.isHighPriorityLoading,
-// // 0,
-// // context.isDark ? AppColor.redStatus(context) : AppColor.red50,
-// // ),
-// // listItem(
-// // snapshot.overdueRequests?.total?.count,
-// // "overdue",
-// // context.translation.overdue,
-// // context,
-// // snapshot.isOverdueLoading,
-// // 1,
-// // AppColor.yellowStatus(context),
-// // ),
-// // listItem(
-// // snapshot.openRequests?.total?.count,
-// // "new_request",
-// // ApiManager.instance.user.type == UsersTypes.engineer
-// // ? context.translation.inProgress
-// // : context.translation.newR,
-// // context,
-// // snapshot.isOpenLoading,
-// // 2,
-// // AppColor.primary40,
-// // ),
-// // listItem(
-// // snapshot.completedRequests?.total?.count,
-// // "complete_request",
-// // context.translation.completed,
-// // context,
-// // snapshot.isCompleteLoading,
-// // 3,
-// // AppColor.greenStatus(context),
-// // ),
-// // ],
-// // ),
-// )),
-// ),
-// );
-// }
-//
-// Widget listItem(
-// int value,
-// String icon,
-// String title,
-// BuildContext context,
-// bool isLoading,
-// int index,
-// Color iconColor,
-// ) {
-// return GestureDetector(
-// onTap: isLoading
-// ? null
-// : () async {
-// await Navigator.push(
-// context,
-// MaterialPageRoute(
-// builder: (context) => RequestsListPage(index)));
-// Provider.of(context, listen: false)
-// .getRequests();
-// },
-// child: Column(
-// crossAxisAlignment: CrossAxisAlignment.start,
-// children: [
-// value != null && value > 0 && !isLoading
-// ? badges.Badge(
-// badgeContent: Text(
-// value.toString(),
-// style: const TextStyle(
-// color: AppColor.white20,
-// fontWeight: FontWeight.normal,
-// ),
-// ),
-// badgeStyle: const badges.BadgeStyle(padding: EdgeInsets.all(4), badgeColor: AppColor.red30),
-// child: Container(
-// child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading),
-// ).toShadowCircleContainer(context, padding: 18),
-// )
-// : Container(
-// child: (icon ?? "").toSvgAsset(height: 26, width: 26, color: iconColor)?.toShimmer(isShow: isLoading),
-// ).toShadowCircleContainer(context, padding: 18),
-// 10.height,
-// Text(
-// title,
-// style: AppTextStyles.bodyText.copyWith(
-// color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,
-// ),
-// ),
-// ],
-// ),
-// );
-// }
-// }
-
-// import 'package:flutter/material.dart';
-// import 'package:provider/provider.dart';
-// import 'package:test_sa/controllers/api_routes/api_manager.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/controllers/providers/api/user_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';
-// import 'package:test_sa/extensions/widget_extensions.dart';
-// import 'package:badges/badges.dart' as badges;
-// import 'package:test_sa/models/enums/user_types.dart';
-// import 'package:test_sa/new_views/app_style/app_color.dart';
-// import 'package:test_sa/new_views/common_widgets/app_floating_action_button.dart';
-// import 'package:test_sa/new_views/pages/land_page/requests_list_page.dart';
-//
-// class RequestsFragment extends StatelessWidget {
-// const RequestsFragment({Key? key}) : super(key: key);
-//
-// @override
-// Widget build(BuildContext context) {
-// return Scaffold(
-// // todo check here, nurse can add request not engineer
-// floatingActionButton: const AppFloatingActionButton(),
-// body: Consumer(
-// builder: (context, snapshot, _) => RefreshIndicator(
-// onRefresh: () {
-// snapshot.getRequests();
-// Provider.of(context, listen: false)
-// .getSystemNotifications(
-// user: Provider.of(context, listen: false)
-// .user,
-// resetProvider: true);
-// return Future.delayed(const Duration(microseconds: 250));
-// },
-// child: Container(
-// height: 200.toScreenHeight,
-// color: Colors.blue,
-// child: Wrap(
-// children: [
-// listItem(
-// snapshot.highPriorityRequests?.total?.count,
-// "high_priority",
-// context.translation.highPriority,
-// context,
-// snapshot.isHighPriorityLoading,
-// 0,
-// context.isDark ? AppColor.redStatus(context) : AppColor.red50,
-// ),
-// ],
-// ),
-// // child: ListView(
-// // // padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
-// // children: [
-// // listItem(
-// // snapshot.highPriorityRequests?.total?.count,
-// // "high_priority",
-// // context.translation.highPriority,
-// // context,
-// // snapshot.isHighPriorityLoading,
-// // 0,
-// // context.isDark ? AppColor.redStatus(context) : AppColor.red50,
-// // ),
-// // listItem(
-// // snapshot.overdueRequests?.total?.count,
-// // "overdue",
-// // context.translation.overdue,
-// // context,
-// // snapshot.isOverdueLoading,
-// // 1,
-// // AppColor.yellowStatus(context),
-// // ),
-// // listItem(
-// // snapshot.openRequests?.total?.count,
-// // "new_request",
-// // ApiManager.instance.user.type == UsersTypes.engineer
-// // ? context.translation.inProgress
-// // : context.translation.newR,
-// // context,
-// // snapshot.isOpenLoading,
-// // 2,
-// // AppColor.primary40,
-// // ),
-// // listItem(
-// // snapshot.completedRequests?.total?.count,
-// // "complete_request",
-// // context.translation.completed,
-// // context,
-// // snapshot.isCompleteLoading,
-// // 3,
-// // AppColor.greenStatus(context),
-// // ),
-// // ],
-// // ),
-// )),
-// ),
-// );
-// }
-//
-// Widget listItem(
-// int value,
-// String icon,
-// String title,
-// BuildContext context,
-// bool isLoading,
-// int index,
-// Color iconColor,
-// ) {
-// value = 4;
-// return GestureDetector(
-// onTap: isLoading
-// ? null
-// : () async {
-// await Navigator.push(
-// context,
-// MaterialPageRoute(
-// builder: (context) => RequestsListPage(index)));
-// Provider.of(context, listen: false)
-// .getRequests();
-// },
-// child: Column(
-// crossAxisAlignment: CrossAxisAlignment.start,
-// children: [
-// value!=null&&value > 0
-// ? badges.Badge(
-// badgeContent: Text(
-// value.toString(),
-// style: const TextStyle(
-// color: AppColor.white20,
-// // fontSize: 1.3.h,
-// fontWeight: FontWeight.normal),
-// ),
-// badgeStyle: badges.BadgeStyle(
-// padding: EdgeInsets.all(9),
-// ),
-// child: Container(
-// padding: const EdgeInsets.all(20),
-// decoration: const BoxDecoration(
-// shape: BoxShape.circle,
-// //TODO add color according to theme...
-// color: AppColor.white20, // Background color of the circle
-// ),
-// child: (icon ?? "")
-// .toSvgAsset(height: 40, width: 40, color: iconColor)
-// ?.toShimmer(isShow: isLoading),
-// ))
-// : Container(
-// padding: const EdgeInsets.all(20),
-// decoration: const BoxDecoration(
-// shape: BoxShape.circle,
-// //TODO add color according to theme...
-// color: AppColor.white20, // Background color of the circle
-// ),
-// child: (icon ?? "")
-// .toSvgAsset(height: 48, width: 48, color: iconColor)
-// ?.toShimmer(isShow: isLoading),
-// ),
-// // Container(
-// // padding: const EdgeInsets.all(20),
-// // decoration: const BoxDecoration(
-// // shape: BoxShape.circle,
-// // //TODO add color according to theme...
-// // color: AppColor.white20, // Background color of the circle
-// // ),
-// // child: (icon ?? "")
-// // .toSvgAsset(height: 48, width: 48, color: iconColor)
-// // ?.toShimmer(isShow: isLoading),
-// // ),
-// 20.height,
-// Text(
-// title,
-// style: AppTextStyles.heading5.copyWith(
-// color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,
-// ),
-// ),
-// // Text(
-// // "$title\n${context.translation.requests}",
-// // style: AppTextStyles.heading5.copyWith(
-// // color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,
-// // ),
-// // ).toShimmer(isShow: isLoading),
-// // 8.height,
-// // Row(
-// // mainAxisSize: MainAxisSize.min,
-// // children: [
-// // Text(
-// // context.translation.viewDetails,
-// // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.primary40 : AppColor.primary50),
-// // ),
-// // 4.width,
-// // Icon(
-// // Icons.arrow_forward,
-// // color: context.isDark ? AppColor.primary40 : AppColor.primary50,
-// // size: 14,
-// // )
-// // ],
-// // ).toShimmer(isShow: isLoading),
-// ],
-// ),
-// );
-// }
-//
-// // Widget listItem(int value, String icon, String title, BuildContext context, bool isLoading, int index, Color iconColor) {
-// // return Column(
-// // crossAxisAlignment: CrossAxisAlignment.start,
-// // children: [
-// // Row(
-// // crossAxisAlignment: CrossAxisAlignment.start,
-// // children: [
-// // //TODO add this to badges
-// // // Text(
-// // // value?.toString() ?? "-",
-// // // style: AppTextStyles.heading1.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, height: 1),
-// // // ).toShimmer(isShow: isLoading).expanded,
-// // // 8.width,
-// // (icon ?? "").toSvgAsset(height: 48, width: 48, color: iconColor)?.toShimmer(isShow: isLoading),
-// // ],
-// // ),
-// // // Text(
-// // // "$title\n${context.translation.requests}",
-// // // style: AppTextStyles.heading5.copyWith(
-// // // color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,
-// // // ),
-// // // ).toShimmer(isShow: isLoading),
-// // // 8.height,
-// // // Row(
-// // // mainAxisSize: MainAxisSize.min,
-// // // children: [
-// // // Text(
-// // // context.translation.viewDetails,
-// // // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.primary40 : AppColor.primary50),
-// // // ),
-// // // 4.width,
-// // // Icon(
-// // // Icons.arrow_forward,
-// // // color: context.isDark ? AppColor.primary40 : AppColor.primary50,
-// // // size: 14,
-// // // )
-// // // ],
-// // // ).toShimmer(isShow: isLoading),
-// // ],
-// // ).toShadowContainer(context).onPress(isLoading
-// // ? null
-// // : () async {
-// // await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index)));
-// // Provider.of(context, listen: false).getRequests();
-// // });
-// // }
-// }
-// Widget listItem(int value, String icon, String title, BuildContext context, bool isLoading, int index, Color iconColor) {
-// return Column(
-// crossAxisAlignment: CrossAxisAlignment.start,
-// children: [
-// Row(
-// crossAxisAlignment: CrossAxisAlignment.start,
-// children: [
-// Text(
-// value?.toString() ?? "-",
-// style: AppTextStyles.bodyText2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, height: 1),
-// ).toShimmer(isShow: isLoading).expanded,
-// 8.width,
-// (icon ?? "").toSvgAsset(height: 48, width: 48, color: iconColor)?.toShimmer(isShow: isLoading),
-// ],
-// ).expanded,
-// Text(
-// "$title\n${context.translation.requests}",
-// style: AppTextStyles.bodyText2.copyWith(
-// color: context.isDark ? AppColor.neutral30 : AppColor.neutral50,
-// ),
-// ).toShimmer(isShow: isLoading),
-// // 8.height,
-// // Row(
-// // mainAxisSize: MainAxisSize.min,
-// // children: [
-// // Text(
-// // context.translation.viewDetails,
-// // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.primary40 : AppColor.primary50),
-// // ),
-// // 4.width,
-// // Icon(
-// // Icons.arrow_forward,
-// // color: context.isDark ? AppColor.primary40 : AppColor.primary50,
-// // size: 14,
-// // )
-// // ],
-// // ).toShimmer(isShow: isLoading),
-// ],
-// ).toShadowContainer(context, padding: 0).onPress(isLoading
-// ? null
-// : () async {
-// await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index)));
-// Provider.of(context, listen: false).getRequests();
-// });
-// }
diff --git a/lib/extensions/enum_extensions.dart b/lib/extensions/enum_extensions.dart
index 3dd98eef..5039329c 100644
--- a/lib/extensions/enum_extensions.dart
+++ b/lib/extensions/enum_extensions.dart
@@ -196,3 +196,15 @@ enum AssetDeliveryStageEnum {
endUserAcceptance,
other,
}
+
+enum RequestTypeEnum {
+ unassigned,
+ open,
+ inProgress,
+ completed,
+ closed,
+ canceled,
+ overdue,
+ highPriority,
+ pendingAcknowledgment,
+}
diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart
index bc5f3c8a..2dc5cf00 100644
--- a/lib/extensions/widget_extensions.dart
+++ b/lib/extensions/widget_extensions.dart
@@ -140,7 +140,7 @@ extension WidgetExtensions on Widget {
margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
decoration: BoxDecoration(
// color: AppColor.background(context),
- color: Theme.of(context).scaffoldBackgroundColor,
+ color: AppColor.bottomSheetColor(context),
borderRadius: const BorderRadius.only(topRight: Radius.circular(20), topLeft: Radius.circular(20)),
),
padding: padding ?? EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
@@ -151,7 +151,7 @@ extension WidgetExtensions on Widget {
clipBehavior: Clip.antiAlias,
margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
decoration: BoxDecoration(
- color: AppColor.background(context),
+ color: AppColor.bottomSheetColor(context),
borderRadius: const BorderRadius.only(topRight: Radius.circular(30), topLeft: Radius.circular(30)),
),
padding: padding ?? EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight),
diff --git a/lib/models/new_models/dashboard_count.dart b/lib/models/new_models/dashboard_count.dart
index 55bafffa..0f1f59db 100644
--- a/lib/models/new_models/dashboard_count.dart
+++ b/lib/models/new_models/dashboard_count.dart
@@ -35,19 +35,25 @@ class Data {
int? countOpen;
int? countInprogress;
int? countComplete;
+ int? countClose;
+ int? countCanceled;
int? countAcknowledge;
int? countHighPriority;
int? countOverdue;
+ int? countUnAssigned;
- Data({this.countOpen, this.countInprogress, this.countComplete, this.countAcknowledge, this.countHighPriority, this.countOverdue});
+ Data({this.countOpen, this.countInprogress,this.countCanceled, this.countComplete, this.countAcknowledge, this.countHighPriority, this.countOverdue, this.countClose, this.countUnAssigned});
Data.fromJson(Map json) {
countOpen = json['countOpen'] ?? 0;
countInprogress = json['countInprogress'] ?? 0;
countComplete = json['countComplete'] ?? 0;
+ countCanceled = json['countCanceled'] ?? 0;
+ countClose = json['countClose'] ?? 0;
countAcknowledge = json['countAcknowledge'] ?? 0;
countHighPriority = json['countHighPriority'] ?? 0;
countOverdue = json['countOverdue'] ?? 0;
+ countUnAssigned = json['countUnAssigned'] ?? 0;
}
Map toJson() {
@@ -55,9 +61,12 @@ class Data {
data['countOpen'] = countOpen;
data['countInprogress'] = countInprogress;
data['countComplete'] = countComplete;
+ data['countCanceled'] = countCanceled;
+ data['countClose'] = countClose;
data['countAcknowledge'] = countAcknowledge;
data['countHighPriority'] = countHighPriority;
data['countOverdue'] = countOverdue;
+ data['countUnAssigned'] = countUnAssigned;
return data;
}
}
diff --git a/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart
index 90060402..ebf38029 100644
--- a/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart
+++ b/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart
@@ -640,13 +640,7 @@ class ServiceRequestBottomSheet {
Widget customListItem({required BuildContext context, required String icon, required String heading, required String subHeading, required VoidCallback onTap}) {
return GestureDetector(
- onTap: onTap, // Handles the tap
- child: Card(
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(14), // Circular border radius
- ),
- // color: AppColor.neutral80,
- color: AppColor.background(context),
+ onTap: onTap, // Handles the tap
child: Row(
crossAxisAlignment: CrossAxisAlignment.start, // Align items at the top
children: [
@@ -670,9 +664,7 @@ class ServiceRequestBottomSheet {
).paddingOnly(end: 50),
),
],
- ).paddingAll(12),
- ),
- );
+ ).toShadowContainer(context));
}
void onItemTap({required int index, required BuildContext context}) {
@@ -711,12 +703,13 @@ class ServiceRequestBottomSheet {
alignment: AlignmentDirectional.centerStart,
child: context.translation.selectAction.bottomSheetHeadingTextStyle(context),
),
- 16.height,
- ListView.builder(
+ // 16.height,
+ ListView.separated(
shrinkWrap: true,
- padding: EdgeInsets.zero,
+ padding: const EdgeInsets.only(top: 16, bottom: 16),
itemCount: items.length,
physics: const NeverScrollableScrollPhysics(),
+ separatorBuilder: (cxt, index) => 12.height,
itemBuilder: (context, index) {
final item = items[index];
return customListItem(
diff --git a/lib/modules/cm_module/views/components/service_request_detail_view.dart b/lib/modules/cm_module/views/components/service_request_detail_view.dart
index 01a5ac5c..749fccc4 100644
--- a/lib/modules/cm_module/views/components/service_request_detail_view.dart
+++ b/lib/modules/cm_module/views/components/service_request_detail_view.dart
@@ -22,6 +22,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
+import 'package:test_sa/views/widgets/item_views/info_header_widget.dart';
import 'package:test_sa/views/widgets/item_views/info_text_widget.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
@@ -193,9 +194,11 @@ class _ServiceRequestDetailViewState extends State {
8.height,
Text(
context.translation.assetInformation,
- style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
+ style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
),
+ // InfoHeader16Widget(context.translation.assetInformation),
8.height,
+ InfoTextWidget(label: context.translation.assetName,value: workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach),
Text(
'${context.translation.assetName}: ${workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
diff --git a/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart b/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart
index de312a41..32f3b88c 100644
--- a/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart
+++ b/lib/modules/cm_module/views/forms/spare_part/spare_part_request.dart
@@ -127,83 +127,104 @@ class _SparePartRequestState extends State with TickerProvider
child: Column(
children: [
SingleChildScrollView(
- padding: const EdgeInsets.all(12),
+ padding: const EdgeInsets.all(16),
child: IgnorePointer(
ignoring: _requestDetailProvider!.isReadOnlyRequest,
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
- Card(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.stretch,
- children: [
- context.translation.sparePartDetails.heading5(context).custom(color: AppColor.textStyleColor(context)),
- // 12.height,
- // SingleItemDropDownMenu(
- // context: context,
- // height: 56.toScreenHeight,
- // title: context.translation.activityStatus,
- // showShadow: false,
- // backgroundColor: AppColor.neutral100,
- // initialValue: requestDetailProvider.sparePartHelperModel?.activityStatus,
- // onSelect: (status) {
- // requestDetailProvider.sparePartHelperModel?.activityStatus = status;
- // },
- // ),
- 12.height,
- SingleItemDropDownMenu(
- context: context,
- title: context.translation.part,
- staticData: _spareParts,
- showShadow: false,
- showAsBottomSheet: true,
- loading: _isLoading,
- initialValue: requestDetailProvider.sparePartHelperModel?.sparePart,
- backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
- onSelect: (part) async {
- if (part != null) {
- requestDetailProvider.sparePartHelperModel?.sparePart = part;
- _oracleNoController.text = part.oracleCode ?? '';
- requestDetailProvider.updateSparePartHelperModel(_requestDetailProvider?.sparePartHelperModel);
- }
- },
- ),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ context.translation.sparePartDetails.heading5(context).custom(color: AppColor.textStyleColor(context)),
+ // 12.height,
+ // SingleItemDropDownMenu(
+ // context: context,
+ // height: 56.toScreenHeight,
+ // title: context.translation.activityStatus,
+ // showShadow: false,
+ // backgroundColor: AppColor.neutral100,
+ // initialValue: requestDetailProvider.sparePartHelperModel?.activityStatus,
+ // onSelect: (status) {
+ // requestDetailProvider.sparePartHelperModel?.activityStatus = status;
+ // },
+ // ),
+ 12.height,
+ SingleItemDropDownMenu(
+ context: context,
+ title: context.translation.part,
+ staticData: _spareParts,
+ showShadow: false,
+ showAsBottomSheet: true,
+ loading: _isLoading,
+ initialValue: requestDetailProvider.sparePartHelperModel?.sparePart,
+ backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
+ onSelect: (part) async {
+ if (part != null) {
+ requestDetailProvider.sparePartHelperModel?.sparePart = part;
+ _oracleNoController.text = part.oracleCode ?? '';
+ requestDetailProvider.updateSparePartHelperModel(_requestDetailProvider?.sparePartHelperModel);
+ }
+ },
+ ),
- if (requestDetailProvider.sparePartHelperModel?.sparePart?.id != null) ...[
- 12.height,
- SizedBox(
- height: 30.toScreenHeight,
- child: Text('View Parts Availability',
- style: TextStyle(
- fontSize: 12.toScreenWidth,
- fontWeight: FontWeight.w500,
- fontStyle: FontStyle.normal,
- color: AppColor.primary10,
- decorationColor: AppColor.primary10,
- decoration: TextDecoration.underline,
- )).onPress(
- () async {
- requestDetailProvider.getStoreAvailabilityById(partId: requestDetailProvider.sparePartHelperModel?.sparePart?.id);
- showModalBottomSheet(
- context: context,
- isScrollControlled: true,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.vertical(
- top: Radius.circular(20),
- ),
+ if (requestDetailProvider.sparePartHelperModel?.sparePart?.id != null) ...[
+ 12.height,
+ SizedBox(
+ height: 30.toScreenHeight,
+ child: Text('View Parts Availability',
+ style: TextStyle(
+ fontSize: 12.toScreenWidth,
+ fontWeight: FontWeight.w500,
+ fontStyle: FontStyle.normal,
+ color: AppColor.primary10,
+ decorationColor: AppColor.primary10,
+ decoration: TextDecoration.underline,
+ )).onPress(
+ () async {
+ requestDetailProvider.getStoreAvailabilityById(partId: requestDetailProvider.sparePartHelperModel?.sparePart?.id);
+ showModalBottomSheet(
+ context: context,
+ isScrollControlled: true,
+ shape: const RoundedRectangleBorder(
+ borderRadius: BorderRadius.vertical(
+ top: Radius.circular(20),
),
- clipBehavior: Clip.antiAliasWithSaveLayer,
- builder: (BuildContext context) => PartDetailBottomSheetSheet(),
- );
- },
- ),
+ ),
+ clipBehavior: Clip.antiAliasWithSaveLayer,
+ builder: (BuildContext context) => PartDetailBottomSheetSheet(),
+ );
+ },
),
- ],
- 12.height,
+ ),
+ ],
+ 12.height,
+ AppTextFormField(
+ controller: _partQtyController,
+ labelText: context.translation.quantity,
+ textInputType: TextInputType.number,
+ labelStyle: AppTextStyles.textFieldLabelStyle,
+ showWithoutDecoration: true,
+ backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
+ enable: requestDetailProvider.sparePartHelperModel?.sparePart?.id != null,
+ validator: (value) => value == null || value.isEmpty
+ ? context.translation.requiredField
+ : Validator.isNumeric(value)
+ ? null
+ : context.translation.onlyNumbers,
+ onChange: (value) {
+ requestDetailProvider.sparePartHelperModel?.quantity = num.tryParse(value ?? "");
+ },
+ onSaved: (text) {
+ requestDetailProvider.sparePartHelperModel?.quantity = num.tryParse(text ?? "");
+ },
+ ),
+ 12.height,
+ if (showInstallAndReturnQty) ...[
AppTextFormField(
- controller: _partQtyController,
- labelText: context.translation.quantity,
- textInputType: TextInputType.number,
+ controller: _installQtyController,
+ labelText: context.translation.installedQty,
+ textInputType: const TextInputType.numberWithOptions(decimal: true),
labelStyle: AppTextStyles.textFieldLabelStyle,
showWithoutDecoration: true,
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
@@ -211,97 +232,74 @@ class _SparePartRequestState extends State with TickerProvider
validator: (value) => value == null || value.isEmpty
? context.translation.requiredField
: Validator.isNumeric(value)
- ? null
- : context.translation.onlyNumbers,
+ ? null
+ : context.translation.onlyNumbers,
onChange: (value) {
- requestDetailProvider.sparePartHelperModel?.quantity = num.tryParse(value ?? "");
+ requestDetailProvider.sparePartHelperModel?.installQty = num.tryParse(value ?? "");
},
onSaved: (text) {
- requestDetailProvider.sparePartHelperModel?.quantity = num.tryParse(text ?? "");
+ requestDetailProvider.sparePartHelperModel?.installQty = num.tryParse(text ?? "");
},
),
12.height,
- if (showInstallAndReturnQty) ...[
- AppTextFormField(
- controller: _installQtyController,
- labelText: context.translation.installedQty,
- textInputType: const TextInputType.numberWithOptions(decimal: true),
- labelStyle: AppTextStyles.textFieldLabelStyle,
- showWithoutDecoration: true,
- backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
- enable: requestDetailProvider.sparePartHelperModel?.sparePart?.id != null,
- validator: (value) => value == null || value.isEmpty
- ? context.translation.requiredField
- : Validator.isNumeric(value)
- ? null
- : context.translation.onlyNumbers,
- onChange: (value) {
- requestDetailProvider.sparePartHelperModel?.installQty = num.tryParse(value ?? "");
- },
- onSaved: (text) {
- requestDetailProvider.sparePartHelperModel?.installQty = num.tryParse(text ?? "");
- },
- ),
- 12.height,
- AppTextFormField(
- controller: _returnQtyController,
- labelText: context.translation.returnQty,
- textInputType: TextInputType.number,
- labelStyle: AppTextStyles.textFieldLabelStyle,
- showWithoutDecoration: true,
- backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
- enable: requestDetailProvider.sparePartHelperModel?.sparePart?.id != null,
- validator: (value) => value == null || value.isEmpty
- ? context.translation.requiredField
- : Validator.isNumeric(value)
- ? null
- : context.translation.onlyNumbers,
- onChange: (value) {
- requestDetailProvider.sparePartHelperModel?.returnQty = num.tryParse(value ?? "");
- },
- onSaved: (text) {
- requestDetailProvider.sparePartHelperModel?.returnQty = num.tryParse(text ?? "");
- },
- ),
- 12.height,
- ],
AppTextFormField(
- labelStyle: AppTextStyles.textFieldLabelStyle,
- controller: _oracleNoController,
- labelText: context.translation.oracleNo,
+ controller: _returnQtyController,
+ labelText: context.translation.returnQty,
textInputType: TextInputType.number,
- showWithoutDecoration: true,
- backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
- enable: false,
- ),
- 12.height,
- AppTextFormField(
- initialValue: requestDetailProvider.sparePartHelperModel?.comment,
labelStyle: AppTextStyles.textFieldLabelStyle,
- controller: _descriptionController,
- showSpeechToText: true,
- backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
- labelText: "Engineer Comment",
- alignLabelWithHint: true,
showWithoutDecoration: true,
- textInputType: TextInputType.multiline,
+ backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
+ enable: requestDetailProvider.sparePartHelperModel?.sparePart?.id != null,
+ validator: (value) => value == null || value.isEmpty
+ ? context.translation.requiredField
+ : Validator.isNumeric(value)
+ ? null
+ : context.translation.onlyNumbers,
onChange: (value) {
- requestDetailProvider.sparePartHelperModel?.comment = value;
+ requestDetailProvider.sparePartHelperModel?.returnQty = num.tryParse(value ?? "");
},
- onSaved: (value) {
- requestDetailProvider.sparePartHelperModel?.comment = value;
+ onSaved: (text) {
+ requestDetailProvider.sparePartHelperModel?.returnQty = num.tryParse(text ?? "");
},
),
12.height,
- AttachmentPicker(
- label: context.translation.attachQuotation,
- attachment: attachments,
- buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
- buttonColor: AppColor.primary10,
- ),
],
- ).paddingAll(16),
- ),
+ AppTextFormField(
+ labelStyle: AppTextStyles.textFieldLabelStyle,
+ controller: _oracleNoController,
+ labelText: context.translation.oracleNo,
+ textInputType: TextInputType.number,
+ showWithoutDecoration: true,
+ backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
+ enable: false,
+ ),
+ 12.height,
+ AppTextFormField(
+ initialValue: requestDetailProvider.sparePartHelperModel?.comment,
+ labelStyle: AppTextStyles.textFieldLabelStyle,
+ controller: _descriptionController,
+ showSpeechToText: true,
+ backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,
+ labelText: "Engineer Comment",
+ alignLabelWithHint: true,
+ showWithoutDecoration: true,
+ textInputType: TextInputType.multiline,
+ onChange: (value) {
+ requestDetailProvider.sparePartHelperModel?.comment = value;
+ },
+ onSaved: (value) {
+ requestDetailProvider.sparePartHelperModel?.comment = value;
+ },
+ ),
+ 12.height,
+ AttachmentPicker(
+ label: context.translation.attachQuotation,
+ attachment: attachments,
+ buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
+ buttonColor: AppColor.primary10,
+ ),
+ ],
+ ).toShadowContainer(context),
8.height,
],
),
diff --git a/lib/new_views/app_style/app_color.dart b/lib/new_views/app_style/app_color.dart
index 1a021c19..1e85d065 100644
--- a/lib/new_views/app_style/app_color.dart
+++ b/lib/new_views/app_style/app_color.dart
@@ -57,6 +57,7 @@ class AppColor {
static const Color white80 = Color(0xffF2F4FA);
static const Color white90 = Color(0xffBFD1E4);
static const Color white936 = Color(0xff212936);
+ static const Color whiteF3 = Color(0xffF1F1F3);
//black
static const Color black10 = Color(0xff3B3D4A);
@@ -107,7 +108,9 @@ class AppColor {
static const Color lowPriorityColor = Color(0xff54C166);
// static Color greenStatus(BuildContext context) => context.isDark ? const Color(0xff1FA269) : green50;
- static Color greenStatus(BuildContext context) => context.isDark ? const Color(0xff54C166) : green70.withOpacity(.5);
+ static Color greenStatus(BuildContext context) => context.isDark ? completedColor : green70.withOpacity(.5);
+
+ static Color unassignedStatus(BuildContext context) => context.isDarkNotListen ? unassignedColor : white936;
// static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary50;
static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary90;
@@ -117,7 +120,7 @@ class AppColor {
// static Color yellowStatus(BuildContext context) => context.isDark ? const Color(0xffFFDA76) : orange40;
static Color yellowStatus(BuildContext context) => context.isDark ? const Color(0xffFFC945) : orange30;
- static Color yellowIcon(BuildContext context) => context.isDark ? const Color(0xffFFC945) : orange70;
+ static Color yellowIcon(BuildContext context) => context.isDarkNotListen ? const Color(0xffFFC945) : orange70;
static Color background(BuildContext context) => context.isDark ? containerDark : Colors.white;
@@ -149,7 +152,7 @@ class AppColor {
static Color text9Color(BuildContext context) => context.isDark ? white10 : neutral120;
- static Color lightTextColor(BuildContext context) => context.isDark ? white10 : neutral120;
+ static Color lightTextColor(BuildContext context) => context.isDark ? whiteF3 : neutral120;
static Color iconColor(BuildContext context) => context.isDark ? neutral30 : neutral50;
diff --git a/lib/new_views/common_widgets/tab_button.dart b/lib/new_views/common_widgets/tab_button.dart
index 1493683c..872ae2cf 100644
--- a/lib/new_views/common_widgets/tab_button.dart
+++ b/lib/new_views/common_widgets/tab_button.dart
@@ -35,11 +35,73 @@ class TabButton extends StatelessWidget {
label,
style: AppTextStyles.bodyText2.copyWith(
//AppColor.background(context)
- color: isSelected ? Colors.white :AppColor.textColor(context) ,
+ color: isSelected ? Colors.white : AppColor.textColor(context),
),
),
),
),
- ).toShimmer(isShow: loading && isSelected, radius: 7,context: context);
+ ).toShimmer(isShow: loading && isSelected, radius: 7, context: context);
+ }
+}
+
+class RequestTypeButton extends StatelessWidget {
+ final String label;
+ final String icon;
+ final Color iconColor;
+ final bool isSelected;
+ final int count;
+ final bool loading;
+ final VoidCallback onPressed;
+
+ const RequestTypeButton({Key? key, required this.label, required this.icon, required this.iconColor, this.isSelected = false, required this.count, this.loading = false, required this.onPressed})
+ : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ // InkWell(
+ // onTap: onPressed,
+ // child: CustomBadge(
+ // value: loading
+ // ? 0
+ // : !isSelected
+ // ? 0
+ // : count,
+ // child: Container(
+ // padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 8),
+ // decoration: BoxDecoration(
+ // borderRadius: BorderRadius.circular(7),
+ // color: isSelected ? AppColor.primary10 : AppColor.background(context),
+ // border: !isSelected ? Border.all(color: AppColor.white936.withOpacity(.03), width: 1) : null,
+ // ),
+ // alignment: Alignment.center,
+ // child: Text(
+ // label,
+ // style: AppTextStyles.bodyText2.copyWith(
+ // //AppColor.background(context)
+ // color: isSelected ? Colors.white : AppColor.textColor(context),
+ // ),
+ // ),
+ // ),
+ // ),
+ // ).toShimmer(isShow: loading && isSelected, radius: 7, context: context);
+
+ return CustomBadge(
+ value: loading ? 0 : count,
+ positionR: -4,
+ positionT: -4,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.end,
+ spacing: 0,
+ children: [
+ icon.toSvgAsset(height: 26, width: 26, color: iconColor).toShimmer(isShow: loading, context: context).center.expanded,
+ Text(
+ label,
+ textAlign: TextAlign.center,
+ style: AppTextStyles.textStyle9.copyWith(color: AppColor.headingTextColor(context)),
+ ).toShimmer(isShow: loading, context: context),
+ ],
+ ).toShadowContainer(context, borderColor: isSelected ? AppColor.primary10 : null, borderRadius: 16, paddingObject: const EdgeInsets.symmetric(horizontal: 12, vertical: 12)),
+ ).onPress(onPressed).paddingOnly(end: 4, top: 4);
}
}