// import 'dart:convert'; // import 'package:flutter/material.dart'; // import 'package:flutter/services.dart'; // import 'package:get/get.dart'; // import 'package:gnss/gnss.dart'; // import 'package:mc_nav/main.dart'; // import '../../models/config/model.dart'; // import '../../service/pile/public_widget.dart'; // import 'chart_page.dart'; // import 'sky_plot_page.dart'; // // import 'chart_page.dart'; // // import 'sky_plot_page.dart'; // final SkyController skycontroller = Get.put(SkyController()); // class SkyPlotView extends StatefulWidget { // const SkyPlotView({super.key}); // @override // State createState() => _SkyPlotViewState(); // } // class _SkyPlotViewState extends State // with SingleTickerProviderStateMixin { // late TabController _tabController; // @override // void initState() { // super.initState(); // _tabController = TabController(length: 2, vsync: this); // // appcontroller.gnss.signalStream.listen((event) { // // var a = skycontroller.updateSky(event); // // print(a); // // }); // } // @override // Widget build(BuildContext context) { // final size = MediaQuery.of(context).size; // return GetBuilder( // init: SkyController(), // 确保每次进入页面时初始化控制器 // builder: (controller) { // final orientation = MediaQuery.of(context).orientation; // bool isPortrait = Orientation.portrait == orientation ? true : false; // List children = [ // Container( // alignment: Alignment.centerLeft, // decoration: const BoxDecoration(color: Colors.blue), // height: 40, // child: Row( // children: [ // IconButton( // onPressed: () { // Navigator.pop(context); // }, // icon: const Icon(Icons.arrow_back_rounded)), // const Text("GPS信号", // style: TextStyle( // color: Colors.white, // fontSize: 16, // fontWeight: FontWeight.bold)) // ], // ), // ), // TabBar( // labelColor: Colors.black, // 设置选中标签的字体颜色为黑色 // unselectedLabelColor: Colors.grey, // 设置未选中标签的字体颜色为灰色 // labelStyle: // const TextStyle(color: Colors.black), // 设置选中标签的字体颜色为黑色 // unselectedLabelStyle: // const TextStyle(color: Colors.grey), // 设置未选中标签的字体颜色为灰色 // controller: _tabController, // tabs: const [ // Tab(text: '天空图', icon: Icon(Icons.blur_circular_sharp)), // Tab(text: '信号质量', icon: Icon(Icons.bar_chart_rounded)), // ], // ), // // // const SkyTnfo(), // ]; // Widget body = const Text(""); // if (isPortrait) { // body = Column( // children: [ // ...children, // Expanded( // child: TabBarView( // physics: const NeverScrollableScrollPhysics(), // 禁用滑动切换 // controller: _tabController, // children: [ // SkyPlotPage(controller: controller), // ChartPage(controller: controller) // ], // ), // ), // ], // ); // } else { // body = Row(children: [ // Expanded( // flex: 1, // child: Column( // children: children, // ), // ), // Expanded( // flex: 1, // child: TabBarView( // controller: _tabController, // children: [ // SkyPlotPage(controller: controller), // ChartPage(controller: controller) // ], // ), // ), // ]); // } // return Scaffold( // appBar: AppBar( // title: const Text("天空图"), // toolbarHeight: 0, // ), // body: Container( // decoration: const BoxDecoration(color: Colors.white), // child: Stack( // children: [ // Positioned(child: body), // Obx(() { // List legendWideget = []; // controller.legend.forEach((key, value) { // LegendItem item = value; // legendWideget.add(TextButton( // onPressed: () { // item.show = !item.show; // item.color = item.show // ? item.color.withOpacity(1) // : item.color.withOpacity(0.3); // controller.updateLegend(key, item); // }, // child: Row( // children: [ // Text(item.text, // style: TextStyle( // backgroundColor: item.color, // color: Colors.white, // fontSize: 20, // )) // ], // ))); // }); // return !isPortrait // ? Positioned( // top: 150, // left: size.width / 3, // child: Column( // children: legendWideget, // ), // ) // : Positioned( // bottom: 20, // right: 50, // child: Row( // children: legendWideget, // ), // ); // }) // ], // ), // ), // ); // }); // } // } // List statusList = [ // '初始化', // '单点定位', // '码差分', // '无效PPS', // '固定解', // '浮点解', // '正在估算', // '人工输入', // '模拟模式', // 'WAAS差分', // '单点定位' // ]; // class SkyTnfo extends GetView { // const SkyTnfo({super.key}); // @override // Widget build(BuildContext context) { // final isPortrait = // MediaQuery.of(context).orientation == Orientation.portrait; // return Theme( // data: ThemeData( // textTheme: const TextTheme( // titleLarge: TextStyle( // fontSize: 30, // fontWeight: FontWeight.normal, // ), // )), // child: Container( // margin: const EdgeInsets.only(left: 5), // alignment: Alignment.centerLeft, // child: Obx(() { // Widget rowItem(String title, String text) => Row( // children: [ // FixedWidthTextWidget( // width: 95, // text: title, // style: Theme.of(context).textTheme.titleLarge, // ), // Text( // text, // style: Theme.of(context).textTheme.titleLarge, // ) // ], // ); // List children = [ // controller.lat.value > 0.0 // ? rowItem("北纬", '${controller.lat.value.toStringAsFixed(4)}N ') // : rowItem( // "南纬:", '${controller.lat.value.toStringAsFixed(4)}S '), // controller.lon > 0.0 // ? rowItem("东经:", '${controller.lon.value.toStringAsFixed(4)}E ') // : rowItem( // "西经:", '${controller.lon.value.toStringAsFixed(4)}W '), // rowItem("高程:", ' '), // rowItem("水平:", '${controller.hdop.value}米 '), // rowItem("GNSS误差", ''), // rowItem("定位状态:", statusList[controller.status.value]), // rowItem("可见:", '${controller.view.value}'), // rowItem("使用:", '${controller.use.value}') // ]; // return isPortrait // ? Wrap( // children: children, // ) // : Column(children: children); // }), // ), // ); // } // } // class SkyController extends GetxController { // var use = 0.obs; // var view = 0.obs; // var status = 0.obs; // var hdop = 0.0.obs; // var lat = 0.0.obs; // var lon = 0.0.obs; // var alt = 0.0.obs; // var bsv = [].obs; // var esv = [].obs; // var rsv = [].obs; // var gsv = [].obs; // var legend = {}.obs; // // GpsSignal? chartData; // SignalData? signalData; // var signalUpdate = 0.obs; // Map selectedSignal = { // "GPS": true, // "GLO": true, // "GAL": true, // "BDS": true, // "QZS": true, // }.obs; // @override // void onInit() { // super.onInit(); // // rootBundle.loadString('images/gps.json').then((value) { // // var originCharData = jsonDecode(value); // // chartData = GpsSignal.fromJson(originCharData); // // if (chartData != null) { // // updateSV(chartData!); // // } // // updateSky(originCharData); // // }); // appcontroller.gnss.signalStream.listen((singnal) { // var key = singnal.keys.first; // var signalGNSS = singnal[key]; // updateSky(signalGNSS); // }); // } // void dispose() { // appcontroller.gnss.dispose(); // super.dispose(); // } // updateSky(data) { // var sky = data.toString(); // update(); // } // List colors = const [ // Color.fromRGBO(0, 0, 160, 1), // Color.fromRGBO(0, 112, 0, 1), // Color.fromRGBO(128, 0, 0, 1), // Color.fromRGBO(128, 96, 0, 1), // Color.fromRGBO(0, 96, 96, 1), // Color.fromRGBO(128, 0, 128, 1), // Color.fromRGBO(68, 68, 204, 1), // Color.fromRGBO(128, 64, 64, 1), // Color.fromRGBO(64, 64, 128, 1), // Color.fromRGBO(128, 128, 128, 1), // ]; // List sVTypes = [ // 'GPS', // 'SBAS', // 'GLONASS', // 'GALILEO', // 'QZSS', // 'BEIDOU', // 'OMNI', // 'XPS', // 'IRNSS' // ]; // List sVLabels = [ // 'GPS', // 'SBAS', // 'GLN', // 'GAL', // 'QZSS', // 'BDS', // 'OMNI', // 'XPS', // 'IRNSS' // ]; // Map svMap = { // "BDS": "BSV", // "GLN": "ESV", // "GPS": "GSV", // "GAL": "RSV", // }; // var svData = [].obs; // updateSV(GpsSignal chartData) { // if ((chartData.bsv).isNotEmpty) { // for (int i = 0; i < chartData.bsv.length; i++) { // SvItem data = chartData.bsv[i]; // data.name = 'BEIDOU'; // svData.add(data); // } // } // if ((chartData.esv).isNotEmpty) { // for (int i = 0; i < chartData.esv.length; i++) { // SvItem data = chartData.esv[i]; // data.name = 'GLONASS'; // svData.add(data); // } // } // if ((chartData.gsv).isNotEmpty) { // for (int i = 0; i < chartData.gsv.length; i++) { // SvItem data = chartData.gsv[i]; // data.name = 'GPS'; // svData.add(data); // } // } // if ((chartData.rsv).isNotEmpty) { // for (int i = 0; i < chartData.rsv.length; i++) { // SvItem data = chartData.rsv[i]; // data.name = 'GALILEO'; // svData.add(data); // } // } // for (var i = 0; i < svData.length; i++) { // SvItem item = svData[i]; // String sys = item.name; // int index = sVTypes.indexWhere((item) => item == sys); // legend[sys] = // LegendItem(text: sVLabels[index], color: colors[index], show: true); // // { // // 'text': sVLabels[index], // // 'color': colors[index], // // "show": true // // }; // } // } // updateLegend(String key, LegendItem data) { // legend[key] = data; // startIndex.value = 0; // update(); // } // final startIndex = 0.obs; // updateSlider(double value) { // startIndex.value = value.ceil(); // update(); // } // } // class LegendItem { // String text; // Color color; // bool show; // LegendItem({required this.text, required this.color, this.show = true}); // }