SliverList не обновляется при добавлении или удалении элемента
Это мой код:
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 ответов
Вам нужно сделать _homeCards
геттер, поэтому он вычисляется лениво, затем setState
вызовет перестройку