我想在我的 Flutter 应用程序中从 SQLite 数据库加载一些数据,并在 ListView
中显示结果。我目前正在使用 FutureBuilder
小部件从数据库中异步获取数据,然后构建 ListView
。
但是,如果我想对数据进行一些操作 - 例如修改一些信息并将其保存到数据库 - 然后在 ListView
中显示更新的数据,我想我必须先将数据存储在局部变量中,然后调用 setState()
方法来更改数据并重新构建页面。
在不使用 FutureBuilder
的情况下,还有其他更好/首选的方法来实现相同的目标吗?
最佳答案
initState
在您的小部件第一次初始化时被调用。在那里你做了一些初始化操作。
我认为您使用 FutureBuilder
是对的,因为您的 UI 是在从数据库中获取数据后生成的。
我会做以下事情之一:
继续使用
FutureBuilder
,然后在编辑数据时进行async
操作以更新数据库,并在数据库更新后调用setState
以反射(reflect) UI 上的更改。使用
StreamBuilder
,它类似于FutureBuilder
,但不是只构建一次,而是在每次附加到的流上发生更改时重新构建.这样,您只需要更新数据源,小部件就会使用新数据自行更新。
谈到第二个解决方案,我不能再进一步了,因为我从未实现过允许这样做的 Stream
(我一直使用 StreamBuilder
它Firebase
流)。
第一个解决方案允许您更新显示的数据,而无需再次向数据库询问整个数据集。
我可能会感谢其他人对第二种解决方案的一些反馈,因为我不确定 StreamBuilder
如何管理数据更改。
如果我发现更多信息,我会告诉你的!
关于flutter - Flutter 中的 FutureBuilder 与 initState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274871/