Плеер в духе старой техники: ЭЛТ-экран со строками развёртки, виньеткой и бликом, решётка динамика и три механические кнопки. Кнопки проседают на пружине и отзываются вибрацией на iOS и Android, а в вебе — синтезированным щелчком. Строка состояния показывает трек, мигающий индикатор воспроизведения и часы.
Обложка выводится через Skia с цветокоррекцией кинескопа, вместо неё можно передать видео в mediaUrl. На устройствах с указателем корпус слегка наклоняется, а блик на экране следует за курсором; при «Уменьшении движения» наклон и мигание отключаются. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @shopify/react-native-skia expo-haptics expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgpnpm add @shopify/react-native-skia expo-haptics expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgyarn add @shopify/react-native-skia expo-haptics expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgbun add @shopify/react-native-skia expo-haptics expo-linear-gradient expo-video react-native-gesture-handler react-native-reanimated react-native-svgСкопируйте эти файлы в src/shared/components/organisms/retro-music-player/:
Код доступен по подпискеPro
Исходник «Ретро-плеер» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Ретро-плеер» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Состоянием воспроизведения управляет родитель: передайте isPlaying и обработчики onPlay, onPrev, onNext.
imageUrl?Тип string
mediaUrl?Тип string
songTitle?Тип string
artist?Тип string
isPlaying?Тип boolean
onPlay?Тип () => void
onNext?Тип () => void
onPrev?Тип () => void
style?Тип StyleProp<ViewStyle>