Search code examples
javascriptreactjsreact-nativeuser-interfaceuser-experience

React Native - Floating (or popup) Screen question


I'm trying to do something like that last image, the one that has the product detail to add to cart with the blurred background

Is there a way to make that floating screen in react navite?

I'm looking for something maybe similar to it, I don't really care about the content inside of it, just the general screen popup

I dont know how its called, so pointing me in a direction to do research or just naming it so I can google it would very much be appreciated it

https://imgur.com/a/u3EFMvs


Solution

  • It's called Modal and you can use React Native's component to present it. Check for official documentation https://reactnative.dev/docs/modal

    For the blur part, you can use this library https://github.com/Kureev/react-native-blur

    Here is a sample code to show the modal:

    import React, { useState } from "react";
    import { Alert, Modal, StyleSheet, Text, Pressable, View } from "react-native";
    
    const App = () => {
      const [modalVisible, setModalVisible] = useState(false);
      return (
        <View style={styles.centeredView}>
          <Modal
            animationType="slide"
            transparent={true}
            visible={modalVisible}
            onRequestClose={() => {
              Alert.alert("Modal has been closed.");
              setModalVisible(!modalVisible);
            }}
          >
            <View style={styles.centeredView}>
              <View style={styles.modalView}>
                <Text style={styles.modalText}>Hello World!</Text>
                <Pressable
                  style={[styles.button, styles.buttonClose]}
                  onPress={() => setModalVisible(!modalVisible)}
                >
                  <Text style={styles.textStyle}>Hide Modal</Text>
                </Pressable>
              </View>
            </View>
          </Modal>
          <Pressable
            style={[styles.button, styles.buttonOpen]}
            onPress={() => setModalVisible(true)}
          >
            <Text style={styles.textStyle}>Show Modal</Text>
          </Pressable>
        </View>
      );
    };
    
    const styles = StyleSheet.create({
      centeredView: {
        flex: 1,
        justifyContent: "center",
        alignItems: "center",
        marginTop: 22
      },
      modalView: {
        margin: 20,
        backgroundColor: "white",
        borderRadius: 20,
        padding: 35,
        alignItems: "center",
        shadowColor: "#000",
        shadowOffset: {
          width: 0,
          height: 2
        },
        shadowOpacity: 0.25,
        shadowRadius: 4,
        elevation: 5
      },
      button: {
        borderRadius: 20,
        padding: 10,
        elevation: 2
      },
      buttonOpen: {
        backgroundColor: "#F194FF",
      },
      buttonClose: {
        backgroundColor: "#2196F3",
      },
      textStyle: {
        color: "white",
        fontWeight: "bold",
        textAlign: "center"
      },
      modalText: {
        marginBottom: 15,
        textAlign: "center"
      }
    });
    
    export default App;