Skip to content

Commit f1b50d3

Browse files
authored
fix: prevent pushModal from using unreleased Navigation instances during iOS modal animation by overlay on bluring (#7976)
1 parent c4ee94f commit f1b50d3

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

packages/kit/src/hooks/useAppNavigation.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,8 @@ function useAppNavigation<
144144
return;
145145
}
146146

147-
// TODO:
148-
// prevent pushModal from using unreleased Navigation instances during iOS modal animation by temporary exclusion,
149-
// with plan to migrate to rootNavigationRef
150147
// eslint-disable-next-line no-extra-boolean-cast
151-
if (!platformEnv.isNativeIOS && !!navigationInstance.push) {
148+
if (!!navigationInstance.push) {
152149
lastPushAbleNavigation = navigationInstance;
153150
navigationInstance.push(modalType, {
154151
screen: route,

packages/kit/src/routes/Tab/Navigator.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
11
import { useContext, useMemo } from 'react';
22

3+
import { noop } from 'lodash';
4+
35
import {
46
EPortalContainerConstantName,
57
Portal,
8+
Stack,
69
TabStackNavigator,
710
} from '@onekeyhq/components';
811
import { TabFreezeOnBlurContext } from '@onekeyhq/kit/src/provider/Container/TabFreezeOnBlurContainer';
912
import platformEnv from '@onekeyhq/shared/src/platformEnv';
1013
import type { ETabRoutes } from '@onekeyhq/shared/src/routes';
1114

15+
import { useRouteIsFocused } from '../../hooks/useRouteIsFocused';
16+
1217
import { 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+
1428
export 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

Comments
 (0)