dashboard multiple filter cont

export_module_ui_ux_enhancement
Sikander Saleem 2 weeks ago
parent 75221bf61f
commit 164daa7d58

@ -3,8 +3,10 @@ import 'dart:developer';
import 'package:flutter/widgets.dart';
import 'package:http/http.dart';
import 'package:provider/provider.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/providers/api/all_requests_provider.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';
@ -45,12 +47,22 @@ class DashBoardProvider extends ChangeNotifier {
notifyListeners();
}
int _currentListIndex = 0;
List<int> listIndex = [];
int get currentListIndex => _currentListIndex;
int? _currentListIndex;
set currentListIndex(int value) {
int? get currentListIndex => _currentListIndex;
set currentListIndex(int? value) {
_currentListIndex = value;
if (value == null) {
listIndex.clear();
}
else if (listIndex.contains(value)) {
listIndex.remove(value);
} else {
listIndex.add(value);
}
notifyListeners();
}
@ -114,7 +126,13 @@ class DashBoardProvider extends ChangeNotifier {
setTabs(userType: userType, context: context);
getDashBoardCount(usersType: userType);
resetRequestDataList();
getRequestDetail(usersType: userType, status: tabs[currentListIndex].tag, tabId: tabs[currentListIndex].id);
if (listIndex.isEmpty) {
Provider.of<AllRequestsProvider>(context, listen: false)
..reset()
..getAllRequests(context);
} else {
getRequestDetail(usersType: userType, status: tabs[currentListIndex!].tag, tabId: tabs[currentListIndex!].id);
}
// notifyListeners();
}

@ -6,6 +6,7 @@ import 'package:nfc_manager/nfc_manager.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/notification/firebase_notification_manger.dart';
import 'package:test_sa/controllers/notification/notification_manger.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/controllers/providers/settings/setting_provider.dart';
@ -57,13 +58,17 @@ class _DashboardViewState extends State<DashboardView> {
_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,
isHighPriority: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].isHighPriority,
isOverdue: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].isOverDue);
_dashBoardProvider.currentListIndex = null;
Provider.of<AllRequestsProvider>(context, listen: false)
..reset()
..getAllRequests(context);
// _dashBoardProvider.getRequestDetail(
// 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() {
@ -94,8 +99,14 @@ class _DashboardViewState extends State<DashboardView> {
_scrollController.addListener(() async {
if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent && !_dashBoardProvider.isDetailLoading) {
_dashBoardProvider.pageNum = _dashBoardProvider.pageNum + 1;
_dashBoardProvider.getRequestDetail(
usersType: user.type!, showLoader: false, status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].tag, tabId: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex].id);
if (_dashBoardProvider.currentListIndex == null) {
} else {
_dashBoardProvider.getRequestDetail(
usersType: user.type!,
showLoader: false,
status: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex!].tag,
tabId: _dashBoardProvider.tabs[_dashBoardProvider.currentListIndex!].id);
}
}
});
}

