flutter - Flutter:将 CustomPainter 与 ScrollController 绑定
问题描述
我在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),
const Color(0xFF753A88),
]).createShader(rect);
canvas.drawArc(rect, pi, pi, false, backgroundPaint);
canvas.drawArc(rect, pi, value * pi, false, sliderPaint);
canvas.drawCircle(Offset(thumbPosX, thumbPosY), thumbRadius, thumbPaint);
}
@override
bool shouldRepaint(PlayerPainter oldDelegate) => true;
}
父.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,
),
════════ 基础库捕获的异常══════════════════════════════════════════ ═══════════════ _MusicScreenState 是一个 SingleTickerProviderStateMixin,但创建了多个代码。
解决方案
推荐阅读
- c++ - 特定情况的分段错误
- python - 指定 aws ECS/Fargate 容器依赖项无法部署
- google-analytics - 为什么 Uncaught SyntaxError: Unexpected token ','?
- java - Java中的类,对象,方法和再次询问循环的问题
- python - 找不到使用 selenium 按下的按钮
- c++ - 更有效地在微控制器上对 C++ 进行基准测试
- html - Flexbox 忽略父类
- python - 如何将安装在一台机器上的 Anaconda env 传输到服务器?
- r - R 中的老鼠 - 我如何理解这个命令的作用?
- javascript - 在Javascript中重建嵌套对象