1378a6099S猫头猫import React from 'react'; 2378a6099S猫头猫import {FlatListProps, StyleSheet, Text} from 'react-native'; 3378a6099S猫头猫import rpx from '@/utils/rpx'; 4378a6099S猫头猫import {useRoute} from '@react-navigation/native'; 5378a6099S猫头猫import MusicSheet from '@/common/musicSheetManager'; 6378a6099S猫头猫import MusicQueue from '@/common/musicQueue'; 7378a6099S猫头猫import usePanel from '@/components/panels/usePanel'; 8378a6099S猫头猫import {FlatList} from 'react-native-gesture-handler'; 9378a6099S猫头猫 10378a6099S猫头猫import ListItem from '@/components/base/listItem'; 11378a6099S猫头猫import IconButton from '@/components/base/iconButton'; 12378a6099S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 13378a6099S猫头猫import DownloadManager from '@/common/downloadManager'; 14378a6099S猫头猫 15378a6099S猫头猫interface IMusicListProps { 16378a6099S猫头猫 /** 顶部 */ 17378a6099S猫头猫 Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent']; 18378a6099S猫头猫 /** 音乐列表 */ 19378a6099S猫头猫 musicList?: IMusic.IMusicItem[]; 20378a6099S猫头猫 /** 所在歌单 */ 21378a6099S猫头猫 musicSheet?: IMusic.IMusicSheetItem; 22378a6099S猫头猫 /** 是否展示序号 */ 23378a6099S猫头猫 showIndex?: boolean; 249e24e067S猫头猫 /** 点击 */ 259e24e067S猫头猫 onItemPress?: (musicItem: IMusic.IMusicItem) => void; 26378a6099S猫头猫} 27*45510a04S猫头猫const ITEM_HEIGHT = rpx(120); 28378a6099S猫头猫export default function MusicList(props: IMusicListProps) { 299e24e067S猫头猫 const {Header, musicList, musicSheet, showIndex, onItemPress} = props; 30378a6099S猫头猫 const {showPanel} = usePanel(); 31378a6099S猫头猫 32378a6099S猫头猫 return ( 33378a6099S猫头猫 <FlatList 34378a6099S猫头猫 style={style.wrapper} 35378a6099S猫头猫 ListHeaderComponent={Header} 36378a6099S猫头猫 data={musicList ?? []} 37378a6099S猫头猫 keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`} 38*45510a04S猫头猫 getItemLayout={(_, index) => ({ 39*45510a04S猫头猫 length: ITEM_HEIGHT, 40*45510a04S猫头猫 offset: ITEM_HEIGHT * index, 41*45510a04S猫头猫 index, 42*45510a04S猫头猫 })} 43378a6099S猫头猫 renderItem={({index, item: musicItem}) => { 44378a6099S猫头猫 return ( 45378a6099S猫头猫 <ListItem 46*45510a04S猫头猫 itemHeight={ITEM_HEIGHT} 47378a6099S猫头猫 left={showIndex ? {index: index + 1, width: rpx(56)} : undefined} 48378a6099S猫头猫 title={musicItem.title} 49378a6099S猫头猫 desc={ 50378a6099S猫头猫 <> 51378a6099S猫头猫 {DownloadManager.isDownloaded(musicItem) && ( 52378a6099S猫头猫 <Icon 53378a6099S猫头猫 color="#11659a" 54378a6099S猫头猫 name="check-circle" 55378a6099S猫头猫 size={rpx(22)}></Icon> 56378a6099S猫头猫 )} 57378a6099S猫头猫 <Text> 58378a6099S猫头猫 {musicItem.artist} - {musicItem.album} 59378a6099S猫头猫 </Text> 60378a6099S猫头猫 </> 61378a6099S猫头猫 } 62378a6099S猫头猫 tag={musicItem.platform} 639e24e067S猫头猫 onPress={() => { 649e24e067S猫头猫 if (onItemPress) { 659e24e067S猫头猫 onItemPress(musicItem); 669e24e067S猫头猫 } else { 679e24e067S猫头猫 MusicQueue.playWithReplaceQueue(musicItem, musicList ?? []); 68378a6099S猫头猫 } 699e24e067S猫头猫 }} 70378a6099S猫头猫 right={() => ( 71378a6099S猫头猫 <IconButton 72378a6099S猫头猫 name="dots-vertical" 73378a6099S猫头猫 size="normal" 74378a6099S猫头猫 fontColor="normal" 75378a6099S猫头猫 onPress={() => { 76378a6099S猫头猫 showPanel('MusicItemOptions', {musicItem, musicSheet}); 77378a6099S猫头猫 }}></IconButton> 78378a6099S猫头猫 )}></ListItem> 79378a6099S猫头猫 ); 80378a6099S猫头猫 }}></FlatList> 81378a6099S猫头猫 ); 82378a6099S猫头猫} 83378a6099S猫头猫 84378a6099S猫头猫const style = StyleSheet.create({ 85378a6099S猫头猫 wrapper: { 86378a6099S猫头猫 width: rpx(750), 87378a6099S猫头猫 }, 88378a6099S猫头猫}); 89