【发布时间】:2019-02-14 03:29:07
【问题描述】:
我有一个大约 5K 的大型项目列表。
我想做的是为这些项目编写一个搜索视图。
我尝试了以下 -
List<String> items;
String query;
ListView.builder(
itemBuilder: (context, index) {
for (int i = index; i < items.length; i++) {
var item = items[i];
if (item.contains(query)) {
return ItemTile(item);
}
}
}
这可以有效地渲染和搜索元素,但问题是它最终会无限重复列表中的最后一项。
我猜那是因为我没有提供itemCount。
所以我尝试自己在 Stateful 小部件中跟踪过滤项目的数量。
var _count = 1;
_queryController.addListener(() {
setState(() => _count = 1);
});
ListView.builder(
itemBuilder: (context, index) {
for (int i = index; i < items.length; i++) {
var item = items[i];
if (item.contains(query)) {
setState(() => _count += 1);
return ItemTile(item);
}
}
itemCount: _count;
}
然后我收到一个错误,说 - setState() or markNeedsBuild() called during build.
在不为每个查询完全搜索项目的情况下,正确的方法是什么?
(我的目标是在输入时搜索 UX)
【问题讨论】: