微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter:使用ScrollController绑定CustomPainter

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?