LoginSignup
1
0

file_pickerでファイルを一つ選択して読み込む

Last updated at Posted at 2024-03-06

はじめに

ファイルをインポートする処理を作りたく、ファイルを選択してやりたいなと思い調べたら、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でも確認する予定ですので、確認した際には内容をアップデートします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0