ac602acf47
Preview now centers at the sensor aspect ratio (letterboxed on the dark backdrop) instead of FittedBox cover, which cropped ~38% horizontally and made the preview differ from the full-frame takePicture output. Zoom capability hangs off CaptureSource as default implementations (minZoom/maxZoom = 1, setZoom no-op) so existing fakes stay untouched; CameraPluginSource probes getMin/MaxZoomLevel after initialize (failure keeps 1/1 and disables the gesture). The page attaches a scale GestureDetector only when maxZoom > 1: pinch drives setZoom (throttled at 0.05 delta, serialized to prevent out-of-order platform calls), a badge shows the current level and hides after 1s, double-tap resets to 1.0x, and camera flip/reopen resets zoom state. _StaticCaptureSource in album_detail_page_test.dart switches implements -> extends to inherit the new defaults. Co-Authored-By: Claude Code <noreply@anthropic.com>