requestInstallPermissions method

Future<bool> requestInstallPermissions({
  1. Future<bool> onPermissionDialogRequired()?,
})

Request necessary permissions for installing APKs on Android.

Returns true if permissions are granted, false otherwise. The onPermissionDialogRequired callback is called when the user needs to be informed about the permission request.

Implementation

Future<bool> requestInstallPermissions({
  Future<bool> Function()? onPermissionDialogRequired,
}) async {
  if (!Platform.isAndroid) return true;
  if (config.skipPermissionCheck) return true;

  final installPermission = await Permission.requestInstallPackages.status;
  config.log('Install packages permission status: $installPermission');

  if (!installPermission.isGranted) {
    config.log('Requesting install packages permission...');

    if (onPermissionDialogRequired != null) {
      final shouldRequest = await onPermissionDialogRequired();
      if (!shouldRequest) {
        config.log('User declined permission dialog');
        return false;
      }
    }

    final result = await Permission.requestInstallPackages.request();
    config.log('Install permission request result: $result');

    if (!result.isGranted) {
      return false;
    }
  }

  // Storage permission for saving APK
  final storageStatus = await Permission.storage.status;
  if (!storageStatus.isGranted) {
    final result = await Permission.storage.request();
    if (!result.isGranted) {
      if (await Permission.manageExternalStorage.isDenied) {
        await Permission.manageExternalStorage.request();
      }
    }
  }

  return true;
}