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

Flutter项目中SQLite数据库数据无法删除问题求助

Flutter SQLite 删除失败+空值错误排查与修复

问题根源分析

  1. 空值错误直接诱因:删除时你新建了DateModel(dateText: date.dateList[index]),这个实例的id为null,用dateModel.id!强制解包必然触发空值检查错误。
  2. 数据关联缺失:getDates()仅查询dateText字段,未获取数据库自动生成的id,导致前端列表无法对应数据库中的唯一记录。
  3. 列表数据结构不匹配:dateList存储的是纯字符串而非DateModel对象,添加数据时丢失了数据库返回的id,后续删除根本拿不到有效标识。

分步解决方案

1. 修复getDates(),获取完整DateModel数据

修改DatabaseHelper中的查询方法,返回带id的完整模型列表:

Future<List<DateModel>> getDates() async {
  Database db = await instance.db;
  final List<Map<String, dynamic>> data = await db.query("Dates");
  return List.generate(data.length, (i) => DateModel.fromMap(data[i]));
}

2. 同步前端列表与数据库数据结构

确保dateList存储DateModel对象,添加数据时直接存入带id的实例:

// 示例添加数据逻辑
void addNewDate(String inputText) async {
  DateModel newDate = DateModel(dateText: inputText);
  // 调用add后,newDate会被自动赋值id
  await DatabaseHelper.instance.add(newDate);
  date.dateList.add(newDate);
}

3. 修正Dismissible删除逻辑

直接从数据源取对应DateModel的id执行删除,避免新建无标识实例:

// 修改ListView.builder的itemBuilder部分
itemBuilder: (context, index) {
  DateModel currentDate = snapshot.data![index];
  return SlideTransition(
    position: Tween<Offset>(begin: Offset(1, 0), end: Offset(0, 0))
        .animate(CurvedAnimation(parent: _controller, curve: Curves.bounceIn)),
    child: Dismissible(
      key: ValueKey(currentDate.id), // 用id作为key更稳定
      direction: DismissDirection.horizontal,
      onDismissed: (direction) async {
        await DatabaseHelper.instance.remove(currentDate.id!);
        date.dateList.removeAt(index);
      },
      child: ListTile(title: Text(currentDate.dateText)),
    ),
  );
}

4. 优化add方法返回值(可选)

将返回值改为DateModel,更直观返回带id的实例:

Future<DateModel> add(DateModel dateModel) async {
  Database db = await instance.db;
  final id = await db.insert("Dates", dateModel.toMap());
  dateModel.id = id;
  return dateModel;
}

额外注意事项

  • 避免FutureBuilder重复调用getDates(),可在initState中缓存查询结果。
  • 用ValueKey(currentDate.id)替代UniqueKey(),减少不必要的组件重建。

内容的提问来源于stack exchange,提问作者Gilbert Keys

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:50:27