ListView不刷新,而所附的列表却可以(Flutter)
ListView不刷新,而所附的列表却可以(Flutter)
我正在尝试熟悉Flutter,遇到了一些奇怪的情况。我想要构建一个动态的ListView
,其中的+
按钮允许添加元素。我编写了以下状态代码:
class MyWidgetListState extends State
List
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:
new ListView(
shrinkWrap: true,
children: _objectList
),
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children:
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"));
});
非常感谢您的帮助和解释,现在它运行得很好。
我正在实现分页,所以我正在将一堆文档添加到列表中。在setstate()中,posts = List