124 lines
3.4 KiB
Dart
124 lines
3.4 KiB
Dart
|
import 'package:flutter/material.dart';
|
||
|
import 'package:gnssview/sky/device_type.dart';
|
||
|
|
||
|
import 'mulbutton.dart';
|
||
|
|
||
|
class SkyInfo extends StatelessWidget {
|
||
|
final String lat; // 纬度
|
||
|
final String lon; // 经度
|
||
|
final String hdop; // 高程
|
||
|
final int status; // 定位状态
|
||
|
final int view; // 可见
|
||
|
final int use; // 使用
|
||
|
final String time; // 时间
|
||
|
|
||
|
const SkyInfo({
|
||
|
super.key,
|
||
|
required this.lat,
|
||
|
required this.lon,
|
||
|
required this.hdop,
|
||
|
required this.status,
|
||
|
required this.view,
|
||
|
required this.use,
|
||
|
required this.time,
|
||
|
});
|
||
|
|
||
|
@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),
|
||
|
padding: const EdgeInsets.symmetric(vertical: 20),
|
||
|
alignment: Alignment.centerLeft,
|
||
|
child:
|
||
|
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||
|
// 创建行项的函数
|
||
|
rowItem(context, "北纬:", lat.contains("-") ? '$lat S ' : '$lat N '),
|
||
|
rowItem(context, "东经:", lon.contains("-") ? '$lon W ' : '$lon E '),
|
||
|
rowItem(context, "高程:", '$hdop 米'),
|
||
|
rowItem(context, "定位状态:", ""),
|
||
|
rowItem(context, "可见:", '$view'),
|
||
|
rowItem(context, "使用:", '$use'),
|
||
|
rowItem(context, "时间:", time),
|
||
|
Row(
|
||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||
|
children: [
|
||
|
MulButton(
|
||
|
colors: const [
|
||
|
Colors.blue,
|
||
|
Colors.red,
|
||
|
Colors.green,
|
||
|
Colors.orange
|
||
|
],
|
||
|
onSelectionChanged: (selectedColors) {
|
||
|
// 处理选中的颜色
|
||
|
print('选中的颜色: $selectedColors');
|
||
|
},
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
]),
|
||
|
));
|
||
|
}
|
||
|
|
||
|
Widget rowItem(BuildContext context, String title, String text) => Row(
|
||
|
children: [
|
||
|
FixedWidthTextWidget(
|
||
|
width: 80,
|
||
|
text: title,
|
||
|
style: Theme.of(context).textTheme.titleLarge,
|
||
|
),
|
||
|
Text(
|
||
|
text,
|
||
|
style: Theme.of(context).textTheme.titleLarge,
|
||
|
),
|
||
|
],
|
||
|
);
|
||
|
}
|
||
|
|
||
|
class FixedWidthTextWidget extends StatelessWidget {
|
||
|
final String text;
|
||
|
final double width;
|
||
|
final TextStyle? style;
|
||
|
|
||
|
FixedWidthTextWidget({
|
||
|
super.key,
|
||
|
required this.text,
|
||
|
this.width = 80,
|
||
|
this.style,
|
||
|
});
|
||
|
TextStyle? textStyle;
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
final deviceType = getDeviceType(context);
|
||
|
double dynamicWidth = deviceType == DeviceType.mobile ? 0 : 50;
|
||
|
|
||
|
if (style != null) {
|
||
|
textStyle =
|
||
|
style!.copyWith(fontSize: deviceType == DeviceType.mobile ? 16 : 20);
|
||
|
} else {
|
||
|
textStyle =
|
||
|
TextStyle(fontSize: deviceType == DeviceType.mobile ? 16 : 20);
|
||
|
}
|
||
|
return Container(
|
||
|
margin: const EdgeInsets.symmetric(horizontal: 3),
|
||
|
width: width + dynamicWidth,
|
||
|
child: Text(
|
||
|
text,
|
||
|
style: textStyle,
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|