当前位置: 首页 > news >正文

geolocator包的功能和用法

文章目录

  • 1 概念介绍
  • 2 使用方法
  • 3 示例代码
  • 4 体验分享

我们在上一章回中介绍了如何实现滑动菜单相关的内容,本章回中将介绍如何获取位置信息.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1 概念介绍

我们在这里说的获取位置信息本质上是获取当前手机所在位置的gps坐标,就是我们常说的经纬度。获取位置信息属于原生平台提供的功能,Flutter做为UI框架并没有
提供这种功能,因此我们需要自己编写channel,然后分别在Android和IOS平台上实现相关的代码,这样做显然又回到了原生开发中,好在Flutter提供了包机制,而
且已经有三方包替我们做了这件事情,我们只需要在项目中引入并且使用三方包就可以获取到位置信息,该包的名称为:geolocator.本章回中将详细介绍它的使用方法。

2 使用方法

  1. 在yaml文件中引入geolocator包,并且通过get命令获取包中的内容到项目中;
  2. 通过包中的checkPermission()方法检查是否获取到位置权限,如果没有获取到就使用requestPermission()方法获取位置权限;
  3. 使用isLocationServiceEnabled()方法检查是否已经打开位置开关,如果没有打开就使用openLocationSettings()方法打开;
  4. 使用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 体验分享 我们在上一章回中介绍了如何实现滑动菜单相关的内容&#xff0c;本章回中将介绍如何获取位置信息.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的获取位置信息本质上是获取当前手机所在位置的…...

Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

22.Word:小张-经费联审核结算单❗【16】

目录 NO1.2 NO3.4​ NO5.6.7 NO8邮件合并 MS搜狗输入法 NO1.2 用ms打开文件&#xff0c;而不是wps❗不然后面都没分布局→页面设置→页面大小→页面方向→上下左右&#xff1a;页边距→页码范围&#xff1a;多页&#xff1a;拼页光标处于→布局→分隔符&#xff1a;分节符…...

Agent 高频知识汇总:查漏补缺参考大全

Agent 高频问题汇总 一、基础概念类 &#xff08;一&#xff09;请解释 Agent 的概念及其主要特点 Agent 是一种能够感知所处环境&#xff0c;并基于感知信息做出决策、采取行动以实现特定目标的实体。它既可以是简单的规则基系统&#xff0c;也能是复杂的智能体&#xff0c…...

本地化部署DeepSeek-R1

本文环境搭建均基于免费工具&#xff0c;感谢开源。 一、下载工具并安装 1. Ollama&#xff1a;最新版本 0.5.7 官网在这里 https://ollama.com/download 但是下载太慢&#xff0c;得换个思路 https://sourceforge.net/projects/ollama.mirror/ 2.Chatbox https://cha…...

验证二叉搜索数(98)

