diff --git a/native/flow-typed/npm/@react-navigation/bottom-tabs_v5.x.x.js b/native/flow-typed/npm/@react-navigation/bottom-tabs_v5.x.x.js
--- a/native/flow-typed/npm/@react-navigation/bottom-tabs_v5.x.x.js
+++ b/native/flow-typed/npm/@react-navigation/bottom-tabs_v5.x.x.js
@@ -941,6 +941,13 @@
     +path?: string,
   |};
 
+  declare type ScreenOptionsProp<
+    ScreenOptions: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenOptions
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions;
   declare export type ScreenListeners<
     State: NavigationState = NavigationState,
     EventMap: EventMapBase = EventMapCore<State>,
@@ -948,6 +955,13 @@
     {| [name: $Keys<EventMap>]: empty |},
     <K: $Keys<EventMap>>(K, empty) => EventListenerCallback<K, State, EventMap>,
   >;
+  declare type ScreenListenersProp<
+    ScreenListenersParam: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenListenersParam
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenListenersParam;
 
   declare type BaseScreenProps<
     ParamList: ParamListBase,
@@ -958,18 +972,16 @@
     EventMap: EventMapBase = EventMapCore<State>,
   > = {|
     +name: RouteName,
-    +options?:
-      | ScreenOptions
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenOptions,
-    +listeners?:
-      | ScreenListeners<State, EventMap>
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenListeners<State, EventMap>,
+    +options?: ScreenOptionsProp<
+      ScreenOptions,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
+    +listeners?: ScreenListenersProp<
+      ScreenListeners<State, EventMap>,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
     +initialParams?: $Partial<$ElementType<ParamList, RouteName>>,
     +getId?: ({
       +params: $ElementType<ParamList, RouteName>,
@@ -1052,26 +1064,23 @@
     EventMap,
   >) => React$Node;
 
-  declare type ScreenOptionsProp<
+  declare type ScreenOptionsProps<
     ScreenOptions: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenOptions?:
-      | ScreenOptions
-      | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions,
+    +screenOptions?: ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
   |};
-  declare type ScreenListenersProp<
+  declare type ScreenListenersProps<
     ScreenListenersParam: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenListeners?:
-      | ScreenListenersParam
-      | ({|
-          +route: RouteParam,
-          +navigation: NavHelpers,
-        |}) => ScreenListenersParam,
+    +screenListeners?: ScreenListenersProp<
+      ScreenListenersParam,
+      RouteParam,
+      NavHelpers,
+    >,
   |};
   declare export type ExtraNavigatorPropsBase = {
     ...$Exact<DefaultRouterOptions>,
@@ -1087,8 +1096,8 @@
     ExtraNavigatorProps: ExtraNavigatorPropsBase,
   > = {
     ...$Exact<ExtraNavigatorProps>,
-    ...ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
-    ...ScreenListenersProp<ScreenListenersParam, RouteParam, NavHelpers>,
+    ...ScreenOptionsProps<ScreenOptions, RouteParam, NavHelpers>,
+    ...ScreenListenersProps<ScreenListenersParam, RouteParam, NavHelpers>,
     ...
   };
   declare export type NavigatorPropsBase<
@@ -1132,7 +1141,7 @@
       ExtraNavigatorProps,
     >>>,
     +Group: React$ComponentType<{|
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
       +children: React$Node,
       +navigationKey?: string,
     |}>,
@@ -1182,7 +1191,7 @@
     routerFactory: RouterFactory<State, Action, RouterOptions>,
     options: {|
       ...$Exact<RouterOptions>,
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<>, NavHelpers>,
       +children?: React$Node,
     |},
   ) => {|
diff --git a/native/flow-typed/npm/@react-navigation/devtools_v5.x.x.js b/native/flow-typed/npm/@react-navigation/devtools_v5.x.x.js
--- a/native/flow-typed/npm/@react-navigation/devtools_v5.x.x.js
+++ b/native/flow-typed/npm/@react-navigation/devtools_v5.x.x.js
@@ -941,6 +941,13 @@
     +path?: string,
   |};
 
+  declare type ScreenOptionsProp<
+    ScreenOptions: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenOptions
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions;
   declare export type ScreenListeners<
     State: NavigationState = NavigationState,
     EventMap: EventMapBase = EventMapCore<State>,
@@ -948,6 +955,13 @@
     {| [name: $Keys<EventMap>]: empty |},
     <K: $Keys<EventMap>>(K, empty) => EventListenerCallback<K, State, EventMap>,
   >;
+  declare type ScreenListenersProp<
+    ScreenListenersParam: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenListenersParam
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenListenersParam;
 
   declare type BaseScreenProps<
     ParamList: ParamListBase,
