| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import 'dart:async';
- import 'dart:math';
- import 'package:application/logger.dart';
- import 'package:common_pub/model/history_detail.dart';
- import 'package:application/service/api.dart';
- import 'package:application/service/map_watch.dart';
- import 'package:common_pub/ui/history_detail/trace_bar.dart';
- import 'package:common_pub/ui/map_view/view_map_cp.dart';
- import 'package:common_pub/ui/map_view/view_map_trace.dart';
- import 'package:fixnum/fixnum.dart';
- import 'package:get/get.dart';
- import '../home_controller.dart';
- export 'package:application/service/map_watch.dart';
- class UserInfo {
- var data = ToHisUserBasic();
- final isExpand = false.obs;
- }
- typedef DetailSimple = ToHisUserInfo;
- class Detail {
- var data = ToGameDetailReply();
- }
- class DataDetailController extends GetxController {
- HomeController get _home => Get.find();
- MapWatchService? get mapWatch => MapWatchService.instance;
- final userMap = <int, UserInfo>{}.obs;
- Iterable<UserInfo> get userList => userMap.values;
- final selectedDetailSimple = DetailSimple().obs;
- final selectedUserId = (-9).obs;
- final Rx<HistoryDetail?> selectedDetail = Rx(null);
- final stub = ApiService.to.stub;
- final showDetail = false.obs;
- final isCPExpand = true.obs;
- final traceBarController = TraceBarController();
- final viewMapTraceController = ViewMapTraceController();
- StreamSubscription<int?>? _subscriptionTrace;
- final selectedLoading = false.obs;
- final viewCPController = ViewMapCPController();
- @override
- void onInit() {
- super.onInit();
- _subscriptionTrace = traceBarController.cursorState.listen((p0) {
- viewMapTraceController.cursor = p0;
- });
- workFlush();
- }
- Future<void> workFlush() async {
- while (!isClosed) {
- await flushData();
- await 1.seconds.delay();
- }
- }
- Future<void> flushData() async {
- final map = mapWatch;
- if (map == null) {
- return;
- }
- try {
- final t = DateTime.now();
- final r = await ApiService.to.stub
- .toHistoryUserListQuery(IdRequest(id: map.id));
- final d = DateTime.now().difference(t);
- // debug('api cost $d');
- for (final one in r.list) {
- final updated = userMap[one.oId] ?? UserInfo();
- updated.data = one;
- userMap[one.oId] = updated;
- }
- } catch (e) {
- error(e);
- }
- }
- void selectDetail(DetailSimple d, UserInfo user) async {
- selectedDetailSimple.value = d;
- selectedUserId.value = user.data.oId;
- selectedLoading.value = true;
- try{
- final t = DateTime.now();
- final detail = HistoryDetail(await ApiService.to.stub
- .toHistoryGameDetail(IdRequest(id: Int64(d.gameId))));
- final cost = DateTime.now().difference(t);
- info("api cost $cost");
- await detail.init(mapWatch!.plugMap.gameMap);
- final old = selectedDetail.value;
- selectedDetail.value = detail;
- debug('select: ${detail.data.gameId}');
- if (old != null) {
- old.dispose();
- }
- }finally{
- selectedLoading.value = false;
- }
- }
- @override
- void onClose() {
- super.onClose();
- _subscriptionTrace?.cancel();
- }
- }
|