dashboard flow changed.

main_production_RSG
Sikander Saleem 2 months ago
parent 3bd4fa6801
commit 2b9ff5904b

@ -0,0 +1,3 @@
<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.6725 5.32707C23.058 7.7115 24.1989 11.071 23.7589 14.4145C23.3177 17.7593 21.3474 20.7091 18.4269 22.395C15.5054 24.082 11.9654 24.3145 8.84977 23.0236C5.73297 21.7326 3.39357 19.0661 2.52026 15.8081C1.64684 12.5503 2.33971 9.07126 4.39239 6.39445C6.4462 3.71775 9.62731 2.14928 13.0003 2.14928C15.879 2.14476 18.6403 3.28902 20.6729 5.32702L20.6725 5.32707ZM25.9998 12.9996C25.9998 8.95865 24.1198 5.14652 20.914 2.68666C17.7067 0.225503 13.5396 -0.602875 9.63496 0.443294C5.73153 1.48938 2.53586 4.29125 0.989741 8.02538C-0.557391 11.7595 -0.278644 16.0001 1.74131 19.4996C3.76239 23 7.2966 25.3608 11.3029 25.8889C15.31 26.4159 19.3342 25.0493 22.1925 22.192C24.6345 19.7568 26.0041 16.448 25.9998 12.9996ZM17.3907 10.0668C17.7868 9.65154 17.7789 8.99592 17.3715 8.59079L17.358 8.57611V8.57724C16.9506 8.18341 16.3063 8.18115 15.8966 8.5716L13.2019 11.2822C13.08 11.4029 12.8836 11.4029 12.7618 11.2822L10.0534 8.57385C9.85371 8.38879 9.59077 8.28723 9.31881 8.28835C9.04572 8.28835 8.78504 8.39782 8.59209 8.59079C8.18586 8.99589 8.17681 9.65155 8.5729 10.0668L11.2496 12.7988C11.3692 12.9218 11.3681 13.117 11.2474 13.2378C10.3593 14.127 9.46438 15.0106 8.5729 15.8953C8.17681 16.3106 8.18585 16.9662 8.59208 17.3713L8.60676 17.386C8.80649 17.5812 9.07056 17.6963 9.34928 17.711C9.61221 17.7245 9.86838 17.6309 10.0613 17.4526L12.7629 14.751V14.7499C12.8848 14.6292 13.0811 14.6292 13.203 14.7499L13.2165 14.7646L15.8966 17.3905C16.3141 17.773 16.9585 17.7583 17.358 17.3589C17.7586 16.9583 17.7732 16.315 17.3907 15.8975L14.7162 13.24V13.2389C14.5955 13.1181 14.5944 12.9229 14.714 12.801L17.3907 10.0668Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -5,10 +5,13 @@ import 'package:flutter/widgets.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.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/enums/user_types.dart';
import 'package:test_sa/models/new_models/dashboard_count.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/dashboard_detail.dart' as DD;
import 'package:test_sa/models/new_models/swipe_model.dart'; 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'; import '../controllers/providers/api/user_provider.dart';
@ -59,6 +62,31 @@ class DashBoardProvider extends ChangeNotifier {
DD.DashboardDetail? get requestDetailList => _requestDetailList; 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<CategoryTabs> tabs = []; List<CategoryTabs> tabs = [];
void setTabs({required UsersTypes userType, required BuildContext context}) { void setTabs({required UsersTypes userType, required BuildContext context}) {
@ -244,11 +272,7 @@ class DashBoardProvider extends ChangeNotifier {
} }
} }
String getDashboardUrl({ String getDashboardUrl({required UsersTypes usersType, int? status, int? tabId}) {
required UsersTypes usersType,
int? status,
int? tabId,
}) {
switch (usersType) { switch (usersType) {
case UsersTypes.qualityUser: case UsersTypes.qualityUser:
return URLs.qaAuditorDetails; return URLs.qaAuditorDetails;
@ -270,7 +294,8 @@ class DashBoardProvider extends ChangeNotifier {
} }
} }
Future<int> getRequestDetail({bool showLoader = true, required UsersTypes usersType, int? status, bool isHighPriority = false, bool isOverdue = false, String? date, int? tabId, bool? isAscending}) async { Future<int> getRequestDetail(
{bool showLoader = true, required UsersTypes usersType, int? status, bool isHighPriority = false, bool isOverdue = false, String? date, int? tabId, bool? isAscending}) async {
if (showLoader) { if (showLoader) {
isDetailLoading = showLoader; isDetailLoading = showLoader;
notifyListeners(); notifyListeners();
@ -396,42 +421,45 @@ class CategoryTabs {
String label; String label;
int tag; int tag;
int id; int id;
RequestTypeEnum requestType;
String icon;
Color iconColor;
bool isHighPriority;
bool isOverDue;
CategoryTabs({ 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});
required this.label,
required this.tag,
required this.id,
});
static List<CategoryTabs> getTabs({required UsersTypes userType, required BuildContext context}) { static List<CategoryTabs> getTabs({required UsersTypes userType, required BuildContext context}) {
List<CategoryTabs> tabs = []; List<CategoryTabs> tabs = [];
if (userType == UsersTypes.engineer) { if (userType == UsersTypes.engineer) {
// tabs.add(CategoryTabs(label: 'Upcoming', tag: 0, id: 0)); tabs.add(CategoryTabs(label: 'UnAssigned', tag: 1, id: 1, requestType: RequestTypeEnum.unassigned, icon: "dashboard/unassigned", iconColor: AppColor.unassignedStatus(context)));
// tabs.add(CategoryTabs('Open', 1)); tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2, requestType: RequestTypeEnum.open, icon: "dashboard/open_icon", iconColor: AppColor.openColor));
tabs.add(CategoryTabs(label: 'UnAssigned', tag: 1, id: 1)); tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3, requestType: RequestTypeEnum.inProgress, icon: "dashboard/inprogress_icon", iconColor: AppColor.primary10));
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2)); tabs.add(CategoryTabs(label: 'Completed', tag: 3, id: 4, requestType: RequestTypeEnum.completed, icon: "complete_request", iconColor: AppColor.completedColor));
tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3)); 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: 'Completed', tag: 3, id: 4)); tabs.add(CategoryTabs(label: context.translation.highPriority, tag: 3, id: 4, requestType: RequestTypeEnum.highPriority, icon: "high_priority", iconColor: AppColor.red30, isHighPriority: true));
return tabs; return tabs;
} }
if (userType == UsersTypes.qualityUser) { if (userType == UsersTypes.qualityUser) {
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2)); 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)); 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)); tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestTypeEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs; return tabs;
} }
if (userType == UsersTypes.commissioningEngineer) { if (userType == UsersTypes.commissioningEngineer) {
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2)); 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)); 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)); tabs.add(CategoryTabs(label: 'Closed', tag: 3, id: 4, requestType: RequestTypeEnum.closed, icon: "complete_request", iconColor: AppColor.completedColor));
return tabs; return tabs;
} }
tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2)); 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)); 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)); // tabs.add(CategoryTabs(label: 'Pending Acknowledgement', tag: 3, id: 1, requestType: RequestTypeEnum.pendingAcknowledgment, icon: "complete_request", iconColor: AppColor.overdueColor));
tabs.add(CategoryTabs(label: 'Canceled', tag: 6, id: 4)); 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; return tabs;
} }
} }

