Flutter Table如何仅刷新指定行(如第一行)?
如何让Flutter仅刷新Table中的指定行(如第一行)
现有Table结构如下:
Table TableRow1 TableCell TableCell WidgetA TableRow2 TableRow3由于TableRow并非StatefulWidget,请问如何让Flutter仅刷新/重建指定行(例如第一行)的内容?
可行解决方案:
给目标行套独立的StatefulWidget
把需要单独刷新的TableRow1封装成一个自定义的StatefulWidget,比如命名为RefreshableFirstRow,将该行内的所有TableCell、WidgetA都放到这个StatefulWidget的build方法中。后续只需更新这个StatefulWidget的内部状态,就能单独触发该行的重建,不会影响Table的其他行。用ValueListenableBuilder包裹目标行内容
如果行内内容依赖某个动态数据源,可以用ValueListenableBuilder包裹TableRow1的所有子组件。当监听的数据源更新时,只会重建ValueListenableBuilder内部的内容,也就是目标行,其他行不受波及。示例代码如下:TableRow( children: [ ValueListenableBuilder<String>( valueListenable: _firstRowDataNotifier, builder: (context, data, child) { return [ TableCell(child: Text(data)), TableCell(child: Text(data)), WidgetA(data: data), ]; }, ), ], )其中
_firstRowDataNotifier是ValueNotifier<String>实例,需要刷新第一行时,调用_firstRowDataNotifier.value = "新数据"即可触发局部刷新。避免全局setState
不要在Table所在的父StatefulWidget中调用setState,这会导致整个Table及所有行全部重建。把状态管理范围缩小到目标行级别,通过上述两种方式实现精准刷新。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

