body: CameraPreview(controller!),
코드는 Flutter에서 카메라의 미리보기 화면을 출력하는 부분입니다. 여기서 CameraPreview
는 카메라의 실시간 미리보기를 화면에 출력하는 위젯이며, controller!
는 이 미리보기를 제어하는 컨트롤러입니다.
CameraPreview
: 이 위젯은 카메라의 실시간 미리보기 화면을 앱에 표시합니다. 이 위젯을 사용하려면 일반적으로 camera
패키지를 설치해야 합니다.controller!
: 카메라의 상태나 미리보기를 제어하는 객체입니다. 이 컨트롤러는 카메라를 초기화하고, 사진을 찍거나 동영상을 녹화하는 등의 작업을 관리합니다.!
기호는 Dart의 null-safety에서 사용되며, 개발자가 해당 변수가 null이 아님을 확신할 때 사용합니다.
예를 들어, 카메라를 초기화하고 CameraPreview
위젯을 사용하는 간단한 예는 다음과 같습니다.
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
class CameraScreen extends StatefulWidget {
_CameraScreenState createState() => _CameraScreenState();
}
class _CameraScreenState extends State<CameraScreen> {
late CameraController _controller;
void initState() {
super.initState();
_initializeCamera();
}
Future<void> _initializeCamera() async {
final cameras = await availableCameras();
final firstCamera = cameras.first;
_controller = CameraController(
firstCamera,
ResolutionPreset.high,
);
_controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
void dispose() {
_controller.dispose(); // CameraController 리소스 해제
super.dispose();
}
Widget build(BuildContext context) {
if (!_controller.value.isInitialized) {
return Container();
}
return Scaffold(
body: CameraPreview(_controller), // CameraPreview는 카메라의 화면을 출력하는 위젯입니다.
);
}
}
이 예시에서는 CameraController
를 초기화하고, 이를 CameraPreview
위젯에 전달하여 카메라의 미리보기를 출력합니다. 또한, 위젯이 메모리에서 제거될 때 dispose()
메서드를 통해 컨트롤러의 리소스를 해제합니다.