actionSheet<T> static method
Implementation
static Future<T?> actionSheet<T>({
required List<UNavAction<T>> actions,
String? title,
String? message,
bool showCancel = true,
String? cancelText,
bool barrierDismissible = true,
}) {
final BuildContext ctx = navigatorKey.currentContext!;
if (UApp.isIos) {
return showCupertinoModalPopup<T>(
context: ctx,
barrierDismissible: barrierDismissible,
builder: (BuildContext context) => CupertinoActionSheet(
title: title != null ? Text(title) : null,
message: message != null ? Text(message) : null,
actions: actions
.map(
(UNavAction<T> action) => CupertinoActionSheetAction(
isDestructiveAction: action.isDestructive,
onPressed: action.enabled ? () => back<T>(action.value) : () {},
child: Text(action.label),
),
)
.toList(),
cancelButton: showCancel
? CupertinoActionSheetAction(
onPressed: back,
child: Text(cancelText ?? U.s.cancel),
)
: null,
),
);
}
return showModalBottomSheet<T>(
context: ctx,
isDismissible: barrierDismissible,
showDragHandle: true,
builder: (BuildContext context) => SafeArea(
child: UColumn(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
if (title != null) UTextTitleMedium(title, textAlign: TextAlign.center).pOnly(bottom: 4),
if (message != null) UTextBodySmall(message, textAlign: TextAlign.center).pOnly(bottom: 8),
...actions.map(
(UNavAction<T> action) => ListTile(
enabled: action.enabled,
leading: action.icon != null ? Icon(action.icon, color: action.isDestructive ? Theme.of(context).colorScheme.error : null) : null,
title: UTextBodyLarge(
action.label,
color: action.isDestructive ? Theme.of(context).colorScheme.error : null,
),
onTap: () => back<T>(action.value),
),
),
if (showCancel)
ListTile(
title: UTextBodyLarge(cancelText ?? U.s.cancel, textAlign: TextAlign.center),
onTap: back,
),
],
),
),
);
}