88 lines
1.8 KiB
Dart
Executable File
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,
|
|
);
|
|
}
|
|
}
|
|
} |