Chromium Code Reviews| 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 { |