Firebase收藏状态获取报错:String无法转为bool类型
解决“type 'String' is not a subtype of type 'bool'”错误
问题根源
从Firebase读取收藏状态时,favoriteData[key]返回的是字符串类型(如"true"或"false"),但Product类的isFavorite是布尔类型,直接赋值导致类型不匹配。
修复方案
修改fetchAndSetProducts函数中isFavorite的赋值逻辑,增加对字符串类型的判断和转换:
// 替换原代码中isFavorite的赋值行 isFavorite: favoriteData == null ? false : (favoriteData[key] is String ? favoriteData[key] == 'true' // 将字符串转成布尔值 : favoriteData[key] ?? false), // 处理布尔类型或null的情况
额外验证
- 检查Firebase Realtime Database中
userFavorites/$userId下的节点值,确认是否存在字符串类型的"true"/"false",若为误写入可手动改为布尔值(去掉引号)。 - 你的
toggleFavoriteStatus方法中用json.encode(isFavorite)写入数据是正确的,JSON编码布尔值会生成不带引号的true/false,但代码层面的兼容能覆盖Firebase可能出现的自动转换问题。
内容的提问来源于stack exchange,提问作者Muhammad Tawil
相关产品推荐
相关产品推荐

