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

如何将sqflite查询结果转换为自定义Attendee对象列表?

解决sqflite查询结果转自定义Attendee列表的问题

你的代码存在两个核心问题:

  • 直接将sqflite返回的QueryRow对象添加到List<Attendee>中,类型不匹配导致报错
  • 方法最后返回的是原始查询结果results,而非转换后的attendees列表

修复步骤:

  1. 给Attendee类添加从Map转换的构造函数
    sqflite的查询结果QueryRow实现了Map<String, dynamic>接口,你需要给Attendee类定义一个构造函数,把Map中的字段映射到类属性:
class Attendee {
  // 根据你的业务定义属性,示例如下
  final int id;
  final int billId;
  final String name;

  // 常规构造函数
  Attendee({required this.id, required this.billId, required this.name});

  // 新增:从Map转换为Attendee的构造函数
  Attendee.fromMap(Map<String, dynamic> map)
      : id = map['id'], // 对应数据库表的id字段
        billId = map['bill_id'], // 对应数据库表的bill_id字段
        name = map['name']; // 对应数据库表的name字段
  // 注意:字段名要和你的数据库表字段完全匹配,不一致的地方在这里做映射
}
  1. 修改查询方法,完成类型转换
    使用map方法批量转换每个QueryRow为Attendee实例,最后返回转换后的列表:
Future<List<Attendee>> _findManyAttendees(billId) async {
  final results = await LocalStorageService.instance.findManyAttendees(billId);
  debugPrint('_findManyAttendees Results: $results');

  // 将每个QueryRow转换为Attendee对象,再转成List
  final attendees = results.map((row) => Attendee.fromMap(row)).toList();

  return attendees;
}

补充说明:

  • 如果你的LocalStorageService.findManyAttendees返回的是List<Map<String, dynamic>>而非List<QueryRow>,转换逻辑完全一致
  • 务必确保fromMap里的数据库字段名和实际表字段一致,否则会出现字段为空或类型转换错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:15:04