fixed_size_tab_indicator.dart 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import 'package:flutter/cupertino.dart';
  2. class FixedSizeTabIndicator extends Decoration {
  3. final double width; // Fixed width
  4. final double height; // Indicator height
  5. final double radius; // Corner radius
  6. final Color color; // Indicator color
  7. const FixedSizeTabIndicator({
  8. required this.width,
  9. required this.height,
  10. required this.radius,
  11. required this.color,
  12. });
  13. @override
  14. BoxPainter createBoxPainter([VoidCallback? onChanged]) {
  15. return _CustomPainter(this, onChanged);
  16. }
  17. }
  18. class _CustomPainter extends BoxPainter {
  19. final FixedSizeTabIndicator decoration;
  20. _CustomPainter(this.decoration, VoidCallback? onChanged) : super(onChanged);
  21. @override
  22. void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) {
  23. final Paint paint = Paint();
  24. paint.color = decoration.color;
  25. paint.style = PaintingStyle.fill;
  26. final double xPos =
  27. offset.dx + (configuration.size!.width / 2) - (decoration.width / 2);
  28. final double yPos = configuration.size!.height - decoration.height;
  29. final Rect rect =
  30. Rect.fromLTWH(xPos, yPos, decoration.width, decoration.height);
  31. final RRect rRect = RRect.fromRectAndRadius(
  32. rect, Radius.circular(decoration.radius)); // Rounded corners
  33. canvas.drawRRect(rRect, paint);
  34. }
  35. }