desire method

SelectableText desire(
  1. List desirable
)

Implementation

SelectableText desire(List desirable) {
  final desires = [
    style != null ? this : const SelectableText("", style: TextStyle()),
    ...desirable.map((e) {
      if (e is SelectableText) return e;
      if (e is Text) return _textToSelectableText(e);
      if (e is TextStyle) return Text("", style: e);
      return null;
    }).whereType<SelectableText>(),
  ].toList();

  return SelectableText(
    data ?? "",
    key: key,
    textAlign:
        mapDesire<TextAlign, SelectableText>(desires, (e) => e.textAlign),
    textDirection: mapDesire<TextDirection, SelectableText>(
        desires, (e) => e.textDirection),
    textScaleFactor:
        mapDesire<double, SelectableText>(desires, (e) => e.textScaleFactor),
    showCursor:
        mapDesire<bool, SelectableText>(desires, (e) => e.showCursor, false)!,
    autofocus:
        mapDesire<bool, SelectableText>(desires, (e) => e.autofocus, false)!,
    toolbarOptions: mapDesire<ToolbarOptions, SelectableText>(
        desires, (e) => e.toolbarOptions),
    minLines: mapDesire<int, SelectableText>(desires, (e) => e.minLines),
    maxLines: mapDesire<int, SelectableText>(desires, (e) => e.maxLines),
    cursorWidth:
        mapDesire<double, SelectableText>(desires, (e) => e.cursorWidth, 2)!,
    cursorHeight:
        mapDesire<double, SelectableText>(desires, (e) => e.cursorHeight),
    cursorRadius:
        mapDesire<Radius, SelectableText>(desires, (e) => e.cursorRadius),
    cursorColor:
        mapDesire<Color, SelectableText>(desires, (e) => e.cursorColor),
    selectionHeightStyle: mapDesire<BoxHeightStyle, SelectableText>(
        desires, (e) => e.selectionHeightStyle, BoxHeightStyle.tight)!,
    selectionWidthStyle: mapDesire<BoxWidthStyle, SelectableText>(
        desires, (e) => e.selectionWidthStyle, BoxWidthStyle.tight)!,
    dragStartBehavior: mapDesire<DragStartBehavior, SelectableText>(
        desires, (e) => e.dragStartBehavior, DragStartBehavior.start)!,
    enableInteractiveSelection: mapDesire<bool, SelectableText>(
        desires, (e) => e.enableInteractiveSelection, true)!,
    selectionControls: mapDesire<TextSelectionControls, SelectableText>(
        desires, (e) => e.selectionControls),
    onTap: onTap,
    scrollPhysics: mapDesire<ScrollPhysics, SelectableText>(
        desires, (e) => e.scrollPhysics),
    textWidthBasis: mapDesire<TextWidthBasis, SelectableText>(
        desires, (e) => e.textWidthBasis),
    textHeightBehavior: mapDesire<TextHeightBehavior, SelectableText>(
        desires, (e) => e.textHeightBehavior),
    onSelectionChanged: mapDesire<
        void Function(TextSelection, SelectionChangedCause?),
        SelectableText>(desires, (e) => e.onSelectionChanged),
    style: desires
        .map((e) => e.style)
        .whereType<TextStyle>()
        .reduce((acc, e) => acc.merge(e)),
  );
}