feat:增加历史记录
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter_common/flutter_common.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
|
||||
@@ -38,7 +39,7 @@ class HealthRecord extends HiveObject {
|
||||
required this.date,
|
||||
});
|
||||
|
||||
static HealthRecord getEmpty(String date) {
|
||||
static HealthRecord getEmpty(DateTime date) {
|
||||
return HealthRecord(
|
||||
id: DateTime.now().millisecondsSinceEpoch ~/ 1000,
|
||||
sportProject: '',
|
||||
@@ -46,7 +47,7 @@ class HealthRecord extends HiveObject {
|
||||
weight: 0,
|
||||
sleepStartTime: '',
|
||||
sleepEndTime: '',
|
||||
date: date,
|
||||
date: formatDate(date),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
import 'package:fitnote/provider/health_provider.dart';
|
||||
import 'package:fitnote/service/health_service.dart';
|
||||
import 'package:fitnote/widget/record/record_daily.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_common/widget/common_widget.dart';
|
||||
import 'package:table_calendar/table_calendar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class HistoryPage extends StatefulWidget {
|
||||
const HistoryPage({super.key});
|
||||
@@ -8,8 +14,61 @@ class HistoryPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _HistoryPageState extends State<HistoryPage> {
|
||||
final HealthService service = HealthService();
|
||||
|
||||
TableCalendar _calendar() {
|
||||
final provider = context.watch<HealthProvider>();
|
||||
|
||||
return TableCalendar(
|
||||
locale: 'zh_CN',
|
||||
headerStyle: const HeaderStyle(
|
||||
headerPadding: EdgeInsets.symmetric(vertical: 0),
|
||||
formatButtonVisible: false,
|
||||
titleCentered: true,
|
||||
),
|
||||
firstDay: DateTime.utc(2010, 1, 1),
|
||||
lastDay: DateTime.utc(2100, 12, 31),
|
||||
focusedDay: provider.selectedDate,
|
||||
selectedDayPredicate: (day) => isSameDay(provider.selectedDate, day),
|
||||
onDaySelected: (selectedDay, focusedDay) {
|
||||
if (!isSameDay(provider.selectedDate, selectedDay)) {
|
||||
setState(() {
|
||||
provider.selectedDate = selectedDay;
|
||||
provider.focusedDate = focusedDay;
|
||||
// provider.updateRecord(service.getRecordByDate(provider.selectedDate));
|
||||
// provider.refreshSelectRecord();
|
||||
});
|
||||
}
|
||||
},
|
||||
onPageChanged: (focusedDay) {
|
||||
provider.focusedDate = focusedDay;
|
||||
// provider.refreshRecordList();
|
||||
},
|
||||
// 自定义日期单元格构建器
|
||||
// calendarBuilders: CalendarBuilders(
|
||||
// defaultBuilder:
|
||||
// (context, day, focusedDay) =>
|
||||
// _buildDateItem(day, false, false, provider),
|
||||
// selectedBuilder:
|
||||
// (context, day, focusedDay) =>
|
||||
// _buildDateItem(day, true, false, provider),
|
||||
// todayBuilder:
|
||||
// (context, day, focusedDay) =>
|
||||
// _buildDateItem(day, false, true, provider),
|
||||
// ),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Center(child: Text('历史记录'));
|
||||
return SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
CommonCard(child: _calendar()),
|
||||
const SizedBox(height: 24),
|
||||
RecordDaily(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,8 @@ import 'package:flutter_common/flutter_common.dart';
|
||||
|
||||
class HealthProvider with ChangeNotifier {
|
||||
late HealthRecord formItem;
|
||||
String date = formatDate(DateTime.now());
|
||||
DateTime selectedDate = DateTime.now();
|
||||
DateTime focusedDate = DateTime.now();
|
||||
RecordType type = RecordType.weight;
|
||||
bool isEditing = false;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:fitnote/models/health.dart';
|
||||
import 'package:fitnote/utils/record_utils.dart';
|
||||
import 'package:flutter_common/flutter_common.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
|
||||
class HealthService {
|
||||
@@ -20,9 +21,9 @@ class HealthService {
|
||||
return box.values.toList();
|
||||
}
|
||||
|
||||
HealthRecord getAllRecordByDate(String date) {
|
||||
HealthRecord getRecordByDate(DateTime date) {
|
||||
final record = box.values.toList().firstWhere(
|
||||
(item) => item.date == date,
|
||||
(item) => item.date == formatDate(date),
|
||||
orElse: () => HealthRecord.getEmpty(date),
|
||||
);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ class RecordDaily extends StatefulWidget {
|
||||
class _RecordDailyState extends State<RecordDaily> {
|
||||
final HealthService service = HealthService();
|
||||
|
||||
HealthRecord _record = HealthRecord.getEmpty('');
|
||||
HealthRecord _record = HealthRecord.getEmpty(DateTime.now());
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -29,8 +29,8 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
final provider = context.read<HealthProvider>();
|
||||
_record = service.getAllRecordByDate(provider.date);
|
||||
provider.initForm(HealthRecord.getEmpty(provider.date));
|
||||
_record = service.getRecordByDate(provider.selectedDate);
|
||||
provider.initForm(HealthRecord.getEmpty(provider.selectedDate));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -259,7 +259,7 @@ class _RecordDailyState extends State<RecordDaily> {
|
||||
await service.updateRecord(provider.formItem);
|
||||
|
||||
setState(() {
|
||||
_record = service.getAllRecordByDate(provider.date);
|
||||
_record = service.getRecordByDate(provider.selectedDate);
|
||||
});
|
||||
|
||||
provider.updateLatestWeight(service.getLatestWeight());
|
||||
|
||||
16
pubspec.lock
16
pubspec.lock
@@ -817,6 +817,14 @@ packages:
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
simple_gesture_detector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: simple_gesture_detector
|
||||
sha256: ba2cd5af24ff20a0b8d609cec3f40e5b0744d2a71804a2616ae086b9c19d19a3
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.2.1"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@@ -894,6 +902,14 @@ packages:
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "30.2.7"
|
||||
table_calendar:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: table_calendar
|
||||
sha256: b2896b7c86adf3a4d9c911d860120fe3dbe03c85db43b22fd61f14ee78cdbb63
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "3.1.3"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -1 +1 @@
|
||||
name: fitnote
|
||||
name: fitnote
|
||||
Reference in New Issue
Block a user