buildHandle method

  1. @override
Widget buildHandle(
  1. BuildContext context,
  2. TextSelectionHandleType type,
  3. double textHeight, [
  4. VoidCallback? onTap,
])
override

Builder for material-style text selection handles.

Implementation

@override
Widget buildHandle(
  BuildContext context,
  TextSelectionHandleType type,
  double textHeight, [
  VoidCallback? onTap,
]) {
  final ThemeData theme = Theme.of(context);
  final Color handleColor =
      TextSelectionTheme.of(context).selectionHandleColor ?? theme.colorScheme.primary;
  final Widget handle = SizedBox(
    width: _kHandleSize,
    height: _kHandleSize,
    child: CustomPaint(
      painter: _TextSelectionHandlePainter(color: handleColor),
      child: GestureDetector(onTap: onTap, behavior: HitTestBehavior.translucent),
    ),
  );

  // [handle] is a circle, with a rectangle in the top left quadrant of that
  // circle (an onion pointing to 10:30). We rotate [handle] to point
  // straight up or up-right depending on the handle type.
  return switch (type) {
    TextSelectionHandleType.left => Transform.rotate(
      angle: math.pi / 2.0,
      child: handle,
    ), // points up-right
    TextSelectionHandleType.right => handle, // points up-left
    TextSelectionHandleType.collapsed => Transform.rotate(
      angle: math.pi / 4.0,
      child: handle,
    ), // points up
  };
}