import 'package:chat/utils/CustomUI.dart'; import 'package:flutter/material.dart'; class VideoAnim extends StatefulWidget { final double begin; final int maxTime; final double end; final double start; VideoAnim({ this.begin, this.maxTime = 550, this.end, this.start = 0, }); @override _VideoAnimState createState() => _VideoAnimState(); } class _VideoAnimState extends State with SingleTickerProviderStateMixin { Animation _animation; AnimationController _controller; @override void initState() { super.initState(); // 启动动画controller _controller = new AnimationController( duration: Duration(milliseconds: widget.maxTime), vsync: this); _controller.addStatusListener((AnimationStatus status) { if (status == AnimationStatus.completed) { _controller.reverse(); } else if (status == AnimationStatus.dismissed) { _controller.forward(); } }); _animation = new Tween(begin: widget.begin, end: widget.end) .animate(_controller) ..addListener(() { setState(() {}); }); _controller.forward(from: widget.start); } @override void dispose() { _controller.stop(); _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return CustomUI.buildAudioContaniner(_animation.value); } }