0

Flutter (BloC パターン) を使用して、複数のカメラ フィードをストリーミングするウィジェットを作成しています。フィードをクリックすると、メイン フィードに表示されます (Google ハングアウトでは、話している人の顔が正面中央に表示され、他の人は横に小さく表示されます)。

選択したフィードを切り替えようとすると、状態 ( int) が によって期待される新しい値で生成されBlocますMapEventToState。ただし、メインCamFeedウィジェットはフィードを切り替えません。

StatefulWidgetaを返す aのこの使用法についての私の理解は、その int が変更されたときに再構築するBlocBuilder<CamSwitcherBloc, int> 必要があります。代わりに、何も起こっていないようです。最初に作成されたとき、およびその中の子の 1 つの状態が更新されbuild()たときにのみ呼び出されます。CamFeed

天文台を通じて確認したところ、予想どおり、CamSwitcherBloc.

だから- 私はそれを考えるのは間違っています:

ブロック内の 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