基础功能

This commit is contained in:
DelLevin-Home
2026-03-05 10:06:32 +08:00
commit adad6372a3
55 changed files with 6036 additions and 0 deletions

148
lib/models/data_models.dart Normal file
View File

@@ -0,0 +1,148 @@
/// 影视条目模型
class Movie {
final String id;
final String title;
final String? poster;
final double? rating;
final int? year;
final String status; // 'watched', 'want_to_watch', 'watching'
final DateTime? watchDate;
final String? note;
Movie({
required this.id,
required this.title,
this.poster,
this.rating,
this.year,
required this.status,
this.watchDate,
this.note,
});
factory Movie.fromJson(Map<String, dynamic> json) {
return Movie(
id: json['id'] ?? '',
title: json['title'] ?? '',
poster: json['poster'],
rating: json['rating']?.toDouble(),
year: json['year'],
status: json['status'] ?? 'want_to_watch',
watchDate: json['watch_date'] != null
? DateTime.parse(json['watch_date'])
: null,
note: json['note'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'title': title,
'poster': poster,
'rating': rating,
'year': year,
'status': status,
'watch_date': watchDate?.toIso8601String(),
'note': note,
};
}
}
/// 书籍条目模型
class Book {
final String id;
final String title;
final String? author;
final String? cover;
final double? rating;
final String status; // 'read', 'reading', 'want_to_read'
final DateTime? readDate;
final String? note;
Book({
required this.id,
required this.title,
this.author,
this.cover,
this.rating,
required this.status,
this.readDate,
this.note,
});
factory Book.fromJson(Map<String, dynamic> json) {
return Book(
id: json['id'] ?? '',
title: json['title'] ?? '',
author: json['author'],
cover: json['cover'],
rating: json['rating']?.toDouble(),
status: json['status'] ?? 'want_to_read',
readDate: json['read_date'] != null
? DateTime.parse(json['read_date'])
: null,
note: json['note'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'title': title,
'author': author,
'cover': cover,
'rating': rating,
'status': status,
'read_date': readDate?.toIso8601String(),
'note': note,
};
}
}
/// 笔记模型
class Note {
final String id;
final String title;
final String content;
final List<String> tags;
final DateTime createdAt;
final DateTime updatedAt;
Note({
required this.id,
required this.title,
required this.content,
this.tags = const [],
required this.createdAt,
required this.updatedAt,
});
factory Note.fromJson(Map<String, dynamic> json) {
return Note(
id: json['id'] ?? '',
title: json['title'] ?? '',
content: json['content'] ?? '',
tags: json['tags'] != null
? List<String>.from(json['tags'])
: [],
createdAt: json['created_at'] != null
? DateTime.parse(json['created_at'])
: DateTime.now(),
updatedAt: json['updated_at'] != null
? DateTime.parse(json['updated_at'])
: DateTime.now(),
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'title': title,
'content': content,
'tags': tags,
'created_at': createdAt.toIso8601String(),
'updated_at': updatedAt.toIso8601String(),
};
}
}

View File

@@ -0,0 +1,78 @@
/// 数据模型扩展 - 添加 copyWith 方法以便更新数据
library;
import 'data_models.dart';
/// Movie 扩展 - 添加 copyWith 方法
extension MovieExtension on Movie {
/// 创建副本并允许修改部分属性
Movie copyWith({
String? id,
String? title,
String? poster,
double? rating,
int? year,
String? status,
DateTime? watchDate,
String? note,
}) {
return Movie(
id: id ?? this.id,
title: title ?? this.title,
poster: poster ?? this.poster,
rating: rating ?? this.rating,
year: year ?? this.year,
status: status ?? this.status,
watchDate: watchDate ?? this.watchDate,
note: note ?? this.note,
);
}
}
/// Book 扩展 - 添加 copyWith 方法
extension BookExtension on Book {
/// 创建副本并允许修改部分属性
Book copyWith({
String? id,
String? title,
String? author,
String? cover,
double? rating,
String? status,
DateTime? readDate,
String? note,
}) {
return Book(
id: id ?? this.id,
title: title ?? this.title,
author: author ?? this.author,
cover: cover ?? this.cover,
rating: rating ?? this.rating,
status: status ?? this.status,
readDate: readDate ?? this.readDate,
note: note ?? this.note,
);
}
}
/// Note 扩展 - 添加 copyWith 方法
extension NoteExtension on Note {
/// 创建副本并允许修改部分属性
Note copyWith({
String? id,
String? title,
String? content,
List<String>? tags,
DateTime? createdAt,
DateTime? updatedAt,
}) {
return Note(
id: id ?? this.id,
title: title ?? this.title,
content: content ?? this.content,
tags: tags ?? this.tags,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
);
}
}