panoramaWidth property

double get panoramaWidth

How wide a scene spanning the whole set is, in the canvas's logical units — total canvases side by side.

With panoramaOffset, this is the whole of a continuous background: draw something panoramaWidth wide, translate it by panoramaOffset, and each shot lands on its own slice of it. Every shot is still rendered on its own and knows nothing of the others; the arithmetic is the only thing that joins them.

Positioned(
  left: shot.panoramaOffset,
  top: 0,
  width: shot.panoramaWidth,
  height: shot.canvas.logicalHeight,
  child: theScene,
)

Positioned, not a translated SizedBox. Under a StackFit.expand stack every non-positioned child is forced to the canvas's size, so a SizedBox asking for panoramaWidth silently gets one canvas and every shot but the first translates an empty strip off its own edge. It looks exactly like a frame that forgot to draw.

Implementation

double get panoramaWidth => total * canvas.logicalWidth;