筛选时ListView.builder的索引未保留在listTile onTap中

筛选时ListView.builder的索引未保留在listTile onTap中,listview,flutter,dart,Listview,Flutter,Dart,我有个问题,伙计们。我使用一个listView来显示从api获取的列表。因此,我为它实现了过滤函数,效果很好。我遇到的问题是,当我点击过滤列表项时,我的listTile onTap方法中的索引值往往会发生变化。我如何在过滤后仍保留原始列表索引结构,并确保它在点击时工作良好 FutureBuilder( builder: (BuildContext context, AsyncSnapshot snapshot) { return Exp

我有个问题,伙计们。我使用一个
listView
来显示从api获取的列表。因此,我为它实现了
过滤
函数,效果很好。我遇到的问题是,当我点击过滤列表项时,我的
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'}
]

不要依赖于
index
,在模型本身中创建
id
,并进一步使用它。这是如何工作的?我是否将索引传递到模型中的id变量中?您是否尝试过使用键?谢谢@SanjaySharma我刚刚根据您的建议解决了我的问题。非常感谢
filterdData = [
  { 'id' : 0, 'title': Card 1'},
]