Flutter谷歌导航插件google_navigation_flutter的使用
Flutter谷歌导航插件google_navigation_flutter
的使用
描述
此仓库包含一个Flutter插件,它为面向Android和iOS的应用程序提供了一个Google Navigation小部件。
注意
- 此包在达到1.0版本之前处于Beta阶段。根据语义化版本控制,在1.0之前可能会引入破坏性更改。
要求
Android | iOS | |
---|---|---|
支持的最低移动操作系统 | API级别23+ | iOS 15.0+ |
- 一个Flutter项目
- 一个Google Cloud项目
- 如果您是Mobility Services开发者,请按照Mobility服务文档中的说明联系销售。
- 如果您不是Mobility Services开发者,请参阅设置Google Cloud项目获取说明。
- 上述项目的API密钥
- API密钥必须为Android和iOS配置。请分别参考Android使用API密钥和iOS使用API密钥获取说明。
- 如果针对Android,安装并启用Google Play服务,且Kotlin版本最低为2.0
- 在您的应用中添加归属和许可文本
重要
- 对API密钥应用API限制,仅限于“Navigation SDK”、“Maps SDK for Android”和“Maps SDK for iOS”,以增强安全性和成本管理。这有助于防止未经授权使用您的API密钥。
安装
-
使用以下命令将Google Navigation for Flutter包添加到您的项目:
flutter pub add google_navigation_flutter
-
设置目标平台的最小平台版本。
- Android
在
android/app/build.gradle
中设置minSdkVersion
:android { defaultConfig { minSdkVersion 23 } }
- iOS
- 在您首选的IDE中打开
ios/Podfile
配置文件。 - 将以下行添加到Podfile的开头:
# Set platform to 15.0 to enable latest Google Maps SDK platform :ios, '15.0'
- 在您首选的IDE中打开
- Android
在
-
使用这些说明将API密钥添加到Flutter项目的相应Android(
build.gradle
)和iOS(AppDelegate.swift
)文件中。
使用
您可以现在在小部件树中添加一个GoogleMapsNavigationView
小部件。
视图可以通过传递给onViewCreated
回调的GoogleNavigationViewController
进行控制。
GoogleMapsNavigationView
小部件应在一个具有限定大小的小部件内使用。如果在未限定大小的小部件中使用,应用程序将抛出Flutter异常。
您还可以添加一个裸GoogleMapsMapView
,它作为普通地图视图工作,但没有导航功能。
添加导航视图
import 'package:flutter/material.dart';
import 'package:google_navigation_flutter/google_navigation_flutter.dart';
class NavigationSample extends StatefulWidget {
const NavigationSample({super.key});
@override
State<NavigationSample> createState() => _NavigationSampleState();
}
class _NavigationSampleState extends State<NavigationSample> {
GoogleNavigationViewController? _navigationViewController;
bool _navigationSessionInitialized = false;
@override
void initState() {
super.initState();
_initializeNavigationSession();
}
Future<void> _initializeNavigationSession() async {
if (!await GoogleMapsNavigator.areTermsAccepted()) {
await GoogleMapsNavigator.showTermsAndConditionsDialog(
'Example title',
'Example company',
);
}
// 确保用户已授予位置权限后才开始导航会话。
await GoogleMapsNavigator.initializeNavigationSession();
setState(() {
_navigationSessionInitialized = true;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Google Maps Navigation Sample')),
body: _navigationSessionInitialized
? GoogleMapsNavigationView(
onViewCreated: _onViewCreated,
initialNavigationUIEnabledPreference: NavigationUIEnabledPreference.disabled,
// 其他视图初始化设置
)
: const Center(child: CircularProgressIndicator()),
);
}
void _onViewCreated(GoogleNavigationViewController controller) {
_navigationViewController = controller;
controller.setMyLocationEnabled(true);
// 可在此处添加其他设置。
}
@override
void dispose() {
if (_navigationSessionInitialized) {
GoogleMapsNavigator.cleanup();
}
super.dispose();
}
}
添加地图视图
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Google Maps Navigation Sample')),
body: _navigationSessionInitialized
? GoogleMapsMapView(
onViewCreated: _onViewCreated,
initialCameraPosition: CameraPosition(
// 初始化地图到用户位置。
target: _userLocation!,
zoom: 15,
),
// 其他视图初始化设置
)
: const Center(child: CircularProgressIndicator()),
);
}
请求和处理权限
Google Navigation SDK Flutter插件提供了需要特定移动操作系统权限的功能。这些包括但不限于位置服务、后台执行和接收后台位置更新。
示例代码:请求位置权限
PermissionStatus _locationPermissionStatus = PermissionStatus.denied;
// ...
/// 请求访问设备位置的权限。
///
/// Android:精细和粗略定位
/// iOS:CoreLocation(始终和使用时)
Future<void> _requestLocationPermission() async {
final PermissionStatus status = await Permission.location.request();
setState(() {
_locationPermissionStatus = status;
});
}
// ...
@override
Widget build(BuildContext context) {
_requestLocationPermission();
...
}
完整的示例可以在这里找到。
贡献
请参阅贡献指南。
支持
此软件包通过开源许可证提供。它不受Google Maps Platform支持技术支援服务指南、SLA或弃用政策的约束(但是,库使用的任何Google Maps Platform服务仍然受Google Maps Platform条款和服务的约束)。
如果您发现错误或有功能请求,请在GitHub上提交问题。如果您想从其他Google Maps Platform开发人员那里获得技术问题的答案,请通过我们的开发人员社区渠道之一提问。如果您想做出贡献,请查看贡献指南。
更多关于Flutter谷歌导航插件google_navigation_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html