lib/ui/aliplayer_shared_animation_widget.dart (39 lines of code) (raw):
// Copyright © 2025 Alibaba Cloud. All rights reserved.
//
// Author: keria
// Date: 2025/2/18
// Brief: 共享动画组件
import 'package:aliplayer_widget/manager/shared_animation_manager.dart';
import 'package:flutter/material.dart';
/// 共享动画组件
///
/// Abstract base class for creating widgets with shared animations.
abstract class AliPlayerSharedAnimationWidget extends StatefulWidget {
/// 共享动画控制器
final SharedAnimationManager animationManager;
/// 构造函数
const AliPlayerSharedAnimationWidget({
super.key,
required this.animationManager,
});
/// 子类需要实现的方法:构建主体内容
Widget buildContent(BuildContext context);
@override
State<AliPlayerSharedAnimationWidget> createState() =>
_AliPlayerSharedAnimationWidgetState();
}
class _AliPlayerSharedAnimationWidgetState
extends State<AliPlayerSharedAnimationWidget> {
@override
Widget build(BuildContext context) {
return _buildAnimatedContent(context);
}
/// 构建带有透明度动画的内容
///
/// Build content with optimized fade-in/fade-out animation.
Widget _buildAnimatedContent(BuildContext context) {
return AnimatedBuilder(
animation: widget.animationManager.opacityAnimation,
builder: (context, child) {
final opacity = widget.animationManager.opacityAnimation.value;
// 如果完全隐藏,则不构建子组件
if (opacity == 0.0) {
return const SizedBox.shrink();
}
// 使用 FadeTransition 实现渐隐渐显效果
return FadeTransition(
opacity: AlwaysStoppedAnimation(opacity), // 使用固定的透明度值
child: IgnorePointer(
ignoring: !widget.animationManager.isVisible,
child: child,
),
);
},
child: widget.buildContent(context),
);
}
}