guardian_watch_game_view.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import 'package:trackoffical_app/model/game_map.dart';
  2. import 'package:trackoffical_app/model/game_person_data.dart';
  3. import 'package:trackoffical_app/screen.dart';
  4. import 'package:trackoffical_app/service/api.dart';
  5. import 'package:trackoffical_app/service/app.dart';
  6. import 'package:trackoffical_app/service/database.dart';
  7. import 'layer_under_guardian.dart';
  8. import '../layer/layer_cp.dart';
  9. import 'package:trackoffical_app/widget/my_position_point.dart';
  10. import '../../../service/sport_wear.dart';
  11. import '../layer/layer_trace.dart';
  12. import 'layer_front_ui.dart';
  13. import 'guardian_controller.dart';
  14. import '../layer/layer_controller.dart';
  15. import '../layer/layer_map_touch.dart';
  16. import '../layer/layer_map.dart';
  17. import '../../../service/game/game_instance_guardian.dart';
  18. import 'package:trackoffical_app/pb.dart' as pb;
  19. class GuardianWatchGameView extends GetView<LayerController>{
  20. const GuardianWatchGameView({
  21. super.key});
  22. static final _pointColorList = <Color>[
  23. Colors.orange,
  24. Colors.blue,
  25. Colors.red,
  26. ];
  27. static Bindings bindings() {
  28. return BindingsBuilder(() {
  29. Get.lazyPut<LayerController>(() => GuardianController());
  30. });
  31. }
  32. @override
  33. Widget build(BuildContext context) {
  34. final c = controller;
  35. if(c is! GuardianControllerMock){
  36. throw UnimplementedError('${c.runtimeType} is not GuardianController');
  37. }
  38. return Obx((){
  39. final children = <Widget>[];
  40. if(c.mapWidgetSize.value != null){
  41. final selectedPerson = c.selectedPersonData;
  42. children.add(const LayerMap());
  43. children.add(Container(color: Colors.white.withAlpha(125)));
  44. var i = 0;
  45. for(var person in c.instance.gamePersonData){
  46. children.add(LayerTrace(
  47. onMapTrace: person.myPositionOnMapHistory,
  48. color: _pointColorList[i]));
  49. i++;
  50. if(i> _pointColorList.length-1){
  51. i=_pointColorList.length-1;
  52. }
  53. }
  54. if(selectedPerson!= null && c.isShowRoute.value){
  55. children.add(LayerCP(
  56. isHideRouteBeforeStart: false,
  57. wantList: selectedPerson.controlPointWantSequence
  58. ));
  59. }
  60. if(c.isShowGuardian.value){
  61. children.add(_LayerGuardianPosition());
  62. }
  63. children.addAll([
  64. const LayerMapTouch(),
  65. LayerUnderGuardian(_pointColorList),
  66. ]);
  67. }
  68. children.addAll([
  69. const LayerFrontUI()
  70. ]);
  71. return Scaffold(
  72. backgroundColor: const Color(0xffd6d6d6),
  73. body: Stack(
  74. key: c.mapWidgetKey,
  75. alignment: Alignment.topLeft,
  76. children: children
  77. ),
  78. );
  79. });
  80. }
  81. }
  82. class _LayerGuardianPosition extends GetView<LayerController>{
  83. @override
  84. Widget build(BuildContext context) {
  85. final c = controller;
  86. if (c is! GuardianControllerMock) {
  87. throw UnimplementedError('${c.runtimeType} is not GuardianController');
  88. }
  89. return Obx((){
  90. var p = c.guardianPositionOnMap.value;
  91. if (p == null) {
  92. return const SizedBox();
  93. }
  94. p = c.mapOffsetToScreen(p);
  95. return Stack(
  96. children: [
  97. SizedBox(width: context.width, height: context.height),
  98. MyPositionPoint(offset: p, color: Colors.blue)
  99. ]);
  100. });
  101. }
  102. }
  103. void main()async{
  104. Get.put<App>(App());
  105. Get.put(SportWearService());
  106. Get.put<DatabaseService>(DatabaseService());
  107. Get.put<ApiService>(ApiService());
  108. await App.to.init();
  109. await DatabaseService.to.init();
  110. await ApiService.to.init();
  111. final data = GameInstanceGuardian(underGuardianId: -1);
  112. data.gameMapData = (pb.NetImage()
  113. ..md5= [53, 52, 51, 52, 53, 51, 49, 50, 50, 51, 50, 51, 49, 49]
  114. ).toGameMap();
  115. data.gamePersonData.add(GamePersonData()
  116. ..userName='赵小曼'
  117. ..myPositionOnMapHistory.addAll([
  118. Offset(3000, 4000),
  119. Offset(3000, 4100),
  120. Offset(3000, 4200),
  121. Offset(3100, 4200),
  122. Offset(3200, 4200),
  123. Offset(3300, 4200),
  124. Offset(3400, 4200),
  125. Offset(3500, 4200),
  126. Offset(3600, 4200),
  127. Offset(3700, 4200),
  128. Offset(3800, 4200),
  129. ]));
  130. await data.init();
  131. final c = GuardianControllerMock();
  132. c.instance = data;
  133. c.guardianPositionOnMap.value = Offset(4800, 5200);
  134. Get.put<LayerController>(c);
  135. runPreview(GuardianWatchGameView());
  136. }