-
Notifications
You must be signed in to change notification settings - Fork 147
Description
版本信息
- flutter_smart_dialog版本:flutter_smart_dialog: ^4.9.4+5
描述bug/需求
网络请求封装loading和toast, 频繁出现loading关闭不了,toast显示不出来,如果在关闭loading之前显示toast就能显示出来
问题demo
Future<HttpResponseEntity?> request(
String url, {
String? method,
Map<String, dynamic>? params,
Object? data,
bool showLoading = true,
bool showToast = true,
CancelToken? cancelToken,
}) async {
try {
if (showLoading) YDToast.showLoading();
final response = await _dio.request(
url,
options: Options(method: method ?? 'GET'),
queryParameters: params,
data: data,
cancelToken: cancelToken,
);
if (showLoading) await YDToast.dismissLoading();
final code = response.data?.code;
if (code != 0 && !([401, 402].contains(code)) && showToast) {
YDToast.showToast(response.data?.msg ?? 'msg:null');
}
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:zhaopin/base/base_build_value.dart';
import 'package:zhaopin/base/base_stateless_widget.dart';
class YDToast {
static Future<T?> showLoading() {
return SmartDialog.showLoading(
maskColor: Colors.transparent,
usePenetrate: false,
clickMaskDismiss: false,
animationTime: const Duration(milliseconds: 200),
);
}
static Future dismissLoading() async {
return await SmartDialog.dismiss(status: SmartStatus.loading);
}
static Future showToast(
String msg, {
bool clickMaskDismiss = false,
}) {
return SmartDialog.showToast(
msg,
usePenetrate: false,
maskColor: Colors.transparent,
clickMaskDismiss: clickMaskDismiss,
alignment: Alignment.center,
animationTime: const Duration(milliseconds: 200),
displayTime: msg.length > 10
? const Duration(milliseconds: 2000)
: const Duration(milliseconds: 1000),
);
}
}
class YDLoadingWidget extends BaseStatelessWidget {
const YDLoadingWidget({super.key});
@OverRide
Widget ydBuild(BuildContext context, BaseBuildValue value) {
return SpinKitRing(
color: value.theme.brand_color_6,
size: 40,
lineWidth: 5,
);
}
}
class YDToastWidget extends StatelessWidget {
final String msg;
const YDToastWidget(this.msg, {super.key});
@OverRide
Widget build(BuildContext context) {
return Align(
alignment: Alignment.center,
child: Container(
constraints:
BoxConstraints(maxWidth: MediaQuery.of(context).size.width - 100),
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10),
decoration: BoxDecoration(
color: Colors.black87, borderRadius: BorderRadius.circular(5)),
child: Text(
msg,
style: const TextStyle(fontSize: 15, color: Colors.white),
),
),
);
}
}