Выход из состояния в FSM Aiogram

Проблема возникает в момент вызова другой функции с кнопки. Когда запускается определенное состояние, в котором бот воспроизводит меню, если пользователь нажмет на какую-либо другую копку на replay клавиатуре, то состояние завершится, но не выдаст новое действие которое запросил пользователь, что бы это действие сработало пользователь должен еще раз нажать на кнопку, которую он хочет активировать. Надеюсь проблема понятна. (В момент запущенного состояния, что бы пользователь смог открыть другое меню, его нужно вызвать два раза. 1 раз - завершает состояние, 2 раз - запускает новую функцию. Нужна идея фикса вот этой проблемы...)


poster = ['any url', 'any url', 'any url']
name = ['test1', 'test2', 'test3']

storage = MemoryStorage()
bot = Bot(TOKEN)
dp = Dispatcher(bot=bot,
                storage=storage)


class Test(StatesGroup):
    Q1 = State()


next_button = InlineKeyboardButton(text='next', callback_data='next')
back_button = InlineKeyboardButton(text='back', callback_data='back')

nbtn_callback = [next_button.callback_data, back_button.callback_data]

nbtn = InlineKeyboardMarkup(row_width=True)
nbtn_next = InlineKeyboardMarkup(row_width=True)
nbtn_next.add(next_button)
nbtn.row(back_button, next_button)

a = KeyboardButton('cancel')
b = KeyboardButton('Photo')

menu = ReplyKeyboardMarkup(resize_keyboard=True)
menu.row(a, b)


@dp.message_handler(commands=['start'])
async def start_bot(message: types.Message):
    txt = "Добро пожаловать!\n"
    await message.answer(txt, reply_markup=menu)
    await message.delete()


@dp.message_handler(text='Photo', state=None)
async def photo(message: types.Message):
    reply_markup = nbtn_next
    await Test.Q1.set()
    await bot.send_photo(
        message.chat.id,
        photo=poster[0],
        reply_markup=reply_markup,
        caption=name[0],
    )


@dp.message_handler(text='cancel', state=None)
async def cancel(message: types.Message):
    ph = "any url photo"
    await bot.send_photo(chat_id=message.chat.id,
                         photo=ph)


@dp.callback_query_handler(state=Test.Q1)
async def photo_update(callback: types.CallbackQuery, state: FSMContext):
    if callback.data == "next":
        i = await state.get_data()
        i = i.get("answer")

        if i is None:
            i = 1
        else:
            i += 1
        file_path = poster[i]
        await state.update_data(
            {"answer": poster.index(file_path)}
        )
        file = InputMedia(media=file_path, caption=name[i])
        await callback.message.edit_media(file, reply_markup=nbtn)


@dp.message_handler(content_types=types.ContentType.TEXT, state=Test.Q1)
async def stop_state(message: types.Message, state: FSMContext):
    await state.finish()

Ответы (2 шт):

Автор решения: Анатолий Соломонов

Попробуй использовать await state.clear() или await state.reset()

→ Ссылка
Автор решения: Trafalgar

Для выхода из состояния используйте

await state.clear()
→ Ссылка