从Firestore检索数据并将其传递给变量。扑

时间:2020-09-04 12:19:20

标签: flutter google-cloud-firestore

嗨,我想问一下如何从Firestore中检索数据并将其发送给Double。

这是我从Firestore检索数据的代码。

Firestore.instance
            .collection('locations')
            .snapshots()
            .listen((driverLocation){
          driverLocation.documents.forEach((dLocation){
            dLocation.data['Latitude'] = latitude;
            dLocation.data['Longitude'] = longitude;
            print(latitude);
          });
        });

我将其存储在dLocation内,当我print(dLocation.data)时,它将在Firestore中显示纬度和经度。但是,当我将其传递给double latitudedouble longitude时,它将返回null。

busStop.add(
          Marker(
            markerId: MarkerId('driverLocation')
            ,
            draggable: false,
            icon: BitmapDescriptor.defaultMarker,
            onTap: () {
            },
            position: LatLng(latitude, longitude),
          ));

然后,我想将double latitudedouble longitude中的数据传递到标记中,以便标记将相应地移动到Firestore中的纬度和经度。

这里发生的所有事情都在initState()中。

**如果有任何您想问的问题,请随时这样做,因为我对如何表达我的问题一无所知。提前非常感谢您。

1 个答案:

答案 0 :(得分:2)

您的操作方式有误。现在,您正在将latitude的值(为空)分配给dLocation.data['latitude']的值。您想做的是这样:

latitude = dLocation.data['latitude'];
longitude = dLocation.data['longitude'];

此更改后,dLocation.data['latitude']的值将分配给latitude,而dLocation.data['longitude']的值将分配给longitude变量

更新:

要获取新标记并将它们与latitudelongitude值一起显示在屏幕上,您可以执行以下操作:

@override
void initState(){
Firestore.instance
            .collection('locations')
            .snapshots()
            .listen((driverLocation){
          //busStop = []; removes all the old markers and you don't get duplicate markers with different coordinates
          driverLocation.documents.forEach((dLocation){
            dLocation.data['Latitude'] = latitude;
            dLocation.data['Longitude'] = longitude;
            busStop.add(
               Marker(
                  markerId: MarkerId('driverLocation')
                  ,
                  draggable: false,
                  icon: BitmapDescriptor.defaultMarker,
                  onTap: () {
                  },
                  position: LatLng(latitude, longitude),
          )); //you need to check for duplicate markers here. you can do it by giving each marker an unique id and check for the same marker in the list so you don't get duplicate markers.
          });
         setState((){}); //rebuilds the widget tree after adding the markers to the busStop list
        });

}

这里发生的是将标记添加到busStop列表中,并在添加所有标记后调用setState,小部件树将使用最新数据重建屏幕。您可能需要检查重复的标记,因为它们可能会被重新添加到busStop列表中。或者,您可以简单地删除所有旧标记,然后在添加到busStop = [];

之前使用busStop添加新标记