Flutter报错求助:NoSuchMethodError——bool类型无[]实例方法
排查Flutter从Firebase获取数据时的NoSuchMethodError错误
错误原因
报错Unhandled Exception: NoSuchMethodError: Class 'bool' has no instance method '[]'的核心问题是:你代码中假设extractedData的所有子节点(即prodData)都是包含字段的Map对象,但实际Firebase返回的数据里,存在某个prodData是布尔值(true/false),导致调用prodData['title']这类Map的[]方法时触发异常。
排查与解决步骤
确认返回的数据结构
在json.decode(response.body)之后添加打印代码,查看真实的返回数据,定位异常节点:final extractedData = json.decode(response.body) as Map<String, dynamic>; print('Firebase返回原始数据: ${response.body}'); print('解析后的数据结构: $extractedData');运行代码后查看控制台输出,找到哪个
prodId对应的prodData是布尔值。检查Firebase数据库结构
登录Firebase控制台,进入shoppingapp-ef04b-default-rtdb的product节点,逐一检查子节点:正常的产品节点应该是包含title、description、price、isFavorite、imageUrl的键值对对象;如果发现某个子节点直接是true/false,那就是错误数据。添加代码防御性检查
在遍历数据时先判断prodData的类型,避免直接调用[]方法报错,同时打印异常数据方便排查:extractedData.forEach((prodId, prodData) { if (prodData is Map) { loadedProducts.add(Product( id: prodId, title: prodData['title'], description: prodData['description'], price: prodData['price'], isFavorite: prodData['isFavorite'], imageUrl: prodData['imageUrl'], )); } else { print('异常产品数据ID: $prodId,数据内容: $prodData'); } });修复错误数据
在Firebase控制台中,删除或修改那个布尔值的节点,将其调整为符合结构的产品对象。
内容的提问来源于stack exchange,提问作者Krishnapriya_acube
相关产品推荐
相关产品推荐

