feat:增加历史记录
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter_common/flutter_common.dart';
|
||||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
|
|
||||||
@@ -38,7 +39,7 @@ class HealthRecord extends HiveObject {
|
|||||||
required this.date,
|
required this.date,
|
||||||
});
|
});
|
||||||
|
|
||||||
static HealthRecord getEmpty(String date) {
|
static HealthRecord getEmpty(DateTime date) {
|
||||||
return HealthRecord(
|
return HealthRecord(
|
||||||
id: DateTime.now().millisecondsSinceEpoch ~/ 1000,
|
id: DateTime.now().millisecondsSinceEpoch ~/ 1000,
|
||||||
sportProject: '',
|
sportProject: '',
|
||||||
@@ -46,7 +47,7 @@ class HealthRecord extends HiveObject {
|
|||||||
weight: 0,
|
weight: 0,
|
||||||
sleepStartTime: '',
|
sleepStartTime: '',
|
||||||
sleepEndTime: '',
|
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/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 {
|
class HistoryPage extends StatefulWidget {
|
||||||
const HistoryPage({super.key});
|
const HistoryPage({super.key});
|
||||||
@@ -8,8 +14,61 @@ class HistoryPage extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _HistoryPageState extends State<HistoryPage> {
|
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
|
@override
|
||||||
Widget build(BuildContext context) {
|
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 {
|
class HealthProvider with ChangeNotifier {
|
||||||
late HealthRecord formItem;
|
late HealthRecord formItem;
|
||||||
String date = formatDate(DateTime.now());
|
DateTime selectedDate = DateTime.now();
|
||||||
|
DateTime focusedDate = DateTime.now();
|
||||||
RecordType type = RecordType.weight;
|
RecordType type = RecordType.weight;
|
||||||
bool isEditing = false;
|
bool isEditing = false;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:fitnote/models/health.dart';
|
import 'package:fitnote/models/health.dart';
|
||||||
import 'package:fitnote/utils/record_utils.dart';
|
import 'package:fitnote/utils/record_utils.dart';
|
||||||
|
import 'package:flutter_common/flutter_common.dart';
|
||||||
import 'package:hive_flutter/hive_flutter.dart';
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
|
|
||||||
class HealthService {
|
class HealthService {
|
||||||
@@ -20,9 +21,9 @@ class HealthService {
|
|||||||
return box.values.toList();
|
return box.values.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
HealthRecord getAllRecordByDate(String date) {
|
HealthRecord getRecordByDate(DateTime date) {
|
||||||
final record = box.values.toList().firstWhere(
|
final record = box.values.toList().firstWhere(
|
||||||
(item) => item.date == date,
|
(item) => item.date == formatDate(date),
|
||||||
orElse: () => HealthRecord.getEmpty(date),
|
orElse: () => HealthRecord.getEmpty(date),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class RecordDaily extends StatefulWidget {
|
|||||||
class _RecordDailyState extends State<RecordDaily> {
|
class _RecordDailyState extends State<RecordDaily> {
|
||||||
final HealthService service = HealthService();
|
final HealthService service = HealthService();
|
||||||
|
|
||||||
HealthRecord _record = HealthRecord.getEmpty('');
|
HealthRecord _record = HealthRecord.getEmpty(DateTime.now());
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -29,8 +29,8 @@ class _RecordDailyState extends State<RecordDaily> {
|
|||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
final provider = context.read<HealthProvider>();
|
final provider = context.read<HealthProvider>();
|
||||||
_record = service.getAllRecordByDate(provider.date);
|
_record = service.getRecordByDate(provider.selectedDate);
|
||||||
provider.initForm(HealthRecord.getEmpty(provider.date));
|
provider.initForm(HealthRecord.getEmpty(provider.selectedDate));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +259,7 @@ class _RecordDailyState extends State<RecordDaily> {
|
|||||||
await service.updateRecord(provider.formItem);
|
await service.updateRecord(provider.formItem);
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_record = service.getAllRecordByDate(provider.date);
|
_record = service.getRecordByDate(provider.selectedDate);
|
||||||
});
|
});
|
||||||
|
|
||||||
provider.updateLatestWeight(service.getLatestWeight());
|
provider.updateLatestWeight(service.getLatestWeight());
|
||||||
|
|||||||
16
pubspec.lock
16
pubspec.lock
@@ -817,6 +817,14 @@ packages:
|
|||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
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:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -894,6 +902,14 @@ packages:
|
|||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "30.2.7"
|
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:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
name: fitnote
|
name: fitnote
|
||||||
Reference in New Issue
Block a user