Refactor provider initialization to load only essential providers at startup. Introduce TabNavigationService for managing tab state and update screens to respond to tab changes. Clean up view models and navigation logic for improved performance and maintainability.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:provider/single_child_widget.dart';
|
||||
import 'package:tm_app/core/network/network_manager.dart';
|
||||
import 'package:tm_app/core/services/tab_navigation_service.dart';
|
||||
import 'package:tm_app/core/theme/theme_provider.dart';
|
||||
import 'package:tm_app/data/repositories/home_repository.dart';
|
||||
import 'package:tm_app/data/repositories/liked_tenders_repository.dart';
|
||||
@@ -15,12 +16,6 @@ import 'package:tm_app/data/services/notification_service.dart';
|
||||
import 'package:tm_app/data/services/notification_state_service.dart';
|
||||
import 'package:tm_app/data/services/tender_detail_service.dart';
|
||||
import 'package:tm_app/data/services/your_tenders_service.dart';
|
||||
import 'package:tm_app/view_models/final_completion_of_documents_view_model.dart';
|
||||
import 'package:tm_app/view_models/liked_tenders_view_model.dart';
|
||||
import 'package:tm_app/view_models/notification_view_model.dart';
|
||||
import 'package:tm_app/view_models/tender_detail_view_model.dart';
|
||||
import 'package:tm_app/view_models/tenders_view_model.dart';
|
||||
import 'package:tm_app/view_models/your_tenders_view_model.dart';
|
||||
|
||||
import '../../data/repositories/auth_repository.dart';
|
||||
import '../../data/repositories/profile_repository.dart';
|
||||
@@ -28,11 +23,17 @@ import '../../data/services/auth_service.dart';
|
||||
import '../../data/services/profile_service.dart';
|
||||
import '../../data/services/tenders_service.dart';
|
||||
import '../../view_models/auth_view_model.dart';
|
||||
import '../../view_models/home_view_model.dart';
|
||||
import '../../view_models/profile_view_model.dart';
|
||||
|
||||
List<SingleChildWidget> get providersRemote {
|
||||
return [...cores, ...apiClients, ...repositories, ...services, ...viewModels];
|
||||
/// Essential providers loaded at app startup
|
||||
/// Only includes infrastructure and auth
|
||||
List<SingleChildWidget> get essentialProviders {
|
||||
return [
|
||||
...cores,
|
||||
...apiClients,
|
||||
...repositories,
|
||||
...services,
|
||||
...authProvider,
|
||||
];
|
||||
}
|
||||
|
||||
List<SingleChildWidget> get cores {
|
||||
@@ -43,6 +44,10 @@ List<SingleChildWidget> get cores {
|
||||
create: (context) => NotificationStateService(),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => TabNavigationService(),
|
||||
lazy: true,
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -147,66 +152,12 @@ List<SingleChildWidget> get services {
|
||||
];
|
||||
}
|
||||
|
||||
List<SingleChildWidget> get viewModels {
|
||||
/// Auth ViewModel - only essential ViewModel loaded at startup
|
||||
List<SingleChildWidget> get authProvider {
|
||||
return [
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => AuthViewModel(authRepository: context.read()),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create:
|
||||
(context) => HomeViewModel(
|
||||
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(),
|
||||
),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create:
|
||||
(context) =>
|
||||
YourTendersViewModel(yourTendersRepository: context.read()),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create:
|
||||
(context) => LikedTendersViewModel(
|
||||
likedTendersRepository: context.read(),
|
||||
tendersRepository: context.read(),
|
||||
),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create:
|
||||
(context) => ProfileViewModel(
|
||||
profileRepository: context.read(),
|
||||
authRepository: context.read(),
|
||||
),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => FinalCompletionOfDocumentsViewModel(),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create:
|
||||
(context) => NotificationViewModel(
|
||||
notificationsRepository: context.read(),
|
||||
notificationStateService: context.read(),
|
||||
notificationCheckService: context.read(),
|
||||
),
|
||||
lazy: true,
|
||||
lazy: false, // Load immediately for auth state checks
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user