home_page.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import 'package:chicken_farm/components/vb_app_bar.dart';
  2. import 'package:chicken_farm/core/config/app_config.dart';
  3. import 'package:chicken_farm/core/services/breeding_data_service.dart';
  4. import 'package:chicken_farm/core/services/offline_storage_service.dart';
  5. import 'package:chicken_farm/core/utils/logger.dart';
  6. import 'package:chicken_farm/core/utils/service_checker.dart';
  7. import 'package:chicken_farm/core/utils/toast.dart';
  8. import 'package:chicken_farm/pages/home/menu_buttons.dart';
  9. import 'package:chicken_farm/routes/app_routes.dart';
  10. import 'package:chicken_farm/stores/auth_store.dart';
  11. import 'package:flutter/material.dart';
  12. import 'package:flutter_riverpod/flutter_riverpod.dart';
  13. import 'package:go_router/go_router.dart';
  14. import 'profile.dart';
  15. class HomePage extends ConsumerStatefulWidget {
  16. const HomePage({super.key});
  17. @override
  18. ConsumerState<HomePage> createState() => _HomePageState();
  19. }
  20. class _HomePageState extends ConsumerState<HomePage> {
  21. int _selectedIndex = 0;
  22. bool _needCheck = true;
  23. static const List<String> _titles = ['功能菜单', '个人中心'];
  24. @override
  25. initState() {
  26. super.initState();
  27. _checkAndNavigateToUpload();
  28. }
  29. @override
  30. Widget build(BuildContext context) {
  31. final authState = ref.watch(authStoreProvider);
  32. return Scaffold(
  33. appBar: VberAppBar(
  34. title: _titles[_selectedIndex],
  35. showLeftButton: false, // 主页不显示返回按钮
  36. ),
  37. body: _buildBody(_selectedIndex, authState),
  38. bottomNavigationBar: BottomNavigationBar(
  39. type: BottomNavigationBarType.fixed,
  40. currentIndex: _selectedIndex,
  41. onTap: (index) {
  42. setState(() {
  43. _selectedIndex = index;
  44. });
  45. },
  46. items: const [
  47. BottomNavigationBarItem(
  48. icon: Icon(Icons.home_outlined),
  49. activeIcon: Icon(Icons.home),
  50. label: '功能菜单',
  51. ),
  52. BottomNavigationBarItem(
  53. icon: Icon(Icons.person_outline),
  54. activeIcon: Icon(Icons.person),
  55. label: '个人中心',
  56. ),
  57. ],
  58. ),
  59. );
  60. }
  61. Widget _buildBody(int selectedIndex, AuthInfo authState) {
  62. switch (selectedIndex) {
  63. case 0:
  64. return const Center(child: MenuButtons());
  65. case 1:
  66. return const ProfilePage();
  67. default:
  68. return const Center(child: Text('页面不存在'));
  69. }
  70. }
  71. // 检查是否有待上传数据,如果有则导航到上传页面
  72. Future<void> _checkAndNavigateToUpload() async {
  73. if (!_needCheck || AppConfig.isOffline) {
  74. return;
  75. }
  76. _needCheck = false;
  77. final isConnected = await ServiceChecker().checkService();
  78. if (isConnected) {
  79. logger.i('已连接系统,开始检查待上传数据...');
  80. final count = await BreedingDataService().queryTotalCount();
  81. if (count > 0) {
  82. logger.i('有待上传数据[$count]');
  83. WidgetsBinding.instance.addPostFrameCallback((_) {
  84. ToastUtil.confirm("有[$count]条数据需要上传,现在立即上传?", () async {
  85. final result = await context.pushNamed(AppRouteNames.upload);
  86. if (result == 1) {
  87. ToastUtil.success('数据上传完成');
  88. } else if (result == 0) {
  89. ToastUtil.warning('已取消上传');
  90. } else if (result == 2) {
  91. ToastUtil.info('已在后台上传数据');
  92. } else if (result == -1) {
  93. ToastUtil.error('数据上传失败');
  94. }
  95. });
  96. });
  97. }
  98. }
  99. }
  100. }