首页 > 解决方案 > Flutter Mapbox 如何显示我的汽车的当前位置

问题描述

我有一个颤振项目,旨在在 Mapbox 中显示我的汽车的当前位置。我使用“mapbox_gl (0.1.0)”包并在 MapboxMap 小部件中使用 MapboxMapController 的 addSymbol 函数显示我的汽车的位置。我的 MapboxMap 小部件位于 StreamBuilder 中,我从 Firebase 实时数据库中读取了我的汽车的位置。问题是当我从数据库更改我的汽车的位置时,当前位置没有显示出来。此外,当我单击热重载按钮时,位置也不会改变。

这是我的代码:

StreamBuilder(
      stream: FirebaseDatabase.instance
          .reference()
          .child("Vehicle")
          .onValue,
      builder: (context, snapShot) {
        if (snapShot.hasData) {
          print(snapShot.data.snapshot.value.toString());
          Map data = snapShot.data.snapshot.value;
          List item = [];
          
          data.forEach(
                  (index, data) => item.add({"key":index, ...data}));
          

          return MapboxMap(

              accessToken: token,
              
              initialCameraPosition: CameraPosition(
                zoom: 15,
                target: LatLng(38.470353, 27.076155),
              ),
              onMapCreated:
                  (MapboxMapController controller) async {
                final result = await acquireCurrentLocation();


                //this line moves camera to my current location
                await controller.moveCamera(
                  CameraUpdate.newLatLng(result),
                );

                await controller.addCircle(
                  CircleOptions(
                    circleRadius: 8.0,
                    circleColor: '#006992',
                    circleOpacity: 0.8,
                    geometry: result,
                    draggable: false,
                  ),
                );



                await controller.addSymbol(SymbolOptions(
                  geometry: LatLng(item[0]['location']['latitude'], item[0]['location']['longitude']),
                  iconSize: 0.5,
                  iconImage: getIconImage(double.parse(item[0]['battery_percent'])),
                  draggable: false,
                ));
                await controller.addSymbol(
                  SymbolOptions(
                    geometry: LatLng(item[1]['location']['latitude'], item[1]['location']['longitude']),
                    draggable: false,
                    iconSize: 0.5,

                    iconImage: getIconImage(double.parse(item[1]['battery_percent'])),

                  ),
                );
               
              });
        }

        if (snapShot.hasError) {
          return Text("Error");
        } else {
          return Center(child: CircularProgressIndicator());
        }
      });

为什么热重载和数据库更改不会影响地图。除非我重新运行应用程序,否则显示我的汽车位置的符号会留在同一个地方吗?我应该怎么办?

标签: fluttermapbox-gl

解决方案


推荐阅读