data_detail_controller.dart 2.0 KB

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