Flutter地图选择插件map_picker_flutter的使用
Flutter地图选择插件map_picker_flutter的使用
Map Picker Flutter 是一个用于在 Flutter 应用中选择地图位置的插件。它支持多种平台,包括 Android、iOS、Web、Windows、Linux 和 macOS。
支持的平台
- ✅ Android;
- ✅ iOS;
- ✅ Web;
- ✅ Windows;
- ✅ Linux;
- ✅ MacOS;
维护帮助
我在维护很多仓库,并且逐渐感到疲惫。如果你能帮我打气,买杯咖啡将会让我非常高兴并获得更多能量。
目标
这个库特别为 Web 和桌面平台设计,但当然你也可以在移动设备上使用。
开始使用
首先,你需要调用 MapPicker.init()
方法来初始化插件。这一步只需要执行一次。
MapPicker.init(
/// 自定义搜索构建器小部件,如果为null,则使用包的默认值
searchBuilder: (Function(String address) search) => MyCustomWidget(),
/// 自定义地址构建器小部件,如果为null,则使用包的默认值
addressBuilder: (String address, Function done) => MyCustomWidget(),
/// 自定义进度小部件,如果为null,则使用包的默认值
progressWidget: MyCustomWidget(),
/// 自定义标记,如果为null,则使用包的默认值
marker: MyCustomWidget(),
/// 以上都是为了设置全局小部件,在任何时候你都需要调用此包
theme: MPickerTheme(
/// # 初始位置
initialLocation: LatLng(-23.572143, -46.613275),
/// # 地址未找到时显示的文本
errorAddressMissing: '错误,地址未找到。',
/// # 查找地址时出现错误时显示的文本
errorToFindAddress: '无法找到此地址,请重试。',
/// # 未选择任何地址时的初始文本
withoutAddress: '未选择地址',
/// # 如果你不使用自定义小部件,此处将显示的文本
searchHint: '在此处输入...',
searchLabel: '搜索:',
/// # 返回的Google地图API的语言
lang: 'pt-BR'),
/// 我的Google地图API密钥
key: 'YOUR_GOOGLE_API_KEY');
使用方法
现在你可以通过两种方式使用它:
移动设备
只需调用导航器并等待响应,例如:
final MPAddress address = await Navigator.push(context, MaterialPageRoute(builder: (c) => MapPicker(
/// 这里,如果你想覆盖全局参数的任何内容,可以
/// # 自定义搜索构建器小部件,如果为null,则使用全局或默认值
searchBuilder: (Function(String address) search) => MyCustomWidget(),
/// # 自定义地址构建器小部件,如果为null,则使用全局或默认值
addressBuilder: (String address, Function done) => MyCustomWidget(),
/// # 自定义进度小部件,如果为null,则使用全局或默认值
progressWidget: MyCustomWidget(),
/// # 自定义主题,如果为null,则使用全局或默认值
theme: MPickerTheme(...),
/// # 自定义标记,如果为null,则使用全局或默认值
marker: MyWidget()
)));
网页/桌面
在这个平台上,由于屏幕较大,我认为使用对话框更智能,所以我已经为你准备好了。
final MPAddress address = await MapPickerTemplate.dialogAddressPicker(
context: context);
当然,你可以在任何平台上使用这两种方式,这只是我的建议。
完整示例
以下是一个完整的示例代码,展示了如何使用 map_picker_flutter
插件。
import 'package:flutter/material.dart';
import './../lib/map_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(title: 'Map Picker', home: MainScreen());
}
}
class MainScreen extends StatelessWidget {
final control = TextEditingController();
[@override](/user/override)
Widget build(BuildContext context) {
MapPicker.init(
theme: MPickerTheme(
/// # 初始位置
initialLocation: LatLng(-23.572143, -46.613275),
/// # 地址未找到时显示的文本
errorAddressMissing: '错误,地址未找到。',
/// # 查找地址时出现错误时显示的文本
errorToFindAddress: '无法找到此地址,请重试。',
/// # 未选择任何地址时的初始文本
withoutAddress: '未选择地址',
/// # 如果你不使用自定义小部件,此处将显示的文本
searchHint: '在此处输入...',
searchLabel: '搜索:',
/// # 返回的Google地图API的语言
lang: 'pt-BR'),
key: 'YOUR_GOOGLE_API_KEY');
/// # 这里演示如何通过对话框获取地址
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () async => print('address: ${await MapPickerTemplate.dialogAddressPicker(
/// # 这里你可以传递自定义的小部件来放置文本和搜索
searchBuilder: (search) => Card(child: TextField(decoration: InputDecoration(
labelText: '搜索:',
hintText: '在此处输入...',
prefixIcon: IconButton(
icon: Icon(Icons.arrow_back_outlined),
onPressed: () => Navigator.pop(context)
),
suffixIcon: IconButton(
icon: Icon(Icons.search),
/// # 搜索时,只需调用 `search` 方法并传入地址字符串
onPressed: () => search(control.text)
)
)),
controller: control)),
/// # 这里你的自定义小部件显示当前选中的地址
addressBuilder: (txt, done) => Card(
/// # 如果你想在这里放一个按钮来完成流程,只需调用 `done` 函数
child: Container(
padding: EdgeInsets.all(10),
child: Text(txt, textAlign: TextAlign.center)
)
),
/// # 你可以传递自定义标记
marker: Icon(Icons.location_pin, color: Colors.redAccent, size: 30),
/// # 负按钮上的文本
btnCancel: '取消',
/// # 正按钮上的文本
btnSave: '保存',
context: context)}),
child: Text('地址选择器'))));
}
}
更多关于Flutter地图选择插件map_picker_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图选择插件map_picker_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
map_picker_flutter
是一个用于在 Flutter 应用程序中选择位置的插件。它允许用户在交互式地图上选择一个位置,并返回该位置的经纬度坐标。使用这个插件,你可以轻松地集成地图选择功能到你的应用中。
安装
首先,你需要在 pubspec.yaml
文件中添加 map_picker_flutter
依赖:
dependencies:
flutter:
sdk: flutter
map_picker_flutter: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
-
导入包:在你的 Dart 文件中导入
map_picker_flutter
包。import 'package:map_picker_flutter/map_picker_flutter.dart';
-
使用
MapPicker
小部件:你可以使用MapPicker
小部件来显示地图并允许用户选择位置。class MapPickerExample extends StatefulWidget { [@override](/user/override) _MapPickerExampleState createState() => _MapPickerExampleState(); } class _MapPickerExampleState extends State<MapPickerExample> { LatLng? selectedLocation; Future<void> _pickLocation() async { final LatLng? location = await Navigator.of(context).push( MaterialPageRoute( builder: (context) => MapPicker( apiKey: "YOUR_GOOGLE_MAPS_API_KEY", initialPosition: LatLng(37.7749, -122.4194), // 初始位置 ), ), ); if (location != null) { setState(() { selectedLocation = location; }); } } [@override](/user/override) Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Map Picker Example'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ if (selectedLocation != null) Text( 'Selected Location: ${selectedLocation!.latitude}, ${selectedLocation!.longitude}', ), ElevatedButton( onPressed: _pickLocation, child: Text('Pick Location'), ), ], ), ), ); } }
-
获取 Google Maps API 密钥:在使用
MapPicker
之前,你需要获取一个有效的 Google Maps API 密钥。你可以通过 Google Cloud Platform 创建一个新的项目并启用 Google Maps API 来获取密钥。 -
处理选定的位置:在用户选择位置后,
MapPicker
会返回一个LatLng
对象,其中包含所选位置的经纬度坐标。你可以使用这些坐标在你的应用中进行进一步的处理。
自定义选项
MapPicker
提供了一些自定义选项,例如设置初始位置、地图类型、标记图标等。以下是一些常用的自定义选项:
initialPosition
: 设置地图的初始中心位置。mapType
: 设置地图类型(例如,普通地图、卫星地图等)。markerIcon
: 设置地图上显示的标记图标。zoom
: 设置地图的初始缩放级别。
MapPicker(
apiKey: "YOUR_GOOGLE_MAPS_API_KEY",
initialPosition: LatLng(37.7749, -122.4194),
mapType: MapType.normal,
markerIcon: BitmapDescriptor.defaultMarker,
zoom: 12.0,
);
注意事项
- Google Maps API 密钥:确保你在
MapPicker
中使用了有效的 Google Maps API 密钥。如果密钥无效,地图将无法正常显示。 - 权限:在 Android 和 iOS 上使用地图功能时,确保你已经正确配置了所需的权限。
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 map_picker_flutter
插件:
import 'package:flutter/material.dart';
import 'package:map_picker_flutter/map_picker_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Map Picker Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MapPickerExample(),
);
}
}
class MapPickerExample extends StatefulWidget {
[@override](/user/override)
_MapPickerExampleState createState() => _MapPickerExampleState();
}
class _MapPickerExampleState extends State<MapPickerExample> {
LatLng? selectedLocation;
Future<void> _pickLocation() async {
final LatLng? location = await Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => MapPicker(
apiKey: "YOUR_GOOGLE_MAPS_API_KEY",
initialPosition: LatLng(37.7749, -122.4194), // 初始位置
),
),
);
if (location != null) {
setState(() {
selectedLocation = location;
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Map Picker Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (selectedLocation != null)
Text(
'Selected Location: ${selectedLocation!.latitude}, ${selectedLocation!.longitude}',
),
ElevatedButton(
onPressed: _pickLocation,
child: Text('Pick Location'),
),
],
),
),
);
}
}