Flutter 카메라에서 플래시 모드 전환

9581 단어 cameraflutter
the last blog post에서는 카메라 패키지를 사용하여 Flutter에서 사진을 찍는 방법을 보여줍니다. 이번 블로그 포스트에서는 플래시 모드를 켜고 끄는 방법을 설명하면서 카메라에 대해 더 깊이 파고들겠습니다!

previous blog post 의 결과로 이 예제를 시작하겠습니다. 해당 블로그 게시물에서 카메라의 미리 보기를 표시하고 사진을 찍는 데 필요한 모든 단계를 설명합니다. 단계 중 하나는 첫 번째 카메라로 컨트롤러를 초기화하는 것입니다. 이 컨트롤러에는 플래시 모드를 변경하는 다음 방법이 있습니다.

cameraController.setFlashMode(FlashMode.always);


여기에 제공할 수 있는 다양한 옵션이 있습니다. 켜기 및 끄기 외에도 플래시 모드를 자동 또는 토치로 설정하는 옵션도 있습니다. 내 자신의 예에서는 끄기와 항상 모드 사이를 전환합니다.

/// The possible flash modes that can be set for a camera
enum FlashMode {
  /// Do not use the flash when taking a picture.
  off,

  /// Let the device decide whether to flash the camera when taking a picture.
  auto,

  /// Always use the flash when taking a picture.
  always,

  /// Turns on the flash light and keeps it on until switched off.
  torch,
}


그래서 어떤 메서드를 호출해야 하는지 알고 있습니다. 아이콘도 변경하고 싶기 때문에 Widget을 StatefulWidget으로 만들겠습니다. 이렇게 하면 버튼을 누른 후 아이콘을 변경할 수 있습니다. Widget을 컨트롤러에 직접 제공하지만, Widget에 Callback 기능을 제공하는 것도 가능합니다.

위젯은 단순한 버튼이며 사용자가 버튼을 누르면 플래시 모드를 변경하는 메서드를 호출합니다. 또한 지역 변수를 변경하여 다른 아이콘으로 전환합니다. 컨트롤러에서 현재 플래시 모드를 추출하는 방법을 (아직) 찾지 못했습니다. 그렇지 않으면 setState 메서드를 호출하기 전에 setFlashMode의 결과를 들을 수 있습니다.

class CameraFlashWidget extends StatefulWidget {
  final CameraController cameraController;

  const CameraFlashWidget({Key? key, required this.cameraController}) : super(key: key);

  @override
  State<CameraFlashWidget> createState() => _CameraFlashWidgetState();
}

class _CameraFlashWidgetState extends State<CameraFlashWidget> {
  FlashMode flashMode = FlashMode.off;
  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.end,
      children: [
        Column(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            Padding(
              padding: const EdgeInsets.all(16.0),
              child: FloatingActionButton(onPressed: () {
                setState(() {
                  if (flashMode == FlashMode.off) {
                    widget.cameraController.setFlashMode(FlashMode.always);
                    flashMode = FlashMode.always;
                  } else {
                    widget.cameraController.setFlashMode(FlashMode.off);
                    flashMode = FlashMode.off;
                  }
                });
              }, child: flashMode == FlashMode.off ? const Icon(Icons.flashlight_off) : const Icon(Icons.flashlight_on)),
            ),
          ],
        ),
      ],
    );
  }
}


마지막으로 해야 할 일은 Stacked Widget에 위젯을 추가하여 버튼이 미리보기 위에 표시되도록 하는 것입니다. 또 다른 옵션은 미리보기를 더 작게 만들고 버튼 위치를 직접 변경하는 것입니다.

Stack(
    children: [
      SizedBox(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        child: CameraPreview(controller!),
      ),
      CameraFlashWidget(
        cameraController: controller,
      ),
    ],
  )


이 단계는 카메라의 플래시 모드를 변경하는 데 필요한 전부입니다! 이 모든 것은 camera package에 대한 많은 사람들의 작업 덕분에 가능했습니다! 이 예제의 코드는 여기Github에서 사용할 수 있습니다. 여전히 질문, 의견, 제안, 발언이 있으면 알려주세요!

게시물 Toggling the flash modus on a Flutter cameraBarttje에 처음 나타났습니다.

좋은 웹페이지 즐겨찾기