@ -157,84 +157,87 @@ class _AppBarWidgetState extends State<AppBarWidget> with TickerProviderStateMix
child: FadeTransition(
opacity: _rightFadeAnimation,
child: Consumer<SettingProvider>(builder: (context, settingProvider, child) {
return MenuAnchor(
style: MenuStyle(
backgroundColor: WidgetStateProperty.all(AppColor.background(context)),
shape: WidgetStateProperty.all(
RoundedRectangleBorder(
borderRadius: const BorderRadius.all(Radius.circular(20.0)),
side: BorderSide(color: AppColor.borderColor(context), width: 1),
),
),
padding: WidgetStateProperty.all(
EdgeInsets.symmetric(
horizontal: 0.toScreenWidth,
vertical: 8.toScreenHeight,
return MenuAnchor(
style: MenuStyle(
backgroundColor: WidgetStateProperty.all(AppColor.background(context)),
shape: WidgetStateProperty.all(
RoundedRectangleBorder(
borderRadius: const BorderRadius.all(Radius.circular(20.0)),
side: BorderSide(color: AppColor.borderColor(context), width: 1),
),
),
padding: WidgetStateProperty.all(
EdgeInsets.symmetric(
horizontal: 0.toScreenWidth,
vertical: 8.toScreenHeight,
),
),
elevation: WidgetStateProperty.all(0),
),
),
elevation: WidgetStateProperty.all(0),
),
menuChildren: Provider.of<UserProvider>(context, listen: false).user?.assetGroups?.map<MenuItemButton>((value) {
return MenuItemButton(
onPressed: () async {
if (settingProvider.assetGroup != value) {
AssetGroup? tempGroup = ApiManager.instance.assetGroup;
ApiManager.instance.assetGroup = value;
menuChildren: Provider.of<UserProvider>(context, listen: false).user?.assetGroups?.map<MenuItemButton>((value) {
return MenuItemButton(
onPressed: () async {
if (settingProvider.assetGroup != value) {
AssetGroup? tempGroup = ApiManager.instance.assetGroup;
ApiManager.instance.assetGroup = value;
Utils.showLoading(context);
bool isSuccess = await context.userProvider.userChangeAssetGroup();
Utils.hideLoading(context);
if (isSuccess) {
await context.userProvider.getMobilePermissionByUser();
settingProvider.setAssetGroup(value);
WidgetsBinding.instance.addPostFrameCallback((_) {
context.settingProvider.setUser(ApiManager.instance.user!);
context.userProvider.setUser(ApiManager.instance.user!);
DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
dashBoardProvider.setTabs(userType: settingProvider.user!.type!, context: context);
dashBoardProvider.getDashBoardCount(usersType: settingProvider.user!.type!);
dashBoardProvider.resetRequestDataList();
dashBoardProvider.getRequestDetail(usersType: settingProvider.user!.type!, status: dashBoardProvider.tabs[dashBoardProvider.currentListIndex].tag);
});
} else {
ApiManager.instance.assetGroup = tempGroup;
context.showConfirmDialog("Failed, Please Try again");
}
}
},
child: Text(value.name ?? "", style: AppTextStyles.bodyText2.copyWith(color: AppColor.headingTextColor(context))),
);
}).toList() ??
[],
builder: (_, MenuController controller, Widget? child) {
return Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: AppColor.assetGroupBackground(context),
border: Border.all(color: AppColor.white936.withValues(alpha: .03), width: 1),
boxShadow: [
BoxShadow(color: Colors.black.withValues(alpha: 0.03), blurRadius: 4, offset: const Offset(0, 0), spreadRadius: 0),
],
),
child: Row(
mainAxisSize: MainAxisSize.min,
spacing: 16,
children: [
Text(settingProvider.assetGroup?.name ?? "", style: AppTextStyles.bodyText2.copyWith(color: AppColor.headingTextColor(context))),
Icon(Icons.keyboard_arrow_down, color: AppColor.headingTextColor(context)),
],
),
).onPress(() {
if (controller.isOpen) {
controller.close();
} else {
controller.open();
}
});
},
);
}),
Utils.showLoading(context);
bool isSuccess = await context.userProvider.userChangeAssetGroup();
Utils.hideLoading(context);
if (isSuccess) {
await context.userProvider.getMobilePermissionByUser();
settingProvider.setAssetGroup(value);
WidgetsBinding.instance.addPostFrameCallback((_) {
context.settingProvider.setUser(ApiManager.instance.user!);
context.userProvider.setUser(ApiManager.instance.user!);
DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
dashBoardProvider.setTabs(userType: settingProvider.user!.type!, context: context);
dashBoardProvider.getDashBoardCount(usersType: settingProvider.user!.type!);
dashBoardProvider.resetRequestDataList();
if (dashBoardProvider.currentListIndex == null) {
} else {
dashBoardProvider.getRequestDetail(usersType: settingProvider.user!.type!, status: dashBoardProvider.tabs[dashBoardProvider.currentListIndex!].tag);
}
});
} else {
ApiManager.instance.assetGroup = tempGroup;
context.showConfirmDialog("Failed, Please Try again");
}
}
},
child: Text(value.name ?? "", style: AppTextStyles.bodyText2.copyWith(color: AppColor.headingTextColor(context))),
);
}).toList() ??
[],
builder: (_, MenuController controller, Widget? child) {
return Container(
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: AppColor.assetGroupBackground(context),
border: Border.all(color: AppColor.white936.withValues(alpha: .03), width: 1),
boxShadow: [
BoxShadow(color: Colors.black.withValues(alpha: 0.03), blurRadius: 4, offset: const Offset(0, 0), spreadRadius: 0),
],
),
child: Row(
mainAxisSize: MainAxisSize.min,
spacing: 16,
children: [
Text(settingProvider.assetGroup?.name ?? "", style: AppTextStyles.bodyText2.copyWith(color: AppColor.headingTextColor(context))),
Icon(Icons.keyboard_arrow_down, color: AppColor.headingTextColor(context)),
],
),
).onPress(() {
if (controller.isOpen) {
controller.close();
} else {
controller.open();
}
});
},
);
}),
),
),
16.width,

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/dashboard_latest/dashboard_provider.dart';
import 'package:test_sa/dashboard_latest/widgets/request_category_list.dart';
@ -15,6 +16,8 @@ import 'package:test_sa/new_views/common_widgets/tab_button.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import '../../new_views/pages/land_page/widgets/request_item_view_list.dart';
class RequestCategoryFragment extends StatefulWidget {
const RequestCategoryFragment({Key? key}) : super(key: key);
@ -75,13 +78,16 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> with
// Reload data with new sort order
dashboardProvider.resetRequestDataList();
dashboardProvider.getRequestDetail(
usersType: userType ?? UsersTypes.normal_user,
showLoader: true,
status: tabs[dashboardProvider.currentListIndex].tag,
tabId: tabs[dashboardProvider.currentListIndex].id,
isAscending: isAscending,
);
if (dashboardProvider.currentListIndex == null) {
} else {
dashboardProvider.getRequestDetail(
usersType: userType ?? UsersTypes.normal_user,
showLoader: true,
status: tabs[dashboardProvider.currentListIndex!].tag,
tabId: tabs[dashboardProvider.currentListIndex!].id,
isAscending: isAscending,
);
}
}
@override
@ -104,47 +110,62 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> with
opacity: _headerFadeAnimation,
child: SlideTransition(
position: _headerSlideAnimation,
child: !isNurse && dashboardProvider.tabs.isNotEmpty && dashboardProvider.tabs[dashboardProvider.currentListIndex].tag == 0
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(context.translation.allWorkOrder, style: AppTextStyles.heading4.copyWith(color: AppColor.headingTextColor(context))),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// context.translation.allWorkOrder.heading4(context),
// GestureDetector(
// onTap: () {
// dashboardProvider.isShowDashBoardCalendar = !dashboardProvider.isShowDashBoardCalendar;
// },
// child: dashboardProvider.isShowDashBoardCalendar ? AppAsset.listIcon.toSvgAsset() : AppAsset.calendarIcon.toSvgAsset())
// ],
// ),
dashboardProvider.isShowDashBoardCalendar
? Padding(
padding: EdgeInsets.only(top: 12.toScreenHeight),
child: const WeeklyCalendarFragment(),
)
: const SizedBox(),
],
).paddingOnly(start: 14, end: 12)
: Row(
spacing: 16,
children: [
Text(context.translation.allWorkOrder, style: AppTextStyles.heading4.copyWith(color: AppColor.headingTextColor(context))).expanded,
// todo commenting this code, for FM
// if (!isFMSEngineer)
// 'search'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() {
// Navigator.of(context).pushNamed('/cleaner_search');
// }),
Transform.flip(
flipY: isAscending,
child: 'dashboard/sort_descending'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() {
_toggleSort(dashboardProvider, user?.type);
}),
)
],
).paddingOnly(start: 16, end: 16),
child:
// !isNurse && dashboardProvider.tabs.isNotEmpty
// //&& dashboardProvider.tabs[dashboardProvider.currentListIndex].tag == 0
// ? Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text(context.translation.allWorkOrder, style: AppTextStyles.heading4.copyWith(color: AppColor.headingTextColor(context))),
// // Row(
// // mainAxisAlignment: MainAxisAlignment.spaceBetween,
// // children: [
// // context.translation.allWorkOrder.heading4(context),
// // GestureDetector(
// // onTap: () {
// // dashboardProvider.isShowDashBoardCalendar = !dashboardProvider.isShowDashBoardCalendar;
// // },
// // child: dashboardProvider.isShowDashBoardCalendar ? AppAsset.listIcon.toSvgAsset() : AppAsset.calendarIcon.toSvgAsset())
// // ],
// // ),
// dashboardProvider.isShowDashBoardCalendar
// ? Padding(
// padding: EdgeInsets.only(top: 12.toScreenHeight),
// child: const WeeklyCalendarFragment(),
// )
// : const SizedBox(),
// ],
// ).paddingOnly(start: 14, end: 12)
// :
Row(
spacing: 16,
children: [
Text(context.translation.allWorkOrder, style: AppTextStyles.heading4.copyWith(color: AppColor.headingTextColor(context))).expanded,
// todo commenting this code, for FM
// if (!isFMSEngineer)
// 'search'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() {
// Navigator.of(context).pushNamed('/cleaner_search');
// }),
if (dashboardProvider.listIndex.isNotEmpty)
Text(
'Clear Filters',
style: AppTextStyles.bodyText2.copyWith(color: AppColor.red30),
).onPress(() {
dashboardProvider.resetRequestDataList();
dashboardProvider.currentListIndex = null;
Provider.of<AllRequestsProvider>(context, listen: false)
..reset()
..getAllRequests(context);
}),
Transform.flip(
flipY: isAscending,
child: 'dashboard/sort_descending'.toSvgAsset(width: 24, height: 24, color: AppColor.headingTextColor(context)).onPress(() {
_toggleSort(dashboardProvider, user?.type);
}),
)
],
).paddingOnly(start: 16, end: 16),
),
),
@ -159,19 +180,26 @@ class _RequestCategoryFragmentState extends State<RequestCategoryFragment> with
// ],
// ).paddingOnly(start: 16, end: 16)
// : context.translation.allWorkOrder.heading4(context).paddingOnly(start: 16, end: 16),
dashboardProvider.isDetailLoading
? Column(
mainAxisSize: MainAxisSize.max,
children: List.generate(3, (index) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0),
child: const SizedBox().toRequestShimmer(context, dashboardProvider.isDetailLoading),
);
})).paddingOnly(start: 16, end: 16, top: 16)
: (dashboardProvider.requestDetailList == null || dashboardProvider.requestDetailList?.data?.isEmpty == true)
? const NoDataFound().paddingOnly(top: 80).center
: RequestCategoryList(dashboardProvider.requestDetailList?.data ?? <Data>[], dashboardProvider.isDetailLoading, dashboardProvider.requestDetailList?.totalRows ?? 0),
(dashboardProvider.currentListIndex == null)
? Consumer<AllRequestsProvider>(builder: (context, snapshot, _) {
return RequestItemViewList(
snapshot.allRequestsAndCount?.requestsDetails ?? [],
snapshot.isAllLoading,
key: ValueKey('request_list_'), // Key changes on every tab click
);
})
: dashboardProvider.isDetailLoading
? Column(
mainAxisSize: MainAxisSize.max,
children: List.generate(3, (index) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0),
child: const SizedBox().toRequestShimmer(context, dashboardProvider.isDetailLoading),
);
})).paddingOnly(start: 16, end: 16, top: 16)
: (dashboardProvider.requestDetailList == null || dashboardProvider.requestDetailList?.data?.isEmpty == true)
? const NoDataFound().paddingOnly(top: 80).center
: RequestCategoryList(dashboardProvider.requestDetailList?.data ?? <Data>[], dashboardProvider.isDetailLoading, dashboardProvider.requestDetailList?.totalRows ?? 0),
]);
});
}

Loading…
Cancel
Save