AppInventor -> ESP32 BT parsing and converting data to int for servo write

Hello,
I am having some trouble making servos move with int values parsed from strings received via BT from an AppInventor app. The data is coming from three sliders, each triggering a separate event and preceded by identifiers, which I remove and convert the string to int. The values popping in Serial monitor make sense but the servos do not move. I am using an ESP32. I have tested the servos with constant values and they move, so the circuit definitely works. The app sends an identifier (F, H, or E) + the position of the thumb + \n. I have tested the app with buttons as opposed to sliders, and those make servos move (see the Lens section in the code below, that part works). So it seems the problem is with parsing the string for an int but I am not sure how to resolve it. Could you please let me know if you have any suggestions?
I am also attaching two screenshots: one for the App blocks that send the data and the other for the serial output.

#include "BluetoothSerial.h"
#include <ESP32_Servo.h>
#include "esp32-hal-ledc.h"
#include "Arduino.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;
Servo Base;
Servo Shoulder;
Servo Elbow;
Servo Lens;
String message = "";
char incomingChar;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("Arm");
  Base.attach(26);
  Shoulder.attach(25);
  Elbow.attach(33);
  Lens.attach(32);

void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    char incomingChar = SerialBT.read();
    if (incomingChar != '\n') {
      message += String(incomingChar);
    }
    else {
      message = "";
    }
    //arm navigation(doesn't work at all)*****************************************************
    if (message.startsWith("F")) {
      message.remove(0, 1);
      message.trim();
      Base.write(message.toInt());
    }
    if (message.startsWith("H")) {
      message.remove(0,1);
      message.trim();
      Shoulder.write(message.toInt());
    }
    if (message.startsWith("E")) {
      message.remove(0,1);
      message.trim();
      Elbow.write(message.toInt());
    }
    //lens navigation(works, kinda)****************************************************
    if (message == "LensX0") {
      Lens.write(0);
    }
    if (message == "LensX10") {
      Lens.write(45);
    }
    if (message == "LensX100") {
      Lens.write(90);
    }
  }
  delay(20);
}

You would do better to use the techniques given in the Serial Input Basics tutorial.

RESOLVED
The issue was that the IF statements looking for the identifiers F, E and H tried to process the string before the servo values could be concatenated to it. I moved the code for these servos into the else statement to execute as soon as \n comes in and before the string is cleared and it worked:

    if (incomingChar != '\n') {
      message += String(incomingChar);
    }
    else {
      if (message.startsWith("F")) {
        message.remove(0, 1);
        message.trim();
        Base.write(message.toInt());
      }
      if (message.startsWith("H")) {
        message.remove(0, 1);
        message.trim();
        Shoulder.write(message.toInt());
      }
      if (message.startsWith("E")) {
        message.remove(0, 1);
        message.trim();
        Elbow.write(message.toInt());
      }
      message = "";
    }