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

Flutter使用Google Maps报ZERO_RESULTS及NoSuchMethodError错误咨询

问题根因

两个报错属于因果关联的连锁问题:

  1. 接口返回{geocoded_waypoints: [{}, {}], routes: [], status: ZERO_RESULTS}是Google Maps路线/地理编码接口的正常业务响应,代表当前请求传入的起终点地址/坐标无法生成可通行路线,接口未返回有效路线数据。
  2. Flutter抛出的NoSuchMethodError: The method '[]' was called on null属于代码逻辑漏洞:没有对接口返回状态做前置判断,也没有做空安全校验,直接在null对象上调用[]操作符读取字段(常见场景是直接读取空的routes数组的第一个元素,或者链式读取路线下的分段、折线字段时上游对象为null)。
修复方案
  • 先处理ZERO_RESULTS业务异常
    • 校验请求参数合法性:检查传入的经纬度是否写反顺序、地址文本是否存在拼写错误、点位是否落在无道路覆盖的区域(比如海域、管制禁区)、起终点是否跨了不支持通行的区域
    • 接口响应后第一时间校验status字段,只有status == 'OK'时才进入路线数据解析流程;遇到ZERO_RESULTS等非OK状态,直接给用户展示“所选位置无法规划路线,请调整后重试”的提示,终止后续解析逻辑
  • 补全全链路空安全校验
    • 禁止无判空的链式字段读取,比如不要直接写response['routes'][0]['legs'][0]这类代码,每一层取值前先判断对象是否为null、数组/列表是否非空,参考示例:
      // 假设directionsResult是接口返回的json解析后的Map
      if (directionsResult['status'] == 'OK') {
        final routes = directionsResult['routes'] as List?;
        if (routes != null && routes.isNotEmpty) {
          final firstRoute = routes.first as Map?;
          if (firstRoute != null) {
            // 在这里继续解析路线的折线、分段等信息,每一层都先判空再取值
          }
        }
      } else {
        // 处理错误场景,打印日志、提示用户
      }
      
  • 额外排查项:检查Google Maps API密钥对应的服务是否已在云控制台开通(比如路线规划、地理编码接口权限)、密钥的应用限制(包名、SHA1)是否配置正确、账号是否存在欠费,权限不足时也可能返回空响应触发同类报错。

内容的提问来源于stack exchange,提问作者Mazen Tarek Sliem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:39:16