From ff9dd732ad08c4cbeeb924b2d9c12fda9e11ef31 Mon Sep 17 00:00:00 2001 From: nvojnovic Date: Mon, 21 Oct 2019 10:08:36 +0200 Subject: [PATCH] fix: navigation drawer sometimes not closing when pressed outside (#126) I noticed this issue only on android devices. After many rewrites of this component I ended up with this simple change and now drawer is closing properly every time. Most important part is to set new state inside function with state: (s: Animated.Value) => set(this.gestureState, s) because I was also experiencing some issues when setting it like this state: this.gestureState --- packages/drawer/src/views/Drawer.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/drawer/src/views/Drawer.tsx b/packages/drawer/src/views/Drawer.tsx index 46d53bb3..b38904e3 100644 --- a/packages/drawer/src/views/Drawer.tsx +++ b/packages/drawer/src/views/Drawer.tsx @@ -428,7 +428,14 @@ export default class DrawerView extends React.PureComponent { x: this.touchX, translationX: this.gestureX, velocityX: this.velocityX, - state: this.gestureState, + }, + }, + ]); + + private handleGestureStateChange = event([ + { + nativeEvent: { + state: (s: Animated.Value) => set(this.gestureState, s), }, }, ]); @@ -520,7 +527,7 @@ export default class DrawerView extends React.PureComponent { activeOffsetX={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]} failOffsetY={[-SWIPE_DISTANCE_MINIMUM, SWIPE_DISTANCE_MINIMUM]} onGestureEvent={this.handleGestureEvent} - onHandlerStateChange={this.handleGestureEvent} + onHandlerStateChange={this.handleGestureStateChange} hitSlop={hitSlop} enabled={!locked} {...gestureHandlerProps}