home_page.dart 3.6 KB

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