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

80 lines
2.2 KiB
Dart

// Author: fengshengxiong
// Date: 2024/6/2
// Description: 自定义RoundedRectSliderTrackShape
import 'package:flutter/material.dart';
class RoundRectSliderTrackShape extends SliderTrackShape {
final double trackHeight;
final double trackRadius;
const RoundRectSliderTrackShape({
this.trackHeight = 4.0,
this.trackRadius = 8.0,
});
@override
void paint(PaintingContext context, Offset offset,
{required RenderBox parentBox,
required SliderThemeData sliderTheme,
required Animation<double> enableAnimation,
required Offset thumbCenter,
Offset? secondaryOffset,
bool isEnabled = false,
bool isDiscrete = false,
required TextDirection textDirection}) {
if (sliderTheme.trackHeight == 0) return;
final Rect trackRect = getPreferredRect(
parentBox: parentBox,
offset: offset,
sliderTheme: sliderTheme,
isEnabled: isEnabled,
isDiscrete: isDiscrete,
);
final Paint leftTrackPaint = Paint()
..color = sliderTheme.activeTrackColor!
..style = PaintingStyle.fill;
final Paint rightTrackPaint = Paint()
..color = sliderTheme.inactiveTrackColor!
..style = PaintingStyle.fill;
final RRect leftTrackSegment = RRect.fromLTRBR(
trackRect.left,
trackRect.top,
thumbCenter.dx,
trackRect.bottom,
Radius.circular(trackRadius),
);
final RRect rightTrackSegment = RRect.fromLTRBR(
thumbCenter.dx,
trackRect.top,
trackRect.right,
trackRect.bottom,
Radius.circular(trackRadius),
);
context.canvas.drawRRect(leftTrackSegment, leftTrackPaint);
context.canvas.drawRRect(rightTrackSegment, rightTrackPaint);
}
@override
Rect getPreferredRect({
required RenderBox parentBox,
Offset offset = Offset.zero,
required SliderThemeData sliderTheme,
bool isEnabled = false,
bool isDiscrete = false,
}) {
final double trackHeight = this.trackHeight;
final double trackLeft = offset.dx;
final double trackTop =
offset.dy + (parentBox.size.height - trackHeight) / 2;
final double trackWidth = parentBox.size.width;
return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);
}
}