Flutter长按收藏图标后列表需二次交互才更新问题求助
问题解决:长按收藏项后列表需二次交互才更新
问题出在嵌套的ListView结构上:你在FavouritesPage里用了外层ListView包裹内层ListView.builder,这种嵌套搭配shrinkWrap: true会导致状态更新时,内层列表无法立即感知到数据变化,需要二次交互触发重建。
修改方案
直接移除内层的ListView.builder,将收藏项通过map转换为ListTile,直接作为外层ListView的子项:
class FavouritesPage extends StatelessWidget { @override Widget build(BuildContext context) { var appState = context.watch<MyAppState>(); var favourites = appState.favourites; if (favourites.isEmpty) { return Center( child: Text('No favourites yet.'), ); } return ListView( children: [ Padding( padding: const EdgeInsets.all(20), child: Text('You have ' '${favourites.length} favourites:'), ), // 直接生成ListTile,无需嵌套ListView ...favourites.map((pair) { return ListTile( leading: GestureDetector( child: Icon(Icons.favorite), behavior: HitTestBehavior.translucent, onLongPress: () { appState.toggleFavorite(pair); }, ), title: Text(pair.asLowerCase), ); }).toList(), ], ); } }
额外说明
你的toggleFavorite方法逻辑是正确的,notifyListeners()也正确触发了状态更新,但嵌套ListView的渲染机制导致列表没有即时刷新。移除嵌套后,外层ListView会直接响应Provider的状态变化,长按删除后列表会立刻更新。
内容的提问来源于stack exchange,提问作者RabbitRun47
相关产品推荐
相关产品推荐

