地图未更新呈现的有状态子控件

时间:2020-06-04 07:01:54

标签: flutter dart

我正在使用以下内容在堆栈中散布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),
              ),
            );
          });

如果我打印出地图小部件的位置,我可以看到小部件正在更新,但是它不会移动。

你知道这里可能出什么问题吗?

1 个答案:

答案 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);

希望这对面临类似问题的其他人很有用。