Fix exception when rect is not a number

pull/236/head
Till Friebe 4 years ago
parent ee45815da5
commit f499c478ed
  1. 42
      lib/src/widgets/cursor.dart

@ -292,25 +292,39 @@ class CursorPainter {
}
}
final caretPosition = editable!.localToGlobal(caretRect.topLeft);
final pixelMultiple = 1.0 / devicePixelRatio;
caretRect = caretRect.shift(Offset(
caretPosition.dx.isFinite
? (caretPosition.dx / pixelMultiple).round() * pixelMultiple -
caretPosition.dx
: caretPosition.dx,
caretPosition.dy.isFinite
? (caretPosition.dy / pixelMultiple).round() * pixelMultiple -
caretPosition.dy
: caretPosition.dy));
final pixelPerfectOffset =
_getPixelPerfectCursorOffset(editable!, caretRect, devicePixelRatio);
if (!pixelPerfectOffset.isFinite) {
return;
}
caretRect = caretRect.shift(pixelPerfectOffset);
final paint = Paint()..color = color;
if (style.radius == null) {
canvas.drawRect(caretRect, paint);
return;
} else {
final caretRRect = RRect.fromRectAndRadius(caretRect, style.radius!);
canvas.drawRRect(caretRRect, paint);
}
}
Offset _getPixelPerfectCursorOffset(
RenderContentProxyBox editable,
Rect caretRect,
double devicePixelRatio,
) {
final caretPosition = editable.localToGlobal(caretRect.topLeft);
final pixelMultiple = 1.0 / devicePixelRatio;
final pixelPerfectOffsetX = caretPosition.dx.isFinite
? (caretPosition.dx / pixelMultiple).round() * pixelMultiple -
caretPosition.dx
: caretPosition.dx;
final pixelPerfectOffsetY = caretPosition.dy.isFinite
? (caretPosition.dy / pixelMultiple).round() * pixelMultiple -
caretPosition.dy
: caretPosition.dy;
final caretRRect = RRect.fromRectAndRadius(caretRect, style.radius!);
canvas.drawRRect(caretRRect, paint);
return Offset(pixelPerfectOffsetX, pixelPerfectOffsetY);
}
}

Loading…
Cancel
Save