From 756040263264e7d5778549b704989f7da6f1aaed Mon Sep 17 00:00:00 2001 From: amirrezaghabeli Date: Mon, 6 Oct 2025 12:24:18 +0330 Subject: [PATCH] Refactor dependency injection to use lazy loading for providers in the core configuration. Remove unused logout method from AuthViewModel and adjust ProfileViewModel to call localLogout directly from AuthRepository. Clean up constructor parameters in ProfileViewModel and TenderDetailViewModel by removing unnecessary dependencies. --- lib/core/config/dependencies.dart | 52 +++++++++++++++---- lib/view_models/auth_view_model.dart | 22 -------- lib/view_models/profile_view_model.dart | 8 +-- lib/view_models/tender_detail_view_model.dart | 2 - 4 files changed, 43 insertions(+), 41 deletions(-) diff --git a/lib/core/config/dependencies.dart b/lib/core/config/dependencies.dart index 0d5dd22..861d149 100644 --- a/lib/core/config/dependencies.dart +++ b/lib/core/config/dependencies.dart @@ -37,47 +37,65 @@ List get providersRemote { List get cores { return [ - Provider(create: (context) => NetworkManager(context.read())), - ChangeNotifierProvider(create: (context) => ThemeProvider()), - ChangeNotifierProvider(create: (context) => NotificationStateService()), + Provider(create: (context) => NetworkManager(context.read()), lazy: true), + ChangeNotifierProvider(create: (context) => ThemeProvider(), lazy: true), + ChangeNotifierProvider( + create: (context) => NotificationStateService(), + lazy: true, + ), ]; } List get apiClients { return [ - Provider(create: (context) => AuthService(networkManager: context.read())), - Provider(create: (context) => HomeService(networkManager: context.read())), + Provider( + create: (context) => AuthService(networkManager: context.read()), + lazy: true, + ), + Provider( + create: (context) => HomeService(networkManager: context.read()), + lazy: true, + ), Provider( create: (context) => TenderDetailService(networkManager: context.read()), + lazy: true, ), - Provider( create: (context) => YourTendersService(networkManager: context.read()), + lazy: true, ), Provider( create: (context) => LikedTendersService(networkManager: context.read()), + lazy: true, ), Provider( create: (context) => TendersService(networkManager: context.read()), + lazy: true, ), Provider( create: (context) => ProfileService(networkManager: context.read()), + lazy: true, ), Provider( create: (context) => NotificationsService(networkManager: context.read()), + lazy: true, ), ]; } List get repositories { return [ - Provider(create: (context) => AuthRepository(authService: context.read())), + Provider( + create: (context) => AuthRepository(authService: context.read()), + lazy: true, + ), Provider( create: (context) => YourTendersRepository( yourTendersService: context.read(), likedTendersService: context.read(), ), + lazy: true, ), Provider( create: @@ -85,28 +103,33 @@ List get repositories { homeService: context.read(), yourTendersService: context.read(), ), + lazy: true, ), Provider( create: (context) => TenderDetailRepository(tenderDetailService: context.read()), + lazy: true, ), - Provider( create: (context) => LikedTendersRepository(likedTendersService: context.read()), + lazy: true, ), Provider( create: (context) => TendersRepository(tendersService: context.read()), + lazy: true, ), Provider( create: (context) => ProfileRepository(profileService: context.read()), + lazy: true, ), Provider( create: (context) => NotificationsRepository(notificationsService: context.read()), + lazy: true, ), ]; } @@ -119,6 +142,7 @@ List get services { homeRepository: context.read(), notificationStateService: context.read(), ), + lazy: true, ), ]; } @@ -127,6 +151,7 @@ List get viewModels { return [ ChangeNotifierProvider( create: (context) => AuthViewModel(authRepository: context.read()), + lazy: true, ), ChangeNotifierProvider( create: @@ -134,23 +159,25 @@ List get viewModels { homeRepository: context.read(), notificationStateService: context.read(), ), + lazy: true, ), ChangeNotifierProvider( create: (context) => TendersViewModel(tendersRepository: context.read()), + lazy: true, ), ChangeNotifierProvider( create: (context) => TenderDetailViewModel( tenderDetailRepository: context.read(), tendersRepository: context.read(), - tendersViewModel: context.read(), ), + lazy: true, ), - ChangeNotifierProvider( create: (context) => YourTendersViewModel(yourTendersRepository: context.read()), + lazy: true, ), ChangeNotifierProvider( create: @@ -158,17 +185,19 @@ List get viewModels { likedTendersRepository: context.read(), tendersRepository: context.read(), ), + lazy: true, ), ChangeNotifierProvider( create: (context) => ProfileViewModel( profileRepository: context.read(), authRepository: context.read(), - authViewModel: context.read(), ), + lazy: true, ), ChangeNotifierProvider( create: (context) => FinalCompletionOfDocumentsViewModel(), + lazy: true, ), ChangeNotifierProvider( create: @@ -177,6 +206,7 @@ List get viewModels { notificationStateService: context.read(), notificationCheckService: context.read(), ), + lazy: true, ), ]; } diff --git a/lib/view_models/auth_view_model.dart b/lib/view_models/auth_view_model.dart index aa0690d..d194a40 100644 --- a/lib/view_models/auth_view_model.dart +++ b/lib/view_models/auth_view_model.dart @@ -8,7 +8,6 @@ import '../core/utils/logger.dart'; import '../core/utils/result.dart'; import '../data/repositories/auth_repository.dart'; import '../data/services/model/login_response/login_response_model.dart'; -import '../data/services/model/logout_response/logout_response.dart'; import '../data/services/model/reset_password_response/reset_password_response.dart'; import '../views/forget_password_create/strings/forgot_password_create_strings.dart'; @@ -157,27 +156,6 @@ class AuthViewModel with ChangeNotifier { notifyListeners(); } - Future logout() async { - _errorMessage = null; - notifyListeners(); - - final result = await _authRepository.logout(); - - switch (result) { - case Ok(): - await localLogout(); - break; - case Error(): - _errorMessage = result.error.toString(); - break; - } - - notifyListeners(); - - _errorMessage = null; - notifyListeners(); - } - Future forgotPassword() async { _isLoadingForgot = true; _errorMessageForget = null; diff --git a/lib/view_models/profile_view_model.dart b/lib/view_models/profile_view_model.dart index 5e2f0f1..eb99915 100644 --- a/lib/view_models/profile_view_model.dart +++ b/lib/view_models/profile_view_model.dart @@ -8,20 +8,16 @@ import '../core/utils/result.dart'; import '../data/repositories/profile_repository.dart'; import '../data/services/model/logout_response/logout_response.dart'; import '../data/services/model/profile_response/profile_response.dart'; -import 'auth_view_model.dart'; class ProfileViewModel with ChangeNotifier { final ProfileRepository _profileRepository; final AuthRepository _authRepository; - final AuthViewModel _authViewModel; ProfileViewModel({ required ProfileRepository profileRepository, required AuthRepository authRepository, - required AuthViewModel authViewModel, }) : _profileRepository = profileRepository, - _authRepository = authRepository, - _authViewModel = authViewModel; + _authRepository = authRepository; bool _isLoading = false; String? _errorMessage; @@ -85,7 +81,7 @@ class ProfileViewModel with ChangeNotifier { switch (result) { case Ok(): - await _authViewModel.localLogout(); + await _authRepository.localLogout(); _loggedOut = true; break; case Error(): diff --git a/lib/view_models/tender_detail_view_model.dart b/lib/view_models/tender_detail_view_model.dart index b0a7b78..86049da 100644 --- a/lib/view_models/tender_detail_view_model.dart +++ b/lib/view_models/tender_detail_view_model.dart @@ -9,7 +9,6 @@ import '../core/constants/tender_approval_status.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_toggle_response/tender_approvals_toggle_response.dart'; -import 'tenders_view_model.dart'; class TenderDetailViewModel with ChangeNotifier { final TenderDetailRepository _tenderDetailRepository; @@ -18,7 +17,6 @@ class TenderDetailViewModel with ChangeNotifier { TenderDetailViewModel({ required TenderDetailRepository tenderDetailRepository, required TendersRepository tendersRepository, - required TendersViewModel tendersViewModel, }) : _tenderDetailRepository = tenderDetailRepository, _tendersRepository = tendersRepository;