data_detail_controller.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import 'dart:async';
  2. import 'package:application/logger.dart';
  3. import 'package:common_pub/model/history_detail.dart';
  4. import 'package:application/service/api.dart';
  5. import 'package:application/service/map_watch.dart';
  6. import 'package:common_pub/ui/history_detail/trace_bar.dart';
  7. import 'package:common_pub/ui/map_view/view_map_trace.dart';
  8. import 'package:fixnum/fixnum.dart';
  9. import 'package:get/get.dart';
  10. import '../home_controller.dart';
  11. export 'package:application/service/map_watch.dart';
  12. class UserInfo {
  13. var data = ToHisUserBasic();
  14. final isExpand = false.obs;
  15. }
  16. typedef DetailSimple = ToHisUserInfo;
  17. class Detail {
  18. var data = ToGameDetailReply();
  19. }
  20. class DataDetailController extends GetxController {
  21. HomeController get _home => Get.find();
  22. MapWatchService? get mapWatch => MapWatchService.instance;
  23. final userMap = <int, UserInfo>{}.obs;
  24. Iterable<UserInfo> get userList => userMap.values;
  25. final selectedDetailSimple = DetailSimple().obs;
  26. final selectedUserId = (-9).obs;
  27. final Rx<HistoryDetail?> selectedDetail = Rx(null);
  28. final stub = ApiService.to.stub;
  29. final showDetail = false.obs;
  30. final isCPExpand = true.obs;
  31. final traceBarController = TraceBarController();
  32. final viewMapTraceController = ViewMapTraceController();
  33. StreamSubscription<int?>? _subscriptionTrace;
  34. @override
  35. void onInit() {
  36. super.onInit();
  37. _subscriptionTrace = traceBarController.cursorState.listen((p0) {
  38. viewMapTraceController.cursor = p0;
  39. });
  40. workFlush();
  41. }
  42. Future<void> workFlush() async {
  43. while (!isClosed) {
  44. await flushData();
  45. await 1.seconds.delay();
  46. }
  47. }
  48. Future<void> flushData() async {
  49. final map = mapWatch;
  50. if (map == null) {
  51. return;
  52. }
  53. try {
  54. final r = await ApiService.to.stub
  55. .toHistoryUserListQuery(IdRequest(id: map.id));
  56. for (final one in r.list) {
  57. final updated = userMap[one.oId] ?? UserInfo();
  58. updated.data = one;
  59. userMap[one.oId] = updated;
  60. }
  61. } catch (e) {
  62. error(e);
  63. }
  64. }
  65. void selectDetail(DetailSimple d, UserInfo user) async {
  66. selectedDetailSimple.value = d;
  67. selectedUserId.value = user.data.oId;
  68. final detail = HistoryDetail(await ApiService.to.stub
  69. .toHistoryGameDetail(IdRequest(id: Int64(d.gameId))));
  70. await detail.init(mapWatch!.plugMap.gameMap);
  71. final old = selectedDetail.value;
  72. selectedDetail.value = detail;
  73. if (old != null) {
  74. old.dispose();
  75. }
  76. }
  77. @override
  78. void onClose() {
  79. super.onClose();
  80. _subscriptionTrace?.cancel();
  81. }
  82. }