Navaron Bracke

cherry pick available cameras into new implementation

... ... @@ -264,6 +264,7 @@ class MethodChannelMobileScanner extends MobileScannerPlatform {
_textureId = textureId;
final int? numberOfCameras = startResult['numberOfCameras'] as int?;
final bool hasTorch = startResult['torchable'] as bool? ?? false;
final Map<Object?, Object?>? sizeInfo =
... ... @@ -279,7 +280,11 @@ class MethodChannelMobileScanner extends MobileScannerPlatform {
size = Size(width, height);
}
return MobileScannerViewAttributes(hasTorch: hasTorch, size: size);
return MobileScannerViewAttributes(
hasTorch: hasTorch,
numberOfCameras: numberOfCameras,
size: size,
);
}
@override
... ...
... ... @@ -239,6 +239,7 @@ class MobileScannerController extends ValueNotifier<MobileScannerState> {
);
value = value.copyWith(
availableCameras: viewAttributes.numberOfCameras,
cameraDirection: effectiveDirection,
isInitialized: true,
isRunning: true,
... ...
... ... @@ -4,12 +4,16 @@ import 'dart:ui';
class MobileScannerViewAttributes {
const MobileScannerViewAttributes({
required this.hasTorch,
this.numberOfCameras,
required this.size,
});
/// Whether the current active camera has a torch.
final bool hasTorch;
/// The number of available cameras.
final int? numberOfCameras;
/// The size of the camera output.
final Size size;
}
... ...
... ... @@ -8,6 +8,7 @@ import 'package:mobile_scanner/src/mobile_scanner_exception.dart';
class MobileScannerState {
/// Create a new [MobileScannerState] instance.
const MobileScannerState({
required this.availableCameras,
required this.cameraDirection,
required this.isInitialized,
required this.isRunning,
... ... @@ -20,6 +21,7 @@ class MobileScannerState {
/// Create a new [MobileScannerState] instance that is uninitialized.
const MobileScannerState.uninitialized(CameraFacing facing)
: this(
availableCameras: null,
cameraDirection: facing,
isInitialized: false,
isRunning: false,
... ... @@ -28,6 +30,11 @@ class MobileScannerState {
zoomScale: 1.0,
);
/// The number of available cameras.
///
/// This is null if the number of cameras is unknown.
final int? availableCameras;
/// The facing direction of the camera.
final CameraFacing cameraDirection;
... ... @@ -55,6 +62,7 @@ class MobileScannerState {
/// Create a copy of this state with the given parameters.
MobileScannerState copyWith({
int? availableCameras,
CameraFacing? cameraDirection,
MobileScannerException? error,
bool? isInitialized,
... ... @@ -64,6 +72,7 @@ class MobileScannerState {
double? zoomScale,
}) {
return MobileScannerState(
availableCameras: availableCameras ?? this.availableCameras,
cameraDirection: cameraDirection ?? this.cameraDirection,
error: error,
isInitialized: isInitialized ?? this.isInitialized,
... ...