1378a6099S猫头猫import React from 'react'; 2*caaa811bS猫头猫import {FlatListProps, StyleSheet} from 'react-native'; 3378a6099S猫头猫import rpx from '@/utils/rpx'; 4378a6099S猫头猫import MusicQueue from '@/common/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猫头猫 /** 点击 */ 199e24e067S猫头猫 onItemPress?: (musicItem: IMusic.IMusicItem) => void; 20378a6099S猫头猫} 2145510a04S猫头猫const ITEM_HEIGHT = rpx(120); 22378a6099S猫头猫export default function MusicList(props: IMusicListProps) { 239e24e067S猫头猫 const {Header, musicList, musicSheet, showIndex, onItemPress} = props; 24378a6099S猫头猫 25378a6099S猫头猫 return ( 26378a6099S猫头猫 <FlatList 27378a6099S猫头猫 style={style.wrapper} 28378a6099S猫头猫 ListHeaderComponent={Header} 29378a6099S猫头猫 data={musicList ?? []} 30378a6099S猫头猫 keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`} 3145510a04S猫头猫 getItemLayout={(_, index) => ({ 3245510a04S猫头猫 length: ITEM_HEIGHT, 3345510a04S猫头猫 offset: ITEM_HEIGHT * index, 3445510a04S猫头猫 index, 3545510a04S猫头猫 })} 36378a6099S猫头猫 renderItem={({index, item: musicItem}) => { 37378a6099S猫头猫 return ( 383a76c6afS猫头猫 <MusicItem 393a76c6afS猫头猫 musicItem={musicItem} 403a76c6afS猫头猫 index={showIndex ? index + 1 : undefined} 413a76c6afS猫头猫 onItemPress={() => { 429e24e067S猫头猫 if (onItemPress) { 439e24e067S猫头猫 onItemPress(musicItem); 449e24e067S猫头猫 } else { 459e24e067S猫头猫 MusicQueue.playWithReplaceQueue(musicItem, musicList ?? []); 46378a6099S猫头猫 } 479e24e067S猫头猫 }} 483a76c6afS猫头猫 musicSheet={musicSheet}></MusicItem> 49378a6099S猫头猫 ); 50378a6099S猫头猫 }}></FlatList> 51378a6099S猫头猫 ); 52378a6099S猫头猫} 53378a6099S猫头猫 54378a6099S猫头猫const style = StyleSheet.create({ 55378a6099S猫头猫 wrapper: { 56378a6099S猫头猫 width: rpx(750), 57378a6099S猫头猫 }, 58378a6099S猫头猫}); 59