web fixes codes

This commit is contained in:
amirrezaghabeli
2025-08-31 15:04:35 +03:30
parent 6f4cc67fe6
commit 471f6e3119
11 changed files with 62 additions and 37 deletions
+1
View File
@@ -97,6 +97,7 @@ List<SingleChildWidget> get viewModels {
tenderDetailRepository: context.read(), tenderDetailRepository: context.read(),
tendersRepository: context.read(), tendersRepository: context.read(),
tendersViewModel: context.read(), tendersViewModel: context.read(),
homeViewModel: context.read(),
), ),
), ),
@@ -8,20 +8,24 @@ import 'package:tm_app/data/services/model/tender_detail_response/tender_detail_
import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart';
import '../data/services/model/tender_approvals_data/tender_approvals_data.dart'; import '../data/services/model/tender_approvals_data/tender_approvals_data.dart';
import '../data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart'; import '../data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart';
import 'home_view_model.dart';
import 'tenders_view_model.dart'; import 'tenders_view_model.dart';
class TenderDetailViewModel with ChangeNotifier { class TenderDetailViewModel with ChangeNotifier {
final TenderDetailRepository _tenderDetailRepository; final TenderDetailRepository _tenderDetailRepository;
final TendersRepository _tendersRepository; final TendersRepository _tendersRepository;
final TendersViewModel _tendersViewModel; final TendersViewModel _tendersViewModel;
final HomeViewModel _homeViewModel;
TenderDetailViewModel({ TenderDetailViewModel({
required TenderDetailRepository tenderDetailRepository, required TenderDetailRepository tenderDetailRepository,
required TendersRepository tendersRepository, required TendersRepository tendersRepository,
required TendersViewModel tendersViewModel, required TendersViewModel tendersViewModel,
required HomeViewModel homeViewModel,
}) : _tenderDetailRepository = tenderDetailRepository, }) : _tenderDetailRepository = tenderDetailRepository,
_tendersRepository = tendersRepository, _tendersRepository = tendersRepository,
_tendersViewModel = tendersViewModel; _tendersViewModel = tendersViewModel,
_homeViewModel = homeViewModel;
bool _isLoading = false; bool _isLoading = false;
bool _isSubmitApprovalLoading = false; bool _isSubmitApprovalLoading = false;
@@ -122,6 +126,10 @@ class TenderDetailViewModel with ChangeNotifier {
_tendersViewModel.getTenderApprovals(tenderId); _tendersViewModel.getTenderApprovals(tenderId);
} }
void updateHome() async {
_homeViewModel.init();
}
Future<void> getTenderApprovals(String tenderId) async { Future<void> getTenderApprovals(String tenderId) async {
_errorMessage = null; _errorMessage = null;
notifyListeners(); notifyListeners();
@@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
@@ -9,7 +8,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_card.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/strings.dart';
import '../../../view_models/home_view_model.dart'; import '../../../core/routes/app_routes.dart';
import '../../shared/desktop_navigation_widget.dart'; import '../../shared/desktop_navigation_widget.dart';
class TenderDetailDesktopPage extends StatefulWidget { class TenderDetailDesktopPage extends StatefulWidget {
@@ -80,9 +79,7 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
return PopScope( return PopScope(
onPopInvokedWithResult: (didPop, result) { onPopInvokedWithResult: (didPop, result) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<TenderDetailViewModel>().updateTenderApprovals( viewModel.updateTenderApprovals(widget.tenderId);
widget.tenderId,
);
}); });
}, },
child: Scaffold( child: Scaffold(
@@ -112,14 +109,20 @@ class _TenderDetailDesktopPageState extends State<TenderDetailDesktopPage> {
// Navigate to different screens based on index // Navigate to different screens based on index
switch (index) { switch (index) {
case 0: case 0:
Router.neglect(context, () => context.go('/home')); Router.neglect(
context.read<HomeViewModel>().init(); context,
() => HomeRouteData().go(context),
);
viewModel.updateHome();
break; break;
case 1: case 1:
break; break;
case 2: case 2:
// Navigate to profile // Navigate to profile
Router.neglect(context, () => context.go('/profile')); Router.neglect(
context,
() => ProfileRouteData().go(context),
);
break; break;
} }
}, },
@@ -6,7 +6,6 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/view_models/home_view_model.dart';
import 'package:tm_app/view_models/tender_detail_view_model.dart'; import 'package:tm_app/view_models/tender_detail_view_model.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_action.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_action.dart';
import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_card.dart';
@@ -14,6 +13,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_header.dart';
import 'package:tm_app/views/shared/tablet_navigation_widget.dart'; import 'package:tm_app/views/shared/tablet_navigation_widget.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/strings.dart';
import '../../../core/routes/app_routes.dart';
class TenderDetailTabletPage extends StatefulWidget { class TenderDetailTabletPage extends StatefulWidget {
final String tenderId; final String tenderId;
@@ -84,9 +84,7 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
onPopInvokedWithResult: (didPop, result) { onPopInvokedWithResult: (didPop, result) {
if (kIsWeb) { if (kIsWeb) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<TenderDetailViewModel>().updateTenderApprovals( viewModel.updateTenderApprovals(widget.tenderId);
widget.tenderId,
);
}); });
} }
}, },
@@ -124,15 +122,15 @@ class _TenderDetailTabletPageState extends State<TenderDetailTabletPage> {
// Handle navigation to other tabs // Handle navigation to other tabs
switch (index) { switch (index) {
case 0: case 0:
Router.neglect(context, () => context.go('/home')); Router.neglect(context, () => HomeRouteData().go(context));
context.read<HomeViewModel>().init(); viewModel.updateHome();
break; break;
case 1: case 1:
break; break;
case 2: case 2:
// Navigate to profile // Navigate to profile
context.pop(); context.pop();
Router.neglect(context, () => context.go('/profile')); Router.neglect(context, () => ProfileRouteData().go(context));
break; break;
} }
}, },
+8 -3
View File
@@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/constants/strings.dart'; import 'package:tm_app/core/constants/strings.dart';
@@ -44,11 +43,17 @@ class DesktopHomePage extends StatelessWidget {
break; break;
case 1: case 1:
// Navigate to tenders // Navigate to tenders
Router.neglect(context, () => context.go('/tenders')); Router.neglect(
context,
() => TendersRouteData().go(context),
);
break; break;
case 2: case 2:
// Navigate to profile // Navigate to profile
Router.neglect(context, () => context.go('/profile')); Router.neglect(
context,
() => ProfileRouteData().go(context),
);
break; break;
} }
}, },
+2 -2
View File
@@ -59,12 +59,12 @@ class TabletHomePage extends StatelessWidget {
case 1: case 1:
// Navigate to tenders // Navigate to tenders
context.pop(); context.pop();
Router.neglect(context, () => context.go('/tenders')); Router.neglect(context, () => TendersRouteData().go(context));
break; break;
case 2: case 2:
// Navigate to profile // Navigate to profile
context.pop(); context.pop();
Router.neglect(context, () => context.go('/profile')); Router.neglect(context, () => ProfileRouteData().go(context));
break; break;
} }
}, },
+10 -4
View File
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/view_models/profile_view_model.dart'; import 'package:tm_app/view_models/profile_view_model.dart';
@@ -39,7 +38,7 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
); );
} }
if (viewModel.loggedOut) { if (viewModel.loggedOut) {
LoginScreenRoute().go(context); Router.neglect(context, () => LoginScreenRoute().go(context));
} }
} }
@@ -77,11 +76,17 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
switch (index) { switch (index) {
case 0: case 0:
// Navigate to home // Navigate to home
Router.neglect(context, () => context.go('/home')); Router.neglect(
context,
() => HomeRouteData().go(context),
);
break; break;
case 1: case 1:
// Navigate to profile // Navigate to profile
Router.neglect(context, () => context.go('/tenders')); Router.neglect(
context,
() => TendersRouteData().go(context),
);
break; break;
case 2: case 2:
// Already on profile // Already on profile
@@ -163,6 +168,7 @@ class _DesktopProfilePageState extends State<DesktopProfilePage> {
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: InkWell( child: InkWell(
onTap: () => viewModel.logout(), onTap: () => viewModel.logout(),
borderRadius: BorderRadius.circular(100),
child: Container( child: Container(
width: 156, width: 156,
height: 56.0.h(), height: 56.0.h(),
+2 -1
View File
@@ -38,7 +38,7 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
); );
} }
if (viewModel.loggedOut) { if (viewModel.loggedOut) {
LoginScreenRoute().go(context); Router.neglect(context, () => LoginScreenRoute().go(context));
} }
} }
@@ -143,6 +143,7 @@ class _MobileProfilePageState extends State<MobileProfilePage> {
Spacer(), Spacer(),
InkWell( InkWell(
onTap: () => viewModel.logout(), onTap: () => viewModel.logout(),
borderRadius: BorderRadius.circular(100),
child: Container( child: Container(
width: double.infinity, width: double.infinity,
height: 56.0.h(), height: 56.0.h(),
+8 -5
View File
@@ -5,7 +5,6 @@ import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/constants/strings.dart'; import 'package:tm_app/core/constants/strings.dart';
import 'package:tm_app/core/routes/app_routes.dart'; import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/view_models/home_view_model.dart';
import 'package:tm_app/view_models/profile_view_model.dart'; import 'package:tm_app/view_models/profile_view_model.dart';
import '../../../core/theme/colors.dart'; import '../../../core/theme/colors.dart';
@@ -40,7 +39,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
); );
} }
if (viewModel.loggedOut) { if (viewModel.loggedOut) {
LoginScreenRoute().go(context); Router.neglect(context, () => LoginScreenRoute().go(context));
} }
} }
@@ -103,12 +102,15 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
switch (index) { switch (index) {
case 0: case 0:
context.pop(); context.pop();
Router.neglect(context, () => context.go('/home')); Router.neglect(context, () => HomeRouteData().go(context));
context.read<HomeViewModel>().init();
break; break;
case 1: case 1:
context.pop(); context.pop();
Router.neglect(context, () => context.go('/tenders')); Router.neglect(
context,
() => TendersRouteData().go(context),
);
break; break;
} }
}, },
@@ -190,6 +192,7 @@ class _TabletProfilePageState extends State<TabletProfilePage> {
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: InkWell( child: InkWell(
onTap: () => viewModel.logout(), onTap: () => viewModel.logout(),
borderRadius: BorderRadius.circular(100),
child: Container( child: Container(
width: 156, width: 156,
height: 56.0.h(), height: 56.0.h(),
+3 -4
View File
@@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/core/utils/size_config.dart';
@@ -8,6 +7,7 @@ import 'package:tm_app/views/shared/desktop_navigation_widget.dart';
import 'package:tm_app/views/tenders/widgets/main_tenders_slider.dart'; import 'package:tm_app/views/tenders/widgets/main_tenders_slider.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/strings.dart';
import '../../../core/routes/app_routes.dart';
class DesktopTendersPage extends StatefulWidget { class DesktopTendersPage extends StatefulWidget {
const DesktopTendersPage({super.key}); const DesktopTendersPage({super.key});
@@ -63,7 +63,7 @@ class _DesktopTendersPageState extends State<DesktopTendersPage> {
switch (index) { switch (index) {
case 0: case 0:
// Navigate to home // Navigate to home
Router.neglect(context, () => context.go('/home')); Router.neglect(context, () => HomeRouteData().go(context));
viewModel.updateHome(); viewModel.updateHome();
break; break;
case 1: case 1:
@@ -71,8 +71,7 @@ class _DesktopTendersPageState extends State<DesktopTendersPage> {
break; break;
case 2: case 2:
// Navigate to profile // Navigate to profile
// context.go('/profile'); Router.neglect(context, () => ProfileRouteData().go(context));
Router.neglect(context, () => context.go('/profile'));
break; break;
} }
}, },
+3 -2
View File
@@ -10,6 +10,7 @@ import 'package:tm_app/views/tenders/widgets/main_tenders_slider.dart';
import '../../../core/constants/assets.dart'; import '../../../core/constants/assets.dart';
import '../../../core/constants/strings.dart'; import '../../../core/constants/strings.dart';
import '../../../core/routes/app_routes.dart';
class TabletTendersPage extends StatefulWidget { class TabletTendersPage extends StatefulWidget {
const TabletTendersPage({super.key}); const TabletTendersPage({super.key});
@@ -64,12 +65,12 @@ class _TabletTendersPageState extends State<TabletTendersPage> {
switch (index) { switch (index) {
case 0: case 0:
context.pop(); context.pop();
Router.neglect(context, () => context.go('/home')); Router.neglect(context, () => HomeRouteData().go(context));
viewModel.updateHome(); viewModel.updateHome();
break; break;
case 2: case 2:
context.pop(); context.pop();
Router.neglect(context, () => context.go('/profile')); Router.neglect(context, () => ProfileRouteData().go(context));
break; break;
} }