【问题标题】:Map not updating rendered stateful child Widgets地图未更新呈现的有状态子小部件
【发布时间】:2020-06-04 07:01:54
【问题描述】:

我正在使用以下方法在堆栈中传播 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),
              ),
            );
          });

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

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

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    这里的问题是子小部件内部的状态没有更新。

    我的解决方案是用 RXDart 创建一个行为主体,并在小部件 initState 函数中绑定流监听函数。

    集团类

      final boxMovementController = BehaviorSubject<String>();
    
      Function(List<String>) get inputMovingBoxId =>
          boxMovementController.sink.add;
    

    子小部件

    streamSubscription = bloc.boxMovementController.listen((value) {
          setState(() {});
        });
    

    然后,当小部件检测到行为主题流的添加时,它就会调用 setState。

    然后,只要位置发生变化,父级就会 sink.add 到流中,从而触发子级的状态更新。

    父小部件

    bloc.boxMovementController(value);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2021-01-08
      • 2021-06-11
      • 1970-01-01
      • 2021-03-30
      • 2020-03-18
      相关资源
      最近更新 更多