html免费网站模板,做网站应该会什么问题,wordpress 媒体库 地址,佛山便宜网站建设文章目录 1 概念介绍2 使用方法3 示例代码4 体验分享 我们在上一章回中介绍了如何实现滑动菜单相关的内容#xff0c;本章回中将介绍如何获取位置信息.闲话休提#xff0c;让我们一起Talk Flutter吧。 1 概念介绍
我们在这里说的获取位置信息本质上是获取当前手机所在位置的… 文章目录 1 概念介绍2 使用方法3 示例代码4 体验分享 我们在上一章回中介绍了如何实现滑动菜单相关的内容本章回中将介绍如何获取位置信息.闲话休提让我们一起Talk Flutter吧。 1 概念介绍
我们在这里说的获取位置信息本质上是获取当前手机所在位置的gps坐标就是我们常说的经纬度。获取位置信息属于原生平台提供的功能Flutter做为UI框架并没有 提供这种功能因此我们需要自己编写channel然后分别在Android和IOS平台上实现相关的代码这样做显然又回到了原生开发中好在Flutter提供了包机制而 且已经有三方包替我们做了这件事情我们只需要在项目中引入并且使用三方包就可以获取到位置信息该包的名称为geolocator.本章回中将详细介绍它的使用方法。
2 使用方法
在yaml文件中引入geolocator包并且通过get命令获取包中的内容到项目中通过包中的checkPermission()方法检查是否获取到位置权限如果没有获取到就使用requestPermission()方法获取位置权限使用isLocationServiceEnabled()方法检查是否已经打开位置开关如果没有打开就使用openLocationSettings()方法打开使用getCurrentPosition()方法获取当前的位置信息该信息中包含当前位置的经纬度 这些使用方法还有一些注意事项需要和大家说明以免大家在使用时出现错误- 我们在上面步骤中介绍的方法都是异步方法需要配合async/await关键字来使用
打开位置开关的方法只能用于AndroidIOS不支持这样的功能 此外该包还提供了监听位置开关和监听位置信息的功能它会把位置开关状态和位置服务封装到stream中我们获取到相应的stream后就可以使用listen()方法 来监听位置开关的变化和位置信息的变化。
3 示例代码
///获取位置开关状态如果没有打开开关就跳转到开关设置页面(仅支持android)
locationServiceEnabled await Geolocator.isLocationServiceEnabled();
if(!locationServiceEnabled) {debugPrint(location service is disabled);///打开位置形状只适用于androidIOS不可以Geolocator.openLocationSettings();return Future.error(Location service is disabled);
}///检查位置权限
permission await Geolocator.checkPermission();
if(permission LocationPermission.denied || permission LocationPermission.deniedForever) {permission await Geolocator.requestPermission();if(permission LocationPermission.always || permission LocationPermission.whileInUse) {positionResult await Geolocator.getCurrentPosition();}else {debugPrint(Location permission is denied);return Future.error(Location permission is denied);}
}else {///获取最近一次的位置信息和当前位置信息positionResult await Geolocator.getLastKnownPosition();positionResult ?? await Geolocator.getCurrentPosition();
}///通过stream监听位置信息
StreamSubscriptionPosition serviceStatus Geolocator.getPositionStream(locationSettings: locationSettings,).listen((event) { debugPrint(geo updated: ${event.toString()});},onDone: () debugPrint(service updated done),onError: (error) debugPrint(service updated error: ${error.toString()}),
);上面的代码中添加了注释这样方便大家理解代码。在使用的时候最好把这些方法封装独立的方法因为需要使用aync/await关键字。我在这里就不演示程序的运行结果 了建议大家自己动手去实践通过日志打印出获取到的位置信息。
4 体验分享
这个包的功能十分强大除了可以提供位置信息外还实现了位置信息的外围功能比如检查位置权限申请位置权限打开位置开关。这些功能十分实用可以极大地提 高我们的开发效率。这个包还提供了监听位置开关状态和位置信息服务的功能监听通过stream机制实现这个功能是我最喜欢的功能。总之这个包的功能十分强大 使用检验非常好我推荐大家去亲自去检验一下。关于这个包的缺点我感觉会在Android兼容性上出问题.因为Android的位置权限分前台和后面而且还有粗略和精 确之分这些差异分散在不同的Android版本中包中文档没有提到这些当然也有可能该包已经兼容了各个Android版本。我没有在多个Android平台上验证感兴趣 的看官们可以自己去验证。 看官们与如何获取位置信息相关的内容就介绍到这里欢迎大家在评论区交流与讨论!