requestMultipleAndroidPermissions method

Future<void> requestMultipleAndroidPermissions(
  1. Set<String> permissions, [
  2. int requestCode = defaultRequestCode
])

Description

  • Use this function to request a Set of permissions.

  • If your app already has a certain permission, then access for it will not be asked again.

Parameters

Return

Implementation

Future<void> requestMultipleAndroidPermissions(
  Set<String> permissions, [
  int requestCode = defaultRequestCode,
]) async {
  if (isWaitingForResponse.value) return Future.error("""
Cannot request another permission, while still waiting for a
response from the user for the previously requested permissions.

previously requested:

$_requestedPermissions
""");

  List<String> ungrantedPermissions = [];

  for (final item in permissions) {
    if (!(await hasAndroidPermission(item))) ungrantedPermissions.add(item);
  }

  _requestedPermissions = ungrantedPermissions.toSet();
  _updateIsWaitingForResponseValue();

  // Remove duplicates
  ungrantedPermissions = _requestedPermissions.toList();

  // The permission [AndroidPermissions.systemAlertWindow] has
  // to be handled seperately.
  _shouldRequestPermissionSystemAlertWindow =
      ungrantedPermissions.remove(AndroidPermissions.systemAlertWindow);

  if (ungrantedPermissions.isNotEmpty) {
    await _channel.invokeMethod("requestPermissions", {
      "permissions": ungrantedPermissions,
      "requestCode": requestCode,
    });
    return;
  }

  // If [AndroidPermissions.systemAlertWindow] is the only
  // requested permission, then instantly request it.
  if (_shouldRequestPermissionSystemAlertWindow) {
    _shouldRequestPermissionSystemAlertWindow = false;
    await _requestPermissionSystemAlertWindow(requestCode);
  }
}