LoginSignup
7

More than 3 years have passed since last update.

posted at

Organization

Flutterでデバイスにファイルを保存する

アプリのサイズを減らすために画像ファイルをアセットに追加しないで、初回起動時などのタイミングで端末に保存し、表示する方法について書きます。

今回使用するプラグインはhttpのみです
ちなみにcached_network_imageなどのプラグインを使用したファイルキャッシュでも同等の動きをすると思いますが、100枚ほどのキャッシュした画像をPageViewで表示してページめくりしているとアプリがクラッシュしてしまいます。(体験済み)
たしかFlutterのIssuerにも上がっていた気がします。

ファイルのダウンロード

画像ファイルの保存は下記のコードになります。
httpで画像ファイルを取得し、ローカルのファイルに書き込むという流れになっています。
ローカルにファイルがない場合は書き込めないので、書き込む用のファイルを先に生成してください。
下記のコードではawait file.create();がファイル生成の処理をしています。

final http.Response res = await _httpClient.get(fileUrl);
final file = File('$filePath');
await file.create();
await file.writeAsBytes(res.bodyBytes);

ダウンロードしたファイルを表示する

ダウンロードしたファイルを表示するには Image.file を使用します。

final file = File('$filePath');
return Image.file(
  file,
  width: 100,
  height: 100,
);

とくに難しいことはなく単にファイルを保存して呼び出し表示するだけです。
AndroidではパーミッションREAD_EXTERNAL_STORAGEを許可が必要になる場合があるので許可しておいてください

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
What you can do with signing up
7