@ -57,8 +57,13 @@ class _DashboardViewState extends State<DashboardView> {
_dashBoardProvider.setTabs(userType: userProvider.user!.type!, context: context); _dashBoardProvider.setTabs(userType: userProvider.user!.type!, context: context);
_dashBoardProvider.getDashBoardCount(usersType: userProvider.user!.type!); _dashBoardProvider.getDashBoardCount(usersType: userProvider.user!.type!);
_dashBoardProvider.resetRequestDataList(); _dashBoardProvider.resetRequestDataList();
_dashBoardProvider.currentListIndex=0;
_dashBoardProvider.getRequestDetail( _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() { void getInitialData() {
@ -126,7 +131,9 @@ class _DashboardViewState extends State<DashboardView> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, 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()],
), ),
), ),
), ),

@ -56,7 +56,11 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> {
final bool isFMSEngineer = user?.type == UsersTypes.engineer && settingProvider.isUserFMS; final bool isFMSEngineer = user?.type == UsersTypes.engineer && settingProvider.isUserFMS;
return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ return Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
//TODO uncommit this to get the calendar card.. getTabs(
requestsProvider: dashboardProvider,
context: context,
userType: Provider.of<UserProvider>(context, listen: false).user?.type,
),
!isNurse && dashboardProvider.tabs.isNotEmpty && dashboardProvider.tabs[dashboardProvider.currentListIndex].tag == 0 !isNurse && dashboardProvider.tabs.isNotEmpty && dashboardProvider.tabs[dashboardProvider.currentListIndex].tag == 0
? Column( ? Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -110,11 +114,6 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> {
// ).paddingOnly(start: 16, end: 16) // ).paddingOnly(start: 16, end: 16)
// : context.translation.allWorkOrder.heading4(context).paddingOnly(start: 16, end: 16), // : context.translation.allWorkOrder.heading4(context).paddingOnly(start: 16, end: 16),
getTabs(
requestsProvider: dashboardProvider,
context: context,
userType: Provider.of<UserProvider>(context, listen: false).user?.type,
),
dashboardProvider.isDetailLoading dashboardProvider.isDetailLoading
? Column( ? Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
@ -133,29 +132,62 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> {
Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes? userType}) { Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes? userType}) {
List<CategoryTabs> tabs = CategoryTabs.getTabs(userType: userType ?? UsersTypes.normal_user, context: context); List<CategoryTabs> tabs = CategoryTabs.getTabs(userType: userType ?? UsersTypes.normal_user, context: context);
return SizedBox( // SizedBox(
height: 44 + (context.isTablet() ? 36 : 16).toScreenHeight, // height: 44 + (context.isTablet() ? 36 : 16).toScreenHeight,
child: ListView.separated( // child: ListView.separated(
scrollDirection: Axis.horizontal, // scrollDirection: Axis.horizontal,
separatorBuilder: (cxt, index) => 12.width, // separatorBuilder: (cxt, index) => 12.width,
padding: const EdgeInsets.only(top: 6 + 16, left: 16, right: 16), // 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) { itemBuilder: (cxt, index) {
return TabButton( return RequestTypeButton(
label: tabs[index].label, label: tabs[index].label,
loading: requestsProvider.isDetailLoading, loading: requestsProvider.isDetailLoading && requestsProvider.currentListIndex == index,
isSelected: requestsProvider.currentListIndex == index, isSelected: requestsProvider.currentListIndex == index,
count: requestsProvider.requestDetailList != null ? requestsProvider.requestDetailList!.count ?? 0 : 0, count: requestsProvider.getStatusCount(tabs[index].requestType),
onPressed: () async { onPressed: () async {
setState(() { setState(() {
isAscending=false; isAscending = false;
}); });
requestsProvider.currentListIndex = index; requestsProvider.currentListIndex = index;
requestsProvider.resetRequestDataList(); requestsProvider.resetRequestDataList();
requestsProvider.getRequestDetail(usersType: userType ?? UsersTypes.normal_user, showLoader: true, status: tabs[index].tag, tabId: tabs[index].id); 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,
);
}, },
icon: tabs[index].icon,
iconColor: tabs[index].iconColor,
); );
}, },
itemCount: tabs.length), itemCount: tabs.length,
); );
} }
} }

