[flutter] photo_view 패키지와 연동하여 이미지 다중 선택 기능 구현하기

이번 포스트에서는 Flutter 애플리케이션에서 photo_view 패키지를 사용하여 이미지 다중 선택 기능을 구현하는 방법에 대해 알아보겠습니다.

1. photo_view 패키지 설치하기

먼저, 프로젝트의 pubspec.yaml 파일에 photo_view 패키지를 추가해야 합니다. 아래의 코드를 dependencies 섹션에 추가합니다.

dependencies:
  photo_view: ^0.11.1

패키지를 추가한 후에는 flutter pub get 명령어를 실행하여 패키지를 다운로드합니다.

2. 이미지 다중 선택 기능 구현하기

다음으로, 이미지 다중 선택 기능을 구현하기 위해 필요한 클래스와 변수를 정의합니다. 아래의 코드를 참고하세요.

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

class MultipleImageSelection extends StatefulWidget {
  @override
  _MultipleImageSelectionState createState() => _MultipleImageSelectionState();
}

class _MultipleImageSelectionState extends State<MultipleImageSelection> {
  List<String> selectedImages = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('이미지 다중 선택'),
      ),
      body: GridView.builder(
        itemCount: images.length,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
        ),
        itemBuilder: (BuildContext context, int index) {
          final String image = images[index];
          final bool isSelected = selectedImages.contains(image);
          return GestureDetector(
            onTap: () {
              setState(() {
                if (isSelected) {
                  selectedImages.remove(image);
                } else {
                  selectedImages.add(image);
                }
              });
            },
            child: Stack(
              children: <Widget>[
                Positioned.fill(
                  child: PhotoView(
                    imageProvider: AssetImage(image),
                  ),
                ),
                if (isSelected)
                  Positioned(
                    top: 8,
                    right: 8,
                    child: Icon(
                      Icons.check_circle,
                      color: Colors.green,
                    ),
                  ),
              ],
            ),
          );
        },
      ),
    );
  }
}

List<String> images = [
  'assets/images/image1.jpg',
  'assets/images/image2.jpg',
  'assets/images/image3.jpg',
  // 추가적인 이미지 경로들을 입력하세요
];

위의 코드에서는 MultipleImageSelection 클래스가 StatefulWidget을 상속받고, _MultipleImageSelectionState 클래스가 이를 구현합니다. selectedImages 변수는 사용자가 선택한 이미지들을 저장하는 리스트입니다.

build 메소드에서는 GridView.builder 위젯을 사용하여 이미지들을 표시하고, GestureDetector를 사용하여 사용자의 탭 액션을 처리합니다. 선택된 이미지들은 selectedImages 리스트에 추가 또는 제거됩니다.

마지막으로, images 리스트에는 앱에 표시할 이미지들의 경로를 입력합니다. 원하는 만큼 이미지 경로를 추가할 수 있습니다.

3. 실행 결과 확인하기

이제 애플리케이션을 실행하여 결과를 확인해보세요. 이미지들이 그리드 형태로 표시되며, 사용자는 이미지를 탭하여 선택할 수 있습니다. 선택된 이미지는 초록색 체크 아이콘이 표시됩니다.

이렇게하여 Flutter 애플리케이션에서 photo_view 패키지를 사용하여 이미지 다중 선택 기능을 구현할 수 있습니다.

참고 자료