requestPermissions method
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);
}