show method

void show({
  1. required BuildContext context,
  2. required Widget collapsedBuilder(
    1. BuildContext,
    2. double
    ),
  3. required Widget expandedBuilder(
    1. BuildContext,
    2. double
    ),
  4. Rect? sourceRect,
})

Insert the morph overlay rooted at the BuildContext.

sourceRect is the global-coordinate bounding rect of the tapped widget. If omitted, captures it from context automatically.

Implementation

void show({
  required BuildContext context,
  required Widget Function(BuildContext, double) collapsedBuilder,
  required Widget Function(BuildContext, double) expandedBuilder,
  Rect? sourceRect,
}) {
  if (_entry != null) return; // Prevent double-insert

  _collapsedBuilder = collapsedBuilder;
  _expandedBuilder = expandedBuilder;

  // Capture rect if not provided
  Rect originRect;
  if (sourceRect != null) {
    originRect = sourceRect;
  } else {
    final box = context.findRenderObject() as RenderBox?;
    if (box == null || !box.hasSize) return;
    originRect = box.localToGlobal(Offset.zero) & box.size;
  }

  final screenSize = MediaQuery.sizeOf(context);
  final fullscreenRect = Rect.fromLTWH(
    0,
    0,
    screenSize.width,
    screenSize.height,
  );

  _controller.expandFrom(
    origin: MorphOrigin(
      type: MorphOriginType.card,
      rect: originRect,
      borderRadius: _borderRadius,
    ),
    targetRect: fullscreenRect,
  );

  _entry = OverlayEntry(builder: _buildEntry);
  Overlay.of(context).insert(_entry!);
}