Flutter谷歌地图辅助插件google_maps_helper的使用
Flutter谷歌地图辅助插件google_maps_helper的使用
google_maps_helper
是一个扩展了 google_maps_flutter
的Flutter包,提供了包括地点自动补全文本框、绘制折线、地理编码和反向地理编码等在内的必要功能。
特性
- 集成了所有Google地图的功能于一个包中
- 提供了用于Google地点搜索的自动补全文本框
- 在Google地图上绘制折线
- 地理编码:从地址获取地理坐标
- 反向地理编码:从地理坐标获取地址
- 不需要单独引入
google_maps_flutter
包 - 易于使用且高度可定制
开始使用
- 查看 google_maps_flutter 的设置说明。
- 从2.0.0版本开始,此包使用新的“Places API”进行地址搜索,请确保在你的Google Cloud项目中启用了新的“Places API”。
使用方法
Google地点自动补全文本框
Widget get _searchField {
return GmhSearchField(
selectedValue: _address,
onSelected: (data) => _address = data,
searchParams: GmhSearchParams(apiKey: '<GOOGLE_PLACES_API_NEW_KEY>'),
);
}
使用搜索函数创建自己的自动补全功能
await GmhService().searchAddress(
text: 'califor',
params: GmhSearchParams(apiKey: '<GOOGLE_PLACES_API_NEW_KEY>'),
).listen((data) {
// 在你的UI中显示这个列表
print(data.length);
});
Google地图小部件
GoogleMapController? _controller;
final _kSrc = CameraPosition(
target: LatLng(37.4165849896396, -122.08051867783071),
);
final _kDest = CameraPosition(
target: LatLng(37.420921119071586, -122.08535335958004),
);
Widget get _map {
return GmhMap(
mapOptions: GmhMapOptions(
mapType: MapType.normal,
initialCameraPosition: _kSrc,
onTap: (pos) => _getAddress(pos),
minMaxZoomPreference: MinMaxZoomPreference(15, 18),
onMapCreated: (controller) => _controller = controller,
markers: {
Marker(markerId: MarkerId('src'), position: _kSrc.target),
Marker(markerId: MarkerId('dest'), position: _kDest.target),
},
),
polylineOptions: GmhPolylineOptions(
geodesic: true,
color: Colors.blue,
optimizeWaypoints: true,
apiKey: '<GOOGLE_DIRECTIONS_API_KEY>',
),
);
}
地理编码
Future<void> _getGeocode(String address) async {
final data = await GmhService().getGeocode(
address: address,
apiKey: '<GOOGLE_GEOCODING_API_KEY>',
);
print('${data?.lat},${data?.lng}');
}
反向地理编码
Future<void> _getAddress(LatLng pos) async {
final data = await GmhService().getAddress(
lat: pos.latitude,
lng: pos.longitude,
apiKey: '<GOOGLE_GEOCODING_API_KEY>',
);
print(data?.address);
}
示例代码
下面是一个完整的示例,展示了如何集成google_maps_helper
到你的应用中:
// ignore_for_file: unused_field
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_helper/google_maps_helper.dart';
void main() => runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
GmhAddressData? _address;
GoogleMapController? _controller;
final _kSrc = CameraPosition(
zoom: 18,
target: LatLng(37.4165849896396, -122.08051867783071),
);
final _kDest = CameraPosition(
zoom: 15,
target: LatLng(37.420921119071586, -122.08535335958004),
);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Google Maps Helper')),
body: SafeArea(child: Stack(children: [_map, _searchField])),
),
);
}
/// Google map widget
Widget get _map {
return GmhMap(
mapOptions: GmhMapOptions(
mapType: MapType.normal,
initialCameraPosition: _kSrc,
onTap: (pos) => _getAddress(pos),
minMaxZoomPreference: MinMaxZoomPreference(15, 18),
onMapCreated: (controller) => _controller = controller,
markers: {
Marker(markerId: MarkerId('src'), position: _kSrc.target),
Marker(markerId: MarkerId('dest'), position: _kDest.target),
},
),
polylineOptions: GmhPolylineOptions(
geodesic: true,
color: Colors.blue,
optimizeWaypoints: true,
apiKey: '<GOOGLE_DIRECTIONS_API_KEY>',
),
);
}
/// Auto-complete places search field
Widget get _searchField {
return GmhSearchField(
selectedValue: _address,
onSelected: (data) => _address = data,
searchParams: GmhSearchParams(apiKey: '<GOOGLE_PLACES_API_KEY>'),
);
}
/// REVERSE GEOCODING: Get address from geocode
Future<void> _getAddress(LatLng pos) async {
final data = await GmhService().getAddress(
lat: pos.latitude,
lng: pos.longitude,
apiKey: '<GOOGLE_GEOCODING_API_KEY>',
);
if (kDebugMode) print(data?.address);
if (data != null) _getGeocode(data.address);
}
/// GEOCODING: Get geocode from an address
Future<void> _getGeocode(String address) async {
final data = await GmhService().getGeocode(
address: address,
apiKey: '<GOOGLE_GEOCODING_API_KEY>',
);
if (kDebugMode) print('${data?.lat},${data?.lng}');
}
}
更多关于Flutter谷歌地图辅助插件google_maps_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter谷歌地图辅助插件google_maps_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于Flutter中google_maps_helper
插件的使用,以下是一个简单的代码示例,展示了如何在Flutter应用中使用这个插件来集成和显示Google地图。需要注意的是,google_maps_helper
并不是一个官方的Flutter插件,而是一个社区提供的库,所以它的具体API和使用方法可能会有所不同。不过,基于一般的地图插件使用方法,我们可以给出一个类似的示例。如果google_maps_helper
有特定的API,你可能需要根据其文档进行调整。
在实际开始之前,请确保你已经完成了以下步骤:
- 在
pubspec.yaml
文件中添加google_maps_flutter
和google_maps_helper
(如果确实存在)的依赖。注意,google_maps_helper
可能不是一个真实存在的插件,这里我们假设它存在,并基于一般的地图插件逻辑给出示例。如果实际不存在,你需要使用google_maps_flutter
或其他类似的插件。
dependencies:
flutter:
sdk: flutter
google_maps_flutter: ^x.y.z # 替换为最新版本号
google_maps_helper: ^a.b.c # 假设存在,替换为最新版本号
- 获取Google Maps API密钥,并在
android/app/src/main/AndroidManifest.xml
和ios/Runner/Info.plist
中配置。
以下是一个基于google_maps_flutter
(假设google_maps_helper
提供类似功能)的示例代码:
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
// import 'package:google_maps_helper/google_maps_helper.dart'; // 如果存在的话
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Google Maps Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MapScreen(),
);
}
}
class MapScreen extends StatefulWidget {
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
GoogleMapController? _controller;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Google Maps'),
),
body: GoogleMap(
mapType: MapType.hybrid,
initialCameraPosition: CameraPosition(
target: LatLng(-34.397, 150.644),
zoom: 11.0,
),
onMapCreated: (GoogleMapController controller) {
_controller = controller;
// 如果google_maps_helper有特定的初始化代码,可以在这里调用
// GoogleMapsHelper.initialize(controller); // 假设的API调用
},
markers: Set<Marker>.of([
Marker(
markerId: MarkerId('marker_id_1'),
position: LatLng(-34.397, 150.644),
infoWindow: InfoWindow(title: 'Sydney', snippet: 'Australia'),
),
]),
),
floatingActionButton: FloatingActionButton(
onPressed: _goToTheLake,
tooltip: 'Go to the lake',
child: Icon(Icons.directions_boat),
),
);
}
Future<void> _goToTheLake() async {
final GoogleMapController? controller = _controller;
if (controller != null) {
final CameraPosition lake = CameraPosition(
bearing: 191.2063446153867,
target: LatLng(-37.8136, 144.9631),
tilt: 59.440717697143225,
zoom: 14.47461895815727,
);
controller!.animateCamera(CameraUpdate.newCameraPosition(lake));
}
}
}
这个示例展示了如何在Flutter应用中集成Google Maps,并设置了一个初始的地图视图、一个标记点以及一个用于改变地图视角的浮动操作按钮。如果google_maps_helper
提供了额外的辅助功能(比如简化地图配置、添加自定义覆盖层等),你需要查阅其官方文档来了解如何具体使用这些功能,并相应地修改上述代码。
由于google_maps_helper
可能不是一个真实存在的插件,上述代码是基于google_maps_flutter
插件编写的。如果你确实找到了一个名为google_maps_helper
的插件,并且它有特定的API,请参考其官方文档进行实现。