Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- snackbar
- Snapshot
- 문법
- ListView.builder
- switch
- borderRadius
- Firebase
- Stream
- multiprovider
- setstate
- reference
- Camera
- changenotifierprovider
- datetime
- consumer
- swift 문법
- provider
- Swift
- Navigator
- platformexception
- divider
- permission
- enum
- globalkey
- user
- controller
- runTransaction
- changenotifier
- signout
- transform
Archives
- Today
- Total
코딩하는 제리
[Flutter/Project](Instagram Clone) Provider를 이용한 카메라 상태관리1 본문
Flutter/Project_InstaClone(완)
[Flutter/Project](Instagram Clone) Provider를 이용한 카메라 상태관리1
JerryCho 2021. 1. 29. 17:29
* 1. availableCamera 가져오기.
* 2. 카메라 리스트에서 첫번째 카메라 사용.
* 3. CameraController 인스턴스 생성.
* 4. CameraController initialize().
* 5. show preview.
* 6. set ready to take photo.
소스코드 및 pubspec.yaml
// models/camera_state.dart
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
/* 카메라 상태 파일 만들기
* 1. availableCamera 가져오기.
* 2. 카메라 리스트에서 첫번째 카메라 사용.
* 3. CameraController 인스턴스 생성.
* 4. CameraController initialize().
* 5. show preview.
* 6. set ready to take photo.
*/
class CameraState extends ChangeNotifier {
CameraController _controller;
CameraDescription _cameraDescription;
// 카메라 준비 여부.
bool _readyTakePhoto = false;
void dispose() {
// 해당 화면이 종료될 때, 초기값으로 설정.
if (_controller != null) _controller.dispose();
_controller = null;
_cameraDescription = null;
_readyTakePhoto = false;
// 변경된 값을 consumer에게 알림
notifyListeners();
}
void getReadyToTakePhoto() async {
// 1. availableCamera 가져오기.
// availableCameras는 future 타입이기에 async-await 사용
List<CameraDescription> cameras = await availableCameras();
// 사용 가능한 카메라 존재 여부
if (cameras != null && cameras.isNotEmpty) {
// 2. 카메라 리스트에서 첫번째 카메라 사용.
setCameraDescription(cameras.first);
}
// initialize에 오류가 발생할 수 있음.
// try-catch로 오류가 발생하면 false를 리턴하여
// while을 못 빠져나가고 initialize()를 다시 실행.
bool init = false;
while (!init) {
init = await initialize();
}
// initialize가 완료되면 true
_readyTakePhoto = true;
// consumer나 provier.of에게 변화를 알려줌.
notifyListeners();
}
void setCameraDescription(CameraDescription cameraDescription) {
_cameraDescription = cameraDescription;
// 3. CameraController 인스턴스 생성.
_controller =
CameraController(_cameraDescription, ResolutionPreset.veryHigh);
}
// 4. CameraController initialize().
Future<bool> initialize() async {
try {
// initialize -> future 타입
await _controller.initialize();
return true;
} catch (e) {
return false;
}
}
// 데이터의 수정이 불가능하고 가져다 사용만 할 수 있음.
CameraController get controller => _controller;
CameraDescription get description => _cameraDescription;
bool get isReadyToTakePhoto => _readyTakePhoto;
}
'Flutter > Project_InstaClone(완)' 카테고리의 다른 글
[Flutter/Project](Instagram Clone) Provider를 이용한 카메라 상태관리3 (0) | 2021.01.30 |
---|---|
[Flutter/Project](Instagram Clone) Provider를 이용한 카메라 상태관리2 (0) | 2021.01.30 |
[Flutter/Project](Instagram Clone) camera preview (0) | 2021.01.29 |
[Flutter/Project](Instagram Clone) 유저 퍼미션 확인 후 SnackBar 생성 (0) | 2021.01.27 |
[Flutter/Project](Instagram Clone) 카메라 마이크, 유저 퍼미션 (0) | 2021.01.27 |
Comments