导航器:回调永远不会被触发



我正在尝试为Flutter集成HERE SDK。我使用的是 4.3.3.0 版。 我可以在地图上显示我的位置,我还能够在四处移动时更新位置,但我注册的navigator回调都不会被触发。这是创建navigator的代码:

void _setupNavigation(NavigationData navigationData) {
final RouteRepository routeRepository = RepositoryProvider.of<RouteRepository>(context);
final NavigationBloc navigationBloc = BlocProvider.of<NavigationBloc>(context);
final here.LocationListener locationListener = _buildLocationListener();
if (_simulate) {
_locationSimulator = _buildLocationSimulator(
navigationData: navigationData,
locationListener: locationListener,
);
}
_locationProvider = _buildLocationProvider(
routeRepository: routeRepository,
locationListener: locationListener,
);
_navigator = here.Navigator(_locationProvider);
_navigator.routeDeviationListener =
_buildRouteDeviationListener(navigationBloc: navigationBloc);
_navigator.routeProgressListener =
_buildRouteProgressListener(navigationBloc: navigationBloc);
_navigator.navigableLocationListener =
_buildNavigableLocationListener(navigationBloc: navigationBloc);
_navigator.maneuverNotificationListener =
_buildManeuverNotificationListener(navigationBloc: navigationBloc);
_navigator.maneuverNotificationOptions =
here.ManeuverNotificationOptions.withDefaults();
_navigator.route = navigationData.routes?.mainRoute?.route;
navigationBloc.add(StartNavigation(simulate: _simulate));
}

我根据相同的模式创建所有侦听器。例如,ManeuverListener

ManeuverNotificationListener _buildManeuverNotificationListener(
{@required NavigationBloc navigationBloc}) =>
here.ManeuverNotificationListener.fromLambdas(
lambda_onManeuverNotification: (String maneuver) {
_flutterTts.speak(maneuver);
navigationBloc.add(NewManeuverNotification(maneuver));
},
);

有人可以指出我正确的方向吗?触发回调缺少什么?

更新这就是我构建位置提供程序的方式:

LocationProvider _buildLocationProvider({
@required RouteRepository routeRepository,
@required LocationListener locationListener,
}) {
StreamSubscription<Location> subscription;
return here.LocationProvider.fromLambdas(
lambda_start: () {
if (!_simulate) {
subscription =
routeRepository.locationStream.listen((Location location) {
locationListener.onLocationUpdated(location.toHereLocation());
});
}
},
lambda_stop: () => subscription?.cancel(),
lambda_listener_get: () => locationListener,
lambda_listener_set: (listener) => {},
);
}

溶液

我最终用LocationProvider扩展了我自己的类,而不是使用 LocationProvider 类中的fromLambdas构造函数,现在它正在工作。回调被触发。

从 HERE SDK 开发团队收到的反馈:)

locationListener 实际上是由 SDK 设置的,而 LocationProviderImplementation 的实现应该调用侦听器,否则不会发生任何指导。

请查看此处的 Android 导航示例作为参考,请参阅第 #28 行和第 #101 行。

最新更新