Flutter中的FutureBuilder与initState

时间:2019-01-20 08:48:16

标签: flutter

我想从Flutter应用程序中的SQLite数据库加载一些数据,并在ListView中显示结果。我当前正在使用FutureBuilder小部件从数据库异步获取数据,然后构建ListView

但是,如果我要对数据进行一些操作-例如修改一些信息并将其保存到数据库-然后在ListView中显示更新的数据,我想我必须先将数据存储在本地变量中,然后调用setState()方法来进行更改数据并重新构建页面。

在不使用FutureBuilder的情况下,还有其他更好/更好的方法吗?

2 个答案:

答案 0 :(得分:2)

第一次初始化窗口小部件时,会调用

initState。在那里,您可以执行一些初始化操作。

我认为您使用FutureBuilder是正确的,因为您的UI是在从数据库中获取数据后生成的。

我将执行以下操作之一:

  • 继续使用FutureBuilder,然后在编辑数据时执行async操作来更新数据库,并在数据库更新后调用setState以反映数据库上的更改。用户界面。

  • 使用StreamBuilder,它与FutureBuilder类似,但它不会仅构建一次,而是会在每次附加的流发生更改时重新构建。这样,您只需要更新数据源,小部件就会使用新数据进行更新。

关于第二个解决方案,由于我从未实现过允许执行此操作的Stream(我一直将StreamBuilderFirebase一起使用)流)。

第一种解决方案使您可以更新显示的数据,而无需再次询问数据库中的整个数据集。

由于我不确定StreamBuilder如何管理数据更改,因此我可能会感谢其他人对第二种解决方案的反馈。

如果有更多发现,我会通知您!

答案 1 :(得分:1)

https://stackoverflow.com/a/52021385/11252673

build()可能会被调用多次-这就是为什么这种初始化在initState上更好的原因。