home_page.dart 3.5 KB

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