1

我正在尝试在按下整个视频时实现播放/暂停。

const RenderItem = (props) => {
  const [paused, setPaused] = useState(true);
  return (
    <View>
      {props.is_video ? (
        <>
          <Video
            paused={paused}
            resizeMode="contain"
            source={{
              uri: props.mediaUrl,
            }}
          />
          <TouchableWithoutFeedback onPress={setPaused}>
            <Text>Play Darnit!</Text>
          </TouchableWithoutFeedback>
        </>
      ) : (
        <Image
          resizeMode="contain"
          source={{uri: props.mediaUrl}}
        />
      )}
    </View>
  );
};

似乎按下文本会导致视频播放(我能听到声音),然后它很快就会收到一条错误消息:

JSON value '{
    "_dispatchInstances" = "<null>";
    "_dispatchListeners" = "<null>";
    "_targetInst" = "<null>";
    bubbles = "<null>";
    cancelable = "<null>";
    defaultPrevented = "<null>";
    dispatchConfig = "<null>";
    eventPhase = "<null>";
    isTrusted = "<null>";
    nativeEvent = "<null>";
    target = "<null>";
    type = "<null>";
}' of type NSMutableDictionary cannot be converted to BOOL

另外,顺便提一下,这个 RenderItem 正在一个 FlatList 中呈现,其中有多个视频。我不确定我是否还必须将按钮与正确的视频相匹配?因此播放按钮不会意外播放另一个视频,或一次播放所有视频。

为什么我会收到此错误?

4

1 回答 1

1

您的 onPress 只是调用 setPaused,但您并没有告诉它要设置什么。所以目前它只是从水龙头中输入本地事件。然后礼貌地告诉你说的原生事件不是布尔值。

所以如果我是你,我会创建一个名为 togglePaused 的函数来切换你的状态,然后在 onPress 中调用它,比如......

const RenderItem = (props) => {
  const [paused, setPaused] = useState(true);

  const togglePaused = () => setPaused(prev => !prev) // add this toggle function

  return (
    <View>
      {props.is_video ? (
        <>
          <Video
            paused={paused}
            resizeMode="contain"
            source={{
              uri: props.mediaUrl,
            }}
            />
            {/* call togglePaused in the onPress prop  */}
          <TouchableWithoutFeedback onPress={togglePaused}>
            <Text>Play Darnit!</Text>
          </TouchableWithoutFeedback>
        </>
      ) : (
        <Image
          resizeMode="contain"
          source={{uri: props.mediaUrl}}
        />
      )}
    </View>
  );
};
于 2020-01-15T08:04:30.270 回答