controller.dart 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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/network_connectivity.dart';
  6. import 'package:vitalapp/helper/goto_helper.dart';
  7. import 'package:vitalapp/managers/interfaces/account.dart';
  8. import 'package:vitalapp/pages/controllers/home_nav_mixin.dart';
  9. import 'package:vitalapp/pages/home/models/menu.dart';
  10. import 'package:vitalapp/store/store.dart';
  11. import 'state.dart';
  12. class HomeController extends FControllerBase with HomeNavMixin {
  13. static Widget _buildImgIcon(String assetName) {
  14. return ClipRect(
  15. child: SizedBox(
  16. height: 34,
  17. child: Image.asset(
  18. "assets/images/home/$assetName",
  19. width: 46,
  20. height: 46,
  21. fit: BoxFit.fitWidth,
  22. ),
  23. ),
  24. );
  25. }
  26. final state = HomeState();
  27. /// 当前选中路由
  28. int currentIndex = -1;
  29. List<HomeMenuItem> homeMenuItems = [
  30. HomeMenuItem(
  31. key: 'ZY',
  32. title: "主页",
  33. routeName: "/dashboard",
  34. iconData: Icons.home_outlined,
  35. ),
  36. HomeMenuItem(
  37. key: 'XJDA',
  38. title: "新建档案",
  39. routeName: "/patient/create",
  40. iconWidget: _buildImgIcon('healthRecord.png'),
  41. ),
  42. HomeMenuItem(
  43. key: 'JKDA',
  44. title: "健康档案",
  45. routeName: "/patient/detail",
  46. iconWidget: _buildImgIcon('healthRecord.png'),
  47. ),
  48. HomeMenuItem(
  49. key: 'JMLB',
  50. title: "居民列表",
  51. routeName: "/patient/list",
  52. iconWidget: _buildImgIcon('healthRecord.png'),
  53. ),
  54. HomeMenuItem(
  55. key: 'YSQY',
  56. title: "医生签约",
  57. routeName: "/contract/package_list",
  58. iconWidget: _buildImgIcon('doctorSigning.png'),
  59. ),
  60. HomeMenuItem(
  61. key: 'JKTJ',
  62. title: "健康体检",
  63. routeName: "/check/form",
  64. iconWidget: _buildImgIcon('healthCheckup.png'),
  65. ),
  66. HomeMenuItem(
  67. key: 'RQSF',
  68. title: "人群随访",
  69. routeName: "/check/follow_up",
  70. iconWidget: _buildImgIcon('populationFollowUp.png'),
  71. ),
  72. HomeMenuItem(
  73. key: 'JKJC',
  74. title: "健康检测",
  75. routeName: "/medical",
  76. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  77. isSelected: true,
  78. ),
  79. HomeMenuItem(
  80. key: 'SZZX',
  81. title: "设置中心",
  82. routeName: "/settings",
  83. iconData: Icons.settings,
  84. ),
  85. ];
  86. /// 登出
  87. Future<void> logOut() async {
  88. final result = await Get.find<IAccountManager>().logout();
  89. if (result) {
  90. Get.offAllNamed("/login");
  91. }
  92. }
  93. Future<void> changeMedical() async {
  94. try {
  95. Get.offAllNamed("/medical", id: 1001);
  96. } catch (e) {}
  97. }
  98. void onlineChanged(_, bool isOnline) {
  99. state.isOnline = isOnline;
  100. }
  101. @override
  102. void onInit() {
  103. initMenus();
  104. initAddListener();
  105. super.onInit();
  106. }
  107. @override
  108. void dispose() {
  109. netCheckerRemoveListener();
  110. super.dispose();
  111. }
  112. initAddListener() {
  113. netChecker.onlineChangedEvent.addListener(onlineChanged);
  114. }
  115. netCheckerRemoveListener() {
  116. netChecker.onlineChangedEvent.removeListener(onlineChanged);
  117. }
  118. /// 切换活动菜单
  119. void switchActiveMenu(HomeMenuItem data) async {
  120. if (state.currentSelectMenu != data.routeName) {
  121. switchNavByName(data.routeName);
  122. }
  123. }
  124. void switchNavByName(String name) {
  125. state.currentSelectMenu = name;
  126. NavGotoHelper.goto(name);
  127. }
  128. void initMenus() {
  129. state.menuItems = [
  130. // HomeMenuItem(
  131. // key: 'ZY',
  132. // title: "主页",
  133. // routeName: "/dashboard",
  134. // iconData: Icons.home_outlined,
  135. // isSelected: true,
  136. // ),
  137. HomeMenuItem(
  138. key: 'XJDA',
  139. title: "新建档案",
  140. routeName: "/patient/create",
  141. iconWidget: _buildImgIcon('healthRecord.png'),
  142. ),
  143. HomeMenuItem(
  144. key: 'JMLB',
  145. title: "居民列表",
  146. routeName: "/patient/list",
  147. iconWidget: _buildImgIcon('healthRecord.png'),
  148. ),
  149. HomeMenuItem(
  150. key: 'JKJC',
  151. title: "健康检测",
  152. routeName: "/medical",
  153. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  154. isSelected: true,
  155. ),
  156. HomeMenuItem(
  157. key: 'SZZX',
  158. title: "设置中心",
  159. routeName: "/settings",
  160. iconData: Icons.settings,
  161. ),
  162. ];
  163. }
  164. void updateMenus() {
  165. if (Store.user.menuPermissionList?.isNotEmpty ?? false) {
  166. List<HomeMenuItem> menuItems = [];
  167. Store.user.menuPermissionList?.forEach((element) {
  168. for (var item in homeMenuItems) {
  169. if (item.key == element.code) {
  170. menuItems.add(item);
  171. }
  172. }
  173. });
  174. state.menuItems = menuItems;
  175. } else {
  176. // state.menuItems = homeMenuItems;
  177. state.menuItems = [
  178. // HomeMenuItem(
  179. // key: 'ZY',
  180. // title: "主页",
  181. // routeName: "/dashboard",
  182. // iconData: Icons.home_outlined,
  183. // isSelected: true,
  184. // ),
  185. HomeMenuItem(
  186. key: 'XJDA',
  187. title: "新建档案",
  188. routeName: "/patient/create",
  189. iconWidget: _buildImgIcon('healthRecord.png'),
  190. ),
  191. HomeMenuItem(
  192. key: 'JMLB',
  193. title: "居民列表",
  194. routeName: "/patient/list",
  195. iconWidget: _buildImgIcon('healthRecord.png'),
  196. ),
  197. HomeMenuItem(
  198. key: 'JKDA',
  199. title: "健康档案",
  200. routeName: "/patient/detail",
  201. iconWidget: _buildImgIcon('healthRecord.png'),
  202. ),
  203. HomeMenuItem(
  204. key: 'JKJC',
  205. title: "健康检测",
  206. routeName: "/medical",
  207. iconWidget: _buildImgIcon('diagnosisDisplay.png'),
  208. ),
  209. HomeMenuItem(
  210. key: 'SZZX',
  211. title: "设置中心",
  212. routeName: "/settings",
  213. iconData: Icons.settings,
  214. ),
  215. ];
  216. }
  217. }
  218. }