Skip to content

Commit d759363

Browse files
kmichalikkclaude
andcommitted
feat: Enable synchronous screen shadow state updates by default
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1 parent b43a021 commit d759363

5 files changed

Lines changed: 10 additions & 4 deletions

File tree

FabricExample/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import App from '../apps';
22
import { featureFlags } from 'react-native-screens';
33

4-
featureFlags.experiment.synchronousScreenUpdatesEnabled = false;
4+
featureFlags.experiment.synchronousScreenUpdatesEnabled = true;
55
featureFlags.experiment.synchronousHeaderConfigUpdatesEnabled = false;
66
featureFlags.experiment.synchronousHeaderSubviewUpdatesEnabled = false;
77
featureFlags.experiment.androidResetScreenShadowStateOnOrientationChangeEnabled =

ios/RNSScreen.mm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ - (void)initCommonProps
103103
_sheetsScrollView = nil;
104104
_sheetContentHeight = 0.0;
105105
_markedForUnmountInCurrentTransaction = NO;
106+
_synchronousShadowStateUpdatesEnabled = YES;
106107
}
107108

108109
+ (RNSViewInteractionManager *)viewInteractionManagerInstance

src/fabric/ModalScreenNativeComponent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export interface NativeProps extends ViewProps {
121121
leftScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
122122
rightScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
123123
topScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
124-
synchronousShadowStateUpdatesEnabled?: CT.WithDefault<boolean, false>;
124+
synchronousShadowStateUpdatesEnabled?: CT.WithDefault<boolean, true>;
125125
}
126126

127127
export default codegenNativeComponent<NativeProps>('RNSModalScreen', {

src/fabric/ScreenNativeComponent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export interface NativeProps extends ViewProps {
121121
leftScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
122122
rightScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
123123
topScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
124-
synchronousShadowStateUpdatesEnabled?: CT.WithDefault<boolean, false>;
124+
synchronousShadowStateUpdatesEnabled?: CT.WithDefault<boolean, true>;
125125
androidResetScreenShadowStateOnOrientationChangeEnabled?: CT.WithDefault<
126126
boolean,
127127
true

src/flags.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const RNS_SYNCHRONOUS_SCREEN_STATE_UPDATES_DEFAULT = false;
1+
const RNS_SYNCHRONOUS_SCREEN_STATE_UPDATES_DEFAULT = true;
22
const RNS_SYNCHRONOUS_HEADER_CONFIG_STATE_UPDATES_DEFAULT = false;
33
const RNS_SYNCHRONOUS_HEADER_SUBVIEW_STATE_UPDATES_DEFAULT = false;
44
const RNS_ANDROID_LEGACY_TOP_INSET_BEHAVIOR_DEFAULT = false;
@@ -195,6 +195,11 @@ export const featureFlags = {
195195
* Flags to enable experimental features. These might be removed w/o notice or moved to stable.
196196
*/
197197
experiment: {
198+
/**
199+
* Enables synchronous shadow state updates for Screen components on iOS
200+
* (Fabric, RN 0.82+). On by default.
201+
* PR: https://github.com/software-mansion/react-native-screens/pull/3282
202+
*/
198203
get synchronousScreenUpdatesEnabled() {
199204
return synchronousScreenUpdatesAccessor.get();
200205
},

0 commit comments

Comments
 (0)