showToast method

  1. @override
Future<bool?> showToast({
  1. required String msg,
  2. Duration toastDuration = const Duration(seconds: 1),
  3. DencendToastGravity? gravity,
  4. 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;
}