cj-*_*cj- 4 google-maps flutter
我正在使用 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;
}
Run Code Online (Sandbox Code Playgroud)
截至google_maps_flutter: ^0.5.23+1,我通过将变量分配给myLocationEnabled并在获得位置权限后更改其值来解决这个问题。如果你硬编码true,它就行不通。
GoogleMap map = GoogleMap(
myLocationEnabled: _isLocationGranted,
...
Run Code Online (Sandbox Code Playgroud)
所以,_isLocationGranted最初是false。当我获得位置权限时,我将其设置为true并重建小部件(通过调用setState()、触发BlocBuilder()或您使用的任何方法)。
另一个相关参数myLocationButtonEnabled: true似乎不需要这种处理。
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |