|
-
- import 'package:flutter/material.dart';
-
- class ImgFrameAnimation extends StatefulWidget {
- final List<Widget> imgList;
- final int interval;
- final bool isRepeat;
-
- ImgFrameAnimation(
- {this.imgList,
- this.interval = 200,
- this.isRepeat = true,
- });
-
- @override
- _ImgFrameAnimationState createState() => _ImgFrameAnimationState();
- }
-
- class _ImgFrameAnimationState extends State<ImgFrameAnimation>
- with SingleTickerProviderStateMixin {
- Animation<double> _animation;
- AnimationController _controller;
- int interval = 1000;
-
- @override
- void initState() {
- super.initState();
-
- interval = widget.interval;
-
- final int itemCount = widget.imgList.length;
- final int maxTime = interval * itemCount;
-
-
- // 启动动画controller
- _controller = new AnimationController(
- duration: Duration(milliseconds: maxTime), vsync: this);
- _controller.addStatusListener((AnimationStatus status) {
- if (status == AnimationStatus.completed) {
- _controller.forward(from: 0.0); // 完成后重新开始
- }
- });
-
- _animation = new Tween<double>(begin: 0, end: itemCount.toDouble())
- .animate(_controller)
- ..addListener(() {
- setState(() {});
- });
-
- _controller.forward();
- }
-
- @override
- void dispose() {
- _controller.stop();
- _controller.dispose();
- print('frame animation dipos');
- super.dispose();
-
- }
-
- @override
- Widget build(BuildContext context) {
- int index = _animation.value.floor() % widget.imgList.length;
-
- return IndexedStack(
- alignment: Alignment.centerRight,
- children: widget.imgList,
- index: index,
- );
- }
- }
|