Анимация отдельного элемента CustomPaint во Flutter

я пытаюсь освоить анимации и CustomPaint

Как я могу анимировать какую то отдельную часть моего CustomPaint класса, например, улыбку смайлика

CustomPaint class

import 'package:flutter/material.dart';
import 'dart:math' as Math;

class SmileyPainter extends CustomPainter {
  var smilePaints;
  @override
  void paint(Canvas canvas, Size size) {
    final radius = Math.min(size.width, size.height) / 4;
    final center = Offset(size.width / 2, size.height / 2);
    // Body
    final paint = Paint()..color = Colors.yellow;
    canvas.drawCircle(center, radius, paint);
    // Mouth

    drawMouth() {
      final smilePaint = Paint()
        ..style = PaintingStyle.fill
        ..strokeWidth = 10;
      canvas.drawArc(Rect.fromCircle(center: center, radius: radius / 2), 0,
          Math.pi, false, smilePaint);
    }
    smilePaints = drawMouth();
    // Eyes
    canvas.drawCircle(
        Offset(center.dx - radius / 2, center.dy - radius / 2), 10, Paint());
    canvas.drawCircle(
        Offset(center.dx + radius / 2, center.dy - radius / 2), 10, Paint());
  }
  @override
  bool shouldRepaint(CustomPainter oldDelegate) => true;
}

main

import 'package:flutter/material.dart';
import 'smileWidget.dart';
import 'dart:math' as math;

void main() {
  runApp(SmileWidgetPage());
}

class SmileWidgetPage extends StatefulWidget {
  @override
  _SmileWidgetPageState createState() => _SmileWidgetPageState();
}

class _SmileWidgetPageState extends State<SmileWidgetPage>
    with TickerProviderStateMixin {
  Animation<double> animation;
  AnimationController controller;

  void initState() {
    super.initState();
    controller =
        AnimationController(vsync: this, duration: Duration(seconds: 1));
    Tween<double> rotationTween = Tween(begin: -math.pi, end: math.pi / 2);
    animation = rotationTween.animate(controller)
      ..addListener(() {
        setState(() {});
      });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: Text('Practice 4'),
            ),
            body: Container(
                color: Colors.grey,
                height: 800,
                width: 500,
                child: TweenAnimationBuilder(
                  duration: Duration(seconds: 2),
                  tween: Tween<double>(begin: 0, end: 2 * math.pi),
                  builder: (_, double angle, __) {
                    return Transform.rotate(
                        angle: angle,
                        child: CustomPaint(
                          painter: SmileyPainter(),
                        ));
                  },
                ))));
  }
}

Ответы (0 шт):