GetX使用Obx无法自动刷新ReorderableSliverList列表问题求助
问题根因
Obx仅包裹了列表单个条目的构建逻辑,只能响应单条数据的变化,ReorderableSliverList的childCount参数处于Obx监听范围外,数组长度变化时组件无法感知,不会新增渲染条目- Reorderable系列组件要求每个子项必须携带唯一
Key,否则无法识别列表结构的变动,也会导致刷新异常
修复代码
将Obx层级上移包裹整个列表组件,同时给子项传入唯一Key即可,参考代码如下:
Obx( () => controller.products.isEmpty ? const Center(child: Text("BELUM ADA DATA")) : ReorderableSliverList( delegate: ReorderableSliverChildBuilderDelegate( (BuildContext context, int index) { final data = controller.products[index]; // 传入唯一Key,满足Reorderable组件要求 return ItemView(data, key: ValueKey(data.id)); }, childCount: controller.products.length, ), onReorder: _onReorder, ), )
注意事项
- 外层Obx已经可以监听
products数组的所有变动(新增/删除/重排序),无需在条目构建逻辑中重复嵌套Obx - 不要使用数组下标作为子项的Key,避免列表重排序后出现渲染错乱的问题
内容的提问来源于stack exchange,提问作者scarlet pro
相关产品推荐
相关产品推荐

