flutter - 当父母的状态发生变化时,如何让子小部件更新?
问题描述
提前为发布伪代码道歉。真正的代码会太长。
我有一个屏幕,顶部有一个下拉菜单,用户可以在其中选择一个选项。页面的其余部分将根据该选项进行更新。像这样的东西:
// state variable
String idFromDropdown;
Column(
children: [
DropDownWidget(),
ChildWidget1(myId: idFromDropDown),
ChildWidget2(myId: idFromDropDown),
ChildWidget3(myId: idFromDropDown),
]
)
在子小部件中,我使用 widget.myId 传递到后端服务并读取新数据。
期望是当下拉列表发生变化并且我打电话时
setState((val)=>{idFromDropdown = val});
然后该值将级联到三个子小部件中。根据 widget.myId 的新值,以某种方式触发小部件重新连接到后端服务。
如何触发子小部件的状态更新?
我最终使用了 ValueNotifier。而不是直接使用字符串并将其传递给子小部件。我最终做了类似的事情:
ValueNotifier<String> idFromDropdown;
...
setState((val)=>{idFromDropdown.value = val});
然后在每个小部件中,我在传入的 ValueNotifier 上添加一个侦听器,并重新触发对后端服务的读取。
虽然这有效,但我觉得我错过了一些明显的东西。我的 childwidgets 现在接受一个 ValueNotifier 而不是一个值。恐怕这会使我的 ChildWidgets 在其他情况下更难使用。
这是这样做的正确方法吗?
解决方案
使用提供程序包您的问题将轻松解决
推荐阅读
- json - 如何拒绝获取我的 firebase 数据库 json 文件,因为我想将我的用户数据保密
- c - 从另一个字符串限制字符串
- c# - 在另一个表单中调用一个表单的方法
- docker - Docker NGINX 代理自动化 + DDNS + 端口转发 + Nextcloud
- r - 向量/时间序列中的非线性压缩解压缩“x”和“y”轴
- c# - .NET 5 Blazor WASM StringFormat 货币
- r - 将文件列表复制到 SQLite db
- kotlin - 在并行 kotlin 中运行 10 个批处理作业
- c++ - OSG+MFC 示例黑窗
- c++ - c++编译的makefile没有运行