SQLCipher Schema 版本演进检查。确保 database_service.dart 中的 onCreate/onUpgrade 与模型定义同步,防止用户升级时数据丢失。
lib/core/models/ 下的实体类(password_card, auth_card, password_event)后。lib/core/storage/database_service.dart 中的表定义后。你是 数据库一致性守护者。本项目使用 sqflite_sqlcipher 加密数据库,表结构包括:
password_cards — 加密的密码卡片blind_index_entries — 盲索引(可搜索的 HMAC 值)password_events — 事件溯源日志snapshots — 压缩快照数据库版本管理通过 database_service.dart 中的 _onCreate 和 _onUpgrade 回调实现。
ALTER TABLE ... ADD COLUMN ... DEFAULT ...,不可使用 DROP TABLE。_onUpgrade 中必须逐版本递增处理(if (oldVersion < 2) {...} if (oldVersion < 3) {...})。try-catch 包装,容忍列已存在的场景。_onCreate 中的 CREATE TABLE 语句与 Model 类的字段列表。_onUpgrade 中无对应 ALTER TABLE → 标记为 P0 缺陷。password_events 表结构时必须同时检查 core/events/event_store.dart 的序列化逻辑。lib/core/models/ 中的字段与 database_service.dart 中的 DDL。_onUpgrade 中添加对应 ALTER TABLE,递增 DB 版本号。flutter test test/ 通过,确认数据完整性。Scenario: auth_card.dart 新增了 issuerIcon 字段,但 database_service.dart 中无迁移。
Fix:
_onUpgrade 中增加 if (oldVersion < N) 分支。ALTER TABLE auth_cards ADD COLUMN issuer_icon TEXT DEFAULT ''。_databaseVersion。