controller.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vnoteapp/architecture/defines.dart';
  5. import 'package:vnoteapp/architecture/utils/common_util.dart';
  6. import 'package:vnoteapp/managers/interfaces/account.dart';
  7. import 'package:vnoteapp/pages/controllers/home_nav_mixin.dart';
  8. import 'package:vnoteapp/pages/home/models/menu.dart';
  9. import 'state.dart';
  10. class HomeController extends FControllerBase with HomeNavMixin {
  11. final state = HomeState();
  12. /// 当前选中路由
  13. int currentIndex = -1;
  14. /// 登出
  15. Future<void> logOut() async {
  16. final result = await Get.find<IAccountManager>().logout();
  17. if (result) {
  18. Get.offAllNamed("/login");
  19. }
  20. }
  21. @override
  22. void onInit() {
  23. initMenus();
  24. super.onInit();
  25. }
  26. /// 切换活动菜单
  27. void switchActiveMenu(HomeMenuItem data) {
  28. CommonUtil.throttle(() {
  29. switchNavByName(data.routeName);
  30. });
  31. // final index =
  32. // state.menuItems.indexWhere((e) => e.routeName == data.routeName);
  33. // if (index < 0) return;
  34. // final array = state.menuItems;
  35. // array.firstWhereOrNull((e) => e.isSelected)?.isSelected = false;
  36. // array[index].isSelected = true;
  37. // state.menuItems = array;
  38. // Get.offAllNamed(data.routeName, id: 1001);
  39. }
  40. void switchNavByName(String name) {
  41. final index = state.menuItems.indexWhere((e) => e.routeName == name);
  42. if (index < 0 || currentIndex == index) return;
  43. final array = state.menuItems;
  44. array.firstWhereOrNull((e) => e.isSelected)?.isSelected = false;
  45. array[index].isSelected = true;
  46. state.menuItems = array;
  47. currentIndex = index;
  48. Get.offAllNamed(name, id: 1001);
  49. }
  50. void initMenus() {
  51. state.menuItems = [
  52. HomeMenuItem(
  53. title: "主页",
  54. routeName: "/dashboard",
  55. iconData: Icons.home_outlined,
  56. isSelected: true,
  57. ),
  58. HomeMenuItem(
  59. title: "健康检测",
  60. routeName: "/medical",
  61. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  62. ),
  63. HomeMenuItem(
  64. title: "设置中心",
  65. routeName: "/settings",
  66. iconData: Icons.settings,
  67. ),
  68. ];
  69. }
  70. void updateMenus() {
  71. state.menuItems = [
  72. HomeMenuItem(
  73. title: "主页",
  74. routeName: "/dashboard",
  75. iconData: Icons.home_outlined,
  76. isSelected: true,
  77. ),
  78. HomeMenuItem(
  79. title: "健康档案",
  80. routeName: "/patient/detail",
  81. iconWidget: _buildImgIcon('healthRecord.png'),
  82. ),
  83. HomeMenuItem(
  84. title: "医生签约",
  85. routeName: "/contract/package_list",
  86. iconWidget: _buildImgIcon('doctorSigning.png'),
  87. ),
  88. HomeMenuItem(
  89. title: "健康体检",
  90. routeName: "/check/form",
  91. iconWidget: _buildImgIcon('healthCheckup.png'),
  92. ),
  93. HomeMenuItem(
  94. title: "人群随访",
  95. routeName: "/check/follow_up",
  96. iconWidget: _buildImgIcon('populationFollowUp.png'),
  97. ),
  98. HomeMenuItem(
  99. title: "健康检测",
  100. routeName: "/medical",
  101. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  102. ),
  103. HomeMenuItem(
  104. title: "设置中心",
  105. routeName: "/settings",
  106. iconData: Icons.settings,
  107. ),
  108. ];
  109. }
  110. Widget _buildImgIcon(String assetName) {
  111. return ClipRect(
  112. child: SizedBox(
  113. height: 34,
  114. child: Image.asset(
  115. "assets/images/home/$assetName",
  116. width: 46,
  117. height: 46,
  118. fit: BoxFit.fitWidth,
  119. ),
  120. ),
  121. );
  122. }
  123. }