checkPermissions method

Future<PermissionsRequestResult> checkPermissions(
  1. List<PermissionData> permissions
)

Check permissions status.

Implementation

Future<PermissionsRequestResult> checkPermissions(
    List<PermissionData> permissions) async {
  final filteredPermissions =
      await filterByVersion(await filterByPlatform(permissions));

  final methodChannel = MethodChannelPermissionRequestPage.instance;
  final grantedPermissions = <PermissionData>[];
  final deferredPermissions = <PermissionData>[];
  final deniedPermissions = <PermissionData>[];
  PermissionType permissionType;
  Permission permissionObj;
  for (final p in filteredPermissions) {
    permissionType = p.permissionType;
    permissionObj = permissionType.toPermissionObj();

    if (permissionType == PermissionType.systemAlertWindow) {
      if (await methodChannel.canDrawOverlays()) {
        grantedPermissions.add(p);
      } else {
        if (p.isNecessary) {
          deniedPermissions.add(p);
        } else {
          deferredPermissions.add(p);
        }
      }
    } else {
      if (permissionType == PermissionType.locationAlways) {
        permissionObj = Permission.location;
      }

      if (await permissionObj.isGranted) {
        grantedPermissions.add(p);
      } else {
        if (p.isNecessary) {
          deniedPermissions.add(p);
        } else {
          deferredPermissions.add(p);
        }
      }
    }
  }

  return PermissionsRequestResult(
    grantedPermissions: grantedPermissions,
    deferredPermissions: deferredPermissions,
    deniedPermissions: deniedPermissions,
  );
}