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;
}
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<int> getHighPriorityRequests() async {
Future<int> 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<String, dynamic> 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<int> getOverdueRequests() async {
Future<int> 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<String, dynamic> 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<int> getOpenRequests() async {
Future<int> 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<int> getInProgressRequests() async {
Future<int> 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<String, dynamic> 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<int> getCompletedRequests() async {
Future<int> 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<String, dynamic> 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();

@ -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<UserProvider>(context);
bool isCurrentUserNotEngineer = (_userProvider.user.type != UsersTypes.engineer);
return Consumer<AllRequestsProvider>(
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 = [
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(

@ -25,7 +25,7 @@ class RequestsFragment extends StatelessWidget {
builder: (context, snapshot, _) => RefreshIndicator(
onRefresh: () {
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));
},
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<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/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<AllRequestsProvider>(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<RequestsDetails> 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();
}
}
}

Loading…
Cancel
Save