wrap static method

Widget wrap(
  1. Text child, {
  2. bool selectAll = true,
  3. bool copy = true,
  4. MessageModel? model,
  5. ValueChanged<String>? onFavorite,
  6. MessageCallBack? onDelete,
  7. MessageCallBack? onShare,
})

Implementation

static Widget wrap(Text child,
    {bool selectAll = true,
    bool copy = true,
    MessageModel? model,
    ValueChanged<String>? onFavorite,
    MessageCallBack? onDelete,
    MessageCallBack? onShare}) {
  // 获取选择文本
  String selectedText = '';
  return SelectionArea(
      onSelectionChanged: (SelectedContent? selectedContent) =>
          selectedText = selectedContent?.plainText ?? '',
      child: child,
      contextMenuBuilder: (
        BuildContext context,
        SelectableRegionState editableTextState,
      ) {
        bool selectAllEnable = false;
        // 若还有可选的内容则展示全选菜单
        if (selectedText.length < (child.data?.length ?? 0)) {
          selectAllEnable = true;
        }
        final List<ContextMenuButtonItem> buttonItems = [
          if (onFavorite != null)
            ContextMenuButtonItem(
                label: '收藏',
                type: ContextMenuButtonType.custom,
                onPressed: () {
                  _clear(editableTextState);
                  if (model != null) {
                    onFavorite(jsonEncode(model));
                  } else {
                    onFavorite(selectedText);
                  }
                }),
          if (selectAll && selectAllEnable)
            ContextMenuButtonItem(
                onPressed: () {
                  editableTextState.selectAll(SelectionChangedCause.toolbar);
                },
                label: '全选',
                type: ContextMenuButtonType.selectAll),
          if (copy)
            ContextMenuButtonItem(
                type: ContextMenuButtonType.copy,
                onPressed: () {
                  _clear(editableTextState);
                  HIUtils.copyText(context, selectedText);
                },
                label: '复制'),
          if (onDelete != null)
            ContextMenuButtonItem(
                label: '删除',
                type: ContextMenuButtonType.delete,
                onPressed: () {
                  _clear(editableTextState);
                  onDelete(model!);
                }),
          if (onShare != null)
            ContextMenuButtonItem(
                label: "转发",
                type: ContextMenuButtonType.share,
                onPressed: () {
                  _clear(editableTextState);
                  onShare(model!);
                })
        ];
        return AdaptiveTextSelectionToolbar.buttonItems(
            buttonItems: buttonItems,
            anchors: editableTextState.contextMenuAnchors);
      });
}