Flutter位置选择插件location_picker_flutter的使用
Flutter位置选择插件location_picker_flutter的使用
插件介绍
LocationPickerFlutter
是一个可定制的 Flutter 插件,允许用户通过 Google Maps 选择位置。它集成了 Google Maps、Places API 和 Geolocation 服务,提供无缝的位置选择体验。用户可以选择地图上的位置、使用当前位置或通过 Google Places Autocomplete 搜索位置。
特性
- Google Maps 集成:支持交互式位置选择。
- 搜索功能:使用 Google Places Autocomplete 进行搜索。
- 地图类型显示/隐藏:可以显示或隐藏地图类型(卫星、地形等)。
- 缩放和旋转手势支持:支持缩放和旋转手势。
- 当前位置检测与导航:支持检测当前位置并进行导航。
- 自定义位置详情展示:支持自定义位置详情展示。
- 会话令牌支持:支持为 Google Places API 请求提供会话令牌。
安装
要在项目中使用此插件,请将其添加到 pubspec.yaml
文件中:
dependencies:
location_picker_flutter: ^1.0.0
开始使用
- 添加您的 Google Maps API Key 到插件构造函数中。
- 自定义
InitialSettings
来指定初始位置和其他设置。 - 在需要位置选择的地方使用
LocationPickerFlutter
插件。
添加 Google Maps API Key
在 Android 和 iOS 上分别添加 API key。
Android
- 打开
AndroidManifest.xml
文件中的<android/app/src/main/>
目录。 - 在
<application>
标签内添加以下内容:
替换<meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_GOOGLE_MAPS_API_KEY" />
YOUR_GOOGLE_MAPS_API_KEY
为您的实际 Google Maps API key。
iOS
- 打开
AppDelegate.swift
文件中的ios/Runner/
目录。 - 导入 Google Maps:
import GoogleMaps
- 在
@UIApplicationMain
中的didFinishLaunchingWithOptions
方法内添加以下代码:
替换GMSServices.provideAPIKey("YOUR_GOOGLE_MAPS_API_KEY")
YOUR_GOOGLE_MAPS_API_KEY
为您的实际 key。
示例用法
import 'package:flutter/material.dart';
import 'package:location_picker_flutter/location_picker_flutter.dart';
import 'package:location_picker_flutter/models/initial_settings.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Location Picker',
home: Scaffold(
appBar: AppBar(title: Text('Location Picker Example')),
body: LocationPickerFlutter(
googleMapsApiKey: 'YOUR_GOOGLE_MAPS_API_KEY', // Your API key here
intialLocation: InitialSettings(
latitude: 37.7749,
longitude: -1122.4194,
zoomLevel: 10,
),
showMapTypes: true,
showZoomControls: true,
canZoom: true,
canRotate: true,
searchHint: "Search for locations...",
sessionToken: "", // Optionally provide a session token
),
),
);
}
}
构造函数参数
googleMapsApiKey
: 字符串 - 您的 Google Maps API key。intialLocation
:InitialSettings
- 地图的初始设置,包括起始位置和缩放级别。showMapTypes
: 布尔 - 是否显示地图类型(默认为false
)。showBuildings
: 布尔 - 是否显示 3D 视图中的建筑物(默认为true
)。showZoomControls
: 布尔 - 是否显示缩放控件(默认为false
)。canZoom
: 布尔 - 是否启用缩放(默认为true
)。canRotate
: 布尔 - 是否启用旋转(默认为true
)。searchHint
: 字符串 - 搜索栏的提示文本(默认为"Search for location, landmarks..."
)。sessionToken
: 字符串 - 可选的会话令牌用于 Google Places API 请求。
许可权限
确保您的应用已添加了必要的位置访问权限。
Android
在 AndroidManifest.xml
中添加以下内容:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
iOS
在 Info.plist
中添加这些内容:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your custom message here</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Your custom message here</string>
更多关于Flutter位置选择插件location_picker_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter位置选择插件location_picker_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 location_picker_flutter
插件的详细代码示例。这个插件允许用户在地图上选择一个位置,并返回该位置的经纬度信息。
首先,你需要在你的 pubspec.yaml
文件中添加 location_picker_flutter
依赖:
dependencies:
flutter:
sdk: flutter
location_picker_flutter: ^latest_version # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,在你的 Dart 文件中,你可以按照以下方式使用 location_picker_flutter
插件:
import 'package:flutter/material.dart';
import 'package:location_picker_flutter/location_picker_flutter.dart';
import 'package:geolocator/geolocator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Location Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LocationPickerScreen(),
);
}
}
class LocationPickerScreen extends StatefulWidget {
@override
_LocationPickerScreenState createState() => _LocationPickerScreenState();
}
class _LocationPickerScreenState extends State<LocationPickerScreen> {
LocationResult? _pickedLocation;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Location Picker Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_pickedLocation == null
? Text('No location picked yet.')
: Text(
'Picked Location:\nLatitude: ${_pickedLocation!.latitude}\nLongitude: ${_pickedLocation!.longitude}',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// Check permission before opening location picker
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Location services are disabled.');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return Future.error('Location permissions are denied');
}
}
if (permission == LocationPermission.deniedForever) {
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
// Open location picker
final result = await showLocationPicker(
context: context,
initialPosition:
LatLng(_pickedLocation?.latitude ?? 0, _pickedLocation?.longitude ?? 0) ??
LatLng(0, 0), // Use current location if available, otherwise default to 0,0
);
if (result != null && result.runtimeType == LocationResult) {
setState(() {
_pickedLocation = result;
});
}
},
child: Text('Pick Location'),
),
],
),
),
);
}
}
代码说明:
-
依赖导入:
- 导入
flutter/material.dart
以使用 Flutter 的 Material 组件。 - 导入
location_picker_flutter/location_picker_flutter.dart
以使用位置选择器。 - 导入
geolocator/geolocator.dart
以处理位置权限和当前位置获取。
- 导入
-
主应用:
MyApp
类是应用的主入口,它设置了应用的主题和主屏幕。
-
位置选择屏幕:
LocationPickerScreen
类是显示位置选择器的屏幕。_pickedLocation
变量存储用户选择的位置。
-
UI 构建:
- 使用
Scaffold
和AppBar
构建应用的基本布局。 - 使用
Column
布局显示当前选择的位置(如果有)和一个按钮来打开位置选择器。
- 使用
-
位置选择器逻辑:
- 在按钮的
onPressed
回调中,首先检查位置服务是否启用。 - 然后检查并请求位置权限。
- 使用
showLocationPicker
函数显示位置选择器,并将用户选择的位置存储在_pickedLocation
中。
- 在按钮的
确保在 Android 和 iOS 上正确配置位置权限。你可以在 AndroidManifest.xml
和 Info.plist
中添加必要的权限声明。
这个示例展示了如何使用 location_picker_flutter
插件在 Flutter 应用中实现位置选择功能。你可以根据需要进一步定制和扩展这个示例。