import 'package:flutter/rendering.dart'; const Size _kTestViewSize = const Size(800.0, 600.0); class TestRenderView extends RenderView { TestRenderView() { attach(); rootConstraints = new ViewConstraints(size: _kTestViewSize); scheduleInitialLayout(); scheduleInitialPaint(new TransformLayer(transform: new Matrix4.identity())); } } enum EnginePhase { layout, paint, composite } RenderView _renderView; RenderView get renderView => _renderView; void layout(RenderBox box, { BoxConstraints constraints, EnginePhase phase: EnginePhase.layout }) { assert(box != null); // if you want to just repump the last box, call pumpFrame(). if (renderView == null) _renderView = new TestRenderView(); if (renderView.child != null) renderView.child = null; if (constraints != null) { box = new RenderPositionedBox( child: new RenderConstrainedBox( additionalConstraints: constraints, child: box ) ); } renderView.child = box; pumpFrame(phase: phase); } void pumpFrame({ EnginePhase phase: EnginePhase.layout }) { RenderObject.flushLayout(); if (phase == EnginePhase.layout) return; renderView.updateCompositingBits(); RenderObject.flushPaint(); if (phase == EnginePhase.paint) return; renderView.compositeFrame(); }