如何从另一个小部件类更新小部件树 - 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 应该更新。如果它位于不同的小部件中,您可以使用 ProviderConsumer 来实现。 【参考方案1】:

恰好是我唱错了 valuelistenable builder。

这很容易。只需将变量和更改标记为 valueNotifier。就我而言,我需要将 foodCategory 标记为 valueNotifer。

然后,我需要将小部件(在我的情况下为列小部件)包装为 ValueListenableBuilder。这解决了我的问题。

【讨论】:

以上是关于如何从另一个小部件类更新小部件树 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

如何在从另一个小部件继承的小部件中设置数据?

如何从另一个小部件状态处理一个小部件状态?

Kivy:从另一个类的小部件中检索文本?

如何从另一个小部件更改有状态小部件的变量?

从另一个线程更新 QT 小部件的不那么冗长的方法?

如何访问在其他类中的一个类中定义的小部件,而不会看到重新定义的图形界面