mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-04-25 21:15:26 +08:00
26
packages/stack/src/views/SafeAreaProviderCompat.tsx
Normal file
26
packages/stack/src/views/SafeAreaProviderCompat.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
import * as React from 'react';
|
||||
import {
|
||||
SafeAreaProvider,
|
||||
SafeAreaConsumer,
|
||||
} from 'react-native-safe-area-context';
|
||||
|
||||
type Props = {
|
||||
children: React.ReactNode;
|
||||
};
|
||||
|
||||
export default function SafeAreaProviderCompat({ children }: Props) {
|
||||
return (
|
||||
<SafeAreaConsumer>
|
||||
{insets => {
|
||||
if (insets) {
|
||||
// If we already have insets, don't wrap the stack in another safe area provider
|
||||
// This avoids an issue with updates at the cost of potentially incorrect values
|
||||
// https://github.com/react-navigation/navigation-ex/issues/174
|
||||
return children;
|
||||
}
|
||||
|
||||
return <SafeAreaProvider>{children}</SafeAreaProvider>;
|
||||
}}
|
||||
</SafeAreaConsumer>
|
||||
);
|
||||
}
|
||||
@@ -1,10 +1,6 @@
|
||||
import * as React from 'react';
|
||||
import { Platform } from 'react-native';
|
||||
import {
|
||||
SafeAreaProvider,
|
||||
SafeAreaConsumer,
|
||||
EdgeInsets,
|
||||
} from 'react-native-safe-area-context';
|
||||
import { SafeAreaConsumer, EdgeInsets } from 'react-native-safe-area-context';
|
||||
import { Route } from '@react-navigation/core';
|
||||
import { StackActions, StackNavigationState } from '@react-navigation/routers';
|
||||
|
||||
@@ -12,6 +8,7 @@ import Stack from './Stack';
|
||||
import HeaderContainer, {
|
||||
Props as HeaderContainerProps,
|
||||
} from '../Header/HeaderContainer';
|
||||
import SafeAreaProviderCompat from '../SafeAreaProviderCompat';
|
||||
import {
|
||||
StackNavigationHelpers,
|
||||
StackNavigationConfig,
|
||||
@@ -328,7 +325,7 @@ class StackView extends React.Component<Props, State> {
|
||||
mode !== 'modal' && Platform.OS === 'ios' ? 'float' : 'screen';
|
||||
|
||||
return (
|
||||
<SafeAreaProvider>
|
||||
<SafeAreaProviderCompat>
|
||||
<SafeAreaConsumer>
|
||||
{insets => (
|
||||
<Stack
|
||||
@@ -355,7 +352,7 @@ class StackView extends React.Component<Props, State> {
|
||||
/>
|
||||
)}
|
||||
</SafeAreaConsumer>
|
||||
</SafeAreaProvider>
|
||||
</SafeAreaProviderCompat>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user