hi-client/lib/app/utils/kr_common_util.dart
2026-01-22 16:58:54 -08:00

74 lines
2.0 KiB
Dart
Executable File

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../widgets/kr_toast.dart';
import '../routes/app_pages.dart';
import '../widgets/dialogs/hi_dialog.dart';
class KRCommonUtil {
/// 是否正在打开客服(防重复点击)
static bool _kr_isOpeningCustomerService = false;
/// 预热客服(提前初始化控制器)
static void kr_warmUpCustomerService() {
// 统一使用内置 Chatwoot 页面,无需预热原生 SDK
}
/// 打开客服
static Future<void> kr_openCustomerService() async {
// 🔧 防重复点击
if (_kr_isOpeningCustomerService) {
return;
}
_kr_isOpeningCustomerService = true;
try {
await Get.toNamed(Routes.KR_CHATWOOT);
} catch (e) {
debugPrint('打开客服失败: $e');
HIDialog.show(title: '提示', message: '加载失败');
} finally {
Future.delayed(const Duration(seconds: 2), () {
_kr_isOpeningCustomerService = false;
});
}
}
/// 提示 meesage: 提示内容, toastPosition: 提示显示的位置, timeout: 显示时间(毫秒)
static kr_showToast(String message,
{KRToastPosition toastPosition = KRToastPosition.center,
int timeout = 2500}) {
KRToast.kr_showToast(
message,
position: toastPosition,
duration: Duration(milliseconds: timeout),
);
}
/// 显示加载动画
static kr_showLoading({String? message}) {
KRToast.kr_showLoading(message: message);
}
/// 隐藏加载动画
static kr_hideLoading() {
KRToast.kr_hideLoading();
}
/// 格式化字节数为可读字符串
/// [bytes] 字节数
static String kr_formatBytes(int bytes) {
if (bytes <= 0) return "0 B";
const List<String> suffixes = ["B", "KB", "MB", "GB", "TB"];
int i = 0;
double value = bytes.toDouble();
while (value >= 1024 && i < suffixes.length - 1) {
value /= 1024;
i++;
}
return "${value.toStringAsFixed(2)} ${suffixes[i]}";
}
}