如何将sqflite查询结果转换为自定义Attendee对象列表?
解决sqflite查询结果转自定义Attendee列表的问题
你的代码存在两个核心问题:
- 直接将sqflite返回的
QueryRow对象添加到List<Attendee>中,类型不匹配导致报错 - 方法最后返回的是原始查询结果
results,而非转换后的attendees列表
修复步骤:
- 给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字段 // 注意:字段名要和你的数据库表字段完全匹配,不一致的地方在这里做映射 }
- 修改查询方法,完成类型转换
使用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
相关产品推荐
相关产品推荐

