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

Flutter中Google Places autocomplete选择后建议列表不消失的解决方法

Flutter Google Place Autocomplete选择地点后列表不消失的解决方案

核心问题分析

问题根源在于两点:一是直接修改ApplicationBloc的searchResultsCity变量但未触发状态更新通知,导致UI未重建;二是选择地点后未处理输入框焦点,可能引发后续逻辑干扰。

具体修复步骤

  1. 给Bloc添加状态更新逻辑
    你的ApplicationBloc应该继承自ChangeNotifier,修改列表后必须调用notifyListeners()才能通知Provider刷新UI。在Bloc类中新增清空搜索结果的方法:

    class ApplicationBloc extends ChangeNotifier {
      // 初始化时设为空列表,避免null判断
      List<Place> searchResultsCity = [];
    
      // 新增方法:清空城市搜索结果并通知UI
      void clearCitySearchResults() {
        searchResultsCity = [];
        notifyListeners();
      }
    
      // 确保现有搜索方法赋值后也触发通知
      void searchPlacesCity(String query) {
        // 原有搜索逻辑...
        searchResultsCity = 获取到的搜索结果列表;
        notifyListeners();
      }
    }
    
  2. 修改ListTile的onTap逻辑
    替换直接赋值searchResultsCity的代码,改用Bloc的方法清空结果,同时让输入框失去焦点:

    onTap: () async {
      List<Location> locations = await locationFromAddress(
        applicationBloc.searchResultsCity![index].description.toString(),
      );
      final cityTapped = applicationBloc.searchResultsCity![index].description.toString();
    
      setState(() {
        citySearch.text = cityTapped;
      });
      // 调用Bloc方法清空结果并触发UI更新
      applicationBloc.clearCitySearchResults();
      // 让输入框失去焦点,隐藏键盘同时避免误操作
      cityFocus.unfocus();
    },
    
  3. 简化UI显示条件
    因为Bloc中searchResultsCity初始化为空列表,可去掉null判断,直接判断列表是否非空:

    if (applicationBloc.searchResultsCity.isNotEmpty)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:45:06