@@ -41,6 +41,7 @@ import {ArrivalEvent, NavigationViewProps} from './types';
4141export default class NavigationView extends React . Component < NavigationViewProps > {
4242 private viewId : number = - 1 ;
4343 private mapViewRef ?: any ;
44+ private nativeEventsToCallbackMap ;
4445
4546 constructor ( _props : NavigationViewProps ) {
4647 super ( _props ) ;
@@ -62,6 +63,28 @@ export default class NavigationView extends React.Component<NavigationViewProps>
6263 orientation : isPortrait ( ) ? 'portrait' : 'landscape' ,
6364 } ) ;
6465 } ) ;
66+
67+ this . nativeEventsToCallbackMap = {
68+ 'onRouteChanged' : this . onRouteChanged ,
69+ 'onRemainingTimeOrDistanceChanged' : this . onRemainingTimeOrDistanceChanged ,
70+ 'onTrafficUpdated' : this . onTrafficUpdated ,
71+ 'onArrival' : this . onArrival ,
72+ 'onNavigationReady' : this . onNavigationReady ,
73+ 'onStartGuidance' : this . onStartGuidance ,
74+ 'onRecenterButtonClick' : this . onRecenterButtonClick ,
75+ 'onRouteStatusResult' : this . onRouteStatusResult ,
76+ 'onMapReady' : this . onMapReady ,
77+ 'onReroutingRequestedByOffRoute' : this . onReroutingRequestedByOffRoute ,
78+ 'onLocationChanged' : this . onLocationChanged ,
79+ 'onNavigationInitError' : this . onNavigationInitError ,
80+ 'onMarkerInfoWindowTapped' : this . onMarkerInfoWindowTapped ,
81+ 'onMarkerClick' : this . onMarkerClick ,
82+ 'onPolylineClick' : this . onPolylineClick ,
83+ 'onPolygonClick' : this . onPolygonClick ,
84+ 'onCircleClick' : this . onCircleClick ,
85+ 'logDebugInfo' : this . logDebugInfo
86+ } ;
87+
6588 }
6689
6790 /**
@@ -322,45 +345,24 @@ export default class NavigationView extends React.Component<NavigationViewProps>
322345 }
323346 } ;
324347
325- private registerNavModuleListener = ( ) => {
326- const NavModuleEvt = new NativeEventEmitter (
348+ private unregisterNavModuleListeners = ( ) => {
349+ const eventEmitter = new NativeEventEmitter (
327350 NativeModules . CustomEventDispatcher ,
328351 ) ;
329352
330- NavModuleEvt . addListener ( 'onRouteChanged' , this . onRouteChanged ) ;
331- NavModuleEvt . addListener (
332- 'onRemainingTimeOrDistanceChanged' ,
333- this . onRemainingTimeOrDistanceChanged ,
334- ) ;
335- NavModuleEvt . addListener ( 'onTrafficUpdated' , this . onTrafficUpdated ) ;
336- NavModuleEvt . addListener ( 'onArrival' , this . onArrival ) ;
337- NavModuleEvt . addListener ( 'onNavigationReady' , this . onNavigationReady ) ;
338- NavModuleEvt . addListener ( 'onStartGuidance' , this . onStartGuidance ) ;
339- NavModuleEvt . addListener (
340- 'onRecenterButtonClick' ,
341- this . onRecenterButtonClick ,
342- ) ;
343- NavModuleEvt . addListener ( 'onRouteStatusResult' , this . onRouteStatusResult ) ;
344- NavModuleEvt . addListener ( 'onMapReady' , this . onMapReady ) ;
345- NavModuleEvt . addListener (
346- 'onReroutingRequestedByOffRoute' ,
347- this . onReroutingRequestedByOffRoute ,
348- ) ;
349- NavModuleEvt . addListener ( 'onLocationChanged' , this . onLocationChanged ) ;
350- NavModuleEvt . addListener (
351- 'onNavigationInitError' ,
352- this . onNavigationInitError ,
353- ) ;
353+ for ( const eventName of Object . keys ( this . nativeEventsToCallbackMap ) ) {
354+ eventEmitter . removeAllListeners ( eventName ) ;
355+ }
356+ }
354357
355- NavModuleEvt . addListener (
356- 'onMarkerInfoWindowTapped' ,
357- this . onMarkerInfoWindowTapped ,
358+ private registerNavModuleListener = ( ) => {
359+ const eventEmitter = new NativeEventEmitter (
360+ NativeModules . CustomEventDispatcher ,
358361 ) ;
359- NavModuleEvt . addListener ( 'onMarkerClick' , this . onMarkerClick ) ;
360- NavModuleEvt . addListener ( 'onPolylineClick' , this . onPolylineClick ) ;
361- NavModuleEvt . addListener ( 'onPolygonClick' , this . onPolygonClick ) ;
362- NavModuleEvt . addListener ( 'onCircleClick' , this . onCircleClick ) ;
363- NavModuleEvt . addListener ( 'logDebugInfo' , this . logDebugInfo ) ;
362+
363+ for ( const eventName of Object . keys ( this . nativeEventsToCallbackMap ) ) {
364+ eventEmitter . addListener ( eventName , this . nativeEventsToCallbackMap [ eventName ] ) ;
365+ }
364366 } ;
365367
366368 /**
@@ -375,6 +377,7 @@ export default class NavigationView extends React.Component<NavigationViewProps>
375377 this . viewId = findNodeHandle ( this . mapViewRef ) || 0 ;
376378
377379 if ( Platform . OS == 'ios' ) {
380+ this . unregisterNavModuleListeners ( ) ;
378381 this . registerNavModuleListener ( ) ;
379382 }
380383
@@ -404,6 +407,7 @@ export default class NavigationView extends React.Component<NavigationViewProps>
404407 }
405408
406409 override componentWillUnmount ( ) {
410+ this . unregisterNavModuleListeners ( ) ;
407411 this . deleteFragment ( ) ;
408412 }
409413
0 commit comments