Flutter ReorderableListView拖拽列表不显示WebService返回数据问题
问题原因
- Flutter StatefulWidget 仅当调用
setState方法时才会触发UI重绘,你在异步请求接口拿到数据、往listeTaches列表新增元素后没有触发重绘逻辑,build方法一直使用初始的静态数据渲染组件,因此接口返回的数据不会展示在页面上。 getTaches是异步方法,执行顺序上initState调用该方法后,不会等待接口返回就会先执行首次build,接口数据返回后仅修改了内存中的列表,没有通知框架更新UI,就会出现控制台能打印全量数据、页面仅展示静态数据的现象。
修复方案
只需在getTaches方法中完成列表数据更新后调用setState触发重绘即可,修改后的getTaches代码如下:
void getTaches() async { Session session = new Session(); var taches = jsonDecode(await session.authentification()); // 把列表更新逻辑放到setState中,触发UI重绘 setState(() { for(int i = 0; i < taches['result']["inRangeTasks"].length ; i++){ var tacheStr = taches['result']["inRangeTasks"][i]['name']; listeTaches.add(tacheStr.toString()); } }); print(listeTaches); }
优化建议
- 可新增加载状态变量,在接口请求过程中展示加载占位符,避免用户在接口返回前仅看到部分静态数据的体验问题。
- 列表项的
key建议使用和业务数据绑定的唯一值(比如任务ID)替代UniqueKey,避免重绘时出现不必要的组件销毁重建,提升拖拽排序的性能和稳定性。
内容的提问来源于stack exchange,提问作者JS1
相关产品推荐
相关产品推荐

