import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; enum PermissionLevel { user, moderator, admin, custom, } extension on PermissionLevel { String toLocalizedString(BuildContext context) { switch (this) { case PermissionLevel.user: return L10n.of(context)!.user; case PermissionLevel.moderator: return L10n.of(context)!.moderator; case PermissionLevel.admin: return L10n.of(context)!.admin; case PermissionLevel.custom: default: return L10n.of(context)!.custom; } } } Future showPermissionChooser(BuildContext context, {int currentLevel = 0}) async { final permissionLevel = await showModalActionSheet( context: context, title: L10n.of(context)!.setPermissionsLevel, actions: PermissionLevel.values .map( (level) => SheetAction( key: level, label: level.toLocalizedString(context), ), ) .toList(), ); if (permissionLevel == null) return null; switch (permissionLevel) { case PermissionLevel.user: return 0; case PermissionLevel.moderator: return 50; case PermissionLevel.admin: return 100; case PermissionLevel.custom: final customLevel = await showTextInputDialog( context: context, title: L10n.of(context)!.setPermissionsLevel, textFields: [ DialogTextField( initialText: currentLevel.toString(), keyboardType: TextInputType.number, autocorrect: false, ) ], ); if (customLevel == null) return null; return int.tryParse(customLevel.first); } }