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

集成Google Maps与Places API问题:搜索选点后地图不居中且地址未更新

问题解决方案

核心问题

选中搜索建议时,仅更新了输入框文本和清空建议列表,未调用getPlaceDetails方法获取选中地点的坐标信息,也未更新地图位置和地址文本。

修复步骤

修改搜索建议列表项的onTap回调,添加获取地点ID并调用详情接口的逻辑:

ListTile(
  leading: Icon(Icons.location_on_outlined, color: AppColors.appbarColor),
  title: Text(
    _placeList[index]["description"],
    style: TextStyle(color: Colors.black),
  ),
  onTap: () async {
    // 获取选中地点的place_id
    String placeId = _placeList[index]["place_id"];
    // 调用详情接口获取坐标并更新地图、地址
    await getPlaceDetails(placeId);
    setState(() {
      _controller.text = _placeList[index]["description"];
      _placeList.clear();
    });
  },
),

额外优化建议

  1. 统一API Key:当前getSuggestion和getPlaceDetails使用了不同的API Key,建议定义一个全局常量统一管理,避免出错:
const String PLACES_API_KEY = "AIzaSyAGEtunBXnzTCQkBaUJI4mzBQpw3X_C_6c";
  1. SessionToken初始化优化:initState中可以直接初始化_sessionToken为uuid,避免后续判断空值:
@override
void initState() {
  super.initState();
  // ...其他初始化代码
  _sessionToken = uuid.v4();
  _controller.addListener(() {
    _onChanged();
  });
}
  1. 空安全检查:处理API返回数据时,建议添加空值判断,避免空指针异常,比如在getPlaceDetails中:
if (data['result'] != null && data['result']['geometry'] != null) {
  double lat = data['result']['geometry']['location']['lat'];
  double lng = data['result']['geometry']['location']['lng'];
  // ...后续逻辑
} else {
  // 处理数据异常情况
  ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("无法获取地点信息")));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:06:00