我正在尝试构建一个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,
),
)
)
感谢所有能帮助我的人
1条答案
按热度按时间htrmnn0y1#
看起来像这个问题:https://github.com/liodali/osm_flutter/issues/339
我还发现了这个:https://github.com/liodali/osm_flutter/issues/243的解决方案,将isPicker标志设置为true,但tbh。我不知道为什么这应该解决这个问题。
由于您只想知道您的位置何时发生变化,因此您也可以使用geolocator包(Flutter Favorite)。
在那里,您可以通过实现PositionStream轻松地查询位置更改。