draw method

void draw(
  1. Widget widget,
  2. Rect target
)

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