Files
2026-09-15 15:44:13 +07:00

122 lines
3.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:hgdj/assets_tool/app_colors.dart';
import 'package:hgdj/assets_tool/images.dart';
import 'package:hgdj/hj_utils/screen.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart';
int logicMultiCount = 0;
class LoadingWidget extends StatelessWidget {
final double? width;
final double? height;
final double size;
const LoadingWidget(
{super.key, this.width = 40, this.height = 20, this.size = 40});
@override
Widget build(BuildContext context) {
return LoadingAnimationWidget.horizontalRotatingDots(
color: Colors.white, size: size);
}
}
class LoadingCenterWidget extends StatelessWidget {
final double? width;
final double? height;
static int showCount = 0;
const LoadingCenterWidget({super.key, this.width = 40, this.height = 20});
static show() async {
showCount++;
await Get.dialog(const LoadingCenterWidget());
showCount--;
}
static cancel() {
if (showCount > 0) {
Get.back();
}
}
@override
Widget build(BuildContext context) {
return Center(
child: LoadingWidget(
width: width,
height: height,
),
);
}
}
class CErrorWidget extends StatefulWidget {
final String? errorMsg;
final String? errorMsg2;
final VoidCallback? retryOnTap;
const CErrorWidget(
{super.key, this.errorMsg = "什么也没有...", this.errorMsg2, this.retryOnTap});
@override
State<CErrorWidget> createState() => _CErrorWidgetState();
}
class _CErrorWidgetState extends State<CErrorWidget> {
bool _isRetrying = false;
Future<void> _handleRetry() async {
if (_isRetrying || widget.retryOnTap == null) return;
setState(() => _isRetrying = true);
try {
final result = (widget.retryOnTap as dynamic Function())();
if (result is Future) {
await result;
}
} finally {
if (mounted) setState(() => _isRetrying = false);
}
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (_, cons) {
if (cons.maxHeight < 146) return SizedBox.shrink();
if (_isRetrying) {
return const Center(child: LoadingWidget());
}
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Image.asset('ic_nodata.webp'.commonImgPath, height: 120),
4.sizeBoxH,
Text(
widget.errorMsg ?? '',
style: TextStyle(
color: Colors.white.withValues(alpha: 0.6), fontSize: 12),
),
if (widget.retryOnTap != null) ...[
4.sizeBoxH,
InkWell(
enableFeedback: false,
onTap: _handleRetry,
child: Container(
padding: const EdgeInsets.fromLTRB(12, 8, 12, 12),
child: Text(
"点击重试",
style: TextStyle(
color: AppColors.actionRed,
fontSize: 12,
),
),
),
),
]
],
),
);
});
}
}