[flutter] photo_view 패키지로 이미지 회전/이동 기능 구현하기

이미지를 확대/축소하고 회전/이동까지 가능한 기능을 구현하려면 photo_view 패키지를 사용할 수 있습니다. 이 패키지는 Flutter에서 이미지 뷰어를 손쉽게 구현하는 데 도움이 됩니다. 이번 포스트에서는 photo_view 패키지를 사용하여 이미지 회전과 이동 기능을 구현하는 방법에 대해 알아보겠습니다.

1. photo_view 패키지 추가하기

먼저, 프로젝트의 pubspec.yaml 파일에 photo_view 패키지를 추가해야 합니다. 다음과 같이 dependencies 섹션에 패키지를 추가합니다:

dependencies:
  flutter:
    sdk: flutter
  photo_view: ^0.11.1

변경 사항을 적용하기 위해 터미널에서 flutter packages get 명령을 실행합니다.

2. 이미지 뷰어 생성하기

이제 이미지 뷰어를 생성해보겠습니다. 아래와 같이 PhotoView 위젯을 사용하여 이미지를 표시할 수 있습니다:

import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart';

class ImageViewer extends StatefulWidget {
  final String imageUrl;

  ImageViewer({required this.imageUrl});

  @override
  _ImageViewerState createState() => _ImageViewerState();
}

class _ImageViewerState extends State<ImageViewer> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('이미지 뷰어'),
      ),
      body: Center(
        child: PhotoView(
          imageProvider: NetworkImage(widget.imageUrl),
        ),
      ),
    );
  }
}

우리는 imageUrl 매개변수를 받아와서 해당 URL에서 이미지를 로드하고 PhotoView 위젯을 이용하여 이미지를 표시합니다.

3. 이미지 회전/이동 기능 추가하기

이제 이미지를 회전하고 이동하는 기능을 추가해보겠습니다. 이를 위해 PhotoView 위젯을 감싸는 GestureDetector 위젯을 사용합니다. 아래와 같이 코드를 수정해보세요:

import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart';

class ImageViewer extends StatefulWidget {
  final String imageUrl;

  ImageViewer({required this.imageUrl});

  @override
  _ImageViewerState createState() => _ImageViewerState();
}

class _ImageViewerState extends State<ImageViewer> {
  double _scale = 1.0;
  double _rotation = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('이미지 뷰어'),
      ),
      body: GestureDetector(
        onScaleUpdate: (details) {
          setState(() {
            _scale = details.scale;
          });
        },
        onRotationUpdate: (details) {
          setState(() {
            _rotation = details.rotation;
          });
        },
        child: Center(
          child: Transform(
            transform: Matrix4.diagonal3Values(_scale, _scale, 1) * Matrix4.rotationZ(_rotation),
            alignment: FractionalOffset.center,
            child: PhotoView(
              imageProvider: NetworkImage(widget.imageUrl),
            ),
          ),
        ),
      ),
    );
  }
}

이제 onScaleUpdate 이벤트 핸들러를 사용하여 이미지를 확대/축소하고, onRotationUpdate 이벤트 핸들러를 사용하여 이미지를 회전할 수 있습니다. 이벤트 핸들러로부터 받아온 값을 이용하여 Transform 위젯을 사용하여 이미지를 확대/축소하고 회전합니다.


이제 photo_view 패키지를 사용하여 Flutter 애플리케이션에서 이미지 회전/이동 기능을 구현하는 방법을 알아보았습니다. photo_view 패키지는 이미지 뷰어를 구현하는 데 유용한 도구입니다. 추가적인 정보는 photo_view 패키지의 공식 문서를 참조하시기 바랍니다.