Today 요약
[✅] 프로그래머스 코딩테스트 Lv0 1문제
[✅] flutter 강의 2개
배운 점
Take a picture using the camera
How to use a camera plugin on mobile.
docs.flutter.dev
1. flutter camera selfie Mode
1-1 camera 패키지
flutter pub add camera
1-2 CameraController
bool _isSelfieMode = false;
late CameraController _cameraController;
Future<void> initCamera() async {
final cameras = await availableCameras();
if(cameras.isEmpty){return;}
_cameraController = CameraController(
cameras[_isSelfieMode ? 1 : 0],
ResolutionPreset.ultraHigh,
);
await _cameraController.initialize();
}
- _cameraController 선언
- initCamera : 비동기로 실행되며 카메라 초기화 작업을 수행한다
- availableCameras : 사용 가능한 카메라 목록을 가져옴 이 목록은 Flutter의 camera 패키지에서 제공. 이 역시 비동기로 await 사용
- 카메라가 없는 경우 isEmpty 조건을 사용해 사용 가능한 카메라 목록이 비어있는지 확인 만약 그렇다면 아무 작업도 수행하지 않고 함수 종료한다
- _cameraContoller 초기화 : 생성하고 설정한다 _isSelfieMode 변수를 기반으로 사용할 카메라 선택
- ResolutionPreset.ultraHigh 를 사용해 카메라 해상도도 설정
- _cameraController.initialize()를 호출해 카메라 초기화 > 이 동작은비동기 작업이며 카메라가 준비될 때까지 기다린다
1-3 토글 함수
Future<void> _toggleSelfieMode() async {
_isSelfieMode = !_isSelfieMode;
//isSelfieMode 값을 바꿔주고 initCamera를 한번 더 실행 후 isSelfieMode가 달라짐 > 카메라가 바뀌는 것
await initCamera();
setState(() {});
}
- _isSelfieMode 변수의 값을 반전 true - false
- await initCamera() _isSelfieMode 값을 변경후 initCamera 함수를 다시 호출하여 카메라 재 초기화하여 카메라 모드 변경이 된다
1-4 적용하기
Stack(
children :[
CameraPreview(_cameraController),
IconButton(
color: Colors.white,
onPressed: _toggleSelfieMode,
icon: const Icon(Icons.cameraswitch),
),
]
)
2. flutter camera flash Mode
2-1 flashmode
late FlashMode _flashMode;
Future<void> initCamera() async {
final cameras = await availableCameras();
if (cameras.isEmpty) {
return;
}
_cameraController = CameraController(
cameras[_isSelfieMode ? 1 : 0],
ResolutionPreset.ultraHigh,
);
await _cameraController.initialize();
_flashMode = _cameraController.value.flashMode;
//휴대폰 카메라가 가진 값으로 flashmode 값을 초기화
}
2-2 flash 토글 함수
Future<void> _setFlashMode(FlashMode newFlashMode) async {
await _cameraController.setFlashMode(newFlashMode); //Future
_flashMode = newFlashMode;
setState(() {});
}
2-3 버튼에 적용
IconButton(
color: _flashMode == FlashMode.off
? Colors.amber.shade200
: Colors.white,
onPressed: () => _setFlashMode(FlashMode.off),
icon: const Icon(Icons.flashlight_on),
),
- FlashMode.off
- FlashMode.always
- FlashMode.auto
- FlashMode.torch
'TIL' 카테고리의 다른 글
20230919 TIL (0) | 2023.09.19 |
---|---|
20230918 TIL :: 코로나에 진 몸뚱아리 (0) | 2023.09.18 |
20230911 TIL : 업보빔 맞는 중 (1) | 2023.09.11 |
20230905 : 오늘도 해낸 나 아주 칭찬 (0) | 2023.09.05 |
20230904 TIL : 믿음의 월요일 라스고 (0) | 2023.09.04 |