У меня есть список, элементы которого я хочу фильтровать в соответствии с тем, что пользователь вводит в строку поиска. Допустим, пользователь вводит «о» в строку поиска. В этом случае я хотел бы обновить ListTile, чтобы отображались только фрукты, в именах которых есть подстрока «o». Мой код:
import flet as ft
fruits_list = ["apple", "banana", "orange", "grape", "strawberry", "watermelon", "kiwi", "pineapple", "mango", "pear"]
list_to_show = fruits_list
def main(page):
global list_to_show
def handle_change(e):
global list_to_show
list_to_show = [i for i in fruits_list if e.data in i]
anchor = ft.SearchBar(
view_elevation=4,
divider_color=ft.colors.BLUE,
bar_hint_text="Search for fruits...",
view_hint_text="Suggestions...",
on_change=handle_change,
controls=[
ft.ListTile(title=ft.Text(f"{i}"), data=i)
for i in list_to_show
],
)
page.add(
ft.Row([
anchor
],
alignment=ft.MainAxisAlignment.CENTER
)
)
ft.app(target=main, view=ft.AppView.WEB_BROWSER)
Что я получаю
Проблема в том, что ListTile показывает только первое значение list_to_show. Я попробовал следующее, но это не сработало:
def handle_change(e):
global list_to_show
list_to_show = [i for i in fruits_list if e.data in i]
anchor.controls.clear()
for item in list_to_show:
anchor.controls.append(ft.ListTile(title=ft.Text(f"{item}"), on_click=close_anchor, data=item))
anchor.update()
Подробнее здесь: https://stackoverflow.com/questions/782 ... le-in-flet