@@ -958,18 +972,16 @@
     EventMap: EventMapBase = EventMapCore<State>,
   > = {|
     +name: RouteName,
-    +options?:
-      | ScreenOptions
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenOptions,
-    +listeners?:
-      | ScreenListeners<State, EventMap>
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenListeners<State, EventMap>,
+    +options?: ScreenOptionsProp<
+      ScreenOptions,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
+    +listeners?: ScreenListenersProp<
+      ScreenListeners<State, EventMap>,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
     +initialParams?: $Partial<$ElementType<ParamList, RouteName>>,
     +getId?: ({
       +params: $ElementType<ParamList, RouteName>,
@@ -1052,26 +1064,23 @@
     EventMap,
   >) => React$Node;
 
-  declare type ScreenOptionsProp<
+  declare type ScreenOptionsProps<
     ScreenOptions: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenOptions?:
-      | ScreenOptions
-      | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions,
+    +screenOptions?: ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
   |};
-  declare type ScreenListenersProp<
+  declare type ScreenListenersProps<
     ScreenListenersParam: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenListeners?:
-      | ScreenListenersParam
-      | ({|
-          +route: RouteParam,
-          +navigation: NavHelpers,
-        |}) => ScreenListenersParam,
+    +screenListeners?: ScreenListenersProp<
+      ScreenListenersParam,
+      RouteParam,
+      NavHelpers,
+    >,
   |};
   declare export type ExtraNavigatorPropsBase = {
     ...$Exact<DefaultRouterOptions>,
@@ -1087,8 +1096,8 @@
     ExtraNavigatorProps: ExtraNavigatorPropsBase,
   > = {
     ...$Exact<ExtraNavigatorProps>,
-    ...ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
-    ...ScreenListenersProp<ScreenListenersParam, RouteParam, NavHelpers>,
+    ...ScreenOptionsProps<ScreenOptions, RouteParam, NavHelpers>,
+    ...ScreenListenersProps<ScreenListenersParam, RouteParam, NavHelpers>,
     ...
   };
   declare export type NavigatorPropsBase<
@@ -1132,7 +1141,7 @@
       ExtraNavigatorProps,
     >>>,
     +Group: React$ComponentType<{|
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
       +children: React$Node,
       +navigationKey?: string,
     |}>,
@@ -1182,7 +1191,7 @@
     routerFactory: RouterFactory<State, Action, RouterOptions>,
     options: {|
       ...$Exact<RouterOptions>,
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<>, NavHelpers>,
       +children?: React$Node,
     |},
   ) => {|
diff --git a/native/flow-typed/npm/@react-navigation/material-top-tabs_v5.x.x.js b/native/flow-typed/npm/@react-navigation/material-top-tabs_v5.x.x.js
--- a/native/flow-typed/npm/@react-navigation/material-top-tabs_v5.x.x.js
+++ b/native/flow-typed/npm/@react-navigation/material-top-tabs_v5.x.x.js
@@ -941,6 +941,13 @@
     +path?: string,
   |};
 
+  declare type ScreenOptionsProp<
+    ScreenOptions: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenOptions
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions;
   declare export type ScreenListeners<
     State: NavigationState = NavigationState,
     EventMap: EventMapBase = EventMapCore<State>,
@@ -948,6 +955,13 @@
     {| [name: $Keys<EventMap>]: empty |},
     <K: $Keys<EventMap>>(K, empty) => EventListenerCallback<K, State, EventMap>,
   >;
+  declare type ScreenListenersProp<
+    ScreenListenersParam: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenListenersParam
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenListenersParam;
 
   declare type BaseScreenProps<
     ParamList: ParamListBase,
