mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-04-29 12:55:21 +08:00
@@ -11,8 +11,8 @@ import { Route, CommonActions } from '@react-navigation/core';
|
|||||||
import { TabNavigationState } from '@react-navigation/routers';
|
import { TabNavigationState } from '@react-navigation/routers';
|
||||||
// eslint-disable-next-line import/no-unresolved
|
// eslint-disable-next-line import/no-unresolved
|
||||||
import { ScreenContainer } from 'react-native-screens';
|
import { ScreenContainer } from 'react-native-screens';
|
||||||
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
||||||
|
|
||||||
|
import SafeAreaProviderCompat from './SafeAreaProviderCompat';
|
||||||
import ResourceSavingScene from './ResourceSavingScene';
|
import ResourceSavingScene from './ResourceSavingScene';
|
||||||
import BottomTabBar from './BottomTabBar';
|
import BottomTabBar from './BottomTabBar';
|
||||||
import {
|
import {
|
||||||
@@ -210,7 +210,7 @@ export default class BottomTabView extends React.Component<Props, State> {
|
|||||||
const { loaded } = this.state;
|
const { loaded } = this.state;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SafeAreaProvider>
|
<SafeAreaProviderCompat>
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
<ScreenContainer style={styles.pages}>
|
<ScreenContainer style={styles.pages}>
|
||||||
{routes.map((route, index) => {
|
{routes.map((route, index) => {
|
||||||
@@ -246,7 +246,7 @@ export default class BottomTabView extends React.Component<Props, State> {
|
|||||||
</ScreenContainer>
|
</ScreenContainer>
|
||||||
{this.renderTabBar()}
|
{this.renderTabBar()}
|
||||||
</View>
|
</View>
|
||||||
</SafeAreaProvider>
|
</SafeAreaProviderCompat>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
26
packages/bottom-tabs/src/views/SafeAreaProviderCompat.tsx
Normal file
26
packages/bottom-tabs/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>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -6,7 +6,6 @@ import {
|
|||||||
Platform,
|
Platform,
|
||||||
ScaledSize,
|
ScaledSize,
|
||||||
} from 'react-native';
|
} from 'react-native';
|
||||||
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
||||||
// eslint-disable-next-line import/no-unresolved
|
// eslint-disable-next-line import/no-unresolved
|
||||||
import { ScreenContainer } from 'react-native-screens';
|
import { ScreenContainer } from 'react-native-screens';
|
||||||
import { PanGestureHandler } from 'react-native-gesture-handler';
|
import { PanGestureHandler } from 'react-native-gesture-handler';
|
||||||
@@ -16,6 +15,7 @@ import {
|
|||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
|
|
||||||
import DrawerGestureContext from '../utils/DrawerGestureContext';
|
import DrawerGestureContext from '../utils/DrawerGestureContext';
|
||||||
|
import SafeAreaProviderCompat from './SafeAreaProviderCompat';
|
||||||
import ResourceSavingScene from './ResourceSavingScene';
|
import ResourceSavingScene from './ResourceSavingScene';
|
||||||
import DrawerContent from './DrawerContent';
|
import DrawerContent from './DrawerContent';
|
||||||
import Drawer from './Drawer';
|
import Drawer from './Drawer';
|
||||||
@@ -213,7 +213,7 @@ export default class DrawerView extends React.PureComponent<Props, State> {
|
|||||||
const { gestureEnabled } = descriptors[activeKey].options;
|
const { gestureEnabled } = descriptors[activeKey].options;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SafeAreaProvider>
|
<SafeAreaProviderCompat>
|
||||||
<DrawerGestureContext.Provider value={this.drawerGestureRef}>
|
<DrawerGestureContext.Provider value={this.drawerGestureRef}>
|
||||||
<Drawer
|
<Drawer
|
||||||
open={state.isDrawerOpen}
|
open={state.isDrawerOpen}
|
||||||
@@ -235,7 +235,7 @@ export default class DrawerView extends React.PureComponent<Props, State> {
|
|||||||
renderSceneContent={this.renderContent}
|
renderSceneContent={this.renderContent}
|
||||||
/>
|
/>
|
||||||
</DrawerGestureContext.Provider>
|
</DrawerGestureContext.Provider>
|
||||||
</SafeAreaProvider>
|
</SafeAreaProviderCompat>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
26
packages/drawer/src/views/SafeAreaProviderCompat.tsx
Normal file
26
packages/drawer/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>
|
||||||
|
);
|
||||||
|
}
|
||||||
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 * as React from 'react';
|
||||||
import { Platform } from 'react-native';
|
import { Platform } from 'react-native';
|
||||||
import {
|
import { SafeAreaConsumer, EdgeInsets } from 'react-native-safe-area-context';
|
||||||
SafeAreaProvider,
|
|
||||||
SafeAreaConsumer,
|
|
||||||
EdgeInsets,
|
|
||||||
} from 'react-native-safe-area-context';
|
|
||||||
import { Route } from '@react-navigation/core';
|
import { Route } from '@react-navigation/core';
|
||||||
import { StackActions, StackNavigationState } from '@react-navigation/routers';
|
import { StackActions, StackNavigationState } from '@react-navigation/routers';
|
||||||
|
|
||||||
@@ -12,6 +8,7 @@ import Stack from './Stack';
|
|||||||
import HeaderContainer, {
|
import HeaderContainer, {
|
||||||
Props as HeaderContainerProps,
|
Props as HeaderContainerProps,
|
||||||
} from '../Header/HeaderContainer';
|
} from '../Header/HeaderContainer';
|
||||||
|
import SafeAreaProviderCompat from '../SafeAreaProviderCompat';
|
||||||
import {
|
import {
|
||||||
StackNavigationHelpers,
|
StackNavigationHelpers,
|
||||||
StackNavigationConfig,
|
StackNavigationConfig,
|
||||||
@@ -328,7 +325,7 @@ class StackView extends React.Component<Props, State> {
|
|||||||
mode !== 'modal' && Platform.OS === 'ios' ? 'float' : 'screen';
|
mode !== 'modal' && Platform.OS === 'ios' ? 'float' : 'screen';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SafeAreaProvider>
|
<SafeAreaProviderCompat>
|
||||||
<SafeAreaConsumer>
|
<SafeAreaConsumer>
|
||||||
{insets => (
|
{insets => (
|
||||||
<Stack
|
<Stack
|
||||||
@@ -355,7 +352,7 @@ class StackView extends React.Component<Props, State> {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</SafeAreaConsumer>
|
</SafeAreaConsumer>
|
||||||
</SafeAreaProvider>
|
</SafeAreaProviderCompat>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user