requestMultipleAndroidPermissions method Null safety

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

  • requestCode: The requestCode for your action. This is the requestCode you get, from ResultingPermission, when listening to results.

Implementation

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

previously requested: $_requestedPermissions

*********************************************************
  """);
    return;
  }

  List<String> ungrantedPermissions = [];

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

  _requestedPermissions = ungrantedPermissions.toSet();

  // 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);
  }
}