38 lines
1.4 KiB
Dart
38 lines
1.4 KiB
Dart
import 'package:flutter/rendering.dart';
|
|
|
|
class ArrowClipper extends CustomClipper<Path> {
|
|
@override
|
|
Path getClip(Size size) {
|
|
final path = Path();
|
|
path.lineTo(0.0, size.height);
|
|
path.lineTo(size.width, size.height);
|
|
path.lineTo(size.width, 0.0);
|
|
path.lineTo(0.0, 0.0);
|
|
path.close();
|
|
|
|
const double arrowWidth = 8.0;
|
|
final startPointX = (size.width - arrowWidth) / 2;
|
|
var startPointY = size.height / 2 - arrowWidth / 2;
|
|
path.moveTo(startPointX, startPointY);
|
|
path.lineTo(startPointX + arrowWidth / 2, startPointY - arrowWidth / 2);
|
|
path.lineTo(startPointX + arrowWidth, startPointY);
|
|
path.lineTo(startPointX + arrowWidth, startPointY + 1.0);
|
|
path.lineTo(startPointX + arrowWidth / 2, startPointY - arrowWidth / 2 + 1.0);
|
|
path.lineTo(startPointX, startPointY + 1.0);
|
|
path.close();
|
|
|
|
startPointY = size.height / 2 + arrowWidth / 2;
|
|
path.moveTo(startPointX + arrowWidth, startPointY);
|
|
path.lineTo(startPointX + arrowWidth / 2, startPointY + arrowWidth / 2);
|
|
path.lineTo(startPointX, startPointY);
|
|
path.lineTo(startPointX, startPointY - 1.0);
|
|
path.lineTo(startPointX + arrowWidth / 2, startPointY + arrowWidth / 2 - 1.0);
|
|
path.lineTo(startPointX + arrowWidth, startPointY - 1.0);
|
|
path.close();
|
|
|
|
return path;
|
|
}
|
|
|
|
@override
|
|
bool shouldReclip(covariant CustomClipper<Path> oldClipper) => false;
|
|
}
|