tab_custom_gradient_indicator.dart 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. class TabCustomGradientIndicator extends Decoration {
  4. @override
  5. BoxPainter createBoxPainter([VoidCallback? onChanged]) {
  6. return _TabCustomGradientIndicatorPainter();
  7. }
  8. }
  9. class _TabCustomGradientIndicatorPainter extends BoxPainter {
  10. @override
  11. void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) {
  12. final double indicatorWidth = 16.0.w;
  13. final double indicatorHeight = 4.0.h;
  14. final double dx =
  15. offset.dx + (configuration.size!.width - indicatorWidth) / 2;
  16. final double dy =
  17. offset.dy + configuration.size!.height - indicatorHeight - 2;
  18. final Rect rect = Rect.fromLTWH(dx, dy, indicatorWidth, indicatorHeight);
  19. final RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(4));
  20. final Paint paint =
  21. Paint()
  22. ..shader = LinearGradient(
  23. begin: Alignment(0.04, 0.21),
  24. end: Alignment(0.98, 0.76),
  25. colors: [Color(0xFF7D46FC), Color(0xFFBC87FF)],
  26. ).createShader(rect);
  27. canvas.drawRRect(rRect, paint);
  28. }
  29. }