[flutter] DataTable에서 특정 셀에 드래그 앤 드랍 기능 추가하는 방법
Flutter에서 DataTable은 효과적으로 데이터를 표 형식으로 표시하는 데 사용됩니다. 그런데 때때로, 특정 셀에 드래그 앤 드랍 기능을 추가하고 싶을 수 있습니다. 이 기능을 추가하는 방법을 알아보겠습니다.
1. DataTable 생성
우선, DataTable을 생성합니다. 아래는 간단한 예제 코드입니다.
DataTable(
columns: [
DataColumn(label: Text('이름')),
DataColumn(label: Text('나이')),
DataColumn(label: Text('이메일')),
],
rows: [
DataRow(cells: [
DataCell(Text('제이슨')),
DataCell(Text('30')),
DataCell(Text('jason@example.com')),
]),
DataRow(cells: [
DataCell(Text('앨리스')),
DataCell(Text('25')),
DataCell(Text('alice@example.com')),
]),
],
)
2. 드래그 앤 드랍 기능 추가
특정 셀에 드래그 앤 드랍 기능을 추가하려면, Draggable 위젯과 DragTarget 위젯을 사용해야 합니다.
class DraggableDataCell extends StatelessWidget {
final String data;
DraggableDataCell(this.data);
@override
Widget build(BuildContext context) {
return Draggable(
data: data,
child: DataCell(Text(data)),
feedback: DataCell(Text(data)),
);
}
}
class DragTargetDataCell extends StatelessWidget {
final Function(String) onDragCompleted;
DragTargetDataCell({required this.onDragCompleted});
@override
Widget build(BuildContext context) {
return DragTarget<String>(
onAccept: (data) {
onDragCompleted(data);
},
builder: (BuildContext context, List<String?> candidateData, List<dynamic> rejectedData) {
return DataCell(Text("Drop here"));
},
);
}
}
DraggableDataCell 위젯은 드래그 가능한 셀을 나타내고, DragTargetDataCell 위젯은 드롭 대상 셀을 나타냅니다.
3. DataTable 업데이트
마지막으로, DataTable을 업데이트하여 새로운 드래그 앤 드랍 기능을 포함하도록 수정해야 합니다.
DataTable(
columns: [
DataColumn(label: Text('이름')),
DataColumn(label: Text('나이')),
DataColumn(label: Text('이메일')),
],
rows: [
DataRow(cells: [
DraggableDataCell('제이슨'),
DataCell(Text('30')),
DataCell(Text('jason@example.com')),
]),
DataRow(cells: [
DataCell(Text('앨리스')),
DataCell(Text('25')),
DragTargetDataCell(
onDragCompleted: (data) {
// 드롭 완료 시 처리 로직
},
),
]),
],
)
이제 DataTable에서 특정 셀에 드래그 앤 드랍 기능을 추가했습니다. 위의 코드를 참고하여 자신만의 DataTable에 이 기능을 구현해 보세요!
더 많은 고급 기능을 원한다면, Flutter 공식 문서를 참고하시기 바랍니다.