call method

  1. @useResult
ImageProvider<Object> call(
  1. String? uri, {
  2. String defaultAssetURI = "assets/image.png",
  3. Map<String, String>? headers,
})
inherited

ImageProvider from the image file existing in uri.

If uri starts with http:// or https://, images existing on the network are downloaded and retrieved. If you specify the Base64 encoded string of the image binary after blob://, you can retrieve the image file as it is.

If uri starts with an absolute path of file:// or /, a search is performed on the terminal file path and the image file is retrieved if the file exists. (Not available on the Web)

If the file is not found, or uri starts with resource://, search for the file in Flutter's assets folder and retrieve the image file.

If uri is empty, or the text cannot be retrieved for some reason, the image file located at defaultAssetURI in Flutter's assets folder will be returned. The default is assets/image.png.

Request headers can be added with headers when retrieving images from the network.

uriに存在する画像ファイルからImageProviderを取得します。

urihttp://https://から始まる場合、ネットワーク上に存在する画像をダウンロードして取得します。 blob://の後に画像バイナリのBase64エンコード文字列を指定するとその画像ファイルをそのまま取得することが可能です。

urifile://、または/の絶対パスで始まる場合、端末のファイルパスに対して検索を行い、ファイルが存在するときその画像ファイルを取得します。 (Webでは利用できません)

ファイルが見つからない場合、もしくはuriresource://で始まる場合はFlutterのアセットフォルダからファイルを検索し、その画像ファイルを取得します。

uriが空の場合、もしくはテキストがなにかしらの原因で取得出来なかった場合はFlutterのアセットフォルダ内のdefaultAssetURIに存在する画像ファイルが返されます。デフォルトはassets/image.png

ネットワーク上から画像を取得する際にheadersでリクエストヘッダを付与することが可能です。

Implementation

@useResult
ImageProvider call(
  String? uri, {
  String defaultAssetURI = "assets/image.png",
  Map<String, String>? headers,
}) {
  if (uri.isEmpty) {
    if (defaultAssetURI.endsWith("svg")) {
      return MemoizedAssetSvgImageProvider(defaultAssetURI);
    } else {
      return _MemoizedAssetImage(defaultAssetURI);
    }
  }
  try {
    uri = "$_prefix${uri!.trimString("/")}";
    if (uri.startsWith("blob:")) {
      final blob = uri.replaceAll(RegExp(r"^blob:(//)?"), "");
      return MemoryImage(base64Url.decode(blob));
    } else if (uri.startsWith("http")) {
      if (uri.endsWith("svg")) {
        return MemoizedNetworkSvgImageProvider(
          uri,
          headers: headers,
        );
      } else {
        return _MemoizedNetworkImage(
          uri,
          headers: headers,
        );
      }
    } else if (uri.startsWith("/") || uri.startsWith("file:")) {
      final file = File(uri.replaceAll(RegExp(r"^file:(//)?"), ""));
      if (uri.endsWith("svg")) {
        if (file.existsSync()) {
          return MemoizedFileSvgImageProvider(file.path);
        } else {
          return MemoizedAssetSvgImageProvider(uri.trimString("/"));
        }
      } else {
        if (file.existsSync()) {
          return _MemoizedFileImage(file);
        } else {
          return _MemoizedAssetImage(uri.trimString("/"));
        }
      }
    } else if (uri.startsWith("document:")) {
      final file = File(uri.replaceAll(RegExp(r"^document:(//)?"), ""));
      if (uri.endsWith("svg")) {
        return MemoizedFileSvgImageProvider(
          file.path,
          dirType: FileImageDirType.document,
        );
      } else {
        return _MemoizedFileImage(file, dirType: FileImageDirType.document);
      }
    } else if (uri.startsWith("temp:")) {
      final file = File(uri.replaceAll(RegExp(r"^temp:(//)?"), ""));
      if (uri.endsWith("svg")) {
        return MemoizedFileSvgImageProvider(
          file.path,
          dirType: FileImageDirType.temporary,
        );
      } else {
        return _MemoizedFileImage(file, dirType: FileImageDirType.temporary);
      }
    } else if (uri.startsWith("temporary:")) {
      final file = File(uri.replaceAll(RegExp(r"^temporary:(//)?"), ""));
      if (uri.endsWith("svg")) {
        return MemoizedFileSvgImageProvider(
          file.path,
          dirType: FileImageDirType.temporary,
        );
      } else {
        return _MemoizedFileImage(file, dirType: FileImageDirType.temporary);
      }
    } else if (uri.startsWith("resource:")) {
      final path = uri.replaceAll(RegExp(r"^resource:(//)?"), "");
      if (uri.endsWith("svg")) {
        return MemoizedAssetSvgImageProvider(path);
      } else {
        return _MemoizedAssetImage(path);
      }
    } else {
      if (uri.endsWith("svg")) {
        return MemoizedAssetSvgImageProvider(uri);
      } else {
        return _MemoizedAssetImage(uri);
      }
    }
  } catch (e) {
    debugPrint(e.toString());
    if (defaultAssetURI.endsWith("svg")) {
      return MemoizedAssetSvgImageProvider(defaultAssetURI);
    } else {
      return _MemoizedAssetImage(defaultAssetURI);
    }
  }
}