首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ListView不刷新,而附加列表刷新(颤动)

ListView不刷新,而附加列表刷新(颤动)
EN

Stack Overflow用户
提问于 2018-08-13 06:39:39
回答 1查看 8.6K关注 0票数 9

我正在尝试熟悉flutter,但我面临着一些奇怪的情况。我想构建一个动态ListView,其中的+按钮允许添加元素。我编写了以下状态代码:

代码语言:javascript
复制
class MyWidgetListState extends State<MyWidgetList> {
  List<Widget> _objectList = <Widget>[
    new Text('test'),
    new Text('test')
  ];

  void _addOne() {
    setState(() {
      _objectList.add(new Text('test'));
    });
  }

  void _removeOne() {
    setState(() {
      _objectList.removeLast();
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[
        new ListView(
          shrinkWrap: true,
          children: _objectList
        ),
        new Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new IconButton(
              icon: new Icon(Icons.remove_circle),
              iconSize: 36.0,
              tooltip: 'Remove',
              onPressed: _objectList.length > 2 ? _removeOne : null,
            ),
            new IconButton(
              icon: new Icon(Icons.add_circle),
              iconSize: 36.0,
              tooltip: 'Add',
              onPressed: _addOne,
            )
          ],
        ),
        new Text(_objectList.length.toString())
      ],
    );
  }
}

这里我的问题是,ListView在视觉上被我初始化时使用的2个元素卡住了。

在内部,_objectList管理得很好。出于测试目的,我在底部添加了一个简单的Text小部件,用于显示列表的大小。当我点击Add/Remove按钮时,它可以很好地工作,并且它会被正确刷新。我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-13 07:01:02

Flutter基于不可变的数据。这意味着如果对对象的引用没有改变,那么内容也不会改变。

问题是,在您的示例中,总是将相同的数组发送到ListView,而不是改变其内容。但这会导致ListView假设列表没有变化,从而阻止了无用的渲染。

您可以更改您的setState以记住这一点:

代码语言:javascript
复制
setState(() {
  _objectList = List.from(_objectList)
    ..add(Text("foo"));
});
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51813435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档