Flutter Sqflite问题:无法获取查询结果中waterDrank字段的值
解决rawQuery查询结果无法获取waterDrank字段的问题
问题根源
你代码里的核心错误是把rawQuery返回的结果元素当成了List,但实际上rawQuery返回的是List<Map<String, dynamic>>——每个查询结果行是一个Map,而不是List。你用List filteredData = result[0];强制转换类型,后续用索引[2]去取值自然会失败。
修正后的基础写法
直接按Map类型处理查询结果,通过键名waterDrank获取对应值:
static Future<List<Map<String, dynamic>>> getWaterDrank() async { final db = await WaterDBHelper.db(); List<Map<String, dynamic>> result = await db.rawQuery( "SELECT * FROM $tableName WHERE ${columnDate} = ?", [dateCurrent] ); print(result); if (result.isNotEmpty) { // 第一个结果是Map类型 Map<String, dynamic> filteredData = result[0]; // 通过键名获取waterDrank的值 int waterDrank = filteredData['waterDrank'] as int; print('this is what we are after $waterDrank'); } return result; }
用模型类关联结果的正确方式
如果想用模型类统一处理数据,先定义模型:
class WaterRecord { final int id; final String date; final int waterDrank; WaterRecord({required this.id, required this.date, required this.waterDrank}); // 从Map转换为模型实例 factory WaterRecord.fromMap(Map<String, dynamic> map) { return WaterRecord( id: map['id'] as int, date: map['date'] as String, waterDrank: map['waterDrank'] as int, ); } }
然后修改数据库查询函数,将Map列表转换为模型列表:
static Future<List<WaterRecord>> getWaterDrank() async { final db = await WaterDBHelper.db(); List<Map<String, dynamic>> result = await db.rawQuery( "SELECT * FROM $tableName WHERE ${columnDate} = ?", [dateCurrent] ); // 批量转换为模型对象 return result.map((row) => WaterRecord.fromMap(row)).toList(); }
调用时直接访问模型属性:
List<WaterRecord> records = await WaterDBHelper.getWaterDrank(); if (records.isNotEmpty) { print('今日饮水量:${records[0].waterDrank}'); }
内容的提问来源于stack exchange,提问作者user22187566
相关产品推荐
相关产品推荐

