从列表的流提供者那里获取项目

时间:2020-05-11 15:48:02

标签: flutter

我使用流提供程序从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中的工作方式以及为何多次调用的正确文档。

谁能为我提供实现此目标的最佳方法。拜托。

0 个答案:

没有答案