First, you should never do a loop in an interrupt handler.
Your program is in a loop.
When your interrupt handler is called, the state of the buttton is stored in the passed state variable.
You are looping on that variable, expecting it to change when the button state changes.
The state variable is not going to change. You need to rethink your logic. Each time the button’s state changes, the interrupt routine is called. On each call, you need to decide what to do with the led, do it, and then exit.
You have to run blinking code in a loop but not in the interrupt handler.Do it in separate thread or inside your main function.That loop should check global variable that will store button state.
Change that global variable accordingly in your button handler.