[flutter] DataTable에서 데이터 필터링하는 방법

Flutter에서 DataTable은 테이블 형식의 데이터를 표시하는 데 사용됩니다. 때때로 사용자는 테이블의 데이터를 필터링하고 싶을 수 있습니다. 이를 위해 Flutter 앱에서 DataTable을 사용하는 방법에 대해 알아보겠습니다.

1. DataTable 위젯 생성

먼저, DataTable을 생성합니다. 다음은 간단한 예제입니다.

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('Data Table Filtering Example'),
        ),
        body: MyDataTable(),
      ),
    );
  }
}

class MyDataTable extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DataTable(
      columns: const <DataColumn>[
        DataColumn(label: Text('ID')),
        DataColumn(label: Text('Name')),
        DataColumn(label: Text('Age')),
      ],
      rows: const <DataRow>[
        DataRow(cells: <DataCell>[
          DataCell(Text('1')),
          DataCell(Text('John')),
          DataCell(Text('25')),
        ]),
        DataRow(cells: <DataCell>[
          DataCell(Text('2')),
          DataCell(Text('Bob')),
          DataCell(Text('30')),
        ]),
        // Add more rows as needed
      ],
    );
  }
}

위의 코드는 간단한 DataTable을 생성합니다. 이제 테이블을 필터링할 기능을 추가해 보겠습니다.

2. 데이터 필터링 추가

DataTable에서 데이터를 필터링하기 위해서는 사용자 입력을 허용하고 결과를 바탕으로 표를 업데이트해야 합니다. 이 예제에서는 TextField를 사용하여 이름 필터링을 구현해 보겠습니다.

class MyDataTable extends StatefulWidget {
  @override
  _MyDataTableState createState() => _MyDataTableState();
}

class _MyDataTableState extends State<MyDataTable> {
  TextEditingController _nameFilterController = TextEditingController();
  String _nameFilter = '';

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        TextField(
          controller: _nameFilterController,
          decoration: InputDecoration(
            labelText: 'Filter by Name',
          ),
          onChanged: (value) {
            setState(() {
              _nameFilter = value;
            });
          },
        ),
        Expanded(
          child: SingleChildScrollView(
            child: DataTable(
              columns: const <DataColumn>[
                DataColumn(label: Text('ID')),
                DataColumn(label: Text('Name')),
                DataColumn(label: Text('Age')),
              ],
              rows: <DataRow>[
                DataRow(cells: <DataCell>[
                  DataCell(Text('1')),
                  DataCell(Text('John')),
                  DataCell(Text('25')),
                ]),
                DataRow(cells: <DataCell>[
                  DataCell(Text('2')),
                  DataCell(Text('Bob')),
                  DataCell(Text('30')),
                ]),
                // Add more rows as needed
              ].where((DataRow row) => _nameFilter.isEmpty || row.cells[1].child.toString().contains(_nameFilter)).toList(),
            ),
          ),
        ),
      ],
    );
  }
}

위의 코드는 DataTable에 TextField를 추가하여 이름으로 필터링하는 방법을 보여줍니다. 입력된 이름과 일치하는 행만 보이도록 rows를 필터링하고 있습니다.

위의 코드를 사용하면 사용자는 이름으로 데이터를 필터링할 수 있게 됩니다.

이제 DataTable에서 데이터 필터링하는 방법에 대해 알아보았습니다. DataTable을 필터링하는 데 필요한 추가 기능은 사용자의 요구에 따라 조정하여 적용할 수 있습니다.

참고 문헌: