我使用的是 dart 代码 v3.86.0。
我正在尝试为颤动中的滑块制作自定义拇指,但收效甚微。我收到错误:我的自定义滑块实现不是“SliderComponentShape.paint”的有效覆盖 并让我生气,签名是正确的,但它确实有效。
这是我的完整代码:
class _CustomThumbShape extends SliderComponentShape {
@override
Size getPreferredSize(bool isEnabled, bool isDiscrete) {
return Size.fromRadius(18);
}
String _formatTime(double value) {
int hours = value.floor();
int minutes = ((value - hours) * 60).round();
return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}';
}
@override
void paint(
PaintingContext context,
Offset thumbCenter, {
required Animation<double> enableAnimation,
required Animation<double> valueAnimation,
required bool isDiscrete,
required TextPainter labelPainter,
required RenderBox parentBox,
required SliderThemeData sliderTheme,
required TextDirection textDirection,
required double value,
required double textScaleFactor,
required Size sizeWithOverflow,
}) {
final Canvas canvas = context.canvas;
final Paint paint = Paint()
..color = Colors.white
..style = PaintingStyle.fill;
canvas.drawCircle(thumbCenter, 18, paint); // Drawing at 'thumbCenter'
// TextSpan for displaying time based on the slider's value
TextSpan span = TextSpan(
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.bold,
color: Colors.black,
),
text: _formatTime(enableAnimation.value), // Displaying time dynamically
);
TextPainter tp = TextPainter(text: span, textAlign: TextAlign.center);
tp.layout();
Offset textCenter = Offset(
thumbCenter.dx - (tp.width / 2), thumbCenter.dy - (tp.height / 2));
tp.paint(canvas, textCenter);
}
}
这是完整的错误消息:
'_CustomThumbShape.paint' ('void Function(PaintingContext, Offset, {required Animation<double> enableAnimation, required bool isDiscrete, required TextPainter labelPainter, required RenderBox parentBox, required Size sizeWithOverflow, required SliderThemeData sliderTheme, required TextDirection textDirection, required double textScaleFactor, required double value, required Animation<double> valueAnimation})') isn't a valid override of 'SliderComponentShape.paint' ('void Function(PaintingContext, Offset, {required Animation<double> activationAnimation, required Animation<double> enableAnimation, required bool isDiscrete, required TextPainter labelPainter, required RenderBox parentBox, required Size sizeWithOverflow, required SliderThemeData sliderTheme, required TextDirection textDirection, required double textScaleFactor, required double value})').dartinvalid_override
任何帮助将不胜感激!
我尝试将签名修复为文档中的内容,但无济于事。错误仍然存在。
根据文档,您没有对 SliderComponentShape 类的绘制方法使用相同的签名
你可以尝试一下这个签名并告诉我它是否有效吗?
@override
void paint(PaintingContext context, Offset thumbCenter,
{required Animation<double> activationAnimation,
required Animation<double> enableAnimation,
required bool isDiscrete,
required TextPainter labelPainter,
required RenderBox parentBox,
required SliderThemeData sliderTheme,
required TextDirection textDirection,
required double value,
required double textScaleFactor,
required Size sizeWithOverflow}) {
final Canvas canvas = context.canvas;
final Paint paint = Paint()
..color = Colors.white
..style = PaintingStyle.fill;
canvas.drawCircle(thumbCenter, 18, paint); // Drawing at 'thumbCenter'
// TextSpan for displaying time based on the slider's value
TextSpan span = TextSpan(
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.bold,
color: Colors.black,
),
text: _formatTime(enableAnimation.value), // Displaying time dynamically
);
TextPainter tp = TextPainter(text: span, textAlign: TextAlign.center);
tp.layout();
Offset textCenter = Offset(
thumbCenter.dx - (tp.width / 2), thumbCenter.dy - (tp.height / 2));
tp.paint(canvas, textCenter);
}