스낵바/FlmSnackbar

— 스낵바는 토스트메세지와 유사한 기능입니다.
Snackbar is similar to Toast Message.

— 스크린샷/ScreenShot
구글드라이브/Google Drive :
https://drive.google.com/drive/folders/1hhhIYmU8kSGOUTN9wd7H9igSppl6AE71?usp=drive_link

1.react-native-freelifemakers-ui NPM 모듈 설치하기 / react-native-freelifemakers-ui NPM Module Instal

npm install react-native-freelifemakers-ui

2.사용하기 / Usage
1)기본SnackBar / Default(ContextAPI) FlmSnackBar


import {
  FlmSnackBarProvider,
  useFlmSnackBar,
  FlmText,
  FlmButton,
} from 'react-native-freelifemakers-ui';

const FlmSnackBarApp = () => {
  const {showSnackBar} = useFlmSnackBar();
  return (
   <View style={styles.content}>
         <FlmButton
        title="기본 SnackBar/Default SnackBar"
        onPress={() => showSnackBar('기본 SnackBar 메시지입니다!')}
      />
    </View>
  );
}

export default function App() {
  return (
    <FlmSnackBarProvider>
      <View>
        <FlmSnackBarApp />
      </View>
    </FlmSnackBarProvider>
  );
}

2)사용자정의 FlmSnackBar / Custom FlmSnackBar

import {FlmSnackBar, FlmButton} from 'react-native-freelifemakers-ui';

export default function App() {
  const [showCustomSnackBar, setShowCustomSnackBar] = useState(false);
  const [snackBarMessage, setSnackBarMessage] = useState('');
  const [snackBarType, setSnackBarType] = useState('info');

  const handleShowCustomSnackBar = (message, type) => {
    setSnackBarMessage(message);
    setSnackBarType(type);
    setShowCustomSnackBar(true);
  };

  return (
    <View>
      <FlmButton
        title="커스텀 SnackBar/Cusom SnackBar"
        onPress={() =>
          handleShowCustomSnackBar('사용자 정의 SnackBar', 'success')
        }
      />

      {showCustomSnackBar && (
        <FlmSnackBar
          message={snackBarMessage}
          type={snackBarType}
          duration={3000} // 직접 시간 설정(3s) / time Time setting(3s)
          onHide={() => setShowCustomSnackBar(false)}
          // 커스텀 스타일 추가 /.  adding custom style
          style={{
            backgroundColor: 'purple',
            bottom: 100,
            borderRadius: 20,
            borderWidth: 2,
            borderColor: 'white',
          }}
          textStyle={{
            color: 'lightgreen',
            fontWeight: 'bold',
          }}
        />
      )}
    </View>
  );
}

3.예제코드 / Example Code
1)기본SnackBar / Default(ContextAPI) FlmSnackBar


// Default FlmSnackBar - Context API사용
import React from "react";
import { View, Text, Button, StyleSheet } from "react-native";
import {
  FlmSnackBarProvider,
  useFlmSnackBar,
  FlmText,
  FlmButton,
} from "react-native-freelifemakers-ui";

const FlmSnackBarApp = () => {
  const { showSnackBar } = useFlmSnackBar();

  return (
    <View style={styles.content}>
      <FlmText style={styles.title}>SnackBar (Default)</FlmText>
      <FlmText>
        파라메터가 없으면 info가 기본 SnackBar타입으로 지정됩니다.
      </FlmText>
      <FlmText>
        If there is no parameter, the info is specified as the default snack bar
        type.
      </FlmText>
      <FlmButton
        title="기본 SnackBar/Default SnackBar"
        onPress={() => showSnackBar("기본 SnackBar 메시지입니다!")}
      />
      <View style={{ height: 10 }} />

      <FlmButton
        title="인포메이션 SnackBar/info SnackBar"
        onPress={() =>
          showSnackBar("인포메이션 SnackBar/info SnackBar", "info")
        }
      />
      <View style={{ height: 10 }} />

      <FlmButton
        title="오류 SnackBar / error SnackBar"
        onPress={() => showSnackBar("오류 SnackBar/error SnackBar", "error")}
      />
      <View style={{ height: 10 }} />

      <FlmButton
        title="성공 SnackBar (2초) / success SnackBar(2s)"
        onPress={() =>
          showSnackBar(
            "성공 SnackBar(2s) / success SnackBar(2s)",
            "success",
            2000,
          )
        }
      />
    </View>
  );
};

export default function App() {
  return (
    <FlmSnackBarProvider>
      <View style={styles.container}>
        <FlmSnackBarApp />
      </View>
    </FlmSnackBarProvider>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#fff",
    alignItems: "center",
    justifyContent: "center",
  },
  content: {
    alignItems: "center",
    justifyContent: "center",
    padding: 20,
  },
  title: {
    fontSize: 24,
    fontWeight: "bold",
    marginBottom: 20,
  },
});

2)사용자정의 FlmSnackBar / Custom FlmSnackBar


// Custom FlmSnackBar
import React, {useState} from 'react';
import {View, Text, Button, StyleSheet} from 'react-native';
import {FlmSnackBar, FlmButton} from 'react-native-freelifemakers-ui';

export default function App() {
  const [showCustomSnackBar, setShowCustomSnackBar] = useState(false);
  const [snackBarMessage, setSnackBarMessage] = useState('');
  const [snackBarType, setSnackBarType] = useState('info');

  const handleShowCustomSnackBar = (message, type) => {
    setSnackBarMessage(message);
    setSnackBarType(type);
    setShowCustomSnackBar(true);
  };

  return (
    <View style={styles.container}>
      <Text style={styles.title}>사용자정의 SnackBar</Text>
      <Text style={styles.title}>Custom SnackBar</Text>
      <FlmButton
        title="커스텀 SnackBar/Cusom SnackBar"
        onPress={() =>
          handleShowCustomSnackBar('사용자 정의 SnackBar', 'success')
        }
      />

      {showCustomSnackBar && (
        <FlmSnackBar
          message={snackBarMessage}
          type={snackBarType}
          duration={3000} // 직접 시간 설정(3s) / Set time directly (3s)
          onHide={() => setShowCustomSnackBar(false)}
          // 여기에 원하는 스타일을 직접 주입할 수 있습니다!
          // You can add your own desired style here!
          style={{
            backgroundColor: 'purple',
            bottom: 100, // 더 위로 올림 / move higher
            borderRadius: 20,
            borderWidth: 2,
            borderColor: 'white',
          }}
          textStyle={{
            color: 'lightgreen',
            fontWeight: 'bold',
          }}
        />
      )}
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
  title: {
    fontSize: 24,
    fontWeight: 'bold',
    marginBottom: 20,
  },
});

4.스크린샷/ScreenShot

Leave a Reply

Your email address will not be published. Required fields are marked *