赞
踩
本文所介绍的获取地理位置信息的Flutter插件是基于高德地图的,所以前期需要针对高德平台做一些准备工作。
1. 申请高德地图的KEY
1. Android版本申请
参考:http://lbs.amap.com/api/android-sdk/guide/create-project/get-key
2. IOS版本申请
参考:http://lbs.amap.com/api/ios-sdk/guide/create-project/get-key
2. 项目中集成高德地图
1. Android版本集成
代码如下:
android {
defaultConfig {
manifestPlaceholders = [
AMAP_KEY : "aa9f0cf8574400f2af0078392c556e25",
]
}
dependencies {
implementation 'com.amap.api:location:latest.integration'
}
}
1. 安装插件
配置 amap_location 插件。
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
date_format: ^1.0.6
flutter_cupertino_date_picker: ^1.0.26+2
flutter_swiper: ^1.1.6
fluttertoast: ^7.1.6
http: ^0.12.2
dio: ^3.0.10
flutter_html: ^1.1.0
flutter_inappwebview: ^4.0.0+4
device_info: ^1.0.0
# 地理定位
amap_location: ^0.2.0
- 在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。
-
- 如果无法正常下载,执行 flutter pub get 。
-
- 2. 引入插件
-
- 在需要用到的该插件的文件中引入插件包。
-
- import 'package:amap_location/amap_location.dart';
- 3. 使用插件
-
- (1). 启动
-
- // 启动一下
- await AMapLocationClient.startup(new AMapLocationOption(
- desiredAccuracy: CLLocationAccuracy.kCLLocationAccuracyHundredMeters
- ));
- (2). 获取地理位置
-
- // 获取地理位置
- var result = await AMapLocationClient.getLocation(true);
- setState(() {
- this._longitude = result.longitude;
- this._latitude = result.latitude;
- });
- (3). 监听地理位置改变
-
- // 监听地理位置改变
- AMapLocationClient.onLocationUpate.listen((AMapLocation loc){
- if(!mounted)return;
- setState(() {
- // ...
- // ...
- });
- });
- AMapLocationClient.startLocation();
-
- (4). 停止监听定位
-
- AMapLocationClient.stopLocation();
- (5). 消毁监听事件
-
- void dispose() {
- // 注意这里关闭
- AMapLocationClient.shutdown();
- super.dispose();
- }
- (6). 代码示例
-
- import 'package:flutter/material.dart';
- import 'package:amap_location/amap_location.dart';
-
- class LocationPage extends StatefulWidget {
- LocationPage({Key key}) : super(key: key);
- _LocationPageState createState() => _LocationPageState();
- }
-
- class _LocationPageState extends State<LocationPage> {
-
- double _longitude = 0;
- double _latitude = 0;
-
- @override
- void initState() {
- super.initState();
- // 获取地理定位
- this._getLocation();
- }
-
- void _getLocation() async {
-
- // 启动一下
- await AMapLocationClient.startup(new AMapLocationOption(
- desiredAccuracy: CLLocationAccuracy.kCLLocationAccuracyHundredMeters
- ));
-
- // 获取地理位置
- var result = await AMapLocationClient.getLocation(true);
- setState(() {
- this._longitude = result.longitude;
- this._latitude = result.latitude;
- });
-
- }
-
- // 监听地理位置
- // void _listenLocation(){
- // AMapLocationClient.onLocationUpate.listen((AMapLocation loc){
- // if(!mounted)return;
- // setState(() {
-
- // });
- // });
- // AMapLocationClient.startLocation();
- // }
-
- // // 停止监听地理位置
- // void _stopListenLocation(){
- // AMapLocationClient.stopLocation();
- // }
-
- @override
- void dispose() {
- // 关闭
- AMapLocationClient.shutdown();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- title: Text("地理定位"),
- ),
- body: Center(
- child:Column(
- children: <Widget>[
- Text("经度:${this._longitude}"),
- Text("纬度:${this._latitude}"),
- ],
- )
- )
- );
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。