Flutter实现Firebase搜索功能时UICard无法赋值给StoreItem报错如何解决
错误原因
exampleList是元素类型为StoreItem的数组,但你在searchMethod遍历Firebase返回数据时,错误生成了UI组件UICard的实例,试图插入到StoreItem类型的数组中,二者类型不匹配,因此抛出该错误。- 另外你现有代码中创建
UICard时将values[key]['name']赋值给img参数,属于明显的参数传值错误,修改逻辑时可以一并修正。
修复方案
1. 修改searchMethod方法逻辑
只需要将遍历数据时生成UICard的逻辑改为生成StoreItem实例即可,修改后代码如下:
void searchMethod(String input) { DatabaseReference searchRef = FirebaseDatabase.instance .reference() .child('Database') .child('Store'); searchRef.once().then((DataSnapshot snapShot) { exampleList.clear(); var keys = snapShot.value.keys; var values = snapShot.value; for (var key in keys) { // 构造StoreItem数据模型,而非UI组件 StoreItem item = StoreItem( values[key]['name'] ?? '', values[key]['description'] ?? '', values[key]['category'] ?? '', ); if (item.name.contains(input)) { exampleList.add(item); } } // 直接调用setState刷新,不需要额外加1秒延迟 setState(() {}); }); }
2. 可选优化
你原有代码中加入了1秒延迟才调用setState完全没有必要,修改后直接调用即可,减少用户等待时间。你的列表渲染逻辑本身是从exampleList取数据渲染UICard,不需要做任何修改,改完搜索方法即可正常运行。
如果需要做大小写不敏感的模糊搜索,可以把判断条件改成item.name.toLowerCase().contains(input.toLowerCase())。
内容的提问来源于stack exchange,提问作者coderhelp
相关产品推荐
相关产品推荐

