Chromium Code Reviews| Index: sky/sdk/lib/widgets/widget.dart |
| diff --git a/sky/sdk/lib/widgets/widget.dart b/sky/sdk/lib/widgets/widget.dart |
| index 7d450c98b11bdc330f7d7a1c48fb41004364fb4f..ed2e9cb5d4c67d9fb5da3c50dc7617c4752f512d 100644 |
| --- a/sky/sdk/lib/widgets/widget.dart |
| +++ b/sky/sdk/lib/widgets/widget.dart |
| @@ -23,7 +23,7 @@ abstract class Widget { |
| Widget({ String key }) { |
| _key = key != null ? key : runtimeType.toString(); |
| - assert(this is AbstractWidgetRoot || _inRenderDirtyComponents); // you should not build the UI tree ahead of time, build it only during build() |
| + assert(this is AbstractWidgetRoot || this is App || _inRenderDirtyComponents); // you should not build the UI tree ahead of time, build it only during build() |
| } |
| String _key; |
| @@ -474,7 +474,7 @@ abstract class RenderObjectWrapper extends Widget { |
| static RenderObjectWrapper _getMounted(RenderObject node) => _nodeMap[node]; |
| void _sync(Widget old, dynamic slot) { |
| - assert(parent != null); |
| + assert(parent != null || this is RenderViewWrapper); |
|
Hixie
2015/06/17 19:21:25
This should never be called for RenderViewWrapper.
|
| if (old == null) { |
| _root = createNode(); |
| var ancestor = findAncestor(RenderObjectWrapper); |
| @@ -767,10 +767,12 @@ class WidgetAppView extends AppView { |
| } |
| +abstract class App extends Component { |
| +} |
| + |
| abstract class AbstractWidgetRoot extends Component { |
| - AbstractWidgetRoot({ RenderView renderViewOverride }) : super(stateful: true) { |
| - WidgetAppView.initWidgetAppView(renderViewOverride: renderViewOverride); |
| + AbstractWidgetRoot() : super(stateful: true) { |
| _mounted = true; |
| _scheduleComponentForRender(this); |
| } |
| @@ -789,20 +791,21 @@ abstract class AbstractWidgetRoot extends Component { |
| } |
| -abstract class App extends AbstractWidgetRoot { |
| - |
| - App({ RenderView renderViewOverride }) : super(renderViewOverride: renderViewOverride); |
| - |
| - void _buildIfDirty() { |
| - super._buildIfDirty(); |
| +class RenderViewWrapper extends OneChildRenderObjectWrapper { |
| + RenderViewWrapper({ String key, Widget child }) : super(key: key, child: child); |
| + RenderView get root => super.root; |
| + RenderView createNode() => WidgetAppView._appView.renderView; |
| +} |
| - if (root.parent == null) { |
| - // we haven't attached it yet |
| - WidgetAppView._appView.root = root; |
| - } |
| - assert(root.parent is RenderView); |
| - } |
| +class AppContainer extends AbstractWidgetRoot { |
| + AppContainer(this.app); |
| + final App app; |
| + Widget build() => new RenderViewWrapper(child: app); |
| +} |
| +void runApp(App app, { RenderView renderViewOverride }) { |
| + WidgetAppView.initWidgetAppView(renderViewOverride: renderViewOverride); |
| + new AppContainer(app); |
| } |
| typedef Widget Builder(); |