| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 
							- import 'package:flutter/material.dart';
 
- /// 由 [TweenAnimationBuilder] 改造的组件,区别在于这个会重复动画。
 
- class RepeatTweenAnimationBuilder<T extends Object?> extends ImplicitlyAnimatedWidget {
 
-   const RepeatTweenAnimationBuilder({
 
-     super.key,
 
-     required this.tween,
 
-     required super.duration,
 
-     super.curve,
 
-     required this.builder,
 
-     super.onEnd,
 
-     this.child,
 
-   });
 
-   final Tween<T> tween;
 
-   final ValueWidgetBuilder<T> builder;
 
-   final Widget? child;
 
-   @override
 
-   ImplicitlyAnimatedWidgetState<ImplicitlyAnimatedWidget> createState() {
 
-     return _TweenAnimationBuilderState<T>();
 
-   }
 
- }
 
- class _TweenAnimationBuilderState<T extends Object?> extends AnimatedWidgetBaseState<RepeatTweenAnimationBuilder<T>> {
 
-   Tween<T>? _currentTween;
 
-   @override
 
-   void initState() {
 
-     _currentTween = widget.tween;
 
-     _currentTween!.begin ??= _currentTween!.end;
 
-     super.initState();
 
-     if (_currentTween!.begin != _currentTween!.end) {
 
-       // 使用 repeat 来重复绘制动画。
 
-       controller.repeat(reverse: true);
 
-     }
 
-   }
 
-   @override
 
-   void forEachTween(TweenVisitor<dynamic> visitor) {
 
-     assert(
 
-       widget.tween.end != null,
 
-       'Tween provided to TweenAnimationBuilder must have non-null Tween.end value.',
 
-     );
 
-     _currentTween = visitor(_currentTween, widget.tween.end, (dynamic value) {
 
-       assert(false);
 
-       throw StateError('Constructor will never be called because null is never provided as current tween.');
 
-     }) as Tween<T>?;
 
-   }
 
-   @override
 
-   Widget build(BuildContext context) {
 
-     return widget.builder(context, _currentTween!.evaluate(animation), widget.child);
 
-   }
 
- }
 
 
  |