import React, {useEffect, useRef, useState} from 'react'; import { Dimensions, Image, StyleProp, StyleSheet, Text, TouchableOpacity, View, ViewStyle, } from 'react-native'; import Video from 'react-native-video'; import { ControllerConfig, LoadedConfig, LoadingConfig, ProgressProps, } from '../../types'; import LoadingView from './LoadingView'; import ProgressBar from './ProgressBar'; import LoadedView from './LoadedView'; const screenWidth = Dimensions.get('screen').width; interface VideoPlayerProps { source: | { uri?: string | undefined; headers?: {[key: string]: string} | undefined; type?: string | undefined; } | number; resizeMode?: 'stretch' | 'contain' | 'cover' | 'none' | undefined; repeat?: boolean | undefined; paused?: boolean | undefined; muted?: boolean | undefined; volume?: number | undefined; rate?: number | undefined; pictureInPicture?: boolean | undefined; playInBackground?: boolean | undefined; currentTime?: number | undefined; progressUpdateInterval?: number; audioOnly?: boolean | undefined; onProgress?: (time: ProgressProps) => void; /** 自定义属性 */ style: StyleProp; loadingConfig?: LoadingConfig; loadedConfig?: LoadedConfig; controllerConfig?: ControllerConfig; } const VideoPlayer: React.FC = props => { const [progress, setProgress] = useState(Object.create(null)); const [pause, setPause] = useState(false); const [showController, setShowController] = useState(true); const [showLoading, setShowLoading] = useState(true); const [touched, setTouched] = useState(true); const [progressStr, setProgressStr] = useState(['--:--', '--:--']); const [finished, setFinished] = useState(false); let timer: NodeJS.Timeout; const player = useRef