@@ -958,18 +972,16 @@
     EventMap: EventMapBase = EventMapCore<State>,
   > = {|
     +name: RouteName,
-    +options?:
-      | ScreenOptions
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenOptions,
-    +listeners?:
-      | ScreenListeners<State, EventMap>
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenListeners<State, EventMap>,
+    +options?: ScreenOptionsProp<
+      ScreenOptions,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
+    +listeners?: ScreenListenersProp<
+      ScreenListeners<State, EventMap>,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
     +initialParams?: $Partial<$ElementType<ParamList, RouteName>>,
     +getId?: ({
       +params: $ElementType<ParamList, RouteName>,
@@ -1052,26 +1064,23 @@
     EventMap,
   >) => React$Node;
 
-  declare type ScreenOptionsProp<
+  declare type ScreenOptionsProps<
     ScreenOptions: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenOptions?:
-      | ScreenOptions
-      | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions,
+    +screenOptions?: ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
   |};
-  declare type ScreenListenersProp<
+  declare type ScreenListenersProps<
     ScreenListenersParam: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenListeners?:
-      | ScreenListenersParam
-      | ({|
-          +route: RouteParam,
-          +navigation: NavHelpers,
-        |}) => ScreenListenersParam,
+    +screenListeners?: ScreenListenersProp<
+      ScreenListenersParam,
+      RouteParam,
+      NavHelpers,
+    >,
   |};
   declare export type ExtraNavigatorPropsBase = {
     ...$Exact<DefaultRouterOptions>,
@@ -1087,8 +1096,8 @@
     ExtraNavigatorProps: ExtraNavigatorPropsBase,
   > = {
     ...$Exact<ExtraNavigatorProps>,
-    ...ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
-    ...ScreenListenersProp<ScreenListenersParam, RouteParam, NavHelpers>,
+    ...ScreenOptionsProps<ScreenOptions, RouteParam, NavHelpers>,
+    ...ScreenListenersProps<ScreenListenersParam, RouteParam, NavHelpers>,
     ...
   };
   declare export type NavigatorPropsBase<
@@ -1132,7 +1141,7 @@
       ExtraNavigatorProps,
     >>>,
     +Group: React$ComponentType<{|
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
       +children: React$Node,
       +navigationKey?: string,
     |}>,
@@ -1182,7 +1191,7 @@
     routerFactory: RouterFactory<State, Action, RouterOptions>,
     options: {|
       ...$Exact<RouterOptions>,
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<>, NavHelpers>,
       +children?: React$Node,
     |},
   ) => {|
diff --git a/native/flow-typed/npm/@react-navigation/native_v5.x.x.js b/native/flow-typed/npm/@react-navigation/native_v5.x.x.js
--- a/native/flow-typed/npm/@react-navigation/native_v5.x.x.js
+++ b/native/flow-typed/npm/@react-navigation/native_v5.x.x.js
@@ -941,6 +941,13 @@
     +path?: string,
   |};
 
+  declare type ScreenOptionsProp<
+    ScreenOptions: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenOptions
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions;
   declare export type ScreenListeners<
     State: NavigationState = NavigationState,
     EventMap: EventMapBase = EventMapCore<State>,
@@ -948,6 +955,13 @@
     {| [name: $Keys<EventMap>]: empty |},
     <K: $Keys<EventMap>>(K, empty) => EventListenerCallback<K, State, EventMap>,
   >;
+  declare type ScreenListenersProp<
+    ScreenListenersParam: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenListenersParam
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenListenersParam;
 
   declare type BaseScreenProps<
     ParamList: ParamListBase,
@@ -958,18 +972,16 @@
     EventMap: EventMapBase = EventMapCore<State>,
   > = {|
     +name: RouteName,
-    +options?:
-      | ScreenOptions
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenOptions,
-    +listeners?:
-      | ScreenListeners<State, EventMap>
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenListeners<State, EventMap>,
+    +options?: ScreenOptionsProp<
+      ScreenOptions,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
+    +listeners?: ScreenListenersProp<
+      ScreenListeners<State, EventMap>,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
     +initialParams?: $Partial<$ElementType<ParamList, RouteName>>,
     +getId?: ({
       +params: $ElementType<ParamList, RouteName>,
@@ -1052,26 +1064,23 @@
     EventMap,
   >) => React$Node;
 
-  declare type ScreenOptionsProp<
+  declare type ScreenOptionsProps<
     ScreenOptions: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenOptions?:
-      | ScreenOptions
-      | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions,
+    +screenOptions?: ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
   |};
-  declare type ScreenListenersProp<
+  declare type ScreenListenersProps<
     ScreenListenersParam: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenListeners?:
-      | ScreenListenersParam
-      | ({|
-          +route: RouteParam,
-          +navigation: NavHelpers,
-        |}) => ScreenListenersParam,
+    +screenListeners?: ScreenListenersProp<
+      ScreenListenersParam,
+      RouteParam,
+      NavHelpers,
+    >,
   |};
   declare export type ExtraNavigatorPropsBase = {
     ...$Exact<DefaultRouterOptions>,
@@ -1087,8 +1096,8 @@
     ExtraNavigatorProps: ExtraNavigatorPropsBase,
   > = {
     ...$Exact<ExtraNavigatorProps>,
-    ...ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
-    ...ScreenListenersProp<ScreenListenersParam, RouteParam, NavHelpers>,
+    ...ScreenOptionsProps<ScreenOptions, RouteParam, NavHelpers>,
+    ...ScreenListenersProps<ScreenListenersParam, RouteParam, NavHelpers>,
     ...
   };
   declare export type NavigatorPropsBase<
@@ -1132,7 +1141,7 @@
       ExtraNavigatorProps,
     >>>,
     +Group: React$ComponentType<{|
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
       +children: React$Node,
       +navigationKey?: string,
     |}>,
@@ -1182,7 +1191,7 @@
     routerFactory: RouterFactory<State, Action, RouterOptions>,
     options: {|
       ...$Exact<RouterOptions>,
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<>, NavHelpers>,
       +children?: React$Node,
     |},
   ) => {|
diff --git a/native/flow-typed/npm/@react-navigation/stack_v5.x.x.js b/native/flow-typed/npm/@react-navigation/stack_v5.x.x.js
--- a/native/flow-typed/npm/@react-navigation/stack_v5.x.x.js
+++ b/native/flow-typed/npm/@react-navigation/stack_v5.x.x.js
@@ -941,6 +941,13 @@
     +path?: string,
   |};
 
