我正在使用以下内容在堆栈中散布Map值。所有小部件都已定位。
...widgets.values,
这很好,但是当我使用Map.update函数更新某个键处的小部件的位置时,小部件的位置没有改变。
if (widgets.containsKey(uniqueValue)) {
setState(() {
widgets.update(
uniqueValue,
(value) => Box(
uuid: uniqueValue,
startPosLeft: newPos,
startPostop: newPos,
onMoved: (uniqueValue) => _boxMoved(uniqueValue),
),
);
});
如果我打印出地图小部件的位置,我可以看到小部件正在更新,但是它不会移动。
你知道这里可能出什么问题吗?
答案 0 :(得分:0)
这里的问题是子窗口小部件内的状态未更新。
我的解决方案是使用RXDart创建行为主题,并将流侦听功能绑定到小部件initState函数中。
集团阶级
final boxMovementController = BehaviorSubject<String>();
Function(List<String>) get inputMovingBoxId =>
boxMovementController.sink.add;
子小部件
streamSubscription = bloc.boxMovementController.listen((value) {
setState(() {});
});
只要该小部件检测到行为主题流中有添加,它就会调用setState。
然后,只要位置发生更改,父项就会下沉到流中,从而触发子项的状态更新。
父小部件
bloc.boxMovementController(value);
希望这对面临类似问题的其他人很有用。