diff --git a/lib/controllers/providers/api/all_requests_provider.dart b/lib/controllers/providers/api/all_requests_provider.dart index 0ab1ddfb..733a3731 100644 --- a/lib/controllers/providers/api/all_requests_provider.dart +++ b/lib/controllers/providers/api/all_requests_provider.dart @@ -40,12 +40,24 @@ class AllRequestsProvider extends ChangeNotifier { stateCode = null; } + void resetRequestsApiData() { + highPriorityRequests = null; + overdueRequests = null; + openRequests = null; + inProgressRequests = null; + completedRequests = null; + pageNum = 1; + nextPage = true; + stateCode = null; + } + void getRequests() { - getHighPriorityRequests(); - getOverdueRequests(); - getOpenRequests(); - getInProgressRequests(); - getCompletedRequests(); + resetRequestsApiData(); + getHighPriorityRequests(pagination: true); + getOverdueRequests(pagination: true); + getOpenRequests(pagination: true); + getInProgressRequests(pagination: true); + getCompletedRequests(pagination: true); } SearchAllRequestsModel searchedModel; @@ -147,11 +159,13 @@ class AllRequestsProvider extends ChangeNotifier { } } - Future getHighPriorityRequests() async { + Future getHighPriorityRequests({bool pagination = false}) async { if (isHighPriorityLoading == true) return -2; - isHighPriorityLoading = true; - notifyListeners(); - if (highPriorityRequests == null) notifyListeners(); + + if (highPriorityRequests == null || pagination) { + isHighPriorityLoading = true; + notifyListeners(); + } Response response; try { Map body = { @@ -160,11 +174,30 @@ class AllRequestsProvider extends ChangeNotifier { "priority": [1], "displayData": [] }; + if (pagination) { + body["pageNumber"] = 0; + body["pageSize"] = 0; + } else { + body["pageNumber"] = pageNum++; + body["pageSize"] = pageItemNumber; + } response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - highPriorityRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + if (highPriorityRequests == null) { + highPriorityRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + } else { + highPriorityRequests.requestsDetails.addAll(AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]).requestsDetails); + } + if (highPriorityRequests.requestsDetails.length >= pageItemNumber) { + nextPage = true; + } else { + nextPage = false; + } + notifyListeners(); + } else { + allRequestsAndCount = null; } isHighPriorityLoading = false; notifyListeners(); @@ -177,10 +210,12 @@ class AllRequestsProvider extends ChangeNotifier { } } - Future getOverdueRequests() async { + Future getOverdueRequests({bool pagination = false}) async { if (isOverdueLoading == true) return -2; - isOverdueLoading = true; - if (overdueRequests == null) notifyListeners(); + if (overdueRequests == null || pagination) { + isOverdueLoading = true; + notifyListeners(); + } Response response; try { Map body = { @@ -189,12 +224,30 @@ class AllRequestsProvider extends ChangeNotifier { "priority": [], "displayData": [1] }; + if (pagination) { + body["pageNumber"] = 0; + body["pageSize"] = 0; + } else { + body["pageNumber"] = pageNum++; + body["pageSize"] = pageItemNumber; + } response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - overdueRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + if (overdueRequests == null) { + overdueRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + } else { + overdueRequests.requestsDetails.addAll(AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]).requestsDetails); + } + if (overdueRequests.requestsDetails.length >= pageItemNumber) { + nextPage = true; + } else { + nextPage = false; + } notifyListeners(); + } else { + allRequestsAndCount = null; } isOverdueLoading = false; notifyListeners(); @@ -207,10 +260,16 @@ class AllRequestsProvider extends ChangeNotifier { } } - Future getOpenRequests() async { + Future getOpenRequests({bool pagination = false, bool reset = false}) async { if (isOpenLoading == true) return -2; - isOpenLoading = true; - if (openRequests == null) notifyListeners(); + if (reset) { + openRequests = null; + pageNum = 1; + } + if (openRequests == null || pagination) { + isOpenLoading = true; + notifyListeners(); + } Response response; try { bool isEngineer = ApiManager.instance.user.type == UsersTypes.engineer; @@ -220,12 +279,30 @@ class AllRequestsProvider extends ChangeNotifier { "priority": [], "displayData": [] }; + if (pagination) { + body["pageNumber"] = 0; + body["pageSize"] = 0; + } else { + body["pageNumber"] = pageNum++; + body["pageSize"] = pageItemNumber; + } response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - openRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + if (openRequests == null) { + openRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + } else { + openRequests.requestsDetails.addAll(AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]).requestsDetails); + } + if (openRequests.requestsDetails.length >= pageItemNumber) { + nextPage = true; + } else { + nextPage = false; + } notifyListeners(); + } else { + allRequestsAndCount = null; } isOpenLoading = false; notifyListeners(); @@ -238,10 +315,16 @@ class AllRequestsProvider extends ChangeNotifier { } } - Future getInProgressRequests() async { + Future getInProgressRequests({bool pagination = false, bool reset = false}) async { if (isInProgressLoading == true) return -2; - isInProgressLoading = true; - if (inProgressRequests == null) notifyListeners(); + if (reset) { + inProgressRequests = null; + pageNum = 1; + } + if (inProgressRequests == null || pagination) { + isInProgressLoading = true; + notifyListeners(); + } Response response; try { Map body = { @@ -250,12 +333,30 @@ class AllRequestsProvider extends ChangeNotifier { "priority": [], "displayData": [] }; + if (pagination) { + body["pageNumber"] = 0; + body["pageSize"] = 0; + } else { + body["pageNumber"] = pageNum++; + body["pageSize"] = pageItemNumber; + } response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - inProgressRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + if (inProgressRequests == null) { + inProgressRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + } else { + inProgressRequests.requestsDetails.addAll(AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]).requestsDetails); + } + if (inProgressRequests.requestsDetails.length >= pageItemNumber) { + nextPage = true; + } else { + nextPage = false; + } notifyListeners(); + } else { + allRequestsAndCount = null; } isInProgressLoading = false; notifyListeners(); @@ -268,10 +369,16 @@ class AllRequestsProvider extends ChangeNotifier { } } - Future getCompletedRequests() async { + Future getCompletedRequests({bool pagination = false, bool reset = false}) async { if (isCompleteLoading == true) return -2; - isCompleteLoading = true; - if (completedRequests == null) notifyListeners(); + if (reset) { + completedRequests = null; + pageNum = 1; + } + if (completedRequests == null || pagination) { + isCompleteLoading = true; + notifyListeners(); + } Response response; try { Map body = { @@ -280,12 +387,30 @@ class AllRequestsProvider extends ChangeNotifier { "priority": [], "displayData": [] }; + if (pagination) { + body["pageNumber"] = 0; + body["pageSize"] = 0; + } else { + body["pageNumber"] = pageNum++; + body["pageSize"] = pageItemNumber; + } response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - completedRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + if (completedRequests == null) { + completedRequests = AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]); + } else { + completedRequests.requestsDetails.addAll(AllRequestsAndCount.fromJson(json.decode(response.body)["data"][0]).requestsDetails); + } + if (completedRequests.requestsDetails.length >= pageItemNumber) { + nextPage = true; + } else { + nextPage = false; + } notifyListeners(); + } else { + allRequestsAndCount = null; } isCompleteLoading = false; notifyListeners(); diff --git a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart index c9d3c222..5d3afe75 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; - // import 'package:test_sa/pie_chart/pie_chart.dart'; import 'package:provider/provider.dart'; +import 'package:syncfusion_flutter_charts/charts.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/int_extensions.dart'; @@ -9,8 +9,7 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/pages/land_page/widgets/request_item_view_list.dart'; -import 'package:syncfusion_flutter_charts/charts.dart'; -import 'package:syncfusion_flutter_charts/sparkcharts.dart'; + import '../../../../controllers/providers/api/user_provider.dart'; import '../../../../models/enums/user_types.dart'; @@ -19,23 +18,32 @@ class ProgressFragment extends StatelessWidget { UserProvider _userProvider; + AllRequestsProvider _provider; + @override Widget build(BuildContext context) { _userProvider = Provider.of(context); bool isCurrentUserNotEngineer = (_userProvider.user.type != UsersTypes.engineer); return Consumer( builder: (context, snapshot, _) { - int total = (snapshot.completedRequests?.requestsDetails?.length ?? 0) + - (snapshot.inProgressRequests?.requestsDetails?.length ?? 0) + - (isCurrentUserNotEngineer ? (snapshot.openRequests?.requestsDetails?.length ?? 0) : 0); + if (_provider == null) { + _provider = snapshot; + if (isCurrentUserNotEngineer) { + _provider.getOpenRequests(reset: true); + } + _provider.getInProgressRequests(reset:true); + _provider.getCompletedRequests(reset:true); + } + + int total = (snapshot.completedRequests?.total?.count ?? 0) + (snapshot.inProgressRequests?.total?.count ?? 0) + (isCurrentUserNotEngineer ? (snapshot.openRequests?.total?.count ?? 0) : 0); final List chartData = [ - ChartData('Completed', snapshot.completedRequests?.requestsDetails?.length?.toDouble() ?? 0.0, AppColor.greenStatus(context)), - ChartData('In Progress', snapshot.inProgressRequests?.requestsDetails?.length?.toDouble() ?? 0.0, AppColor.yellowStatus(context)), + ChartData('Completed', snapshot.completedRequests?.total?.count?.toDouble() ?? 0.0, AppColor.greenStatus(context)), + ChartData('In Progress', snapshot.inProgressRequests?.total?.count?.toDouble() ?? 0.0, AppColor.yellowStatus(context)), ]; if (isCurrentUserNotEngineer) { - chartData.insert(1, ChartData('Open', snapshot.openRequests?.requestsDetails?.length?.toDouble() ?? 0.0, AppColor.blueStatus(context))); + chartData.insert(1, ChartData('Open', snapshot.openRequests?.total?.count?.toDouble() ?? 0.0, AppColor.blueStatus(context))); } return Column( diff --git a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart index 1007edc7..38588c18 100644 --- a/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart +++ b/lib/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart @@ -25,7 +25,7 @@ class RequestsFragment extends StatelessWidget { builder: (context, snapshot, _) => RefreshIndicator( onRefresh: () { snapshot.getRequests(); - Provider.of(context, listen: false).getSystemNotifications(user: Provider.of(context, listen: false).user,resetProvider: true); + Provider.of(context, listen: false).getSystemNotifications(user: Provider.of(context, listen: false).user, resetProvider: true); return Future.delayed(const Duration(microseconds: 250)); }, child: GridView( @@ -92,8 +92,9 @@ class RequestsFragment extends StatelessWidget { ], ).toShadowContainer(context).onPress(isLoading ? null - : () { - Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index))); + : () async { + await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index))); + Provider.of(context, listen: false).getRequests(); }); } } diff --git a/lib/new_views/pages/land_page/requests_list_page.dart b/lib/new_views/pages/land_page/requests_list_page.dart index f4796c18..d6e33f08 100644 --- a/lib/new_views/pages/land_page/requests_list_page.dart +++ b/lib/new_views/pages/land_page/requests_list_page.dart @@ -7,6 +7,7 @@ import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/pages/land_page/widgets/request_item_view_list.dart'; +import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; class RequestsListPage extends StatelessWidget { static const String routeName = "/requests-list-page"; @@ -14,10 +15,16 @@ class RequestsListPage extends StatelessWidget { RequestsListPage(this.index, {Key key}) : super(key: key); + AllRequestsProvider _provider; + @override Widget build(BuildContext context) { bool isEngineer = ApiManager.instance.user.type == UsersTypes.engineer; - + if (_provider == null) { + _provider = Provider.of(context, listen: false); + _provider.resetRequestsApiData(); + callRequestApis(); + } String title = index == 0 ? context.translation.highPriority : index == 1 @@ -42,15 +49,35 @@ class RequestsListPage extends StatelessWidget { : false; List list = index == 0 - ? snapshot.highPriorityRequests.requestsDetails + ? snapshot.highPriorityRequests?.requestsDetails ?? [] : index == 1 - ? snapshot.overdueRequests.requestsDetails + ? snapshot.overdueRequests?.requestsDetails?? [] : index == 2 - ? snapshot.openRequests.requestsDetails + ? snapshot.openRequests?.requestsDetails?? [] : index == 3 - ? snapshot.completedRequests.requestsDetails + ? snapshot.completedRequests?.requestsDetails?? [] : []; - return RequestItemViewList(list, isLoading); + return LazyLoading( + child: RequestItemViewList(list, isLoading), + nextPage: snapshot.nextPage, + onLazyLoad: () { + callRequestApis(); + }, + ); + + RequestItemViewList(list, isLoading); })); } + + void callRequestApis() { + if (index == 0) { + _provider.getHighPriorityRequests(); + } else if (index == 1) { + _provider.getOverdueRequests(); + } else if (index == 2) { + _provider.getOpenRequests(); + } else { + _provider.getCompletedRequests(); + } + } }