FutureBuilder与StreamBuilder的区别

3

大家好,我想从云Firestore中获取数据,但是我不确定在Flutter中使用哪种方法更有效。我应该使用StreamBuilder还是FutureBuilder呢?我已经阅读了许多帖子,但我并没有完全理解它们的区别。请问有人能告诉我,在从Firestore获取数据时,我应该使用StreamBuilder还是FutureBuilder?


1
你能描述一下你没有理解的部分吗?因为 Stack Overflow 上已经有很多关于这个问题的答案了。 - Jitesh Mohite
我不确定从Firestore获取数据的哪种方法更有效,因为我不想向Firestore发出太多请求。 - Lalli Garden
1个回答

4

StreamBuilderFutureBuilder 的行为相同:它们监听相应对象的变化,并在收到新值通知时触发新构建。

最终,它们在监听 async 调用的方式上有所不同。

FUTUREBUILDER

它只有一个响应。Flutter 中使用 Future 最常见的用途是在 http 调用期间。你可以监听 Future 的状态,即当它完成或在通过 Future 获取数据后出现错误时。

STREAMBUILDER

Stream 是迭代器,可以吸收不同的值,并且这些值会随时间而改变。通过使用 Stream你将获取每个新值,以及它是否具有某些错误或成功消息

表示:

switch (snapshot.connectionState){
   case ConnectionState.none: //do something
   break;
   case ConnectionState.waiting: //do something
   break;
   case ConnectionState.active: //do something
   break;
   case ConnectionState.done: //do somethin
   break;
}   

上述内容会在每次运行时更新值,如果来自异步数据的值发生更改,则即使您正在使用应用程序,也会进行更新。它不会停止,并显示您放置在特定情况下的数据。

现在的最终答案

如果上述内容还不是很清楚,请看以下数据:

  1. 如果您的用例只是获取数据并显示它,例如从API获取班级中的课程总数,那么您可以使用FutureBuilder
  2. 如果数据每秒或每分钟更新一次,而您正在使用应用程序,例如博客中即将发布的帖子博客上的评论增加博客上的赞数增加。它以异步方式在某些时间间隔内更新,这种情况下,StreamBuilder是最好的选择。

根据用例,您决定使用哪个。它们各有优点。请参阅以下文章以获得更清晰的说明:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接