hi-client/lib/app/widgets/kr_loading_animation.dart
2025-10-13 18:08:02 +08:00

88 lines
1.8 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'kr_simple_loading.dart';
/// 加载动画类型
enum KRLoadingType {
/// 波纹动画
kr_ripple,
/// 双波纹动画
kr_doubleBounce,
/// 波浪动画
kr_wave,
/// 脉冲动画
kr_pulse,
/// 旋转动画
kr_rotatingCircle,
/// 折叠动画
kr_foldingCube,
}
/// 自定义加载动画组件
class KRLoadingAnimation extends StatelessWidget {
/// 动画颜色
final Color? color;
/// 动画大小
final double? size;
/// 动画类型
final KRLoadingType type;
/// 构造函数
const KRLoadingAnimation({
Key? key,
this.color = Colors.blue,
this.size,
this.type = KRLoadingType.kr_ripple,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final defaultColor = color ?? Theme.of(context).primaryColor;
final defaultSize = size ?? 15.0;
return _kr_buildAnimation(defaultColor, defaultSize);
}
/// 构建动画
Widget _kr_buildAnimation(Color color, double size) {
switch (type) {
case KRLoadingType.kr_ripple:
return KRSimpleLoading(
color: color,
size: size,
);
case KRLoadingType.kr_doubleBounce:
return KRSimpleLoading(
color: color,
size: size,
);
case KRLoadingType.kr_wave:
return KRSimpleWave(
color: color,
size: size,
);
case KRLoadingType.kr_pulse:
return KRSimplePulse(
color: color,
size: size,
);
case KRLoadingType.kr_rotatingCircle:
return KRSimpleLoading(
color: color,
size: size,
);
case KRLoadingType.kr_foldingCube:
return KRSimpleLoading(
color: color,
size: size,
);
}
}
}