ListView不会刷新,而附加列表会刷新(Flutter)

我试图熟悉颤动,并且遇到一些奇怪的情况。我想建立一个动态ListView+按钮可以添加元素的地方。我编写了以下状态代码:

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在底部添加了一个简单的小部件,该小部件显示了列表的大小。当我单击“添加/删除”按钮并正确刷新时,此选项可以正常工作。我想念什么吗?

回答:

Flutter基于不可变数据。这意味着,如果对对象的引用未更改,则内容也不会更改。

问题是,在您的情况下,您总是发送到ListView同一数组,而改变其内容。但这导致ListView假定列表没有更改,因此防止了无用的渲染。

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

setState(() {

_objectList = List.from(_objectList)

..add(Text("foo"));

});

以上是 ListView不会刷新,而附加列表会刷新(Flutter) 的全部内容, 来源链接: utcz.com/qa/433659.html

回到顶部