【问题标题】:Flutter Clear Search Text Persists Search颤振清除搜索文本保持搜索
【发布时间】:2020-12-05 23:36:44
【问题描述】:

我有一个带有 _searchController 的文本字段和一个用于清除 _searchController 的单独 IconButton:

_placesList 是搜索结果。

我还有一个方法 _onSearchChanged,它是 _searchController 的侦听器:

如果搜索控制器不为空,_onSearchChanged 方法会调用另一个进行 API 调用的方法:

当按下取消图标按钮时,我发现(通过调试)在清除搜索控制器文本之前触发了搜索控制器侦听器,因此进行了 API 调用,然后实际清除了搜索控制器文本。

这会在屏幕上留下不需要的搜索结果列表。

第二次点击取消图标按钮会导致清除搜索结果的预期结果。但显然我不希望用户必须按两次取消图标按钮。

我希望取消图标按钮清除搜索文本和搜索结果。

【问题讨论】:

    标签: flutter google-maps search texteditingcontroller


    【解决方案1】:

    我相信您在这里缺少 setState。 只需像 tihs 一样将 _searchController.clear(); 包裹在其中:

    setState( () {_searchController.clear();} );
    

    否则颤振不会用新数据重建。 这是人们容易忘记的常见错误。

    【讨论】:

    • 谢谢,但我已经尝试过这种变体,但没有效果。当 clear() 被调用时,它似乎将侦听器函数放入堆栈中,然后清除文本,然后将另一个侦听器函数与清除的文本放入堆栈中。然后它运行堆栈。因此,在清除文本之前的函数最后运行。留下任何空搜索文本但结果列表的页面。
    • 我无法重现此问题。我认为与controller.text 相比,selectedEntry 也可能存在问题。它可能仍保留旧值,因此您不进入 if 分支。在调用 clear() 之前尝试将其设置为空字符串。
    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 2019-03-25
    • 2021-08-20
    • 1970-01-01
    • 2016-07-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多