requestNotificationPermission function
Future<void>
requestNotificationPermission(
- BuildContext context, {
- bool force = false,
- String? title,
- String? description,
- String? enableButtonLabel,
- String? notNowButtonLabel,
- WidgetBuilder? bodyBuilder,
Shows a pre-permission explainer, then requests system permission and registers the FCM token when the user accepts.
Skips the prompt when force is false and the user was already asked.
Resolves overlay context from context or voNavigatorKey when needed.
Implementation
Future<void> requestNotificationPermission(
BuildContext context, {
bool force = false,
String? title,
String? description,
String? enableButtonLabel,
String? notNowButtonLabel,
WidgetBuilder? bodyBuilder,
NotificationPermissionFooterBuilder? footerBuilder,
}) async {
if (!VoFirebaseClient.isInitialized) return;
final controller = context.voControllers.notification;
if (!force) {
final alreadyAsked = await controller.hasAskedPermission();
if (alreadyAsked) {
await controller.syncTokenIfAuthorized();
return;
}
}
final overlayContext = _resolveOverlayContext(null);
if (overlayContext == null || !overlayContext.mounted) return;
final accepted = await _showPermissionDialog(overlayContext,
title: title,
description: description,
enableButtonLabel: enableButtonLabel,
notNowButtonLabel: notNowButtonLabel,
bodyBuilder: bodyBuilder,
footerBuilder: footerBuilder,
);
await controller.markPermissionAsked();
if (!accepted) {
controller.onPermissionDeclined();
return;
}
await controller.requestAndRegister();
}