- 8b-D01: Isar 添加 authorId+dateEpoch 复合索引和 dateEpoch 单独索引 - 8b-D02: getJournals 分页改为 DB 层 .offset().limit() 替代 Dart 层 sublist - 8b-D03: home_bloc monthCount 改用日期范围独立查询(不受分页限制) - 8b-M02: 笔画光栅化改为 BBox 裁剪 — 短笔画不再创建全画布尺寸图像 - _CacheEntry 增加 offset 字段记录 BBox 偏移 - _rasterizeStroke 计算包围盒 + 4px padding - _compositeIncremental 使用 offset 定位 - 8b-N01: SyncEngine enqueue 合并同一资源的操作 - create+update → create(最新数据) - update+update → update(最新数据) - update+delete → delete - create+delete → 取消(不发送) - 注意: Isar .g.dart 需运行 build_runner 重新生成
66 lines
1.5 KiB
Dart
66 lines
1.5 KiB
Dart
// 日记条目 Isar Collection — 本地持久化存储
|
||
//
|
||
// 与纯 Dart 模型 JournalEntry 分离,通过转换函数桥接。
|
||
// 业务 ID (String UUID) 作为索引字段,Isar 主键用 autoIncrement。
|
||
|
||
import 'package:isar/isar.dart';
|
||
|
||
part 'journal_entry_collection.g.dart';
|
||
|
||
@collection
|
||
class JournalEntryCollection {
|
||
/// Isar 自增主键
|
||
Id isarId = Isar.autoIncrement;
|
||
|
||
/// 业务 UUID(索引,用于查找)
|
||
@Index()
|
||
String id = '';
|
||
|
||
/// 作者 ID(索引 + 组合索引 authorId+dateEpoch,覆盖按作者查询并按日期排序的场景)
|
||
@Index(composite: [CompositeIndex('dateEpoch')])
|
||
String authorId = '';
|
||
|
||
/// 班级 ID(可选)
|
||
String? classId;
|
||
|
||
/// 日记标题
|
||
String title = '';
|
||
|
||
/// 日记日期(epoch milliseconds)— 单独索引支持日期范围查询
|
||
@Index()
|
||
int dateEpoch = 0;
|
||
|
||
/// 心情(enum → string)
|
||
String mood = 'calm';
|
||
|
||
/// 天气(enum → string)
|
||
String weather = 'sunny';
|
||
|
||
/// 标签列表(JSON String)
|
||
String tagsJson = '[]';
|
||
|
||
/// 是否私密
|
||
bool isPrivate = true;
|
||
|
||
/// 是否分享到班级
|
||
bool sharedToClass = false;
|
||
|
||
/// 关联主题 ID(可选)
|
||
String? assignedTopicId;
|
||
|
||
/// 内容摘要(自动从文本元素提取)
|
||
String? contentExcerpt;
|
||
|
||
/// 版本号(乐观锁)
|
||
int version = 1;
|
||
|
||
/// 创建时间(epoch milliseconds)
|
||
int createdAtEpoch = 0;
|
||
|
||
/// 更新时间(epoch milliseconds)
|
||
int updatedAtEpoch = 0;
|
||
|
||
/// 软删除标记
|
||
bool isDeleted = false;
|
||
}
|