Files

65 lines
1.7 KiB
Dart
Raw Permalink Normal View History

2026-07-14 11:11:36 +08:00
import 'package:flutter/material.dart';
import 'package:forui/forui.dart';
import '../theme/app_theme_scope.dart';
Future<T?> showAppRawDialog<T>(
BuildContext context, {
required WidgetBuilder builder,
BoxConstraints constraints = const BoxConstraints(
minWidth: 280,
maxWidth: 560,
),
bool useRootNavigator = false,
bool barrierDismissible = true,
}) {
return showFDialog<T>(
context: context,
useRootNavigator: useRootNavigator,
barrierDismissible: barrierDismissible,
builder: (dialogContext, _, animation) => AppThemeScope(
child: FDialog.raw(
animation: animation,
clipBehavior: Clip.antiAlias,
constraints: constraints,
builder: (_, _) => builder(dialogContext),
),
),
);
}
Future<bool> showAppConfirmDialog(
BuildContext context, {
required String title,
required Widget body,
required String confirmLabel,
String cancelLabel = '取消',
bool destructive = false,
}) async {
final confirmed = await showFDialog<bool>(
context: context,
builder: (ctx, _, animation) => AppThemeScope(
child: FDialog.adaptive(
animation: animation,
title: Text(title),
body: body,
actions: [
FButton(
onPress: () => Navigator.of(ctx).pop(true),
variant: destructive
? FButtonVariant.destructive
: FButtonVariant.primary,
child: Text(confirmLabel),
),
FButton(
onPress: () => Navigator.of(ctx).pop(false),
variant: FButtonVariant.outline,
child: Text(cancelLabel),
),
],
),
),
);
return confirmed == true;
}