showActionSheet function

Future<void> showActionSheet({
  1. required BuildContext context,
  2. required List<ActionSheetItem> items,
})

Shows an action sheet.

Implementation

Future<void> showActionSheet({
  required BuildContext context,
  required List<ActionSheetItem> items,
}) {
  if (context.isIOS) {
    return showCupertinoModalPopup(
      context: context,
      builder: (context) => CupertinoTheme(
        data: CupertinoThemeData(
          brightness: Theme.of(context).brightness,
        ),
        child: CupertinoActionSheet(
          actions: items
              .map(
                (item) => CupertinoActionSheetAction(
                  onPressed: () {
                    if (item.onPressed == null) {
                      return;
                    }

                    Navigator.pop(context);

                    item.onPressed!();
                  },
                  isDestructiveAction: item.isDestructive,
                  child: Text(item.title),
                ),
              )
              .toList(),
          cancelButton: CupertinoActionSheetAction(
            onPressed: Navigator.of(context).pop,
            child: Text(PackageLocalizations.of(context).cancel),
          ),
        ),
      ),
    );
  }

  return showModalBottomSheet(
    context: context,
    useRootNavigator: true,
    builder: (context) {
      return Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          ...items.map(
            (item) => adaptive.ListTile(
              leading: item.icon != null ? Icon(item.icon) : null,
              title: Text(
                item.title,
                style: TextStyle(
                  color: item.isDestructive ? Colors.red : null,
                ),
              ),
              onTap: item.onPressed != null
                  ? () {
                      Navigator.pop(context);

                      item.onPressed!();
                    }
                  : null,
            ),
          ),
          const Divider(),
          adaptive.ListTile(
            leading: const Icon(Icons.cancel),
            title: Text(PackageLocalizations.of(context).cancel),
            onTap: Navigator.of(context).pop,
          ),
        ],
      );
    },
  );
}