我正在尝试在Google地图中设置标记。我从Firestore获取数据,但地图上未显示任何标记,我使用了两种不同的地图:一种是,用户可以设置一个保存在Firestore中的位置,另一种地图应使用用户位置来检索标记。
这是详细消息:
[[VERBOSE-2:ui_dart_state.cc(157)]未处理的异常:'package:google_maps_flutter_platform_interface / src / types / location.dart':失败的断言:第19行pos 16:'latitude!= null':不正确。
有人知道我的代码中缺少什么吗?
谢谢
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
Map<MarkerId, Marker> _markers = <MarkerId, Marker>{};
Firestore firestore = Firestore.instance;
Geoflutterfire geo = Geoflutterfire();
LatLng _initialPosition = LatLng(60.508977, 14.950167);
GoogleMapController mapController;
void onMapCreated(GoogleMapController controller) async {
setState(() {
Location _location = Location();
mapController = controller;
_location.onLocationChanged.listen((l) {
mapController.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(target: LatLng(l.latitude, l.longitude), zoom: 16.0),
),
);
});
});
}
initMarker(request, requestId) {
var p = request['position'];
var markerIdVal = requestId;
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position:
LatLng(p['latitude'], p['longitude ']),
infoWindow: InfoWindow(
title: 'name',
));
setState(() {
_markers[markerId] = marker;
});
}
_populateMarks(){
Firestore.instance.collection('users').getDocuments().then((docs){
if(docs.documents.isNotEmpty){
for(int i = 0; i < docs.documents.length; ++i){
initMarker(docs.documents[i].data, docs.documents[i].documentID);
}
}
});
}
CameraPosition _initialCamera = CameraPosition(
target: LatLng(59.334591, 18.063240),
zoom: 10.0000,
);
@override
void initState() {
_populateMarks();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
GoogleMap(
markers: Set<Marker>.of(_markers.values),
myLocationEnabled: true,
onMapCreated: onMapCreated,
mapType: MapType.terrain,
myLocationButtonEnabled: true,
initialCameraPosition: _initialCamera,
// CameraPosition(target: _initialPosition, zoom: 6),
),
FlatButton(
color: Colors.pink,
onPressed: () {
print(_markers);
},
)
],
),
);
}
通过这种方式解决了。通过更改位置:LatLng ....
initMarker(request, requestId ) {
var p = request['position'];
var d = request['name'];
var markerIdVal = requestId;
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position:
LatLng(p['geopoint'].latitude,p['geopoint'].longitude),
infoWindow: InfoWindow(
// title: d['name']
));
setState(() {
_markers[markerId] = marker;
});
}