fix:修复更新记录失败的问题

This commit is contained in:
2025-12-02 22:21:38 +08:00
parent b3bb3378c3
commit e2853483f7
6 changed files with 42 additions and 24 deletions

View File

@@ -14,7 +14,7 @@ void main() async {
Hive.registerAdapter(HealthRecordAdapter());
final healthsBox = await Hive.openBox<HealthRecord>('healths');
healthsBox.clear();
// healthsBox.clear();
// await Hive.deleteBoxFromDisk('healths');
runApp(

View File

@@ -1,6 +1,9 @@
import 'package:fitnote/layout/app_navbar.dart';
import 'package:fitnote/models/menu.dart';
import 'package:fitnote/provider/health_provider.dart';
import 'package:fitnote/service/health_service.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@@ -28,7 +31,8 @@ class _HomePageState extends State<HomePage> {
Widget _buildLeading() {
return Builder(
builder:
(context) => IconButton(
(context) =>
IconButton(
icon: Icon(Icons.menu, color: Colors.white),
onPressed: () => Scaffold.of(context).openDrawer(),
),
@@ -47,6 +51,9 @@ class _HomePageState extends State<HomePage> {
controller: _pageController,
onPageChanged: (index) {
setState(() {
if (index == 0) {
_refreshRecord();
}
_currentPageIndex = index;
});
},
@@ -54,6 +61,13 @@ class _HomePageState extends State<HomePage> {
);
}
void _refreshRecord() {
final HealthService service = HealthService();
final provider = context.read<HealthProvider>();
provider.updateSelectDate(DateTime.now());
provider.updateRecord(service.getRecordByDate(provider.selectedDate));
}
void _onTapNavbarItem(int index) {
setState(() {
_currentPageIndex = index;
@@ -82,7 +96,10 @@ class _HomePageState extends State<HomePage> {
return Scaffold(
appBar: AppBar(
title: _buildAppBarTitle(),
backgroundColor: Theme.of(context).colorScheme.primary,
backgroundColor: Theme
.of(context)
.colorScheme
.primary,
elevation: 0,
leading: _buildLeading(),
),

View File

@@ -25,7 +25,6 @@ class _RecordPageState extends State<RecordPage> {
return weekdays[weekday - 1];
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(

View File

@@ -93,18 +93,19 @@ class HealthService {
Future<bool> updateRecord(HealthRecord record) async {
try {
print(record.date);
final existingRecords =
box.values.where((item) => item.date == record.date).toList();
final existingRecords = box.values.toList();
final index = existingRecords.indexWhere((item) => item.date == record.date);
if (existingRecords.isEmpty) {
await addRecord(record);
if (index == -1) {
await box.add(record);
} else {
await record.save();
final key = box.keyAt(index);
await box.put(key, record);
}
return true;
} catch (e) {
print(e.toString());
print('Update record error: $e');
return false;
}
}

View File

@@ -33,6 +33,8 @@ class _GoalProgressState extends State<GoalProgress> {
provider.totalSpot = service.getTotalSport();
provider.avgSleep = service.getAvgSleep();
provider.latestWeight = service.getLatestWeight();
provider.updateRecord(service.getRecordByDate(provider.selectedDate));
});
}

View File

@@ -22,16 +22,6 @@ class RecordDaily extends StatefulWidget {
class _RecordDailyState extends State<RecordDaily> {
final HealthService service = HealthService();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
final provider = context.read<HealthProvider>();
provider.currentRecord = service.getRecordByDate(provider.selectedDate);
});
}
@override
Widget build(BuildContext context) {
return CommonCard(
@@ -260,8 +250,17 @@ class _RecordDailyState extends State<RecordDaily> {
void _saveRecord() async {
final provider = context.read<HealthProvider>();
provider.formItem.date = formatDate(provider.selectedDate);
await service.updateRecord(provider.formItem);
final newRecord = HealthRecord(
date: formatDate(provider.selectedDate),
weight: provider.formItem.weight,
sportProject: provider.formItem.sportProject,
sportDuration: provider.formItem.sportDuration,
sleepStartTime: provider.formItem.sleepStartTime,
sleepEndTime: provider.formItem.sleepEndTime,
);
await service.updateRecord(newRecord);
provider.updateRecord(service.getRecordByDate(provider.selectedDate));