我使用流提供程序从Firestore获取帖子列表
StreamProvider<List<Post>>.value(value: DatabaseService().posts)
我用它来获取列表
Widget build(BuildContext context) {
posts = Provider.of<List<Post>>(context);
我只希望新帖子显示给用户,所以我需要检查数据库,因为我不能在build小部件中这样做,所以我使用futurebuilder小部件。
FutureBuilder(
future: checkView(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done )
checkView功能
Future<List<Post>> checkView() async {
if (user != null) voter = await databaseService.getVoterData();
for (int i = 0; i < posts.length; i += 1) {
if (!await databaseService.checkViewed(posts[i].postId)) {
newPosts.add(posts[i]);
}
}
}
if (newPosts != null)
if (newPosts.length > 0)
return newPosts;
return null;
}
问题是checkView被多次调用,并且newPosts.add(posts [i])被多次执行,我不能将其放在initState()中,因为我需要首先从提供者那里获取数据。
我真的很沮丧,因为没有关于futuerbuilder中的工作方式以及为何多次调用的正确文档。
谁能为我提供实现此目标的最佳方法。拜托。