@ -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/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/extensions/context_extension.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/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -39,39 +40,44 @@ class RequestsFragment extends StatelessWidget {
@override @override
Widget build(BuildContext context) { 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<DashBoardProvider, _DashboardCountData>( return Selector<DashBoardProvider, _DashboardCountData>(
selector: (_, provider) => _DashboardCountData( selector: (_, provider) => _DashboardCountData(dashboardCount: provider.dashboardCount, isLoading: provider.isAllCountLoading),
dashboardCount: provider.dashboardCount, builder: (context, data, _) {
isLoading: provider.isAllCountLoading, List<Widget> listItems = [];
), if (context.userProvider.isNurse) {
builder: (context, data, _) => GridView( 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), padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: context.isTablet() ? 5 : 4, childAspectRatio: 85 / 85, crossAxisSpacing: 8, mainAxisSpacing: 8), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: context.isTablet() ? 5 : 4, childAspectRatio: 85 / 85, crossAxisSpacing: 8, mainAxisSpacing: 8),
children: [ children: listItems,
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)),
],
),
); );
});
} }
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( return CustomBadge(
value: isLoading ? 0 : value, value: isLoading ? 0 : value,
positionR: -4, positionR: -4,
@ -93,748 +99,9 @@ class RequestsFragment extends StatelessWidget {
.onPress(isLoading .onPress(isLoading
? null ? null
: () async { : () async {
await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index, title))); await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(1, title)));
Provider.of<DashBoardProvider>(context, listen: false).refreshDashboard(userType: Provider.of<SettingProvider>(context, listen: false).user!.type!, context: context); Provider.of<DashBoardProvider>(context, listen: false).refreshDashboard(userType: Provider.of<SettingProvider>(context, listen: false).user!.type!, context: context);
}) })
.paddingOnly(end: 4, top: 4); .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<AllRequestsProvider>(
// builder: (context, snapshot, _) => RefreshIndicator(
// onRefresh: () async {
// snapshot.getRequests();
// await Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications(
// user: Provider.of<UserProvider>(context, listen: false).user,
// resetProvider: true,
// );
// return Future.delayed(const Duration(milliseconds: 250));
// },
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: _buildListItems(context, snapshot),
// ),
// ),
// );
// }
//
// List<Widget> _buildListItems(BuildContext context, AllRequestsProvider snapshot) {
// final Map<String, dynamic> 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<AllRequestsProvider>(context, listen: false).isAllLoading = true;
// // Provider.of<AllRequestsProvider>(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<AllRequestsProvider>(
// builder: (context, snapshot, _) => RefreshIndicator(
// onRefresh: () {
// snapshot.getRequests();
// Provider.of<NotificationsProvider>(context, listen: false)
// .getSystemNotifications(
// user: Provider.of<UserProvider>(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<AllRequestsProvider>(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<AllRequestsProvider>(
// builder: (context, snapshot, _) => RefreshIndicator(
// onRefresh: () {
// snapshot.getRequests();
// Provider.of<NotificationsProvider>(context, listen: false)
// .getSystemNotifications(
// user: Provider.of<UserProvider>(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<AllRequestsProvider>(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<AllRequestsProvider>(
// builder: (context, snapshot, _) => RefreshIndicator(
// onRefresh: () {
// snapshot.getRequests();
// Provider.of<NotificationsProvider>(context, listen: false)
// .getSystemNotifications(
// user: Provider.of<UserProvider>(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<AllRequestsProvider>(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<AllRequestsProvider>(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<AllRequestsProvider>(context, listen: false).getRequests();
// });
// }

@ -196,3 +196,15 @@ enum AssetDeliveryStageEnum {
endUserAcceptance, endUserAcceptance,
other, other,
} }
enum RequestTypeEnum {
unassigned,
open,
inProgress,
completed,
closed,
canceled,
overdue,
highPriority,
pendingAcknowledgment,
}

