提问人:cj- 提问时间:12/8/2019 最后编辑:cj- 更新时间:8/18/2020 访问量:1045
授予权限时重新加载“我的位置”按钮
Reload My Location button when permission is granted
问:
背景
我正在使用 google_maps_flutter 包来显示带有与房屋相对应的标记的地图。为了避免设备过载,我只在用户正在查看的位置附近装载房屋。为了方便起见,我请求用户的位置并将其提供给 Google 地图,以便显示“我的位置”按钮。
问题
如果已授予位置访问权限,则它将按预期工作。如果地图已加载,则不会显示“我的位置”按钮。
目前,如果在地图上显示时授予了位置权限,我只需将相机移动到他们的位置即可。这是一个不错的解决方法,但我宁愿让用户决定在哪里查看。
在地图已加载的情况下授予权限时,如何加载按钮?
试
- 我试过只设置状态。
- 手动将地图标记为脏。
- 使用测试方法强制地图重新加载选项。
我已经检查了我可以访问的所有可用方法,所以在这一点上,我怀疑是否有任何其他选择。如果是这种情况,我会将其报告为错误。
我的代码
@override
Widget build(BuildContext context) {
// Load markers when permission is granted.
location.hasPermission().then((currPerm) async {
if (!currPerm) {
bool newPerm = await location.requestPermission();
if (newPerm) {
LocationData data = await location.getLocation();
(await mapController.future).moveCamera(CameraUpdate.newLatLng(LatLng(data.latitude, data.longitude)));
}
}
});
GoogleMap map = GoogleMap(
initialCameraPosition: CameraPosition(
target: INIT_POS,
zoom: 11.5,
),
myLocationEnabled: true,
myLocationButtonEnabled: true,
trafficEnabled: true,
markers: markers,
onMapCreated: (newController) => mapController.complete(newController),
onCameraIdle: () async {
// Load markers when the camera stops moving.
LatLngBounds bounds = await (await mapController.future).getVisibleRegion();
loadMarkers(
LatLng(
(bounds.northeast.latitude + bounds.southwest.latitude)/2,
(bounds.northeast.longitude + bounds.southwest.longitude)/2
),
);
},
);
return map;
}
答:
7赞
maganap
2/16/2020
#1
截至 ,我通过将变量分配给 来解决它,并在获得位置权限后更改其值。如果你硬编码,它就是行不通的。google_maps_flutter: ^0.5.23+1
myLocationEnabled
true
GoogleMap map = GoogleMap(
myLocationEnabled: _isLocationGranted,
...
所以,最初是.当我获得位置权限时,我将其设置为并重建小部件(通过调用、触发或您使用的任何方法)。_isLocationGranted
false
true
setState()
BlocBuilder()
另一个相关参数 ,似乎不需要这种处理。myLocationButtonEnabled: true
评论
1赞
LucaT
8/27/2021
我也有同样的问题,你能举个例子说明你是怎么做的吗?
评论