home.dart 2.5 KB

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