| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- import 'package:application/widget.dart';
- import 'package:common_pub/ui/map_view/map_view.dart';
- import 'package:common_pub/ui/map_view/view_map_image.dart';
- import 'package:common_pub/ui/map_view/view_map_touch.dart';
- import 'package:common_pub/ui/map_view/view_map_user_point.dart';
- import 'package:common_pub/ui/map_view/view_plug_loading.dart';
- import 'package:common_pub/utils.dart';
- import 'field_control_controller.dart';
- class FieldControlPage extends StatelessWidget{
- const FieldControlPage({super.key});
- @override
- Widget build(BuildContext context) {
- return GetBuilder(
- init: FieldControlController(),
- builder: (c){
- return Container(
- height: double.infinity,
- width: double.infinity,
- color: const Color(0xffc9c0c0),
- alignment: Alignment.center,
- child: Obx((){
- final mapWatch = c.mapWatch;
- return mapWatch != null? content(context, mapWatch, c): noData();
- }));
- });
- }
- Widget noData(){
- return Center(
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- Image.asset(Assets.imagesIcNoData, height: 64),
- const SizedBox(height: 25),
- const Text('没有数据, 请选择地图',
- style: TextStyle(color: Color(0xff707070), fontSize: 18.5)),
- ],
- ),
- );
- }
- Widget content(BuildContext context, MapWatchService map, FieldControlController c){
- return Row(
- children: [
- Expanded(child: Column(
- children: [
- Expanded(child: ViewMapStack(plug: map.plugMap, children: [
- ViewPlugLoading(map.plugMap),
- ViewMapImage(map.plugMap),
- _ViewTrace(map: map),
- ViewMapTouch(map.plugMap)
- ])),
- _MsgView(),
- ],
- )),
- _ActiveInfoView()
- ],
- );
- }
- }
- class _ViewTrace extends GetView<FieldControlController>{
- const _ViewTrace({required this.map});
- final MapWatchService map;
- @override
- Widget build(BuildContext context) {
- return Obx((){
- final children = <Widget>[
- ];
- for(final act in controller.activeList){
- for(final user in act.userList){
- if(user.isHide.value){
- continue;
- }
- final trace = user.trace.lastOrNull;
- if(trace != null){
- children.add(ViewMapUserPoint(map.plugMap, trace));
- }
- }
- }
- return Stack(
- alignment: Alignment.topLeft,
- children: children
- );
- });
- }
- }
- class _ActiveInfoView extends GetView<FieldControlController>{
- @override
- Widget build(BuildContext context) {
- return Obx(() => Container(
- width: 370,
- height: double.infinity,
- color: Colors.white,
- child: ListView(
- children: controller.activeList.map((element) => activeView(element)).toList(),
- ),
- )) ;
- }
- Widget activeView(ActiveInfo info){
- final children = <Widget>[
- Row(children: [
- Text('${info.name} (${info.userList.length}人)'),
- const Spacer(),
- IconButton(onPressed: (){}, icon: const Icon(Icons.arrow_drop_up))
- ]),
- Container(
- decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(5)),
- padding: const EdgeInsets.fromLTRB(26, 11, 26, 11),
- child: Row(
- children: [
- Text('广播'),
- const Spacer(),
- Image.asset(Assets.imagesIcCp, height: 20, width: 20),
- Text(' ${info.cpAllCount}'),
- const Spacer(),
- Text('全部隐藏'),
- ],
- ),
- )
- ];
- children.addAll(info.userList.map((e) => _UserInfoView(data: e)).toList());
- return Container(
- decoration: BoxDecoration(color: const Color(0xffe0e0e0), borderRadius: BorderRadius.circular(5)),
- margin: const EdgeInsets.fromLTRB(9, 12, 9, 12),
- padding: const EdgeInsets.all(9),
- child: Column(
- children: children,
- ),
- );
- }
- }
- class _UserInfoView extends GetView<FieldControlController>{
- const _UserInfoView({required this.data});
- final UserInfo data;
- @override
- Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(5)),
- padding: const EdgeInsets.fromLTRB(7, 11, 7, 11),
- margin: const EdgeInsets.only(top: 5),
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Container(
- margin: const EdgeInsets.only(top: 2),
- decoration: BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(4)),
- width: 7, height: 16),
- const SizedBox(width: 8,),
- Expanded(child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text.rich(TextSpan(text: data.name, children: [
- TextSpan(text: ' [${data.routeName}]')
- ])),
- const SizedBox(height: 5),
- Row(
- children: [
- container(null, cpInfo, Colors.blue),
- container(const Icon(Icons.favorite, size: 13, color: Colors.white,), ' ${hr==0?'--':hr}', 0.toHRPColor()),
- container(null, paceInfo, Colors.blue)
- ],
- ),
- const SizedBox(height: 5),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Text('距离 ${data.nextDistance.toString()}'),
- Text('时间 ${data.duration.toAppString()}'),
- Text('里程 ${data.distance.toString()}'),
- ],
- )
- ],
- )),
- GestureDetector(
- onTap: (){
- data.isHide.value=!data.isHide.value;
- },
- child: Obx(()=> Icon(
- data.isHide.value?
- Icons.visibility_off
- :Icons.visibility,
- color: data.isHide.value? Colors.grey: const Color(0xffffbb77),)) ,
- )
- ],
- ),
- );
- }
- int get hr{
- return data.gameInfo.hrInfo.hrInfo.lastOrNull?.hr??0;
- }
- String get cpInfo{
- final next = data.nextWant;
- return '${data.gameInfo.gameSaveInfo.nextControlPoint.orderNo}号点(${next?.sn})';
- }
- String get paceInfo{
- Duration;
- return data.pace.toString();
- }
- Widget container(Widget? icon, String text, Color color){
- final children = <Widget>[];
- if(icon!= null){
- children.add(icon);
- }
- children.add(Text(text, style: const TextStyle(color: Colors.white, fontSize: 14)));
- return Container(
- height: 18,
- padding: const EdgeInsets.fromLTRB(12, 0, 12, 0),
- margin: const EdgeInsets.only(right: 10),
- alignment: Alignment.center,
- decoration: BoxDecoration(color: color, borderRadius: BorderRadius.circular(9)),
- child: Row(
- children: children,
- ),
- );
- }
- }
- class _MsgView extends GetView<FieldControlController>{
- @override
- Widget build(BuildContext context) {
- return Container();
- }
- }
|