Multiple scene tween - how to

I can’t get multiple scene tween to work. I am inexperienced in Flutter learning by doing is my motto.

I want to create a bouncing ball animation. When the ball reaches the floor it should momentarily bulge out and then bulge back in on it’s way up. I created this animation in javascript before, I’m trying to port this to flutter, which is very new to me.

I tried using a helper package simple animations. It has something called timeline tween allowing for multiple scenes. Below is my code so far. However, in the child of the builder, I don’t have access to the tweened value (AniProps.width). Transform.translate seems to have only the offset translatable. I read about creating your own transform and then something called Matrix4. So now I’m kinda lost. Before I go back to the theory: am I on the right track here or am I maybe over complicating things?

import 'package:flutter/material.dart';
import 'package:simple_animations/simple_animations.dart';
import 'package:supercharged/supercharged.dart';

enum AniProps { offsetY, width }

class Basketball extends StatelessWidget {
  var tween = createTween();

  @override
  Widget build(BuildContext context) {
    return MirrorAnimation<TimelineValue<AniProps>>(
      tween: tween,
      duration: tween.duration,
      builder: (context, child, value) {
        return Transform.translate(
          offset: Offset(0, value.get(AniProps.offsetY)),
          child: child,
        );
      },
      child: CustomPaint(
        painter: Ball(
          fillColor: Theme.of(context).primaryColor,
          width: value.get(AniProps.width) // <-- I can't access "value" here!
        ),
      ),
    );
  }
}

class Ball extends CustomPainter {
  Color fillColor;
  double width;
  final double ballSize = 80.0;

  Ball({this.fillColor, this.width});

  @override
  void paint(Canvas canvas, Size size) {
    var paintConfig = Paint()
      ..color = fillColor
      ..style = PaintingStyle.fill;
    // oval to be able to add bounce visual effect
    canvas.drawOval(
      Rect.fromPoints(Offset(0, 0), Offset(80, 80)),
      paintConfig,
    );
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) => true;
}

TimelineTween<AniProps> createTween() {
  return TimelineTween<AniProps>()
    ..addScene(begin: 0.seconds, duration: 1000.milliseconds, curve: Curves.easeInOutCubic)
        .animate(AniProps.offsetY, tween: (-20.0).tweenTo(150.0))
    ..addScene(begin: 800.milliseconds, duration: 200.milliseconds, curve: Curves.easeInOutCubic)
        .animate(AniProps.width, tween: (-10.0).tweenTo(10.0));
}