使用StatefulWidget作为项目,在setState之后,Flutter ListView不会更新

时间:2019-02-27 02:34:16

标签: flutter

一个页面包含一个ListView,该页面的itemBuilder返回一个StatefulWidget,但是在此页面中调用setState之后,将检索到新数据,但ListView不会更新,直到将当前现有项目滚动出屏幕为止。

StatelessWidget替换项目是可行的,但是我的项目必须是有状态的,因为它们每个都有一些动画。

如何刷新ListView


  ListView.builder(
    padding: EdgeInsets.only(top: listMarginTop, bottom: marginBottom),
    controller: scrollController,
    itemCount: cellCount,
    itemBuilder: (BuildContext context, int index) {
      return Container(
        margin: EdgeInsets.fromLTRB(marginLeft, verticalSpacing, marginRight, 0),
        height: itemHeight,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            Container(
              width: itemWidth,
              height: itemHeight,
              child: getItem(index * 2, Size(itemWidth, itemHeight)),///return a StatefulWidget
            ),
            Container(
              width: itemWidth,
              height: itemHeight,
              child: getItem(index * 2 + 1, Size(itemWidth, itemHeight)),
            )
          ],
        ),
      );
    },
  ),

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。

我已添加到我的列表视图中:key: UniqueKey()

而且效果很好,不需要其他任何东西:)

答案 1 :(得分:1)

当数据更改时,应在setState()函数内调用getItem()函数,以便将其应用于Listview项,事实是,当您更改数据时,这会得到支持滚动屏幕外的项目:

   getItem(){
     //your implementation
     setState();
   }