{"id":23978669,"url":"https://github.com/popcodelab/ezcars","last_synced_at":"2026-05-13T01:33:12.149Z","repository":{"id":270979863,"uuid":"874709935","full_name":"popcodelab/ezcars","owner":"popcodelab","description":"P2P Car Rental Mockup app","archived":false,"fork":false,"pushed_at":"2025-05-24T06:58:36.000Z","size":9058,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-24T07:38:23.889Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/popcodelab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-18T10:17:33.000Z","updated_at":"2025-05-24T06:58:40.000Z","dependencies_parsed_at":"2025-01-04T15:18:17.880Z","dependency_job_id":"c6330ad6-4d8d-482c-92d9-3d41a04dda6d","html_url":"https://github.com/popcodelab/ezcars","commit_stats":null,"previous_names":["popcodelab/ezcars"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/popcodelab/ezcars","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popcodelab%2Fezcars","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popcodelab%2Fezcars/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popcodelab%2Fezcars/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popcodelab%2Fezcars/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/popcodelab","download_url":"https://codeload.github.com/popcodelab/ezcars/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/popcodelab%2Fezcars/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32963949,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T23:30:32.555Z","status":"ssl_error","status_checked_at":"2026-05-12T23:30:18.191Z","response_time":102,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-07T08:19:42.799Z","updated_at":"2026-05-13T01:33:12.136Z","avatar_url":"https://github.com/popcodelab.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ezcars\n## Table of contents\n\n# Ezcars - P2P Car Rental Mockup\n\n**Ezcars** is a peer-to-peer (P2P) car rental mockup application built using Flutter. This app integrates with the **Google Maps API** to allow users to browse and manage rental vehicles, displaying car locations on an interactive map. Users can navigate through multiple screens to view car details, manage their profile, adjust settings, and search for available rental cars.\n\n## Table of Contents\n- [Ezcars - P2P Car Rental Mockup](#ezcars---p2p-car-rental-mockup)\n  - [Table of Contents](#table-of-contents-1)\n  - [Features](#features)\n  - [1. Home Screen](#1-home-screen)\n  - [2. Search Screen](#2-search-screen)\n  - [3. Profile Screen](#3-profile-screen)\n  - [4. Settings Screen](#4-settings-screen)\n  - [5. Google Maps Integration](#5-google-maps-integration)\n  - [6. API Key Management](#6-api-key-management)\n  - [7. Main Navigation](#7-main-navigation)\n  - [8. Localization (l10n)](#8-localization-l10n)\n  - [Technical Overview](#technical-overview)\n  - [Getting Started](#getting-started)\n    - [1. Clone the Repository](#1-clone-the-repository)\n    - [2. Navigate to the Project Directory](#2-navigate-to-the-project-directory)\n    - [3. Install Dependencies](#3-install-dependencies)\n    - [4. Set Up Google Maps API Keys](#4-set-up-google-maps-api-keys)\n      - [Steps to Set Up API Keys:](#steps-to-set-up-api-keys)\n    - [5. Enable Required Permissions](#5-enable-required-permissions)\n      - [Android:](#android)\n    - [iOS](#ios)\n      - [1. Add Location Permissions:](#1-add-location-permissions)\n      - [2. Add Google Maps API Key:](#2-add-google-maps-api-key)\n    - [6. Run the App](#6-run-the-app)\n      - [To run the app, use the following command:](#to-run-the-app-use-the-following-command)\n    - [7. Optional: Running on Specific Platforms](#7-optional-running-on-specific-platforms)\n      - [Running on Android:](#running-on-android)\n      - [Running on iOS:](#running-on-ios)\n    - [8. Optional: Localization (l10n) Support](#8-optional-localization-l10n-support)\n  - [Technologies](#technologies)\n  - [Authors](#authors)\n  - [Screenshots](#screenshots)\n\n## Features\n\n## 1. Home Screen\nThe Home Screen provides users with an overview of the app, acting as the main entry point for navigation.\n\n- Displays essential app content, including quick access to the search and profile sections.\n- Central hub for navigating to other screens, including Search, Profile, and Settings.\n\n## 2. Search Screen\nThe Search Screen allows users to search for available rental cars. Search results are displayed based on user input, showing key details such as the car’s location and availability.\n\n- Search functionality with text input.\n- Displays a list of available rental cars based on filters and user input.\n\n## 3. Profile Screen\nThe Profile Screen allows users to view and update their personal information, such as username, email, and profile picture.\n\n- View and manage personal profile information.\n- Access past and current car rentals.\n\n## 4. Settings Screen\nThe Settings Screen allows users to customize the app's behavior and appearance according to their preferences.\n\n- Manage notification settings, theme (dark mode/light mode), and privacy controls.\n- Provides an interface to manage account-related configurations.\n\n## 5. Google Maps Integration\nThe app integrates with **Google Maps API** to display rental car locations on an interactive map. Users can view and interact with car markers to see more details.\n\n- Real-time map with zoom, pan, and marker functionalities.\n- Each marker shows details such as the car’s location, price, and availability.\n- Users can tap on the marker to see more details about the car and rental information.\n\n## 6. API Key Management\nTo interact with Google Maps, the app uses API keys that are securely stored in the `keys.dart` file located in the `lib` folder.\n\nHere’s an example of how the API keys are managed:\n\n```dart\nclass APIKeys {\n   static String androidPlacesApiKey = \"YOUR DROID KEY HERE\";\n   static String iosApiKey = \"YOUR IOS KEY HERE\";\n}\n```\nEnsure you replace the placeholders with your actual Google Maps API keys before running the app.\n\n## 7. Main Navigation\n\nThe app features a BottomNavigationBar for seamless navigation between the Home, Search, Profile, and Settings screens.\n\n- Persistent navigation using BottomNavigationBar.\n- Uses an IndexedStack to maintain the state of screens when switching between tabs.\n\n## 8. Localization (l10n)\n\nThe app is fully localized (l10n), supporting multiple languages. It uses the AppLocalizations class to provide a seamless experience for users from different regions.\n\n- Support for multiple languages.\n- Localized strings for UI elements like navigation bar labels and screen titles.\n- Language fallback mechanism for unsupported locales.\n\n## Technical Overview\n\n## Getting Started\n\nTo get started with the app locally, follow these steps:\n\n### 1. Clone the Repository\nFirst, clone the repository to your local machine using Git:\n```bash\nhttps://github.com/popcodelab/ezcars\n```\n\n### 2. Navigate to the Project Directory\nOnce the repository is cloned, navigate into the project directory where the app files are located. Use the following command:\n\n```bash\ncd ezcars\n```\n\n### 3. Install Dependencies\nAfter navigating to the project directory, you need to install all the required dependencies that the app relies on. This can be done using Flutter's package manager.\n\nRun the following command in the terminal:\n\n```bash\nflutter pub get\n```\n\n### 4. Set Up Google Maps API Keys\nTo enable Google Maps functionality within the app, you need to configure the API keys for both Android and iOS platforms.\n\n#### Steps to Set Up API Keys:\n\n1. Open the `lib/keys.dart` file in the project directory.\n2. Replace the placeholder values for the API keys (`YOUR DROID KEY HERE` and `YOUR IOS KEY HERE`) with your actual Google Maps API keys.\n\nExample of the `keys.dart` file:\n\n```\nclass APIKeys {\n   static String androidPlacesApiKey = \"YOUR DROID KEY HERE\";\n   static String iosApiKey = \"YOUR IOS KEY HERE\";\n}\n```\n\n### 5. Enable Required Permissions\nTo use location services and display Google Maps, you must configure the appropriate permissions for both Android and iOS platforms.\n\n#### Android:\n#### 1. Open the `android/app/src/main/AndroidManifest.xml` file.\n#### 2. Add the following permissions inside the `\u003cmanifest\u003e` tag to enable location access:\n\n```xml\n\u003cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /\u003e\n\u003cuses-feature android:name=\"android.hardware.location.gps\" /\u003e\n```\n\n#### iOS\n\nTo use location services and display Google Maps on iOS, you need to configure certain permissions and set up the Google Maps API key.\n\n#### 1. Add Location Permissions:\nOpen the `ios/Runner/Info.plist` file and add the following key-value pairs to request location permissions from the user:\n\n```xml\n\u003ckey\u003eNSLocationWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003eThis app needs access to your location to show rental cars near you.\u003c/string\u003e\n\n\u003ckey\u003eNSLocationAlwaysUsageDescription\u003c/key\u003e\n\u003cstring\u003eYour location will be used to provide nearby car rentals.\u003c/string\u003e\n```\n\n#### 2. Add Google Maps API Key:\nTo use Google Maps on iOS, you need to provide your API key. Open the ios/Runner/AppDelegate.swift file and locate the didFinishLaunchingWithOptions method. Inside this method, add the following line:\n```\nGMSServices.provideAPIKey(\"YOUR_IOS_API_KEY\")\n```\n\nReplace YOUR_IOS_API_KEY with the actual Google Maps API key that you obtained from the Google Cloud Console.\n\n### 6. Run the App\n\nOnce you have set up the API keys and configured the necessary permissions for both Android and iOS, you can now run the app locally on your development machine.\n\n#### To run the app, use the following command:\n\n```bash\nflutter run\n```\n\n### 7. Optional: Running on Specific Platforms\n\nIf you want to run the app on a specific platform (either Android or iOS), follow these additional steps.\n\n#### Running on Android:\nTo run the app on an Android device or emulator, use the following command:\n```bash\nflutter run -d android\n```\n\n#### Running on iOS:\nTo run the app on an iOS device or emulator, use the following command:\n```bash\nflutter run -d ios\n```\n### 8. Optional: Localization (l10n) Support\nThe app supports localization (l10n). To add or modify translations:\n\n- Edit the localization files located in the lib/l10n/ folder.\n- Ensure new translations are added in the AppLocalizations class.\n- Run the following command to generate localization code:\n\n```\nflutter pub run intl_utils:generate\n```\n\n## Technologies\n\n\u003ctable style=\"border: none\"\u003e\n\u003ctr style=\"border: none\"\u003e\n  \u003ctd style=\"border: none\"\u003eFlutter\u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n  \u003cimg style=\"height: 40px;width: 40px;\" src=\"https://raw.github.com/popcodelab/svg-icons/main/flutter.svg?sanitize=true\" alt=\"Flutter\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr style=\"border: none\"\u003e\n  \u003ctd style=\"border: none\"\u003eDart\u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n  \u003cimg style=\"height: 40px;width: 40px;\" src=\"https://raw.github.com/popcodelab/svg-icons/main/dart.svg?sanitize=true\" alt=\"Dart\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr style=\"border: none\"\u003e\n  \u003ctd style=\"border: none\"\u003eAndroid\u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n  \u003cimg style=\"height: 40px;width: 40px;\" src=\"https://raw.github.com/popcodelab/svg-icons/main/android.svg?sanitize=true\" alt=\"Android\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr style=\"border: none\"\u003e\n  \u003ctd style=\"border: none\"\u003eApple iOS\u003c/td\u003e\u003ctd style=\"border: none\"\u003e\n  \u003cimg style=\"height: 40px;width: 40px;\" src=\"https://raw.github.com/popcodelab/svg-icons/main/apple-ios.svg?sanitize=true\" alt=\"Apple iOS\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n\n## Authors\n\nPOP's Code Lab\n\n## Screenshots\n\n\u003cimg src=\"./screenshots/home_l.jpg\" width=\"350\" alt=\"Home light theme\"\u003e\n\u003cimg src=\"./screenshots/home_d.jpg\" width=\"350\" alt=\"Home dark theme\"\u003e\n\u003cimg src=\"./screenshots/home_d_details.jpg\" width=\"350\" alt=\"Home details\"\u003e\n\u003cimg src=\"./screenshots/map_1.jpg\" width=\"350\" alt=\"Map dark theme\"\u003e\n\u003cimg src=\"./screenshots/map_2.jpg\" width=\"350\" alt=\"Map light theme\"\u003e\n\u003cimg src=\"./screenshots/settings.jpg\" width=\"350\" alt=\"Settings\"\u003e\n\n---\n\n![Flutter](https://img.shields.io/badge/Flutter-%2302569B.svg?style=for-the-badge\u0026logo=Flutter\u0026logoColor=white)\n![Dart](https://img.shields.io/badge/dart-%230175C2.svg?style=for-the-badge\u0026logo=dart\u0026logoColor=white)\n![Android Studio](https://img.shields.io/badge/android%20studio-346ac1?style=for-the-badge\u0026logo=android%20studio\u0026logoColor=white)\n![Android](https://img.shields.io/badge/Android-3DDC84?style=for-the-badge\u0026logo=android\u0026logoColor=white)\n![iOS](https://img.shields.io/badge/iOS-000000?style=for-the-badge\u0026logo=ios\u0026logoColor=white)\n![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge\u0026logo=visual-studio-code\u0026logoColor=white)\n![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)\n![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge\u0026logo=git\u0026logoColor=white)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpopcodelab%2Fezcars","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpopcodelab%2Fezcars","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpopcodelab%2Fezcars/lists"}