listview - 过滤时未保留ListTile onTap中的ListView.builder索引

标签 listview flutter dart

我有一个问题。我正在使用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/

相关文章:

java - 我的 ListView 显示对象而不是每个对象的内容

flutter - 如何增加 Flutter 中 ElasticOutCurve 的最高超调范围?

dart - 如何在 Dart 或 Flutter 中将日期转换为 Julian 日期?

flutter - IOWebSocketChannel 检测连接何时打开

dart - Dart 中的 'is' 和 '==' 有什么区别?

flutter - 消除小部件之间的间隙

android - 将 ListView 数据发送到另一个 ListView 和 Activity

c++ - QML ListView 和 c++ : ReferenceError Model not defined

android - 底部按钮栏与 Listview 的最后一个元素重叠!

Flutter:在布局期间对象被赋予无限大小