【问题标题】:How can I update/refresh the view of a ListView after performing an action like a tap on a row执行诸如点击行之类的操作后,如何更新/刷新 ListView 的视图
【发布时间】:2026-02-07 19:20:02
【问题描述】:

我正在关注 Flutter 网站上保存/收藏的教程

代码:

void _pushFavourites() {
    Navigator.of(context).push(
      MaterialPageRoute<void>(builder: (BuildContext ctx) {
        var tiles = _favourites.map((WordPair pair) {
          return ListTile(
            title: Text(pair.asCamelCase, style: _fontStyle),
            onTap: () {
              // ⬇︎ probably here I should update tiles, but I don't know how to do it
              setState(() {
                _favourites.remove(pair);
              });
            },
          );
        });
        final divided = ListTile.divideTiles(
          context: ctx,
          tiles: tiles,
        ).toList();

        return Scaffold(
          appBar: AppBar(title: Text('Favourite Suggestions')),
          body: ListView(children: divided,)
        );
        
      })
    );
  }

整个代码是here

【问题讨论】:

    标签: flutter listview setstate


    【解决方案1】:

    您正在调用父路由的setState(具有_pushFavourites 功能的小部件)

    为这部分代码创建一个单独的有状态小部件,它应该可以工作:

    var tiles = _favourites.map((WordPair pair) {
              return ListTile(
                title: Text(pair.asCamelCase, style: _fontStyle),
                onTap: () {
                  // ⬇︎ probably here I should update tiles, but I don't know how to do it
                  setState(() {
                    _favourites.remove(pair);
                  });
                },
              );
            });
            final divided = ListTile.divideTiles(
              context: ctx,
              tiles: tiles,
            ).toList();
    
            return Scaffold(
              appBar: AppBar(title: Text('Favourite Suggestions')),
              body: ListView(children: divided,)
            );
    

    【讨论】:

    • 效果很好!我对 Flutter 很陌生,我必须更好地理解有状态小部件背后的逻辑
    最近更新 更多