11import { useContext , useMemo } from 'react' ;
22
3+ import { noop } from 'lodash' ;
4+
35import {
46 EPortalContainerConstantName ,
57 Portal ,
8+ Stack ,
69 TabStackNavigator ,
710} from '@onekeyhq/components' ;
811import { TabFreezeOnBlurContext } from '@onekeyhq/kit/src/provider/Container/TabFreezeOnBlurContainer' ;
912import platformEnv from '@onekeyhq/shared/src/platformEnv' ;
1013import type { ETabRoutes } from '@onekeyhq/shared/src/routes' ;
1114
15+ import { useRouteIsFocused } from '../../hooks/useRouteIsFocused' ;
16+
1217import { tabExtraConfig , useTabRouterConfig } from './router' ;
1318
19+ // prevent pushModal from using unreleased Navigation instances during iOS modal animation by temporary exclusion,
20+ const useIsIOSTabNavigatorFocused =
21+ platformEnv . isNativeIOS && ! platformEnv . isNativeIOSPad
22+ ? ( ) => {
23+ const isFocused = useRouteIsFocused ( ) ;
24+ return isFocused ;
25+ }
26+ : ( ) => false ;
27+
1428export function TabNavigator ( ) {
1529 const { freezeOnBlur } = useContext ( TabFreezeOnBlurContext ) ;
1630 const routerConfigParams = useMemo ( ( ) => ( { freezeOnBlur } ) , [ freezeOnBlur ] ) ;
1731 const config = useTabRouterConfig ( routerConfigParams ) ;
1832 const isShowWebTabBar = platformEnv . isDesktop || platformEnv . isNativeIOS ;
33+ const isFocused = useIsIOSTabNavigatorFocused ( ) ;
1934 return (
2035 < >
2136 < TabStackNavigator < ETabRoutes >
@@ -25,6 +40,16 @@ export function TabNavigator() {
2540 < Portal . Container
2641 name = { EPortalContainerConstantName . IN_PAGE_TAB_CONTAINER }
2742 />
43+ { isFocused ? (
44+ < Stack
45+ position = "absolute"
46+ top = { 0 }
47+ left = { 0 }
48+ right = { 0 }
49+ bottom = { 0 }
50+ onPress = { noop }
51+ />
52+ ) : null }
2853 </ >
2954 ) ;
3055}
0 commit comments