home.dart 2.1 KB

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