feat:更新目标模块

This commit is contained in:
2025-12-02 17:55:43 +08:00
parent 8a71ea542e
commit 86852cc47d
7 changed files with 207 additions and 64 deletions

View File

@@ -1,9 +1,13 @@
import 'package:fitnote/models/health.dart';
import 'package:fitnote/provider/health_provider.dart';
import 'package:fitnote/service/health_service.dart';
import 'package:fitnote/utils/record_utils.dart';
import 'package:fitnote/widget/record/common.dart';
import 'package:flutter/material.dart';
import 'package:flutter_common/widget/common_widget.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:getwidget/getwidget.dart';
import 'package:provider/provider.dart';
class GoalProgress extends StatefulWidget {
const GoalProgress({super.key});
@@ -13,8 +17,29 @@ class GoalProgress extends StatefulWidget {
}
class _GoalProgressState extends State<GoalProgress> {
final HealthService service = HealthService();
final int initWeight = 72;
final int goalWeight = 70;
final int goalTotalSpot = 600;
final int goalAvgSleep = 8;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
final provider = context.read<HealthProvider>();
provider.totalSpot = service.getTotalSport();
provider.avgSleep = service.getAvgSleep();
provider.latestWeight = service.getLatestWeight();
});
}
@override
Widget build(BuildContext context) {
final provider = context.watch<HealthProvider>();
return CommonCard(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -27,28 +52,28 @@ class _GoalProgressState extends State<GoalProgress> {
const SizedBox(height: 28),
_buildProgressItem(
title: '目标体重',
current: '65.2',
target: '60',
current: provider.latestWeight.toString(),
target: goalWeight.toString(),
unit: 'kg',
progress: 0.85,
progress: calWeightProgress(provider.latestWeight, goalWeight, initWeight),
color: RecordType.weight.color,
),
const SizedBox(height: 28),
_buildProgressItem(
title: '运动总时长',
current: '450',
target: '600',
current: provider.totalSpot.toString(),
target: goalTotalSpot.toString(),
unit: '分钟',
progress: 0.75,
progress: formatProgress(provider.totalSpot / goalTotalSpot),
color: RecordType.sport.color,
),
const SizedBox(height: 28),
_buildProgressItem(
title: '日均睡眠',
current: '7.2',
target: '8',
current: provider.avgSleep.toString(),
target: goalAvgSleep.toString(),
unit: '小时',
progress: 0.9,
progress: formatProgress(provider.avgSleep / goalAvgSleep),
color: RecordType.sleep.color,
),
],