ClipPath({Key? key, CustomClipper<Path>? clipper, Clip clipBehavior = Clip.antiAlias, Widget? child})
CustomClipper<Path>?
타입의 clipper프로퍼티 안에 도형을 어떻게 그려야할지를 정의한다.class MyCustopClipWidget extends StatelessWidget {
MyCustopClipWidget({Key? key, required this.size}) : super(key: key);
double size;
Widget build(BuildContext context) {
return ClipPath(
clipper: MyClipper(),
child: Container(
width: size, // 편의를 위해 가로 세로 모두 200으로 하겠다
height: size,
color: Colors.lightBlueAccent,
),
);
}
}
@override
되어야 된다.`Path` 타입을 리턴하는 `getClip`과 `bool`타입을 리턴하는 `shouldReclip`이다.
```dart
class MyClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
Path path = Path();
return path;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) {
return true; // 도형이 새로 그려질 수 있게 할 때만
}
}
```
기초는 거의 다 왔다. 이제 두 메서드를 살펴보면서 도형을 어떻게 그려야 하는지를 알아보자.
공식문서 - shouldReclip abstract method
CustomClipper
는 코드를 까보면 listenable을 상속하고 있다. true로 두면, listener를 붙이고 새로운 커스텀 클리퍼가 들어올 때 마다 도형을 다시 그려주게 할 수 있다. 핫리로드도 포함되기 때문에 도형을 새로 그리는 동작을 원치 않더라도 디버그 시에는 true로 해두자...
”를 쓰며 메서드를 이어나가며getClip(Size size) {
Path path = Path()
..moveTo(100, 50)
..close();
return path;
}
Path
getClip(Size size) {
Path path = Path()
..moveTo(100, 0)
..lineTo(0, 200)
..lineTo(200, 200)
..close();
return path;
}
Path
getClip(Size size) {
Path path = Path()
..lineTo(200, 200)
..lineTo(0, 200)
..lineTo(200, 0)
..close();
return path;
}
Path
자, 이제 원하는 위치로 포인터를 옮기고, 거기서 부터 기본적인 직선을 그어서 도형을 구성할 수 있다.
더 자세한 도형 그리기와 곡선 그리기를 다음 글에 이어서 정리해서 알아보자!