Flutter集成谷歌地理编码API报错:URI未指定主机
问题解决方案
核心错误原因
报错提示No host specified in URI https:maps.googleapis.com/...,是因为API地址格式错误:https后缺少了//,导致URI无法识别主机地址。
具体修复步骤
1. 修正API URL格式
修改Assistants类中的apiUrl,补充https://的完整协议前缀,同时替换占位的API密钥:
class Assistants { static Future<String> searchAddressForGeographicCoOrdinates( Position position) async { String humanReadableAddress = ""; // 修复协议前缀,替换为你的实际API密钥 String apiUrl = "https://maps.googleapis.com/maps/api/geocode/json?latlng=${position.latitude},${position.longitude}&key=${mapKey}"; // 注意:确保map_key.dart中已定义const mapKey = "你的Google Geocoding API密钥"; var requestResponse = await RequestAssistant.receiveRequest(apiUrl); if (requestResponse != "Failed" && requestResponse["results"].isNotEmpty) { humanReadableAddress = requestResponse["results"][0]["formatted_address"]; } else { humanReadableAddress = "无法解析当前地址"; } return humanReadableAddress; } }
2. 修复类名与方法名拼写错误
你的请求助手类名写成了RequsstAssistant(多了一个s),方法名receiveRequet拼写错误,统一修正为:
import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; class RequestAssistant { static Future<dynamic> receiveRequest(String url) async { try { http.Response httpResponse = await http.get(Uri.parse(url)); if (httpResponse.statusCode == 200) { String responseData = httpResponse.body; var decodeResponseData = jsonDecode(responseData); return decodeResponseData; } else { return "Error"; } } catch (exp) { return "Failed"; } } }
3. 替换有效API密钥
确保你的Google Cloud账号已启用Geocoding API,并将map_key.dart中的占位符替换为实际可用的密钥,避免因权限问题导致请求失败。
额外优化建议
- 处理控制器空指针风险:在
locateUserPosition中增加非空判断if (newgoogleMapController != null) { newgoogleMapController!.animateCamera(CameraUpdate.newCameraPosition(cameraPosition)); } - 地址解析失败时给用户明确反馈,避免空字符串返回
内容的提问来源于stack exchange,提问作者Saharut
相关产品推荐
相关产品推荐

