switchCameraSensor method
Future<void>
switchCameraSensor({
- CameraAspectRatios? aspectRatio,
- double? zoom,
- FlashMode? flash,
- SensorType? type,
Switch camera from Sensors.BACK
Sensors.front
All states can switch this
Implementation
Future<void> switchCameraSensor({
CameraAspectRatios? aspectRatio,
double? zoom,
FlashMode? flash,
SensorType? type,
}) async {
final previous = cameraContext.sensorConfig;
SensorConfig next;
if (previous.sensors.length <= 1) {
next = SensorConfig.single(
sensor: previous.sensors.first.position == SensorPosition.back
? Sensor.position(SensorPosition.front)
: Sensor.position(SensorPosition.back),
// TODO Initial values are not set in native when set like this
aspectRatio: aspectRatio ?? CameraAspectRatios.ratio_4_3,
zoom: zoom ?? 0.0,
flashMode: flash ?? FlashMode.none,
);
} else {
// switch all camera position in array by one like this:
// old: [front, telephoto, wide]
// new : [wide, front, telephoto]
final newSensorsCopy = [...previous.sensors.whereNotNull()];
next = SensorConfig.multiple(
sensors: newSensorsCopy..insert(0, newSensorsCopy.removeAt(newSensorsCopy.length - 1)),
// TODO Initial values are not set in native when set like this
aspectRatio: aspectRatio ?? CameraAspectRatios.ratio_4_3,
zoom: zoom ?? 0.0,
flashMode: flash ?? FlashMode.none,
);
}
await cameraContext.setSensorConfig(next);
// TODO Once initial sensorConfig is correctly handled, we can remove below lines
if (aspectRatio != null) {
await next.setAspectRatio(aspectRatio);
}
if (zoom != null) {
await next.setZoom(zoom);
}
if (flash != null) {
await next.setFlashMode(flash);
}
}