【问题标题】:SliverList doesn't update when adding or removing an item添加或删除项目时 SliverList 不更新
【发布时间】:2023-04-01 04:14:01
【问题描述】:

这是我的代码:

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 = [];
}

它确实刷新了一个空列表,这里有什么问题?

【问题讨论】:

  • 删除项目后尝试调用setState内的列表,removeLast()返回删除的项目。

标签: dart flutter state flutter-sliver


【解决方案1】:

您需要将_homeCards 设为getter,以便延迟计算,然后setState 将触发重建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-26
    • 2014-05-05
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2019-12-15
    • 2020-12-18
    • 2016-06-29
    相关资源
    最近更新 更多