Flutter 如何重置ListView.Builder索引

Flutter 如何重置ListView.Builder索引,flutter,Flutter,此代码在第一次执行时调用API和 加载名为task的类以及15天内的所有任务。 过去7天,今天和未来7天。这个JSON文件 是按日期排序的,因此我可以列出所有用户的日期 在那一段时间里有。因此,第一批具有 较老的日期 根据这些日期,我创建了一个按钮菜单,用户可以 通过选择日期,选择他们想要查看的任务 下次调用时,方法getTasks()不会 再调用API,它只使用以前加载的JSON 不幸的是,由于 索引变量的值一直在更改,对于我的 利益ListView.builder试图提高效率不会 始终将索引

此代码在第一次执行时调用API和 加载名为task的类以及15天内的所有任务。 过去7天,今天和未来7天。这个JSON文件 是按日期排序的,因此我可以列出所有用户的日期 在那一段时间里有。因此,第一批具有 较老的日期

根据这些日期,我创建了一个按钮菜单,用户可以 通过选择日期,选择他们想要查看的任务

下次调用时,方法getTasks()不会 再调用API,它只使用以前加载的JSON

不幸的是,由于 索引变量的值一直在更改,对于我的 利益ListView.builder试图提高效率不会 始终将索引重置为0

那么这部分代码

child: FutureBuilder(
     future: getTasks(),
     builder: (context, snapshot) {
       if (task != null && task.tasks.length > 0) {
         return ListView.builder(
           shrinkWrap: true,
           itemCount: task.tasks.length,
           itemBuilder: (context, index) {
             return task.tasks[index].start_date == selecteddate
                 ? TarefaCard(
                     width: MediaQuery.of(context).size.width * 0.8,
                     title: task.tasks[index].description,
                     howlong: task.tasks[index].howlong_str,
                     icon: Icon(icons[0]),
                     indice: index,
                     onPress: _setActiveTask )
                 : Container();
           },
         );
       } else {
         return Center(
           child: CircularProgressIndicator(),
         );
       }
 }),
失败且不显示与所选日期相关的任务 应该如此

因为用户浏览文件到索引的最后日期 很高,现在如果他试图看到第一个日期,指数也太高了 高和
[索引]。开始日期不等于
selecteddate

我如何重置此变量,或者我的方法完全错误
并且应该完全不同地实现?

不要在itemBuilder中检查
开始日期
,而是计算一个
filteredTasks
并在ListView中使用它:

return task.tasks[index].start_date == selecteddate

如果你只是检查开始日期,我不明白索引与你的问题有什么关系。任务是按日期排序的,因此我可以为该用户建立一个不同日期的列表。我创建了一个按钮菜单,其中包含用户选择日期的列表。由于列表是按日期排序的,因此索引越低,日期越低。当他们浏览到列表顶部时,索引会变得更高。因此,如果他选择了第一个日期,代码的这一部分将发现列表开头的日期不接近末尾。我说得很清楚?我建议您在itemBuilder之外进行过滤,例如
var filteredTasks=tasks.where(task=>task.start\u date==selecteddate)
然后在您的列表视图中使用filteredTasks它就是这样工作的。回答这个问题,这样我就可以接受了。
var filteredTasks = tasks.where((task) => task.start_date == selecteddate)