call method
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を取得します。
uri
がhttp://
、https://
から始まる場合、ネットワーク上に存在する画像をダウンロードして取得します。
blob://
の後に画像バイナリのBase64エンコード文字列を指定するとその画像ファイルをそのまま取得することが可能です。
uri
がfile://
、または/
の絶対パスで始まる場合、端末のファイルパスに対して検索を行い、ファイルが存在するときその画像ファイルを取得します。
(Webでは利用できません)
ファイルが見つからない場合、もしくはuri
がresource://
で始まる場合は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!.trimStringRight("/")}";
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);
}
}
}