废话不多说,直接上效果:
前提条件:需要引入fluent_ui框架
直接上代码:
import 'package:fluent_ui/fluent_ui.dart';
class LoadingDialog {
late bool barrierDismissible;
late Color barrierColor;
late double? dialogWidth;
late double? dialogHeight;
late bool isLoading;
late String? loadingStr;
factory LoadingDialog() => _instance;
static final LoadingDialog _instance = LoadingDialog._internal();
static LoadingDialog get instance => _instance;
LoadingDialog._internal() {
barrierDismissible = false;
barrierColor = Colors.transparent;
dialogWidth = 115;
dialogHeight = 48;
isLoading = false;
loadingStr = S.current.loading;
}
static Future<bool?> showLoading(BuildContext ctx,
{String? loadingStr}) async {
_instance.loadingStr = loadingStr ?? S.current.loading;
_instance.isLoading = true;
await showDialog<bool>(
barrierDismissible: _instance.barrierDismissible,
barrierColor: _instance.barrierColor,
context: ctx,
builder: (context) {
return ContentDialog(
constraints: BoxConstraints.expand(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
),
style: const ContentDialogThemeData(
bodyPadding: EdgeInsets.all(0),
padding: EdgeInsets.all(0),
titlePadding: EdgeInsets.all(0),
actionsPadding: EdgeInsets.all(0),
decoration: BoxDecoration(
color: Colors.transparent,
),
),
content: Align(
alignment: Alignment.topCenter,
child: Container(
constraints: BoxConstraints.expand(
width: _instance.dialogWidth ?? 115,
height: _instance.dialogHeight ?? 48),
margin: const EdgeInsets.only(top: 15),
decoration: BoxDecoration(
color: HLColors.cE3F0FF,
borderRadius: BorderRadius.circular(3),
),
child: Padding(
padding:
const EdgeInsets.symmetric(horizontal: 15, vertical: 13),
child: Row(
children: [
const SizedBox(
width: 16,
height: 16,
child: ProgressRing(strokeWidth: 2.0),
),
Padding(
padding: const EdgeInsets.only(left: 13),
child: Text(
_instance.loadingStr ?? "",
style: HLTextStyles.s14c000000,
),
),
],
),
),
),
),
);
},
);
_instance.isLoading = false;
return _instance.isLoading;
}
static dismiss() {
if (_instance.isLoading) {
HLRouter.pop();
}
}
}
使用:
展示:
LoadingDialog.showLoading(context,
loadingStr: S.current.connecting);
隐藏:
LoadingDialog.dismiss();