【发布时间】:2018-07-13 10:30:02
【问题描述】:
我无法从孩子更新父状态。子小部件有一个名为“onDragEnd”的回调,一旦网格单元上的拖放操作完成,就会调用该回调。此时父级(网格)应根据项目新排序重建 UI,但没有任何反应。如果我在“setState()”之前设置断点,则“elems”属性包含正确排序的正确项目。即使我替换了整个列表,UI 也不会更新。有什么建议么?我错过了什么?
class _CustomGridState extends State<CustomGrid> {
List<Pack> elems;
_CustomGridState(this.elems);
@override
Widget build(BuildContext context) {
return GridView.count(
crossAxisCount: 3,
children: this
.elems
.map((pack) => PackFingernail(pack: pack,
onDragEnd: (Pack source, Pack target) {
var sourceIndex = this.elems.indexWhere((p) => p.id == source.id);
var targetIndex = this.elems.indexWhere((p) => p.id == target.id);
this.elems.removeAt(sourceIndex);
this.elems.insert(targetIndex, source);
setState(() {}); // Not working <-----
})
).toList()
);
}
}
【问题讨论】:
-
PackFingernail 是有状态的小部件?
-
是的,它是一个有状态的小部件,它管理着它的内部状态