dashboard api calling structure improvement.

main_design2.0
Sikander Saleem 1 year ago
parent cfcb5e24ca
commit 6281364579

@ -40,12 +40,24 @@ class AllRequestsProvider extends ChangeNotifier {
stateCode = null; stateCode = null;
} }
void resetRequestsApiData() {
highPriorityRequests = null;
overdueRequests = null;
openRequests = null;
inProgressRequests = null;
completedRequests = null;
pageNum = 1;
nextPage = true;
stateCode = null;
}
void getRequests() { void getRequests() {
getHighPriorityRequests(); resetRequestsApiData();
getOverdueRequests(); getHighPriorityRequests(pagination: true);
getOpenRequests(); getOverdueRequests(pagination: true);
getInProgressRequests(); getOpenRequests(pagination: true);
getCompletedRequests(); getInProgressRequests(pagination: true);
getCompletedRequests(pagination: true);
} }
SearchAllRequestsModel searchedModel; SearchAllRequestsModel searchedModel;
@ -147,11 +159,13 @@ class AllRequestsProvider extends ChangeNotifier {
} }
} }
Future<int> getHighPriorityRequests() async { Future<int> getHighPriorityRequests({bool pagination = false}) async {
if (isHighPriorityLoading == true) return -2; if (isHighPriorityLoading == true) return -2;
isHighPriorityLoading = true;
notifyListeners(); if (highPriorityRequests == null || pagination) {
if (highPriorityRequests == null) notifyListeners(); isHighPriorityLoading = true;
notifyListeners();
}
Response response; Response response;
try { try {
Map<String, dynamic> body = { Map<String, dynamic> body = {
@ -160,11 +174,30 @@ class AllRequestsProvider extends ChangeNotifier {
"priority": [1], "priority": [1],
"displayData": [] "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); response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { 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(); notifyListeners();
} else {
allRequestsAndCount = null;
} }
isHighPriorityLoading = false; isHighPriorityLoading = false;
notifyListeners(); notifyListeners();
@ -177,10 +210,12 @@ class AllRequestsProvider extends ChangeNotifier {
} }
} }
Future<int> getOverdueRequests() async { Future<int> getOverdueRequests({bool pagination = false}) async {
if (isOverdueLoading == true) return -2; if (isOverdueLoading == true) return -2;
isOverdueLoading = true; if (overdueRequests == null || pagination) {
if (overdueRequests == null) notifyListeners(); isOverdueLoading = true;
notifyListeners();
}
Response response; Response response;
try { try {
Map<String, dynamic> body = { Map<String, dynamic> body = {
@ -189,12 +224,30 @@ class AllRequestsProvider extends ChangeNotifier {
"priority": [], "priority": [],
"displayData": [1] "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); response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { 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(); notifyListeners();
} else {
allRequestsAndCount = null;
} }
isOverdueLoading = false; isOverdueLoading = false;
notifyListeners(); notifyListeners();
@ -207,10 +260,16 @@ class AllRequestsProvider extends ChangeNotifier {
} }
} }
Future<int> getOpenRequests() async { Future<int> getOpenRequests({bool pagination = false, bool reset = false}) async {
if (isOpenLoading == true) return -2; if (isOpenLoading == true) return -2;
isOpenLoading = true; if (reset) {
if (openRequests == null) notifyListeners(); openRequests = null;
pageNum = 1;
}
if (openRequests == null || pagination) {
isOpenLoading = true;
notifyListeners();
}
Response response; Response response;
try { try {
bool isEngineer = ApiManager.instance.user.type == UsersTypes.engineer; bool isEngineer = ApiManager.instance.user.type == UsersTypes.engineer;
@ -220,12 +279,30 @@ class AllRequestsProvider extends ChangeNotifier {
"priority": [], "priority": [],
"displayData": [] "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); response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { 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(); notifyListeners();
} else {
allRequestsAndCount = null;
} }
isOpenLoading = false; isOpenLoading = false;
notifyListeners(); notifyListeners();
@ -238,10 +315,16 @@ class AllRequestsProvider extends ChangeNotifier {
} }
} }
Future<int> getInProgressRequests() async { Future<int> getInProgressRequests({bool pagination = false, bool reset = false}) async {
if (isInProgressLoading == true) return -2; if (isInProgressLoading == true) return -2;
isInProgressLoading = true; if (reset) {
if (inProgressRequests == null) notifyListeners(); inProgressRequests = null;
pageNum = 1;
}
if (inProgressRequests == null || pagination) {
isInProgressLoading = true;
notifyListeners();
}
Response response; Response response;
try { try {
Map<String, dynamic> body = { Map<String, dynamic> body = {
@ -250,12 +333,30 @@ class AllRequestsProvider extends ChangeNotifier {
"priority": [], "priority": [],
"displayData": [] "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); response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { 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(); notifyListeners();
} else {
allRequestsAndCount = null;
} }
isInProgressLoading = false; isInProgressLoading = false;
notifyListeners(); notifyListeners();
@ -268,10 +369,16 @@ class AllRequestsProvider extends ChangeNotifier {
} }
} }
Future<int> getCompletedRequests() async { Future<int> getCompletedRequests({bool pagination = false, bool reset = false}) async {
if (isCompleteLoading == true) return -2; if (isCompleteLoading == true) return -2;
isCompleteLoading = true; if (reset) {
if (completedRequests == null) notifyListeners(); completedRequests = null;
pageNum = 1;
}
if (completedRequests == null || pagination) {
isCompleteLoading = true;
notifyListeners();
}
Response response; Response response;
try { try {
Map<String, dynamic> body = { Map<String, dynamic> body = {
@ -280,12 +387,30 @@ class AllRequestsProvider extends ChangeNotifier {
"priority": [], "priority": [],
"displayData": [] "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); response = await ApiManager.instance.post(URLs.getAllRequestsAndCount, body: body);
stateCode = response.statusCode; stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) { 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(); notifyListeners();
} else {
allRequestsAndCount = null;
} }
isCompleteLoading = false; isCompleteLoading = false;
notifyListeners(); notifyListeners();

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
// import 'package:test_sa/pie_chart/pie_chart.dart'; // import 'package:test_sa/pie_chart/pie_chart.dart';
import 'package:provider/provider.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/controllers/providers/api/all_requests_provider.dart';
import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.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: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 '../../../../controllers/providers/api/user_provider.dart';
import '../../../../models/enums/user_types.dart'; import '../../../../models/enums/user_types.dart';
@ -19,23 +18,32 @@ class ProgressFragment extends StatelessWidget {
UserProvider _userProvider; UserProvider _userProvider;
AllRequestsProvider _provider;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context); _userProvider = Provider.of<UserProvider>(context);
bool isCurrentUserNotEngineer = (_userProvider.user.type != UsersTypes.engineer); bool isCurrentUserNotEngineer = (_userProvider.user.type != UsersTypes.engineer);
return Consumer<AllRequestsProvider>( return Consumer<AllRequestsProvider>(
builder: (context, snapshot, _) { builder: (context, snapshot, _) {
int total = (snapshot.completedRequests?.requestsDetails?.length ?? 0) + if (_provider == null) {
(snapshot.inProgressRequests?.requestsDetails?.length ?? 0) + _provider = snapshot;
(isCurrentUserNotEngineer ? (snapshot.openRequests?.requestsDetails?.length ?? 0) : 0); 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 = [ final List<ChartData> chartData = [
ChartData('Completed', snapshot.completedRequests?.requestsDetails?.length?.toDouble() ?? 0.0, AppColor.greenStatus(context)), ChartData('Completed', snapshot.completedRequests?.total?.count?.toDouble() ?? 0.0, AppColor.greenStatus(context)),
ChartData('In Progress', snapshot.inProgressRequests?.requestsDetails?.length?.toDouble() ?? 0.0, AppColor.yellowStatus(context)), ChartData('In Progress', snapshot.inProgressRequests?.total?.count?.toDouble() ?? 0.0, AppColor.yellowStatus(context)),
]; ];
if (isCurrentUserNotEngineer) { 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( return Column(

@ -25,7 +25,7 @@ class RequestsFragment extends StatelessWidget {
builder: (context, snapshot, _) => RefreshIndicator( builder: (context, snapshot, _) => RefreshIndicator(
onRefresh: () { onRefresh: () {
snapshot.getRequests(); snapshot.getRequests();
Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user,resetProvider: true); Provider.of<NotificationsProvider>(context, listen: false).getSystemNotifications(user: Provider.of<UserProvider>(context, listen: false).user, resetProvider: true);
return Future.delayed(const Duration(microseconds: 250)); return Future.delayed(const Duration(microseconds: 250));
}, },
child: GridView( child: GridView(
@ -92,8 +92,9 @@ class RequestsFragment extends StatelessWidget {
], ],
).toShadowContainer(context).onPress(isLoading ).toShadowContainer(context).onPress(isLoading
? null ? null
: () { : () async {
Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index))); await Navigator.push(context, MaterialPageRoute(builder: (context) => RequestsListPage(index)));
Provider.of<AllRequestsProvider>(context, listen: false).getRequests();
}); });
} }
} }

@ -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/models/enums/user_types.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.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/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 { class RequestsListPage extends StatelessWidget {
static const String routeName = "/requests-list-page"; static const String routeName = "/requests-list-page";
@ -14,10 +15,16 @@ class RequestsListPage extends StatelessWidget {
RequestsListPage(this.index, {Key key}) : super(key: key); RequestsListPage(this.index, {Key key}) : super(key: key);
AllRequestsProvider _provider;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
bool isEngineer = ApiManager.instance.user.type == UsersTypes.engineer; bool isEngineer = ApiManager.instance.user.type == UsersTypes.engineer;
if (_provider == null) {
_provider = Provider.of<AllRequestsProvider>(context, listen: false);
_provider.resetRequestsApiData();
callRequestApis();
}
String title = index == 0 String title = index == 0
? context.translation.highPriority ? context.translation.highPriority
: index == 1 : index == 1
@ -42,15 +49,35 @@ class RequestsListPage extends StatelessWidget {
: false; : false;
List<RequestsDetails> list = index == 0 List<RequestsDetails> list = index == 0
? snapshot.highPriorityRequests.requestsDetails ? snapshot.highPriorityRequests?.requestsDetails ?? []
: index == 1 : index == 1
? snapshot.overdueRequests.requestsDetails ? snapshot.overdueRequests?.requestsDetails?? []
: index == 2 : index == 2
? snapshot.openRequests.requestsDetails ? snapshot.openRequests?.requestsDetails?? []
: index == 3 : 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();
}
}
} }

Loading…
Cancel
Save