main_page.dart 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import 'package:cs_resources/theme/app_colors_theme.dart';
  2. import 'package:flutter/src/widgets/framework.dart';
  3. import 'package:flutter_hooks/flutter_hooks.dart';
  4. import 'package:hooks_riverpod/hooks_riverpod.dart';
  5. import 'package:auto_route/auto_route.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:plugin_basic/constants/app_constant.dart';
  8. import 'package:shared/utils/device_utils.dart';
  9. import 'package:shared/utils/event_bus.dart';
  10. import 'package:shared/utils/log_utils.dart';
  11. import '../../router/page/main_page_router.dart';
  12. import 'package:router/ext/auto_router_extensions.dart';
  13. import 'main_view_model.dart';
  14. @RoutePage()
  15. class MainPage extends HookConsumerWidget {
  16. const MainPage({super.key});
  17. //启动当前页面
  18. static void startInstance({BuildContext? context}) {
  19. if (context != null) {
  20. context.router.popUntilRoot();
  21. if (context.router.current.name != 'MainPageRoute') {
  22. context.router.replace(const MainPageRoute());
  23. }
  24. } else {
  25. appRouter.popUntilRoot();
  26. if (appRouter.current.name != 'MainPageRoute') {
  27. appRouter.replace(const MainPageRoute());
  28. }
  29. }
  30. }
  31. @override
  32. Widget build(BuildContext context, WidgetRef ref) {
  33. final viewModel = ref.watch(mainViewModelProvider.notifier);
  34. final state = ref.watch(mainViewModelProvider);
  35. return AutoTabsScaffold(
  36. routes: const [
  37. HomePageRoute(),
  38. VisitorPageRoute(),
  39. FeedbackPageRoute(),
  40. MePageRoute(),
  41. ],
  42. transitionBuilder: (context, child, animation) => FadeTransition(
  43. opacity: animation,
  44. child: child,
  45. ),
  46. bottomNavigationBuilder: (context, tabsRouter) {
  47. return BottomNavigationBar(
  48. elevation: 10,
  49. backgroundColor: context.appColors.backgroundWhite,
  50. type: BottomNavigationBarType.fixed,
  51. currentIndex: tabsRouter.activeIndex,
  52. onTap: tabsRouter.setActiveIndex,
  53. unselectedLabelStyle: const TextStyle(color: AppColorsTheme.color666666, fontWeight: FontWeight.w400),
  54. selectedLabelStyle: TextStyle(color: context.appColors.textPrimary, fontWeight: FontWeight.w400),
  55. unselectedFontSize: 12,
  56. selectedFontSize: 12,
  57. items: () {
  58. var items = <BottomNavigationBarItem>[];
  59. state.bottomMap.forEach((k, v) {
  60. items.add(BottomNavigationBarItem(
  61. label: k,
  62. icon: v[0],
  63. activeIcon: DeviceUtils.isDarkMode(context) ? v[2] : v[1],
  64. ));
  65. });
  66. return items;
  67. }(),
  68. );
  69. },
  70. );
  71. }
  72. }