我正在为用户的电话联系人创建一个搜索栏。我正在使用FutureBuilder
的{{1}}在snapshot
中显示数据。
下面是我的ListView
方法的代码,该方法调用build()
来呈现由_getList()
构建的联系人列表:
FutureBuilder
包含 @override
Widget build(BuildContext context) {
return Container(
decoration: ContactListStyles.containerDecor,
child: Column(
children: [
if (widget.isSearchable)
TextField(
decoration: ContactListStyles.searchInput,
onChanged: _inputHandler,
),
Scrollbar(child: _getList())
],
),
);
}
的{{1}}的代码:
_getList()
现在FutureBuilder
函数正在创建实际的问题。 Widget _getList() {
return FutureBuilder(
future: _contactsFuture,
builder: (ctx, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Loader();
} else {
...
// If searching then, even build() fn run, this line won't so that only filtered elements are displayed
if (!_isSearching) {
list = snapshot.data.toList();
}
print(list.length); // For first time it renders 129 (total contacts in my phone)
return Container(
child: ListView.separated(
separatorBuilder: (_, __) => Divider(),
itemCount: list.length,
itemBuilder: (ctx, index) {
return ListTile(
title: _generateTitle(list[index].displayName),
subtitle: Text(list[index].phones.toList()[0].value),
...
);
},
),
);
}
},
);
}
工作正常,但是当我再次将过滤后的输出分配给_inputHandler
变量时,在.where(() => condition)
函数中也是如此。 list
仍然记录 129 个数字。
我的整个有状态Widget类的代码:
setState((){})