show<T> static method

Future<T?> show<T>({
  1. required BuildContext context,
  2. required Widget content,
  3. Widget? icon,
  4. Color? iconColor,
  5. EdgeInsetsGeometry? iconPadding,
  6. Widget? title,
  7. EdgeInsetsGeometry? titlePadding,
  8. TextStyle? titleTextStyle,
  9. EdgeInsetsGeometry? contentPadding,
  10. TextStyle? contentTextStyle,
  11. List<Widget>? actions,
  12. EdgeInsetsGeometry? actionsPadding,
  13. MainAxisAlignment? actionsAlignment,
  14. OverflowBarAlignment? actionsOverflowAlignment,
  15. VerticalDirection? actionsOverflowDirection,
  16. double? actionsOverflowButtonSpacing,
  17. EdgeInsetsGeometry? buttonPadding,
  18. Color? backgroundColor,
  19. double? elevation,
  20. Color? shadowColor,
  21. Color? surfaceTintColor,
  22. String? semanticLabel,
  23. EdgeInsets insetPadding = const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0),
  24. Clip clipBehavior = Clip.none,
  25. ShapeBorder? shape,
  26. AlignmentGeometry? alignment,
  27. bool scrollable = true,
  28. bool barrierDismissible = false,
  29. Color? barrierColor = Colors.black54,
  30. String? barrierLabel,
  31. bool useSafeArea = true,
  32. bool useRootNavigator = true,
  33. RouteSettings? routeSettings,
  34. Offset? anchorPoint,
  35. TraversalEdgeBehavior? traversalEdgeBehavior,
  36. double? width,
  37. double? height,
  38. Widget? cancel,
  39. Widget? confirm,
  40. bool? showConfirm = true,
  41. bool? showCancel = true,
  42. void onConfirm()?,
  43. void onCancel()?,
})

基础对话框

Implementation

static Future<T?> show<T>({
  /// 上下文
  required BuildContext context,

  /// 内容组件
  required Widget content,

  /// 图标组件
  Widget? icon,

  /// 图标颜色
  Color? iconColor,

  /// 图标内边距
  EdgeInsetsGeometry? iconPadding,

  /// 标题组件
  Widget? title,

  /// 标题内边距
  EdgeInsetsGeometry? titlePadding,

  /// 标题文本样式
  TextStyle? titleTextStyle,

  /// 内容内边距
  EdgeInsetsGeometry? contentPadding,

  /// 内容文本样式
  TextStyle? contentTextStyle,

  /// 操作按钮组
  List<Widget>? actions,

  /// 操作按钮内边距
  EdgeInsetsGeometry? actionsPadding,

  /// 操作按钮对齐方式
  MainAxisAlignment? actionsAlignment,

  /// 操作按钮溢出对齐方式
  OverflowBarAlignment? actionsOverflowAlignment,

  /// 操作按钮溢出方向
  VerticalDirection? actionsOverflowDirection,

  /// 操作按钮溢出间距
  double? actionsOverflowButtonSpacing,

  /// 按钮内边距
  EdgeInsetsGeometry? buttonPadding,

  /// 背景色
  Color? backgroundColor,

  /// 阴影高度
  double? elevation,

  /// 阴影颜色
  Color? shadowColor,

  /// 表面色调
  Color? surfaceTintColor,

  /// 语义标签
  String? semanticLabel,

  /// 对话框边距
  EdgeInsets insetPadding = const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0),

  /// 裁剪方式
  Clip clipBehavior = Clip.none,

  /// 形状
  ShapeBorder? shape,

  /// 对齐方式
  AlignmentGeometry? alignment,

  /// 是否可滚动
  bool scrollable = true,

  /// 点击遮罩是否关闭
  bool barrierDismissible = false,

  /// 遮罩颜色
  Color? barrierColor = Colors.black54,

  /// 遮罩标签
  String? barrierLabel,

  /// 是否使用安全区域
  bool useSafeArea = true,

  /// 是否使用根导航器
  bool useRootNavigator = true,

  /// 路由设置
  RouteSettings? routeSettings,

  /// 锚点位置
  Offset? anchorPoint,

  /// 遍历边缘行为
  TraversalEdgeBehavior? traversalEdgeBehavior,

  /// 宽度
  double? width,

  /// 高度
  double? height,

  /// 取消按钮
  Widget? cancel,

  /// 确认按钮
  Widget? confirm,

  /// 是否显示确认按钮
  bool? showConfirm = true,

  /// 是否显示取消按钮
  bool? showCancel = true,

  /// 确认回调
  void Function()? onConfirm,

  /// 取消回调
  void Function()? onCancel,
}) {
  ColorScheme colorScheme = Theme.of(context).colorScheme;
  return showAdaptiveDialog<T>(
    context: context,
    barrierDismissible: barrierDismissible,
    barrierColor: barrierColor,
    barrierLabel: barrierLabel,
    useSafeArea: useSafeArea,
    useRootNavigator: useRootNavigator,
    routeSettings: routeSettings,
    anchorPoint: anchorPoint,
    traversalEdgeBehavior: traversalEdgeBehavior,
    builder: (context) => AlertDialog.adaptive(
      icon: icon,
      iconPadding: iconPadding ?? const EdgeInsets.fromLTRB(14, 16, 14, 16),
      titlePadding: titlePadding ?? EdgeInsets.fromLTRB(14, icon == null ? 18 : 0, 14, 14),
      contentPadding: contentPadding ?? const EdgeInsets.fromLTRB(14, 0, 14, 0),
      actionsPadding: actionsPadding ?? const EdgeInsets.fromLTRB(14, 7, 14, 7),
      title: title ?? Text('hint'.tr()),
      content: SizedBox(
        width: width,
        height: height,
        child: content,
      ),
      actions: actions ??
          <Widget>[
            if (showCancel == true)
              cancel ??
                  (UtilInternal.isApple
                      ? CupertinoDialogAction(
                          onPressed: onCancel ?? () => RouterService.instance.pop(),
                          textStyle: TextStyle(color: colorScheme.outline),
                          child: Text('cancel'.tr()),
                        )
                      : TextButton(
                          style: ButtonStyle(
                            foregroundColor: WidgetStateProperty.all(colorScheme.outline),
                          ),
                          onPressed: onCancel ?? () => RouterService.instance.pop(),
                          child: Text('cancel'.tr()),
                        )),
            if (showConfirm == true)
              confirm ??
                  (UtilInternal.isApple
                      ? CupertinoDialogAction(
                          onPressed: onConfirm ?? () => RouterService.instance.pop(),
                          child: Text('confirm'.tr()),
                        )
                      : TextButton(
                          onPressed: onConfirm ?? () => RouterService.instance.pop(),
                          child: Text('confirm'.tr()),
                        )),
          ],
      iconColor: iconColor,
      titleTextStyle: titleTextStyle,
      contentTextStyle: contentTextStyle ?? Theme.of(context).textTheme.bodyMedium?.copyWith(fontSize: 16),
      actionsAlignment: actionsAlignment,
      actionsOverflowAlignment: actionsOverflowAlignment,
      actionsOverflowDirection: actionsOverflowDirection,
      actionsOverflowButtonSpacing: actionsOverflowButtonSpacing,
      buttonPadding: buttonPadding,
      backgroundColor: backgroundColor,
      elevation: elevation,
      shadowColor: shadowColor,
      surfaceTintColor: surfaceTintColor,
      semanticLabel: semanticLabel,
      insetPadding: insetPadding,
      clipBehavior: clipBehavior,
      shape: shape,
      alignment: alignment,
      scrollable: scrollable,
    ),
  );
}