From ea0897f73e29bbb036e0b54c869b19a9ee161973 Mon Sep 17 00:00:00 2001 From: Konrad Michalik Date: Thu, 23 Apr 2026 16:50:01 +0200 Subject: [PATCH 1/3] feat: Enable synchronous screen shadow state updates by default Co-Authored-By: Claude Opus 4.6 (1M context) --- FabricExample/App.tsx | 2 +- ios/RNSScreen.mm | 1 + src/fabric/ModalScreenNativeComponent.ts | 2 +- src/fabric/ScreenNativeComponent.ts | 2 +- src/flags.ts | 7 ++++++- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/FabricExample/App.tsx b/FabricExample/App.tsx index e1c4c512ae..bdd5ddeb55 100644 --- a/FabricExample/App.tsx +++ b/FabricExample/App.tsx @@ -1,7 +1,7 @@ import App from '../apps'; import { featureFlags } from 'react-native-screens'; -featureFlags.experiment.synchronousScreenUpdatesEnabled = false; +featureFlags.experiment.synchronousScreenUpdatesEnabled = true; featureFlags.experiment.synchronousHeaderConfigUpdatesEnabled = true; featureFlags.experiment.synchronousHeaderSubviewUpdatesEnabled = true; featureFlags.experiment.androidResetScreenShadowStateOnOrientationChangeEnabled = diff --git a/ios/RNSScreen.mm b/ios/RNSScreen.mm index 69d4d9a470..8f6ab23232 100644 --- a/ios/RNSScreen.mm +++ b/ios/RNSScreen.mm @@ -103,6 +103,7 @@ - (void)initCommonProps _sheetsScrollView = nil; _sheetContentHeight = 0.0; _markedForUnmountInCurrentTransaction = NO; + _synchronousShadowStateUpdatesEnabled = YES; } + (RNSViewInteractionManager *)viewInteractionManagerInstance diff --git a/src/fabric/ModalScreenNativeComponent.ts b/src/fabric/ModalScreenNativeComponent.ts index 3721cbefe7..171e3993bd 100644 --- a/src/fabric/ModalScreenNativeComponent.ts +++ b/src/fabric/ModalScreenNativeComponent.ts @@ -121,7 +121,7 @@ export interface NativeProps extends ViewProps { leftScrollEdgeEffect?: CT.WithDefault; rightScrollEdgeEffect?: CT.WithDefault; topScrollEdgeEffect?: CT.WithDefault; - synchronousShadowStateUpdatesEnabled?: CT.WithDefault; + synchronousShadowStateUpdatesEnabled?: CT.WithDefault; } export default codegenNativeComponent('RNSModalScreen', { diff --git a/src/fabric/ScreenNativeComponent.ts b/src/fabric/ScreenNativeComponent.ts index fa037c9218..5d4da075b0 100644 --- a/src/fabric/ScreenNativeComponent.ts +++ b/src/fabric/ScreenNativeComponent.ts @@ -121,7 +121,7 @@ export interface NativeProps extends ViewProps { leftScrollEdgeEffect?: CT.WithDefault; rightScrollEdgeEffect?: CT.WithDefault; topScrollEdgeEffect?: CT.WithDefault; - synchronousShadowStateUpdatesEnabled?: CT.WithDefault; + synchronousShadowStateUpdatesEnabled?: CT.WithDefault; androidResetScreenShadowStateOnOrientationChangeEnabled?: CT.WithDefault< boolean, true diff --git a/src/flags.ts b/src/flags.ts index bd439e156e..53da314b76 100644 --- a/src/flags.ts +++ b/src/flags.ts @@ -1,4 +1,4 @@ -const RNS_SYNCHRONOUS_SCREEN_STATE_UPDATES_DEFAULT = false; +const RNS_SYNCHRONOUS_SCREEN_STATE_UPDATES_DEFAULT = true; const RNS_SYNCHRONOUS_HEADER_CONFIG_STATE_UPDATES_DEFAULT = true; const RNS_SYNCHRONOUS_HEADER_SUBVIEW_STATE_UPDATES_DEFAULT = true; const RNS_ANDROID_LEGACY_TOP_INSET_BEHAVIOR_DEFAULT = false; @@ -195,6 +195,11 @@ export const featureFlags = { * Flags to enable experimental features. These might be removed w/o notice or moved to stable. */ experiment: { + /** + * Enables synchronous shadow state updates for Screen components on iOS + * (Fabric, RN 0.82+). On by default. + * PR: https://github.com/software-mansion/react-native-screens/pull/3282 + */ get synchronousScreenUpdatesEnabled() { return synchronousScreenUpdatesAccessor.get(); }, From 0a8846af403350efe0b4a8dc20b5a5aa64c23a43 Mon Sep 17 00:00:00 2001 From: Konrad Michalik Date: Thu, 23 Apr 2026 17:49:44 +0200 Subject: [PATCH 2/3] remove unnecessary comment --- src/flags.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/flags.ts b/src/flags.ts index 53da314b76..b3d0c1cf7b 100644 --- a/src/flags.ts +++ b/src/flags.ts @@ -195,11 +195,6 @@ export const featureFlags = { * Flags to enable experimental features. These might be removed w/o notice or moved to stable. */ experiment: { - /** - * Enables synchronous shadow state updates for Screen components on iOS - * (Fabric, RN 0.82+). On by default. - * PR: https://github.com/software-mansion/react-native-screens/pull/3282 - */ get synchronousScreenUpdatesEnabled() { return synchronousScreenUpdatesAccessor.get(); }, From eee2e5e1b42ed8c38a7ee9c83d0e35e3b2be60a7 Mon Sep 17 00:00:00 2001 From: Konrad Michalik Date: Tue, 28 Apr 2026 13:32:12 +0200 Subject: [PATCH 3/3] Fix Test2543 --- apps/src/tests/issue-tests/Test2543.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/src/tests/issue-tests/Test2543.tsx b/apps/src/tests/issue-tests/Test2543.tsx index f4175db157..8aedca9e4e 100644 --- a/apps/src/tests/issue-tests/Test2543.tsx +++ b/apps/src/tests/issue-tests/Test2543.tsx @@ -89,7 +89,6 @@ function FormSheet({ route }: StackNavigationProp) {