Flutter使用Places API做地址搜索时如何正确读取Future返回的结果
报错原因
- 你没有给
FutureBuilder指定泛型,Dart无法识别snapshot.data的实际类型为List<Suggestion>,默认会把它当成Object?类型,而Object本身没有[]操作符,所以触发第二个报错。 - 空安全检查要求你确认
snapshot.data不为null的前提下才能调用其方法/操作符,你最开始的写法没有做非空校验,所以触发第一个报错。
修复步骤
只需要修改addressSearch类里的buildSuggestions方法即可:
- 给
FutureBuilder加上泛型约束FutureBuilder<List<Suggestion>> - 因为你已经通过
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
相关产品推荐
相关产品推荐

