import 'package:trackoffical_app/model/game_map.dart'; import 'package:trackoffical_app/model/game_person_data.dart'; import 'package:trackoffical_app/screen.dart'; import 'package:trackoffical_app/service/api.dart'; import 'package:trackoffical_app/service/app.dart'; import 'package:trackoffical_app/service/database.dart'; import 'layer_under_guardian.dart'; import '../layer/layer_cp.dart'; import 'package:trackoffical_app/widget/my_position_point.dart'; import '../../../service/sport_wear.dart'; import '../layer/layer_trace.dart'; import 'layer_front_ui.dart'; import 'guardian_controller.dart'; import '../layer/layer_controller.dart'; import '../layer/layer_map_touch.dart'; import '../layer/layer_map.dart'; import '../../../service/game/game_instance_guardian.dart'; import 'package:trackoffical_app/pb.dart' as pb; class GuardianWatchGameView extends GetView{ const GuardianWatchGameView({ super.key}); static final _pointColorList = [ Colors.orange, Colors.blue, Colors.red, ]; static Bindings bindings() { return BindingsBuilder(() { Get.lazyPut(() => GuardianController()); }); } @override Widget build(BuildContext context) { final c = controller; if(c is! GuardianControllerMock){ throw UnimplementedError('${c.runtimeType} is not GuardianController'); } return Obx((){ final children = []; if(c.mapWidgetSize.value != null){ final selectedPerson = c.selectedPersonData; children.add(const LayerMap()); children.add(Container(color: Colors.white.withAlpha(125))); var i = 0; for(var person in c.instance.gamePersonData){ children.add(LayerTrace( onMapTrace: person.myPositionOnMapHistory, color: _pointColorList[i])); i++; if(i> _pointColorList.length-1){ i=_pointColorList.length-1; } } if(selectedPerson!= null && c.isShowRoute.value){ children.add(LayerCP( isHideRouteBeforeStart: false, wantList: selectedPerson.controlPointWantSequence )); } if(c.isShowGuardian.value){ children.add(_LayerGuardianPosition()); } children.addAll([ const LayerMapTouch(), LayerUnderGuardian(_pointColorList), ]); } children.addAll([ const LayerFrontUI() ]); return Scaffold( backgroundColor: const Color(0xffd6d6d6), body: Stack( key: c.mapWidgetKey, alignment: Alignment.topLeft, children: children ), ); }); } } class _LayerGuardianPosition extends GetView{ @override Widget build(BuildContext context) { final c = controller; if (c is! GuardianControllerMock) { throw UnimplementedError('${c.runtimeType} is not GuardianController'); } return Obx((){ var p = c.guardianPositionOnMap.value; if (p == null) { return const SizedBox(); } p = c.mapOffsetToScreen(p); return Stack( children: [ SizedBox(width: context.width, height: context.height), MyPositionPoint(offset: p, color: Colors.blue) ]); }); } } void main()async{ Get.put(App()); Get.put(SportWearService()); Get.put(DatabaseService()); Get.put(ApiService()); await App.to.init(); await DatabaseService.to.init(); await ApiService.to.init(); final data = GameInstanceGuardian(underGuardianId: -1); data.gameMapData = (pb.NetImage() ..md5= [53, 52, 51, 52, 53, 51, 49, 50, 50, 51, 50, 51, 49, 49] ).toGameMap(); data.gamePersonData.add(GamePersonData() ..userName='赵小曼' ..myPositionOnMapHistory.addAll([ Offset(3000, 4000), Offset(3000, 4100), Offset(3000, 4200), Offset(3100, 4200), Offset(3200, 4200), Offset(3300, 4200), Offset(3400, 4200), Offset(3500, 4200), Offset(3600, 4200), Offset(3700, 4200), Offset(3800, 4200), ])); await data.init(); final c = GuardianControllerMock(); c.instance = data; c.guardianPositionOnMap.value = Offset(4800, 5200); Get.put(c); runPreview(GuardianWatchGameView()); }