gnssview/lib/sky/mulbutton.dart

98 lines
3.0 KiB
Dart
Raw Normal View History

2024-08-06 17:41:15 +08:00
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<Color> signalColorList;
const MulButton({
required this.onSelectionChanged,
required this.signalColorList,
});
@override
_MulButtonState createState() => _MulButtonState();
}
class _MulButtonState extends State<MulButton> {
final selectedNameList = ['GPS', 'GLO', 'GAL', 'BDS', 'QZS', 'SBAS'];
Map<String, bool> selectedSignal = {
"GPS": true,
"GLO": true,
"GAL": true,
"BDS": true,
"QZS": true,
};
List<Color> 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<String, Color> 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<Color> 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';
}
}