desire method
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)),
);
}