我想从Flutter应用程序中的SQLite数据库加载一些数据,并在ListView
中显示结果。我当前正在使用FutureBuilder
小部件从数据库异步获取数据,然后构建ListView
。
但是,如果我要对数据进行一些操作-例如修改一些信息并将其保存到数据库-然后在ListView
中显示更新的数据,我想我必须先将数据存储在本地变量中,然后调用setState()
方法来进行更改数据并重新构建页面。
在不使用FutureBuilder
的情况下,还有其他更好/更好的方法吗?
答案 0 :(得分:2)
initState
。在那里,您可以执行一些初始化操作。
我认为您使用FutureBuilder
是正确的,因为您的UI是在从数据库中获取数据后生成的。
我将执行以下操作之一:
继续使用FutureBuilder
,然后在编辑数据时执行async
操作来更新数据库,并在数据库更新后调用setState
以反映数据库上的更改。用户界面。
使用StreamBuilder
,它与FutureBuilder
类似,但它不会仅构建一次,而是会在每次附加的流发生更改时重新构建。这样,您只需要更新数据源,小部件就会使用新数据进行更新。
关于第二个解决方案,由于我从未实现过允许执行此操作的Stream
(我一直将StreamBuilder
与Firebase
一起使用)流)。
第一种解决方案使您可以更新显示的数据,而无需再次询问数据库中的整个数据集。
由于我不确定StreamBuilder
如何管理数据更改,因此我可能会感谢其他人对第二种解决方案的反馈。
如果有更多发现,我会通知您!
答案 1 :(得分:1)
https://stackoverflow.com/a/52021385/11252673
build()可能会被调用多次-这就是为什么这种初始化在initState上更好的原因。