fix: error

This commit is contained in:
imeepos
2025-10-29 19:38:04 +08:00
parent 3a99ff96d5
commit 30ea4fb13c
34 changed files with 2185 additions and 870 deletions

View File

@@ -1,6 +1,6 @@
import { ThemedText } from '@/components/themed-text';
import { AVPlaybackStatus, ResizeMode, Video } from 'expo-av';
import React, { useEffect, useRef, useState } from 'react';
import React, { useCallback, useEffect, useRef, useState } from 'react';
import {
ActivityIndicator,
Dimensions,
@@ -11,6 +11,7 @@ import {
StyleSheet,
TouchableOpacity,
View,
BackHandler,
} from 'react-native';
const { width: screenWidth, height: screenHeight } = Dimensions.get('window');
@@ -44,15 +45,11 @@ export function FullscreenVideoModal({
}: FullscreenVideoModalProps) {
const videoRef = useRef<Video>(null);
const [isLoading, setIsLoading] = useState(true);
const [isPlaying, setIsPlaying] = useState(autoPlay);
const [showControls, setShowControls] = useState(true);
// 重置状态当模态框打开/关闭时
useEffect(() => {
if (visible) {
setIsLoading(true);
setIsPlaying(autoPlay);
setShowControls(true);
} else {
// 停止播放当关闭时
if (videoRef.current) {
@@ -71,29 +68,21 @@ export function FullscreenVideoModal({
}
};
// 处理视频播放状态变化
const handlePlaybackStatusUpdate = (status: AVPlaybackStatus) => {
if (status.isLoaded) {
setIsPlaying(status.isPlaying);
}
};
// 处理视频错误
const handleVideoError = (error: any) => {
console.error('视频播放错误:', error);
setIsLoading(false);
};
const handleClose = useCallback(() => {
onClose();
}, [onClose]);
// 视频点击处理(直接关闭)
const handleVideoPress = () => {
handleClose();
};
// 关闭模态框
const handleClose = () => {
onClose();
};
// 创建手势处理器
const panResponder = useRef(
PanResponder.create({
@@ -117,7 +106,7 @@ export function FullscreenVideoModal({
// 处理返回键Android
useEffect(() => {
const backHandler = () => {
const handleBackPress = () => {
if (visible) {
handleClose();
return true;
@@ -125,13 +114,9 @@ export function FullscreenVideoModal({
return false;
};
// 在实际应用中,这里需要添加返回键监听
// 对于演示,我们只做概念性实现
return () => {
// 清理返回键监听
};
}, [visible]);
const subscription = BackHandler.addEventListener('hardwareBackPress', handleBackPress);
return () => subscription.remove();
}, [visible, handleClose]);
if (!visible) return null;
@@ -181,7 +166,6 @@ export function FullscreenVideoModal({
isMuted={isMuted}
useNativeControls={false}
onReadyForDisplay={handleVideoReady}
onPlaybackStatusUpdate={handlePlaybackStatusUpdate}
onError={handleVideoError}
/>
)}
@@ -291,4 +275,4 @@ const styles = StyleSheet.create({
},
});
export default FullscreenVideoModal;
export default FullscreenVideoModal;