当应用程序移至后台状态并再次移至前台状态时,无限列表会导致重复
Posted
技术标签:
【中文标题】当应用程序移至后台状态并再次移至前台状态时,无限列表会导致重复【英文标题】:Infinite List causes duplication when app is moved to background state and again to foreground state 【发布时间】:2019-06-15 14:32:47 【问题描述】:我正在尝试使用 ListView
构建器从 api 加载一堆名称。
我的api
有一个名为 index 的参数,每次用户到达列表末尾时都需要增加 50
所以我已将ScrollController
附加到我的ListView
。
index 开头的值为0。
我首先在initState
中调用api
当用户到达列表末尾时,我的代码如下
scrollController.addListener(()
if (scrollController.position.pixels ==
scrollController.position.maxScrollExtent)
index += 50;
//Calling the api again here
);
现在使用这种方式可以很好地加载列表。假设用户加载了所有数据,假设索引为 250,现在用户决定 将应用程序置于后台,一段时间后再次打开应用程序,最后 50 个项目再次添加到我的列表中,我不明白为什么。
我正在使用带有bloc
模式的StreamBuilder
if (snapshot.data != null)
studentList.addAll(snapshot.data.studentList);
我厌倦了独特的运算符,但它不适用于我的情况
Observable<StudentListModel> get studentList => _studentList.stream.distinct();
【问题讨论】:
【参考方案1】:我猜这是你的问题。
if (snapshot.data != null)
studentList.addAll(snapshot.data.studentList);
您在前 50 个检索到的学生的基础上添加了 100 个学生,其中 50 个是重复的。 您可以将代码更改为:
if (snapshot.data != null)
studentList = snapshot.data.studentList;
【讨论】:
如果我重新分配列表而不是将其添加到列表中,那么只要滚动侦听器加载下一个 50 项,前 50 项就会丢失。我需要将它添加到我的列表中。 那么我猜问题是streamBuilder再次调用build并且你无条件地添加到列表中。您可以在学生流上尝试此运算符。 docs.flutter.io/flutter/dart-async/Stream/distinct.html 我尝试了 distinct 运算符,但它没有解决问题以上是关于当应用程序移至后台状态并再次移至前台状态时,无限列表会导致重复的主要内容,如果未能解决你的问题,请参考以下文章