我有一个问题。我正在使用listView
显示从api获取的列表。因此,我实现了filtering
函数,效果很好。我遇到的问题是,我发现当我点击过滤列表项时,索引值倾向于在listTile onTap
方法内部发生变化。即使经过过滤,我如何仍保留原始列表索引结构,并确保其在点击时工作良好。
FutureBuilder(
builder: (BuildContext context, AsyncSnapshot snapshot) {
return Expanded(
child: ListView.builder(
primary: false,
shrinkWrap: true,
itemCount: filteredList.length,
itemBuilder: (context, index) {
//index value and structure changes while filtering
return Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
decoration: BoxDecoration(
color: HexColor("#F5F5F5"),
borderRadius:
BorderRadius.circular(
16.0)),
child: ListTile(
onTap: () => {
showFundModal(index)},
//when I tap on a listView item while filtered, the index not correct
contentPadding: const EdgeInsets.all(8.0),
);
最佳答案
您可以保留两个列表,一个包含所有项目,一个包含过滤后的项目或要显示的项目。列表项的数据模型应具有id
字段,该字段可用于标识该项目,并且您可以使用id来处理数据。
您可以检查列表的以下json表示形式。
allData = [
{ 'id' : 0, 'title': Card 1'},
{ 'id' : 1, 'title': Card 2'}
]
filterdData = [
{ 'id' : 0, 'title': Card 1'},
]
关于listview - 过滤时未保留ListTile onTap中的ListView.builder索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61976595/