ToneSnap_FSX_Flutter/lib/components/my_custom_indicator.dart
fengshengxiong 422a3f8802 first commit
2024-06-11 11:53:38 +08:00

60 lines
1.4 KiB
Dart

// Author: fengshengxiong
// Date: 2024/6/4
// Description: 自定义TabBar指示器
import 'package:flutter/material.dart';
class MyCustomIndicator extends Decoration {
final double indWidth;
final double indHeight;
final Color color;
final double radius;
const MyCustomIndicator({
this.indWidth = 16.0,
this.indHeight = 4.0,
this.color = Colors.white,
this.radius = 3.5,
});
@override
BoxPainter createBoxPainter([VoidCallback? onChanged]) {
return _CustomBoxPainter(
this, onChanged, indWidth, indHeight, color, radius);
}
}
class _CustomBoxPainter extends BoxPainter {
final MyCustomIndicator decoration;
final double indWidth;
final double indHeight;
final Color color;
final double radius;
_CustomBoxPainter(
this.decoration,
VoidCallback? onChanged,
this.indWidth,
this.indHeight,
this.color,
this.radius,
) : super(onChanged);
@override
void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) {
final size = configuration.size!;
final newOffset = Offset(
offset.dx + (size.width - indWidth) / 2,
size.height - indHeight,
);
final Rect rect = newOffset & Size(indWidth, indHeight);
final Paint paint = Paint();
paint.color = color;
paint.style = PaintingStyle.fill;
canvas.drawRRect(
RRect.fromRectAndRadius(rect, Radius.circular(radius)),
paint,
);
}
}