mobile_skt/lib/util/loading_util.dart

65 lines
1.9 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
import 'package:get/get.dart';
2024-03-19 08:59:08 +08:00
import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:sk_base_mobile/app_theme.dart';
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
2024-03-19 10:02:20 +08:00
class LoadingUtil extends GetxController {
static LoadingUtil get to => Get.find();
2024-03-19 10:02:20 +08:00
OverlayEntry? _loadingOverlay;
Future<LoadingUtil> init() async {
return this;
}
Future<void> show({String? status}) async {
return showLoading(status: status);
}
2024-03-19 10:02:20 +08:00
Future<void> dismiss() async {
return hideLoading();
}
2024-03-19 10:02:20 +08:00
showLoading({String? status}) async {
hideLoading();
_loadingOverlay = OverlayEntry(
2024-03-19 08:59:08 +08:00
builder: (BuildContext context) {
return WillPopScope(
2024-03-19 10:02:20 +08:00
onWillPop: () async => false,
child: Stack(
children: <Widget>[
ModalBarrier(dismissible: false, color: AppTheme.barrierColor),
Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
LoadingAnimationWidget.fourRotatingDots(
color: AppTheme.primaryColor,
size: ScreenAdaper.sp(50),
),
if (status != null)
SizedBox(width: ScreenAdaper.width(20)),
if (status != null)
Text(status,
style: TextStyle(
color: AppTheme.primaryColor,
fontSize: ScreenAdaper.sp(20)))
],
),
)
],
));
2024-03-19 08:59:08 +08:00
},
);
2024-03-19 10:02:20 +08:00
Overlay.of(Get.overlayContext!).insert(_loadingOverlay!);
}
2024-03-19 10:02:20 +08:00
hideLoading() {
_loadingOverlay?.remove();
_loadingOverlay = null;
}
}