From 5161d12004f484e035e23c62fb2e609eaf71c642 Mon Sep 17 00:00:00 2001 From: Kris Giesing Date: Mon, 1 Feb 2016 15:11:34 -0800 Subject: [PATCH] Give scale parameter to ImageCache and NetworkImage --- packages/flutter/lib/src/rendering/image.dart | 2 +- .../lib/src/services/asset_bundle.dart | 4 ++-- .../flutter/lib/src/services/image_cache.dart | 20 +++++++++++++------ packages/flutter/lib/src/widgets/basic.dart | 10 ++++++++-- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/packages/flutter/lib/src/rendering/image.dart b/packages/flutter/lib/src/rendering/image.dart index 00ad9618d6c..fbde014a2c7 100644 --- a/packages/flutter/lib/src/rendering/image.dart +++ b/packages/flutter/lib/src/rendering/image.dart @@ -78,7 +78,7 @@ class RenderImage extends RenderBox { markNeedsLayout(); } - /// If non-null, specify the image's scale. + /// Specifies the image's scale. /// /// Used when determining the best display size for the image. double get scale => _scale; diff --git a/packages/flutter/lib/src/services/asset_bundle.dart b/packages/flutter/lib/src/services/asset_bundle.dart index aaf83ffadc3..ff0cd7c8820 100644 --- a/packages/flutter/lib/src/services/asset_bundle.dart +++ b/packages/flutter/lib/src/services/asset_bundle.dart @@ -43,9 +43,9 @@ class NetworkAssetBundle extends AssetBundle { abstract class CachingAssetBundle extends AssetBundle { final Map imageResourceCache = - new Map(); + {}; final Map> _stringCache = - new Map>(); + >{}; Future fetchImage(String key) async { return new ImageInfo(image: await decodeImageFromDataPipe(await load(key))); diff --git a/packages/flutter/lib/src/services/image_cache.dart b/packages/flutter/lib/src/services/image_cache.dart index 05483d0a45d..e66b487740a 100644 --- a/packages/flutter/lib/src/services/image_cache.dart +++ b/packages/flutter/lib/src/services/image_cache.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'dart:async'; +import 'dart:ui' show hashValues; import 'package:mojo/mojo/url_response.mojom.dart'; import 'package:quiver/collection.dart'; @@ -19,8 +20,9 @@ abstract class ImageProvider { class _UrlFetcher implements ImageProvider { final String _url; + final double _scale; - _UrlFetcher(this._url); + _UrlFetcher(this._url, this._scale); Future loadImage() async { UrlResponse response = await fetchUrl(_url); @@ -28,11 +30,17 @@ class _UrlFetcher implements ImageProvider { print("Failed (${response.statusCode}) to load image $_url"); return null; } - return new ImageInfo(image: await decodeImageFromDataPipe(response.body)); + return new ImageInfo( + image: await decodeImageFromDataPipe(response.body), + scale: _scale + ); } - bool operator ==(other) => other is _UrlFetcher && _url == other._url; - int get hashCode => _url.hashCode; + bool operator ==(other) { + return other is _UrlFetcher && _url == other._url && _scale == other._scale; + } + + int get hashCode => hashValues(_url, _scale); } const int _kDefaultSize = 1000; @@ -52,8 +60,8 @@ class _ImageCache { }); } - ImageResource load(String url) { - return loadProvider(new _UrlFetcher(url)); + ImageResource load(String url, { double scale: 1.0 }) { + return loadProvider(new _UrlFetcher(url, scale)); } } diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart index 4e5376bb510..7cc5781ed8a 100644 --- a/packages/flutter/lib/src/widgets/basic.dart +++ b/packages/flutter/lib/src/widgets/basic.dart @@ -1531,7 +1531,7 @@ class RawImage extends LeafRenderObjectWidget { /// aspect ratio. final double height; - /// If non-null, specify the image's scale. + /// Specifies the image's scale. /// /// Used when determining the best display size for the image. final double scale; @@ -1700,6 +1700,7 @@ class NetworkImage extends StatelessComponent { this.src, this.width, this.height, + this.scale : 1.0, this.color, this.fit, this.alignment, @@ -1722,6 +1723,11 @@ class NetworkImage extends StatelessComponent { /// aspect ratio. final double height; + /// Specifies the image's scale. + /// + /// Used when determining the best display size for the image. + final double scale; + /// If non-null, apply this color filter to the image before painting. final Color color; @@ -1749,7 +1755,7 @@ class NetworkImage extends StatelessComponent { Widget build(BuildContext context) { return new RawImageResource( - image: imageCache.load(src), + image: imageCache.load(src, scale: scale), width: width, height: height, color: color,