์นด๋“œ/FlmCard

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

Leave a Reply