【问题标题】:Flutter setstate on local variable not updating UI局部变量上的颤振设置状态不更新UI
【发布时间】:2020-10-20 02:32:03
【问题描述】:

所以我尝试动态更新单个列表视图项。我正在使用一个函数来生成每个项目,并在该函数中创建了一个局部变量。我使用 setstate 更新该变量,但 UI 没有更新。如果我将相同的变量设为全局变量,它会起作用,但我会更改每个我不想要的列表视图项目。有没有人对此有任何提示?我是新来的颤振和抱歉,如果这已被多次询问。我尝试搜索但找不到任何解决方案。这是项目构建器函数的类似代码。

Widget generateListItem(){ 
    bool flag= false;
    return InkWell(
       onTap:(){
          setState((){
             flag=true;
          })
       },
       child: Text(flag? "Changed" : "Not Changed"),
    );
}

【问题讨论】:

  • 当通过 setState() 重建 'generateListItem' 时,标志也被重置。所以总是标志是假的。
  • 哦.. 现在更有意义了。有没有办法单独更新项目?
  • 使它成为State 类中的变量,而不是方法中的变量。 @Bikramgurung
  • 如果我这样做,setstate 会更改每个项目。我想单独更改特定项目。
  • 您需要在重新构建的顶级父小部件处控制该值。 "Page(here)[Stateful widget] - build() - 'generateListItem' 小部件..."

标签: flutter flutter-layout setstate


【解决方案1】:

每次调用 setState 时都会重置该标志,因为该标志位于您的 generateListItem() 小部件中,

我认为你必须将bool设置在一个列表中,所以当你调用setState时,bool列表中的状态没有重置,

List<bool> flag = [];  // 

Widget generateListItem(int i){ 
flag.add(false);
return InkWell(
   onTap:(){
      setState((){
         flag[i]=true;
      })
   },
   child: Text(flag[i]? "Changed" : "Not Changed"),
);}

【讨论】:

  • 太棒了! Map&lt;String,bool&gt; 也可以。
猜你喜欢
  • 1970-01-01
  • 2021-05-23
  • 2021-06-01
  • 2020-03-14
  • 2020-08-04
  • 2021-11-19
  • 2020-08-05
  • 2019-07-28
  • 1970-01-01
相关资源
最近更新 更多