【发布时间】:2023-01-12 16:06:16
【问题描述】:
我想使用 REST API 从我的网站获取我的 flutter 应用程序中的分页数据。
我已经集成了分页,现在它开始工作了。
但问题是在加载更多数据时,我得到的是重复数据而不是新数据。
我想我做错了什么来增加页码。在_getAllNews()方法中
这是我的完整代码,我认为我在这方面犯了很小的错误。
class Tedd extends StatefulWidget {
@override
_TeddState createState() => _TeddState();
}
class _TeddState extends State<Tedd> {
List<NewsModel> _newsList = [];
bool isLoading = true;
int currentPage = 1;
bool hasReachedEnd = false;
ScrollController scrollController = ScrollController();
_getAllNews(page) async {
setState(() {
isLoading = true;
});
var articles = await http.get(Uri.parse(
"https://pkbhai.com/myprojects/kids-stories/api/all-stories?page=${page}"));
var result = json.decode(articles.body);
print(result);
result['data'].forEach((data) {
var news = NewsModel();
news.id = data["id"];
news.articleTitle = data["name"];
if (mounted) {
setState(() {
_newsList.add(news);
isLoading = false;
currentPage = currentPage++;
});
}
});
}
void handleNext() {
scrollController.addListener(() async {
if (scrollController.position.maxScrollExtent ==
scrollController.position.pixels) {
_getAllNews(currentPage);
}
});
}
@override
void initState() {
_getAllNews(currentPage);
handleNext();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
controller: scrollController,
itemCount: _newsList.length + (isLoading ? 1 : 0),
itemBuilder: (context, index) {
if (index == _newsList.length) {
return Center(
child: CircularProgressIndicator(),
);
}
return Container(
height: 150, child: Text(_newsList[index].articleTitle!));
},
),
);
}
}
我究竟做错了什么?
【问题讨论】:
-
print(results)打印什么?您还可以在 forEach 内部print(data);以确保错误不是来自后端。如果它显示一些重复项,这是一个后端错误,它可能是执行查询分页顺序的简单错误。例如 skip -> sort -> limit 可能会重复。您必须先排序,然后跳过(到达第 x 页),然后限制(从第 x 页获取 y 元素)。 -
您的代码没有任何问题,如果您说如果不断重复数据,请检查您的分页后端实现。顺便说一句,为什么不能控制客户端 sdy 中的分页...
-
@GbengaBAyannuga 这是我的后端 api pkbhai.com/myprojects/kids-stories/api/all-stories
-
@Fourchette 这是我的 api pkbhai.com/myprojects/kids-stories/api/all-stories
-
@GbengaBAyannuga 请帮助我让它工作
标签: android flutter dart flutter-dependencies