Обновить ListTile SearchBar во флетеPython

Программы на Python
Anonymous
Обновить ListTile SearchBar во флете

Сообщение Anonymous »

У меня есть список, элементы которого я хочу фильтровать в соответствии с тем, что пользователь вводит в строку поиска. Допустим, пользователь вводит «о» в строку поиска. В этом случае я хотел бы обновить 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

Вернуться в «Python»