Flutter: assetsを使用してCSVファイルを読み込む

プログラミング
スポンサーリンク




こんにちは、おみです。

Flutterを使用していると、あらかじめ用意したCSVデータを使用したいというときがあります。

今回は、Flutterでcsvファイルを読み込む方法について、解説していきたいと思います。

 

スポンサーリンク

ソースコード

今回は、下記のデータを読み込もうと思います。

オタクがバレますね

私は藤吉夏鈴推しです

keyaki.csv

1,石森虹花,1997年5月7日,宮城県,1期
2,上村莉菜,1997年1月4日,千葉県,1期
3,尾関梨香,1997年10月7日,神奈川県,1期
4,小池美波,1998年11月14日,兵庫県,1期
5,小林由依,1999年10月23日,埼玉県,1期
6,齋藤冬優花,1998年2月15日,東京都,1期
7,佐藤詩織,1996年11月16日,東京都,1期
8,菅井友香,1995年11月29日,東京都,1期
9,土生瑞穂,1997年7月7日,東京都,1期
10,原田葵,2000年5月7日,東京都,1期
11,守屋茜,1997年11月12日,宮城県,1期
12,渡辺梨加,1995年5月16日,茨城県,1期
13,渡邉理佐,1998年7月27日,茨城県,1期
14,井上梨名,2001年1月29日,兵庫県,2期
15,関有美子,1998年6月29日,福岡県,2期
16,武元唯衣,2002年3月23日,滋賀県,2期
17,田村保乃,1998年10月21日,,大阪府,2期
18,藤吉夏鈴,2001年8月29日,大阪府,2期
19,松田里奈,1999年10月13日,宮崎県,2期
20,松平璃子,1998年5月5日,東京都,2期
21,森田ひかる,2001年7月10日,福岡県,2期
22,山﨑天,2005年9月28日,大阪府,2期
23,遠藤光莉,1999年4月17日,神奈川県,2期
24,大園玲,2000年4月18日,鹿児島県,2期
25,大沼晶保,1999年10月12日,静岡県,2期
26,幸阪茉里乃,2002年12月19日,三重県,2期
27,増本綺良,2002年1月12日,兵庫県,2期
28,守屋麗奈,2000年1月2日,東京都,2期

 

CSVデータのクラスを用意します。

CsvData.dart

class CsvData {
  // フィールドを生成
  int id;
  String name;
  String birthday;
  String place;
  String team;

  // コンストラクタ
  CsvData({this.id, this.name, this.birthday, this.place, this.team});
}

 

CSVデータを読み込みます。

import 'package:flutter/services.dart';
import 'package:keyaki_app/data/CsvData.dart';

Future<List<CsvData>> getCsvData(String path) async {
  // 戻り値を生成
  List<CsvData> list = [];

  // csvデータを全て読み込む
  String csv = await rootBundle.loadString(path);

  // csvデータを1行ずつ処理する
  for (String line in csv.split("\r\n")) {
    // カンマ区切りで各列のデータを配列に格納
    List rows = line.split(','); // split by comma

    // csvデータを生成
    CsvData rowData = CsvData(
      id: int.parse(rows[0]),
      name: rows[1],
      birthday: rows[2],
      place: rows[3],
      team: rows[4]
    );

    // csvデータをリストに格納
    list.add(rowData);

  }

  // リターン
  return list;
}

 

 

解説

今回は、assetsという、Flutterでテキストデータや画像データを扱う仕組みを使用します。

↓参考

[Flutter]Assets (テキスト、画像)の利用方法 - Qiita
はじめに 最近、少しずつFlutterの公式ドキュメントを読み進めています。 今回はAssetsの仕組みについて学んだのでまとめたいと思います。 Assets とは Assets とはアプリのデプロイ時にバンドルされるテキ...

 

assetsの設定を行います。

  1. プロジェクトの直下に、「assets」フォルダを作成します。
  2. assetsの中に、「keyaki.csv」を格納します。
  3. 「pubspec.yaml」に、assetsを追記します。

pubspec.yaml

flutter:
  assets:
    - assets/keyaki.csv

 

csvファイルを格納するための、リストを作成します。

// 戻り値を生成
List<CsvData> list = [];

 

assetsに設定したCSVファイルの読み込みには、rootBundle.loadStringを使用します。

非同期処理なので、awaitをつけましょう。

String csv = await rootBundle.loadString(path);

 

rootBundle.loadStringでは、ファイルのデータが一気に読み込まれるので、改行コードで区切って読み込む必要があります。

1行ずつ読み込み、リストに格納していきましょう。

for (String line in csv.split("\r\n")) {
  // カンマ区切りで各列のデータを配列に格納
  List rows = line.split(','); // split by comma

  // csvデータを生成
  CsvData rowData = CsvData(
    id: int.parse(rows[0]),
    name: rows[1],
    birthday: rows[2],
    place: rows[3],
    team: rows[4]
  );

  // csvデータをリストに格納
  list.add(rowData);

}

 

最後に、CSVデータを格納したリストを返却します。

// リターン
return list;

 

ここまでの処理を、関数化します。

awaitを使用する場合がは、関数にasyncをつけて非同期処理かする必要があるので、注意しましょう。

Future<List<CsvData>> getCsvData(String path) async {

  ・・処理・・

  // リターン
  return list;
}

 

 

おすすめの書籍

私は、Flutterの勉強をする際、下記の書籍を使用しています。

Flutterを使用したアプリ開発の方法を、実際にアプリの開発を通してわかりやすく解説しているので、おすすめです。

今流行のFirebaseと連携したアプリの開発ができますよ!

 

 

 

 

 

コメント

タイトルとURLをコピーしました