CSVファイルをAssetに入れて読み出すには、
package:csv/csv.dart を使うと簡単にできます
CSVファイルの読み出し
CSVファイル、test.csv をAssetに保存されているとして
それを読み出すには rootBundle.loadString を使います
1 |
rootBundle.loadString('assets/test.csv') |
CsvToListConverter() を使って読み出したCSVデータをリスト形式に変換
1 |
List<List<dynamic>> row = CsvToListConverter().convert(csvDataString); |
async 〜 await を使った非同期で読み出すFutureクラスを作成します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import 'dart:async'; import 'package:flutter/services.dart' show rootBundle; import 'package:csv/csv.dart'; Future<void> loadCsv() async { // Assetにある CSV ファイルの読み込み final csvDataString = await rootBundle.loadString('assets/test.csv'); // CSVデータをリストに変換 List<List<dynamic>> row = const CsvToListConverter().convert(csvDataString); // CSV データのパース処理 for (var row in csvData) { debugPrint(row); } } |
事前準備
package:csv/csv.dart
CSVを扱いやすするためのパッケージ、
package:csv/csv.dart のインストールします
1 |
$ flutter pub add csv |
これで pubspec.yaml に以下の設定が追加されます
1 2 3 4 |
dependencies: flutter: sdk: flutter csv: ^6.0.0 |
AssetにCSVファイルを設定
例として test.csv を以下のように作成して
assets ディレクトリを作成して入れます
test.csv
1 2 3 4 5 |
1,Google,167.43 2,Apple,226.84 3,Facebook(Meta),528.00 4,Amazon,177.04 5,Microsoft,416.79 |
Assetの設定
pubspec.yaml にassets以下を追加
1 2 3 4 |
flutter: uses-material-design: true assets: - assets/ |
サンプルコード
実際にCSVファイルを読み出してみましょう
簡単なボタンをタップするこちらのサンプルに追加してみます
ElevatedButton Widget の作成
main.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter/services.dart' show rootBundle; import 'package:csv/csv.dart'; void main() => runApp(const ElevatedButtonApp()); class ElevatedButtonApp extends StatelessWidget { const ElevatedButtonApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text('ElevatedButton')), body: const ElevatedButtonExample(), ), ); } } class ElevatedButtonExample extends StatefulWidget { const ElevatedButtonExample({super.key}); @override State<ElevatedButtonExample> createState() => _ElevatedButtonExampleState(); } class _ElevatedButtonExampleState extends State<ElevatedButtonExample> { String _displayText = "Text"; void changeText(){ setState((){ _displayText = "Changed !"; loadCSV(); }); } @override Widget build(BuildContext context) { final ButtonStyle style = ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20)); return Center( child: Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ Text( _displayText, style: const TextStyle(fontSize: 24), ), const SizedBox(height: 30), ElevatedButton( style: style, onPressed: changeText, child: const Text('ElevatedButton'), ), ], ), ); } } Future<void> loadCSV() async { // CSV ファイル読み込む String csvString = await rootBundle.loadString('assets/test.csv'); // CSV リスト変換 List<List<dynamic>> csvData = const CsvToListConverter().convert(csvString); // CSV データ処理 for (var row in csvData) { debugPrint(row.toString()); } } |
実行結果
実行させてみます
ボタンをタップすると
VSCodeのDEBUG CONSOLE にdebugPrintで出力されました
これでCSVファイルを読み出すことができました
ただ、このケースではAssetに入れてあるものを読み出すだけで
書き込み、保存はAssetにはできないので、読み書きしたい場合は別の方法を取ります
References:
csv Dart Package
rootBundle property
CsvToListConverter class