hi-client/lib/app/widgets/kr_toast.dart
speakeloudest f42a481452
Some checks failed
Build Android APK / 编译 libcore.aar (push) Has been cancelled
Build Android APK / 编译 Android APK (release) (push) Has been cancelled
Build Android APK / 创建 GitHub Release (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Android) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Windows) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (macOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Linux) (push) Has been cancelled
Build Multi-Platform / 构建 Android APK (push) Has been cancelled
Build Multi-Platform / 构建 Windows (push) Has been cancelled
Build Multi-Platform / 构建 macOS (push) Has been cancelled
Build Multi-Platform / 构建 Linux (push) Has been cancelled
Build Multi-Platform / 创建 Release (push) Has been cancelled
Build Windows / build (push) Has been cancelled
feat: 更新代码仓库全部修改
2025-10-30 04:47:53 -07:00

177 lines
4.3 KiB
Dart
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'dart:async';
import 'kr_simple_loading.dart';
/// 简单的Toast组件替代flutter_easyloading
class KRToast {
static OverlayEntry? _overlayEntry;
static Timer? _timer;
/// 显示Toast消息
static void kr_showToast(
String message, {
Duration duration = const Duration(milliseconds: 1500),
KRToastPosition position = KRToastPosition.center,
}) {
_hideToast(); // 隐藏之前的Toast
_overlayEntry = OverlayEntry(
builder: (context) => _ToastWidget(
message: message,
position: position,
),
);
Overlay.of(Get.overlayContext!).insert(_overlayEntry!);
_timer = Timer(duration, () {
_hideToast();
});
}
/// 显示加载动画
static void kr_showLoading({String? message}) {
_hideToast(); // 隐藏之前的Toast
_overlayEntry = OverlayEntry(
builder: (context) => _LoadingWidget(
message: message,
),
);
Overlay.of(Get.overlayContext!).insert(_overlayEntry!);
}
/// 隐藏Toast或Loading
static void kr_hideLoading() {
_hideToast();
}
/// 隐藏Toast
static void _hideToast() {
_timer?.cancel();
_timer = null;
_overlayEntry?.remove();
_overlayEntry = null;
}
}
/// Toast位置枚举
enum KRToastPosition {
top,
center,
bottom,
}
/// Toast组件
class _ToastWidget extends StatelessWidget {
final String message;
final KRToastPosition position;
const _ToastWidget({
required this.message,
required this.position,
});
@override
Widget build(BuildContext context) {
return Material(
color: Colors.transparent,
child: SafeArea(
child: Align(
alignment: _getAlignment(),
child: Container(
margin: const EdgeInsets.all(16.0),
padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 12.0),
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.8),
borderRadius: BorderRadius.circular(12.0),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
offset: const Offset(0, 2),
blurRadius: 8,
spreadRadius: 2,
)
],
),
child: Text(
message,
style: const TextStyle(
fontSize: 15.0,
color: const Color(0xFFADFF5B),
fontWeight: FontWeight.w500,
letterSpacing: 0.3,
),
),
),
),
),
);
}
Alignment _getAlignment() {
switch (position) {
case KRToastPosition.top:
return Alignment.topCenter;
case KRToastPosition.center:
return Alignment.center;
case KRToastPosition.bottom:
return Alignment.bottomCenter;
}
}
}
/// Loading组件
class _LoadingWidget extends StatelessWidget {
final String? message;
const _LoadingWidget({this.message});
@override
Widget build(BuildContext context) {
return Material(
color: Colors.black.withOpacity(0.2),
child: SafeArea(
child: Center(
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 25.0, vertical: 15.0),
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.8),
borderRadius: BorderRadius.circular(15.0),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
offset: const Offset(0, 2),
blurRadius: 8,
spreadRadius: 2,
)
],
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
KRSimpleLoading(
color: Colors.white,
size: 35.0,
),
if (message != null) ...[
const SizedBox(height: 12.0),
Text(
message!,
style: const TextStyle(
fontSize: 14.0,
color: Colors.white,
),
),
],
],
),
),
),
),
);
}
}