requestAllPermissions method

Future<PermissionStatus> requestAllPermissions()

Check and request all necessary permissions

Implementation

Future<PermissionStatus> requestAllPermissions() async {
  try {
    _logger.logInfo('Permissions', 'Starting permission request process...');

    final permissions = <Permission>[];

    // Location permissions
    if (Platform.isAndroid) {
      permissions.addAll([
        Permission.locationWhenInUse,
        Permission.locationAlways,
      ]);
    } else if (Platform.isIOS) {
      permissions.add(Permission.locationWhenInUse);
    }

    // Phone permission for carrier info (Android only)
    if (Platform.isAndroid) {
      permissions.add(Permission.phone);
    }

    // Request permissions
    final Map<Permission, PermissionStatus> statuses = await permissions
        .request();

    // Log permission results
    for (final entry in statuses.entries) {
      _logger.logInfo(
        'Permissions',
        '${entry.key.toString()}: ${entry.value.toString()}',
      );
    }

    // Check if location permission was granted
    final locationStatus = Platform.isAndroid
        ? statuses[Permission.locationWhenInUse] ?? PermissionStatus.denied
        : statuses[Permission.locationWhenInUse] ?? PermissionStatus.denied;

    if (locationStatus.isGranted) {
      _logger.logSuccess(
        'Permissions',
        'Essential permissions granted successfully',
      );
      return PermissionStatus.granted;
    } else if (locationStatus.isPermanentlyDenied) {
      _logger.logWarning(
        'Permissions',
        'Location permission permanently denied',
      );
      return PermissionStatus.permanentlyDenied;
    } else {
      _logger.logWarning('Permissions', 'Location permission denied');
      return PermissionStatus.denied;
    }
  } catch (error) {
    _logger.logError(
      'Permissions',
      'Permission request failed: ${error.toString()}',
    );
    return PermissionStatus.denied;
  }
}