From d9a8bf5de4165f691061f3379db5c7fc352ff0e4 Mon Sep 17 00:00:00 2001 From: sindhu Date: Tue, 18 Feb 2025 12:01:20 +0700 Subject: [PATCH] step 18 : add dropdown seting camera --- lib/app/constant.dart | 7 +++++ lib/screen/scan/scan_screen.dart | 45 ++++++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/lib/app/constant.dart b/lib/app/constant.dart index 6e6fcac..9906f44 100644 --- a/lib/app/constant.dart +++ b/lib/app/constant.dart @@ -78,6 +78,13 @@ class Constant { ); } + static TextStyle titlePosisiHP({required BuildContext context}) { + return TextStyle( + fontSize: Constant.getActualYPhone(context: context, y: 18), + fontWeight: FontWeight.normal, + ); + } + static TextStyle titleInputan600({required BuildContext context}) { return TextStyle( fontSize: Constant.getActualYPhone(context: context, y: 16), diff --git a/lib/screen/scan/scan_screen.dart b/lib/screen/scan/scan_screen.dart index 87c859e..8fe1a80 100644 --- a/lib/screen/scan/scan_screen.dart +++ b/lib/screen/scan/scan_screen.dart @@ -31,15 +31,17 @@ class ScanScreen extends HookConsumerWidget { final currentUser = ref.watch(currentUserProvider); final host = currentUser?.host ?? ""; final userId = currentUser?.model.userId ?? ""; + final selectedResolution = + useState(ResolutionPreset.medium); useEffect(() { Future initializeCamera() async { final cameras = await availableCameras(); cameraController.value = CameraController( - cameras[0], - // ResolutionPreset.max, - ResolutionPreset.medium, - ); + cameras[0], + // ResolutionPreset.max, + // ResolutionPreset.medium, + selectedResolution.value); initializeControllerFuture.value = cameraController.value!.initialize(); await initializeControllerFuture.value; await cameraController.value!.setFlashMode(FlashMode.off); @@ -49,6 +51,18 @@ class ScanScreen extends HookConsumerWidget { return null; }, []); + Future initializeCameraAfterChangeResolution() async { + final cameras = await availableCameras(); + cameraController.value = CameraController( + cameras[0], + // ResolutionPreset.max, + // ResolutionPreset.medium, + selectedResolution.value); + initializeControllerFuture.value = cameraController.value!.initialize(); + await initializeControllerFuture.value; + await cameraController.value!.setFlashMode(FlashMode.off); + } + Future rotateAndCropImage(File imageFile) async { Uint8List imageBytes = await imageFile.readAsBytes(); img.Image? original = img.decodeImage(imageBytes); @@ -188,8 +202,29 @@ class ScanScreen extends HookConsumerWidget { return Scaffold( appBar: AppBar( - title: Text('Posisi Foto Landscape'), + title: Text( + 'Posisi Foto Landscape', + style: Constant.titlePosisiHP(context: context), + ), automaticallyImplyLeading: false, + actions: [ + DropdownButton( + value: selectedResolution.value, + onChanged: (ResolutionPreset? newValue) { + if (newValue != null) { + selectedResolution.value = newValue; + initializeCameraAfterChangeResolution(); + } + }, + items: ResolutionPreset.values.map((ResolutionPreset value) { + return DropdownMenuItem( + value: value, + child: Text(value.toString().split('.').last), + ); + }).toList(), + underline: SizedBox.shrink(), + ), + ], ), backgroundColor: Colors.black.withOpacity(0.5), body: Stack(