Skip to content

Commit 3923ec4

Browse files
fix: resolve screen transition stutter with native stack (#345)
Co-authored-by: eeee0717 <[email protected]> Co-authored-by: 槑囿脑袋 <[email protected]>
1 parent a0bba57 commit 3923ec4

12 files changed

Lines changed: 83 additions & 52 deletions

src/navigators/AssistantMarketStackNavigator.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import AssistantMarketScreen from '@/screens/assistant/AssistantMarketScreen'
@@ -7,15 +7,16 @@ export type AssistantMarketStackParamList = {
77
AssistantMarketScreen: undefined
88
}
99

10-
const Stack = createStackNavigator<AssistantMarketStackParamList>()
10+
const Stack = createNativeStackNavigator<AssistantMarketStackParamList>()
1111

1212
export default function AssistantMarketStackNavigator() {
1313
return (
1414
<Stack.Navigator
1515
screenOptions={{
1616
headerShown: false,
17-
gestureResponseDistance: 9999,
18-
...TransitionPresets.SlideFromRightIOS
17+
animation: 'ios_from_right',
18+
gestureEnabled: true,
19+
fullScreenGestureEnabled: true
1920
}}>
2021
<Stack.Screen name="AssistantMarketScreen" component={AssistantMarketScreen} />
2122
</Stack.Navigator>
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import AssistantDetailScreen from '@/screens/assistant/AssistantDetailScreen'
@@ -10,18 +10,23 @@ export type AssistantStackParamList = {
1010
AssistantDetailScreen: AssistantDetailScreenParams
1111
}
1212

13-
const Stack = createStackNavigator<AssistantStackParamList>()
13+
const Stack = createNativeStackNavigator<AssistantStackParamList>()
1414

1515
export default function AssistantStackNavigator() {
1616
return (
1717
<Stack.Navigator
1818
screenOptions={{
1919
headerShown: false,
20-
gestureResponseDistance: 9999,
21-
...TransitionPresets.SlideFromRightIOS
20+
animation: 'ios_from_right',
21+
gestureEnabled: true,
22+
fullScreenGestureEnabled: true
2223
}}>
2324
<Stack.Screen name="AssistantScreen" component={AssistantScreen} />
24-
<Stack.Screen name="AssistantDetailScreen" component={AssistantDetailScreen} />
25+
<Stack.Screen
26+
name="AssistantDetailScreen"
27+
component={AssistantDetailScreen}
28+
options={{ gestureEnabled: false, fullScreenGestureEnabled: false }}
29+
/>
2530
</Stack.Navigator>
2631
)
2732
}

src/navigators/HomeStackNavigator.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import AssistantDetailScreen from '@/screens/assistant/AssistantDetailScreen'
@@ -29,20 +29,29 @@ export type HomeStackParamList = {
2929
AboutSettings: { screen?: string; params?: any } | undefined
3030
}
3131

32-
const Stack = createStackNavigator<HomeStackParamList>()
32+
const Stack = createNativeStackNavigator<HomeStackParamList>()
3333

3434
export default function HomeStackNavigator() {
3535
return (
3636
<Stack.Navigator
3737
screenOptions={{
3838
headerShown: false,
39-
gestureResponseDistance: 9999,
40-
...TransitionPresets.SlideFromRightIOS
39+
animation: 'ios_from_right',
40+
gestureEnabled: true,
41+
fullScreenGestureEnabled: true
4142
}}>
4243
<Stack.Screen name="ChatScreen" component={ChatScreen} />
4344
<Stack.Screen name="TopicScreen" component={TopicScreen} />
44-
<Stack.Screen name="AssistantDetailScreen" component={AssistantDetailScreen} />
45-
<Stack.Screen name="SettingsScreen" component={SettingsScreen} />
45+
<Stack.Screen
46+
name="AssistantDetailScreen"
47+
component={AssistantDetailScreen}
48+
options={{ gestureEnabled: false, fullScreenGestureEnabled: false }}
49+
/>
50+
<Stack.Screen
51+
name="SettingsScreen"
52+
component={SettingsScreen}
53+
options={{ gestureEnabled: false, fullScreenGestureEnabled: false }}
54+
/>
4655
<Stack.Screen name="HtmlPreviewScreen" component={HtmlPreviewScreen} />
4756
<Stack.Screen name="GeneralSettings" component={GeneralSettingsStackNavigator} />
4857
<Stack.Screen name="AssistantSettings" component={AssistantSettingsStackNavigator} />

src/navigators/McpStackNavigator.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import McpDetailScreen from '@/screens/mcp/McpDetailScreen'
@@ -11,15 +11,16 @@ export type McpStackParamList = {
1111
McpDetailScreen: { mcpId?: string }
1212
}
1313

14-
const Stack = createStackNavigator<McpStackParamList>()
14+
const Stack = createNativeStackNavigator<McpStackParamList>()
1515

1616
export default function McpStackNavigator() {
1717
return (
1818
<Stack.Navigator
1919
screenOptions={{
2020
headerShown: false,
21-
gestureResponseDistance: 9999,
22-
...TransitionPresets.SlideFromRightIOS
21+
animation: 'ios_from_right',
22+
gestureEnabled: true,
23+
fullScreenGestureEnabled: true
2324
}}>
2425
<Stack.Screen name="McpScreen" component={McpScreen} />
2526
<Stack.Screen name="McpMarketScreen" component={McpMarketScreen} />

src/navigators/SettingsStackNavigator.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import SettingsScreen from '@/screens/settings/SettingsScreen'
@@ -20,17 +20,22 @@ export type SettingsStackParamList = {
2020
AboutSettings: undefined
2121
}
2222

23-
const Stack = createStackNavigator<SettingsStackParamList>()
23+
const Stack = createNativeStackNavigator<SettingsStackParamList>()
2424

2525
export default function SettingsStackNavigator() {
2626
return (
2727
<Stack.Navigator
2828
screenOptions={{
2929
headerShown: false,
30-
gestureResponseDistance: 9999,
31-
...TransitionPresets.SlideFromRightIOS
30+
animation: 'ios_from_right',
31+
gestureEnabled: true,
32+
fullScreenGestureEnabled: true
3233
}}>
33-
<Stack.Screen name="SettingsScreen" component={SettingsScreen} />
34+
<Stack.Screen
35+
name="SettingsScreen"
36+
component={SettingsScreen}
37+
options={{ gestureEnabled: false, fullScreenGestureEnabled: false }}
38+
/>
3439
<Stack.Screen name="GeneralSettings" component={GeneralSettingsStackNavigator} />
3540
<Stack.Screen name="AssistantSettings" component={AssistantSettingsStackNavigator} />
3641
<Stack.Screen name="ProvidersSettings" component={ProvidersStackNavigator} />

src/navigators/WelcomeStackNavigator.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import WelcomeScreen from '@/screens/welcome/WelcomeScreen'
@@ -7,14 +7,14 @@ export type WelcomeStackParamList = {
77
WelcomeScreen: undefined
88
}
99

10-
const Stack = createStackNavigator<WelcomeStackParamList>()
10+
const Stack = createNativeStackNavigator<WelcomeStackParamList>()
1111

1212
export default function WelcomeStackNavigator() {
1313
return (
1414
<Stack.Navigator
1515
screenOptions={{
1616
headerShown: false,
17-
...TransitionPresets.SlideFromRightIOS
17+
animation: 'ios_from_right'
1818
}}>
1919
<Stack.Screen name="WelcomeScreen" component={WelcomeScreen} />
2020
</Stack.Navigator>

src/navigators/settings/AboutStackNavigator.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import AboutScreen from '@/screens/settings/about/AboutScreen'
@@ -9,15 +9,16 @@ export type AboutStackParamList = {
99
AboutScreen: undefined
1010
}
1111

12-
const Stack = createStackNavigator<AboutStackParamList>()
12+
const Stack = createNativeStackNavigator<AboutStackParamList>()
1313

1414
export default function AboutStackNavigator() {
1515
return (
1616
<Stack.Navigator
1717
screenOptions={{
1818
headerShown: false,
19-
gestureResponseDistance: 9999,
20-
...TransitionPresets.SlideFromRightIOS
19+
animation: 'ios_from_right',
20+
gestureEnabled: true,
21+
fullScreenGestureEnabled: true
2122
}}>
2223
<Stack.Screen name="PersonalScreen" component={PersonalScreen} />
2324
<Stack.Screen name="AboutScreen" component={AboutScreen} />
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import AssistantDetailScreen from '@/screens/assistant/AssistantDetailScreen'
@@ -9,18 +9,23 @@ export type AssistantSettingsStackParamList = {
99
AssistantDetailScreen: { assistantId: string; tab?: string }
1010
}
1111

12-
const Stack = createStackNavigator<AssistantSettingsStackParamList>()
12+
const Stack = createNativeStackNavigator<AssistantSettingsStackParamList>()
1313

1414
export default function AssistantSettingsStackNavigator() {
1515
return (
1616
<Stack.Navigator
1717
screenOptions={{
1818
headerShown: false,
19-
gestureResponseDistance: 9999,
20-
...TransitionPresets.SlideFromRightIOS
19+
animation: 'ios_from_right',
20+
gestureEnabled: true,
21+
fullScreenGestureEnabled: true
2122
}}>
2223
<Stack.Screen name="AssistantSettingsScreen" component={AssistantSettingsScreen} />
23-
<Stack.Screen name="AssistantDetailScreen" component={AssistantDetailScreen} />
24+
<Stack.Screen
25+
name="AssistantDetailScreen"
26+
component={AssistantDetailScreen}
27+
options={{ gestureEnabled: false, fullScreenGestureEnabled: false }}
28+
/>
2429
</Stack.Navigator>
2530
)
2631
}

src/navigators/settings/DataSourcesStackNavigator.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import BasicDataSettingsScreen from '@/screens/settings/data/BasicDataSettingsScreen'
@@ -11,15 +11,16 @@ export type DataSourcesStackParamList = {
1111
LanTransferScreen: { redirectToHome?: boolean } | undefined
1212
}
1313

14-
const Stack = createStackNavigator<DataSourcesStackParamList>()
14+
const Stack = createNativeStackNavigator<DataSourcesStackParamList>()
1515

1616
export default function DataSourcesStackNavigator() {
1717
return (
1818
<Stack.Navigator
1919
screenOptions={{
2020
headerShown: false,
21-
gestureResponseDistance: 9999,
22-
...TransitionPresets.SlideFromRightIOS
21+
animation: 'ios_from_right',
22+
gestureEnabled: true,
23+
fullScreenGestureEnabled: true
2324
}}>
2425
<Stack.Screen name="DataSettingsScreen" component={DataSettingsScreen} />
2526
<Stack.Screen name="BasicDataSettingsScreen" component={BasicDataSettingsScreen} />

src/navigators/settings/GeneralSettingsStackNavigator.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'
1+
import { createNativeStackNavigator } from '@react-navigation/native-stack'
22
import React from 'react'
33

44
import GeneralSettingsScreen from '@/screens/settings/general/GeneralSettingsScreen'
@@ -7,15 +7,16 @@ export type GeneralSettingsStackParamList = {
77
GeneralSettingsScreen: undefined
88
}
99

10-
const Stack = createStackNavigator<GeneralSettingsStackParamList>()
10+
const Stack = createNativeStackNavigator<GeneralSettingsStackParamList>()
1111

1212
export default function GeneralSettingsStackNavigator() {
1313
return (
1414
<Stack.Navigator
1515
screenOptions={{
1616
headerShown: false,
17-
gestureResponseDistance: 9999,
18-
...TransitionPresets.SlideFromRightIOS
17+
animation: 'ios_from_right',
18+
gestureEnabled: true,
19+
fullScreenGestureEnabled: true
1920
}}>
2021
<Stack.Screen name="GeneralSettingsScreen" component={GeneralSettingsScreen} />
2122
</Stack.Navigator>

0 commit comments

Comments
 (0)