Flutter地图位置展示插件mappls_place_widget的使用
Flutter 地图位置展示插件 mappls_place_widget 的使用
Mappls Search Widget 包含了地点自动补全和地点选择器。
开始使用 Mappls Search Widget 在 Flutter 中
在你的项目的 pubspec.yaml
文件中添加以下依赖:
dependencies:
mappls_place_widget: ^1.0.2
现在在你的 Dart 代码中导入这个包:
import 'package:mappls_place_widget/mappls_place_widget.dart';
添加 Mappls 密钥
你必须通过 MapplsAccountManager
类提供你的密钥。点击这里
地点自动补全
使用方法 openPlaceAutocomplete
打开地点自动补全组件:
import 'dart:convert';
// 平台消息可能会失败,所以我们使用 try/catch 来捕获 PlatformException。
try {
ELocation eLocation = await openPlaceAutocomplete(PlaceOptions(
enableTextSearch: true,
hint: "搜索地点"
));
print(jsonEncode(eLocation.toJson()));
} on PlatformException {
// 处理错误
}
你可以使用 PlaceOptions
来设置组件的属性:
-
filter(String)
: 此参数帮助你限制结果范围,可以指定一个有界的区域或某个 eloc(6位数字编码,用于任何POI、地区、城市等)。例如:filter
= bounds: 28.598882, 77.212407; 28.467375, 77.353513 (纬度,经度)filter
= cop: YMCZ0J (字符串)
-
hint(String)
: 设置搜索视图的提示信息。 -
historyCount(int)
: 最大历史记录结果数量。 -
pod(String)
: 这个参数用于限制结果到特定类型的地方。例如:- AutoSuggestCriteria.POD_SUB_LOCALITY
- AutoSuggestCriteria.POD_LOCALITY
- AutoSuggestCriteria.POD_CITY
- AutoSuggestCriteria.POD_VILLAGE
- AutoSuggestCriteria.POD_SUB_DISTRICT
- AutoSuggestCriteria.POD_DISTRICT
- AutoSuggestCriteria.POD_STATE
- AutoSuggestCriteria.POD_SUB_SUB_LOCALITY
-
backgroundColor(String)
: 搜索组件的背景颜色。 -
toolbarColor(String)
: 设置组件工具栏的颜色。 -
saveHistory(bool)
: 如果设置为true
,则会显示已选的历史数据。 -
tokenizeAddress(bool)
: 提供结构化的地址属性。 -
zoom(double)
: 设置当前地图的缩放级别(最小值:4,最大值:18)。 -
location(LatLng)
: 设置搜索将围绕的中心位置。 -
attributionHorizontalAlignment(int)
: 设置 attribution 的水平对齐方式。值包括:
- PlaceOptions.GRAVITY_LEFT
- PlaceOptions.GRAVITY_CENTER
- PlaceOptions.GRAVITY_RIGHT
attributionVerticalAlignment(int)
: 设置 attribution 的垂直对齐方式。值包括:
- PlaceOptions.GRAVITY_TOP
- PlaceOptions.GRAVITY_BOTTOM
logoSize(int)
: 设置 logo 的大小。值包括:
- PlaceOptions.SIZE_SMALL
- PlaceOptions.SIZE_MEDIUM
- PlaceOptions.SIZE_LARGE
地点选择器
使用方法 openPlacePicker
打开地点选择器:
try {
Place place = await openPlacePicker(PickerOption(
includeSearch: true
));
print(jsonEncode(place.toJson()));
} on PlatformException {
// 处理错误
}
你可以使用 PickerOption
来设置组件的属性:
-
includeDeviceLocationButton(bool)
: 启用或禁用当前位置功能。 -
includeSearch(bool)
: 提供搜索位置的功能。 -
mapMaxZoom(double)
: 设置地图的最大缩放级别。 -
mapMinZoom(double)
: 设置地图的最小缩放级别。 -
placeOptions(PlaceOptions)
: 设置所有搜索组件的属性。 -
toolbarColor(String)
: 设置地点组件的工具栏颜色。 -
marker(Uint8List)
: 更改位于地图中心的标记图像。 -
startingCameraPosition(CameraPosition)
: 打开一个设置了相机位置的地图,可以设置缩放、中心、方向等。 -
startingBounds(LatLngBounds)
: 打开一个在指定边界内的地图。
完整示例代码
以下是完整的示例代码,展示了如何在 Flutter 应用中使用 mappls_place_widget
插件。
import 'package:flutter/material.dart';
import 'package:mappls_place_widget/mappls_place_widget.dart';
void main() {
runApp(MaterialApp(
home: MyApp(),
routes: <String, WidgetBuilder>{
'/PlaceSearchWidget': (BuildContext context) => PlaceSearchWidget(),
'/PlacePickerWidget': (BuildContext context) => PlacePickerWidget(),
},
));
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static const String MAP_SDK_KEY = "YOUR_MAP_SDK_KEY";
static const String REST_API_KEY = "YOUR_REST_API_KEY";
static const String ATLAS_CLIENT_ID = "YOUR_ATLAS_CLIENT_ID";
static const String ATLAS_CLIENT_SECRET = "YOUR_ATLAS_CLIENT_SECRET";
[@override](/user/override)
void initState() {
super.initState();
MapplsAccountManager.setMapSDKKey(MAP_SDK_KEY);
MapplsAccountManager.setRestAPIKey(REST_API_KEY);
MapplsAccountManager.setAtlasClientId(ATLAS_CLIENT_ID);
MapplsAccountManager.setAtlasClientSecret(ATLAS_CLIENT_SECRET);
}
// 打开地点自动补全
openPlaceSearch(BuildContext context) {
Navigator.pushNamed(context, '/PlaceSearchWidget');
}
// 打开地点选择器
openPlacePicker(BuildContext context) {
Navigator.pushNamed(context, '/PlacePickerWidget');
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Column(
children: [
SizedBox(height: 20),
TextButton(
onPressed: () => openPlaceSearch(context),
child: Text("地点自动补全"),
),
SizedBox(height: 20),
TextButton(
onPressed: () => openPlacePicker(context),
child: Text("地点选择器"),
),
],
),
),
);
}
}
更多关于Flutter地图位置展示插件mappls_place_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图位置展示插件mappls_place_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用mappls_place_widget
插件来展示地图位置的代码案例。这个插件假设是用于显示特定位置的标记(place marker)和相关信息。由于mappls_place_widget
不是一个广泛知名的Flutter插件,我假设它的使用方式类似于其他地图插件,例如flutter_map
或google_maps_flutter
。
首先,确保在pubspec.yaml
文件中添加依赖项(注意:mappls_place_widget
需要替换为实际插件名称,如果它存在的话;这里仅为示例):
dependencies:
flutter:
sdk: flutter
mappls_place_widget: ^x.y.z # 替换为实际版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下方式使用mappls_place_widget
(假设它提供了类似的功能):
import 'package:flutter/material.dart';
import 'package:mappls_place_widget/mappls_place_widget.dart'; // 替换为实际导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Map Place Widget Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MapScreen(),
);
}
}
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
// 假设这是你要展示的位置信息
final LatLng initialPosition = LatLng(37.7749, -122.4194); // 例如:旧金山
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Map with Place Widget'),
),
body: Center(
child: MapplsPlaceWidget(
initialCameraPosition: CameraPosition(
target: initialPosition,
zoom: 14.0,
),
places: [
Place(
position: initialPosition,
title: 'San Francisco',
description: 'A beautiful city in California',
),
// 可以添加更多位置
],
onPlaceTap: (Place place) {
// 当点击位置标记时的回调
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('You tapped on ${place.title}'),
),
);
},
),
),
);
}
}
// 假设这是Place类的定义,根据插件的实际API可能需要调整
class Place {
final LatLng position;
final String title;
final String description;
Place({required this.position, required this.title, required this.description});
}
// 假设LatLng是一个简单的类,表示经纬度
class LatLng {
final double latitude;
final double longitude;
LatLng(this.latitude, this.longitude);
}
// 假设CameraPosition是定义地图初始视角的类
class CameraPosition {
final LatLng target;
final double zoom;
CameraPosition({required this.target, required this.zoom});
}
注意:
- 上面的代码是基于假设的
mappls_place_widget
插件的API。实际使用时,你需要查阅该插件的官方文档来获取正确的API和使用方法。 LatLng
和CameraPosition
类在这里是假设的,实际插件可能已经有了这些类或者提供了类似的类。Place
类也是根据假设创建的,用于存储位置信息。实际插件可能有自己的数据模型。
如果mappls_place_widget
插件实际上不存在或者API不同,请参考类似地图插件(如flutter_map
或google_maps_flutter
)的文档来实现功能。