fix: improve camera controller state management by ensuring proper initialization and disposal, enhancing image capture reliability
This commit is contained in:
@@ -426,3 +426,4 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user