showToast method
Future<bool?>
showToast({
- required String msg,
- Duration toastDuration = const Duration(seconds: 1),
- DencendToastGravity? gravity,
- ToastStyle? style,
override
显示Toast消息
实现平台接口的showToast方法,处理Web平台特定的参数转换
Implementation
@override
Future<bool?> showToast({
required String msg,
Duration toastDuration = const Duration(seconds: 1),
DencendToastGravity? gravity,
ToastStyle? style,
}) async {
// 设置默认值
String? gravityStr = "top";
String position = "center"; // 默认位置
// 将Duration转换为秒
final int durationSeconds = toastDuration.inSeconds;
// 将Flutter的枚举值转换为Toastify.js能理解的字符串
switch (gravity) {
case DencendToastGravity.top:
case DencendToastGravity.topLeft:
case DencendToastGravity.topRight:
gravityStr = "top"; // 顶部相关位置
break;
case DencendToastGravity.bottom:
case DencendToastGravity.bottomLeft:
case DencendToastGravity.bottomRight:
case DencendToastGravity.snackbar:
case DencendToastGravity.none:
gravityStr = "bottom"; // 底部相关位置和默认位置
break;
case DencendToastGravity.center:
case DencendToastGravity.centerLeft:
case DencendToastGravity.centerRight:
gravityStr = "center"; // 中心相关位置,后续通过CSS调整为垂直居中
break;
default:
gravityStr = "top"; // 处理null和其他情况
break;
}
// 设置水平位置,根据gravity设置正确的position值
if (gravity == DencendToastGravity.topLeft ||
gravity == DencendToastGravity.bottomLeft ||
gravity == DencendToastGravity.centerLeft) {
position = "left"; // 左侧
} else if (gravity == DencendToastGravity.topRight ||
gravity == DencendToastGravity.bottomRight ||
gravity == DencendToastGravity.centerRight) {
position = "right"; // 右侧
} else {
position = "center"; // 中间
}
final Map<String, dynamic> args = <String, dynamic>{
'msg': msg,
'gravity': gravityStr,
'position': position,
'webBgColor': style?.webBgColor ?? "linear-gradient(to right, #00b09b, #96c93d)",
'textcolor': style?.textColor?.toARGB32(),
'fontSize': style?.fontSize,
'toastDuration': durationSeconds,
'borderRadius': style?.borderRadius,
'iconAsset': style?.iconAsset,
'iconSize': style?.iconSize,
'iconColor': style?.iconColor?.toARGB32(),
'iconPosition': style?.iconPosition?.name,
'iconSpacing': style?.iconSpacing,
};
// 调用内部方法显示Toast
_showToast(args);
return true;
}