141 lines
3.4 KiB
Dart
141 lines
3.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
import 'package:skywood/main/lib_file.dart';
|
|
// import 'package:lottie/lottie.dart';
|
|
|
|
// 加载数据的函数类型
|
|
typedef LoadBlock<T> = Future<T> Function();
|
|
|
|
// 弹出Toast提示的类
|
|
class AppToast {
|
|
static const String _defaultLoadingText = "";
|
|
static const String _loadingText = "loading...";
|
|
|
|
/// 显示普通 Toast 提示
|
|
static Future<void> showToast(
|
|
Object msg, {
|
|
Duration displayTime = const Duration(seconds: 2),
|
|
}) async {
|
|
await dismiss();
|
|
return SmartDialog.showToast(
|
|
msg.toString(),
|
|
alignment: Alignment.center,
|
|
debounce: true,
|
|
displayTime: displayTime,
|
|
);
|
|
}
|
|
|
|
static Future<void> showError(
|
|
Object msg, {
|
|
Duration displayTime = const Duration(seconds: 2),
|
|
}) {
|
|
return showFail(msg, displayTime: displayTime);
|
|
}
|
|
|
|
/// 显示失败提示
|
|
static Future<void> showFail(
|
|
Object msg, {
|
|
Duration displayTime = const Duration(seconds: 2),
|
|
Function()? onDismiss,
|
|
}) async {
|
|
await dismiss();
|
|
return SmartDialog.showNotify(
|
|
msg: msg.toString(),
|
|
alignment: Alignment.center,
|
|
notifyType: NotifyType.failure,
|
|
displayTime: displayTime,
|
|
debounce: true,
|
|
onDismiss: onDismiss,
|
|
);
|
|
}
|
|
|
|
/// 显示成功提示
|
|
static Future<T?> showSuccess<T>(
|
|
Object msg, {
|
|
Duration displayTime = const Duration(seconds: 2),
|
|
}) async {
|
|
await dismiss();
|
|
return SmartDialog.showNotify<T>(
|
|
msg: msg.toString(),
|
|
notifyType: NotifyType.success,
|
|
debounce: true,
|
|
displayTime: displayTime,
|
|
);
|
|
}
|
|
|
|
static Future<T?> showInfo<T>(
|
|
Object msg, {
|
|
Duration displayTime = const Duration(seconds: 2),
|
|
}) {
|
|
return showWarning<T>(msg, displayTime: displayTime);
|
|
}
|
|
|
|
static Future<T?> showWarning<T>(
|
|
Object msg, {
|
|
Duration displayTime = const Duration(seconds: 2),
|
|
}) async {
|
|
await dismiss();
|
|
return SmartDialog.showNotify<T>(
|
|
msg: msg.toString(),
|
|
notifyType: NotifyType.warning,
|
|
debounce: true,
|
|
displayTime: displayTime,
|
|
);
|
|
}
|
|
|
|
/// 显示 Lottie 加载提示
|
|
static Future<T?> showLottieLoading<T>({
|
|
Duration? displayTime,
|
|
}) async {
|
|
await dismiss();
|
|
return SmartDialog.showLoading<T>(
|
|
displayTime: displayTime ?? const Duration(seconds: 5),
|
|
maskColor: Colors.transparent,
|
|
builder: (_) {
|
|
return SizedBox(
|
|
width: 120,
|
|
height: 120,
|
|
child: Image.asset(ConstImg.loading, fit: BoxFit.fill),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
/// 显示加载提示
|
|
static Future<T?> showLoading<T>({
|
|
String text = _loadingText,
|
|
Duration displayTime = const Duration(seconds: 10),
|
|
}) async {
|
|
await dismiss();
|
|
return SmartDialog.showLoading<T>(msg: text, displayTime: displayTime);
|
|
}
|
|
|
|
/// 关闭特定状态的弹窗
|
|
static Future<void> dismiss<T>({SmartStatus status = SmartStatus.loading}) {
|
|
return SmartDialog.dismiss<T>(status: status);
|
|
}
|
|
|
|
/// 关闭所有弹窗(占位)
|
|
static void dismissAll() {
|
|
SmartDialog.dismiss();
|
|
}
|
|
|
|
/// 自动显示加载框并在完成后关闭
|
|
static Future<T> loading<T>(
|
|
LoadBlock<T> block, {
|
|
String? text,
|
|
bool isLoading = true,
|
|
}) async {
|
|
if (isLoading) {
|
|
showLoading(text: text ?? _defaultLoadingText);
|
|
}
|
|
|
|
try {
|
|
final result = await block();
|
|
return result;
|
|
} finally {
|
|
dismiss();
|
|
}
|
|
}
|
|
}
|