calcOverlap method

double? calcOverlap({
  1. required GlobalKey<State<StatefulWidget>> nestedScrollViewKey,
  2. required BuildContext sliverContext,
})

Calculate the overlap for the body sliver.

Implementation

double? calcOverlap({
  required GlobalKey nestedScrollViewKey,
  required BuildContext sliverContext,
}) {
  final nestedScrollViewCtx = nestedScrollViewKey.currentContext;
  if (nestedScrollViewCtx == null) return null;

  // If the sliver of ctx is headerSliver, just return null and use the
  // default overlap.
  if (!bodySliverContexts.contains(sliverContext)) return null;

  // Get SliverFillRemaining
  final remainingSliverContext = fetchRemainingSliverContext(
    nestedScrollViewKey: nestedScrollViewKey,
  );
  if (remainingSliverContext == null || remainingSliverRenderObj == null) {
    return null;
  }

  /// Calculate the offset of the sliver corresponding to sliverContext
  /// relative to SliverFillRemaining.
  final offset = ObserverUtils.localToGlobal(
    context: sliverContext,
    point: Offset.zero,
    ancestor: remainingSliverContext,
  );
  if (offset == null) return null;

  final remainingContextOverlap =
      remainingSliverRenderObj!.constraints.overlap;
  final sliverContextExtraOverlap =
      (remainingContextOverlap - offset.dy).clamp(0, double.infinity);

  var _obj = ObserverUtils.findRenderObject(sliverContext);
  if (_obj is! RenderSliverMultiBoxAdaptor) return null;
  return sliverContextExtraOverlap + _obj.constraints.overlap;
}