menu_buttons.dart 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'package:chicken_farm/stores/auth_store.dart';
  2. import 'package:chicken_farm/stores/menu_store.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_riverpod/flutter_riverpod.dart';
  5. import 'package:go_router/go_router.dart';
  6. class MenuButtons extends ConsumerWidget {
  7. const MenuButtons({super.key});
  8. @override
  9. Widget build(BuildContext context, WidgetRef ref) {
  10. final authState = ref.watch(authStoreProvider);
  11. final authStore = ref.watch(authStoreProvider.notifier);
  12. final isSuperAdmin = authStore.isSuperAdmin();
  13. // 根据权限过滤菜单项
  14. final visibleMenuItems = MenuStore.menuItems.where((item) {
  15. if (isSuperAdmin) return true;
  16. if (item.permission == null) return true;
  17. return authState.permissions?.contains(item.permission) ?? false;
  18. }).toList();
  19. final screenWidth = MediaQuery.of(context).size.width;
  20. final buttonWidth = screenWidth * 0.8;
  21. return SingleChildScrollView(
  22. child: Center(
  23. child: Column(
  24. mainAxisAlignment: MainAxisAlignment.center,
  25. children: [
  26. for (var i = 0; i < visibleMenuItems.length; i++) ...[
  27. SizedBox(
  28. width: buttonWidth,
  29. height: 50,
  30. child: ElevatedButton.icon(
  31. onPressed: () {
  32. // 立即给予按钮按下反馈
  33. Future.delayed(const Duration(milliseconds: 100), () {
  34. // 检查context是否仍然有效
  35. if (context.mounted) {
  36. context.pushNamed(visibleMenuItems[i].routeName);
  37. }
  38. });
  39. },
  40. icon: visibleMenuItems[i].icon != null
  41. ? Icon(visibleMenuItems[i].icon)
  42. : const SizedBox.shrink(),
  43. label: Text(visibleMenuItems[i].name),
  44. ),
  45. ),
  46. if (i < visibleMenuItems.length - 1) const SizedBox(height: 20),
  47. ],
  48. ],
  49. ),
  50. ),
  51. );
  52. }
  53. }