Tools class

工具类 提供一些常用的工具方法

  • generateRandomString: 生成指定长度的随机字符串
  • debounce: 防抖函数,在指定时间内多次调用只执行最后一次
  • throttle: 节流函数,在指定时间内多次调用只执行第一次
  • showModalDailog: 显示模态对话框,支持多层级管理和多种动画效果
  • closeModalDailog: 关闭指定的模态对话框

弹窗管理使用示例:

// 显示第一个弹窗(默认缩放动画)
await Tools.showModalDailog(
  context,
  MyDialog1(),
  dialogKey: 'dialog1',
);

// 使用相同的dialogKey打开多个弹窗(支持多实例)
await Tools.showModalDailog(
  context,
  MyDialog1(),
  dialogKey: 'dialog1', // 相同的key,会创建新的实例
);

// 显示第二个弹窗(滑动动画)
await Tools.showModalDailog(
  context,
  MyDialog2(),
  dialogKey: 'dialog2',
  animationType: DialogAnimationType.slide,
  transitionDuration: Duration(milliseconds: 300),
);

// 关闭指定dialogKey的最顶层弹窗(默认只关闭最后一个)
Tools.closeModalDailog(context, 'dialog1');

// 关闭指定dialogKey的所有弹窗
Tools.closeModalDailog(context, 'dialog1', closeAll: true);

// 检查弹窗是否存在
bool exists = Tools.isDialogActive('dialog1');

// 获取指定dialogKey的弹窗实例数量
int instanceCount = Tools.getDialogInstanceCount('dialog1');

// 获取当前活跃弹窗数量(不同dialogKey的数量)
int count = Tools.getActiveDialogCount();

// 关闭所有弹窗
Tools.closeAllDialogs();

// 关闭最顶层弹窗
Tools.closeTopDialog();

Constructors

Tools()

Properties

hashCode int
The hash code for this object.
no setterinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Properties

uiRootContext BuildContext?
getter/setter pair

Static Methods

atob(String base64Str) String
将Base64编码的字符串解码为原始字符串 base64Str Base64编码的字符串 @example
cancelDebounce(String key, {Duration duration = const Duration(milliseconds: 300)}) → void
取消指定key的防抖 key 防抖的唯一标识 duration 防抖时间(需要与创建时一致)
cancelThrottle(String key, {Duration duration = const Duration(milliseconds: 300)}) → void
取消指定 key 的节流窗口
closeAllDialogs({DialogReturnTypeEnum? returnType}) → void
关闭所有弹窗
closeAllFloating() → dynamic
closeDialogsAboveLevel(int level, {DialogReturnTypeEnum? returnType}) → void
关闭指定层级及以上的所有弹窗 level 层级深度
closeFloatingByKey(String key) → dynamic
closeModalDailog(BuildContext rootContext, String dialogKey, {DialogReturnTypeEnum? returnType, bool closeAll = false}) → void
关闭指定的模态对话框 rootContext 上下文 dialogKey 对话框的唯一key closeAll 是否关闭该dialogKey的所有弹窗,默认为false(只关闭最顶层的)
closePingDialog(BuildContext context, String dialogKey) → void
关闭Ping检测弹窗 context 上下文 dialogKey 弹窗的唯一标识 @example
closeTopDialog({DialogReturnTypeEnum? returnType}) → void
关闭最顶层的弹窗
createFloating({required String key, required Widget child, double? top, double? right, double? left, double? bottom, FloatingSlideType? slideType, FloatingAnimationType? animationType}) Floating
创建一个浮窗
debounce(Function func, {Duration duration = const Duration(milliseconds: 300)}) Function
防抖函数 callback 需要执行的函数 duration 防抖时间 防抖函数 func 需要防抖的函数 duration 防抖时间 @example
debounceWithKey(String key, Function func, {Duration duration = const Duration(milliseconds: 300)}) → void
generateRandomString(int len) String
生成16位随机字符串,只包含数字和大小写字母 @param len 要生成的字符串长度 @return 返回指定长度的随机字符串 @example
getActiveDialogCount() int
获取当前活跃的弹窗数量(所有dialogKey的数量)
getActiveDialogKeys() List<String>
获取所有活跃弹窗的key列表
getDialogInstanceCount(String dialogKey) int
获取指定dialogKey的弹窗实例数量 dialogKey 弹窗的唯一key
getDialogLevels(String dialogKey) List<int>?
获取指定弹窗的层级列表 dialogKey 弹窗的唯一key
getFloating(String key) Floating?
getTopDialogLevel(String dialogKey) int?
获取指定弹窗的最顶层层级 dialogKey 弹窗的唯一key
hideAllFloating() → dynamic
isDialogActive(String dialogKey) bool
检查指定弹窗是否存在 dialogKey 弹窗的唯一key
isPlatformAvailable(int platform) bool
判断当前平台是否可用 platform 平台类型 @return 是否可用
isValidURL(String url) bool
验证URL是否合法 url 需要验证的URL @example
openFloating(String key) → dynamic
ping(String host) Future<double>
Ping工具函数 host 要ping的主机地址(域名或IP) @return 返回ping的延迟时间,单位毫秒(ms) @example
retryAsync(Future<bool> callback(), {int retryTimes = 3, Duration interval = const Duration(seconds: 1)}) Future<bool>
每隔N秒重试调用异步函数 callback 需要执行的异步函数 retryTimes 重试次数 interval 重试间隔时间 @example
runAfterInit(Function callback) → void
确保在initState完成后执行函数 callback 需要执行的函数 @example
showAllFloating() → dynamic
showModalDailog<T>(BuildContext rootContext, Widget dialog, {bool barrierDismissible = true, bool useSafeArea = true, bool useRootNavigator = false, required String dialogKey, Duration transitionDuration = const Duration(milliseconds: 300), DialogAnimationType animationType = DialogAnimationType.scale, Color barrierColor = Colors.black54, bool isSlideDialog = false, SlideDialogDirection slideDirection = SlideDialogDirection.fromRight}) Future<T?>
显示模态对话框 rootContext 上下文 dialog 对话框 barrierDismissible 是否可以点击背景关闭 useSafeArea 是否使用安全区域 useRootNavigator 是否使用根导航器 transitionDuration 动画时长 animationType 动画类型 isSlideDialog 是否是滑动对话框(竖屏从底部滑入,横屏从侧边滑入) slideDirection 滑动方向(仅在横屏且isSlideDialog=true时生效) @return 返回对话框的唯一key
showPingDialog(BuildContext context, String dialogKey) Future<void>
显示Ping检测弹窗 context 上下文 dialogKey 弹窗的唯一标识 @example
showRightSlideDialog(BuildContext c, Widget page) Future
throttle(Function callback, {String? key, Duration duration = const Duration(milliseconds: 300)}) → void
unzip(List<int> compressedData) String
解压缩gzip数据 compressedData 压缩后的数据 @example