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
如何重置此变量,否则我的方法完全错误 并且应该完全不同地实施?
答案 0 :(得分:2)
计算start_date
并在ListView中使用它,而不是检查itemBuilder中的filteredTasks
:
var filteredTasks = tasks.where((task) => task.start_date == selecteddate)