【Flutter】Flutter 使用 geolocator 包进行地理定位、距离计算
文章目录
- 一、前言
- 二、安装和基本使用
- 1. 如何安装 geolocator 包
- 2. 获取设备的当前位置
- 3. 获取设备的最后已知位置
- 三、实际业务中的用法
- 1. 连续定位更新
- 2. 计算两个地理坐标之间的距离
- 3. 检查和请求位置权限
- 四、完整示例
- 五、总结
一、前言
在现代移动应用开发中,地理定位已经成为了一项常用的功能。无论是地图导航、天气预报还是本地生活服务,地理定位都扮演着重要的角色。本文将介绍如何在 Flutter 项目中使用 geolocator 包进行地理定位。
版本信息:
- Flutter 版本:3.10
- Dart 版本:3.0
- geolocator 包版本:10.0.0
你是否对成为 Flutter 高手充满渴望,想要掌握更多前沿技巧和最佳实践?现在,你的机会来了!
🚀 Flutter 从零到一:基础入门到应用上线全攻略 正在热烈招募参与者!
✅ 这个专栏不仅包括了全面的 Flutter 学习资源,还有实用的代码示例和深入的解析教程。
✅ 专栏内容会持续更新,价格也会随之上涨。现在加入,享受最优惠的价格,抓住属于你的机会!
✅ 想要与其他 Flutter 学习者互动交流吗?点击这里 加入我们的讨论群,一起成长、一起进步。
别再等待,让我们今天就启程,共同开启 Flutter 的精彩学习之旅吧!
二、安装和基本使用
1. 如何安装 geolocator 包
在 Flutter 项目中使用 geolocator 包非常简单,首先需要在 pubspec.yaml
文件中添加依赖:
dependencies:
geolocator: ^10.0.0
然后运行 flutter pub get
安装包。
2. 获取设备的当前位置
要获取设备的当前位置,可以使用以下代码:
import 'package:geolocator/geolocator.dart';
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
3. 获取设备的最后已知位置
有时,我们可能只需要获取设备的最后已知位置,而不是实时位置。这可以通过以下代码实现:
import 'package:geolocator/geolocator.dart';
Position? position = await Geolocator.getLastKnownPosition();
三、实际业务中的用法
1. 连续定位更新
在某些应用场景中,我们可能需要持续获取设备的位置信息。geolocator 包提供了这样的功能:
import 'package:geolocator/geolocator.dart';
StreamSubscription<Position> positionStream = Geolocator.getPositionStream(
locationSettings: LocationSettings(
accuracy: LocationAccuracy.high,
distanceFilter: 100,
),
).listen((Position? position) {
print(position == null ? 'Unknown' : '${position.latitude.toString()}, ${position.longitude.toString()}');
});
2. 计算两个地理坐标之间的距离
geolocator 包还提供了计算两个地理坐标之间距离的方法:
import 'package:geolocator/geolocator.dart';
double distanceInMeters = Geolocator.distanceBetween(52.2165157, 6.9437819, 52.3546274, 4.8285838);
3. 检查和请求位置权限
在使用地理定位功能之前,我们需要确保用户已经授权了位置权限。以下代码展示了如何检查和请求位置权限:
import 'package:geolocator/geolocator.dart';
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
}
这是小雨青年于 2023 年发布在 CSDN 的博客,由于目前采集站侵权行为猖獗,如果你不是在 CSDN 看到本文,麻烦你通过 CSDN 联系我,谢谢你的支持。
四、完整示例
这个完整的示例展示了如何获取用户的当前位置,并计算与预定目的地的距离。这在许多实际应用场景中都非常有用,例如导航、打车服务等。
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('地理定位示例'),
),
body: LocationWidget(),
),
);
}
}
class LocationWidget extends StatefulWidget {
_LocationWidgetState createState() => _LocationWidgetState();
}
class _LocationWidgetState extends State<LocationWidget> {
String distanceText = '点击按钮获取距离';
Future<void> getLocationAndDistance() async {
// 获取当前位置
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
// 目的地坐标
double destinationLatitude = 52.3546274;
double destinationLongitude = 4.8285838;
// 计算距离
double distanceInMeters = Geolocator.distanceBetween(
position.latitude,
position.longitude,
destinationLatitude,
destinationLongitude,
);
setState(() {
distanceText = '您距离目的地的距离为:${distanceInMeters.toString()} 米';
});
}
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(distanceText),
ElevatedButton(
onPressed: getLocationAndDistance,
child: Text('获取距离'),
),
],
),
);
}
}
点击获取距离,浏览器会弹框申请权限。
浏览器拿到权限之后,我们再次点击获取距离,即可得到当前位置和设定地点的距离。
五、总结
geolocator 包为 Flutter 开发人员提供了一种简单易用的方式来访问设备的地理位置功能。通过本文的介绍,您应该已经了解了如何安装和使用此包,以及如何将其应用于实际业务场景。
对 Flutter 感兴趣,渴望深入探索和学习吗?Flutter 从零到一:基础入门到应用上线全攻略 正是你的完美起点!
📘 在这个专栏中,你将发现丰富的 Flutter 学习资源,从代码示例到深入的技术解读,一应俱全。
🛠️ 想要了解如何用 Flutter 构建出色的应用吗?所有的秘诀和答案都在我们的专栏里等着你!
💰 别再犹豫,专栏内容将不断更新,价格也将逐渐上涨。现在就加入,享受最优惠的价格,开启你的 Flutter 探索之旅!
想了解更多?点击这里查看 Flutter Developer 101:入门小册 & 专栏指引。
👥 还有,别忘了点击这里 加入我们的讨论群,与其他 Flutter 爱好者一起交流和学习,共同成长!