はじめに
ファイルをインポートする処理を作りたく、ファイルを選択してやりたいなと思い調べたら、file_pickerにたどり着きました。
Googleドライブからも読み込めるのでまさにやりたい子ができます。
なお、導入時に注意点があるようなので、GithubのSetupを見ておいた方がよさそう。
今回は、ファイルを一つ選んで読み込む処理を作井精しました。
現時点ではAndroidのみ。
ゆくゆくはiOSでも試すのでその時に記事をアップデートします。
導入
導入は以下のコマンドでOK
flutter pub add file_picker
GithubのSetupにAndroidの注意点が書いてありますが、特に何もしなくても動きました。
リリースビルドの時の対応のようなので、必要に応じて参照して対応するのが良いと思います。
Androidで使ってみる
ファイルの選択
私の場合、kmlの取り込み処理を作りたく、以下のように使いました。
final result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: ['kml','xml'],
);
FilePickerクラスのstatic変数のplatformを使い、pickFiles()メソッドを呼び出しています。
pickFiles()メソッドを呼び出すとファイル選択ダイアログが表示されます。
コンストラクタのドキュメントに引数の説明が載っているのでそちらを参照してもらうのが一番良いかと思います。
今回私が使った引数は以下の通りです。
引数 | 概要 |
---|---|
type | FileType列挙型で定義されているファイルタイプを指定します。指定することで選択可能なファイルの種類の指定ができます。FileType.customの場合、扱いたいファイルの拡張子を指定できます。 |
allowedExtensions | 扱いたい拡張子をString配列で指定します。拡張子の.(ピリオド)は不要です。 |
選択後の読み込み
戻り値は FilePickerResult? になります。
nullの場合、ファイルが選択されなかったことを表します。
今回は単一のファイルの選択になります。
FilePickerResult.files.singleを参照すると、様々な情報を取得できます。
ファイルの情報はPlatformFileオブジェクトで提供されます。
PlatformFileクラスのbytes変数にデータが入っているかと思ったのですが、取得できなかったので、ローカルに保存されたファイルを読み込みました。
var file = File(result.files.first.path!);
var kmlData = file.readAsStringSync();
まとめ
まだ、簡単にしか触っていませんが、お手軽にファイル選択を行えるのが良いです。
近いうちにiOSでも確認する予定ですので、確認した際には内容をアップデートします。