这是我的代码:
class HomeCardList extends StatefulWidget {
final Location location;
final Position position;
HomeCardList(this.location, this.position);
@override
_HomeCardListState createState() => _HomeCardListState();
}
class _HomeCardListState extends State<HomeCardList> {
List<Widget> _homeCards = [TimeDateCard(), TimeDateCard()];
@override
Widget build(BuildContext context) {
return new CustomScrollView(
slivers: <Widget>[
new LocationAppbar(
location: widget.location,
position: widget.position,
),
new SliverList(
delegate: new SliverChildListDelegate(_homeCards),
),
new SliverToBoxAdapter(
child: RaisedButton(onPressed: () {
setState(() {
_homeCards.removeLast();
});
}),
),
new SliverFixedExtentList(
delegate: new SliverChildBuilderDelegate((context, index) {
return new Text('Item #$index');
}),
itemExtent: 320.0)
],
);
}
}
当我按下RaisedButton
时,它会确实从列表中删除我要显示的最后一个小部件(如果我要添加print()
语句,则会看到一个条目已删除),但并未更新状态,我仍然可以看到2个小部件。当我第三次按下按钮时,尝试从空列表中删除项目时出现异常。
我在这里做错了什么?为什么当我从列表中删除一个小部件时,状态无法正确更新,并且仅显示一个小部件?
编辑: 当我尝试类似的东西
setState(){
_homeCards = [];
}
它会刷新并显示一个空白列表,这是怎么回事?
答案 0 :(得分:0)
您需要使_homeCards
成为吸气剂,以便对其进行延迟计算,然后setState
将触发重建