data_detail_controller.dart 3.1 KB

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