カテゴリー・パッケージ・リポジトリを検索

パッケージ詳細v7.0.0

network_to_file_image

ファイルが存在する場合はローカル画像ファイルを開きます。存在しない場合は、ネットワークから画像を取得し、次回の使用のためにローカルファイルに保存します。

AndroidiOSmacOSWindowsLinux
30日間ダウンロード
1500
いいね数
185
Pub ポイント
140

パッケージをインストール

flutter pub add network_to_file_image

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

ローカルファイルを最初に確認することで、画像の読み込みを効率的に管理するFlutterパッケージです。ローカルに画像が見つからない場合、ネットワークからダウンロードしてディスクに保存し、将来の使用のために利用します。これにより、重複したダウンロードを減らし、パフォーマンスを向上させます。最小限のセットアップで永続的な画像キャッシュが必要なアプリに最適です。

用途

  • オフラインアクセス用にリモート画像をキャッシュする
  • 繰り返しのネットワークリクエストを減らす
  • ローカルストレージによるアプリのパフォーマンス向上
  • ユーザーのプロフィール画像を表示し、フォールバックを提供する
  • 永続性を持つリストビューで画像を読み込む

主な機能

  • ネットワーク取得前のローカルファイルチェック
  • ダウンロード後に画像を自動保存
  • 組み込みキャッシュ機構
  • 複数のプラットフォームをサポートしています
  • シンプルなAPI統合

適している対象

  • オフライン画像の利用が必要なアプリ
  • 画像中心のアプリケーション
  • 軽量なキャッシングを求める開発者
  • 限られたバックエンドインフラストラクチャを持つプロジェクト
  • モバイルおよびデスクトッププラットフォーム向けのアプリ

注意事項

  • 一部のプラットフォームではファイルシステムの権限が必要です
  • ディスク容量の使用量は時間とともに増加する
  • 組み込みの有効期限またはクリーンアップ戦略なし
  • 手動キャッシュ管理が必要になる場合があります
  • キャッシュサイズまたはTTLに対する制御が限られている

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

pub package

network_to_file_image

This package combines NetworkImage and FileImage to:

  • Download the image once from the URL,
  • Save it to the local file system,
  • Use the saved image from the file system from then on.

In more detail:

Given a file and url of an image, it first tries to read it from the local file. It decodes the given File object as an image, associating it with the given scale.

However, if the image doesn't yet exist as a local file, it fetches the given URL from the network, associating it with the given scale, and then saves it to the local file. The image will be cached regardless of cache headers from the server.

Notes:
  • If the provided url is null or empty, NetworkToFileImage will default to FileImage. It will read the image from the local file, and won't try to download it from the network.

  • If the provided file is null, NetworkToFileImage will default to NetworkImage. It will download the image from the network, and won't save it locally.

Use the package

Import path_provider in your pubspec.yaml file:

path_provider: ^2.1.1 

Then use it to create a File from a file name:

Future<File> file(String filename) async {
  Directory dir = await getApplicationDocumentsDirectory();
  String pathName = p.join(dir.path, filename);
  return File(pathName);
}

var myFile = await file("myFileName.png"),

Then, create the image:

Image(image: 
   NetworkToFileImage(
      url: "https://example.com/someFile.png", 
      file: myFile,
   )
)

If you make debug: true it prints to the console whether the image was read from the file or fetched from the network:

Image(image: 
   NetworkToFileImage(
      url: "https://example.com/someFile.png", 
      file: myFile, 
      debug: true,
   )
)    

Try running the NetworkToFileImage example.

Important:

The directory where you want to save the image must already exist in the local disk. Otherwise, the image won't be saved.

Canvas

You can also load images to use with the Canvas object of the paint method of a CustomPainter.

ImageProviders can't be used directly with the Canvas object, but you can use the provided ImageForCanvas class.

For example: Suppose a User object that contains url and filename properties:

var imageForCanvas = ImageForCanvas<User>(
        imageProviderSupplier: (User user) => NetworkToFileImage(file: user.file, url: user.url),
        keySupplier: (User user) => user.filename,
        loadCallback: (image, obj, key) => setState((){}),
      );

// While the image is downloading, this will return null.
var myImage = imageForCanvas.image(user);

if (myImage != null) {
    canvas.drawImage(myImage, ...);
    }

It will use the regular image cache from Flutter, and works not only with NetworkToFileImage provider, but any other image providers.

Try running the ImageForCanvas example.

Tests

You can set mock files (local and in the network). Please see methods:

  • setMockFile(File file, Uint8List bytes)
  • setMockUrl(String url, Uint8List bytes)
  • clearMocks()
  • clearMockFiles()
  • clearMockUrls()

Your mocked urls are usually only seen by the NetworkToFileImage class. However, you may override the default Dart http methods so that these urls are visible to other ImageProviders.

To that end, simply call this method:

NetworkToFileImage.startHttpOverride();

You can stop the http override by calling:

NetworkToFileImage.stopHttpOverride();

By Marcelo Glasberg

glasberg.dev
github.com/marcglasberg
linkedin.com/in/marcglasberg/
twitter.com/glasbergmarcelo
stackoverflow.com/users/3411681/marcg
medium.com/@marcglasberg

My article in the official Flutter documentation:

The Flutter packages I've authored:

My Medium Articles:

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。