Multiselect#
Multiselect is another kind of stateful selection widget.
It very similar to Radio
but remembers multiple selected items
Same as for Radio
you should pass two texts (for checked and unchecked items). Passed data is the same as for Select
import operator
from aiogram_dialog.widgets.kbd import Multiselect
from aiogram_dialog.widgets.text import Format
# let's assume this is our window data getter
async def get_data(**kwargs):
fruits = [
("Apple", '1'),
("Pear", '2'),
("Orange", '3'),
("Banana", '4'),
]
return {
"fruits": fruits,
"count": len(fruits),
}
fruits_kbd = Multiselect(
Format("✓ {item[0]}"), # E.g `✓ Apple`
Format("{item[0]}"),
id="m_fruits",
item_id_getter=operator.itemgetter(1),
items="fruits",
)
After few clicks it will look like:
Other useful options are:
min_selected
- limits minimal number of selected items ignoring clicks if this restriction is violated. It does not affect initial state.max_selected
- limits maximal number of selected itemson_state_changed
- callback function. Called when item changes selected state
To work with selection you can use this methods:
get_checked
- returns a list of ids of all selected itemsis_checked
- returns if certain id is currently selectedset_checked
- changes selection state of provided idreset_checked
- resets all checked items to unchecked state
Warning
Multiselect
widgets stores state of all checked items even if they disappear from window data.
It is very useful when you have pagination, but might be unexpected when data is really removed.