diff --git a/README.md b/README.md deleted file mode 100644 index 1c448d9..0000000 --- a/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# React Native for Beginners - -## Build Apps for Android, iOS & the Web - -In this series, you will learn how to build mobile apps with React Native and the Expo framework. - -### Gratitude - -This React Native for Beginners tutorial series is made possible by [Zero to Mastery](https://bit.ly/CompleteReactNative). After completing this course, ZTM's [Complete React Native Developer course](https://bit.ly/CompleteReactNative) is the next logical step in your learning journey. - -![React Native for Beginners](/readme-banner.PNG?raw=true) - -## Lesson Help -If you get stuck on any lesson in the series, (1) navigate to the course branch for your current lesson and (2) view or (3) download the code for more help. - -![Preview of downloading code in github](./github.png?raw=true) - -## Prerequisites -In this series, I’ll assume you know the fundamentals of [HTML](https://youtu.be/mJgBOIoGihA), [CSS](https://youtu.be/n4R2E7O-Ngo), and [JavaScript](https://youtu.be/EfAl9bwzVZk). Prior knowledge of React is not required, but it will help your understanding. - -### 💻 Recommended Tools: -- [VS Code](https://code.visualstudio.com/) -- [git & git bash](https://git-scm.com/) -- [Node.js (npm / npx)](https://nodejs.org/) - -## Project Setup - -```sh -npm install -``` - -### On Your Mobile Device - -- 🔗 [Expo Go for Android](https://play.google.com/store/apps/details?id=host.exp.exponent&hl=en_US) -- 🔗 [Expo Go for iOS](https://apps.apple.com/us/app/expo-go/id982107779) - -### Optional -- 🔗 [Android Studio](https://developer.android.com/studio) -- 🔗 [xCode (macOS Only)](https://developer.apple.com/xcode/) - - -### 📚 References -- 🔗 [React Native Official Site](https://reactnative.dev/) -- 🔗 [Expo Official Site](https://expo.dev/) - ---- - -### Author Links - -👋 Hello, I'm Dave Gray. - -👉 [My Courses](https://courses.davegray.codes/) - -✅ [Check out my YouTube Channel with hundreds of tutorials](https://www.youtube.com/DaveGrayTeachesCode). - -🚩 [Subscribe to my channel](https://bit.ly/3nGHmNn) - -☕ [Buy Me A Coffee](https://buymeacoffee.com/DaveGray) - -🚀 Follow Me: - -- 🔗 [Twitter](https://twitter.com/yesdavidgray) -- 🔗 [LinkedIn](https://www.linkedin.com/in/davidagray/) -- 🔗 [Blog](https://davegray.codes) - ---- - -### 🎓 Academic Honesty - -**DO NOT COPY FOR AN ASSIGNMENT** - Avoid plagiarism and adhere to the spirit of this [Academic Honesty Policy](https://www.freecodecamp.org/news/academic-honesty-policy/). diff --git a/github.png b/github.png deleted file mode 100644 index 15c18c6..0000000 Binary files a/github.png and /dev/null differ diff --git a/lesson01/README.md b/lesson01/README.md new file mode 100644 index 0000000..cd4feb8 --- /dev/null +++ b/lesson01/README.md @@ -0,0 +1,50 @@ +# Welcome to your Expo app 👋 + +This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app). + +## Get started + +1. Install dependencies + + ```bash + npm install + ``` + +2. Start the app + + ```bash + npx expo start + ``` + +In the output, you'll find options to open the app in a + +- [development build](https://docs.expo.dev/develop/development-builds/introduction/) +- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/) +- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) +- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo + +You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction). + +## Get a fresh project + +When you're ready, run: + +```bash +npm run reset-project +``` + +This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing. + +## Learn more + +To learn more about developing your project with Expo, look at the following resources: + +- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). +- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. + +## Join the community + +Join our community of developers creating universal apps. + +- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. +- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. diff --git a/lesson01/app.json b/lesson01/app.json new file mode 100644 index 0000000..8bef1f7 --- /dev/null +++ b/lesson01/app.json @@ -0,0 +1,36 @@ +{ + "expo": { + "name": "lesson01", + "slug": "lesson01", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/images/icon.png", + "scheme": "myapp", + "userInterfaceStyle": "automatic", + "splash": { + "image": "./assets/images/splash.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/images/adaptive-icon.png", + "backgroundColor": "#ffffff" + } + }, + "web": { + "bundler": "metro", + "output": "static", + "favicon": "./assets/images/favicon.png" + }, + "plugins": [ + "expo-router" + ], + "experiments": { + "typedRoutes": true + } + } +} diff --git a/lesson01/app/(tabs)/_layout.tsx b/lesson01/app/(tabs)/_layout.tsx new file mode 100644 index 0000000..22a49b6 --- /dev/null +++ b/lesson01/app/(tabs)/_layout.tsx @@ -0,0 +1,37 @@ +import { Tabs } from 'expo-router'; +import React from 'react'; + +import { TabBarIcon } from '@/components/navigation/TabBarIcon'; +import { Colors } from '@/constants/Colors'; +import { useColorScheme } from '@/hooks/useColorScheme'; + +export default function TabLayout() { + const colorScheme = useColorScheme(); + + return ( + + ( + + ), + }} + /> + ( + + ), + }} + /> + + ); +} diff --git a/lesson01/app/(tabs)/explore.tsx b/lesson01/app/(tabs)/explore.tsx new file mode 100644 index 0000000..e480218 --- /dev/null +++ b/lesson01/app/(tabs)/explore.tsx @@ -0,0 +1,102 @@ +import Ionicons from '@expo/vector-icons/Ionicons'; +import { StyleSheet, Image, Platform } from 'react-native'; + +import { Collapsible } from '@/components/Collapsible'; +import { ExternalLink } from '@/components/ExternalLink'; +import ParallaxScrollView from '@/components/ParallaxScrollView'; +import { ThemedText } from '@/components/ThemedText'; +import { ThemedView } from '@/components/ThemedView'; + +export default function TabTwoScreen() { + return ( + }> + + Explore + + This app includes example code to help you get started. + + + This app has two screens:{' '} + app/(tabs)/index.tsx and{' '} + app/(tabs)/explore.tsx + + + The layout file in app/(tabs)/_layout.tsx{' '} + sets up the tab navigator. + + + Learn more + + + + + You can open this project on Android, iOS, and the web. To open the web version, press{' '} + w in the terminal running this project. + + + + + For static images, you can use the @2x and{' '} + @3x suffixes to provide files for + different screen densities + + + + Learn more + + + + + Open app/_layout.tsx to see how to load{' '} + + custom fonts such as this one. + + + + Learn more + + + + + This template has light and dark mode support. The{' '} + useColorScheme() hook lets you inspect + what the user's current color scheme is, and so you can adjust UI colors accordingly. + + + Learn more + + + + + This template includes an example of an animated component. The{' '} + components/HelloWave.tsx component uses + the powerful react-native-reanimated library + to create a waving hand animation. + + {Platform.select({ + ios: ( + + The components/ParallaxScrollView.tsx{' '} + component provides a parallax effect for the header image. + + ), + })} + + + ); +} + +const styles = StyleSheet.create({ + headerImage: { + color: '#808080', + bottom: -90, + left: -35, + position: 'absolute', + }, + titleContainer: { + flexDirection: 'row', + gap: 8, + }, +}); diff --git a/lesson01/app/(tabs)/index.tsx b/lesson01/app/(tabs)/index.tsx new file mode 100644 index 0000000..80bd4cb --- /dev/null +++ b/lesson01/app/(tabs)/index.tsx @@ -0,0 +1,70 @@ +import { Image, StyleSheet, Platform } from 'react-native'; + +import { HelloWave } from '@/components/HelloWave'; +import ParallaxScrollView from '@/components/ParallaxScrollView'; +import { ThemedText } from '@/components/ThemedText'; +import { ThemedView } from '@/components/ThemedView'; + +export default function HomeScreen() { + return ( + + }> + + Hello World! + + + + Step 1: Try it + + Edit app/(tabs)/index.tsx to see changes. + Press{' '} + + {Platform.select({ ios: 'cmd + d', android: 'cmd + m' })} + {' '} + to open developer tools. + + + + Step 2: Explore + + Tap the Explore tab to learn more about what's included in this starter app. + + + + Step 3: Get a fresh start + + When you're ready, run{' '} + npm run reset-project to get a fresh{' '} + app directory. This will move the current{' '} + app to{' '} + app-example. + + + + ); +} + +const styles = StyleSheet.create({ + titleContainer: { + flexDirection: 'row', + alignItems: 'center', + gap: 8, + }, + stepContainer: { + gap: 8, + marginBottom: 8, + }, + reactLogo: { + height: 178, + width: 290, + bottom: 0, + left: 0, + position: 'absolute', + }, +}); diff --git a/lesson01/app/+html.tsx b/lesson01/app/+html.tsx new file mode 100644 index 0000000..8b92456 --- /dev/null +++ b/lesson01/app/+html.tsx @@ -0,0 +1,39 @@ +import { ScrollViewStyleReset } from 'expo-router/html'; +import { type PropsWithChildren } from 'react'; + +/** + * This file is web-only and used to configure the root HTML for every web page during static rendering. + * The contents of this function only run in Node.js environments and do not have access to the DOM or browser APIs. + */ +export default function Root({ children }: PropsWithChildren) { + return ( + + + + + + + {/* + Disable body scrolling on web. This makes ScrollView components work closer to how they do on native. + However, body scrolling is often nice to have for mobile web. If you want to enable it, remove this line. + */} + + + {/* Using raw CSS styles as an escape-hatch to ensure the background color never flickers in dark-mode. */} +