home.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'package:app_business/view/home/data_detail.dart';
  2. import 'package:app_business/view/home/event_manage/event_manage_controller.dart';
  3. import 'package:app_business/view/home/personal_rank.dart';
  4. import 'package:app_business/view/home/settings.dart';
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:get/get.dart';
  7. import 'package:track_common/view.dart';
  8. import 'package:track_common/view/home/field_control/field_control_controller.dart';
  9. import 'package:track_common/view/home/map/map_page.dart';
  10. import 'package:track_common/view/home/personal_rank.dart';
  11. import 'event_manage/event_manage.dart';
  12. import 'field_control.dart';
  13. import 'maplist.dart';
  14. class HomeControllerImpl extends HomeController {
  15. @override
  16. int get initTabIdx => 0;
  17. @override
  18. List<HomeTab> get tabs => [
  19. HomeTab(
  20. '地图',
  21. () => _TabBuilder<MapPageController>(
  22. init: () => MapPageControllerImpl(),
  23. builder: (c) {
  24. return const MapPage();
  25. })),
  26. HomeTab('场控', () {
  27. return _TabBuilder<FieldControlController>(
  28. init: () => FieldControlControllerImpl(),
  29. builder: (c) {
  30. return const FieldControlPageImpl();
  31. });
  32. }),
  33. HomeTab(
  34. '赛事管理',
  35. () => _TabBuilder<EventManagerController>(
  36. init: () => EventManagerController(),
  37. builder: (c) {
  38. return const EventManage();
  39. },
  40. )),
  41. HomeTab(
  42. '排名',
  43. () => _TabBuilder<PersonalRankController>(
  44. init: () => PersonalRankControllerImpl(),
  45. builder: (c) {
  46. return const PersonalRankPage();
  47. },
  48. )),
  49. HomeTab(
  50. '数据详情',
  51. () => _TabBuilder<DataDetailController>(
  52. init: () => DataDetailControllerImpl(),
  53. builder: (c) {
  54. return const DataDetailPage();
  55. },
  56. )),
  57. HomeTab('设置', () => const SettingsPage())
  58. ];
  59. }
  60. class _TabBuilder<T> extends StatefulWidget {
  61. const _TabBuilder({required this.init, required this.builder});
  62. final T Function() init;
  63. final Widget Function(BuildContext contest) builder;
  64. @override
  65. State<StatefulWidget> createState() {
  66. return _TabBuilderState<T>();
  67. }
  68. }
  69. class _TabBuilderState<T> extends State<_TabBuilder> {
  70. @override
  71. void dispose() {
  72. super.dispose();
  73. Get.delete<T>();
  74. }
  75. @override
  76. void initState() {
  77. final c = widget.init();
  78. tag = '${identityHashCode(c)}';
  79. Get.put<T>(widget.init());
  80. super.initState();
  81. setState(() {
  82. ok = true;
  83. });
  84. }
  85. late final String tag;
  86. var ok = false;
  87. @override
  88. Widget build(BuildContext context) {
  89. return ok ? widget.builder(context) : const Center();
  90. }
  91. }