Projects · Mobile Development

Uber Taxi

Tech stack:
react native
redux
redux toolkit
google cloud api's
tailwindcss for react native
javascript
Developming time:

Three days

GitHub repo:

Link

Project preview:

Link

Introduction

React Native app for both iOS and Android platforms that allows users to order a taxi. The app is capable of selecting origin and destination points, saving them to the Redux store, displaying them on the map using MapViewDirections and MapView from 'react-native-maps', and calculating the travel time, distance, and fare amount

Features

Uber eatures: Cross-Platform Compatibility: Built using React Native, the app works seamlessly on both iOS and Android platforms. Order a Taxi: The primary functionality of the app is to allow users to order a taxi. Select Origin and Destination: Users can specify their pickup location and desired destination. The app integrates with react-native-google-places-autocomplete to facilitate location search and selection. Save Locations: The app has the capability to save the user's origin and destination points to the Redux store, ensuring a consistent state throughout the application. Interactive Map: Displays the selected route on the map using MapViewDirections and MapView from the react-native-maps library. Travel Time, Distance, and Fare Estimation: The app calculates and displays the travel time, distance, and fare amount for the user's trip. The fare estimation considers different taxi types, each with its own fare multiplier. Navigation: The app has an intuitive navigation setup using @react-navigation/native and @react-navigation/native-stack, allowing users to seamlessly move between different screens. Favorites: Users can have a favorites section, which may consist of frequently visited places or preferred rides. Feedback & Confirmation: Once a ride is booked, users receive a modal confirmation indicating that their car is on its way.

User Interface

Elegant UI Components: The app utilizes react-native-elements for sleek and user-friendly UI components. Icons are sourced from react-native-vector-icons to enhance the app's visual appeal. The design layout is responsive and elegant using the twrnc utility.






Code Architecture

React Native Framework: The app is constructed using the React Native framework, which allows for the development of mobile applications for both iOS and Android using a single codebase. This ensures consistency, reduces redundancy, and speeds up development. 2. State Management - Redux: Provider: The entire app is wrapped inside the Redux Provider, which makes the Redux store available to any nested components. This aids in state management and ensures that any component can read from or write to the store. Redux Store: Defined in store, this is where the state of the app is maintained. Given the use of Redux Toolkit (as inferred from the provided info), the store likely consists of reducers and actions that help in managing and updating the state. 3. Navigation: NavigationContainer: This is the root component for the navigation tree. It manages the navigation state and links it to the React Native environment. createNativeStackNavigator: This is used to create a stack navigator, allowing the app to have a stack-based screen navigation system. This means screens are stacked on top of one another, and users can navigate between them. HomeScreen: The initial screen that users see when they open the app. It provides options to select locations and view favorite rides. MapScreen: Accessed from the HomeScreen, this displays the route on a map and offers additional navigation options. 4. User Interface: SafeAreaProvider: This ensures that the app's UI doesn't overlap with any system interface elements, particularly on devices with notches or rounded corners. KeyboardAvoidingView: This is a crucial UI component, especially for screens with input fields. It ensures that the keyboard does not obstruct any important content or input fields when it pops up. StatusBar: Part of the Expo package, this component ensures the app's status bar looks consistent and follows the design guidelines of the platform it's running on. 5. Integration with Google APIs: The app leverages Google APIs, particularly for location-based services. It uses react-native-google-places-autocomplete for location search and selection, and react-native-maps for displaying maps and routes. 6. Styling: The app uses both inline styling and the StyleSheet object from React Native for custom styling, ensuring a consistent and appealing look across different screens and components. Additionally, the twrnc utility helps in quickly applying styles based on utility classes. 7. Environmental Considerations: Platform-Specific Logic: The app contains logic to cater to platform-specific behaviors, particularly evident in the KeyboardAvoidingView component where behavior differs between iOS and Android. Environment Variables: Using react-native-dotenv, the app can securely manage and access environment variables. This is evident in the use of the Google Maps API key, which is kept secure and abstracted away from the codebase. 8. Modularity: The app's architecture promotes modularity, as evident from the separate components for different functionalities, such as HomeScreen, MapScreen, and RideOptionsCard. This ensures that the app is maintainable, scalable, and can be iterated upon easily.

Technologies Used

