웹공뷰/flutter

flutter 플러터 csv 파일 읽기

이노키_ 2023. 6. 26. 10:22

기능 : 화면에서 특정 버튼을 누르면 csv 파일을 읽어온다.

 

 

1. pub csv 라이브러리 추가 

https://pub.dev/packages/csv/install

 

csv | Dart Package

A codec to transform between a string and a list of values. The string must be comma (configurable) separated values.

pub.dev

flutter pub add csv

pubspec.yaml 파일에 아래와 같이 등록됨을 확인

dependencies:
  flutter:
    sdk: flutter


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  csv: ^5.0.2

 

2. assets 디렉토리 생성 후, 파일 등록

루트디렉토리 아래에 assets 디렉토리 > csv 디렉토리 생성. 

사용하려는 csv 파일을 등록

 

참고로 test.csv 파일의 내용은 아래와 같다.

 

3. pubspec.yaml 파일에 assets/csv/test.csv 경로 입력

flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  # assets:
  #   - images/a_dot_burr.jpeg
  #   - images/a_dot_ham.jpeg
  assets:
    - assets/csv/test.csv

 

4. 버튼 클릭시 파일 읽어오는 함수 추가

import 'package:csv/csv.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:uddutsi/tab/search/upload_model.dart';

class SearchPage extends StatefulWidget {
  const SearchPage({Key? key}) : super(key: key);

  @override
  State<SearchPage> createState() => _SearchPageState();
}

class _SearchPageState extends State<SearchPage> {

  List<List<dynamic>> _data = [];

  //csv 파일 로드하는 함수 선언
  void _loadCSV() async{
    final _rawData = await rootBundle.loadString('assets/csv/test.csv');
    List<List<dynamic>> _listData =
        const CsvToListConverter().convert(_rawData);
    setState(() {
      _data = _listData;
    });
  }

  @override
  Widget build(BuildContext context) {
    UploadModel model = UploadModel();
    return Scaffold(
      appBar: AppBar(
        title: const Text('[test]'),
      ),
      body: Row(
        children: [
          ElevatedButton(
            onPressed: _loadCSV ,
            child: const Text('upload categories'),
          ),
        ],
      )
    );

  }
}

upload categories 버튼을 클릭했을때(디버깅모드로 실행중) 아래처럼 데이터가 _listData 변수에 들어가 있음을 확인할 수 있다.