1.react-native-freelifemakers-ui NPM ๋ชจ๋ ์ค์นํ๊ธฐ / react-native-freelifemakers-ui NPM Module Install
# npm install react-native-freelifemakers-ui
2.์ฌ์ฉํ๊ธฐ / Usage
1)๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ / import Module
import { FlmCard, FlmText, FlmButton } from "react-native-freelifemakers-ui";
2)์นด๋ / FlmCard
<FlmCard>
<FlmText category="subtitle">์ด๊ฒ์ ๊ธฐ๋ณธ ์นด๋์
๋๋ค.</FlmText>
<FlmText category="subtitle">This is a basic card.</FlmText>
<Text style={styles.cardContentText}>
์ถ๊ฐ ์ฝํ
์ธ ๋ฅผ ์ฌ๊ธฐ์ ๋ฃ์ ์ ์์ต๋๋ค. / You can add additional
content here.
</Text>
</FlmCard>
3.์์ ์ฝ๋ / Example Code
import React, { useState } from "react";
import { View, Text, StyleSheet, Alert, ScrollView, Image } from "react-native";
import { FlmCard, FlmText, FlmButton } from "react-native-freelifemakers-ui";
// FlmCardExample ์ปดํฌ๋ํธ
// This component demonstrates the usage of FlmCard.
const FlmCardApp = () => {
const [cardPressCount, setCardPressCount] = useState(0);
const handleCardPress = (cardName) => {
setCardPressCount((prevCount) => prevCount + 1);
// ๊ฐ๋จํ Alert ์ฌ์ฉ (In real apps, use a custom modal)
Alert.alert(
"์นด๋ ํด๋ฆญ / Card Clicked",
`${cardName} ์นด๋๊ฐ ํด๋ฆญ๋์์ต๋๋ค! (์ด ${cardPressCount + 1}ํ)\n"${cardName}" card was clicked! (Total ${cardPressCount + 1} times)`,
[{ text: "ํ์ธ (OK)" }],
);
};
return (
<ScrollView style={styles.scrollViewContainer}>
<View style={styles.container}>
<FlmText category="subtitle" style={{ marginTop: 20 }}>
FlmCard ์ฌ์ฉ ์์ / FlmCard Example
</FlmText>
{/* ๊ธฐ๋ณธ ์นด๋ (Basic Card) */}
<FlmText category="subtitle" style={{ marginTop: 20 }}>
๊ธฐ๋ณธ์นด๋ / Basic FlmCard
</FlmText>
<FlmCard>
<FlmText category="subtitle">์ด๊ฒ์ ๊ธฐ๋ณธ ์นด๋์
๋๋ค.</FlmText>
<FlmText category="subtitle">This is a basic card.</FlmText>
<Text style={styles.cardContentText}>
์ถ๊ฐ ์ฝํ
์ธ ๋ฅผ ์ฌ๊ธฐ์ ๋ฃ์ ์ ์์ต๋๋ค. / You can add additional
content here.
</Text>
</FlmCard>
{/* ์ ๋ชฉ๊ณผ ๋ถ์ ๋ชฉ์ด ์๋ ์นด๋ (Card with Title and Subtitle) */}
<FlmText category="subtitle" style={{ marginTop: 20 }}>
์ ๋ชฉ๊ณผ ๋ถ์ ๋ชฉ์ด ์๋ ์นด๋
</FlmText>
<FlmText category="subtitle">Card with Title and Subtitle</FlmText>
<FlmCard
title="์นด๋ ์ ๋ชฉ / Card Title"
subtitle="์ด๊ฒ์ ์นด๋์ ๋ถ์ ๋ชฉ์
๋๋ค. (This is the card's subtitle)"
>
<Text style={styles.cardContentText}>
์ ๋ชฉ๊ณผ ๋ถ์ ๋ชฉ์ด ์๋ ์นด๋์
๋๋ค. (Card with title and subtitle.)
</Text>
<Text style={styles.cardContentText}>
์นด๋ ๋ด์ฉ์ด ์ฌ๊ธฐ์ ํ์๋ฉ๋๋ค. (Card content is displayed here.)
</Text>
</FlmCard>
{/* ์ปค์คํ
์คํ์ผ ๋ฐ onPress ๊ธฐ๋ฅ์ด ์๋ ์นด๋ / Card with Custom Styles and onPress */}
<FlmText category="subtitle" style={{ marginTop: 20 }}>
์ปค์คํ
์คํ์ผ ๋ฐ onPress ๊ธฐ๋ฅ์ด ์๋ ์นด๋
</FlmText>
<FlmText category="subtitle">
Card with Custom Styles and onPress
</FlmText>
<FlmCard
title="ํด๋ฆญ ๊ฐ๋ฅํ ์นด๋ / Clickable Card"
subtitle="์ด ์นด๋๋ฅผ ๋๋ฌ๋ณด์ธ์! / Try tapping this card!"
onPress={() => handleCardPress("ํด๋ฆญ ๊ฐ๋ฅํ / Clickable")}
style={styles.clickableCard}
titleStyle={styles.clickableCardTitle}
elevation={5}
borderRadius={12}
>
<Text style={styles.cardContentText}>
์ด ์นด๋๋ฅผ ๋๋ฅด๋ฉด ์๋ฆผ์ด ํ์๋ฉ๋๋ค./ An alert is shown when this
card is tapped.
</Text>
<Text style={styles.cardContentText}>
ํด๋ฆญ ํ์: {cardPressCount} / Click Count: {cardPressCount}
</Text>
</FlmCard>
{/* ๋ฐฐ๊ฒฝ์์ด ๋ค๋ฅธ ์นด๋ / Card with Different Background Color */}
<FlmText category="subtitle" style={{ marginTop: 20 }}>
๋ฐฐ๊ฒฝ์์ด ๋ค๋ฅธ ์นด๋
</FlmText>
<FlmText category="subtitle">
Card with Different Background Color
</FlmText>
<FlmCard
title="๋ค๋ฅธ ์์์ ์นด๋ / Card with Different Color"
backgroundColor="#e0f2f7"
elevation={3}
>
<Text style={styles.cardContentText}>
์ด ์นด๋๋ ๋ค๋ฅธ ๋ฐฐ๊ฒฝ์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. / This card has a different
background color.
</Text>
</FlmCard>
{/* ์ฝํ
์ธ ํจ๋ฉ์ ์กฐ์ ํ ์นด๋ / Card with Adjusted Content Padding */}
<FlmText category="subtitle" style={{ marginTop: 20 }}>
์ฝํ
์ธ ํจ๋ฉ์ ์กฐ์ ํ ์นด๋
</FlmText>
<FlmText category="subtitle">
Card with Adjusted Content Padding
</FlmText>
<FlmCard
title="ํจ๋ฉ ์กฐ์ ์นด๋ / Card with Custom Padding"
contentStyle={{ paddingHorizontal: 30, paddingVertical: 20 }}
>
<Text style={styles.cardContentText}>
์ด ์นด๋๋ ๋ด๋ถ ์ฝํ
์ธ ์ ํจ๋ฉ์ด ๋ค๋ฆ
๋๋ค. / This card has customized
inner padding.
</Text>
</FlmCard>
{/* ์ด๋ฏธ์ง ์นด๋ (Image Card) */}
<FlmText category="subtitle" style={{ marginTop: 20 }}>
์ด๋ฏธ์ง ์นด๋
</FlmText>
<FlmText category="subtitle">Image Card</FlmText>
<FlmCard
title="์ด๋ฏธ์ง ์นด๋ / Image Card"
subtitle="์๋ฆ๋ค์ด ํ๊ฒฝ ์ด๋ฏธ์ง / Beautiful Landscape Image"
elevation={4}
borderRadius={10}
>
<Image
source={{
uri: "https://picsum.photos/400/200",
}}
style={styles.cardImage}
resizeMode="cover"
onError={(e) =>
console.log("Image loading error:", e.nativeEvent.error)
}
/>
<Text style={styles.cardContentText}>
์ด ์นด๋๋ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. ์ด๋ฏธ์ง ์๋์ ์ถ๊ฐ์ ์ธ ์ค๋ช
์
๋ฃ์ ์ ์์ต๋๋ค. / This card contains an image. Additional
description can be added below the image.
</Text>
</FlmCard>
</View>
</ScrollView>
);
};
const styles = StyleSheet.create({
scrollViewContainer: {
flex: 1,
backgroundColor: "#f0f2f5",
},
container: {
padding: 10,
alignItems: "center",
paddingBottom: 30,
},
cardContentText: {
fontSize: 16,
color: "#555555",
lineHeight: 24,
},
clickableCard: {
backgroundColor: "#fff3e0",
borderWidth: 1,
borderColor: "#ffab40",
},
clickableCardTitle: {
color: "#d84315",
},
cardImage: {
alignSelf: "stretch",
height: 200,
borderRadius: 8,
marginBottom: 10,
},
});
export default FlmCardApp;
4.์คํฌ๋ฆฐ์ท/ScreenShot