38222afcfa
- Updated AuthViewModel to hydrate user data from storage on initialization. - Added method to AuthRepository for retrieving stored customer data. - Enhanced AuthService to save and retrieve customer data from SharedPreferences. - Refactored UI components to use context.watch for user role updates in MeetingTimeDialog, TenderDetailActions, and TendersPage. - Improved navigation logic in final completion pages to handle user interactions more effectively.
175 lines
5.2 KiB
Dart
175 lines
5.2 KiB
Dart
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';
|
|
import 'package:tm_app/data/repositories/notification_repository.dart';
|
|
import 'package:tm_app/data/repositories/tender_detail_repository.dart';
|
|
import 'package:tm_app/data/repositories/tenders_repository.dart';
|
|
import 'package:tm_app/data/repositories/your_tenders_repository.dart';
|
|
import 'package:tm_app/data/services/home_service.dart';
|
|
import 'package:tm_app/data/services/liked_tenders_service.dart';
|
|
import 'package:tm_app/data/services/notification_check_service.dart';
|
|
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 '../../data/repositories/auth_repository.dart';
|
|
import '../../data/repositories/profile_repository.dart';
|
|
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';
|
|
|
|
/// 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 {
|
|
return [
|
|
Provider(create: (context) => NetworkManager(context.read()), lazy: true),
|
|
ChangeNotifierProvider(create: (context) => ThemeProvider(), lazy: true),
|
|
ChangeNotifierProvider(
|
|
create: (context) => NotificationStateService(),
|
|
lazy: true,
|
|
),
|
|
ChangeNotifierProvider(
|
|
create: (context) => TabNavigationService(),
|
|
lazy: true,
|
|
),
|
|
];
|
|
}
|
|
|
|
List<SingleChildWidget> get apiClients {
|
|
return [
|
|
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<SingleChildWidget> get repositories {
|
|
return [
|
|
Provider(
|
|
create: (context) => AuthRepository(authService: context.read()),
|
|
lazy: true,
|
|
),
|
|
Provider(
|
|
create:
|
|
(context) => YourTendersRepository(
|
|
yourTendersService: context.read(),
|
|
likedTendersService: context.read(),
|
|
),
|
|
lazy: true,
|
|
),
|
|
Provider(
|
|
create:
|
|
(context) => HomeRepository(
|
|
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,
|
|
),
|
|
];
|
|
}
|
|
|
|
List<SingleChildWidget> get services {
|
|
return [
|
|
Provider(
|
|
create:
|
|
(context) => NotificationCheckService(
|
|
homeRepository: context.read(),
|
|
notificationStateService: context.read(),
|
|
),
|
|
lazy: true,
|
|
),
|
|
];
|
|
}
|
|
|
|
/// Auth ViewModel - only essential ViewModel loaded at startup
|
|
List<SingleChildWidget> get authProvider {
|
|
return [
|
|
ChangeNotifierProvider(
|
|
create: (context) {
|
|
final vm = AuthViewModel(authRepository: context.read());
|
|
// Hydrate stored user/customer so userRole is available on hot reloads
|
|
vm.hydrateFromStorage();
|
|
return vm;
|
|
},
|
|
lazy: false, // Load immediately for auth state checks
|
|
),
|
|
|
|
ChangeNotifierProvider(
|
|
create: (context) => FinalCompletionOfDocumentsViewModel(),
|
|
lazy: false, // Load immediately for auth state checks
|
|
),
|
|
];
|
|
}
|