controller.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vitalapp/architecture/defines.dart';
  5. import 'package:vitalapp/architecture/utils/common_util.dart';
  6. import 'package:vitalapp/managers/interfaces/account.dart';
  7. import 'package:vitalapp/pages/controllers/home_nav_mixin.dart';
  8. import 'package:vitalapp/pages/home/models/menu.dart';
  9. import 'package:vitalapp/store/store.dart';
  10. import 'state.dart';
  11. class HomeController extends FControllerBase with HomeNavMixin {
  12. static Widget _buildImgIcon(String assetName) {
  13. return ClipRect(
  14. child: SizedBox(
  15. height: 34,
  16. child: Image.asset(
  17. "assets/images/home/$assetName",
  18. width: 46,
  19. height: 46,
  20. fit: BoxFit.fitWidth,
  21. ),
  22. ),
  23. );
  24. }
  25. final state = HomeState();
  26. /// 当前选中路由
  27. int currentIndex = -1;
  28. List<HomeMenuItem> homeMenuItems = [
  29. HomeMenuItem(
  30. key: 'ZY',
  31. title: "主页",
  32. routeName: "/dashboard",
  33. iconData: Icons.home_outlined,
  34. // isSelected: true,
  35. ),
  36. HomeMenuItem(
  37. key: 'JKDA',
  38. title: "健康档案",
  39. routeName: "/patient/detail",
  40. iconWidget: _buildImgIcon('healthRecord.png'),
  41. ),
  42. HomeMenuItem(
  43. key: 'YSQY',
  44. title: "医生签约",
  45. routeName: "/contract/package_list",
  46. iconWidget: _buildImgIcon('doctorSigning.png'),
  47. ),
  48. HomeMenuItem(
  49. key: 'JKTJ',
  50. title: "健康体检",
  51. routeName: "/check/form",
  52. iconWidget: _buildImgIcon('healthCheckup.png'),
  53. ),
  54. HomeMenuItem(
  55. key: 'RQSF',
  56. title: "人群随访",
  57. routeName: "/check/follow_up",
  58. iconWidget: _buildImgIcon('populationFollowUp.png'),
  59. ),
  60. HomeMenuItem(
  61. key: 'JKJC',
  62. title: "健康检测",
  63. routeName: "/medical",
  64. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  65. isSelected: true,
  66. ),
  67. HomeMenuItem(
  68. key: 'SZZX',
  69. title: "设置中心",
  70. routeName: "/settings",
  71. iconData: Icons.settings,
  72. ),
  73. ];
  74. /// 登出
  75. Future<void> logOut() async {
  76. final result = await Get.find<IAccountManager>().logout();
  77. if (result) {
  78. Get.offAllNamed("/login");
  79. }
  80. }
  81. Future<void> changeMedical() async {
  82. try {
  83. Get.offAllNamed("/medical", id: 1001);
  84. } catch (e) {}
  85. }
  86. @override
  87. void onInit() {
  88. initMenus();
  89. super.onInit();
  90. }
  91. /// 切换活动菜单
  92. void switchActiveMenu(HomeMenuItem data) {
  93. CommonUtil.throttle(() {
  94. switchNavByName(data.routeName);
  95. });
  96. // final index =
  97. // state.menuItems.indexWhere((e) => e.routeName == data.routeName);
  98. // if (index < 0) return;
  99. // final array = state.menuItems;
  100. // array.firstWhereOrNull((e) => e.isSelected)?.isSelected = false;
  101. // array[index].isSelected = true;
  102. // state.menuItems = array;
  103. // Get.offAllNamed(data.routeName, id: 1001);
  104. }
  105. void switchNavByName(String name) {
  106. final index = state.menuItems.indexWhere((e) => e.routeName == name);
  107. final array = state.menuItems;
  108. array.firstWhereOrNull((e) => e.isSelected)?.isSelected = false;
  109. array[index].isSelected = true;
  110. if (index < 0 || currentIndex == index) return;
  111. state.menuItems = array;
  112. currentIndex = index;
  113. Get.offAllNamed(name, id: 1001);
  114. }
  115. void initMenus() {
  116. state.menuItems = [
  117. // HomeMenuItem(
  118. // key: 'ZY',
  119. // title: "主页",
  120. // routeName: "/dashboard",
  121. // iconData: Icons.home_outlined,
  122. // isSelected: true,
  123. // ),
  124. HomeMenuItem(
  125. key: 'JKJC',
  126. title: "健康检测",
  127. routeName: "/medical",
  128. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  129. isSelected: true,
  130. ),
  131. HomeMenuItem(
  132. key: 'SZZX',
  133. title: "设置中心",
  134. routeName: "/settings",
  135. iconData: Icons.settings,
  136. ),
  137. ];
  138. }
  139. /// TODO 需要变更
  140. void updateMenus() {
  141. if (Store.user.menuPermissionList?.isNotEmpty ?? false) {
  142. List<HomeMenuItem> menuItems = [];
  143. Store.user.menuPermissionList?.forEach((element) {
  144. for (var item in homeMenuItems) {
  145. if (item.key == element.code) {
  146. menuItems.add(item);
  147. }
  148. }
  149. });
  150. state.menuItems = menuItems;
  151. } else {
  152. // state.menuItems = homeMenuItems;
  153. state.menuItems = [
  154. // HomeMenuItem(
  155. // key: 'ZY',
  156. // title: "主页",
  157. // routeName: "/dashboard",
  158. // iconData: Icons.home_outlined,
  159. // isSelected: true,
  160. // ),
  161. HomeMenuItem(
  162. key: 'JKJC',
  163. title: "健康检测",
  164. routeName: "/medical",
  165. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  166. ),
  167. HomeMenuItem(
  168. key: 'SZZX',
  169. title: "设置中心",
  170. routeName: "/settings",
  171. iconData: Icons.settings,
  172. ),
  173. ];
  174. }
  175. }
  176. }