You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flet框架SearchBar的ListTile更新问题:搜索过滤列表显示异常

Flet SearchBar 过滤水果列表失效的解决办法

你的代码存在两个核心问题:

  • 初始代码中,SearchBar的建议列表是在初始化时一次性生成的,后续修改list_to_show不会触发UI更新
  • 第二次尝试的代码错误操作了anchor.controls,实际上Flet的SearchBar下拉建议是存放在anchor.view.controls里的,而且你没定义close_anchor函数,导致代码报错无法执行

以下是修正后的完整代码:

import flet as ft

fruits_list = ["apple", "banana", "orange", "grape", "strawberry", "watermelon", "kiwi", "pineapple", "mango", "pear"]

def main(page):
    def close_anchor(e):
        # 点击列表项后关闭搜索栏下拉视图
        anchor.close_view()

    def handle_change(e):
        # 根据输入内容过滤水果列表,添加大小写忽略让搜索更友好
        filtered_fruits = [fruit for fruit in fruits_list if e.data.lower() in fruit.lower()]
        # 清空并重新填充下拉建议列表
        anchor.view.controls.clear()
        for fruit in filtered_fruits:
            anchor.view.controls.append(ft.ListTile(title=ft.Text(fruit), data=fruit, on_click=close_anchor))
        # 更新搜索栏视图触发UI刷新
        anchor.update()

    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,
        # 初始化时用完整水果列表填充下拉建议
        view=ft.SearchBarView(
            controls=[
                ft.ListTile(title=ft.Text(fruit), data=fruit, on_click=close_anchor)
                for fruit in fruits_list
            ]
        )
    )

    page.add(
        ft.Row([anchor], alignment=ft.MainAxisAlignment.CENTER)
    )

ft.app(target=main, view=ft.AppView.WEB_BROWSER)

关键修改说明:

  1. 操作正确的控件容器:将原来的controls参数替换为view=ft.SearchBarView(controls=...),Flet的SearchBar下拉建议实际挂载在view属性下,之前直接操作anchor.controls不会生效
  2. 补全缺失的函数:实现close_anchor函数,处理列表项点击后的视图关闭逻辑,避免代码报错
  3. 移除冗余全局变量:直接基于原始fruits_list做过滤,不需要维护全局的list_to_show,代码更简洁
  4. 优化搜索体验:添加大小写忽略处理,让输入"O"也能匹配"orange"这类结果
  5. 正确触发UI更新:修改完建议列表后调用anchor.update(),确保视图实时刷新

内容的提问来源于stack exchange,提问作者PauLuke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:32:49