[flutter] photo_view 패키지로 이미지 화면 잠금 효과 추가하기

이미지를 확대, 축소 및 드래그 기능을 제공하는 photo_view 패키지는 Flutter 앱에서 이미지를 보여주는 데 매우 유용합니다. 하지만 때로는 이미지를 화면에 고정하는 화면 잠금 기능이 필요한 경우가 있습니다. 이번 블로그 포스트에서는 photo_view 패키지를 사용하여 Flutter 앱에서 이미지 화면 잠금 효과를 추가하는 방법에 대해 알아보겠습니다.

photo_view 패키지 추가하기

먼저, pubspec.yaml 파일의 dependencies 섹션에 photo_view 패키지를 추가해야 합니다.

dependencies:
  photo_view: ^0.12.0

이후, 터미널에서 flutter pub get 명령을 실행하여 패키지를 다운로드 받습니다.

ImageScreen 위젯 만들기

이미지 화면을 보여주는 ImageScreen 위젯을 만들어 보겠습니다.

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

class ImageScreen extends StatefulWidget {
  final String imageUrl;

  ImageScreen({required this.imageUrl});

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

class _ImageScreenState extends State<ImageScreen> {
  bool isLocked = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Screen'),
        actions: [
          IconButton(
            icon: Icon(isLocked ? Icons.lock : Icons.lock_open),
            onPressed: () {
              setState(() {
                isLocked = !isLocked;
              });
            },
          ),
        ],
      ),
      body: PhotoView(
        imageProvider: NetworkImage(widget.imageUrl),
        enableRotation: true,
        lockAttacher: isLocked ? null : null,
      ),
    );
  }
}

위의 코드에서 isLocked 변수는 이미지 화면이 잠금되어 있는지 여부를 나타냅니다. 이 변수를 통해 AppBar의 오른쪽 상단에 잠금 버튼을 추가하고, 버튼을 클릭할 때마다 isLocked 변수의 값을 반전시킵니다. lockAttacher 속성을 이용하여 이미지 화면의 잠금 효과를 제어합니다.

ImageScreen 사용하기

이제 ImageScreen 위젯을 사용하여 이미지 화면을 보여주는 앱을 만들어 보겠습니다.

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Image Lock Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ImageScreen(
        imageUrl: 'https://example.com/my-image.jpg',
      ),
    );
  }
}

위의 코드에서는 앱의 진입점인 main 함수에서 MyApp 위젯을 실행하고, MyApp 위젯은 ImageScreen 위젯을 홈 화면으로 설정합니다. ImageScreen의 생성자를 통해 이미지 URL을 전달해 주세요.

결론

이번 포스트에서는 photo_view 패키지를 사용하여 Flutter 앱에서 이미지 화면 잠금 효과를 추가하는 방법을 알아보았습니다. 이제 앱에서 이미지를 확대, 축소 및 드래그할 수 있으면서도 화면을 잠글 수 있습니다. photo_view의 다양한 기능을 활용하여 사용자 친화적인 이미지 화면을 구현해 보세요!

참고 자료