@ -140,7 +140,7 @@ extension WidgetExtensions on Widget {
margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
decoration: BoxDecoration( decoration: BoxDecoration(
// color: AppColor.background(context), // 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)), borderRadius: const BorderRadius.only(topRight: Radius.circular(20), topLeft: Radius.circular(20)),
), ),
padding: padding ?? EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), padding: padding ?? EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
@ -151,7 +151,7 @@ extension WidgetExtensions on Widget {
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColor.background(context), color: AppColor.bottomSheetColor(context),
borderRadius: const BorderRadius.only(topRight: Radius.circular(30), topLeft: Radius.circular(30)), borderRadius: const BorderRadius.only(topRight: Radius.circular(30), topLeft: Radius.circular(30)),
), ),
padding: padding ?? EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight), padding: padding ?? EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 12.toScreenHeight),

@ -35,19 +35,25 @@ class Data {
int? countOpen; int? countOpen;
int? countInprogress; int? countInprogress;
int? countComplete; int? countComplete;
int? countClose;
int? countCanceled;
int? countAcknowledge; int? countAcknowledge;
int? countHighPriority; int? countHighPriority;
int? countOverdue; 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<String, dynamic> json) { Data.fromJson(Map<String, dynamic> json) {
countOpen = json['countOpen'] ?? 0; countOpen = json['countOpen'] ?? 0;
countInprogress = json['countInprogress'] ?? 0; countInprogress = json['countInprogress'] ?? 0;
countComplete = json['countComplete'] ?? 0; countComplete = json['countComplete'] ?? 0;
countCanceled = json['countCanceled'] ?? 0;
countClose = json['countClose'] ?? 0;
countAcknowledge = json['countAcknowledge'] ?? 0; countAcknowledge = json['countAcknowledge'] ?? 0;
countHighPriority = json['countHighPriority'] ?? 0; countHighPriority = json['countHighPriority'] ?? 0;
countOverdue = json['countOverdue'] ?? 0; countOverdue = json['countOverdue'] ?? 0;
countUnAssigned = json['countUnAssigned'] ?? 0;
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -55,9 +61,12 @@ class Data {
data['countOpen'] = countOpen; data['countOpen'] = countOpen;
data['countInprogress'] = countInprogress; data['countInprogress'] = countInprogress;
data['countComplete'] = countComplete; data['countComplete'] = countComplete;
data['countCanceled'] = countCanceled;
data['countClose'] = countClose;
data['countAcknowledge'] = countAcknowledge; data['countAcknowledge'] = countAcknowledge;
data['countHighPriority'] = countHighPriority; data['countHighPriority'] = countHighPriority;
data['countOverdue'] = countOverdue; data['countOverdue'] = countOverdue;
data['countUnAssigned'] = countUnAssigned;
return data; return data;
} }
} }

