dart “onLocationChanged”回调从未被调用(flutter_osm_plugin),但GPS定位正在工作

jm81lzqq  于 2023-05-11  发布在  Flutter
关注(0)|答案(1)|浏览(136)

我正在尝试构建一个Flutter应用程序,它需要在用户每次改变位置时更新其内部状态。为此,我安装了flutter_osm_plugin,并创建了小部件OSMFlutter,其中“trackMyPosition”设置为True,并且“onLocationChanged”设置为函数。
每次用户移动时,我都必须刷新Map上的标记,正如文档中所述:onLocationChanged: (callback) it is fired when you activate tracking and user position has been changed但问题是它不起作用,它只会在加载Map时运行一次。我确信地理定位权限正在工作,因为用户被正确地放置在Map上,当用户移动Map上的标记时,Map上的标记也会移动,所以我不知道我做错了什么。
我实际上不需要使用包中提供的“onLocationChanged”,我只需要在用户移动时运行一个函数,这样我就可以从数据库中获取新的数据。其他人遇到过这个问题吗?我该怎么解决呢?下面是我的代码:
舱单

<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

小部件(在这个例子中,我只是试图增加一个计数器,看看它是否会在屏幕上更新)

OSMFlutter( 
    controller: controller,
    trackMyPosition: true,
    initZoom: 12,
    minZoomLevel: 8,
    maxZoomLevel: 19,
    stepZoom: 1.0,
    onLocationChanged: (p0) => setState(() {
          _counter++;
        }),
    onGeoPointClicked:(p0) => print("test" + p0.toString()),
    userLocationMarker: UserLocationMaker(
    personMarker: const MarkerIcon(
        icon: Icon(
            Icons.location_history_rounded,
            color: Colors.red,
            size: 100,
            ),
        ),
    directionArrowMarker: const MarkerIcon(
        icon: Icon(
                Icons.double_arrow,
                size: 48,
                ),
            ),
        ),
     roadConfiguration: const RoadOption(
                roadColor: Colors.yellowAccent,
        ),
     markerOption: MarkerOption(
         defaultMarker: const MarkerIcon(
             icon: Icon(
                  Icons.person_pin_circle,
                  color: Colors.blue,
                  size: 56,
                  ),
                )
)

感谢所有能帮助我的人

htrmnn0y

htrmnn0y1#

看起来像这个问题:https://github.com/liodali/osm_flutter/issues/339
我还发现了这个:https://github.com/liodali/osm_flutter/issues/243的解决方案,将isPicker标志设置为true,但tbh。我不知道为什么这应该解决这个问题。
由于您只想知道您的位置何时发生变化,因此您也可以使用geolocator包(Flutter Favorite)。
在那里,您可以通过实现PositionStream轻松地查询位置更改。

final LocationSettings locationSettings = LocationSettings(
  accuracy: LocationAccuracy.high,
  distanceFilter: 100,
);
StreamSubscription<Position> positionStream = Geolocator.getPositionStream(locationSettings: locationSettings).listen(
    (Position? position) {
        print(position == null ? 'Unknown' : '${position.latitude.toString()}, ${position.longitude.toString()}');
    });

相关问题