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'; 8378a6099S猫头猫 9378a6099S猫头猫interface IMusicListProps { 10378a6099S猫头猫 /** 顶部 */ 11378a6099S猫头猫 Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent']; 12378a6099S猫头猫 /** 音乐列表 */ 13378a6099S猫头猫 musicList?: IMusic.IMusicItem[]; 14378a6099S猫头猫 /** 所在歌单 */ 15378a6099S猫头猫 musicSheet?: IMusic.IMusicSheetItem; 16378a6099S猫头猫 /** 是否展示序号 */ 17378a6099S猫头猫 showIndex?: boolean; 189e24e067S猫头猫 /** 点击 */ 19*cbb92902S猫头猫 onItemPress?: ( 20*cbb92902S猫头猫 musicItem: IMusic.IMusicItem, 21*cbb92902S猫头猫 musicList?: IMusic.IMusicItem[], 22*cbb92902S猫头猫 ) => void; 23378a6099S猫头猫} 2445510a04S猫头猫const ITEM_HEIGHT = rpx(120); 25378a6099S猫头猫export default function MusicList(props: IMusicListProps) { 269e24e067S猫头猫 const {Header, musicList, musicSheet, showIndex, onItemPress} = props; 27378a6099S猫头猫 28378a6099S猫头猫 return ( 29378a6099S猫头猫 <FlatList 30378a6099S猫头猫 style={style.wrapper} 31378a6099S猫头猫 ListHeaderComponent={Header} 32378a6099S猫头猫 data={musicList ?? []} 334060c00aS猫头猫 keyExtractor={musicItem => 344060c00aS猫头猫 `ml-${musicItem.id}${musicItem.platform}` 354060c00aS猫头猫 } 3645510a04S猫头猫 getItemLayout={(_, index) => ({ 3745510a04S猫头猫 length: ITEM_HEIGHT, 3845510a04S猫头猫 offset: ITEM_HEIGHT * index, 3945510a04S猫头猫 index, 4045510a04S猫头猫 })} 41378a6099S猫头猫 renderItem={({index, item: musicItem}) => { 42378a6099S猫头猫 return ( 433a76c6afS猫头猫 <MusicItem 443a76c6afS猫头猫 musicItem={musicItem} 453a76c6afS猫头猫 index={showIndex ? index + 1 : undefined} 463a76c6afS猫头猫 onItemPress={() => { 479e24e067S猫头猫 if (onItemPress) { 48*cbb92902S猫头猫 onItemPress(musicItem, musicList); 499e24e067S猫头猫 } else { 504060c00aS猫头猫 MusicQueue.playWithReplaceQueue( 514060c00aS猫头猫 musicItem, 524060c00aS猫头猫 musicList ?? [], 534060c00aS猫头猫 ); 54378a6099S猫头猫 } 559e24e067S猫头猫 }} 564060c00aS猫头猫 musicSheet={musicSheet} 574060c00aS猫头猫 /> 58378a6099S猫头猫 ); 594060c00aS猫头猫 }} 604060c00aS猫头猫 /> 61378a6099S猫头猫 ); 62378a6099S猫头猫} 63378a6099S猫头猫 64378a6099S猫头猫const style = StyleSheet.create({ 65378a6099S猫头猫 wrapper: { 66378a6099S猫头猫 width: rpx(750), 67378a6099S猫头猫 }, 68378a6099S猫头猫}); 69