<

ImageCache と ImageProvider の変更

まとめ

ImageCacheというメソッドが追加されましたcontainsKeyImageProviderサブクラスはオーバーライドしないでくださいresolve、 しかし、代わりに新しいメソッドを実装する必要がありますImageProvider。 これらの変更は、単一のコミットとしてフレームワークに送信されました。

変更内容の説明

以下のセクションでは、変更点について説明します。containsKeyImageProvider

キー変更を含む

のクライアントImageCache、カスタムなどImageProvider、 キャッシュがすでに画像を追跡しているかどうかを知りたい場合があります。 を追加すると、containsKeyメソッドを使用すると、呼び出し元が発見できるようになります これは次のようなメソッドを呼び出さずにputIfAbsent、 望ましくない呼び出しを引き起こす可能性がありますImageProvider.load

デフォルトの実装では、保留中とキャッシュ済みの両方がチェックされます。 画像バケット。

  bool containsKey(Object key) {
    return _pendingImages[key] != null || _cache[key] != null;
  }

画像プロバイダーの変更

ImageProvider.resolveメソッドは複雑な処理を行います 通常はオーバーライドすべきではないエラー処理作業。 以前は、画像を 画像キャッシュ、経由ImageProvider.obtainKeyImageProvider.load。サブクラスには機会がなかった オーバーライドせずにこの動作をオーバーライドしますresolve、 そして作曲能力ImageProviderは限られています 複数の場合ImageProviderオーバーライドすることを期待していますresolve

この問題を解決するには、resolve現在は非仮想としてマークされています。 そして 2 つの新しい保護されたメソッドが追加されました。createStream()resolveStreamForKey()。 これらのメソッドを使用すると、サブクラスでほとんどの動作を制御できます。 のresolveすべてのエラー処理作業を繰り返す必要はありません。 また、以下を構成するサブクラスも許可されます。ImageProviders パブリック エントリポイントが 1 つだけであることをより確信するため チェーンされたさまざまなプロバイダーに接続します。

移行ガイド

画像キャッシュの変更

移行前のコードには、containsKey

移行後のコード:

class MyImageCache implements ImageCache {
  @override
  bool containsKey(Object key) {
    // Check if your custom cache is tracking this key.
  }

  ...
}

画像プロバイダーの変更

移行前のコード:

class MyImageProvider extends ImageProvider<Object> {
  @override
  ImageStream resolve(ImageConfiguration configuration) {
    // create stream
    // set up error handling
    // interact with ImageCache
    // call obtainKey/load, etc.
  }
  ...
}

移行後のコード:

class MyImageProvider extends ImageProvider<Object> {
  @override
  ImageStream createStream(ImageConfiguration configuration) {
    // Return stream, or use super.createStream(),
    // which returns a new ImageStream.
  }

  @override
  void resolveStreamForKey(
    ImageConfiguration configuration,
    ImageStream stream,
    Object key,
    ImageErrorListener handleError,
  ) {
    // Interact with the cache, use the key, potentially call `load`,
    // and report any errors back through `handleError`.
  }
  ...
}

タイムライン

リリースされたバージョン: 1.16.3
安定版リリース: 1.17

参考文献

API ドキュメント:

  • ImageCache
  • ImageProvider
  • ScrollAwareImageProvider

関連する問題:

  • 問題 #32143
  • 問題 #44510
  • 問題 #48305
  • 問題 #48775

関連する PR:

  • 高速スクロールする場合は画像のデコードを延期します #49389