Flutter路线导航插件graphhopper_route_navigation的使用
Flutter路线导航插件 graphhopper_route_navigation
的使用
graphhopper_route_navigation
是一个用于地图路线导航的新插件。它基于 Maplibre 地图作为基础层和样式,并使用 GraphHopper 提供的路线导航数据(包括折线、时间和距离等信息),结合 Getx 进行状态管理。
开始之前
简介
这个插件为 Flutter 应用提供了一个简单的方式来集成路线导航功能。它使用了 Maplibre 作为地图的基础层,GraphHopper 提供的 API 来获取路线数据,并通过 Getx 来管理应用的状态。
设置
Android 设置
在 AndroidManifest.xml
文件中添加以下权限以启用位置服务:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
iOS 设置
该插件尚未在 iOS 设备上进行测试。
如何使用?
导入包
首先,在你的 Dart 文件中导入 graphhopper_route_navigation
包:
import 'package:graphhopper_route_navigation/graphhopper_route_navigation.dart';
示例代码
下面是一个简单的示例,展示如何使用该插件来实现从当前位置到指定目的地的导航功能:
MaterialButton(
onPressed: () async {
ApiRequest apiRequest = ApiRequest();
DirectionRouteResponse directionRouteResponse = await apiRequest.getDrivingRouteUsingGraphHooper(
source: userLocation!.position,
destination: latLng,
customBaseUrl: dotenv.env["CUSTOM_BASE_URL"],
navigationType: NavigationProfile.car,
graphHooperApiKey: dotenv.env["API_KEY"] ?? "Your GraphHooper API key"
);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => NavigationWrapperScreen(
directionRouteResponse: directionRouteResponse),
));
},
child: Text('Navigate'),
)
在这个例子中,我们创建了一个按钮,当点击时会调用 getDrivingRouteUsingGraphHooper
方法获取路线数据,并跳转到一个新的页面显示导航详情。
完整示例 Demo
为了更好地理解整个流程,这里提供了一个完整的示例项目结构:
// main.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'bindings/http_overrides.dart';
import 'map_dashboard_screen.dart';
Future<void> main() async {
// 加载环境变量文件
await dotenv.load(fileName: ".env");
WidgetsFlutterBinding.ensureInitialized();
HttpOverrides.global = MyHttpOverrides();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Graphhooper Map Route Navigation',
debugShowCheckedModeBanner: false,
theme: ThemeData(brightness: Brightness.light),
darkTheme: ThemeData(brightness: Brightness.dark),
themeMode: ThemeMode.dark,
home: const MapDashboardScreen(),
);
}
}
更多关于Flutter路线导航插件graphhopper_route_navigation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复