问题描述
我有一个像下面的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 (将#修改为@)