feat:增加数据存储
This commit is contained in:
82
lib/models/health.dart
Normal file
82
lib/models/health.dart
Normal file
@@ -0,0 +1,82 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
|
||||
// flutter packages pub run build_runner build
|
||||
part 'health.g.dart';
|
||||
|
||||
@HiveType(typeId: 0)
|
||||
class HealthRecord extends HiveObject {
|
||||
@HiveField(0)
|
||||
int id;
|
||||
|
||||
@HiveField(1)
|
||||
String sportProject;
|
||||
|
||||
@HiveField(2)
|
||||
num sportDuration;
|
||||
|
||||
@HiveField(3)
|
||||
num weight;
|
||||
|
||||
@HiveField(4)
|
||||
String sleepStartTime;
|
||||
|
||||
@HiveField(5)
|
||||
String sleepEndTime;
|
||||
|
||||
@HiveField(6)
|
||||
num sleepDuration;
|
||||
|
||||
@HiveField(7)
|
||||
String date;
|
||||
|
||||
HealthRecord({
|
||||
required this.id,
|
||||
required this.sportProject,
|
||||
required this.sportDuration,
|
||||
required this.weight,
|
||||
required this.sleepStartTime,
|
||||
required this.sleepEndTime,
|
||||
required this.sleepDuration,
|
||||
required this.date,
|
||||
});
|
||||
|
||||
static HealthRecord getEmpty() {
|
||||
return HealthRecord(
|
||||
id: DateTime.now().millisecondsSinceEpoch ~/ 1000,
|
||||
sportProject: '',
|
||||
sportDuration: 0,
|
||||
weight: 0,
|
||||
sleepStartTime: '',
|
||||
sleepEndTime: '',
|
||||
sleepDuration: 0,
|
||||
date: '',
|
||||
);
|
||||
}
|
||||
|
||||
static HealthRecord getDefault() {
|
||||
return HealthRecord(
|
||||
id: DateTime.now().millisecondsSinceEpoch ~/ 1000,
|
||||
sportProject: '跑步',
|
||||
sportDuration: 30,
|
||||
weight: 70,
|
||||
sleepStartTime: '',
|
||||
sleepEndTime: '',
|
||||
sleepDuration: 0,
|
||||
date: '',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
enum RecordType {
|
||||
weight('体重', FontAwesomeIcons.weightScale, Color(0xFFF59E0B)),
|
||||
sport('运动', FontAwesomeIcons.personRunning, Color(0xFF38BDF8)),
|
||||
sleep('睡眠', FontAwesomeIcons.moon, Color(0xFF10B981));
|
||||
|
||||
final String title;
|
||||
final IconData icon;
|
||||
final Color color;
|
||||
|
||||
const RecordType(this.title, this.icon, this.color);
|
||||
}
|
||||
62
lib/models/health.g.dart
Normal file
62
lib/models/health.g.dart
Normal file
@@ -0,0 +1,62 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'health.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class HealthRecordAdapter extends TypeAdapter<HealthRecord> {
|
||||
@override
|
||||
final int typeId = 0;
|
||||
|
||||
@override
|
||||
HealthRecord read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return HealthRecord(
|
||||
id: fields[0] as int,
|
||||
sportProject: fields[1] as String,
|
||||
sportDuration: fields[2] as num,
|
||||
weight: fields[3] as num,
|
||||
sleepStartTime: fields[4] as String,
|
||||
sleepEndTime: fields[5] as String,
|
||||
sleepDuration: fields[6] as num,
|
||||
date: fields[7] as String,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, HealthRecord obj) {
|
||||
writer
|
||||
..writeByte(8)
|
||||
..writeByte(0)
|
||||
..write(obj.id)
|
||||
..writeByte(1)
|
||||
..write(obj.sportProject)
|
||||
..writeByte(2)
|
||||
..write(obj.sportDuration)
|
||||
..writeByte(3)
|
||||
..write(obj.weight)
|
||||
..writeByte(4)
|
||||
..write(obj.sleepStartTime)
|
||||
..writeByte(5)
|
||||
..write(obj.sleepEndTime)
|
||||
..writeByte(6)
|
||||
..write(obj.sleepDuration)
|
||||
..writeByte(7)
|
||||
..write(obj.date);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is HealthRecordAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
||||
27
lib/models/menu.dart
Normal file
27
lib/models/menu.dart
Normal file
@@ -0,0 +1,27 @@
|
||||
import 'package:fitnote/pages/history_page.dart';
|
||||
import 'package:fitnote/pages/record_page.dart';
|
||||
import 'package:fitnote/pages/setting_page.dart';
|
||||
import 'package:fitnote/pages/stats_page.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class PageInfo {
|
||||
final String title;
|
||||
final IconData icon;
|
||||
final Widget page;
|
||||
|
||||
const PageInfo({required this.title, required this.icon, required this.page});
|
||||
}
|
||||
|
||||
final List<PageInfo> pages = [
|
||||
PageInfo(title: '记录', icon: Icons.article, page: RecordPage()),
|
||||
PageInfo(title: '历史', icon: Icons.history, page: HistoryPage()),
|
||||
PageInfo(title: '统计', icon: Icons.insert_chart, page: StatsPage()),
|
||||
PageInfo(title: '设置', icon: Icons.settings, page: SettingPage()),
|
||||
];
|
||||
|
||||
final List<Widget> pageWidgets = pages.map((item) => item.page).toList();
|
||||
|
||||
final List<BottomNavigationBarItem> bottomNavItems =
|
||||
pages.map((page) {
|
||||
return BottomNavigationBarItem(icon: Icon(page.icon), label: page.title);
|
||||
}).toList();
|
||||
Reference in New Issue
Block a user