[flutter] DataTable에서 데이터를 JSON 파일로 내보내는 방법
이번 포스트에서는 Flutter 앱에서 데이터테이블에 표시된 정보를 JSON 파일로 내보내는 방법을 알아보겠습니다.
단계 1: 필요한 패키지 추가
우선, path_provider
패키지를 사용하여 파일 시스템에 액세스하는 기능을 추가합니다.
dependencies:
path_provider: ^2.0.5
단계 2: 데이터테이블과 데이터 생성
데이터테이블을 생성하고 데이터를 준비합니다.
import 'package:flutter/material.dart';
import 'dart:convert';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyDataTable(),
);
}
}
class MyDataTable extends StatefulWidget {
@override
_MyDataTableState createState() => _MyDataTableState();
}
class _MyDataTableState extends State<MyDataTable> {
List<Map<String, dynamic>> _dataList = [
{'id': 1, 'name': 'John', 'age': 25},
{'id': 2, 'name': 'Alice', 'age': 30},
{'id': 3, 'name': 'Bob', 'age': 28},
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Data Table'),
),
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: DataTable(
columns: <DataColumn>[
DataColumn(label: Text('ID')),
DataColumn(label: Text('Name')),
DataColumn(label: Text('Age')),
],
rows: _dataList
.map((data) => DataRow(cells: [
DataCell(Text(data['id'].toString())),
DataCell(Text(data['name'])),
DataCell(Text(data['age'].toString())),
]))
.toList(),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _exportDataToJSON,
child: Icon(Icons.file_download),
),
);
}
_exportDataToJSON() async {
final directory = await getApplicationDocumentsDirectory();
final file = File('${directory.path}/data.json');
await file.writeAsString(json.encode(_dataList));
// 저장된 경로 출력
debugPrint('JSON 파일이 생성되었습니다: ${file.path}');
}
}
단계 3: 데이터를 JSON 파일로 내보내기
위의 코드에서는 _exportDataToJSON
메서드를 사용하여 데이터를 JSON 파일로 내보내는 작업을 수행합니다. 이 메서드는 path_provider
패키지를 사용하여 애플리케이션의 문서 디렉토리에 data.json
파일을 저장합니다.
결론
이제 데이터테이블에서 JSON 파일로 데이터를 내보내는 방법을 확인했습니다. Flutter에서는 path_provider
패키지를 사용하여 파일 시스템에 액세스하고, dart:convert
패키지를 사용하여 데이터를 JSON 형식으로 변환할 수 있습니다.
참고 문서: