The most straightforward fix for two issues is to block all navigation actions while mid-transition of a stack navigator. This will fix:
The double-navigate on double tap issue, because the first navigation will start the transition and the second action will be ignored.
Will fix the buggy header experience that you can see when going back and forward to a different route quickly. This happens because the next navigate action happens before the completion action. After the fix, the navigate action will be ignored, the user will tap again, and will see a good transition
Previously the state was getting squashed, in this case it would destroy the routeName of the state, which was a route for the parent navigator, who could no longer render properly.
* Fixing iPad iOS 11 Tab Bar Bottom Behavior with changing widths via Multitasking
* Adding width constrained check
* Moving to only Platform.isPad (no more layout-based tests)
* Remove type import
The completion action would previously change the isTransitioning of any state, but this will ensure that the completing navigator only marks its own state as isTransitioning:false. Now, even when transition completion happens immediately on the parent, the child focus event still waits for the child isTransitioning to go false.
This code was added during the events implementation, but I think we should be able to manage this circumstance from the parent context. In any case, any events bugs that result from this change will be far less insidious than the cardstack transitioner issue we experience now
* Fix invalid easing functions for CardStack
1. `timing` function accepts `TimingAnimationConfig` which expect `easing` (or dont expect at all) function with following signature: `(value: number) => number`
2. under the hood, `TimingAnimation` falls back to `easeInOut` function, if `easing` is not specified
`this._easing = config.easing !== undefined ? config.easing : easeInOut();`
3. by mistake passing `Easing.linear()` results in following
`typeof Easing.linear(); // undefined` which makes statement in step 2 fall back to `easeInOut`
This commit makes passing `easeInOut` function explicit and fixes existing issue and several Flow warnings
* Do not memoize easing function, keep things simple