Arduino doesn't read IR remote while in while loop

#include <IRremote.h>
int IRpin=6;
IRrecv IR(IRpin);
decode_results cmd;
String myCom;
int red=11;
int green=10;
int blue=9;
int dt=100;

void setup(){

Serial.begin(74800);
pinMode(red,OUTPUT);
pinMode(green,OUTPUT);
pinMode(blue,OUTPUT);
IR.enableIRIn();
}

void loop() {
  // put your main code here, to run repeatedly:
while (IR.decode(&cmd)==0){
  
}
Serial.println(cmd.value,HEX);
IR.resume();
//off
if (cmd.value==0xFF6897){
  digitalWrite(red,LOW);
  digitalWrite(green,LOW);
  digitalWrite(blue,LOW);
}
//red
if (cmd.value==0xFF30CF){
  digitalWrite(red,HIGH);
  digitalWrite(green,LOW);
  digitalWrite(blue,LOW);
}
//green
if (cmd.value==0xFF18E7){
  digitalWrite(green,HIGH);
  digitalWrite(red,LOW);
  digitalWrite(blue,LOW);
}
//blue
if (cmd.value==0xFF10EF){
  digitalWrite(green,LOW);
  digitalWrite(red,LOW);
  digitalWrite(blue,HIGH);
  }







while (cmd.value==0xFF7A85){
  digitalWrite(green,LOW);
  digitalWrite(red,LOW);
  digitalWrite(blue,HIGH);
    delay(dt);
  digitalWrite(green,LOW);
  digitalWrite(red,HIGH);
  digitalWrite(blue,LOW);
    delay(dt);
  digitalWrite(green,HIGH);
  digitalWrite(red,LOW);
  digitalWrite(blue,LOW);
    delay(dt);
}
}

I can switch between each of the colors but when i hit the button to do the while loop, I cant switch out of it and the arduino doesnt look for IR signals. If i use an if statement, then it only loops once and It doesnt read buttons until the sequence is done. How do i fix

In your while-loop, cmd.value will never change.

And basically while-loops have no place in Arduino code; let loop() do the looping for you.

You need to remove the delay() calls. Use millis() instead, to time the sequence and read the buttons in a round robin multitasking way.

The way to get the blinking to repeat is to act on the last command if no new command arrives:

#include <IRremote.h>
int IRpin = 6;
IRrecv IR(IRpin);
decode_results cmd;
String myCom;
int red = 11;
int green = 10;
int blue = 9;
int dt = 100;


void setup()
{
  Serial.begin(74800);
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);
  IR.enableIRIn();
}


void loop()
{
  static unsigned long command = 0;


  if (IR.decode(&cmd))
  {
    // A new command has arrived
    command = cmd.value;


    Serial.println(command, HEX);
    
    // Start the receiver again
    IR.resume();
  }


  switch (command)
  {
    case 0xFF6897: // Off
      digitalWrite(red, LOW);
      digitalWrite(green, LOW);
      digitalWrite(blue, LOW);
      break;


    case 0xFF30CF: // Red
      digitalWrite(red, HIGH);
      digitalWrite(green, LOW);
      digitalWrite(blue, LOW);
      break;


    case 0xFF18E7: // Green
      digitalWrite(green, HIGH);
      digitalWrite(red, LOW);
      digitalWrite(blue, LOW);
      break;


    case 0xFF10EF: // Blue
      digitalWrite(green, LOW);
      digitalWrite(red, LOW);
      digitalWrite(blue, HIGH);
      break;


    case 0xFF7A85: // Sparkle
      digitalWrite(green, LOW);
      digitalWrite(red, LOW);
      digitalWrite(blue, HIGH);
      delay(dt);
      digitalWrite(green, LOW);
      digitalWrite(red, HIGH);
      digitalWrite(blue, LOW);
      delay(dt);
      digitalWrite(green, HIGH);
      digitalWrite(red, LOW);
      digitalWrite(blue, LOW);
      delay(dt);
      break;
  }
}