showTooltip static method

void showTooltip(
  1. BuildContext context,
  2. CKToolTipPositionV3 position,
  3. String tooltipText, {
  4. bool? showClose = false,
  5. VoidCallback? onCloseClick,
  6. bool? clickMaskDismiss = true,
  7. int? xOffset,
  8. List<CKTooltipModalV3>? list,
  9. double? maxWidth,
  10. ValueChanged<int>? onItemClick,
  11. bool? isCenter,
  12. bool? useAnimation,
  13. VoidCallback? onDismiss,
  14. InlineSpan? richContent,
  15. Widget? bottomWidget,
})

Implementation

static void showTooltip(
    BuildContext context,
    CKToolTipPositionV3 position,
    String tooltipText, {
      bool? showClose = false,
      VoidCallback? onCloseClick,
      bool? clickMaskDismiss = true,
      int? xOffset,
      List<CKTooltipModalV3>? list,
      double? maxWidth,
      ValueChanged<int>? onItemClick,

      ///气泡固定在屏幕中间
      bool? isCenter,

      ///是否使用动画,默认不使用
      bool? useAnimation,

      ///气泡消失回调
      VoidCallback? onDismiss,

      ///富文本内容
      InlineSpan? richContent,

      ///自定义底部布局
      Widget? bottomWidget,
    }) {
  RenderBox renderBox = context.findRenderObject() as RenderBox;
  //目标控件的坐标
  Offset targetPosition = renderBox.localToGlobal(Offset.zero);
  double targetWidth = renderBox.size.width;
  Offset targetBuilder(Offset targetOffset, Size targetSize) {
    switch (position) {
      case CKToolTipPositionV3.startCenter:
      case CKToolTipPositionV3.startTop:
      case CKToolTipPositionV3.startBottom:
      case CKToolTipPositionV3.endCenter:
      case CKToolTipPositionV3.endTop:
      case CKToolTipPositionV3.endBottom:
      case CKToolTipPositionV3.topCenter:
      case CKToolTipPositionV3.bottomCenter:
      case CKToolTipPositionV3.topStart:
        return Offset(targetPosition.dx + (xOffset ?? 0), targetPosition.dy);
      default:
        return Offset(targetPosition.dx - targetWidth / 2 + (xOffset ?? 0), targetPosition.dy);
    }
  }

  Alignment alignment;
  //气泡弹窗位置
  switch (position) {
    case CKToolTipPositionV3.topCenter:
      alignment = Alignment.topCenter;
      break;
    case CKToolTipPositionV3.topStart:
      alignment = Alignment.topLeft;
      break;
    case CKToolTipPositionV3.topEnd:
      alignment = Alignment.topRight;
      break;
    case CKToolTipPositionV3.bottomCenter:
      alignment = Alignment.bottomCenter;
      break;
    case CKToolTipPositionV3.bottomStart:
      alignment = Alignment.bottomLeft;
      break;
    case CKToolTipPositionV3.bottomEnd:
      alignment = Alignment.bottomRight;
      break;
    case CKToolTipPositionV3.startCenter:
      alignment = Alignment.centerLeft;
      break;
    case CKToolTipPositionV3.startTop:
      alignment = Alignment.centerLeft;
      break;
    case CKToolTipPositionV3.startBottom:
      alignment = Alignment.centerLeft;
      break;
    case CKToolTipPositionV3.endCenter:
      alignment = Alignment.centerRight;
      break;
    case CKToolTipPositionV3.endTop:
      alignment = Alignment.centerRight;
      break;
    case CKToolTipPositionV3.endBottom:
      alignment = Alignment.centerRight;
      break;
  }
  SmartDialog.config.attach = SmartConfigAttach(
      attachAlignmentType: SmartAttachAlignmentType.inside,
      clickMaskDismiss: clickMaskDismiss ?? true,
      alignment: Alignment.center,
      usePenetrate: false);
  SmartDialog.showAttach(
    targetBuilder: (isCenter ?? false) ? null : targetBuilder,
    maskColor: Colors.transparent,
    targetContext: context,
    alignment: alignment,
    tag: tooltipText,
    bindWidget: context,
    useAnimation: false,
    builder: (context) {
      return CKTooltipWidgetV3(
        text: tooltipText,
        position: position,
        targetWidth: targetWidth,
        showClose: showClose,
        list: list,
        tooltipMaxWidth: maxWidth,
        richContent: richContent,
        bottomWidget: bottomWidget,
        onItemClick: (value) {
          SmartDialog.dismiss(tag: tooltipText);
          onItemClick?.call(value);
        },
        onCloseClick: () {
          SmartDialog.dismiss(tag: tooltipText);
          if (onCloseClick != null) {
            onCloseClick();
          }
        },
      );
    },
    onDismiss: () {
      onDismiss?.call();
    },
  );
}