React Native create onboarding Screen UI with light to dark theme in 10 minutes
A very efficient approach for new users to learn how to use an application, facts about the application, and how to use some of its features is through onboarding screens. This is achievable since the user interacts with it on the first screen they see after installing and launching the app.
The Onboarding Screens aren't anticipated to appear after the app's initial launch. I'll demonstrate how to set up onboarding screens in React Native for Android and iOS applications in this tutorial.
Getting started
Create a basic React Native app
Before we can dive into our demo, we must first create a React Native project by running the following command:
npx react-native init onboarding
In my example, the name of the project is “RNNetwork,” but you can change it per your preference.
Next, go into the Project folder and install the required npm packages:
cd RNNetwork
npm i --save react-native-swiper react-native-vector-icons
or
yarn add react-native-swiper react-native-vector-iconsThen, run the following command for iOS for linking libraries using CocoaPods:
npx pod-install ios
Open App.tsx and add the below code :
import React from 'react';
import {
Dimensions,
View,
StyleSheet,
useColorScheme,
Text,
Image,
} from 'react-native';
import {Colors} from 'react-native/Libraries/NewAppScreen';
import Swiper from 'react-native-swiper';
import AntDesign from 'react-native-vector-icons/AntDesign';
const w = Dimensions.get('window').width;
const h = Dimensions.get('window').height;
function App(): JSX.Element {
const isDarkMode = useColorScheme() === 'dark';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
return (
<Swiper
// eslint-disable-next-line react-native/no-inline-styles
buttonWrapperStyle={{
backgroundColor: 'transparent',
flexDirection: 'row',
position: 'absolute',
bottom: 0,
left: 0,
flex: 1,
paddingHorizontal: 30,
paddingVertical: 20,
justifyContent: 'flex-end',
alignItems: 'flex-end',
}}
showsButtons={true}
loop={true}
paginationStyle={{
marginRight: w * 0.7,
marginBottom: h * 0.02,
}}
activeDotColor={isDarkMode ? Colors.darker : Colors.lighter}
dotColor={isDarkMode ? Colors.lighter : Colors.darker}
nextButton={
<View
// eslint-disable-next-line react-native/no-inline-styles
style={{
height: 60,
borderRadius: 30,
alignItems: 'center',
width: 60,
justifyContent: 'center',
backgroundColor: isDarkMode ? Colors.lighter : Colors.darker,
}}>
<AntDesign
name="arrowright"
size={22}
color={isDarkMode ? Colors.darker : Colors.lighter}
/>
</View>
}
prevButton={
<View
// eslint-disable-next-line react-native/no-inline-styles
style={{
height: 60,
borderRadius: 30,
alignItems: 'center',
width: 60,
justifyContent: 'center',
backgroundColor: isDarkMode ? Colors.lighter : Colors.darker,
marginHorizontal: 20,
}}>
<AntDesign
name="arrowleft"
size={22}
color={isDarkMode ? Colors.darker : Colors.lighter}
/>
</View>
}>
<View style={styles.slide}>
<Image source={require('./assets/images/1.jpg')} style={styles.img} />
<Text
style={[
styles.title,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
React Native UI-kit
</Text>
<Text style={[
styles.text,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
Lorem Ipsum is simply dummy text of the printing and typesetting
industry. Lorem Ipsum has been the industry's standard dummy text ever
since the 1500s, when an unknown printer took a galley of type and
scrambled it to make a type specimen book.
</Text>
</View>
<View style={styles.slide}>
<Image source={require('./assets/images/2.jpg')} style={styles.img} />
<Text style={[
styles.title,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
Get Started
</Text>
<Text style={[
styles.text,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
Lorem Ipsum is simply dummy text of the printing and typesetting
industry. Lorem Ipsum has been the industry's standard dummy text ever
since the 1500s, when an unknown printer took a galley of type and
scrambled it to make a type specimen book.
</Text>
</View>
<View style={styles.slide}>
<Image source={require('./assets/images/5.jpg')} style={styles.img} />
<Text style={[
styles.title,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
Discover
</Text>
<Text style={[
styles.text,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
Lorem Ipsum is simply dummy text of the printing and typesetting
industry. Lorem Ipsum has been the industry's standard dummy text ever
since the 1500s, when an unknown printer took a galley of type and
scrambled it to make a type specimen book.
</Text>
</View>
<View style={styles.slide}>
<Image source={require('./assets/images/6.jpg')} style={styles.img} />
<Text style={[
styles.title,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
Welcome Devhub
</Text>
<Text style={[
styles.text,
{color: isDarkMode ? Colors.lighter : Colors.darker},
]}>
Lorem Ipsum is simply dummy text of the printing and typesetting
industry. Lorem Ipsum has been the industry's standard dummy text ever
since the 1500s, when an unknown printer took a galley of type and
scrambled it to make a type specimen book.
</Text>
</View>
</Swiper>
);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const styles = StyleSheet.create({
slide: {
flex: 1,
paddingTop: 80,
marginHorizontal: 30,
},
img: {
alignSelf: 'center',
borderBottomRightRadius: 80,
borderTopLeftRadius: 80,
height: h * 0.5,
width: w * 0.9,
},
title: {
marginTop: 60,
marginHorizontal: 10,
fontSize: 30,
},
text: {
color: '#111',
marginTop: 20,
fontSize: 16,
lineHeight: 20,
marginLeft: 10,
},
});
export default App;