Flutter (BloC パターン) を使用して、複数のカメラ フィードをストリーミングするウィジェットを作成しています。フィードをクリックすると、メイン フィードに表示されます (Google ハングアウトでは、話している人の顔が正面中央に表示され、他の人は横に小さく表示されます)。
選択したフィードを切り替えようとすると、状態 ( int
) が によって期待される新しい値で生成されBloc
ますMapEventToState
。ただし、メインCamFeed
ウィジェットはフィードを切り替えません。
StatefulWidget
aを返す 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));
},
),
),
],
),
],
),
);
}
}