main_page.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. context.router.replace(const MainPageRoute());
  22. } else {
  23. appRouter.popUntilRoot();
  24. appRouter.replace(const MainPageRoute());
  25. }
  26. }
  27. @override
  28. Widget build(BuildContext context, WidgetRef ref) {
  29. final viewModel = ref.watch(mainViewModelProvider.notifier);
  30. final state = ref.watch(mainViewModelProvider);
  31. return AutoTabsScaffold(
  32. routes: const [
  33. HomePageRoute(),
  34. VisitorPageRoute(),
  35. FeedbackPageRoute(),
  36. MePageRoute(),
  37. ],
  38. transitionBuilder: (context, child, animation) => FadeTransition(
  39. opacity: animation,
  40. child: child,
  41. ),
  42. bottomNavigationBuilder: (context, tabsRouter) {
  43. return BottomNavigationBar(
  44. elevation: 10,
  45. backgroundColor: context.appColors.backgroundWhite,
  46. type: BottomNavigationBarType.fixed,
  47. currentIndex: tabsRouter.activeIndex,
  48. onTap: tabsRouter.setActiveIndex,
  49. unselectedLabelStyle: const TextStyle(color: AppColorsTheme.color666666, fontWeight: FontWeight.w400),
  50. selectedLabelStyle: TextStyle(color: context.appColors.textPrimary, fontWeight: FontWeight.w400),
  51. unselectedFontSize: 12,
  52. selectedFontSize: 12,
  53. items: () {
  54. var items = <BottomNavigationBarItem>[];
  55. state.bottomMap.forEach((k, v) {
  56. items.add(BottomNavigationBarItem(
  57. label: k,
  58. icon: v[0],
  59. activeIcon: DeviceUtils.isDarkMode(context) ? v[2] : v[1],
  60. ));
  61. });
  62. return items;
  63. }(),
  64. );
  65. },
  66. );
  67. }
  68. }