Flutterで外部ストレージにファイルを保存(only Android)
小言(読み飛ばしてください)
FlutterでAndroidアプリを開発しているものです。
ネイティブ(Kotlin)でもいいじゃんって感じですが、Flutterの魅力に取りつかれ今に至ります。
さて、Androidのバージョンアップも進むにつれ、アプリのセキュリティも格段に上昇し、外部ストレージにファイルを保存することもままならない状況になってきましたが、要件によってはどうしてもそういった状況が必要になるときも出てきます。
あまり記事がなさそうだった(だいたいアプリ内フォルダに保存で事足りる)ので、その方法についてまとめてみます。
使用するライブラリ
- external_path(https://pub.dev/packages/external_path)
本ライブラリはAndroidだけに対応してます。
そもそも iOS では、外部ストレージの保存できない・・・のかな?
ディレクトリのパスを取得
外部ストレージのパスは、以下のコードで取得できます。
(Picturesフォルダの場合)
final directoryPath =
await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_PICTURES);
Picturesフォルダを取得するため、ExternalPath.DIRECTORY_PICTURES
を指定していますが、他にも以下のパターンが取得できるようです。
ExternalPath.DIRECTORY_MUSIC
ExternalPath.DIRECTORY_PODCASTS
ExternalPath.DIRECTORY_RINGTONES
ExternalPath.DIRECTORY_ALARMS
ExternalPath.DIRECTORY_NOTIFICATIONS
ExternalPath.DIRECTORY_PICTURES
ExternalPath.DIRECTORY_MOVIES
ExternalPath.DIRECTORY_DOWNLOADS
ExternalPath.DIRECTORY_DCIM
ExternalPath.DIRECTORY_DOCUMENTS
ExternalPath.DIRECTORY_SCREENSHOTS
ExternalPath.DIRECTORY_AUDIOBOOKS
ファイルを保存
一応、保存するコードも載せておきます。
final String fileName = 'photo.png';
final String filePath = '${directory.path}/$fileName';
// 画像データをファイルに保存
await File(filePath).writeAsBytes(imageData);
終わりに
以上、external_path ライブラリの紹介でした。
本内容は、ライブラリのページに書かれている Usage の内容ほぼそのままなので、そちらもご確認ください。
Discussion