fix:修复更新记录失败的问题
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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(),
|
||||
),
|
||||
|
||||
@@ -25,7 +25,6 @@ class _RecordPageState extends State<RecordPage> {
|
||||
return weekdays[weekday - 1];
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SingleChildScrollView(
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -21,17 +21,7 @@ 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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user