showDialog method

Future showDialog({
  1. BuildContext? context,
})

Displays the permanently denied dialog guiding the user to open app settings.

Implementation

Future<dynamic> showDialog({BuildContext? context}) {
  final ctx = context ?? coreKitInstance.navigatorKey.currentState?.context;
  if (ctx == null) {
    CkLogger.warning(
      'Cannot show permission dialog: no BuildContext available.',
      tag: 'Permission Handler',
    );
    return Future.value(null);
  }

  final errorColor = coreKitInstance.permissionHandlerColors.errorColor;
  final actionColor = coreKitInstance.permissionHandlerColors.actionColor;
  final normalColor = coreKitInstance.permissionHandlerColors.normalColor;
  final fontFamily = coreKitInstance.fontFamily;

  return material.showDialog(
    context: ctx,
    builder: (dialogCtx) => AlertDialog(
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
      title: Row(
        children: [
          Icon(Icons.warning_amber_rounded, color: errorColor),
          const SizedBox(width: 8),
          Text(
            coreKitInstance.permissionHelperConfig.permissionDenied,
            style: TextStyle(
              fontFamily: fontFamily,
              fontWeight: FontWeight.bold,
              color: errorColor,
              fontSize: 18,
            ),
          ),
        ],
      ),
      content: Column(
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          RichText(
            text: TextSpan(
              style: TextStyle(
                fontSize: 15,
                color: Colors.black87,
                fontFamily: fontFamily,
              ),
              children: [
                TextSpan(
                  text:
                      '❌ $name ${coreKitInstance.permissionHelperConfig.permissionIsPermanentlyDenied}\n\n',
                  style: TextStyle(
                    fontFamily: fontFamily,
                    color: errorColor,
                    fontWeight: FontWeight.w600,
                  ),
                ),
                TextSpan(
                  text:
                      '✅ ${coreKitInstance.permissionHelperConfig.toFixThisPleaseGoTo} ',
                  style: TextStyle(
                    fontFamily: fontFamily,
                    color: normalColor,
                  ),
                ),
                TextSpan(
                  text: coreKitInstance.permissionHelperConfig.openSettings,
                  style: TextStyle(
                    fontFamily: fontFamily,
                    color: actionColor,
                    decoration: TextDecoration.underline,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                TextSpan(
                  text:
                      ' ${coreKitInstance.permissionHelperConfig.andAllowThePermissionManually}',
                  style: TextStyle(
                    fontFamily: fontFamily,
                    color: normalColor,
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
      actions: [
        TextButton.icon(
          onPressed: () {
            openAppSettings();
            if (coreKitInstance.appbarConfig.getBack != null) {
              coreKitInstance.appbarConfig.getBack?.call();
            } else {
              Navigator.of(dialogCtx).pop();
            }
          },
          icon: Icon(Icons.settings, color: actionColor),
          label: Text(
            coreKitInstance.permissionHelperConfig.openSettings,
            style: TextStyle(
              fontFamily: fontFamily,
              color: actionColor,
              fontWeight: FontWeight.w600,
            ),
          ),
        ),
        TextButton(
          onPressed: () {
            if (coreKitInstance.appbarConfig.getBack != null) {
              coreKitInstance.appbarConfig.getBack?.call();
            } else {
              Navigator.of(dialogCtx).pop();
            }
          },
          child: Text(
            coreKitInstance.permissionHelperConfig.cancel,
            style: TextStyle(fontFamily: fontFamily, color: Colors.grey[700]),
          ),
        ),
      ],
    ),
  );
}