diff --git a/lib/data/models/operation.dart b/lib/data/models/operation.dart index 9d5c61e..cbe081d 100644 --- a/lib/data/models/operation.dart +++ b/lib/data/models/operation.dart @@ -12,7 +12,7 @@ enum Operation { /// Operation 枚举的扩展方法 extension OperationExtension on Operation { /// 获取操作的中文名 - String get name { + String get displayName { switch (this) { case Operation.create: return '创建'; diff --git a/lib/data/models/problem_model.dart b/lib/data/models/problem_model.dart index 55cad6c..4d6b79d 100644 --- a/lib/data/models/problem_model.dart +++ b/lib/data/models/problem_model.dart @@ -93,7 +93,7 @@ class Problem { 'operation': operation.index, // 增加对 operation 字段的序列化 'censorTaskId': censorTaskId, 'bindData': bindData, - 'isChecked': isChecked, // 增加对 isChecked 字段的序列化 + 'isChecked': isChecked ? 1 : 0, // 增加对 isChecked 字段的序列化 }; } @@ -117,7 +117,7 @@ class Problem { : Operation.create, // 兼容旧数据 censorTaskId: map['censorTaskId'], bindData: map['bindData'], - isChecked: map['isChecked'] as bool? ?? false, // 增加对 isChecked 字段的反序列化 + isChecked: (map['isChecked'] as int) == 1, // 增加对 isChecked 字段的反序列化 ); } } diff --git a/lib/data/providers/sqlite_provider.dart b/lib/data/providers/sqlite_provider.dart index c79c3e7..5af096c 100644 --- a/lib/data/providers/sqlite_provider.dart +++ b/lib/data/providers/sqlite_provider.dart @@ -13,6 +13,9 @@ class SQLiteProvider extends GetxService { static const String _dbName = 'problems.db'; static const String _tableName = 'problems'; + /// 数据库版本号,用于处理表结构升级。 + static const int _dbVersion = 1; + /// 私有数据库实例,仅在服务内部访问。 late Database _database; @@ -23,21 +26,26 @@ class SQLiteProvider extends GetxService { _initDatabase(); } - /// 异步初始化数据库连接。如果数据库不存在,则会创建它。 + /// 异步初始化数据库连接。如果数据库不存在,则会创建它;如果版本过旧,则会升级。 Future _initDatabase() async { try { final databasePath = await getDatabasesPath(); final path = join(databasePath, _dbName); - _database = await openDatabase(path, version: 1, onCreate: _onCreate); + _database = await openDatabase( + path, + version: _dbVersion, + onCreate: _onCreate, + onUpgrade: _onUpgrade, // 新增:处理数据库版本升级 + ); } catch (e) { // 在这里添加日志记录,例如 Get.log('数据库初始化失败:$e'); + Get.log('数据库初始化失败:$e', isError: true); rethrow; } } /// 数据库创建时的回调函数,用于定义表结构。 - /// **注意**:这里新增了 `operation` 和 `isChecked` 两个字段。 Future _onCreate(Database db, int version) async { await db.execute(''' CREATE TABLE $_tableName( @@ -47,14 +55,29 @@ class SQLiteProvider extends GetxService { imageUrls TEXT NOT NULL, creationTime INTEGER NOT NULL, syncStatus INTEGER NOT NULL, - operation INTEGER NOT NULL, -- 新增:问题操作类型 + operation INTEGER NOT NULL, censorTaskId TEXT, bindData TEXT, - isChecked INTEGER NOT NULL -- 新增:问题是否已检查(SQLite 用 INTEGER 表示布尔值) + isChecked INTEGER NOT NULL ) '''); } + /// 数据库版本升级时的回调函数。 + /// 用于在应用更新后,向现有数据库中添加新的列,而不会丢失数据。 + Future _onUpgrade(Database db, int oldVersion, int newVersion) async { + Get.log('正在将数据库从版本 $oldVersion 升级到 $newVersion...'); + if (oldVersion < 2) { + // 示例:从版本 1 升级到版本 2,添加一个新的列 'newColumn' + // await db.execute('ALTER TABLE $_tableName ADD COLUMN newColumn TEXT;'); + // Get.log('已添加新列: newColumn'); + } + // if (oldVersion < 3) { + // ... + // } + Get.log('数据库升级完成。'); + } + // --- /// **数据操作 (CRUD) 方法** @@ -74,7 +97,7 @@ class SQLiteProvider extends GetxService { conflictAlgorithm: ConflictAlgorithm.replace, ); } catch (e) { - // 可以添加日志记录 + Get.log('插入问题失败:$e', isError: true); return 0; // 返回 0 表示插入失败 } } @@ -91,7 +114,7 @@ class SQLiteProvider extends GetxService { whereArgs: [id], ); } catch (e) { - // 可以添加日志记录 + Get.log('删除问题(ID: $id)失败:$e', isError: true); return 0; } } @@ -109,7 +132,7 @@ class SQLiteProvider extends GetxService { whereArgs: [problem.id], ); } catch (e) { - // 可以添加日志记录 + Get.log('更新问题(ID: ${problem.id})失败:$e', isError: true); return 0; } } @@ -131,7 +154,7 @@ class SQLiteProvider extends GetxService { } return null; } catch (e) { - // 可以添加日志记录 + Get.log('获取问题(ID: $id)失败:$e', isError: true); return null; } } @@ -181,7 +204,7 @@ class SQLiteProvider extends GetxService { return maps.map((json) => Problem.fromMap(json)).toList(); } catch (e) { - // 可以添加日志记录 + Get.log('获取问题列表失败:$e', isError: true); return []; } }