dart - 尝试在滚动上附加新元素时 ListVIew 项目被重复
问题描述
我想要达到的目标
当滚动控制器到达底部时,我正在尝试从 json 数据生成一个列表并将下一页数据附加到当前列表中。
问题
当滚动控制器到达底部时会生成这些项目,但它也会将一些先前的元素添加到列表中并随机制作重复的项目
例如:https ://streamable.com/5n01f
我的代码
List<MovieJson> movielist = [];
ScrollController _scrollController = new ScrollController();
int pageindex = 1;
_MoviePageState() {
fetchdata(pageindex);
}
void initState() {
super.initState();
//SCROLLCONTROLLER LOGIC
_scrollController.addListener(() {
if (_scrollController.position.pixels ==
_scrollController.position.maxScrollExtent) {
pageindex += 1;
print(_scrollController.position.pixels.toString());
setState(() {
fetchdata(pageindex);
});
}
});
}
Future<List<MovieJson>> fetchdata(int index) async {
final response = await http.get('${tmdb.url_v3}' +
'trending/movie/week' + //path_param
'?' + //query_string_options
'${tmdb.api_key_url}' + //api_key=api_key
'&page=' + //page
'$index');
final jsonData = json.decode(response.body);
for (var item in jsonData['results']) {
MovieJson movie = MovieJson.fromJson(item);
movielist.add(movie);
}
return movielist;
}
其余代码正在使用 FutureBuild 构建 ListView 我也应该添加它吗?
解决方案
在添加之前,您需要检查该电影是否已存在于列表中。
if(!movielist.contains(movie))
movielist.add(movie);
推荐阅读
- c - 不使用在另一台机器上工作的代码接收多播数据
- php - 处理嵌套关系时如何返回单个模型?
- java - 使用java解析文本文件,每行要提取多个值
- typescript - TypeScript Cloud Functions 从父目录或同级目录导入模块
- pandas - matplotlib 散点图使用第三个数据系列来指定颜色
- mysql - 如何使用 MySQL 获取元素的行号?
- c# - 在 EF Core 中加载相关实体会导致大量 db trips
- linux - Under what conditions should a program use POSIX sleep?
- python - Separate certain columns for two different dataframes?
- bash - Setting AWS CLI Profile to issue bash commands against AWS