diff --git a/lib/component/home_page/SleepDataModuleWidget.dart b/lib/component/home_page/SleepDataModuleWidget.dart index 92588e8..9546d90 100644 --- a/lib/component/home_page/SleepDataModuleWidget.dart +++ b/lib/component/home_page/SleepDataModuleWidget.dart @@ -152,6 +152,16 @@ class _SleepDataModuleWidgetState extends State { ), ], ), + Text( + (widget.data['range']?.toString().trim().isNotEmpty ?? + false) + ? "参考范围".tr + ":" + widget.data['range'].toString() + : "参考范围".tr + ":" + "未知数据".tr, + style: TextStyle( + color: stringToColor("#C8CBD2"), + fontSize: 26.rpx, + ), + ), SizedBox( height: 81.rpx, ), diff --git a/lib/pages/main_bottom/mine_page.dart b/lib/pages/main_bottom/mine_page.dart index 1a3ef34..a7394b2 100644 --- a/lib/pages/main_bottom/mine_page.dart +++ b/lib/pages/main_bottom/mine_page.dart @@ -589,19 +589,7 @@ class _MinePageState extends State { ); Get.toNamed("/loginPage"); } else { - // TopSlideNotification.show( - // context, - // text: "待开发.提示".tr, - // textColor: - // themeController.currentColor.sc2, - // ); - // Get.toNamed("/newSleepReportPage", - // arguments: { - // 'date': DateTime.now() - // .millisecondsSinceEpoch, - // "mac": 'aaaaaaeeeeeq', - // 'type': 1 - // }); + } }, child: Container( diff --git a/lib/pages/mh_page/homepage/new_Home_page.dart b/lib/pages/mh_page/homepage/new_Home_page.dart index 5cfc7d8..ebde0e4 100644 --- a/lib/pages/mh_page/homepage/new_Home_page.dart +++ b/lib/pages/mh_page/homepage/new_Home_page.dart @@ -549,6 +549,7 @@ class _NewHomePageState extends State { 'date': DateTime.now() .millisecondsSinceEpoch, 'person_show': false, + 'reportPadding': false, }, ); } @@ -652,6 +653,8 @@ class _NewHomePageState extends State { // 'backgroundColor':stringToColor("#003058"), 'person_show': false, + 'reportPadding': + false, }, ); }, diff --git a/lib/pages/sleep_report/chart/ScatterPlotChart.dart b/lib/pages/sleep_report/chart/ScatterPlotChart.dart index 0304f72..165a2c3 100644 --- a/lib/pages/sleep_report/chart/ScatterPlotChart.dart +++ b/lib/pages/sleep_report/chart/ScatterPlotChart.dart @@ -5,29 +5,24 @@ import 'package:vbvs_app/common/util/MyUtils.dart'; class ScatterPlotChart extends StatelessWidget { final List points; - final int xMax; - final int yMax; + final double xMin; + final double xMax; + final double yMin; + final double yMax; final Color pointColor; - final int divisions; ScatterPlotChart({ required this.points, + required this.xMin, required this.xMax, + required this.yMin, required this.yMax, required this.pointColor, - required this.divisions, }); @override Widget build(BuildContext context) { - // 计算向上取整后的最大值 - // double xMaxCeil = (xMax / divisions).ceil() * divisions.toDouble(); - double temp = (xMax / divisions).ceil().toDouble(); // 计算向上取整后的每个分区的最大值 - double xMaxCeil = (((temp / 100).ceil()) * 100 * (divisions)) - .toDouble(); // 向百取整并乘以 divisions - double tempy = (yMax / divisions).ceil().toDouble(); // 计算向上取整后的每个分区的最大值 - double yMaxCeil = - (((tempy / 100).ceil()) * 100 * (divisions)).toDouble(); + const double interval = 400; // 默认间隔 return SizedBox( child: ScatterChart( @@ -35,18 +30,20 @@ class ScatterPlotChart extends StatelessWidget { backgroundColor: Colors.transparent, gridData: FlGridData( show: true, - horizontalInterval: yMaxCeil / divisions, - verticalInterval: xMaxCeil / divisions, + horizontalInterval: interval, + verticalInterval: interval, getDrawingHorizontalLine: (value) { return FlLine( - color: themeController.currentColor.sc4, // 设置网格线颜色 - strokeWidth: 0.5, + color: themeController.currentColor.sc4, + strokeWidth: 1.rpx, + dashArray: [5, 5], // 设置虚线 [实线长度, 空白长度] ); }, getDrawingVerticalLine: (value) { return FlLine( - color: themeController.currentColor.sc4, // 设置网格线颜色 - strokeWidth: 0.5, + color: themeController.currentColor.sc4, + strokeWidth: 1.rpx, + dashArray: [5, 5], // 设置虚线 ); }, ), @@ -55,10 +52,14 @@ class ScatterPlotChart extends StatelessWidget { leftTitles: AxisTitles( sideTitles: SideTitles( showTitles: true, - reservedSize: 60.rpx, // 给 y 轴标签更多空间 + reservedSize: 70.rpx, + interval: 400, // 强制 400 一个刻度 getTitlesWidget: (double value, TitleMeta meta) { + // 只显示 400 的倍数 + if (value % 400 != 0) return Container(); + return Padding( - padding: EdgeInsets.only(right: 14.rpx), // 右侧加间距 + padding: EdgeInsets.only(right: 14.rpx), child: Text( value.toStringAsFixed(0), style: TextStyle( @@ -67,7 +68,7 @@ class ScatterPlotChart extends StatelessWidget { ), maxLines: 1, overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, // 右对齐 + textAlign: TextAlign.center, ), ); }, @@ -77,17 +78,17 @@ class ScatterPlotChart extends StatelessWidget { sideTitles: SideTitles( showTitles: true, getTitlesWidget: (double value, TitleMeta meta) { + // 只显示 400 的倍数 + if (value % 400 != 0) return Container(); return Text( value.toStringAsFixed(0), style: TextStyle( fontSize: 18.rpx, color: themeController.currentColor.sc4, ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, // 右对齐 ); }, + interval: 400, // 强制间隔 400 ), ), rightTitles: AxisTitles( @@ -104,21 +105,20 @@ class ScatterPlotChart extends StatelessWidget { width: 0.5, ), ), - // 修改散点的大小和颜色 scatterSpots: points.map((point) { return ScatterSpot( - point.x, // x 坐标 - point.y, // y 坐标 + point.x, + point.y, dotPainter: FlDotCirclePainter( - radius: 3.rpx, // 自定义大小 - color: pointColor, // 自定义颜色 + radius: 3.rpx, + color: pointColor, ), ); }).toList(), - minX: 0, - maxX: xMaxCeil, - minY: 0, - maxY: yMaxCeil, + minX: xMin, + maxX: xMax, + minY: yMin, + maxY: yMax, ), ), ); diff --git a/lib/pages/sleep_report/component/HeartPointWidget.dart b/lib/pages/sleep_report/component/HeartPointWidget.dart index 54e0be5..b42225a 100644 --- a/lib/pages/sleep_report/component/HeartPointWidget.dart +++ b/lib/pages/sleep_report/component/HeartPointWidget.dart @@ -152,8 +152,8 @@ class _HeartPointWidgetState extends State { height: 31.rpx, ), Padding( - padding: EdgeInsetsDirectional.fromSTEB( - 30.rpx, 0.rpx, 30.rpx, 0.rpx), + padding: + EdgeInsetsDirectional.fromSTEB(0.rpx, 0.rpx, 30.rpx, 0.rpx), child: Container( width: MediaQuery.of(context).size.width * 0.7, height: MediaQuery.of(context).size.width * 0.7, @@ -163,10 +163,14 @@ class _HeartPointWidgetState extends State { ), child: ScatterPlotChart( points: data, - xMax: maxX.toInt(), // x轴最大值 - yMax: maxY.toInt(), // y轴最大值 + // xMax: maxX.toInt(), // x轴最大值 + // yMax: maxY.toInt(), // y轴最大值 + xMax: 3000, // x轴最大值 + yMax: 3000, // y轴最大值 + xMin: 0, + yMin: 0, pointColor: stringToColor("#00C1AA"), // 点的颜色 - divisions: 7, // 刻度分割数量 + // divisions: 7, // 刻度分割数量 ), ), ), diff --git a/lib/pages/sleep_report/component/Vital_signs.dart b/lib/pages/sleep_report/component/Vital_signs.dart index d245269..3decec9 100644 --- a/lib/pages/sleep_report/component/Vital_signs.dart +++ b/lib/pages/sleep_report/component/Vital_signs.dart @@ -181,6 +181,7 @@ class _VitalSignsWidgetState extends State { 'person_show': false, 'itemName': 206, 'retrun_fresh': true, + 'reportPadding':false, }); if (widget.onRefresh != null) { widget.onRefresh!(); diff --git a/lib/pages/sleep_report/component/new_sleep_view.dart b/lib/pages/sleep_report/component/new_sleep_view.dart index d21e3e8..8d1c6e0 100644 --- a/lib/pages/sleep_report/component/new_sleep_view.dart +++ b/lib/pages/sleep_report/component/new_sleep_view.dart @@ -173,6 +173,7 @@ class _NewSleepViewWidgetState extends State { 'backgroundImg': 'assets/images/new_background.png', 'person_show': false, 'retrun_fresh': true, + 'reportPadding': false, }); if (widget.onRefresh != null) { widget.onRefresh!(); diff --git a/lib/pages/sleep_report/new_sleep_report_page.dart b/lib/pages/sleep_report/new_sleep_report_page.dart index 96717c1..9050d34 100644 --- a/lib/pages/sleep_report/new_sleep_report_page.dart +++ b/lib/pages/sleep_report/new_sleep_report_page.dart @@ -555,12 +555,14 @@ class _NewSleepReportPageState extends State { ), Obx(() { if (sleepReportController.isLoading.value) { - return Center(child:CircularProgressIndicator( - strokeWidth: 2, - valueColor: AlwaysStoppedAnimation( - themeController.currentColor.sc1, - ), - ),); + return Center( + child: CircularProgressIndicator( + strokeWidth: 2, + valueColor: AlwaysStoppedAnimation( + themeController.currentColor.sc1, + ), + ), + ); } if (sleepReport == null || sleepReport.isEmpty) { // 空数据 @@ -595,8 +597,14 @@ class _NewSleepReportPageState extends State { child: Column( children: [ Padding( - padding: - EdgeInsetsDirectional.fromSTEB(0, 30.rpx, 0, 0), + padding: EdgeInsetsDirectional.fromSTEB( + 0, + (widget.data['reportPadding'] != null && + widget.data['reportPadding'] == false) + ? 0.rpx + : 30.rpx, + 0, + 0), child: Container( width: double.infinity, constraints: BoxConstraints( @@ -852,12 +860,14 @@ class _NewSleepReportPageState extends State { ), Obx(() { if (sleepReportController.isLoading.value) { - return Center(child:CircularProgressIndicator( - strokeWidth: 2, - valueColor: AlwaysStoppedAnimation( - themeController.currentColor.sc1, - ), - ),); + return Center( + child: CircularProgressIndicator( + strokeWidth: 2, + valueColor: AlwaysStoppedAnimation( + themeController.currentColor.sc1, + ), + ), + ); } switch (sleepReportController.model.type) { case 1: