import 'dart:math'; import 'package:flutter/material.dart'; class HexagonClipper extends CustomClipper { @override Path getClip(Size size) { final path = Path(); final height = size.height; final width = size.width; final centerX = width / 2; final centerY = height / 2; final radius = width / 2; const angle = 2 * pi / 10; // Angle between each side of the hexagon // Start at the top right vertex of the hexagon final startX = centerX + radius * cos(0); final startY = centerY + radius * sin(0); path.moveTo(startX, startY); // Draw the remaining sides of the hexagon for (int i = 1; i < 10; i++) { final x = centerX + radius * cos(angle * i); final y = centerY + radius * sin(angle * i); path.lineTo(x, y); } path.close(); return path; } @override bool shouldReclip(HexagonClipper oldClipper) => false; } class ArrowClipper extends CustomClipper { @override Path getClip(Size size) { final path = Path(); path.moveTo(0, size.height / 2); path.lineTo(size.width / 2, 0); path.lineTo(size.width, size.height / 2); path.lineTo(size.width / 2, size.height); path.close(); return path; } @override bool shouldReclip(ArrowClipper oldClipper) => false; }