diff --git a/lib/src/crop.dart b/lib/src/crop.dart index 5bf458c..52ed80d 100644 --- a/lib/src/crop.dart +++ b/lib/src/crop.dart @@ -2,8 +2,7 @@ part of crop_your_image; const dotTotalSize = 32.0; // fixed corner dot size. -typedef CornerDotBuilder = Widget Function( - double size, EdgeAlignment edgeAlignment); +typedef CornerDotBuilder = Widget Function(double size, EdgeAlignment edgeAlignment); typedef CroppingAreaBuilder = Rect Function(Rect imageRect); @@ -203,9 +202,8 @@ class _CropEditorState extends State<_CropEditor> { bool get _isImageLoading => _lastComputed != null; - _Calculator get calculator => _isFitVertically - ? const _VerticalCalculator() - : const _HorizontalCalculator(); + _Calculator get calculator => + _isFitVertically ? const _VerticalCalculator() : const _HorizontalCalculator(); set rect(Rect newRect) { setState(() { @@ -270,25 +268,20 @@ class _CropEditorState extends State<_CropEditor> { // width final newWidth = baseWidth * nextScale; - final horizontalFocalPointBias = focalPoint == null - ? 0.5 - : (focalPoint.dx - _imageRect.left) / _imageRect.width; - final leftPositionDelta = - (newWidth - _imageRect.width) * horizontalFocalPointBias; + final horizontalFocalPointBias = + focalPoint == null ? 0.5 : (focalPoint.dx - _imageRect.left) / _imageRect.width; + final leftPositionDelta = (newWidth - _imageRect.width) * horizontalFocalPointBias; // height final newHeight = baseHeight * nextScale; - final verticalFocalPointBias = focalPoint == null - ? 0.5 - : (focalPoint.dy - _imageRect.top) / _imageRect.height; - final topPositionDelta = - (newHeight - _imageRect.height) * verticalFocalPointBias; + final verticalFocalPointBias = + focalPoint == null ? 0.5 : (focalPoint.dy - _imageRect.top) / _imageRect.height; + final topPositionDelta = (newHeight - _imageRect.height) * verticalFocalPointBias; // position - final newLeft = max(min(_rect.left, _imageRect.left - leftPositionDelta), - _rect.right - newWidth); - final newTop = max(min(_rect.top, _imageRect.top - topPositionDelta), - _rect.bottom - newHeight); + final newLeft = + max(min(_rect.left, _imageRect.left - leftPositionDelta), _rect.right - newWidth); + final newTop = max(min(_rect.top, _imageRect.top - topPositionDelta), _rect.bottom - newHeight); if (newWidth < _rect.width || newHeight < _rect.height) { return; @@ -336,8 +329,10 @@ class _CropEditorState extends State<_CropEditor> { if (_lastComputed == future) { _targetImage = converted; _withCircleUi = widget.withCircleUi; + if (!mounted) { + return; + } _resetCroppingArea(); - setState(() { _lastComputed = null; }); @@ -354,6 +349,9 @@ class _CropEditorState extends State<_CropEditor> { _lastComputed = future; future.then((converted) { if (_lastComputed == future) { + if (!mounted) { + return; + } setState(() { _targetImage = converted; _lastComputed = null; @@ -528,8 +526,7 @@ class _CropEditorState extends State<_CropEditor> { _aspectRatio, ); }, - child: widget.cornerDotBuilder - ?.call(dotTotalSize, EdgeAlignment.topLeft) ?? + child: widget.cornerDotBuilder?.call(dotTotalSize, EdgeAlignment.topLeft) ?? const DotControl(), ), ), @@ -548,8 +545,7 @@ class _CropEditorState extends State<_CropEditor> { _aspectRatio, ); }, - child: widget.cornerDotBuilder - ?.call(dotTotalSize, EdgeAlignment.topRight) ?? + child: widget.cornerDotBuilder?.call(dotTotalSize, EdgeAlignment.topRight) ?? const DotControl(), ), ), @@ -568,8 +564,7 @@ class _CropEditorState extends State<_CropEditor> { _aspectRatio, ); }, - child: widget.cornerDotBuilder - ?.call(dotTotalSize, EdgeAlignment.bottomLeft) ?? + child: widget.cornerDotBuilder?.call(dotTotalSize, EdgeAlignment.bottomLeft) ?? const DotControl(), ), ), @@ -588,8 +583,7 @@ class _CropEditorState extends State<_CropEditor> { _aspectRatio, ); }, - child: widget.cornerDotBuilder - ?.call(dotTotalSize, EdgeAlignment.bottomRight) ?? + child: widget.cornerDotBuilder?.call(dotTotalSize, EdgeAlignment.bottomRight) ?? const DotControl(), ), ), @@ -610,17 +604,13 @@ class _CropAreaClipper extends CustomClipper { ..addPath( Path() ..moveTo(rect.left, rect.top + radius) - ..arcToPoint(Offset(rect.left + radius, rect.top), - radius: Radius.circular(radius)) + ..arcToPoint(Offset(rect.left + radius, rect.top), radius: Radius.circular(radius)) ..lineTo(rect.right - radius, rect.top) - ..arcToPoint(Offset(rect.right, rect.top + radius), - radius: Radius.circular(radius)) + ..arcToPoint(Offset(rect.right, rect.top + radius), radius: Radius.circular(radius)) ..lineTo(rect.right, rect.bottom - radius) - ..arcToPoint(Offset(rect.right - radius, rect.bottom), - radius: Radius.circular(radius)) + ..arcToPoint(Offset(rect.right - radius, rect.bottom), radius: Radius.circular(radius)) ..lineTo(rect.left + radius, rect.bottom) - ..arcToPoint(Offset(rect.left, rect.bottom - radius), - radius: Radius.circular(radius)) + ..arcToPoint(Offset(rect.left, rect.bottom - radius), radius: Radius.circular(radius)) ..close(), Offset.zero, )