fix: improve camera controller state management by ensuring proper initialization and disposal, enhancing image capture reliability

This commit is contained in:
2025-12-16 09:19:29 +03:30
parent 98c900f408
commit 39ca4f0c35
2 changed files with 11 additions and 2 deletions

View File

@@ -20,17 +20,21 @@ class RImagePickerController extends ChangeNotifier {
try { try {
isLoading = true; isLoading = true;
await disposeCameraController(); await disposeCameraController();
await getAvailableCameras(); await getAvailableCameras();
if (_cameras.isNotEmpty) { if (_cameras.isNotEmpty) {
cameraController = CameraController( cameraController = CameraController(
_cameras[0], _cameras[0],
ResolutionPreset.high, ResolutionPreset.high,
enableAudio: false, enableAudio: false,
); );
await cameraController?.initialize(); await cameraController?.initialize();
notifyListeners();
isCameraReady = true; isCameraReady = true;
isLoading = false; isLoading = false;
notifyListeners();
} else { } else {
isCameraReady = false; isCameraReady = false;
isLoading = false; isLoading = false;
@@ -45,8 +49,9 @@ class RImagePickerController extends ChangeNotifier {
} }
Future<void> takePicture() async { Future<void> takePicture() async {
if (cameraController == null || !cameraController!.value.isInitialized) if (cameraController == null || !cameraController!.value.isInitialized) {
return; return;
}
if (isLoading) return; if (isLoading) return;
try { try {
@@ -73,6 +78,9 @@ class RImagePickerController extends ChangeNotifier {
} }
Future<void> disposeCameraController() async { Future<void> disposeCameraController() async {
isCameraReady = false;
notifyListeners();
await cameraController?.dispose(); await cameraController?.dispose();
cameraController = null;
} }
} }