アプリのサイズを減らすために画像ファイルをアセットに追加しないで、初回起動時などのタイミングで端末に保存し、表示する方法について書きます。
今回使用するプラグインは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
を許可が必要になる場合があるので許可しておいてください