showToast method
void
showToast({
- required Widget child,
- PositionedDencendToastBuilder? positionedDencendToastBuilder,
- Duration toastDuration = const Duration(seconds: 2),
- DencendToastGravity? gravity,
- Duration fadeDuration = const Duration(milliseconds: 350),
- bool ignorePointer = false,
- bool isDismissible = false,
显示自定义Toast
参数说明:
child - 要显示的自定义Widget(必需)
positionedDencendToastBuilder - 自定义位置构建器
toastDuration - Toast显示持续时间,默认2秒
gravity - Toast显示位置
fadeDuration - 淡入淡出动画时间,默认350毫秒
ignorePointer - 是否忽略触摸事件
isDismissible - 是否可通过点击关闭
Implementation
void showToast({
required Widget child,
PositionedDencendToastBuilder? positionedDencendToastBuilder,
Duration toastDuration = const Duration(seconds: 2),
DencendToastGravity? gravity,
Duration fadeDuration = const Duration(milliseconds: 350),
bool ignorePointer = false,
bool isDismissible = false,
}) {
// 检查context是否有效
if (context == null) {
throw ("Error: Context is null, Please call init(context) before showing toast.");
}
// 创建带有动画功能的Widget
Widget newChild = _DencendToastStateFul(
child,
toastDuration,
fadeDuration,
ignorePointer,
!isDismissible
? null
: () {
removeCustomDencendToast();
},
);
// 检查键盘是否打开
// 如果键盘打开且Toast位置是底部,则改为居中显示
if (gravity == DencendToastGravity.bottom) {
if (MediaQuery
.of(context!)
.viewInsets
.bottom != 0) {
gravity = DencendToastGravity.center;
}
}
// 创建OverlayEntry
OverlayEntry newEntry = OverlayEntry(
builder: (context) {
// 如果提供了自定义构建器,使用它
if (positionedDencendToastBuilder != null) {
return positionedDencendToastBuilder(context, newChild, gravity);
}
// 否则使用默认的位置逻辑
return _getPositionWidgetBasedOnGravity(newChild, gravity);
},
);
// 添加到队列
_overlayQueue.add(
_DencendToastEntry(
entry: newEntry,
duration: toastDuration,
fadeDuration: fadeDuration,
),
);
// 如果当前没有正在显示的Toast,立即开始显示
if (_timer == null) {
_showOverlay();
}
}