feat:更新历史记录模块
This commit is contained in:
@@ -5,6 +5,7 @@ import 'package:fitnote/utils/record_utils.dart';
|
||||
import 'package:fitnote/widget/record/common.dart';
|
||||
import 'package:fitnote/widget/record/record_form.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_common/flutter_common.dart';
|
||||
import 'package:flutter_common/widget/common_widget.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:getwidget/getwidget.dart';
|
||||
@@ -21,16 +22,13 @@ class RecordDaily extends StatefulWidget {
|
||||
class _RecordDailyState extends State<RecordDaily> {
|
||||
final HealthService service = HealthService();
|
||||
|
||||
HealthRecord _record = HealthRecord.getEmpty(DateTime.now());
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
final provider = context.read<HealthProvider>();
|
||||
_record = service.getRecordByDate(provider.selectedDate);
|
||||
provider.initForm(HealthRecord.getEmpty(provider.selectedDate));
|
||||
provider.currentRecord = service.getRecordByDate(provider.selectedDate);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -68,6 +66,8 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
}
|
||||
|
||||
Widget _buildTodayTag() {
|
||||
final provider = context.watch<HealthProvider>();
|
||||
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
|
||||
decoration: BoxDecoration(
|
||||
@@ -75,7 +75,7 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
),
|
||||
child: Text(
|
||||
DateFormat('MM月dd日').format(DateTime.now()),
|
||||
DateFormat('MM月dd日').format(provider.selectedDate),
|
||||
style: const TextStyle(
|
||||
fontSize: 12,
|
||||
color: Color(0xFF64748B),
|
||||
@@ -86,6 +86,8 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
}
|
||||
|
||||
Widget _buildRecordListTile(RecordType type) {
|
||||
final provider = context.watch<HealthProvider>();
|
||||
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
@@ -125,7 +127,7 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
_buildRecordContent(type),
|
||||
_buildRecordContent(provider.currentRecord, type),
|
||||
],
|
||||
),
|
||||
trailing: GestureDetector(
|
||||
@@ -138,7 +140,7 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Icon(
|
||||
checkHasRecordValue(_record, type)
|
||||
checkHasRecordValue(provider.currentRecord, type)
|
||||
? FontAwesomeIcons.pencil
|
||||
: FontAwesomeIcons.plus,
|
||||
color: type.color,
|
||||
@@ -157,21 +159,23 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
|
||||
void onTapRecord(RecordType type) {
|
||||
final provider = context.read<HealthProvider>();
|
||||
provider.isEditing = checkHasRecordValue(_record, type);
|
||||
final record = provider.currentRecord;
|
||||
|
||||
provider.isEditing = checkHasRecordValue(record, type);
|
||||
provider.type = type;
|
||||
|
||||
if (provider.isEditing) {
|
||||
switch (provider.type) {
|
||||
case RecordType.weight:
|
||||
provider.updateWeight(_record.weight);
|
||||
provider.updateWeight(record.weight);
|
||||
break;
|
||||
case RecordType.sport:
|
||||
provider.updateSportProject(_record.sportProject);
|
||||
provider.updateSportDuration(_record.sportDuration);
|
||||
provider.updateSportProject(record.sportProject);
|
||||
provider.updateSportDuration(record.sportDuration);
|
||||
break;
|
||||
case RecordType.sleep:
|
||||
provider.updateSleepStartTime(_record.sleepStartTime);
|
||||
provider.updateSleepEndTime(_record.sleepEndTime);
|
||||
provider.updateSleepStartTime(record.sleepStartTime);
|
||||
provider.updateSleepEndTime(record.sleepEndTime);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@@ -256,19 +260,18 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
|
||||
void _saveRecord() async {
|
||||
final provider = context.read<HealthProvider>();
|
||||
provider.formItem.date = formatDate(provider.selectedDate);
|
||||
await service.updateRecord(provider.formItem);
|
||||
|
||||
setState(() {
|
||||
_record = service.getRecordByDate(provider.selectedDate);
|
||||
});
|
||||
provider.updateRecord(service.getRecordByDate(provider.selectedDate));
|
||||
|
||||
provider.updateLatestWeight(service.getLatestWeight());
|
||||
provider.updateTotalSpot(service.getTotalSport());
|
||||
provider.updateAvgSleep(service.getAvgSleep());
|
||||
}
|
||||
|
||||
Widget _buildRecordContent(RecordType type) {
|
||||
if (!checkHasRecordValue(_record, type)) {
|
||||
Widget _buildRecordContent(HealthRecord record, RecordType type) {
|
||||
if (!checkHasRecordValue(record, type)) {
|
||||
return Text(
|
||||
"尚未记录今日数据,点击添加",
|
||||
style: TextStyle(fontSize: 12, color: Colors.grey[500]),
|
||||
@@ -278,12 +281,12 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
late String title;
|
||||
switch (type) {
|
||||
case RecordType.weight:
|
||||
title = "${_record.weight} kg";
|
||||
title = "${record.weight} kg";
|
||||
case RecordType.sport:
|
||||
title = "${_record.sportProject} · ${_record.sportDuration}分钟";
|
||||
title = "${record.sportProject} · ${record.sportDuration}分钟";
|
||||
case RecordType.sleep:
|
||||
final startTime = _record.sleepStartTime;
|
||||
final endTime = _record.sleepEndTime;
|
||||
final startTime = record.sleepStartTime;
|
||||
final endTime = record.sleepEndTime;
|
||||
if (startTime.isNotEmpty && endTime.isNotEmpty) {
|
||||
final duration = calSleepDuration(startTime, endTime);
|
||||
title = "入睡 $startTime · 起床 $endTime · ${duration}";
|
||||
|
||||
Reference in New Issue
Block a user