如何重置ListView.Builder索引

时间:2020-06-10 20:13:44

标签: flutter

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(),
         );
       }
 }),

此代码在首次执行时会调用API, 从15天开始加载我名为class的任务的所有任务。 最近7天,今天和接下来的7天。这个JSON档案 按日期排序,因此我可以列出所有用户的日期 在那段时间里。所以第一个有 较早的日期。

在这些日期之后,我创建一个ButtonMenu,用户可以 通过选择日期来选择他们要查看的任务。

下次调用时,方法getTasks()不会 不再调用该API,它仅使用之前加载的JSON。

不幸的是,此代码并非始终有效,因为 对于我来说,索引变量的值一直在变化 试图提高效率的好处ListView.builder不会 始终将索引重置为0。

然后这部分代码

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

失败,并且不显示与所选日期相关的任务

因为用户浏览文件到索引的最后日期 高,现在,如果他尝试查看第一个日期,索引也太高 高且[index].start_date不等于selecteddate

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

1 个答案:

答案 0 :(得分:2)

计算start_date并在ListView中使用它,而不是检查itemBuilder中的filteredTasks

var filteredTasks = tasks.where((task) => task.start_date == selecteddate)