0

我正在使用 Flutter(BloC 模式)构建一个流式传输多个摄像头馈送的小部件。当点击一个提要时,它会显示在主提要中(想想谷歌视频群聊,说话的人的脸显示在前面和中间,而其他人的脸在侧面较小)。

当尝试切换选定的提要时,状态 ( int) 会产生Bloc's的预期新值MapEventToState;但是,主CamFeed小部件不会切换提要。

StatefulWidget我对返回 a的这种用法的理解BlocBuilder<CamSwitcherBloc, int> 应该在该 int 更改时重建。相反,似乎什么都没有发生。build()仅在它第一次创建时被调用,并且当其中一个孩子的状态CamFeed正在更新时。

我已经通过天文台确认,正如预期的那样,只有一个CamSwitcherBloc.

所以- 我认为是错误的:

当我的 Bloc 中的 MapEventToState 产生一个新值(selectedCam,在下面的构建器中输入)时,build()应该为我的小部件调用。

如果这是正确的,任何关于在哪里继续我的狩猎的建议将不胜感激。

谢谢!

class CamSwitcher extends StatefulWidget {
  @override
  _CamSwitcherState createState() => _CamSwitcherState();
}

class _CamSwitcherState extends State<CamSwitcher> {

  @override
  Widget build(BuildContext context) {

    final camSwitcherBloc = BlocProvider.of<CamSwitcherBloc>(context);

    return BlocBuilder<CamSwitcherBloc, int>(
      builder: (context, selectedCam) => Stack(
        children: <Widget>[
          Container(
            width: 1200,
            height: 800,
            child: CamFeed(
              topic: camSwitcherBloc.cameras[selectedCam],
            ),
          ),
          Row(
            children: <Widget>[
              Container(
                width: 180,
                height: 120,
                child: CamFeed(
                  topic: CamSwitcherBloc.cam1,
                  focuser: () {
                    camSwitcherBloc.dispatch(ExpandCamera(0));
                  },
                ),
              ),
              Container(
                width: 180,
                height: 120,
                child: CamFeed(
                  topic: CamSwitcherBloc.cam2,
                  focuser: () {
                    camSwitcherBloc.dispatch(ExpandCamera(1));
                  },
                ),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

4

1 回答 1

0

原来这与 CamFeed 小部件有关。切换后,它确实订阅了新的提要,但并没有退订旧的提要。这是 CamFeed 工作方式的症状,不太可能对其他读者有用。

可能与其他人相关:在这种情况下,虽然CamSwitcherBloc没有重建(尽管我预计会),但它的子 ( Camfeed) 实际上正如预期的那样。

于 2019-11-15T07:05:43.163 回答