Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(891)

Unified Diff: sky/sdk/lib/widgets/basic.dart

Issue 1218023013: Hoist knowledge of image_cache into widgets/basic.dart (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/sdk/lib/rendering/box.dart ('k') | sky/sdk/lib/widgets/icon.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/sdk/lib/widgets/basic.dart
diff --git a/sky/sdk/lib/widgets/basic.dart b/sky/sdk/lib/widgets/basic.dart
index cfbbdf8a764af7f100d3cf6e3e11dded49d8a3a8..94c763378ff0340e0f778b93cdced7a841c7e520 100644
--- a/sky/sdk/lib/widgets/basic.dart
+++ b/sky/sdk/lib/widgets/basic.dart
@@ -2,10 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:async';
import 'dart:sky' as sky;
import 'package:vector_math/vector_math.dart';
+import '../mojo/net/image_cache.dart' as image_cache;
import '../painting/text_style.dart';
import '../rendering/block.dart';
import '../rendering/box.dart';
@@ -453,7 +455,7 @@ class Text extends Component {
else
combinedStyle = defaultStyle;
} else {
- combinedStyle = style;
+ combinedStyle = style;
}
if (combinedStyle != null)
text = new InlineStyle(combinedStyle, [text]);
@@ -462,27 +464,66 @@ class Text extends Component {
}
class Image extends LeafRenderObjectWrapper {
-
- Image({
- src,
- this.size
- }) : src = src,
- super(key: src) {
- assert(src != null);
- }
+ Image({ sky.Image image, this.size })
+ : image = image, super(key: image.hashCode.toString());
RenderImage get root => super.root;
- RenderImage createNode() => new RenderImage(this.src, this.size);
+ RenderImage createNode() => new RenderImage(image, size);
- final String src;
+ final sky.Image image;
final Size size;
void syncRenderObject(Widget old) {
super.syncRenderObject(old);
- root.src = src;
+ root.image = image;
root.requestedSize = size;
}
+}
+
+class FutureImage extends Component {
+ FutureImage({ this.image, this.size }) : super(stateful: true);
+
+ Future<sky.Image> image;
+ Size size;
+ sky.Image _resolvedImage;
+
+ void didMount() {
+ super.didMount();
+ _fetchImage();
+ }
+
+ void _fetchImage() {
Hixie 2015/07/01 20:53:34 fetch sounds like it hits the network
+ image.then((sky.Image image) {
+ setState(() {
+ if (!mounted)
+ return;
+ _resolvedImage = image;
+ });
+ });
+ }
+
+ void syncFields(FutureImage source) {
+ bool needToFetchImage = (image != source.image);
+ image = source.image;
+ size = source.size;
+ if (needToFetchImage)
+ _fetchImage();
+ }
+
+ Widget build() {
+ return new Image(image: _resolvedImage, size: size);
+ }
+}
+
+class NetworkImage extends Component {
+ NetworkImage({ String src, this.size }) : src = src, super(key: src);
+ final String src;
+ final Size size;
+
+ Widget build() {
+ return new FutureImage(image: image_cache.load(src), size: size);
+ }
}
class WidgetToRenderBoxAdapter extends LeafRenderObjectWrapper {
« no previous file with comments | « sky/sdk/lib/rendering/box.dart ('k') | sky/sdk/lib/widgets/icon.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698