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()); Hive.registerAdapter(HealthRecordAdapter());
final healthsBox = await Hive.openBox<HealthRecord>('healths'); final healthsBox = await Hive.openBox<HealthRecord>('healths');
healthsBox.clear(); // healthsBox.clear();
// await Hive.deleteBoxFromDisk('healths'); // await Hive.deleteBoxFromDisk('healths');
runApp( runApp(

View File

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

View File

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

View File

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

View File

@@ -33,6 +33,8 @@ class _GoalProgressState extends State<GoalProgress> {
provider.totalSpot = service.getTotalSport(); provider.totalSpot = service.getTotalSport();
provider.avgSleep = service.getAvgSleep(); provider.avgSleep = service.getAvgSleep();
provider.latestWeight = service.getLatestWeight(); 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> { class _RecordDailyState extends State<RecordDaily> {
final HealthService service = HealthService(); final HealthService service = HealthService();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
final provider = context.read<HealthProvider>();
provider.currentRecord = service.getRecordByDate(provider.selectedDate);
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return CommonCard( return CommonCard(
@@ -260,8 +250,17 @@ class _RecordDailyState extends State<RecordDaily> {
void _saveRecord() async { void _saveRecord() async {
final provider = context.read<HealthProvider>(); 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)); provider.updateRecord(service.getRecordByDate(provider.selectedDate));