Search code examples
imagereact-nativestore

How to save and display and image in react-native?


I have a question in react-native. Im using a module called "react-native-image-picker" to pick an image and display it on my app.

Now what i want is to store it somewhere (database, or local storage) and when i open again the app, the image that i choosed should be there. But i dont know what is the best option to do it.

I've already tryied to read some stuff like react-native-fs and fetch-blob but it doesnt help me, i guess.

What is the best option to do it?

Thank you.


Solution

  • First, renders view according to condition. For example if image is available then simply display the image else display TouchableOpacity which will help use to select pictures :

    import React, { Component } from React;
    import { View, TouchableOpacity, Text, Image } from 'react-native';
    import ImagePicker from 'react-native-image-picker';
    import AsyncStorage from '@react-native-community/async-storage';
    
    
    class App extends Component {
        constructor(props) {
            super(props);
            this.state = {
                isImageAvailable: false,
                profilePic: null
            }
        }
    
        componentDidMount = () => {
            this.getImage();
        }
    
        getImage = async () => {
            const profilePic = await AsyncStorage.getItem("profilePic");
            if (profilePic) {
                this.setState({
                    isImageAvailable: true,
                    profilePic: JSON.parse(profilePic)
                });
            }
        }
    
        selectProfilePic = () => {
            const options = {
                title: 'Select Avatar',
                storageOptions: {
                    skipBackup: true,
                    path: 'images',
                },
            };
    
            ImagePicker.showImagePicker(options, (response) => {
                console.log('Response = ', response);
    
                if (response.didCancel) {
                    console.log('User cancelled image picker');
                } else if (response.error) {
                    console.log('ImagePicker Error: ', response.error);
                } else if (response.customButton) {
                    console.log('User tapped custom button: ', response.customButton);
                } else {
                    const source = { uri: response.uri };
    
                    // You can also display the image using data:
                    // const source = { uri: 'data:image/jpeg;base64,' + response.data };
                    AsyncStorage.setItem("profilePic", JSON.stringify(source));
                    this.setState({
                        profilePic: source,
                        isImageAvailable: true
                    });
                }
            });
        }
    
        render() {
            return (
                <View>
                    {
                        this.state.isImageAvailable && (
                            <Image source={this.state.profilePic} style={{ width: 200, height: 200 }} />
    
                        )
                    }
    
                    {
                        !this.state.isImageAvailable && (
                            <TouchableOpacity onPress={this.selectProfilePic}>
                                <Text>Choose Profile Pic</Text>
                            </TouchableOpacity>
                        )
                    }
                </View>
            )
        }
    } 
    

    Hope it will help you.