data_detail_controller.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. final selectedLoading = false.obs;
  35. @override
  36. void onInit() {
  37. super.onInit();
  38. _subscriptionTrace = traceBarController.cursorState.listen((p0) {
  39. viewMapTraceController.cursor = p0;
  40. });
  41. workFlush();
  42. }
  43. Future<void> workFlush() async {
  44. while (!isClosed) {
  45. await flushData();
  46. await 1.seconds.delay();
  47. }
  48. }
  49. Future<void> flushData() async {
  50. final map = mapWatch;
  51. if (map == null) {
  52. return;
  53. }
  54. try {
  55. final r = await ApiService.to.stub
  56. .toHistoryUserListQuery(IdRequest(id: map.id));
  57. for (final one in r.list) {
  58. final updated = userMap[one.oId] ?? UserInfo();
  59. updated.data = one;
  60. userMap[one.oId] = updated;
  61. }
  62. } catch (e) {
  63. error(e);
  64. }
  65. }
  66. void selectDetail(DetailSimple d, UserInfo user) async {
  67. selectedDetailSimple.value = d;
  68. selectedUserId.value = user.data.oId;
  69. selectedLoading.value = true;
  70. try{
  71. final detail = HistoryDetail(await ApiService.to.stub
  72. .toHistoryGameDetail(IdRequest(id: Int64(d.gameId))));
  73. await detail.init(mapWatch!.plugMap.gameMap);
  74. final old = selectedDetail.value;
  75. selectedDetail.value = detail;
  76. debug('select: ${detail.data.gameId}');
  77. if (old != null) {
  78. old.dispose();
  79. }
  80. }finally{
  81. selectedLoading.value = false;
  82. }
  83. }
  84. @override
  85. void onClose() {
  86. super.onClose();
  87. _subscriptionTrace?.cancel();
  88. }
  89. }