Aiogram 3x Python - InlineKeyboardBuilder

Всем доброго времени суток! Начинаю учить азы Aiogram. Сегодня сделал inline кнопки через билдер. По курсу который прохожу создаётся динамическая кнопка(и), разобрался с советами как создать и вывести каждый, но для этого я создаю хендлеров столько, сколько в множестве значений, а это мне так сказали плохо, да и сам понимаю что их может быть не 3, а 103

from aiogram.types import KeyboardButton, InlineKeyboardButton
from aiogram.utils.keyboard import ReplyKeyboardBuilder, InlineKeyboardBuilder

potatiki = ('Красные', 'Зеленые', 'Желтые')


def potato():
    keyboard = InlineKeyboardBuilder()
    for c, potat in enumerate(potatiki):
        keyboard.add(InlineKeyboardButton(text=potat, callback_data="potato_" + str(c)))
    return keyboard.adjust(3).as_markup(resize_keyboard=True)

Представим что potatiki это база данных, импорт из неё товаров каталога. Ниже мной написана функция с помощью которой создаётся кнопка... а да ладно, что я буду объяснять сами всё знаете. Суть вопроса как сделать для этой функции один хендлер. Буду благодарен если распишите полностью все импорты.

Мой хендлер на данный момент для вывода одного callback:

@router.callback_query(F.data == 'potato_0')
async def potato(callback: CallbackQuery):
    await callback.answer('')
    await callback.message.answer('Обработан potato1')

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

Автор решения: ZxNuClear

Немного меняем ваш генератор клавиатуры:

potatiki = ('Красные', 'Зеленые', 'Желтые')

def potato():
    kb = InlineKeyboardBuilder()
    for c, potat in enumerate(potatiki):
        kb.button(text=potat, callback_data="potato_" + str(c))
    return kb.adjust(3).as_markup(resize_keyboard=True)

далее, к примеру, на команду /start ее добавляем:

@router.message(Command('start'))
async def cmd_start(message: Message):
    await message.answer('Привет', reply_markup=potato())

ну и собственно сам хэндлер, который будет отлавливать все кнопки этой клавиатуры:

@router.callback_query(F.data.startswith('potato_'))
async def cmd_start(call: CallbackQuery):
    await call.message.edit_text(f'Был вызван callback {call.data}', reply_markup=potato())

ну и внутри него уже обрабатывайте как хотите, в зависимости от вашей задачи.

введите сюда описание изображения

→ Ссылка