Merge pull request 'show message when there is error in submit or remove approvals' (#102) from like_tenders_error_approval into main

Reviewed-on: https://repo.ravanertebat.com/TM/tm_app/pulls/102
This commit is contained in:
a.ghabeli
2025-09-06 14:11:19 +03:30
6 changed files with 137 additions and 88 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ class FetchDataException extends AppException {
FetchDataException([String? message, int? statusCode, originalError])
: super(
message ?? 'Error During Communication: ',
'Network Error',
'Network Error : ',
statusCode,
originalError,
);
@@ -55,6 +55,11 @@ class LikedTendersViewModel with ChangeNotifier {
_homeViewModel.init();
}
void clearApprovalErrorMessage() {
_errorMessage = null;
notifyListeners();
}
Future<void> getLikedTenders({bool reset = false}) async {
if (!reset && (isLoadingMore || !hasMore)) {
return;
@@ -303,7 +308,7 @@ class LikedTendersViewModel with ChangeNotifier {
approvalStatus = false;
break;
}
approvalStatus = false;
_isSubmitApprovalLoading = false;
notifyListeners();
}
@@ -370,6 +375,7 @@ class LikedTendersViewModel with ChangeNotifier {
break;
}
approvalStatus = false;
_isRejectApprovalLoading = false;
notifyListeners();
}
@@ -24,9 +24,26 @@ class _LikedTendersDesktopPageState extends State<LikedTendersDesktopPage> {
@override
void initState() {
viewModel = context.read<LikedTendersViewModel>();
viewModel.addListener(_viewModelListener);
super.initState();
}
void _viewModelListener() {
if (viewModel.approvalErrorMessage?.isNotEmpty == true &&
viewModel.approvalStatus == false) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text(viewModel.approvalErrorMessage!)));
viewModel.clearApprovalErrorMessage();
}
}
@override
void dispose() {
viewModel.removeListener(_viewModelListener);
super.dispose();
}
@override
Widget build(BuildContext context) {
return PopScope(
@@ -27,6 +27,18 @@ class _LikedTendersMobilePageState extends State<LikedTendersMobilePage> {
viewModel = context.read<LikedTendersViewModel>();
super.initState();
_scrollController = ScrollController()..addListener(_onScroll);
viewModel.addListener(_viewModelListener);
}
void _viewModelListener() {
if (mounted &&
viewModel.approvalErrorMessage?.isNotEmpty == true &&
viewModel.approvalStatus == false) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text(viewModel.approvalErrorMessage!)));
viewModel.clearApprovalErrorMessage();
}
}
void _onScroll() {
@@ -46,6 +58,7 @@ class _LikedTendersMobilePageState extends State<LikedTendersMobilePage> {
void dispose() {
_scrollController.removeListener(_onScroll);
_scrollController.dispose();
viewModel.removeListener(_viewModelListener);
super.dispose();
}
@@ -94,11 +107,7 @@ class _LikedTendersMobilePageState extends State<LikedTendersMobilePage> {
final itemCount =
feedback.length + (viewModel.isLoadingMore ? 1 : 0);
return RefreshIndicator(
onRefresh: () async {
await viewModel.getLikedTenders(reset: true);
},
child: ListView.builder(
return ListView.builder(
controller: _scrollController,
padding: EdgeInsets.symmetric(
horizontal: 24.0.w(),
@@ -109,8 +118,9 @@ class _LikedTendersMobilePageState extends State<LikedTendersMobilePage> {
if (index < feedback.length) {
final item = feedback[index];
TenderApprovalsData? approval;
bool hasApproval = viewModel
.hasTenderApprovalForTender(item.tenderId!);
bool hasApproval = viewModel.hasTenderApprovalForTender(
item.tenderId!,
);
if (hasApproval) {
approval = viewModel.getApprovalStatusForTender(
item.tenderId!,
@@ -162,7 +172,6 @@ class _LikedTendersMobilePageState extends State<LikedTendersMobilePage> {
);
}
},
),
);
},
),
@@ -26,6 +26,23 @@ class _LikedTendersTabletPageState extends State<LikedTendersTabletPage> {
void initState() {
viewModel = context.read<LikedTendersViewModel>();
super.initState();
viewModel.addListener(_viewModelListener);
}
void _viewModelListener() {
if (viewModel.approvalErrorMessage?.isNotEmpty == true &&
viewModel.approvalStatus == false) {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text(viewModel.approvalErrorMessage!)));
viewModel.clearApprovalErrorMessage();
}
}
@override
void dispose() {
viewModel.removeListener(_viewModelListener);
super.dispose();
}
@override