出现此错误,找不到原因,该应用程序显示了一个从Google Map Places api调用google map调用医院的地图,当在chrome中使用api调用返回正常,但是该应用程序无法构建并显示“ NoSuchMethodError:The getter'length'在null上被调用”错误。感谢您的帮助。
class Search extends StatelessWidget {
@override
Widget build(BuildContext context) {
final currentPosition = Provider.of<Position>(context);
final placesProvider = Provider.of<Future<List<Place>>>(context);
return FutureProvider(
create: (context) => placesProvider,
child: Scaffold(
body: (currentPosition != null)
? Consumer<List<Place>>(
builder: (_, places, __) {
return Column(
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height / 3,
width: MediaQuery.of(context).size.width,
child: GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(currentPosition.latitude,
currentPosition.longitude),
zoom: 16.0),
zoomGesturesEnabled: true,
mapToolbarEnabled: true,
myLocationEnabled: true,
scrollGesturesEnabled: true,
),
),
SizedBox(
height: 10.0,
),
Expanded(
child: ListView.builder(
itemCount: places.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
title: Text(places[index]?.name),
),
);
}),
)
],
);
},
)
: Center(
child: CircularProgressIndicator(),
),
),
);
}
}
在chrome中调用api请求时,效果很好,问题出在构建应用程序时。这是我的places_service.dart文件:
class PlacesService {
final key = 'xxxxxxxxxxxxxxxxxxxxx-ttttttttttttttttt';
Future<List<Place>> getPlaces(double lat, double lng) async {
var response = await http.get('https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=$lat,$lng&type=hospital&rankby=distance&key=$key');
var json = convert.jsonDecode(response.body);
var jsonResults = json['results'] as List;
return jsonResults.map((place) => Place.fromJson(place)).toList();
}
}
问题是这一行:
itemCount: places.length,
答案 0 :(得分:0)
谢谢! 我已经尝试过您的建议,并且收到“无数据”消息。但这就是重点,如果在Chrome上测试时API密钥和调用可以正常工作,为什么不获取任何数据,将其粘贴到浏览器中并查看json数据:
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=18.477831,-69.930029&type=hospital&rankby=distance&key=AIzaSyD-vLS7lrciD2Qzcy-0Q_hkKJy1GOR_DnE
问题是,为什么不能使用我的代码?
注意:一旦我克服了这个问题,随时可以更改API密钥。再次感谢!