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

Flutter使用Places API做地址搜索时如何正确读取Future返回的结果

报错原因

  1. 你没有给FutureBuilder指定泛型,Dart无法识别snapshot.data的实际类型为List<Suggestion>,默认会把它当成Object?类型,而Object本身没有[]操作符,所以触发第二个报错。
  2. 空安全检查要求你确认snapshot.data不为null的前提下才能调用其方法/操作符,你最开始的写法没有做非空校验,所以触发第一个报错。

修复步骤

只需要修改addressSearch类里的buildSuggestions方法即可:

  1. 给FutureBuilder加上泛型约束FutureBuilder<List<Suggestion>>
  2. 因为你已经通过snapshot.hasData判断了返回数据非空,所以直接用!标记snapshot.data为非空即可。

修改后的代码如下:

@override
Widget buildSuggestions(BuildContext context) {
  print('counter value :');
  // 注意初始化PlaceApiProvider需要传入sessionToken,不要传类型参数
  PlaceApiProvider result = PlaceApiProvider(sessionToken);
  return FutureBuilder<List<Suggestion>>(
    future: query == "" ? null : result.fetchSuggestions(),
    builder: (context, snapshot) => query == ''
        ? Container(
            padding: EdgeInsets.all(16),
            child: Text("Gib deine Unternehmensadresse an"),
          )
        : snapshot.hasData
            ? ListView.builder(
                itemBuilder: (context, index) => ListTile(
                  title: Text(snapshot.data![index].description), 
                  onTap: () {
                    close(context, snapshot.data![index]);
                  },
                ),
                itemCount: snapshot.data!.length,
              )
            : Center(child: Text('lädt...')),
  );
}

额外优化建议

你当前的fetchSuggestions方法里写死了请求参数input=TEST,后续接入实际业务的时候记得替换成用户输入的query变量,同时补全API密钥配置即可正常使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:57:03