+  declare type ScreenOptionsProp<
+    ScreenOptions: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenOptions
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions;
   declare export type ScreenListeners<
     State: NavigationState = NavigationState,
     EventMap: EventMapBase = EventMapCore<State>,
@@ -948,6 +955,13 @@
     {| [name: $Keys<EventMap>]: empty |},
     <K: $Keys<EventMap>>(K, empty) => EventListenerCallback<K, State, EventMap>,
   >;
+  declare type ScreenListenersProp<
+    ScreenListenersParam: {...},
+    RouteParam,
+    NavHelpers,
+  > =
+    | ScreenListenersParam
+    | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenListenersParam;
 
   declare type BaseScreenProps<
     ParamList: ParamListBase,
@@ -958,18 +972,16 @@
     EventMap: EventMapBase = EventMapCore<State>,
   > = {|
     +name: RouteName,
-    +options?:
-      | ScreenOptions
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenOptions,
-    +listeners?:
-      | ScreenListeners<State, EventMap>
-      | ({|
-          +route: RouteProp<ParamList, RouteName>,
-          +navigation: NavProp,
-        |}) => ScreenListeners<State, EventMap>,
+    +options?: ScreenOptionsProp<
+      ScreenOptions,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
+    +listeners?: ScreenListenersProp<
+      ScreenListeners<State, EventMap>,
+      RouteProp<ParamList, RouteName>,
+      NavProp,
+    >,
     +initialParams?: $Partial<$ElementType<ParamList, RouteName>>,
     +getId?: ({
       +params: $ElementType<ParamList, RouteName>,
@@ -1052,26 +1064,23 @@
     EventMap,
   >) => React$Node;
 
-  declare type ScreenOptionsProp<
+  declare type ScreenOptionsProps<
     ScreenOptions: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenOptions?:
-      | ScreenOptions
-      | ({| +route: RouteParam, +navigation: NavHelpers |}) => ScreenOptions,
+    +screenOptions?: ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
   |};
-  declare type ScreenListenersProp<
+  declare type ScreenListenersProps<
     ScreenListenersParam: {...},
     RouteParam,
     NavHelpers,
   > = {|
-    +screenListeners?:
-      | ScreenListenersParam
-      | ({|
-          +route: RouteParam,
-          +navigation: NavHelpers,
-        |}) => ScreenListenersParam,
+    +screenListeners?: ScreenListenersProp<
+      ScreenListenersParam,
+      RouteParam,
+      NavHelpers,
+    >,
   |};
   declare export type ExtraNavigatorPropsBase = {
     ...$Exact<DefaultRouterOptions>,
@@ -1087,8 +1096,8 @@
     ExtraNavigatorProps: ExtraNavigatorPropsBase,
   > = {
     ...$Exact<ExtraNavigatorProps>,
-    ...ScreenOptionsProp<ScreenOptions, RouteParam, NavHelpers>,
-    ...ScreenListenersProp<ScreenListenersParam, RouteParam, NavHelpers>,
+    ...ScreenOptionsProps<ScreenOptions, RouteParam, NavHelpers>,
+    ...ScreenListenersProps<ScreenListenersParam, RouteParam, NavHelpers>,
     ...
   };
   declare export type NavigatorPropsBase<
@@ -1132,7 +1141,7 @@
       ExtraNavigatorProps,
     >>>,
     +Group: React$ComponentType<{|
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<ParamList>, NavHelpers>,
       +children: React$Node,
       +navigationKey?: string,
     |}>,
@@ -1182,7 +1191,7 @@
     routerFactory: RouterFactory<State, Action, RouterOptions>,
     options: {|
       ...$Exact<RouterOptions>,
-      ...ScreenOptionsProp<ScreenOptions, RouteProp<>, NavHelpers>,
+      ...ScreenOptionsProps<ScreenOptions, RouteProp<>, NavHelpers>,
       +children?: React$Node,
     |},
   ) => {|