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

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

在不使用 FutureBuilder 的情况下,是否还有其他更好/首选的方法来实现相同的目标?

最佳答案

initState 在您的小部件第一次初始化时被调用。在那里你做一些初始化操作。

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

我会执行以下操作之一:

  • 继续使用 FutureBuilder ,然后在编辑数据时进行 async 操作以更新数据库,并在更新数据库后调用 setState 以反射(reflect) UI 上的更改。
  • 使用 StreamBuilder ,它类似于 FutureBuilder ,但它不是只构建一次,而是在它附加到的流上每次发生更改时重新构建。这样您只需要更新数据源,小部件就会用新数据更新自己。

  • 谈到第二个解决方案,我不能再进一步了,因为我从未实现过允许这样做的 Stream(我一直将 StreamBuilderFirebase 流一起使用)。

    第一种解决方案允许您更新显示的数据,而无需再次向数据库请求整个数据集。

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

    如果我发现更多,我会告诉你的!

    关于flutter - Flutter 中的 FutureBuilder 与 initState,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54274871/

    10-15 11:11