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(); |