Flutter地理位置获取插件tldr_get_location的使用
Flutter地理位置获取插件tldr_get_location的使用
简介
TLDR get location
是一个简单的 Flutter 插件,用于获取当前用户的位置,且无需编写大量样板代码。
截图
开始使用
Android 配置
在 app
模块下的 AndroidManifest.xml
文件中添加以下权限:
<manifest>
...
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...
</manifest>
iOS 配置
在 info.plist
文件中添加以下配置:
<dict>
...
<key>NSLocationWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>
...
</dict>
初始化插件
首先,确保你的 MainActivity.kt
文件继承自 FlutterFragmentActivity
而不是 FlutterActivity
,否则会报错:
//import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
}
使用方法
该插件提供了两个方法:requestLocationPermission
和 getCurrentLocation
。
requestLocationPermission
用于请求位置权限,并返回true
或false
。getCurrentLocation
用于获取当前位置,并返回一个包含latitude
和longitude
的TldrLatLng
对象。
初始化插件
final locationPlugin = TldrGetLocation();
请求位置权限
final bool permissionGranted = await locationPlugin.requestLocationPermission();
获取当前位置
TldrLatLng? location = await locationPlugin.getCurrentLocation();
double? latitude = location?.latitude;
double? longitude = location?.longitude;
完整示例
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:tldr_get_location/model.dart';
import 'package:tldr_get_location/tldr_get_location.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('TldrGetLocation 插件示例应用'),
),
body: const LocationWidget(),
),
);
}
}
class LocationWidget extends StatefulWidget {
const LocationWidget({super.key});
[@override](/user/override)
State<LocationWidget> createState() => _LocationWidgetState();
}
class _LocationWidgetState extends State<LocationWidget> {
final _tldrGetLocationPlugin = TldrGetLocation();
String _locationMessage = "尚未获取到位置信息";
bool? _permissionGranted;
void _requestLocationPermission() async {
final bool permissionGranted = await _tldrGetLocationPlugin.requestLocationPermission();
setState(() {
_permissionGranted = permissionGranted;
});
}
void _getLocation() async {
if (_permissionGranted == null || !_permissionGranted!) {
showErrorDialog(context, "请先请求位置权限");
return;
}
final TldrLatLng? location = await _tldrGetLocationPlugin.getCurrentLocation();
if (location != null) {
setState(() {
_locationMessage = "纬度: ${location.latitude}, 经度: ${location.longitude}";
});
} else {
setState(() {
_locationMessage = "未能获取到位置信息";
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_permissionGranted == null
? "尚未请求位置权限"
: _permissionGranted!
? "位置权限已授予"
: "位置权限被拒绝"),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _requestLocationPermission,
child: const Text('请求位置权限'),
),
const SizedBox(
height: 20,
),
Text(_locationMessage),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _getLocation,
child: const Text('获取位置'),
),
],
),
);
}
}
void showErrorDialog(BuildContext context, String errorMessage) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("错误"),
content: Text(errorMessage),
actions: [
Center(
child: ElevatedButton(
child: Text("确定"),
onPressed: () {
Navigator.of(context).pop();
},
))
]);
},
);
}
更多关于Flutter地理位置获取插件tldr_get_location的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复