@@ -243,7 +243,7 @@ export default class DrawerView extends React.PureComponent<Props> {
243243
244244 private isStatusBarHidden : boolean = false ;
245245
246- private isSpringManuallyTriggered = new Value < Binary > ( FALSE ) ;
246+ private manuallyTriggerSpring = new Value < Binary > ( FALSE ) ;
247247
248248 private transitionTo = ( isOpen : number | Animated . Node < number > ) => {
249249 const toValue = new Value ( 0 ) ;
@@ -349,7 +349,7 @@ export default class DrawerView extends React.PureComponent<Props> {
349349 cond (
350350 eq ( this . gestureState , State . ACTIVE ) ,
351351 [
352- set ( this . isSpringManuallyTriggered , FALSE ) ,
352+ set ( this . manuallyTriggerSpring , FALSE ) ,
353353 cond ( this . isSwiping , NOOP , [
354354 // We weren't dragging before, set it to true
355355 set ( this . isSwiping , TRUE ) ,
@@ -369,7 +369,7 @@ export default class DrawerView extends React.PureComponent<Props> {
369369 set ( this . touchX , 0 ) ,
370370 this . transitionTo (
371371 cond (
372- this . isSpringManuallyTriggered ,
372+ this . manuallyTriggerSpring ,
373373 this . isOpen ,
374374 cond (
375375 or (
@@ -429,7 +429,7 @@ export default class DrawerView extends React.PureComponent<Props> {
429429 nativeEvent,
430430 } : TapGestureHandlerStateChangeEvent ) => {
431431 if ( nativeEvent . oldState === State . ACTIVE && ! this . props . locked ) {
432- this . toggleDrawer ( false ) ;
432+ this . manuallyTriggerSpring . setValue ( TRUE ) ;
433433 }
434434 } ;
435435
@@ -447,12 +447,13 @@ export default class DrawerView extends React.PureComponent<Props> {
447447 } ;
448448
449449 private toggleDrawer = ( open : boolean ) => {
450- this . nextIsOpen . setValue ( open ? TRUE : FALSE ) ;
451- this . isSpringManuallyTriggered . setValue ( TRUE ) ;
450+ if ( this . currentOpenValue !== open ) {
451+ this . nextIsOpen . setValue ( open ? TRUE : FALSE ) ;
452452
453- // This value will also be set shortly after as changing this.nextIsOpen changes this.isOpen
454- // However, there's a race condition on Android, so we need to set a bit earlier
455- this . currentOpenValue = open ;
453+ // This value will also be set shortly after as changing this.nextIsOpen changes this.isOpen
454+ // However, there's a race condition on Android, so we need to set a bit earlier
455+ this . currentOpenValue = open ;
456+ }
456457 } ;
457458
458459 private toggleStatusBar = ( hidden : boolean ) => {
@@ -546,6 +547,16 @@ export default class DrawerView extends React.PureComponent<Props> {
546547 />
547548 </ TapGestureHandler >
548549 </ Animated . View >
550+ < Animated . Code
551+ exec = { block ( [
552+ onChange ( this . manuallyTriggerSpring , [
553+ cond ( eq ( this . manuallyTriggerSpring , TRUE ) , [
554+ set ( this . nextIsOpen , FALSE ) ,
555+ call ( [ ] , ( ) => ( this . currentOpenValue = false ) ) ,
556+ ] ) ,
557+ ] ) ,
558+ ] ) }
559+ />
549560 < Animated . View
550561 accessibilityViewIsModal = { open }
551562 removeClippedSubviews = { Platform . OS !== 'ios' }
0 commit comments