253 lines
9.3 KiB
Dart
253 lines
9.3 KiB
Dart
import 'package:ef/ef.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/svg.dart';
|
|
import 'package:flutterflow_ui/flutterflow_ui.dart';
|
|
import 'package:vbvs_app/common/color/appConstants.dart';
|
|
import 'package:vbvs_app/common/util/FitTool.dart';
|
|
import 'package:vbvs_app/common/util/MyUtils.dart';
|
|
import 'package:vbvs_app/component/tool/ClickableContainer.dart';
|
|
import 'package:vbvs_app/controller/sleep/sleep_report_controller.dart';
|
|
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
|
|
import 'package:vbvs_app/pages/device_bind/componnet/bind_dialog.dart';
|
|
|
|
class WeekSleepDataModule extends StatefulWidget {
|
|
final Map<String, dynamic> data;
|
|
final dynamic sleepReportData; // 可选参数,类型为 var/dynamic
|
|
|
|
const WeekSleepDataModule({
|
|
super.key,
|
|
required this.data,
|
|
this.sleepReportData, // 标记为可选参数
|
|
});
|
|
|
|
@override
|
|
State<WeekSleepDataModule> createState() => _WeekSleepDataModuleState();
|
|
}
|
|
|
|
class _WeekSleepDataModuleState extends State<WeekSleepDataModule> {
|
|
@override
|
|
void setState(VoidCallback callback) {
|
|
super.setState(callback);
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
ThemeController themeController = Get.find();
|
|
return ClickableContainer(
|
|
backgroundColor: themeController.currentColor.sc5,
|
|
highlightColor: themeController.currentColor.sc21,
|
|
borderRadius: 20.rpx,
|
|
padding: EdgeInsetsDirectional.fromSTEB(18.rpx, 10.rpx, 18.rpx, 10.rpx),
|
|
onTap: () {
|
|
showTipDialog(
|
|
backgroundColor: stringToColor("#FFFFFF"),
|
|
context,
|
|
Container(
|
|
constraints: BoxConstraints(
|
|
maxHeight: 700.rpx,
|
|
),
|
|
child: SingleChildScrollView(
|
|
child: Column(
|
|
children: [
|
|
Text(
|
|
"${widget.data['name']}",
|
|
style: TextStyle(
|
|
color: stringToColor("#333333"),
|
|
fontSize: 36.rpx,
|
|
),
|
|
),
|
|
SizedBox(
|
|
height: 17.rpx,
|
|
),
|
|
// Text(
|
|
// (widget.data['tips']?.toString().trim().isNotEmpty ?? false)
|
|
// ? widget.data['tips'].toString()
|
|
// : "未知数据".tr,
|
|
// style: TextStyle(
|
|
// color: stringToColor("#C8CBD2"),
|
|
// fontSize: 26.rpx,
|
|
// ),
|
|
// ),
|
|
// SizedBox(
|
|
// height: 37.rpx,
|
|
// ),
|
|
Text(
|
|
"${widget.data['value']}" +
|
|
((widget.data['unit'] == null ||
|
|
widget.data['unit'].toString().isEmpty)
|
|
? ''
|
|
: widget.data['unit']),
|
|
style: TextStyle(
|
|
color: stringToColor("${widget.data['color']}"),
|
|
fontSize: 60.rpx,
|
|
),
|
|
),
|
|
|
|
// SizedBox(
|
|
// height: 81.rpx,
|
|
// ),
|
|
// IntrinsicHeight(
|
|
// child: Row(
|
|
// crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
// children: [
|
|
// for (int i = 0; i < levelGroups.length; i++) ...[
|
|
// // 每个 levelGroup 区域
|
|
// Expanded(
|
|
// child: Column(
|
|
// mainAxisSize: MainAxisSize.min,
|
|
// children: [
|
|
// // Level 名称
|
|
// Text(
|
|
// levelGroups[i]['levelName'],
|
|
// style: TextStyle(
|
|
// fontSize: 30.rpx,
|
|
// color: stringToColor("#333333"),
|
|
// fontWeight: FontWeight.bold,
|
|
// ),
|
|
// ),
|
|
// SizedBox(height: 38.rpx),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
if (widget.data['onto'] != null && widget.data['onto'] == true) {
|
|
//跳转睡眠报告
|
|
Get.toNamed("/newSleepReportPage", arguments: {
|
|
'date': widget.data['time'] != null
|
|
? int.parse(widget.data['time'].toString())
|
|
: DateTime.now().millisecondsSinceEpoch,
|
|
"mac": widget.data['mac'] != null && widget.data['mac'].isNotEmpty
|
|
? widget.data['mac']
|
|
: 'aaaaaaeeeeeq',
|
|
'type': 1,
|
|
'name': 'sleep', //'sleep', 'heartRate' 或 'breathe'
|
|
'itemName': widget.data['id'],
|
|
'person': widget.data['person'],
|
|
});
|
|
}
|
|
},
|
|
child: Container(
|
|
width: MediaQuery.sizeOf(context).width * 0.267,
|
|
constraints: BoxConstraints(
|
|
minWidth: 200.rpx,
|
|
minHeight: 161.rpx,
|
|
),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.max,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
children: [
|
|
Text(
|
|
'${widget.data['name']}',
|
|
style: TextStyle(
|
|
fontFamily: 'Inter',
|
|
fontSize: 26.rpx,
|
|
letterSpacing: 0.0,
|
|
color: themeController.currentColor.sc3,
|
|
),
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
),
|
|
Row(
|
|
mainAxisSize: MainAxisSize.min,
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Expanded(
|
|
child: Text.rich(
|
|
TextSpan(
|
|
children: [
|
|
TextSpan(
|
|
text: '${widget.data['value']}',
|
|
style: TextStyle(
|
|
fontFamily: 'Inter',
|
|
fontSize: 36.rpx,
|
|
letterSpacing: 0.0,
|
|
color: themeController.currentColor.sc3,
|
|
),
|
|
),
|
|
WidgetSpan(child: SizedBox(width: 2.rpx)), // 可选间距
|
|
TextSpan(
|
|
text: widget.data['unit'] != null
|
|
? '${widget.data['unit']}'
|
|
: '',
|
|
style: TextStyle(
|
|
fontFamily: 'Inter',
|
|
fontSize: AppConstants().small_text_fontSize,
|
|
letterSpacing: 0.0,
|
|
color: themeController.currentColor.sc3,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
maxLines: 1,
|
|
style: TextStyle(
|
|
color:
|
|
themeController.currentColor.sc3), // 强制 ellipsis 颜色
|
|
overflow: TextOverflow.ellipsis,
|
|
),
|
|
),
|
|
if (widget.data['level'] != null)
|
|
ClickableContainer(
|
|
backgroundColor: (widget.data['color'] == null ||
|
|
widget.data['color'].toString().isEmpty)
|
|
? Colors.transparent
|
|
: stringToColor(widget.data['color']),
|
|
highlightColor: themeController.currentColor.sc3,
|
|
padding: EdgeInsets.symmetric(
|
|
horizontal: 0.rpx,
|
|
vertical: 0.rpx,
|
|
),
|
|
borderRadius: 8.rpx,
|
|
onTap: () {
|
|
print('Button pressed ...');
|
|
},
|
|
child: Container(
|
|
alignment: Alignment.center,
|
|
constraints: BoxConstraints(
|
|
minWidth: 43.rpx,
|
|
minHeight: 25.rpx,
|
|
),
|
|
child: Text(
|
|
'${widget.data['level']}',
|
|
style: TextStyle(
|
|
fontFamily: 'Inter Tight',
|
|
color: themeController.currentColor.sc3,
|
|
letterSpacing: 0.0,
|
|
fontSize: 15.rpx,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
].divide(SizedBox(width: 0.rpx)),
|
|
),
|
|
Text(
|
|
"正常值".tr +
|
|
'${(widget.data['range'] ?? '').toString().isEmpty ? '未知数据'.tr : widget.data['range']}',
|
|
style: TextStyle(
|
|
fontFamily: 'Inter',
|
|
fontSize: AppConstants().small_text_fontSize,
|
|
letterSpacing: 0.0,
|
|
color: themeController.currentColor.sc4,
|
|
),
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|