98 lines
3.0 KiB
Dart
98 lines
3.0 KiB
Dart
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';
|
|
}
|
|
}
|