You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中sqflite更新后putOffCount值短暂生效后恢复原值问题

问题分析与解决方案

核心问题排查

你遇到的putOffCount短暂变为19后恢复为0的问题,大概率是以下两个原因导致:

  1. 更新操作未生效:如果entry.id为null,update语句的where: 'id = ?'条件无法匹配任何数据库行,导致数据库中的数据根本没被修改。后续页面重新加载数据时,就会把putOffCount重置为原来的0。
  2. 状态未同步最新数据:仅调用setState(() {})刷新UI,依赖本地entry对象的修改展示数据,但如果页面其他逻辑(比如生命周期回调、状态管理)重新从数据库拉取数据,会覆盖本地修改的值。

具体修复步骤

1. 确保更新操作能命中目标行

在updateMemo方法中添加断言和日志,验证更新是否生效:

Future<void> updateMemo(Memo memo) async {
  // 断言确保memo.id不为null,否则直接抛出错误
  assert(memo.id != null, "要更新的Memo必须有有效id");
  final db = await database;
  // 获取受影响的行数,确认是否有数据被更新
  int affectedRows = await db.update(
    'memos',
    memo.toMap(),
    where: 'id = ?',
    whereArgs: [memo.id],
  );
  print("更新了$affectedRows行数据"); // 如果打印0,说明id无效或无匹配行
}

2. 更新后同步数据库最新数据

修改按钮的点击逻辑,更新完成后从数据库重新获取最新的Memo对象,再更新状态:

TextButton(
  child: Text("Change"),
  onPressed: () async {
    entry.putOffCount = 19;
    await _databaseService.updateMemo(entry);
    // 从数据库获取最新的entry数据
    final updatedEntry = await _databaseService.getMemoById(entry.id!);
    setState(() {
      entry = updatedEntry; // 用数据库最新数据替换本地对象
    });
  },
),

需要给DatabaseService添加根据id查询的方法:

Future<Memo> getMemoById(int id) async {
  final db = await database;
  final result = await db.query(
    'memos',
    where: 'id = ?',
    whereArgs: [id],
  );
  return Memo.fromMap(result.first);
}

3. 验证数据转换逻辑

检查Memo.fromMap中putOffCount的解析逻辑,确保数据库返回的数值能正确转换:

putOffCount: (map['putOffCount'] ?? 0) is int 
    ? map['putOffCount'] 
    : int.tryParse(map['putOffCount'].toString()) ?? 0,

4. 确认数据库表结构

确保memos表的putOffCount字段是整数类型,避免类型不匹配导致的赋值错误:

CREATE TABLE memos (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  title TEXT NOT NULL,
  description TEXT NOT NULL,
  createdDate TEXT NOT NULL,
  targetDate TEXT NOT NULL,
  putOffCount INTEGER DEFAULT 0 -- 明确字段类型和默认值
);

验证方法

  1. 点击按钮后查看控制台打印的更新了X行数据,如果X为1说明更新生效;如果为0,检查entry.id是否为有效数值。
  2. 更新完成后打印updatedEntry.putOffCount,确认数值是否为19。

内容的提问来源于stack exchange,提问作者Matthew Wallace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:27:11