/
PlaylistScreen.js
123 lines (112 loc) · 2.95 KB
/
PlaylistScreen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import React, { useEffect } from "react";
import { StyleSheet, Text, View } from "react-native";
import TrackPlayer, { usePlaybackState } from "react-native-track-player";
import Player from "../components/Player";
import playlistData from "../data/playlist.json";
import localTrack from "../resources/pure.m4a";
export default function PlaylistScreen() {
const playbackState = usePlaybackState();
useEffect(() => {
setup();
}, []);
async function setup() {
await TrackPlayer.setupPlayer({});
await TrackPlayer.updateOptions({
stopWithApp: true,
capabilities: [
TrackPlayer.CAPABILITY_PLAY,
TrackPlayer.CAPABILITY_PAUSE,
TrackPlayer.CAPABILITY_SKIP_TO_NEXT,
TrackPlayer.CAPABILITY_SKIP_TO_PREVIOUS,
TrackPlayer.CAPABILITY_STOP
],
compactCapabilities: [
TrackPlayer.CAPABILITY_PLAY,
TrackPlayer.CAPABILITY_PAUSE
]
});
}
async function togglePlayback() {
const currentTrack = await TrackPlayer.getCurrentTrack();
if (currentTrack == null) {
await TrackPlayer.reset();
await TrackPlayer.add(playlistData);
await TrackPlayer.add({
id: "local-track",
url: localTrack,
title: "Pure (Demo)",
artist: "David Chavez",
artwork: "https://i.picsum.photos/id/500/200/200.jpg",
duration: 28
});
await TrackPlayer.play();
} else {
if (playbackState === TrackPlayer.STATE_PAUSED) {
await TrackPlayer.play();
} else {
await TrackPlayer.pause();
}
}
}
return (
<View style={styles.container}>
<Text style={styles.description}>
We'll be inserting a playlist into the library loaded from
`playlist.json`. We'll also be using the `ProgressComponent` which
allows us to track playback time.
</Text>
<Player
onNext={skipToNext}
style={styles.player}
onPrevious={skipToPrevious}
onTogglePlayback={togglePlayback}
/>
<Text style={styles.state}>{getStateName(playbackState)}</Text>
</View>
);
}
PlaylistScreen.navigationOptions = {
title: "Playlist Example"
};
function getStateName(state) {
switch (state) {
case TrackPlayer.STATE_NONE:
return "None";
case TrackPlayer.STATE_PLAYING:
return "Playing";
case TrackPlayer.STATE_PAUSED:
return "Paused";
case TrackPlayer.STATE_STOPPED:
return "Stopped";
case TrackPlayer.STATE_BUFFERING:
return "Buffering";
}
}
async function skipToNext() {
try {
await TrackPlayer.skipToNext();
} catch (_) {}
}
async function skipToPrevious() {
try {
await TrackPlayer.skipToPrevious();
} catch (_) {}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
backgroundColor: "#F5FCFF"
},
description: {
width: "80%",
marginTop: 20,
textAlign: "center"
},
player: {
marginTop: 40
},
state: {
marginTop: 20
}
});