import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:gnssview/Controller/gnss_controller.dart'; class MulButton extends StatefulWidget { final Function(String, bool) onSelectionChanged; final List signalColorList; const MulButton({ required this.onSelectionChanged, required this.signalColorList, }); @override _MulButtonState createState() => _MulButtonState(); } class _MulButtonState extends State { final selectedNameList = ['GPS', 'GLO', 'GAL', 'BDS', 'QZS', 'SBAS']; Map selectedSignal = { "GPS": true, "GLO": true, "GAL": true, "BDS": true, "QZS": true, }; List signalColor = [ const Color.fromARGB(255, 255, 0, 0), const Color.fromARGB(255, 0, 255, 0), const Color.fromARGB(255, 0, 0, 255), Color.fromARGB(255, 146, 73, 206), Color.fromARGB(255, 13, 179, 179) ]; Map selectedSignalList = { "GPS": const Color.fromARGB(255, 255, 0, 0), "GLO": const Color.fromARGB(255, 0, 255, 0), "GAL": const Color.fromARGB(255, 0, 0, 255), "BDS": Color.fromARGB(255, 146, 73, 206), "QZS": Color.fromARGB(255, 13, 179, 179), }; void updateSelection(String key, bool value) { setState(() { // String key = selectedNameList[index]; selectedSignal[key] = value; List selected = []; for (int i = 0; i < selectedSignal.length; i++) { if (selectedSignal[key]!) { selected.add(selectedSignalList[key]!); } } widget.onSelectionChanged(key, value); // 通知父组件 }); } @override Widget build(BuildContext context) { return Wrap( // spacing: 0, // 水平间距 // runSpacing: 2.0, // 垂直间距 alignment: WrapAlignment.start, children: List.generate(widget.signalColorList.length, (index) { String key = selectedNameList[index]; return Row( mainAxisSize: MainAxisSize.min, children: [ Checkbox( value: selectedSignal[key], onChanged: (bool? value) { if (value != null) { updateSelection(key, value); } }, activeColor: signalColor[index], // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(4), // 设置边角 // ), ), Text( colorToString(signalColor[index]), style: TextStyle(color: signalColor[index]), ), ], ); }), ); } String colorToString(Color color) { if (color == const Color.fromARGB(255, 255, 0, 0)) return 'GPS(G)'; if (color == const Color.fromARGB(255, 0, 255, 0)) return 'GLO(R)'; if (color == const Color.fromARGB(255, 0, 0, 255)) return 'GAL(E)'; if (color == Color.fromARGB(255, 146, 73, 206)) return 'BDS(B)'; if (color == Color.fromARGB(255, 13, 179, 179)) return 'QZS(Q)'; return 'Unknown Color'; } }