【问题标题】:Flutter ListView not updating after setState, using StatefulWidget as itemsFlutter ListView在setState之后没有更新,使用StatefulWidget作为项目
【发布时间】:2019-02-27 02:34:15
【问题描述】:

一个页面包含一个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)),
            )
          ],
        ),
      );
    },
  ),

【问题讨论】:

  • 请分享一些代码以查看您的实现并帮助您,谢谢:)

标签: flutter


【解决方案1】:

我遇到了同样的问题。

我已添加到我的 Listview 中:key: UniqueKey()

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

【讨论】:

    【解决方案2】:

    当您的数据发生变化时,您应该在 getItem() 函数中调用 setState() 函数,以便将它们应用于您的 Listview 项目,这一点得到了支持,因为当您将项目滚动到屏幕外时,您的数据会发生变化:

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

    【讨论】:

    • 空的 setState() 是代码异味。您应该在传递给 setState 的闭包内进行更改。
    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 2018-06-11
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2022-01-07
    相关资源
    最近更新 更多