Skip to content

[BUG]: Fullscreen present is called, then dismiss is immediately called #4548

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
jrhager84 opened this issue May 14, 2025 · 2 comments
Open
Labels

Comments

@jrhager84
Copy link

Version

6.14.0

What platforms are you having the problem on?

iOS

System Version

iOS 18.4.1

On what device are you experiencing the issue?

Real device

Architecture

New architecture with interop layer

What happened?

Any time I use the Video component, if you try to enter fullscreen mode, it will automatically call dismiss and crash the app with this error (in XCode): RCTVideo.setFullScreen.present -> EXC_BAD_ADDRESS

Reproduction Link

repository link

Reproduction

I just used a simple Video component in Expo 53 Inside a basic View.

{ "name": "app", "main": "index.js", "version": "0.1.0", "scripts": { "start": "npx expo start --dev-client", "reset-project": "node ./scripts/reset-project.js", "android": "npx expo run:android", "ios": "npx expo run:ios", "web": "npx expo start --web", "test": "jest --watchAll", "lint": "npx expo lint", "prebuild": "npx expo prebuild", "postinstall": "patch-package", "rebuildAndroid": "npx expo prebuild && npx expo run:android --device", "rebuildIOS": "npx expo prebuild && npx expo run:ios --device" }, "jest": { "preset": "jest-expo" }, "dependencies": { "@api.video/react-native-livestream": "^2.0.1", "@expo/vector-icons": "^14.1.0", "@gorhom/bottom-sheet": "^5.0.6", "@notifee/react-native": "^9.1.8", "@react-native-async-storage/async-storage": "^2.1.0", "@react-native-community/netinfo": "11.4.1", "@react-native-community/slider": "4.5.6", "@react-navigation/bottom-tabs": "^7.2.0", "@react-navigation/native": "^7.0.14", "@shopify/flash-list": "1.7.6", "@stripe/stripe-react-native": "0.45.0", "@tanstack/react-form": "^1.1.2", "@tanstack/react-query": "^5.66.0", "@types/react-native-version-check": "^3.4.8", "axios": "^1.7.9", "eslint-plugin-react-compiler": "^19.1.0-rc.1", "expo": "53.0.9", "expo-application": "~6.1.4", "expo-blur": "^14.1.4", "expo-constants": "~17.1.6", "expo-dev-client": "~5.1.8", "expo-font": "~13.3.1", "expo-haptics": "~14.1.4", "expo-image": "~2.1.7", "expo-image-picker": "~16.1.4", "expo-linear-gradient": "~14.1.4", "expo-linking": "~7.1.5", "expo-router": "~5.0.7", "expo-screen-orientation": "~8.1.6", "expo-secure-store": "~14.2.3", "expo-sensors": "~14.1.4", "expo-splash-screen": "~0.30.8", "expo-symbols": "~0.4.4", "expo-system-ui": "~5.0.7", "expo-web-browser": "~14.1.6", "iconoir-react-native": "^7.10.1", "lint": "^0.8.19", "patch-package": "^8.0.0", "postinstall": "^0.11.2", "react": "19.0.0", "react-dom": "19.0.0", "react-native": "0.79.2", "react-native-device-info": "^14.0.4", "react-native-edge-to-edge": "^1.6.0", "react-native-gesture-handler": "~2.24.0", "react-native-keyboard-controller": "^1.15.2", "react-native-reanimated": "^3.17.5", "react-native-reanimated-carousel": "^4.0.2", "react-native-render-html": "^6.3.4", "react-native-safe-area-context": "5.4.0", "react-native-screens": "~4.10.0", "react-native-svg": "15.11.2", "react-native-svg-transformer": "^1.5.0", "react-native-toast-message": "^2.2.1", "react-native-unistyles": "^2.20.0", "react-native-uuid": "^2.0.3", "react-native-version-check": "^3.4.7", "react-native-video": "^6.14.0", "react-native-web": "^0.20.0", "react-native-webview": "13.13.5", "uuid": "^11.0.5", "zeego": "^3.0.6", "zod": "^3.24.3" }, "devDependencies": { "@babel/core": "^7.25.2", "@react-native-community/cli": "latest", "@tanstack/eslint-plugin-query": "^5.66.0", "@types/jest": "^29.5.12", "@types/react": "~19.0.10", "@types/react-native-snap-carousel": "^3.8.11", "@types/react-test-renderer": "^18.3.0", "jest": "^29.2.1", "jest-expo": "~53.0.5", "metro-config": "^0.82.3", "react-test-renderer": "18.3.1", "typescript": "~5.8.3" }, "private": true }

Copy link

Hey! 👋
Thanks for the bug report. To help us resolve your issue effectively, we still need some key information:

  • reproduction link

    Please edit your issue and fill in the missing details.

    Issues with incomplete info are treated with lower priority, so this helps speed things up.

Need faster resolution? Consider Issue Boost – it allows us to dedicate time specifically to your issue and fix it faster 🚀

@FaysalBsata
Copy link

FaysalBsata commented May 15, 2025

I'm having same issue:


const onLoad = useCallback((video: any) => {
    setIsVideoReady(true);

    videoRef.current?.presentFullscreenPlayer();
    // videoRef.current?.setFullScreen(true);
  }, []);
  <Video
        source={source}
        ref={videoRef}
        controls={enableControls}
        muted={muted}
        resizeMode="contain"
        showNotificationControls={Platform.OS === "ios"}
        fullscreen={false}
        fullscreenAutorotate={Platform.OS === "ios"}
        fullscreenOrientation="landscape"
        onProgress={onProgress}
        onLoad={onLoad}
        progressUpdateInterval={1000}
        reportBandwidth
        hideShutterView
        shutterColor="transparent"
        onError={(error) => console.warn("onError", error)}
        paused={!autoplay}
        onFullscreenPlayerDidDismiss={() => {
          router.back();
        }}
        onPlaybackStateChanged={(state) => {
          if (state.isPlaying) onPlay?.();
        }}
      />

the router.back() is getting called right away.
I was able to defeat it with:

  const [readyToDismiss, setReadyToDismiss] = useState(
    Platform.OS === "android",
  );
 onFullscreenPlayerWillDismiss={() => {
          setReadyToDismiss(true);
          if (shouldFullScreen && readyToDismiss) {
            router.back();
          }
        }}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: To Triage
Development

No branches or pull requests

2 participants