Skip to content
This repository was archived by the owner on Feb 25, 2020. It is now read-only.

Commit 3cdb9f1

Browse files
committed
fix: workaround SafereaProvider causing jumping
1 parent df9e867 commit 3cdb9f1

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import * as React from 'react';
2+
import {
3+
SafeAreaProvider,
4+
SafeAreaConsumer,
5+
} from 'react-native-safe-area-context';
6+
7+
type Props = {
8+
children: React.ReactNode;
9+
};
10+
11+
export default function SafeAreaProviderCompat({ children }: Props) {
12+
return (
13+
<SafeAreaConsumer>
14+
{insets => {
15+
if (insets) {
16+
// If we already have insets, don't wrap the stack in another safe area provider
17+
// This avoids an issue with updates at the cost of potentially incorrect values
18+
// https://github.com/react-navigation/stack/issues/283
19+
return children;
20+
}
21+
22+
return <SafeAreaProvider>{children}</SafeAreaProvider>;
23+
}}
24+
</SafeAreaConsumer>
25+
);
26+
}

src/views/Stack/StackView.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import * as React from 'react';
22
import { Platform } from 'react-native';
3-
import {
4-
SafeAreaProvider,
5-
SafeAreaConsumer,
6-
} from 'react-native-safe-area-context';
3+
import { SafeAreaConsumer } from 'react-native-safe-area-context';
74
import { SceneView, StackActions, NavigationRoute } from 'react-navigation';
85
import Stack from './Stack';
96
import HeaderContainer, {
107
Props as HeaderContainerProps,
118
} from '../Header/HeaderContainer';
9+
import SafeAreaProviderCompat from '../SafeAreaProviderCompat';
1210
import {
1311
NavigationStackProp,
1412
NavigationStackConfig,
@@ -366,7 +364,7 @@ class StackView extends React.Component<Props, State> {
366364
mode !== 'modal' && Platform.OS === 'ios' ? 'float' : 'screen';
367365

368366
return (
369-
<SafeAreaProvider>
367+
<SafeAreaProviderCompat>
370368
<SafeAreaConsumer>
371369
{insets => (
372370
<Stack
@@ -392,7 +390,7 @@ class StackView extends React.Component<Props, State> {
392390
/>
393391
)}
394392
</SafeAreaConsumer>
395-
</SafeAreaProvider>
393+
</SafeAreaProviderCompat>
396394
);
397395
}
398396
}

0 commit comments

Comments
 (0)