Flutter中Google Places autocomplete选择后建议列表不消失的解决方法
Flutter Google Place Autocomplete选择地点后列表不消失的解决方案
核心问题分析
问题根源在于两点:一是直接修改ApplicationBloc的searchResultsCity变量但未触发状态更新通知,导致UI未重建;二是选择地点后未处理输入框焦点,可能引发后续逻辑干扰。
具体修复步骤
给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(); } }修改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(); },简化UI显示条件
因为Bloc中searchResultsCity初始化为空列表,可去掉null判断,直接判断列表是否非空:if (applicationBloc.searchResultsCity.isNotEmpty)
内容的提问来源于stack exchange,提问作者vishal117
相关产品推荐
相关产品推荐

