geolocator包的功能和用法
文章目录
- 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关键字来使用
- 打开位置开关的方法只能用于Android,IOS不支持这样的功能;
此外,该包还提供了监听位置开关和监听位置信息的功能,它会把位置开关状态,和位置服务封装到stream中,我们获取到相应的stream后就可以使用listen()方法
来监听位置开关的变化和位置信息的变化。
3 示例代码
///获取位置开关状态,如果没有打开开关就跳转到开关设置页面(仅支持android)
locationServiceEnabled = await Geolocator.isLocationServiceEnabled();
if(!locationServiceEnabled) {debugPrint('location service is disabled');///打开位置形状只适用于android,IOS不可以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监听位置信息
StreamSubscription<Position> 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平台上验证,感兴趣
的看官们可以自己去验证。
看官们,与"如何获取位置信息"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
相关文章:
geolocator包的功能和用法
文章目录 1 概念介绍2 使用方法3 示例代码4 体验分享 我们在上一章回中介绍了如何实现滑动菜单相关的内容,本章回中将介绍如何获取位置信息.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的获取位置信息本质上是获取当前手机所在位置的…...
Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
22.Word:小张-经费联审核结算单❗【16】
目录 NO1.2 NO3.4 NO5.6.7 NO8邮件合并 MS搜狗输入法 NO1.2 用ms打开文件,而不是wps❗不然后面都没分布局→页面设置→页面大小→页面方向→上下左右:页边距→页码范围:多页:拼页光标处于→布局→分隔符:分节符…...
Agent 高频知识汇总:查漏补缺参考大全
Agent 高频问题汇总 一、基础概念类 (一)请解释 Agent 的概念及其主要特点 Agent 是一种能够感知所处环境,并基于感知信息做出决策、采取行动以实现特定目标的实体。它既可以是简单的规则基系统,也能是复杂的智能体,…...
本地化部署DeepSeek-R1
本文环境搭建均基于免费工具,感谢开源。 一、下载工具并安装 1. Ollama:最新版本 0.5.7 官网在这里 https://ollama.com/download 但是下载太慢,得换个思路 https://sourceforge.net/projects/ollama.mirror/ 2.Chatbox https://cha…...
验证二叉搜索数(98)
98. 验证二叉搜索树 - 力扣(LeetCode) 解法: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …...
StarRocks BE源码编译、CLion高亮跳转方法
阅读SR BE源码时,很多类的引用位置爆红找不到,或无法跳转过去,而自己的Linux机器往往缺乏各种C依赖库,配置安装比较麻烦,因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器,进行编…...
数模测评:doubao1.5>deepseek-v3>gpt-o1
本次测试了当前评价最高的三款大模型doubao1.5、gpt-o1、deepseek-v3(r1崩溃),都是采用无提示词的硬核提问方式,测试视频如下。 gpto1、doubao1.5、deepseek测评 测试方式: 上传美赛六道题目文件 直接提问以下5句话: 这是一道数学…...
晴,初三,年已过
既然直播如此影响情绪,为什么还要直播?因为无聊?明明那么多事情可以打发时间。 真不想懂。 今日初三,昨天晚上小舅家聚,今天大舅家聚,计划明天小姨妈家聚。 今晚喝了点大舅哥哥泡的白葡萄酒,…...
Vue3 v-bind 和 v-model 对比
1. 基本概念 1.1 v-bind 单向数据绑定从父组件向子组件传递数据简写形式为 : 1.2 v-model 双向数据绑定父子组件数据同步本质是 v-bind 和 v-on 的语法糖 2. 基础用法对比 2.1 表单元素绑定 <!-- v-bind 示例 --> <template><input :value"text&quo…...
Smalltalk语言是何物?面向对象鼻祖Simula的诞生?Simula和Smalltalk有什么区别?面向对象设计?
Smalltalk语言是何物? Smalltalk语言的前身可以追溯到Flex系统,这是由Alan Kay最早提出的。在随后的发展中,Smalltalk逐渐演化,并出现了Smalltalk-72和Smalltalk-76等版本。最终,在经过近10年的研究与发展后,Xerox研究…...
KVM/ARM——基于ARM虚拟化扩展的VMM
1. 前言 ARM架构为了支持虚拟化做了些扩展,称为虚拟化扩展(Virtualization Extensions)。原先为VT-x创建的KVM(Linux-based Kernel Virtual Machine)适配了ARM体系结构,引入了KVM/ARM (the Linux ARM hypervisor)。KVM/ARM没有在hypervisor中引入复杂的…...
Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher Windows系统中Docker可视化工具对比分析1. 工具概览2. Docker Desktop官网链接:主要优点:主要缺点:版本更新频率: 3. Portainer官网…...
【架构面试】二、消息队列和MySQL和Redis
MQ MQ消息中间件 问题引出与MQ作用 常见面试问题:面试官常针对项目中使用MQ技术的候选人提问,如如何确保消息不丢失,该问题可考察候选人技术能力。MQ应用场景及作用:以京东系统下单扣减京豆为例,MQ用于交易服和京豆服…...
算法【完全背包】
完全背包与01背包的区别仅在于每种商品可以选取无限次。时间复杂度O(物品数量 * 背包容量) 下面通过题目加深理解。 题目一 测试链接:疯狂的采药 - 洛谷 分析:这是一道完全背包的模板题。对于第i个物品的可能性展开也有两种,第一种是不取第…...
二叉树的遍历
有一个结点的二叉树。给出每个结点的两个子结点编号,建立一棵二叉树,如果是叶子结点,则输入 0 0。 建好树这棵二叉树之后,依次求出它的前序、中序、后序列遍历。 输入格式: 第一行一个整数n ,表示结点数。 之后n 行…...
1.31 实现五个线程的同步
1.使用互斥锁实现 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include &l…...
three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)
春节忙完一轮,总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论,所以像相机矩阵推导这种网上已经很多优质文章的内容,笔者就一笔带过。 然而关于负缩放…...
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
本文项目编号 T 165 ,文末自助获取源码 \color{red}{T165,文末自助获取源码} T165,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
《大数据时代“快刀”:Flink实时数据处理框架优势全解析》
在数字化浪潮中,数据呈爆发式增长,实时数据处理的重要性愈发凸显。从金融交易的实时风险监控,到电商平台的用户行为分析,各行业都急需能快速处理海量数据的工具。Flink作为一款开源的分布式流处理框架,在这一领域崭露头…...
Quartus中生成与烧录FPGA板载Flash的jic文件全流程解析
1. 为什么需要jic文件? 刚接触FPGA开发的朋友可能会疑惑:为什么编译生成的sof文件不能直接烧录到Flash?这个问题要从FPGA的特性说起。FPGA芯片内部是基于SRAM结构的,这意味着每次断电后配置数据都会丢失。想象一下你正在用电脑写文…...
FireRedASR Pro模型架构浅析:从卷积神经网络到端到端设计
FireRedASR Pro模型架构浅析:从卷积神经网络到端到端设计 最近在语音识别圈子里,FireRedASR Pro这个名字被提到的次数越来越多了。不少朋友都在问,这个模型到底有什么特别之处,为什么大家都在讨论它。其实,它的核心魅…...
用TurtleBot3实测:Navigation2局部代价地图的滚动窗口为何必须用odom坐标系?
TurtleBot3实测:为什么Navigation2局部代价地图必须绑定odom坐标系? 当你在Gazebo中第一次看到TurtleBot3的导航表现时,可能会对局部代价地图(Local Costmap)的坐标系选择产生疑问。为什么这个实时更新的避障地图要绑定…...
HunyuanVideo-Foley应用场景:播客自动化剪辑、TTS语音情感增强音效
HunyuanVideo-Foley应用场景:播客自动化剪辑与TTS语音情感增强音效 1. 镜像概述与核心能力 HunyuanVideo-Foley私有部署镜像是一款专为音视频生成任务优化的AI工具包,特别针对RTX 4090D 24GB显存显卡进行了深度优化。这个开箱即用的解决方案将视频生成…...
校园网免认证上网?手把手教你用UDP53端口搭建自己的“网络后门”(附服务器配置)
校园网络优化:UDP53端口的高效应用实践 校园网络作为师生日常学习生活的重要基础设施,其稳定性和访问效率直接影响着教学科研活动的开展。本文将深入探讨一种基于UDP53端口的网络优化方案,帮助技术爱好者理解并实现更流畅的网络体验。 1. 校园…...
【英飞凌】TC3XX单片机型号解码:从命名规则看芯片选型
1. 英飞凌TC3XX单片机命名规则解析 第一次接触英飞凌TC3XX系列单片机时,我完全被那一长串型号搞懵了。TC387TP、TC377T、TC397QP...这些看似随机的字母数字组合,其实隐藏着丰富的芯片信息。经过几个项目的实战,我终于摸清了这套命名规则的规律…...
Blazor组件测试工具:BootstrapBlazor测试库完整指南
Blazor组件测试工具:BootstrapBlazor测试库完整指南 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor BootstrapBlazor测试库是企业级Blazor UI组件库的质量保障体系,提供了一套完整的组件测试解…...
OpenClaw自动化邮件处理:GLM-4.7-Flash模型分类与回复
OpenClaw自动化邮件处理:GLM-4.7-Flash模型分类与回复 1. 为什么需要自动化邮件处理 每天早晨打开邮箱时,我的收件箱总是堆满了各种邮件——工作汇报、会议邀请、订阅资讯、促销广告……手动分类和回复这些邮件至少会消耗我30分钟时间。直到上个月&…...
Kimi-VL-A3B-Thinking Chainlit定制化开发:添加历史记录/多用户会话/图片标注功能
Kimi-VL-A3B-Thinking Chainlit定制化开发:添加历史记录/多用户会话/图片标注功能 1. 项目背景与模型介绍 Kimi-VL-A3B-Thinking是一款基于混合专家架构(MoE)的开源视觉语言模型(VLM),在多模态推理和长上下文理解方面表现出色。该模型仅激活2.8B参数就…...
从逻辑门到CPU:计算机工作原理详解
戏说CPU的工作原理:从逻辑门到计算系统1. 计算系统的基本构建单元1.1 逻辑门的物理实现计算系统最基本的构建单元是逻辑门,它们可以通过简单的物理实体来演示。以三名士兵为例,我们可以构建最基本的逻辑运算单元:输入单元…...
