requestPermissions method

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

Request permissions.

Implementation

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

  final methodChannel = MethodChannelPermissionRequestPage.instance;
  PermissionType permissionType;
  Permission permissionObj;
  bool willOpenOverlayPermissionSettings = false;
  for (final p in filteredPermissions) {
    permissionType = p.permissionType;
    permissionObj = permissionType.toPermissionObj();

    if (Platform.isAndroid) {
      final androidInfo = await DeviceInfoPlugin().androidInfo;
      final androidSdk = androidInfo.version.sdkInt;

      if (permissionType == PermissionType.locationAlways) {
        // Android 11(API 수준 30) 이상일 때는 location 권한 먼저 요청한다.
        final isLocationPermissionGranted = androidSdk >= 30
            ? await Permission.location.request().isGranted
            : true;
        if (isLocationPermissionGranted) {
          await Permission.locationAlways.request();
        }
      } else if (permissionType == PermissionType.systemAlertWindow) {
        if (!await methodChannel.canDrawOverlays() && p.isNecessary) {
          willOpenOverlayPermissionSettings = true;
        }
      } else {
        await permissionObj.request();
      }
    } else {
      await permissionObj.request();
    }
  }

  // Overlay 권한 요청
  if (willOpenOverlayPermissionSettings) {
    await methodChannel.openOverlayPermissionSettings();
  }

  return checkPermissions(permissions);
}