본문 바로가기
앱개발/Flutter

Flutter에서 Draggable과 DragTarget 위젯으로 간단한 드래그 앤 드롭 기능 구현하기

by 김무스비 2024. 10. 20.
728x90
반응형

들어가기 전에

Flutter는 사용자 인터페이스를 효율적이고 직관적으로 구현할 수 있는 다양한 위젯을 제공합니다. 그중에서도 Draggable과 DragTarget 위젯을 사용하면 간단하고 강력한 드래그 앤 드롭(Drag and Drop) 기능을 앱에 추가할 수 있습니다. 이 글에서는 Flutter에서 드래그 앤 드롭을 구현하는 방법과 이를 통해 어떻게 상호작용을 강화할 수 있는지에 대해 자세히 설명하겠습니다.

drag image


Draggable 위젯 개요

Draggable 위젯은 사용자가 드래그할 수 있는 위젯을 제공합니다. 사용자는 이 위젯을 길게 눌러서 끌 수 있으며, 드래그하는 동안 이 위젯의 시각적 피드백도 제공할 수 있습니다. 예를 들어, 리스트 항목을 재정렬하거나 사용자가 특정 요소를 이동하게 하려면 Draggable을 사용합니다.

Draggable 위젯: 기본 개념과 사용법

Flutter에서 Draggable 위젯은 사용자가 화면에서 특정 요소를 드래그할 수 있도록 해주는 위젯입니다. 이 위젯을 사용하면 사용자가 지정된 객체를 클릭하고 끌어 화면의 다른 곳으로 이동시킬 수 있습니다. 드래그 중에는 사용자가 드래그하고 있는 위젯의 복제본이 화면에 표시되며, 원본은 화면에서 제거되거나 다른 형태로 남을 수 있습니다.

Draggable(
  data: '드래그된 데이터',
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
    child: Center(child: Text('드래그 해보세요')),
  ),
  feedback: Material(
    child: Container(
      width: 100,
      height: 100,
      color: Colors.red,
      child: Center(child: Text('드래그 중')),
    ),
  ),
  childWhenDragging: Container(
    width: 100,
    height: 100,
    color: Colors.grey,
    child: Center(child: Text('드래그 중')),
  ),
),

코드에 대한 상세 설명입니다.

  • data: 드래그된 데이터입니다. Draggable 위젯이 드래그될 때 이 데이터가 전달됩니다.
  • child: 화면에 표시되는 기본 위젯입니다.
  • feedback: 사용자가 드래그할 때 표시되는 위젯입니다.
  • childWhenDragging: 드래그 중일 때 화면에 남겨질 위젯입니다.

Draggable을 사용하면 사용자가 지정한 요소를 끌 수 있고, 이를 통해 직관적이고 시각적인 피드백을 제공할 수 있습니다.

DragTarget 위젯: 드래그된 데이터 수신하기

DragTarget 위젯은 사용자가 드래그한 요소를 수신하는 영역을 지정하는 역할을 합니다. 사용자는 DragTarget 영역에 Draggable 위젯을 놓을 수 있으며, 그때 DragTarget 위젯에서 데이터를 받아 처리합니다.

DragTarget(
  builder: (context, candidateData, rejectedData) {
    return Container(
      width: 100,
      height: 100,
      color: Colors.green,
      child: Center(child: Text('여기에 놓으세요')),
    );
  },
  onAccept: (data) {
    print('드래그된 데이터: $data');
  },
),

코드에 대한 상세 설명입니다.

  • builder: DragTarget의 레이아웃을 정의합니다. 드래그된 위젯이 이 영역에 들어올 때의 상태를 관리할 수 있습니다.
  • onAccept: 드래그된 데이터가 DragTarget 위젯 위에 놓였을 때 호출됩니다. 이 함수에서 데이터에 대해 원하는 작업을 처리할 수 있습니다.

Draggable과 DragTarget을 결합한 드래그 앤 드롭 예제

이제 Draggable과 DragTarget을 함께 사용하여 간단한 드래그 앤 드롭 기능을 구현하는 예제를 보겠습니다.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Draggable & DragTarget 예제')),
        body: DragDropExample(),
      ),
    );
  }
}

class DragDropExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Draggable(
            data: '드래그된 데이터',
            child: Container(
              width: 100,
              height: 100,
              color: Colors.blue,
              child: Center(child: Text('드래그 해보세요')),
            ),
            feedback: Material(
              child: Container(
                width: 100,
                height: 100,
                color: Colors.red,
                child: Center(child: Text('드래그 중')),
              ),
            ),
          ),
          SizedBox(height: 50),
          DragTarget(
            builder: (context, candidateData, rejectedData) {
              return Container(
                width: 100,
                height: 100,
                color: Colors.green,
                child: Center(child: Text('여기에 놓으세요')),
              );
            },
            onAccept: (data) {
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('드래그된 데이터: $data')),
              );
            },
          ),
        ],
      ),
    );
  }
}

이 코드는 Flutter에서 기본적인 드래그 앤 드롭 기능을 구현하는 예제입니다. 사용자는 파란색 상자를 드래그하여 녹색 상자 위에 놓을 수 있으며, onAccept 메서드가 호출되어 데이터를 처리할 수 있습니다.

실전에서의 활용 사례

Draggable과 DragTarget은 다양한 사용자 경험 개선에 사용할 수 있습니다. 다음은 몇 가지 활용 예시입니다:

  1. 리스트 재정렬: 목록에서 항목을 드래그하여 재배치하는 인터페이스를 구현할 수 있습니다.
  2. 파일 업로드: 사용자가 파일을 특정 영역으로 드래그하여 업로드할 수 있는 기능을 제공할 수 있습니다.
  3. 게임: 게임 내에서 객체를 드래그하여 퍼즐을 풀거나, 캐릭터를 움직이는 등의 상호작용을 구현할 수 있습니다.

이처럼 Draggable과 DragTarget 위젯을 적절히 활용하면 앱에 다양한 상호작용 요소를 추가할 수 있습니다.

결론

Flutter의 Draggable과 DragTarget 위젯을 사용하면 손쉽게 드래그 앤 드롭 기능을 구현할 수 있습니다. 이를 통해 사용자는 더욱 직관적이고 흥미로운 상호작용을 경험할 수 있습니다. 특히, 직관적인 UI 및 상호작용이 중요한 앱에서 이러한 기능은 사용자 만족도를 크게 향상시킬 수 있습니다. Flutter에서 드래그 앤 드롭 기능을 활용하여 더 나은 사용자 경험을 제공해보세요.

728x90
반응형