OK. You posted a stripped down-codeversion. Stripping-down the code is one of the hints given in the how to use this forum-thread. Though this code-version is stripped down a little bit too much. Some basic code in the function loop() should be still there.
About the compiler-error. Somehow when the IRAM_ATTR is used it is nescessary that the function that shall be called when an interrupt was invoked must be above the setup()-function. This means simply put the function handleInterrupt() above the setup()-function. If the function handleInterrupt() is above the compiler already knows there is a function handleInterrupt() if the compiler processes the codeline
attachInterrupt(digitalPinToInterrupt(FlashButtonPIN), handleInterrupt, FALLING);
From what you have coded in the function handleInterrupt() I conclude that you need a little bit more knowledge about how coding with interrupts works. (no serial output in the ISR)
I googled for tutorials about interrupts and did a quick cross-reading which tutorial seems to be easy to understand
From this quick cross-reading I decided to choose this one
It describes interrupts for Arduinos. On ESP8266-microprocessors it works very similar.
Add the IRAM_ATTR as shown above to the arduino-code.
The ESP8266 has an onboard LED too but it is GPIO-pin number 2
So you have to change the IO-number to 2
best regards Stefan