buildOverlay method

  1. @override
Widget buildOverlay(
  1. BuildContext context
)
override

构建 overlay 内容小部件

Implementation

@override
Widget buildOverlay(BuildContext context) {
  final drawerMaxSize = _calcDrawerMaxSize(
    size: widget.maxPrimarySize,
    overlaySize: overlayState.size.value!,
    direction: direction(context),
  );

  Widget result = MediaQuery.removePadding(
    context: context,
    removeLeft: direction(context) == AxisDirection.right,
    removeRight: direction(context) == AxisDirection.left,
    child: ConstrainedBox(
      constraints: ElDrawer.createBoxConstraints(
        isVertical: isVertical,
        drawerMaxSize: drawerMaxSize,
      ),
      child: Builder(
        key: contentKey,
        builder: (context) {
          return widget.overlayBuilder(context);
        },
      ),
    ),
  );

  result = widget.transitionBuilder(context, result);

  result = ValueListenableBuilder(
    valueListenable: obs,
    builder: (context, value, child) => FocusScope(
      node: focusScopeNode,
      skipTraversal: true,
      descendantsAreFocusable: value == true,
      child: child!,
    ),
    child: result,
  );

  if (_allowedDrag(widget.enabledDrag) == false) return result;

  result = _DrawerDrag(
    behavior: HitTestBehavior.deferToChild,
    onDragUpdate: (delta) {
      animationController.value += delta;
    },
    onDragEnd: _dragEnd,
    direction: direction(context),
    getContentKey: () => contentKey,
    child: result,
  );

  return result;
}