StreamBuilder不返回任何值-Flutter

时间:2020-08-15 20:48:39

标签: flutter google-cloud-firestore

我正在尝试使用StreamBuilder返回位置值,但是我没有成功。在调试中,他甚至没有运行生成器。我找不到问题。

在这里我创建StreamBuilder来带来位置

_newMoveToApoio(String uidProp) {
    StreamBuilder(
        stream: Firestore.instance
            .collection('tracker')
            .document(uidProp)
            .snapshots(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return new Center(
              child: CircularProgressIndicator(),
            );
          } else {
            var trackerDocument = snapshot.data;
            double latitude = trackerDocument['latitude'];
            double longitude = trackerDocument['longitude']; 

            _controller.animateCamera(CameraUpdate.newCameraPosition(
                CameraPosition(
                    target: LatLng(latitude, longitude), zoom: 18.0)));
            setState(() {
              _markers.add(
                Marker(
                  draggable: false,
                  markerId: MarkerId("1"),
                  position: LatLng(latitude, longitude),
                  infoWindow: InfoWindow(
                      title: "João Marcelo", snippet: "Sua Localização Atual"),
                  icon: _markerIconApoio,
                ),
              );
            });
          }
        });
  }



在这里我在底页中拨打电话,并传递“ uid”

onTap: () =>  _newMoveToApoio(snapshot.data[index].data['uidProp']),

1 个答案:

答案 0 :(得分:1)

我认为您误解了StreamBuilder的用途。它是在小部件树中使用的小部件。但是您可以从仅执行该功能的onTap进行调用。您可能想要更多类似这样的东西:

_newMoveToApoio(String uidProp) async {
  var snapshot = await Firestore.instance
            .collection('tracker')
            .document(uidProp)
            .get();
  // do your business logic here
}

编辑::要在树中使用StreamBuilder,请先将其返回:

Widget _newMoveToApoio(String uidProp) {
  return StreamBuilder(
    // the rest of the function

,然后在您的构建方法中:

RandomWidget(
  child: _newMoveToApoio(uidProp),