【问题标题】:How to update widget tree from another widget class - Flutter如何从另一个小部件类更新小部件树 - 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 来实现。

标签: flutter flutter-layout flutter-web statefulwidget


【解决方案1】:

恰好是我唱错了 valuelistenable builder。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2021-12-09
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多