flutter - Flutter 中的 FutureBuilder 与 initState

标签 flutter

我想在我的 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/

相关文章:

facebook - 如何通过单击 flutter 应用程序中的按钮自动从 facebook 中的图库发布图像?

flutter - 获取在 Flutter CustomScrollView 中可见/滚动的当前条子

android-studio - APK构建未在Flutter项目中执行

firebase - 这很可能是一种暂时性情况,可以通过回退重试来纠正

flutter - 如何在 DART 中获取两个字符串之间的子字符串?

dart - 无法弄清楚如何在 Flutter 的多项选择测验中从 List<String> 分配正确的答案值,

flutter - 使用整数数据字段上传多个图像

android - Flutter - AppBar 底部小部件

flutter - 如何使用提供程序作为状态管理从列表中正确设置选定的小部件?

Flutter DropdownButtonFormField 不起作用