import 'package:camera/camera.dart'; class CameraService { CameraController? controller; late List _cameras; bool _isFront = true; bool get isFront => _isFront; /// Init default Future init() async { _cameras = await availableCameras(); final front = _cameras.firstWhere( (c) => c.lensDirection == CameraLensDirection.front, orElse: () => _cameras.first, ); controller = CameraController( front, ResolutionPreset.high, enableAudio: false, ); await controller!.initialize(); _isFront = true; } /// Switch front <-> back Future switchCamera() async { if (_cameras.length < 2) return; final newCam = _cameras.firstWhere( (c) => c.lensDirection == (_isFront ? CameraLensDirection.back : CameraLensDirection.front), ); await controller?.dispose(); controller = CameraController( newCam, ResolutionPreset.high, enableAudio: false, ); await controller!.initialize(); _isFront = !_isFront; } Future takePicture() async { if (controller == null || !controller!.value.isInitialized) { throw Exception('Camera not ready'); } return controller!.takePicture(); } void dispose() { controller?.dispose(); } }