fix:修复更新记录失败的问题
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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(),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user