show method
void
show({
- required BuildContext context,
- required Widget collapsedBuilder(),
- required Widget expandedBuilder(),
- 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!);
}