React Native: The framework used for developing the mobile application for both iOS and Android. Version: 0.72.5 Redux & Redux Toolkit: For state management throughout the app. Versions: @reduxjs/toolkit: 1.9.6 react-redux: 8.1.2 Expo: A framework and platform for universal React applications. Versions: expo: 49.0.12 expo-status-bar: 1.6.0 React Navigation: Navigation library for the app's screen transitions and flows. Versions: @react-navigation/native: 6.1.8 @react-navigation/native-stack: 6.9.14 React Native Maps: Used for displaying interactive maps and routes. Versions: react-native-maps: 1.7.1 react-native-maps-directions: 1.9.0 React Native Google Places Autocomplete: For location search and selection. Version: 2.5.3 React Native Elements: UI toolkit for building consistent app interfaces. Version: 3.4.3 React Native Vector Icons: Customizable icons for React Native. Version: 10.0.0 React Native Safe Area Context: Handling safe area insets, ensuring that UI elements don't overlap with system elements. Version: 4.6.3 React Native Screens: Helps in improving performance by using native platform primitives to represent screens. Version: 3.22.0 TWRNC: A utility for styling based on utility classes. Version: 3.6.4 React Native Dotenv: Enables the use of environment variables in the app. Version: 3.4.9 @gorhom/bottom-sheet: Provides a bottom sheet component for the app. Version: 4.5.1 Babel: A JavaScript compiler. Version: 7.20.0 (devDependency) React: JavaScript library for building user interfaces. Version: 18.2.0

Challenges and Solutions

Cross-Platform Mobile Development: Solution: React Native Purpose: Develop a single application that runs seamlessly on both iOS and Android platforms. State Management: Solution: Redux & Redux Toolkit Purpose: Manage and maintain application state consistently across different components and screens. Rapid Development & Testing: Solution: Expo Purpose: Provides a development environment that facilitates quick prototyping, building, and testing across multiple platforms. Application Navigation: Solution: React Navigation (Native Stack Navigator) Purpose: Manage screen transitions, create navigation flows, and handle routing within the app. Interactive Maps & Routes Display: Solution: React Native Maps & React Native Maps Directions Purpose: Display maps, plot routes, and show directions within the app. Location Search & Autocomplete: Solution: React Native Google Places Autocomplete Purpose: Allow users to search for locations and get suggestions while typing. User Interface Components: Solution: React Native Elements & React Native Vector Icons Purpose: Build consistent and visually appealing UI elements and icons. Safe UI Rendering: Solution: React Native Safe Area Context Purpose: Ensure app content doesn't overlap with system UI elements, especially on devices with notches or rounded corners. Improved Screen Performance: Solution: React Native Screens Purpose: Optimize screen performance by using native platform primitives. Styling Utility: Solution: TWRNC Purpose: Apply styles quickly based on utility classes, aiding in a consistent design. Environment Variables Management: Solution: React Native Dotenv Purpose: Securely manage and use environment variables within the app, such as API keys. Interactive Bottom Sheet: Solution: @gorhom/bottom-sheet Purpose: Implement a bottom sheet component for displaying additional content or options in an interactive manner. JavaScript Transpilation: Solution: Babel (devDependency) Purpose: Convert ES6 and beyond JavaScript into backward-compatible versions for better browser compatibility and performance.

Conclusion

Uber App, constructed using React Native, embodies a modern approach to mobile application development. By leveraging a combination of powerful libraries and tools, the app ensures a seamless, efficient, and high-quality user experience across both iOS and Android platforms. The integration of Redux for state management solidifies consistent data flow and state predictability, while the use of React Navigation ensures smooth transitions and intuitive navigation flows. Furthermore, the integration of Google APIs facilitates precise and user-friendly location services. The meticulous selection of libraries, from UI components to environment variable management, reflects a keen focus on both the end-user experience and developer efficiency. In essence, TaxiApp is a testament to the capabilities of today's mobile development technologies and the potential they hold in crafting robust, feature-rich, and user-centric applications.
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen
screen

Available for work

·

Excited to bring my skills and experience to your team

·

Available for collaboration

·

Seeking new challenges

·

Available for cooperation

·

Interested in working with startups

·

Available for short-term or long-term projects

·

Available for work

·

Excited to bring my skills and experience to your team

·

Available for collaboration

·

Seeking new challenges

·

Available for cooperation

·

Interested in working with startups

·

Available for short-term or long-term projects

·

© 2020 - 2025 Brandon Nolan. All Rights Reserved.

+1 (437) 439-3888

Canada | Global