1*378a6099S猫头猫import React from 'react'; 2*378a6099S猫头猫import {FlatListProps, StyleSheet, Text} from 'react-native'; 3*378a6099S猫头猫import rpx from '@/utils/rpx'; 4*378a6099S猫头猫import {useRoute} from '@react-navigation/native'; 5*378a6099S猫头猫import MusicSheet from '@/common/musicSheetManager'; 6*378a6099S猫头猫import MusicQueue from '@/common/musicQueue'; 7*378a6099S猫头猫import usePanel from '@/components/panels/usePanel'; 8*378a6099S猫头猫import {FlatList} from 'react-native-gesture-handler'; 9*378a6099S猫头猫 10*378a6099S猫头猫import ListItem from '@/components/base/listItem'; 11*378a6099S猫头猫import IconButton from '@/components/base/iconButton'; 12*378a6099S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; 13*378a6099S猫头猫import DownloadManager from '@/common/downloadManager'; 14*378a6099S猫头猫 15*378a6099S猫头猫interface IMusicListProps { 16*378a6099S猫头猫 /** 顶部 */ 17*378a6099S猫头猫 Header?: FlatListProps<IMusic.IMusicItem>['ListHeaderComponent']; 18*378a6099S猫头猫 /** 音乐列表 */ 19*378a6099S猫头猫 musicList?: IMusic.IMusicItem[]; 20*378a6099S猫头猫 /** 所在歌单 */ 21*378a6099S猫头猫 musicSheet?: IMusic.IMusicSheetItem; 22*378a6099S猫头猫 /** 是否展示序号 */ 23*378a6099S猫头猫 showIndex?: boolean; 24*378a6099S猫头猫} 25*378a6099S猫头猫export default function MusicList(props: IMusicListProps) { 26*378a6099S猫头猫 const {Header, musicList, musicSheet, showIndex} = props; 27*378a6099S猫头猫 const {showPanel} = usePanel(); 28*378a6099S猫头猫 29*378a6099S猫头猫 return ( 30*378a6099S猫头猫 <FlatList 31*378a6099S猫头猫 style={style.wrapper} 32*378a6099S猫头猫 ListHeaderComponent={Header} 33*378a6099S猫头猫 data={musicList ?? []} 34*378a6099S猫头猫 keyExtractor={musicItem => `ml-${musicItem.id}${musicItem.platform}`} 35*378a6099S猫头猫 renderItem={({index, item: musicItem}) => { 36*378a6099S猫头猫 return ( 37*378a6099S猫头猫 <ListItem 38*378a6099S猫头猫 left={showIndex ? {index: index + 1, width: rpx(56)} : undefined} 39*378a6099S猫头猫 title={musicItem.title} 40*378a6099S猫头猫 desc={ 41*378a6099S猫头猫 <> 42*378a6099S猫头猫 {DownloadManager.isDownloaded(musicItem) && ( 43*378a6099S猫头猫 <Icon 44*378a6099S猫头猫 color="#11659a" 45*378a6099S猫头猫 name="check-circle" 46*378a6099S猫头猫 size={rpx(22)}></Icon> 47*378a6099S猫头猫 )} 48*378a6099S猫头猫 <Text> 49*378a6099S猫头猫 {musicItem.artist} - {musicItem.album} 50*378a6099S猫头猫 </Text> 51*378a6099S猫头猫 </> 52*378a6099S猫头猫 } 53*378a6099S猫头猫 tag={musicItem.platform} 54*378a6099S猫头猫 onPress={() => 55*378a6099S猫头猫 MusicQueue.playWithReplaceQueue(musicItem, musicList ?? []) 56*378a6099S猫头猫 } 57*378a6099S猫头猫 right={() => ( 58*378a6099S猫头猫 <IconButton 59*378a6099S猫头猫 name="dots-vertical" 60*378a6099S猫头猫 size="normal" 61*378a6099S猫头猫 fontColor="normal" 62*378a6099S猫头猫 onPress={() => { 63*378a6099S猫头猫 showPanel('MusicItemOptions', {musicItem, musicSheet}); 64*378a6099S猫头猫 }}></IconButton> 65*378a6099S猫头猫 )}></ListItem> 66*378a6099S猫头猫 ); 67*378a6099S猫头猫 }}></FlatList> 68*378a6099S猫头猫 ); 69*378a6099S猫头猫} 70*378a6099S猫头猫 71*378a6099S猫头猫const style = StyleSheet.create({ 72*378a6099S猫头猫 wrapper: { 73*378a6099S猫头猫 width: rpx(750), 74*378a6099S猫头猫 }, 75*378a6099S猫头猫}); 76