如何从另一个小部件类更新小部件树 - Flutter
Posted
技术标签:
【中文标题】如何从另一个小部件类更新小部件树 - Flutter【英文标题】:How to update widget tree from another widget class - Flutter 【发布时间】:2022-01-16 22:49:32 【问题描述】:当一个类/小部件(父小部件和子小部件都是有状态的类)中的变量发生变化时,我面临重新渲染页面的问题。
事情是这样的: 我在一个类中有三个按钮,它们改变了一个变量状态(foodCategory)。
int foodCategory = 0;
// down in the elevated button body - i am updating the variable
setState(()
foodCategory = 1;);
在另一个小部件中,我使用这个变量来执行某些操作:
for (var item in foodItems.values.elementAt(foodCategory))
GestureDetector(........ and so on...
但是在第二个 sn-p 中,小部件不知道是否发生了变化,并且它没有再次调用 buildcontext... 我不知道如何克服这个问题。我试过 valuelistenablebuilder 但徒劳无功。也许我不知道如何在循环中使用它(我使用 foodcategory 作为 int(迭代器))。
【问题讨论】:
你应该使用GETX,在getx中你可以使用同一个控制器更新任何小部件 请分享代码,显示您在哪里使用此for
循环。如果它在以foodCategory
作为成员的类的构建方法中,setState
应该更新。如果它位于不同的小部件中,您可以使用 Provider
和 Consumer
来实现。
【参考方案1】:
恰好是我唱错了 valuelistenable builder。
这很容易。只需将变量和更改标记为 valueNotifier。就我而言,我需要将 foodCategory 标记为 valueNotifer。
然后,我需要将小部件(在我的情况下为列小部件)包装为 ValueListenableBuilder。这解决了我的问题。
【讨论】:
以上是关于如何从另一个小部件类更新小部件树 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章