【发布时间】:2020-12-26 21:17:29
【问题描述】:
自从 Firebase 进行重大更新后,我就陷入了困境。我无法将我的标记从 Firestore 显示到 Google 地图。
以前,它有效。我不明白我的代码有什么问题。
运行代码时出现此错误:
E/flutter ( 8450): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: Closure call with mismatched arguments: function 'data'
E/flutter ( 8450): Receiver: Closure: () => Map<String, dynamic> from Function 'data':.
E/flutter ( 8450): Tried calling: data()
E/flutter ( 8450): Found: data() => Map<String, dynamic>
代码:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
class NewMap extends StatefulWidget {
@override
_NewMapState createState() => _NewMapState();
}
class _NewMapState extends State<NewMap> {
GoogleMapController _controller;
Position position;
Widget _child;
Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
BitmapDescriptor pinLocationIcon;
@override
void initState() {
_child = SpinKitRipple(
itemBuilder: (BuildContext context, int index) {
return DecoratedBox(
decoration: BoxDecoration(
color: index.isEven ? Colors.grey : Color(0xffffb838),
),
);
},
);
getCurrentLocation();
populateClients();
setCustomMapPin();
super.initState();
}
void getCurrentLocation() async {
Position res = await getCurrentPosition();
setState(() {
position = res;
_child = mapWidget();
});
}
populateClients() {
FirebaseFirestore.instance.collection("AllTombs").get().then((docs) {
if (docs.docs.isNotEmpty) {
for (int i = 0; i < docs.docs.length; ++i) {
initMarker(docs.docs[i].data, docs.docs[i].id);
}
}
});
}
void initMarker(tomb, tombId) {
var markerIdVal = tombId;
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position: LatLng(
tomb.data()['location'].latitude, tomb.data()['location'].latitude),
icon: pinLocationIcon,
);
setState(() {
markers[markerId] = marker;
});
}
void setCustomMapPin() async {
pinLocationIcon = await BitmapDescriptor.fromAssetImage(
ImageConfiguration(devicePixelRatio: 2.5), 'assets/icon/pin.png');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(color: Color(0xffffb838)),
centerTitle: true,
backgroundColor: Colors.white,
),
body: _child,
);
}
Widget mapWidget() {
return Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(position.latitude, position.longitude),
zoom: 10,
),
onMapCreated: (GoogleMapController controller) {
_controller = controller;
},
compassEnabled: true,
myLocationEnabled: true,
markers: Set<Marker>.of(markers.values)),
SizedBox(
height: 26,
),
],
);
}
}
【问题讨论】:
标签: firebase google-maps flutter dart google-cloud-firestore