98. 验证二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; /*** 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源码时&#xff0c;很多类的引用位置爆红找不到&#xff0c;或无法跳转过去&#xff0c;而自己的Linux机器往往缺乏各种C依赖库&#xff0c;配置安装比较麻烦&#xff0c;因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器&#xff0c;进行编…...

数模测评:doubao1.5>deepseek-v3>gpt-o1

本次测试了当前评价最高的三款大模型doubao1.5、gpt-o1、deepseek-v3(r1崩溃)&#xff0c;都是采用无提示词的硬核提问方式&#xff0c;测试视频如下。 gpto1、doubao1.5、deepseek测评 测试方式&#xff1a; 上传美赛六道题目文件 直接提问以下5句话&#xff1a; 这是一道数学…...

晴,初三,年已过

既然直播如此影响情绪&#xff0c;为什么还要直播&#xff1f;因为无聊&#xff1f;明明那么多事情可以打发时间。 真不想懂。 今日初三&#xff0c;昨天晚上小舅家聚&#xff0c;今天大舅家聚&#xff0c;计划明天小姨妈家聚。 今晚喝了点大舅哥哥泡的白葡萄酒&#xff0c;…...

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系统&#xff0c;这是由Alan Kay最早提出的。在随后的发展中&#xff0c;Smalltalk逐渐演化&#xff0c;并出现了Smalltalk-72和Smalltalk-76等版本。最终&#xff0c;在经过近10年的研究与发展后&#xff0c;Xerox研究…...

KVM/ARM——基于ARM虚拟化扩展的VMM

1. 前言 ARM架构为了支持虚拟化做了些扩展&#xff0c;称为虚拟化扩展(Virtualization Extensions)。原先为VT-x创建的KVM(Linux-based Kernel Virtual Machine)适配了ARM体系结构&#xff0c;引入了KVM/ARM (the Linux ARM hypervisor)。KVM/ARM没有在hypervisor中引入复杂的…...

Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher

Docker可视化工具对比分析&#xff0c;Docker Desktop&#xff0c;Portainer&#xff0c;Rancher Windows系统中Docker可视化工具对比分析1. 工具概览2. Docker Desktop官网链接&#xff1a;主要优点&#xff1a;主要缺点&#xff1a;版本更新频率&#xff1a; 3. Portainer官网…...

【架构面试】二、消息队列和MySQL和Redis

MQ MQ消息中间件 问题引出与MQ作用 常见面试问题&#xff1a;面试官常针对项目中使用MQ技术的候选人提问&#xff0c;如如何确保消息不丢失&#xff0c;该问题可考察候选人技术能力。MQ应用场景及作用&#xff1a;以京东系统下单扣减京豆为例&#xff0c;MQ用于交易服和京豆服…...

算法【完全背包】

完全背包与01背包的区别仅在于每种商品可以选取无限次。时间复杂度O(物品数量 * 背包容量) 下面通过题目加深理解。 题目一 测试链接&#xff1a;疯狂的采药 - 洛谷 分析&#xff1a;这是一道完全背包的模板题。对于第i个物品的可能性展开也有两种&#xff0c;第一种是不取第…...

二叉树的遍历

有一个结点的二叉树。给出每个结点的两个子结点编号&#xff0c;建立一棵二叉树&#xff0c;如果是叶子结点&#xff0c;则输入 0 0。 建好树这棵二叉树之后&#xff0c;依次求出它的前序、中序、后序列遍历。 输入格式: 第一行一个整数n &#xff0c;表示结点数。 之后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版本)

春节忙完一轮&#xff0c;总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论&#xff0c;所以像相机矩阵推导这种网上已经很多优质文章的内容&#xff0c;笔者就一笔带过。 然而关于负缩放&#xf…...

【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)

本文项目编号 T 165 &#xff0c;文末自助获取源码 \color{red}{T165&#xff0c;文末自助获取源码} T165&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

《大数据时代“快刀”:Flink实时数据处理框架优势全解析》

在数字化浪潮中&#xff0c;数据呈爆发式增长&#xff0c;实时数据处理的重要性愈发凸显。从金融交易的实时风险监控&#xff0c;到电商平台的用户行为分析&#xff0c;各行业都急需能快速处理海量数据的工具。Flink作为一款开源的分布式流处理框架&#xff0c;在这一领域崭露头…...

RISC-V DSP开发板实战:从环境搭建到BLDC电机控制全解析

1. 项目概述&#xff1a;一次难得的RISC-V DSP开发板深度体验机会 作为一名在嵌入式领域摸爬滚打了十多年的老工程师&#xff0c;我见证了ARM架构从崭露头角到一统江湖的全过程。然而&#xff0c;近几年开源指令集架构RISC-V的异军突起&#xff0c;让我这个“老顽固”也感受到了…...

在C的基础上入门C++——第一个C++程序(学习笔记+个人心得)

基础程序 #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; }main函数 main函数是程序的入口&#xff0c;不管有多少代码都是从main函数开始的&#xff0c;main函数也被叫做主函数&#xff0c;mai…...

Tina Linux存储介质实战切换:从eMMC到SPI NAND的配置迁移与避坑指南

1. 为什么需要从eMMC迁移到SPI NAND&#xff1f; 在嵌入式系统开发中&#xff0c;存储介质的选择往往决定了产品的成本和性能表现。eMMC作为传统存储方案&#xff0c;具有容量大、读写速度快的特点&#xff0c;但随着芯片价格上涨和供应链波动&#xff0c;越来越多的开发者开始…...

RDP Wrapper完整教程:Windows家庭版免费开启远程桌面多用户功能终极指南

RDP Wrapper完整教程&#xff1a;Windows家庭版免费开启远程桌面多用户功能终极指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版无法使用远程桌面功能而烦恼吗&#xff1f;RDP Wrapper Lib…...

hcom:基于钩子架构的AI编码代理本地编排系统

1. 项目概述&#xff1a;hcom&#xff0c;一个为AI编码代理打造的“中枢神经系统”如果你和我一样&#xff0c;日常开发中重度依赖像Claude Code、Gemini CLI这类AI编码助手&#xff0c;那你肯定遇到过这样的场景&#xff1a;你让Claude在终端A里重构一个模块&#xff0c;同时让…...

从AVR到ARM架构迁移实战:SAMD平台外设编程与性能调优指南

1. 从AVR到ARM&#xff1a;一次架构跃迁的深度解析如果你和我一样&#xff0c;是从Arduino Uno、Nano这类经典的AVR平台一路玩过来的&#xff0c;那么当你第一次拿到一块Adafruit Feather M0或者Arduino Zero时&#xff0c;那种感觉就像是开惯了手动挡的老爷车&#xff0c;突然…...

5分钟快速上手:用TMSpeech实现Windows离线语音转文字,保护隐私的会议记录神器

5分钟快速上手&#xff1a;用TMSpeech实现Windows离线语音转文字&#xff0c;保护隐私的会议记录神器 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为线上会议记录手忙脚乱吗&#xff1f;担心语音数据上传云端…...

如何永久保存微信聊天记录:3步完成专业级数据备份方案

如何永久保存微信聊天记录&#xff1a;3步完成专业级数据备份方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失、系统升级或更换设备&#xff0c;而…...

Kubernetes智能运维助手:基于LLM的kube-copilot实战指南

1. 项目概述&#xff1a;当Kubernetes遇上AI副驾驶如果你和我一样&#xff0c;每天都要和Kubernetes集群打交道&#xff0c;那你肯定对下面这些场景不陌生&#xff1a;凌晨三点被告警叫醒&#xff0c;面对一个不断重启的Pod&#xff0c;需要手动执行一串kubectl describe、kube…...

ChatTTS开源对话式语音合成:情感控制与实战部署指南

1. 项目概述&#xff1a;从文本到语音的“情感”革命最近在语音合成圈子里&#xff0c;一个名为ChatTTS的项目热度持续攀升。作为一个长期关注语音技术发展的从业者&#xff0c;我最初也被它“高质量、多语言、可控性强”的描述所吸引。但真正上手后才发现&#xff0c;这个项目…...