如何解决Flutter:使用ScrollController绑定CustomPainter
我有一个像下面的CustomPainter
,我希望它与包含ListView.builder
的父窗口小部件绑定吗?
预期的行为:当我向上或向下滚动时,画家应该绘画。
import 'dart:math';
import 'package:Flutter/material.dart';
class PlayerPainter extends CustomPainter {
final Animation<double> animation;
final Paint backgroundPaint;
final Color bgColor;
final Color thumbColor;
final Paint sliderPaint;
final Paint thumbPaint;
PlayerPainter({this.animation,this.bgColor,this.thumbColor})
: backgroundPaint = Paint()..color = bgColor,sliderPaint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 3.0,thumbPaint = Paint()..color = thumbColor,super(repaint: animation);
@override
void paint(Canvas canvas,Size size) {
final value = animation.value;
final radius = size.width * 0.5;
final thumbRadius = 4.0;
final rect = Rect.fromCircle(center: Offset(radius,size.height),radius: radius);
final thumbPosX = radius + (radius * -cos(value * pi));
final thumbPosY = (size.height - thumbRadius) + ((size.height - thumbRadius) * -sin(value * pi));
sliderPaint.shader = LinearGradient(colors: [
const Color(0xFFCC2B5E),const Color(0xFF753A88),const Color(0xFFCC2B5E),]).createShader(rect);
canvas.drawArc(rect,pi,false,backgroundPaint);
canvas.drawArc(rect,value * pi,sliderPaint);
canvas.drawCircle(Offset(thumbPosX,thumbPosY),thumbRadius,thumbPaint);
}
@override
bool shouldRepaint(PlayerPainter oldDelegate) => true;
}
parent.dart
@override
void initState() {
_controller = AnimationController(vsync: this);
_scrollController.addListener(() {
setState(() {
_controller = AnimationController(
value: _scrollController.offset,duration: Duration(seconds: 0),vsync: this,);
});
});
}
PlayerView(
...
controller: _controller,),
════════基础库捕获到异常Exception ══════════════════ _MusicScreenState是SingleTickerProviderStateMixin,但是创建了多个代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。