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 вызовет перестройку

Другие вопросы по тегам