xref: /MusicFree/src/pages/sheetDetail/components/header.tsx (revision ec26b76829169f3fa0606bb9b21624aad61d6594)
1import React from 'react';
2import {Image, StyleSheet, Text, View} from 'react-native';
3import rpx from '@/utils/rpx';
4import {useRoute} from '@react-navigation/native';
5import MusicSheet from '@/common/musicSheet';
6import LinearGradient from 'react-native-linear-gradient';
7import ThemeText from '@/components/themeText';
8import Color from 'color';
9import {useTheme} from 'react-native-paper';
10
11interface IHeaderProps {}
12export default function Header(props: IHeaderProps) {
13  const route = useRoute<any>();
14  const id = route.params?.id ?? 'favorite';
15  const sheet = MusicSheet.useSheets(id);
16  const {colors} = useTheme();
17
18  return (
19    <LinearGradient
20      colors={[
21        Color(colors.primary).alpha(0.8).toString(),
22        Color(colors.primary).alpha(0.15).toString(),
23      ]}
24      style={style.wrapper}>
25      <View style={style.content}>
26        <Image
27          style={style.coverImg}
28          source={
29            sheet?.coverImg
30              ? {
31                  uri: sheet.coverImg,
32                }
33              : require('@/assets/imgs/album-default.jpg')
34          }></Image>
35        <View style={style.details}>
36          <ThemeText>{sheet?.title}</ThemeText>
37          <ThemeText fontColor="secondary" fontSize="description">
38            共{sheet?.musicList.length ?? 0}首
39          </ThemeText>
40        </View>
41      </View>
42    </LinearGradient>
43  );
44}
45
46const style = StyleSheet.create({
47  wrapper: {
48    width: rpx(750),
49    height: rpx(300),
50    justifyContent: 'center',
51    alignItems: 'center',
52    flexDirection: 'row',
53  },
54  content: {
55    width: rpx(702),
56    flexDirection: 'row',
57    justifyContent: 'space-between',
58    alignItems: 'center',
59  },
60  coverImg: {
61    width: rpx(210),
62    height: rpx(210),
63    borderRadius: rpx(24),
64  },
65  details: {
66    width: rpx(456),
67    height: rpx(140),
68    justifyContent: 'space-between',
69  },
70});
71