Skip to content

Commit

Permalink
fix: Asset.image with a header.
Browse files Browse the repository at this point in the history
  • Loading branch information
mathrunet committed Feb 2, 2024
1 parent b37e096 commit 73b18dd
Show file tree
Hide file tree
Showing 8 changed files with 86 additions and 73 deletions.
10 changes: 5 additions & 5 deletions packages/katana_theme/example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -345,35 +345,35 @@ packages:
path: "../../katana"
relative: true
source: path
version: "2.10.2"
version: "2.11.0"
katana_builder:
dependency: "direct overridden"
description:
path: "../../katana_builder"
relative: true
source: path
version: "2.0.0"
version: "2.1.1"
katana_theme:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "2.2.11"
version: "2.3.0"
katana_theme_annotation:
dependency: "direct overridden"
description:
path: "../../katana_theme_annotation"
relative: true
source: path
version: "2.0.38"
version: "2.1.0"
katana_theme_builder:
dependency: "direct dev"
description:
path: "../../katana_theme_builder"
relative: true
source: path
version: "2.1.18"
version: "2.2.1"
lints:
dependency: transitive
description:
Expand Down
16 changes: 12 additions & 4 deletions packages/katana_theme/lib/src/others/asset.dart
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,8 @@ abstract class _ImageProviderBuilderMixin {
///
/// 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://`から始まる場合、ネットワーク上に存在する画像をダウンロードして取得します。
Expand All @@ -234,10 +236,13 @@ abstract class _ImageProviderBuilderMixin {
/// ファイルが見つからない場合、もしくは[uri]`resource://`で始まる場合はFlutterのアセットフォルダからファイルを検索し、その画像ファイルを取得します。
///
/// [uri]が空の場合、もしくはテキストがなにかしらの原因で取得出来なかった場合はFlutterのアセットフォルダ内の[defaultAssetURI]に存在する画像ファイルが返されます。デフォルトは`assets/image.png`
///
/// ネットワーク上から画像を取得する際に[headers]でリクエストヘッダを付与することが可能です。
ImageProvider call(
String? uri, [
String? uri, {
String defaultAssetURI = "assets/image.png",
]) {
Map<String, String>? headers,
}) {
if (uri.isEmpty) {
return _MemoizedAssetImage(defaultAssetURI);
}
Expand All @@ -247,7 +252,10 @@ abstract class _ImageProviderBuilderMixin {
final blob = uri.replaceAll(RegExp(r"^blob:(//)?"), "");
return MemoryImage(base64Url.decode(blob));
} else if (uri.startsWith("http")) {
return _MemoizedNetworkImage(uri);
return _MemoizedNetworkImage(
uri,
headers: headers,
);
} else if (uri.startsWith("/") || uri.startsWith("file:")) {
final file = File(uri.replaceAll(RegExp(r"^file:(//)?"), ""));
if (file.existsSync()) {
Expand Down Expand Up @@ -316,7 +324,7 @@ class _ImageMemoryCache {
}

class _MemoizedNetworkImage extends network_image.NetworkImage {
const _MemoizedNetworkImage(super.url);
const _MemoizedNetworkImage(super.url, {super.headers});

static final HttpClient _sharedHttpClient = HttpClient()
..autoUncompress = false;
Expand Down
13 changes: 9 additions & 4 deletions packages/katana_theme/lib/src/web/asset.dart
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,8 @@ abstract class _ImageProviderBuilderMixin {
///
/// 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://`から始まる場合、ネットワーク上に存在する画像をダウンロードして取得します。
Expand All @@ -184,10 +186,13 @@ abstract class _ImageProviderBuilderMixin {
/// ファイルが見つからない場合、もしくは[uri]`resource://`で始まる場合はFlutterのアセットフォルダからファイルを検索し、その画像ファイルを取得します。
///
/// [uri]が空の場合、もしくはテキストがなにかしらの原因で取得出来なかった場合はFlutterのアセットフォルダ内の[defaultAssetURI]に存在する画像ファイルが返されます。デフォルトは`assets/image.png`
///
/// ネットワーク上から画像を取得する際に[headers]でリクエストヘッダを付与することが可能です。
ImageProvider call(
String? uri, [
String? uri, {
String defaultAssetURI = "assets/image.png",
]) {
Map<String, String>? headers,
}) {
if (uri.isEmpty) {
return _MemoizedAssetImage(defaultAssetURI);
}
Expand All @@ -196,7 +201,7 @@ abstract class _ImageProviderBuilderMixin {
final blob = uri.replaceAll(RegExp(r"^blob:(//)?"), "");
return MemoryImage(base64Url.decode(blob));
} else if (uri.startsWith("http")) {
return _MemoizedNetworkImage(uri);
return _MemoizedNetworkImage(uri, headers: headers);
} else if (uri.startsWith("resource:")) {
return _MemoizedAssetImage(
uri.replaceAll(RegExp(r"^resource:(//)?"), ""));
Expand Down Expand Up @@ -249,7 +254,7 @@ class _ImageMemoryCache {
}

class _MemoizedNetworkImage extends network_image.NetworkImage {
const _MemoizedNetworkImage(super.url);
const _MemoizedNetworkImage(super.url, {super.headers});

@override
ImageStreamCompleter loadImage(
Expand Down
6 changes: 3 additions & 3 deletions packages/katana_theme/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -212,21 +212,21 @@ packages:
path: "../katana"
relative: true
source: path
version: "2.10.2"
version: "2.11.0"
katana_test:
dependency: "direct dev"
description:
path: "../katana_test"
relative: true
source: path
version: "2.0.0"
version: "2.1.0"
katana_theme_annotation:
dependency: "direct main"
description:
path: "../katana_theme_annotation"
relative: true
source: path
version: "2.0.38"
version: "2.1.0"
lints:
dependency: transitive
description:
Expand Down
Loading

0 comments on commit 73b18dd

Please sign in to comment.