1378a6099S猫头猫import React from 'react'; 2caaa811bS猫头猫import {FlatListProps, StyleSheet} from 'react-native'; 3378a6099S猫头猫import rpx from '@/utils/rpx'; 4242960d3S猫头猫import MusicQueue from '@/core/musicQueue'; 5378a6099S猫头猫import {FlatList} from 'react-native-gesture-handler'; 6378a6099S猫头猫 7a3b33415S猫头猫import MusicItem from '../mediaItem/musicItem'; 87d7e864fS猫头猫import Empty from '../base/empty'; 9378a6099S猫头猫 10378a6099S猫头猫interface IMusicListProps { 11378a6099S猫头猫 /** 顶部 */ 12378a6099S猫头猫 Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent']; 13378a6099S猫头猫 /** 音乐列表 */ 14378a6099S猫头猫 musicList?: IMusic.IMusicItem[]; 15378a6099S猫头猫 /** 所在歌单 */ 16378a6099S猫头猫 musicSheet?: IMusic.IMusicSheetItem; 17378a6099S猫头猫 /** 是否展示序号 */ 18378a6099S猫头猫 showIndex?: boolean; 199e24e067S猫头猫 /** 点击 */ 20cbb92902S猫头猫 onItemPress?: ( 21cbb92902S猫头猫 musicItem: IMusic.IMusicItem, 22cbb92902S猫头猫 musicList?: IMusic.IMusicItem[], 23cbb92902S猫头猫 ) => void; 24378a6099S猫头猫} 2545510a04S猫头猫const ITEM_HEIGHT = rpx(120); 26*be539549S猫头猫 27*be539549S猫头猫/** 音乐列表 */ 28378a6099S猫头猫export default function MusicList(props: IMusicListProps) { 299e24e067S猫头猫 const {Header, musicList, musicSheet, showIndex, onItemPress} = props; 30378a6099S猫头猫 31378a6099S猫头猫 return ( 32378a6099S猫头猫 <FlatList 33378a6099S猫头猫 style={style.wrapper} 34378a6099S猫头猫 ListHeaderComponent={Header} 357d7e864fS猫头猫 ListEmptyComponent={Empty} 36378a6099S猫头猫 data={musicList ?? []} 374060c00aS猫头猫 keyExtractor={musicItem => 384060c00aS猫头猫 `ml-${musicItem.id}${musicItem.platform}` 394060c00aS猫头猫 } 4045510a04S猫头猫 getItemLayout={(_, index) => ({ 4145510a04S猫头猫 length: ITEM_HEIGHT, 4245510a04S猫头猫 offset: ITEM_HEIGHT * index, 4345510a04S猫头猫 index, 4445510a04S猫头猫 })} 45378a6099S猫头猫 renderItem={({index, item: musicItem}) => { 46378a6099S猫头猫 return ( 473a76c6afS猫头猫 <MusicItem 483a76c6afS猫头猫 musicItem={musicItem} 493a76c6afS猫头猫 index={showIndex ? index + 1 : undefined} 503a76c6afS猫头猫 onItemPress={() => { 519e24e067S猫头猫 if (onItemPress) { 52cbb92902S猫头猫 onItemPress(musicItem, musicList); 539e24e067S猫头猫 } else { 544060c00aS猫头猫 MusicQueue.playWithReplaceQueue( 554060c00aS猫头猫 musicItem, 564060c00aS猫头猫 musicList ?? [], 574060c00aS猫头猫 ); 58378a6099S猫头猫 } 599e24e067S猫头猫 }} 604060c00aS猫头猫 musicSheet={musicSheet} 614060c00aS猫头猫 /> 62378a6099S猫头猫 ); 634060c00aS猫头猫 }} 644060c00aS猫头猫 /> 65378a6099S猫头猫 ); 66378a6099S猫头猫} 67378a6099S猫头猫 68378a6099S猫头猫const style = StyleSheet.create({ 69378a6099S猫头猫 wrapper: { 70378a6099S猫头猫 width: rpx(750), 71378a6099S猫头猫 }, 72378a6099S猫头猫}); 73