draw method
Implementation
void draw(Widget widget, Rect target) {
assert(
target.width >= 0 && target.height >= 0,
'RenderContext.draw: target rect must have non-negative size '
'(got ${target.width}x${target.height})');
if (target.bottom > _maxDesiredHeight) {
_maxDesiredHeight = target.bottom;
}
final clipped = target.intersect(buffer.area);
if (clipped.isEmpty) return;
if (widget is FocusableWidget) {
if (widget.isSkipped) {
if (focus.current == widget.id) {
focus.clear();
}
} else {
assert(
_seenFocusables.add(widget.id),
'Duplicate FocusableWidget id in same frame: ${widget.id}. '
'Each focusable widget must have a unique Key per frame.');
focus.register(
widget.id,
handler: (event) {
try {
return widget.onKey(event, this);
} catch (e, st) {
logger.error('widget.onKey threw', error: e, stack: st);
return false;
}
},
);
if (focus.current == null) {
focus.focus(widget.id);
}
try {
widget.registerHitZones(clipped, this);
} catch (e, st) {
logger.error('widget.registerHitZones threw', error: e, stack: st);
}
}
}
try {
widget.render(clipped, buffer, this);
} catch (e, st) {
logger.error('widget.render threw', error: e, stack: st);
_drawErrorBoundary(clipped, e);
}
}