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
@@ -3,16 +3,15 @@ import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/services/tab_navigation_service.dart';
import 'package:tm_app/core/theme/colors.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/tenders_view_model.dart';
import 'package:tm_app/data/services/notification_state_service.dart';
import 'package:tm_app/views/home/strings/home_strings.dart';
import 'package:tm_app/views/profile/strings/profile_strings.dart';
import 'package:tm_app/views/tenders/strings/tenders_strings.dart';
import '../../core/routes/app_routes.dart';
import '../../view_models/notification_view_model.dart';
class TabletNavigationWidget extends StatelessWidget {
const TabletNavigationWidget({required this.currentIndex, super.key});
@@ -41,7 +40,7 @@ class TabletNavigationWidget extends StatelessWidget {
context,
() => const HomeRouteData().go(context),
);
context.read<HomeViewModel>().init();
context.read<TabNavigationService>().onTabSelected(0);
}
},
iconPath: AssetsManager.home,
@@ -60,7 +59,7 @@ class TabletNavigationWidget extends StatelessWidget {
context,
() => const TendersRouteData().go(context),
);
context.read<TendersViewModel>().init(context);
context.read<TabNavigationService>().onTabSelected(1);
}
},
iconPath: AssetsManager.tenders,
@@ -94,7 +93,7 @@ class TabletNavigationWidget extends StatelessWidget {
context,
() => const NotificationRouteData().go(context),
);
context.read<NotificationViewModel>().init();
context.read<TabNavigationService>().onTabSelected(3);
}
},
iconPath: AssetsManager.notify,
@@ -131,7 +130,8 @@ class TabletNavigationWidget extends StatelessWidget {
required String iconPath,
required String activeIconPath,
}) {
final hasUnread = context.watch<HomeViewModel>().hasUnreadNotification;
final hasUnread =
context.watch<NotificationStateService>().hasUnreadNotification;
return InkWell(
onTap: onTap,