diff --git a/lib/Controller/gnss_controller.dart b/lib/Controller/gnss_controller.dart index da9eeb9..20e08c9 100644 --- a/lib/Controller/gnss_controller.dart +++ b/lib/Controller/gnss_controller.dart @@ -10,15 +10,15 @@ class GnssController extends GetxController { var singnalUpdate = 0.obs; - // Map selectedSignal = { - // "GPS": true, - // "GLONASS": true, - // "GALILEO": true, - // "BEIDOU": true, - // "QZSS": true, - // "SBAS": true, - // }.obs; - final selectedSignal = [false, false, false, false, false].obs; //天空图 + Map selectedSignal = { + "GPS": true, + "GLONASS": true, + "GALILEO": true, + "BEIDOU": true, + "QZSS": true, + "SBAS": true, + }.obs; + // final selectedSignal = Map{false, false, false, false, false}; final QselectedSignal = [false, false, false, false, false].obs; //信号质量 @override diff --git a/lib/sky/sky_plot.dart b/lib/sky/sky_plot.dart index 3199795..44d4525 100644 --- a/lib/sky/sky_plot.dart +++ b/lib/sky/sky_plot.dart @@ -1,24 +1,28 @@ -import 'dart:convert'; import 'dart:math'; -import 'dart:typed_data'; import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; import 'package:get/get.dart'; import 'package:gnss/gnss.dart'; import '../Controller/gnss_controller.dart'; -const signalNameList = ["GPS", "GLONASS", "GALILEO", "BEIDOU", "QZSS"]; -const signalPrefixList = ["G", "R", "E", "B", "Q"]; -const List signalColorList = [ - Color.fromARGB(255, 255, 0, 0), - Color.fromARGB(255, 0, 255, 0), - Color.fromARGB(255, 0, 0, 255), - Color.fromARGB(255, 255, 255, 0), - Color.fromARGB(255, 0, 255, 255) -]; +// const signalNameList = ["GPS", "GLONASS", "GALILEO", "BEIDOU", "QZSS"]; +const Map signalPrefixList = { + "GPS": "G", + "GLONASS": "N", + "GALILEO": "E", + "BEIDOU": "B", + "QZSS": "Q" +}; +const Map signalColorMap = { + "GPS": Color.fromARGB(255, 255, 0, 0), + "GLONASS": Color.fromARGB(255, 0, 255, 0), + "GALILEO": Color.fromARGB(255, 0, 0, 255), + "BEIDOU": Color.fromARGB(255, 255, 255, 0), + "QZSS": Color.fromARGB(255, 0, 255, 255), +}; + // class DrawSkyPlot { // double width = 500; // double height = 500; @@ -212,18 +216,12 @@ class SkyPlotPage extends StatelessWidget { final size = MediaQuery.of(context).size; return Obx(() { controller.singnalUpdate.value; - final signalGNSS = [ - controller.signalData?.GPS, - controller.signalData?.GLO, - controller.signalData?.GAL, - controller.signalData?.BDS, - controller.signalData?.QZSS, - ]; return SizedBox( width: size.width, height: size.height, child: CustomPaint( - painter: SkyPlotPainter(signalGNSS, controller.selectedSignal), + painter: + SkyPlotPainter(controller.signalData, controller.selectedSignal), ), ); }); @@ -273,10 +271,10 @@ class SkyPlotPage extends StatelessWidget { // } class SkyPlotPainter extends CustomPainter { - final List?> signalGNSS; - final List selectedSignal; + final SignalData? signalData; + final Map selectedSignal; final satelliteRadius = 12.0; - SkyPlotPainter(this.signalGNSS, this.selectedSignal); + SkyPlotPainter(this.signalData, this.selectedSignal); @override void paint(Canvas canvas, Size size) { @@ -300,18 +298,17 @@ class SkyPlotPainter extends CustomPainter { double y = center.dy + radius * sin(radians); canvas.drawLine(center, Offset(x, y), paint); } - + if (signalData == null) { + return; + } // Draw satellite positions final satellitePaint = Paint()..style = PaintingStyle.fill; - - for (int i = 0; i < signalGNSS.length; i++) { - final signalData = signalGNSS[i]; - if (!selectedSignal[i] || signalData == null) { - continue; + signalData!.forEach((key, value) { + if (selectedSignal[key] == true) { + satellitePaint.color = signalColorMap[key] ?? Colors.yellow; + drawGnssSignal(canvas, center, radius, value, satellitePaint, key); } - satellitePaint.color = signalColorList[i]; - drawGnssSignal(canvas, center, radius, signalData, satellitePaint, i); - } + }); } void drawGnssSignal( @@ -320,7 +317,7 @@ class SkyPlotPainter extends CustomPainter { double radius, List signals, Paint paint, - int index, + String neme, ) { for (final signal in signals) { final int el = signal.elevation; @@ -334,8 +331,8 @@ class SkyPlotPainter extends CustomPainter { canvas.drawCircle(Offset(x, y), satelliteRadius, paint); TextPainter( text: TextSpan( - text: signalPrefixList[index] + signal.prn.toString().padLeft(2, '0'), - style: TextStyle(color: Colors.white, fontSize: 12), + text: signalPrefixList[neme] + signal.prn.toString().padLeft(2, '0'), + style: const TextStyle(color: Colors.white, fontSize: 12), ), textDirection: TextDirection.ltr, ) diff --git a/pubspec.lock b/pubspec.lock index 49e53f7..d15c25d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -120,7 +120,7 @@ packages: description: path: "." ref: main - resolved-ref: "05b6cd1985ad7f13a487820f4cfa1e9622e2daae" + resolved-ref: "13bca7191808a98707e61f119994a91ebc35f11a" url: "https://git.mcxa.cn:89/flutter/gnss.git" source: git version: "0.0.1"