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:
amirrezaghabeli
2025-10-06 14:12:40 +03:30
parent 645247183b
commit b43ebf885b
24 changed files with 839 additions and 218 deletions
@@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../view_models/final_completion_of_documents_view_model.dart';
/// Lazy FinalCompletionOfDocumentsViewModel provider
/// Wraps screens that need FinalCompletionOfDocumentsViewModel
Widget finalCompletionProvider({required Widget child}) {
return ChangeNotifierProvider(
create: (context) => FinalCompletionOfDocumentsViewModel(),
child: child,
);
}
+19
View File
@@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/home_repository.dart';
import '../../data/services/notification_state_service.dart';
import '../../view_models/home_view_model.dart';
/// Lazy HomeViewModel provider
/// Wraps screens that need HomeViewModel
Widget homeProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) => HomeViewModel(
homeRepository: context.read<HomeRepository>(),
notificationStateService: context.read<NotificationStateService>(),
),
child: child,
);
}
@@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/liked_tenders_repository.dart';
import '../../data/repositories/tenders_repository.dart';
import '../../view_models/liked_tenders_view_model.dart';
/// Lazy LikedTendersViewModel provider
/// Wraps screens that need LikedTendersViewModel
Widget likedTendersProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) => LikedTendersViewModel(
likedTendersRepository: context.read<LikedTendersRepository>(),
tendersRepository: context.read<TendersRepository>(),
),
child: child,
);
}
@@ -0,0 +1,21 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/notification_repository.dart';
import '../../data/services/notification_check_service.dart';
import '../../data/services/notification_state_service.dart';
import '../../view_models/notification_view_model.dart';
/// Lazy NotificationViewModel provider
/// Wraps screens that need NotificationViewModel
Widget notificationProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) => NotificationViewModel(
notificationsRepository: context.read<NotificationsRepository>(),
notificationStateService: context.read<NotificationStateService>(),
notificationCheckService: context.read<NotificationCheckService>(),
),
child: child,
);
}
+19
View File
@@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/auth_repository.dart';
import '../../data/repositories/profile_repository.dart';
import '../../view_models/profile_view_model.dart';
/// Lazy ProfileViewModel provider
/// Wraps screens that need ProfileViewModel
Widget profileProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) => ProfileViewModel(
profileRepository: context.read<ProfileRepository>(),
authRepository: context.read<AuthRepository>(),
),
child: child,
);
}
@@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/tender_detail_repository.dart';
import '../../data/repositories/tenders_repository.dart';
import '../../view_models/tender_detail_view_model.dart';
/// Lazy TenderDetailViewModel provider
/// Wraps screens that need TenderDetailViewModel
Widget tenderDetailProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) => TenderDetailViewModel(
tenderDetailRepository: context.read<TenderDetailRepository>(),
tendersRepository: context.read<TendersRepository>(),
),
child: child,
);
}
+17
View File
@@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/tenders_repository.dart';
import '../../view_models/tenders_view_model.dart';
/// Lazy TendersViewModel provider
/// Wraps screens that need TendersViewModel
Widget tendersProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) => TendersViewModel(
tendersRepository: context.read<TendersRepository>(),
),
child: child,
);
}
@@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../data/repositories/your_tenders_repository.dart';
import '../../view_models/your_tenders_view_model.dart';
/// Lazy YourTendersViewModel provider
/// Wraps screens that need YourTendersViewModel
Widget yourTendersProvider({required Widget child}) {
return ChangeNotifierProvider(
create:
(context) => YourTendersViewModel(
yourTendersRepository: context.read<YourTendersRepository>(),
),
child: child,
);
}