@ -641,12 +641,6 @@ class ServiceRequestBottomSheet {
Widget customListItem({required BuildContext context, required String icon, required String heading, required String subHeading, required VoidCallback onTap}) { Widget customListItem({required BuildContext context, required String icon, required String heading, required String subHeading, required VoidCallback onTap}) {
return GestureDetector( return GestureDetector(
onTap: onTap, // Handles the tap onTap: onTap, // Handles the tap
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(14), // Circular border radius
),
// color: AppColor.neutral80,
color: AppColor.background(context),
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, // Align items at the top crossAxisAlignment: CrossAxisAlignment.start, // Align items at the top
children: [ children: [
@ -670,9 +664,7 @@ class ServiceRequestBottomSheet {
).paddingOnly(end: 50), ).paddingOnly(end: 50),
), ),
], ],
).paddingAll(12), ).toShadowContainer(context));
),
);
} }
void onItemTap({required int index, required BuildContext context}) { void onItemTap({required int index, required BuildContext context}) {
@ -711,12 +703,13 @@ class ServiceRequestBottomSheet {
alignment: AlignmentDirectional.centerStart, alignment: AlignmentDirectional.centerStart,
child: context.translation.selectAction.bottomSheetHeadingTextStyle(context), child: context.translation.selectAction.bottomSheetHeadingTextStyle(context),
), ),
16.height, // 16.height,
ListView.builder( ListView.separated(
shrinkWrap: true, shrinkWrap: true,
padding: EdgeInsets.zero, padding: const EdgeInsets.only(top: 16, bottom: 16),
itemCount: items.length, itemCount: items.length,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
separatorBuilder: (cxt, index) => 12.height,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final item = items[index]; final item = items[index];
return customListItem( return customListItem(

@ -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/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/files_list.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.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/item_views/info_text_widget.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart';
@ -193,9 +194,11 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
8.height, 8.height,
Text( Text(
context.translation.assetInformation, 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, 8.height,
InfoTextWidget(label: context.translation.assetName,value: workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach),
Text( Text(
'${context.translation.assetName}: ${workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach}', '${context.translation.assetName}: ${workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach}',
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),

@ -127,14 +127,13 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
child: Column( child: Column(
children: [ children: [
SingleChildScrollView( SingleChildScrollView(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(16),
child: IgnorePointer( child: IgnorePointer(
ignoring: _requestDetailProvider!.isReadOnlyRequest, ignoring: _requestDetailProvider!.isReadOnlyRequest,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Card( Column(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
context.translation.sparePartDetails.heading5(context).custom(color: AppColor.textStyleColor(context)), context.translation.sparePartDetails.heading5(context).custom(color: AppColor.textStyleColor(context)),
@ -300,8 +299,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
), ),
], ],
).paddingAll(16), ).toShadowContainer(context),
),
8.height, 8.height,
], ],
), ),

@ -57,6 +57,7 @@ class AppColor {
static const Color white80 = Color(0xffF2F4FA); static const Color white80 = Color(0xffF2F4FA);
static const Color white90 = Color(0xffBFD1E4); static const Color white90 = Color(0xffBFD1E4);
static const Color white936 = Color(0xff212936); static const Color white936 = Color(0xff212936);
static const Color whiteF3 = Color(0xffF1F1F3);
//black //black
static const Color black10 = Color(0xff3B3D4A); static const Color black10 = Color(0xff3B3D4A);
@ -107,7 +108,9 @@ class AppColor {
static const Color lowPriorityColor = Color(0xff54C166); 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(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 : primary50;
static Color blueStatus(BuildContext context) => context.isDark ? primary40 : primary90; 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(0xffFFDA76) : orange40;
static Color yellowStatus(BuildContext context) => context.isDark ? const Color(0xffFFC945) : orange30; 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; 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 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; static Color iconColor(BuildContext context) => context.isDark ? neutral30 : neutral50;

@ -35,11 +35,73 @@ class TabButton extends StatelessWidget {
label, label,
style: AppTextStyles.bodyText2.copyWith( style: AppTextStyles.bodyText2.copyWith(
//AppColor.background(context) //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);
} }
} }

Loading…
Cancel
Save