├── .flutter-plugins-dependencies ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .metadata ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ENCRYPTION.md ├── LICENSE ├── README.md ├── android ├── app │ ├── .gitattributes │ ├── build.gradle │ ├── google-services.json │ ├── proguard-rules.pro │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── .gitattributes │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── dev │ │ │ │ └── fliver │ │ │ │ └── driver │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-mdpi │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xhdpi │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xxhdpi │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable-xxxhdpi │ │ │ └── ic_launcher_foreground.png │ │ │ ├── drawable │ │ │ ├── app_icon.png │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ └── launcher_icon.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── launcher_icon.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── credits │ ├── priyansh.jpg │ ├── urmil.jpg │ └── vinay.png ├── flare │ ├── fetching_location.flr │ ├── messages-dark.flr │ ├── messages-light.flr │ └── no_connection.flr ├── fonts │ └── AvenirNextRounded │ │ └── AvenirNextRounded-Medium.ttf ├── icon │ ├── icon-adaptive.png │ ├── icon-ios.png │ └── icon-legacy.png ├── logo │ ├── text-black.png │ ├── text-green.png │ └── text-white.png └── other │ ├── cluster.png │ ├── icon.png │ ├── notification.png │ ├── rickshaw-top.png │ ├── rickshaw.png │ └── rupee.png ├── branding ├── other │ ├── google-play-badge.png │ ├── rickshaw.png │ └── text.png └── screenshots │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ └── 05.png ├── ios ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── flutter_export_environment.sh ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Runner │ ├── .gitattributes │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-50x50@1x.png │ │ ├── Icon-App-50x50@2x.png │ │ ├── Icon-App-57x57@1x.png │ │ ├── Icon-App-57x57@2x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-72x72@1x.png │ │ ├── Icon-App-72x72@2x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── GoogleService-Info.plist │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── main.dart ├── pages │ ├── chat_page.dart │ ├── map_view_page.dart │ └── onboarding_page.dart ├── services │ ├── censor.dart │ └── firebase_analytics.dart ├── utils │ ├── colors.dart │ ├── first_page.dart │ ├── map_helper.dart │ ├── map_marker.dart │ ├── map_styles.dart │ ├── text_styles.dart │ ├── translations.dart │ └── ui_helpers.dart └── widgets │ ├── fetching_location.dart │ ├── message.dart │ ├── message_placeholder.dart │ ├── no_connection.dart │ └── sexy_tile.dart ├── pubspec.lock └── pubspec.yaml /.flutter-plugins-dependencies: -------------------------------------------------------------------------------- 1 | {"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"cloud_firestore","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.4+2/","dependencies":["firebase_core"]},{"name":"connectivity","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity-0.4.5+3/","dependencies":[]},{"name":"firebase_analytics","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_analytics-5.0.11/","dependencies":[]},{"name":"firebase_core","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.4/","dependencies":[]},{"name":"flutter_local_notifications","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_local_notifications-1.2.2/","dependencies":[]},{"name":"geoflutterfire","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/geoflutterfire-2.1.0/","dependencies":["cloud_firestore"]},{"name":"geolocator","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/geolocator-5.3.0/","dependencies":["location_permissions"]},{"name":"google_maps_flutter","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/google_maps_flutter-0.5.24+1/","dependencies":[]},{"name":"location_permissions","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/location_permissions-2.0.5/","dependencies":[]},{"name":"path_provider","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.4.5/","dependencies":[]},{"name":"share","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/share-0.6.3+6/","dependencies":[]},{"name":"shared_preferences","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.6+3/","dependencies":[]},{"name":"sqflite","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.1.7+3/","dependencies":[]}],"android":[{"name":"cloud_firestore","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.4+2/","dependencies":["firebase_core"]},{"name":"connectivity","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity-0.4.5+3/","dependencies":[]},{"name":"firebase_analytics","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_analytics-5.0.11/","dependencies":[]},{"name":"firebase_core","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.4/","dependencies":[]},{"name":"flutter_local_notifications","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_local_notifications-1.2.2/","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_android_lifecycle-1.0.6/","dependencies":[]},{"name":"geoflutterfire","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/geoflutterfire-2.1.0/","dependencies":["cloud_firestore"]},{"name":"geolocator","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/geolocator-5.3.0/","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/google_api_availability-2.0.3/","dependencies":[]},{"name":"google_maps_flutter","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/google_maps_flutter-0.5.24+1/","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"location_permissions","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/location_permissions-2.0.5/","dependencies":[]},{"name":"path_provider","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.4.5/","dependencies":[]},{"name":"share","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/share-0.6.3+6/","dependencies":[]},{"name":"shared_preferences","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.6+3/","dependencies":[]},{"name":"sqflite","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.1.7+3/","dependencies":[]}],"macos":[{"name":"cloud_firestore","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.4+2/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.4/","dependencies":[]},{"name":"shared_preferences_macos","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-0.0.1+6/","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"cloud_firestore_web","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore_web-0.1.1/","dependencies":[]},{"name":"firebase_core_web","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+2/","dependencies":[]},{"name":"shared_preferences_web","path":"/Users/urmilshroff/Development/GitHub/Clones/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-0.1.2+4/","dependencies":[]}]},"dependencyGraph":[{"name":"cloud_firestore","dependencies":["firebase_core","cloud_firestore_web"]},{"name":"cloud_firestore_web","dependencies":["firebase_core"]},{"name":"connectivity","dependencies":[]},{"name":"firebase_analytics","dependencies":[]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"flutter_local_notifications","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"geoflutterfire","dependencies":["cloud_firestore"]},{"name":"geolocator","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","dependencies":[]},{"name":"google_maps_flutter","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"location_permissions","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"share","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2020-03-17 18:40:40.286382","version":"1.15.22-pre.28"} -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: bug 6 | assignees: urmilshroff, prince1998, vinay-ai 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '...' 17 | 3. Scroll down to '...' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Smartphone:** 27 | - Device: 28 | - OS: 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[FEATURE REQUEST]" 5 | labels: enhancement 6 | assignees: urmilshroff, prince1998, vinay-ai 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Eg: I'm always frustrated when... 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | 41 | # iOS/XCode related 42 | **/ios/**/*.mode1v3 43 | **/ios/**/*.mode2v3 44 | **/ios/**/*.moved-aside 45 | **/ios/**/*.pbxuser 46 | **/ios/**/*.perspectivev3 47 | **/ios/**/*sync/ 48 | **/ios/**/.sconsign.dblite 49 | **/ios/**/.tags* 50 | **/ios/**/.vagrant/ 51 | **/ios/**/DerivedData/ 52 | **/ios/**/Icon? 53 | **/ios/**/Pods/ 54 | **/ios/**/.symlinks/ 55 | **/ios/**/profile 56 | **/ios/**/xcuserdata 57 | **/ios/.generated/ 58 | **/ios/Flutter/App.framework 59 | **/ios/Flutter/Flutter.framework 60 | **/ios/Flutter/Generated.xcconfig 61 | **/ios/Flutter/app.flx 62 | **/ios/Flutter/app.zip 63 | **/ios/Flutter/flutter_assets/ 64 | **/ios/ServiceDefinitions.json 65 | **/ios/Runner/GeneratedPluginRegistrant.* 66 | 67 | # Exceptions to above rules. 68 | !**/ios/**/default.mode1v3 69 | !**/ios/**/default.mode2v3 70 | !**/ios/**/default.pbxuser 71 | !**/ios/**/default.perspectivev3 72 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 73 | ios/Flutter/flutter_export_environment.sh 74 | android/key.properties 75 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 20e59316b8b8474554b38493b8ca888794b0234a 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at urmilshroff@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | When contributing to this repository, please discuss the changes you wish to make by submitting an [issue](https://github.com/fliverdev/driver/issues) first. It helps us understand your proposal in advance and discuss wether it is necessary or not. 4 | 5 | Alternatively, you can contribute to resolve any of the [open issues](https://github.com/fliverdev/driver/issues) without the need for prior discussion. 6 | 7 | ## Pull Requests 8 | 9 | **Important:** this project contains certain files that are encrypted due to the use of API keys, which is why it will not build directly on your machine. Please refer to [ENCRYPTION.md](ENCRYPTION.md) for more information. 10 | 11 | Please follow these exact steps for sending us a pull request: 12 | 13 | - Make sure that an issue regarding your proposal is open (by you or someone else). 14 | - Fork this repository and clone the fork to your local machine. 15 | - Checkout the `dev` branch for the latest development progress using `git checkout dev`. 16 | - Replace all the encrypted files with your own as explained in [ENCRYPTION.md](ENCRYPTION.md). 17 | - **Important:** When committing changes, ensure that you deselect/unstage the encrypted files that you locally modified in the previous step. If you commit your own encrypted files, **we will not merge your pull request**. 18 | - Send us a pull request from `your-username:dev` to `fliverdev:dev`. 19 | - Your PR will be merged if satisfactory. 20 | -------------------------------------------------------------------------------- /ENCRYPTION.md: -------------------------------------------------------------------------------- 1 | # Encryption 2 | 3 | This project contains certain files that are encrypted using [git-crypt](https://github.com/AGWA/git-crypt) due to the use of API keys to connect to Firebase and Google Maps, which is why it will not build directly on your machine. 4 | 5 | The following are the files that have been encrypted: 6 | 7 | - `/android/app/src/main/AndroidManifest.xml` 8 | - `/ios/Runner/AppDelegate.swift` 9 | - `/android/app/google-services.json` 10 | - `/ios/Runner/GoogleService-Info.plist` 11 | 12 | In order to resolve this, you must replace the encrypted files with files containing your own API credentials. These API credentials can be obtained by [creating a new Firebase project](https://console.firebase.google.com/) and following the instructions from there. 13 | 14 | ### Android Manifest 15 | Replace the encrypted `AndroidManifest.xml` with the following contents, and replace "YOUR_API_KEY" with your own: 16 | 17 | ``` 18 | 21 | 26 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | ``` 54 | 55 | ### iOS App Delegate 56 | 57 | Replace the encrypted `AppDelegate.swift` with the following contents, and replace "YOUR_API_KEY" with your own: 58 | 59 | ``` 60 | import UIKit 61 | import Flutter 62 | import Firebase 63 | import GoogleMaps 64 | 65 | @UIApplicationMain 66 | @objc class AppDelegate: FlutterAppDelegate { 67 | override func application( 68 | _ application: UIApplication, 69 | didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? 70 | ) -> Bool { 71 | FirebaseApp.configure() 72 | GeneratedPluginRegistrant.register(with: self) 73 | GMSServices.provideAPIKey("YOUR_API_KEY") 74 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 75 | } 76 | } 77 | ``` 78 | 79 | ### Google Services for Firebase 80 | 81 | The `google-services.json` and `GoogleService-Info.plist` can be downloaded from your Firebase project for Android and iOS respectively. Replace the old encrypted files with the newly downloaded ones. 82 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Fliver DriverFliver Driver

2 | 3 | # Fliver Driver for Android 4 | 5 | [![Stars](https://img.shields.io/github/stars/fliverdev/driver.svg)](https://github.com/fliverdev/driver/stargazers) 6 | [![Forks](https://img.shields.io/github/forks/fliverdev/driver.svg)](https://github.com/fliverdev/driver/network/members) 7 | [![Issues](https://img.shields.io/github/issues/fliverdev/driver.svg)](https://github.com/fliverdev/driver/issues) 8 | [![License](https://img.shields.io/github/license/fliverdev/driver.svg)](https://opensource.org/licenses/GPL-3.0) 9 | 10 | Fliver is an app to help you find customers who are looking for a Rickshaw. Simply open the app and you will see their locations. You can also see where they are going by tapping on a marker, and talk to them in the Global Chat. 11 | 12 | The entire project is open source and free of charge. There are no additional costs for Riders besides for the regular metered Rickshaw fare, and there is no commission that Drivers need to pay. Fliver is simply created to benefit Indian citizens. Check out our [FAQ](https://fliverdev.github.io/faq/) to learn more. 13 | 14 | This is the Driver app repository for Rickshaw Drivers to view customer locations. It is part of the Final Year Project of three Computer Engineering students. 15 | 16 | [Play Store](https://play.google.com/store/apps/details?id=dev.fliver.driver) 17 | 18 | ## Screenshots 19 | 20 |

Driver for Android Driver for Android Driver for Android Driver for Android Driver for Android

21 | 22 | ## Building 23 | 24 | **Important:** this project contains certain files that are encrypted due to the use of API keys, which is why it will not build directly on your machine. Please refer to [ENCRYPTION.md](ENCRYPTION.md) for more information. 25 | 26 | To build and run the app on your device, do the following: 27 | 28 | - Install Flutter by following the instructions on their [website](https://flutter.dev/docs/get-started/install/). 29 | - Clone this repo to your local machine using `git clone https://github.com/fliverdev/driver.git`. 30 | - Replace all the encrypted files with your own as explained in [ENCRYPTION.md](ENCRYPTION.md). 31 | - Connect your devices/emulators and run the app using `flutter run` in the root of the project directory. 32 | 33 | **Note:** you can also run it in release mode using `flutter run --release` to improve performance and stability, however, debugging features will be disabled. 34 | 35 | ## Contributing 36 | 37 | Please read the [CONTRIBUTING.md](CONTRIBUTING.md) file for more details on how to contribute. 38 | 39 | ## Credits 40 | 41 | This project is primarily developed by a trio of Computer Engineering students at NMIMS's MPSTME: 42 | 43 | - [Urmil Shroff](https://github.com/urmilshroff) 44 | - [Priyansh Ramnani](https://github.com/prince1998) 45 | - [Vinay Kolwankar](https://github.com/vinay-ai) 46 | 47 | Take a look at the entire list of [contributors](https://github.com/fliverdev/driver/graphs/contributors) to see who all have helped with the project via pull requests. 48 | 49 | ## Legal 50 | 51 | This project is licensed under the GNU GPL v3 - see the [LICENSE](LICENSE) file for details. Also view our [Privacy Policy](https://fliverdev.github.io/privacy_policy/) for additional legal information. 52 | -------------------------------------------------------------------------------- /android/app/.gitattributes: -------------------------------------------------------------------------------- 1 | google-services.json filter=git-crypt diff=git-crypt 2 | .gitattributes !filter !diff -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | def keystoreProperties = new Properties() 29 | def keystorePropertiesFile = rootProject.file('key.properties') 30 | if (keystorePropertiesFile.exists()) { 31 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 32 | } 33 | 34 | android { 35 | compileSdkVersion 29 36 | 37 | sourceSets { 38 | main.java.srcDirs += 'src/main/kotlin' 39 | } 40 | 41 | lintOptions { 42 | disable 'InvalidPackage' 43 | } 44 | 45 | defaultConfig { 46 | applicationId "dev.fliver.driver" 47 | minSdkVersion 21 48 | targetSdkVersion 29 49 | versionCode flutterVersionCode.toInteger() 50 | versionName flutterVersionName 51 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 52 | } 53 | 54 | signingConfigs { 55 | release { 56 | keyAlias keystoreProperties['keyAlias'] 57 | keyPassword keystoreProperties['keyPassword'] 58 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null 59 | storePassword keystoreProperties['storePassword'] 60 | } 61 | } 62 | 63 | buildTypes { 64 | release { 65 | signingConfig signingConfigs.release 66 | minifyEnabled true 67 | shrinkResources false 68 | proguardFiles getDefaultProguardFile( 69 | 'proguard-android-optimize.txt'), 70 | 'proguard-rules.pro' 71 | } 72 | } 73 | } 74 | 75 | flutter { 76 | source '../..' 77 | } 78 | 79 | dependencies { 80 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 81 | implementation 'com.google.firebase:firebase-core:17.0.0' 82 | testImplementation 'junit:junit:4.12' 83 | androidTestImplementation 'androidx.test:runner:1.1.1' 84 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' 85 | } 86 | 87 | apply plugin: 'com.google.gms.google-services' -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/google-services.json -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | ## Flutter wrapper 2 | -keep class io.flutter.app.** { *; } 3 | -keep class io.flutter.plugin.** { *; } 4 | -keep class io.flutter.util.** { *; } 5 | -keep class io.flutter.view.** { *; } 6 | -keep class io.flutter.** { *; } 7 | -keep class io.flutter.plugins.** { *; } 8 | -dontwarn io.flutter.embedding.** 9 | 10 | ## Gson rules 11 | # Gson uses generic type information stored in a class file when working with fields. Proguard 12 | # removes such information by default, so configure it to keep all of it. 13 | -keepattributes Signature 14 | 15 | # For using GSON @Expose annotation 16 | -keepattributes *Annotation* 17 | 18 | # Gson specific classes 19 | -dontwarn sun.misc.** 20 | #-keep class com.google.gson.stream.** { *; } 21 | 22 | # Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory, 23 | # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) 24 | -keep class * implements com.google.gson.TypeAdapter 25 | -keep class * implements com.google.gson.TypeAdapterFactory 26 | -keep class * implements com.google.gson.JsonSerializer 27 | -keep class * implements com.google.gson.JsonDeserializer 28 | 29 | # Prevent R8 from leaving Data object members always null 30 | -keepclassmembers,allowobfuscation class * { 31 | @com.google.gson.annotations.SerializedName ; 32 | } 33 | 34 | ## flutter_local_notification plugin rules 35 | -keep class com.dexterous.** { *; } -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/.gitattributes: -------------------------------------------------------------------------------- 1 | AndroidManifest.xml filter=git-crypt diff=git-crypt 2 | .gitattributes !filter !diff -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/AndroidManifest.xml -------------------------------------------------------------------------------- /android/app/src/main/kotlin/dev/fliver/driver/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.fliver.driver 2 | 3 | import android.os.Bundle 4 | 5 | import io.flutter.app.FlutterActivity 6 | import io.flutter.plugins.GeneratedPluginRegistrant 7 | 8 | class MainActivity: FlutterActivity() { 9 | override fun onCreate(savedInstanceState: Bundle?) { 10 | super.onCreate(savedInstanceState) 11 | GeneratedPluginRegistrant.registerWith(this) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/drawable/app_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-hdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-mdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #eceff1 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.0' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.3.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | classpath 'com.google.gms:google-services:4.2.0' 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | jcenter() 19 | } 20 | } 21 | 22 | rootProject.buildDir = '../build' 23 | subprojects { 24 | project.buildDir = "${rootProject.buildDir}/${project.name}" 25 | } 26 | subprojects { 27 | project.evaluationDependsOn(':app') 28 | } 29 | 30 | task clean(type: Delete) { 31 | delete rootProject.buildDir 32 | } 33 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | android.enableR8=true 6 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /assets/credits/priyansh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/credits/priyansh.jpg -------------------------------------------------------------------------------- /assets/credits/urmil.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/credits/urmil.jpg -------------------------------------------------------------------------------- /assets/credits/vinay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/credits/vinay.png -------------------------------------------------------------------------------- /assets/flare/fetching_location.flr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/flare/fetching_location.flr -------------------------------------------------------------------------------- /assets/flare/messages-dark.flr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/flare/messages-dark.flr -------------------------------------------------------------------------------- /assets/flare/messages-light.flr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/flare/messages-light.flr -------------------------------------------------------------------------------- /assets/flare/no_connection.flr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/flare/no_connection.flr -------------------------------------------------------------------------------- /assets/fonts/AvenirNextRounded/AvenirNextRounded-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/fonts/AvenirNextRounded/AvenirNextRounded-Medium.ttf -------------------------------------------------------------------------------- /assets/icon/icon-adaptive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/icon/icon-adaptive.png -------------------------------------------------------------------------------- /assets/icon/icon-ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/icon/icon-ios.png -------------------------------------------------------------------------------- /assets/icon/icon-legacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/icon/icon-legacy.png -------------------------------------------------------------------------------- /assets/logo/text-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/logo/text-black.png -------------------------------------------------------------------------------- /assets/logo/text-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/logo/text-green.png -------------------------------------------------------------------------------- /assets/logo/text-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/logo/text-white.png -------------------------------------------------------------------------------- /assets/other/cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/other/cluster.png -------------------------------------------------------------------------------- /assets/other/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/other/icon.png -------------------------------------------------------------------------------- /assets/other/notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/other/notification.png -------------------------------------------------------------------------------- /assets/other/rickshaw-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/other/rickshaw-top.png -------------------------------------------------------------------------------- /assets/other/rickshaw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/other/rickshaw.png -------------------------------------------------------------------------------- /assets/other/rupee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/assets/other/rupee.png -------------------------------------------------------------------------------- /branding/other/google-play-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/other/google-play-badge.png -------------------------------------------------------------------------------- /branding/other/rickshaw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/other/rickshaw.png -------------------------------------------------------------------------------- /branding/other/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/other/text.png -------------------------------------------------------------------------------- /branding/screenshots/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/screenshots/01.png -------------------------------------------------------------------------------- /branding/screenshots/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/screenshots/02.png -------------------------------------------------------------------------------- /branding/screenshots/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/screenshots/03.png -------------------------------------------------------------------------------- /branding/screenshots/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/screenshots/04.png -------------------------------------------------------------------------------- /branding/screenshots/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/branding/screenshots/05.png -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/flutter_export_environment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This is a generated file; do not edit or check into version control. 3 | export "FLUTTER_ROOT=/Users/urmilshroff/Development/GitHub/Clones/flutter" 4 | export "FLUTTER_APPLICATION_PATH=/Users/urmilshroff/Development/Apps/Projects/driver" 5 | export "FLUTTER_TARGET=lib/main.dart" 6 | export "FLUTTER_BUILD_DIR=build" 7 | export "SYMROOT=${SOURCE_ROOT}/../build/ios" 8 | export "OTHER_LDFLAGS=$(inherited) -framework Flutter" 9 | export "FLUTTER_FRAMEWORK_DIR=/Users/urmilshroff/Development/GitHub/Clones/flutter/bin/cache/artifacts/engine/ios" 10 | export "FLUTTER_BUILD_NAME=2.0.0" 11 | export "FLUTTER_BUILD_NUMBER=7" 12 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '9.0' 3 | pod 'Firebase/Core' 4 | 5 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 6 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 7 | 8 | project 'Runner', { 9 | 'Debug' => :debug, 10 | 'Profile' => :release, 11 | 'Release' => :release, 12 | } 13 | 14 | def parse_KV_file(file, separator='=') 15 | file_abs_path = File.expand_path(file) 16 | if !File.exists? file_abs_path 17 | return []; 18 | end 19 | pods_ary = [] 20 | skip_line_start_symbols = ["#", "/"] 21 | File.foreach(file_abs_path) { |line| 22 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 23 | plugin = line.split(pattern=separator) 24 | if plugin.length == 2 25 | podname = plugin[0].strip() 26 | path = plugin[1].strip() 27 | podpath = File.expand_path("#{path}", file_abs_path) 28 | pods_ary.push({:name => podname, :path => podpath}); 29 | else 30 | puts "Invalid plugin specification: #{line}" 31 | end 32 | } 33 | return pods_ary 34 | end 35 | 36 | target 'Runner' do 37 | use_frameworks! 38 | 39 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 40 | # referring to absolute paths on developers' machines. 41 | system('rm -rf .symlinks') 42 | system('mkdir -p .symlinks/plugins') 43 | 44 | # Flutter Pods 45 | generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig') 46 | if generated_xcode_build_settings.empty? 47 | puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first." 48 | end 49 | generated_xcode_build_settings.map { |p| 50 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR' 51 | symlink = File.join('.symlinks', 'flutter') 52 | File.symlink(File.dirname(p[:path]), symlink) 53 | pod 'Flutter', :path => File.join(symlink, File.basename(p[:path])) 54 | end 55 | } 56 | 57 | # Plugin Pods 58 | plugin_pods = parse_KV_file('../.flutter-plugins') 59 | plugin_pods.map { |p| 60 | symlink = File.join('.symlinks', 'plugins', p[:name]) 61 | File.symlink(p[:path], symlink) 62 | pod p[:name], :path => File.join(symlink, 'ios') 63 | } 64 | end 65 | 66 | # Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. 67 | install! 'cocoapods', :disable_input_output_paths => true 68 | 69 | post_install do |installer| 70 | installer.pods_project.targets.each do |target| 71 | target.build_configurations.each do |config| 72 | config.build_settings['ENABLE_BITCODE'] = 'NO' 73 | end 74 | end 75 | end 76 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BoringSSL-GRPC (0.0.3): 3 | - BoringSSL-GRPC/Implementation (= 0.0.3) 4 | - BoringSSL-GRPC/Interface (= 0.0.3) 5 | - BoringSSL-GRPC/Implementation (0.0.3): 6 | - BoringSSL-GRPC/Interface (= 0.0.3) 7 | - BoringSSL-GRPC/Interface (0.0.3) 8 | - cloud_firestore (0.0.1): 9 | - Firebase/Core 10 | - Firebase/Firestore (~> 6.0) 11 | - Flutter 12 | - connectivity (0.0.1): 13 | - Flutter 14 | - Reachability 15 | - Firebase/Core (6.6.0): 16 | - Firebase/CoreOnly 17 | - FirebaseAnalytics (= 6.1.0) 18 | - Firebase/CoreOnly (6.6.0): 19 | - FirebaseCore (= 6.2.0) 20 | - Firebase/Firestore (6.6.0): 21 | - Firebase/CoreOnly 22 | - FirebaseFirestore (~> 1.4.3) 23 | - firebase_core (0.0.1): 24 | - Firebase/Core 25 | - Flutter 26 | - FirebaseAnalytics (6.1.0): 27 | - FirebaseCore (~> 6.2) 28 | - FirebaseInstanceID (~> 4.2) 29 | - GoogleAppMeasurement (= 6.1.0) 30 | - GoogleUtilities/AppDelegateSwizzler (~> 6.0) 31 | - GoogleUtilities/MethodSwizzler (~> 6.0) 32 | - GoogleUtilities/Network (~> 6.0) 33 | - "GoogleUtilities/NSData+zlib (~> 6.0)" 34 | - nanopb (~> 0.3) 35 | - FirebaseAuthInterop (1.0.0) 36 | - FirebaseCore (6.2.0): 37 | - FirebaseCoreDiagnostics (~> 1.0) 38 | - FirebaseCoreDiagnosticsInterop (~> 1.0) 39 | - GoogleUtilities/Environment (~> 6.2) 40 | - GoogleUtilities/Logger (~> 6.2) 41 | - FirebaseCoreDiagnostics (1.0.1): 42 | - FirebaseCoreDiagnosticsInterop (~> 1.0) 43 | - GoogleDataTransportCCTSupport (~> 1.0) 44 | - GoogleUtilities/Environment (~> 6.2) 45 | - GoogleUtilities/Logger (~> 6.2) 46 | - FirebaseCoreDiagnosticsInterop (1.0.0) 47 | - FirebaseFirestore (1.4.3): 48 | - FirebaseAuthInterop (~> 1.0) 49 | - FirebaseCore (~> 6.2) 50 | - FirebaseFirestore/abseil-cpp (= 1.4.3) 51 | - "gRPC-C++ (= 0.0.9)" 52 | - leveldb-library (~> 1.20) 53 | - nanopb (~> 0.3.901) 54 | - Protobuf (~> 3.1) 55 | - FirebaseFirestore/abseil-cpp (1.4.3): 56 | - FirebaseAuthInterop (~> 1.0) 57 | - FirebaseCore (~> 6.2) 58 | - "gRPC-C++ (= 0.0.9)" 59 | - leveldb-library (~> 1.20) 60 | - nanopb (~> 0.3.901) 61 | - Protobuf (~> 3.1) 62 | - FirebaseInstanceID (4.2.3): 63 | - FirebaseCore (~> 6.0) 64 | - GoogleUtilities/Environment (~> 6.0) 65 | - GoogleUtilities/UserDefaults (~> 6.0) 66 | - Flutter (1.0.0) 67 | - geolocator (5.1.5): 68 | - Flutter 69 | - google_api_availability (2.0.1): 70 | - Flutter 71 | - google_maps_flutter (0.0.1): 72 | - Flutter 73 | - GoogleMaps 74 | - GoogleAppMeasurement (6.1.0): 75 | - GoogleUtilities/AppDelegateSwizzler (~> 6.0) 76 | - GoogleUtilities/MethodSwizzler (~> 6.0) 77 | - GoogleUtilities/Network (~> 6.0) 78 | - "GoogleUtilities/NSData+zlib (~> 6.0)" 79 | - nanopb (~> 0.3) 80 | - GoogleDataTransport (1.1.0) 81 | - GoogleDataTransportCCTSupport (1.0.1): 82 | - GoogleDataTransport (~> 1.1) 83 | - nanopb 84 | - GoogleMaps (3.3.0): 85 | - GoogleMaps/Maps (= 3.3.0) 86 | - GoogleMaps/Base (3.3.0) 87 | - GoogleMaps/Maps (3.3.0): 88 | - GoogleMaps/Base 89 | - GoogleUtilities/AppDelegateSwizzler (6.2.4): 90 | - GoogleUtilities/Environment 91 | - GoogleUtilities/Logger 92 | - GoogleUtilities/Network 93 | - GoogleUtilities/Environment (6.2.4) 94 | - GoogleUtilities/Logger (6.2.4): 95 | - GoogleUtilities/Environment 96 | - GoogleUtilities/MethodSwizzler (6.2.4): 97 | - GoogleUtilities/Logger 98 | - GoogleUtilities/Network (6.2.4): 99 | - GoogleUtilities/Logger 100 | - "GoogleUtilities/NSData+zlib" 101 | - GoogleUtilities/Reachability 102 | - "GoogleUtilities/NSData+zlib (6.2.4)" 103 | - GoogleUtilities/Reachability (6.2.4): 104 | - GoogleUtilities/Logger 105 | - GoogleUtilities/UserDefaults (6.2.4): 106 | - GoogleUtilities/Logger 107 | - "gRPC-C++ (0.0.9)": 108 | - "gRPC-C++/Implementation (= 0.0.9)" 109 | - "gRPC-C++/Interface (= 0.0.9)" 110 | - "gRPC-C++/Implementation (0.0.9)": 111 | - "gRPC-C++/Interface (= 0.0.9)" 112 | - gRPC-Core (= 1.21.0) 113 | - nanopb (~> 0.3) 114 | - "gRPC-C++/Interface (0.0.9)" 115 | - gRPC-Core (1.21.0): 116 | - gRPC-Core/Implementation (= 1.21.0) 117 | - gRPC-Core/Interface (= 1.21.0) 118 | - gRPC-Core/Implementation (1.21.0): 119 | - BoringSSL-GRPC (= 0.0.3) 120 | - gRPC-Core/Interface (= 1.21.0) 121 | - nanopb (~> 0.3) 122 | - gRPC-Core/Interface (1.21.0) 123 | - leveldb-library (1.20) 124 | - location_permissions (2.0.3): 125 | - Flutter 126 | - nanopb (0.3.901): 127 | - nanopb/decode (= 0.3.901) 128 | - nanopb/encode (= 0.3.901) 129 | - nanopb/decode (0.3.901) 130 | - nanopb/encode (0.3.901) 131 | - Protobuf (3.9.0) 132 | - Reachability (3.2) 133 | - share (0.5.2): 134 | - Flutter 135 | - shared_preferences (0.0.1): 136 | - Flutter 137 | - url_launcher (0.0.1): 138 | - Flutter 139 | 140 | DEPENDENCIES: 141 | - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) 142 | - connectivity (from `.symlinks/plugins/connectivity/ios`) 143 | - Firebase/Core 144 | - firebase_core (from `.symlinks/plugins/firebase_core/ios`) 145 | - Flutter (from `.symlinks/flutter/ios`) 146 | - geolocator (from `.symlinks/plugins/geolocator/ios`) 147 | - google_api_availability (from `.symlinks/plugins/google_api_availability/ios`) 148 | - google_maps_flutter (from `.symlinks/plugins/google_maps_flutter/ios`) 149 | - location_permissions (from `.symlinks/plugins/location_permissions/ios`) 150 | - share (from `.symlinks/plugins/share/ios`) 151 | - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) 152 | - url_launcher (from `.symlinks/plugins/url_launcher/ios`) 153 | 154 | SPEC REPOS: 155 | https://github.com/CocoaPods/Specs.git: 156 | - BoringSSL-GRPC 157 | - Firebase 158 | - FirebaseAnalytics 159 | - FirebaseAuthInterop 160 | - FirebaseCore 161 | - FirebaseCoreDiagnostics 162 | - FirebaseCoreDiagnosticsInterop 163 | - FirebaseFirestore 164 | - FirebaseInstanceID 165 | - GoogleAppMeasurement 166 | - GoogleDataTransport 167 | - GoogleDataTransportCCTSupport 168 | - GoogleMaps 169 | - GoogleUtilities 170 | - "gRPC-C++" 171 | - gRPC-Core 172 | - leveldb-library 173 | - nanopb 174 | - Protobuf 175 | trunk: 176 | - Reachability 177 | 178 | EXTERNAL SOURCES: 179 | cloud_firestore: 180 | :path: ".symlinks/plugins/cloud_firestore/ios" 181 | connectivity: 182 | :path: ".symlinks/plugins/connectivity/ios" 183 | firebase_core: 184 | :path: ".symlinks/plugins/firebase_core/ios" 185 | Flutter: 186 | :path: ".symlinks/flutter/ios" 187 | geolocator: 188 | :path: ".symlinks/plugins/geolocator/ios" 189 | google_api_availability: 190 | :path: ".symlinks/plugins/google_api_availability/ios" 191 | google_maps_flutter: 192 | :path: ".symlinks/plugins/google_maps_flutter/ios" 193 | location_permissions: 194 | :path: ".symlinks/plugins/location_permissions/ios" 195 | share: 196 | :path: ".symlinks/plugins/share/ios" 197 | shared_preferences: 198 | :path: ".symlinks/plugins/shared_preferences/ios" 199 | url_launcher: 200 | :path: ".symlinks/plugins/url_launcher/ios" 201 | 202 | SPEC CHECKSUMS: 203 | BoringSSL-GRPC: db8764df3204ccea016e1c8dd15d9a9ad63ff318 204 | cloud_firestore: c6e28e89a1bf98faab7fc8fdec20dc6020799cd1 205 | connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75 206 | Firebase: a2b5951f30ff38fd3b3bdae9c7d340f940fd3c51 207 | firebase_core: 971ffa0fb29e49b80a2ad295eb1ad1cdbd680ec4 208 | FirebaseAnalytics: 48414ae5cbf6976d8a2f7177e0466540e5ab33ce 209 | FirebaseAuthInterop: 0ffa57668be100582bb7643d4fcb7615496c41fc 210 | FirebaseCore: 8c9e08bce0c72a3affd83927d8184cf244918bc8 211 | FirebaseCoreDiagnostics: 4c04ae09d0ab027c30179828c6bb47764df1bd13 212 | FirebaseCoreDiagnosticsInterop: 6829da2b8d1fc795ff1bd99df751d3788035d2cb 213 | FirebaseFirestore: d65bd28e77a8cdc045be6353c6e1e146efdf92dc 214 | FirebaseInstanceID: 8b42755db950682e7de0d167bc6fb26a57b244af 215 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec 216 | geolocator: 80aba2bb48f8c7dfc5a8b70b9d13fc3edc8399c4 217 | google_api_availability: 163b30f802e6148c67f092aa4501c90ddd8eec8d 218 | google_maps_flutter: d0dd62f5a7d39bae61057eb9f52dd778d99c7c6c 219 | GoogleAppMeasurement: 47285fa897e5a125df56b9ef8750a1d81e4598a8 220 | GoogleDataTransport: b0115dbdf1943c998628dca30800ddd263aaa166 221 | GoogleDataTransportCCTSupport: 3451e7d8ba19093e533362a6d78d6d9014c6a037 222 | GoogleMaps: cfee83da305b9aaeccf92c24ac79df11c3003492 223 | GoogleUtilities: 64b5e3982b1b01bda26712affd5c523ef32563cf 224 | "gRPC-C++": 9dfe7b44821e7b3e44aacad2af29d2c21f7cde83 225 | gRPC-Core: c9aef9a261a1247e881b18059b84d597293c9947 226 | leveldb-library: 08cba283675b7ed2d99629a4bc5fd052cd2bb6a5 227 | location_permissions: 195ff2a1182fa9029ef3f2653156961ee5a1e40b 228 | nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 229 | Protobuf: 1097ca58584c8d9be81bfbf2c5ff5975648dd87a 230 | Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 231 | share: bae0a282aab4483288913fc4dc0b935d4b491f2e 232 | shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01 233 | url_launcher: a1c0cc845906122c4784c542523d8cacbded5626 234 | 235 | PODFILE CHECKSUM: 001830f897fe2dc2b8a50942681e0382c270fff0 236 | 237 | COCOAPODS: 1.8.4 238 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | 57967C0C0ED1AA2EACD64FFB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27A5DEF75EF0749F99E7945A /* Pods_Runner.framework */; }; 15 | 656E1AA9230196D30003D545 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 656E1AA8230196D30003D545 /* GoogleService-Info.plist */; }; 16 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 17 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 18 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 19 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 20 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 21 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 22 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXCopyFilesBuildPhase section */ 26 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 27 | isa = PBXCopyFilesBuildPhase; 28 | buildActionMask = 2147483647; 29 | dstPath = ""; 30 | dstSubfolderSpec = 10; 31 | files = ( 32 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, 33 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, 34 | ); 35 | name = "Embed Frameworks"; 36 | runOnlyForDeploymentPostprocessing = 0; 37 | }; 38 | /* End PBXCopyFilesBuildPhase section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 09DB52BCC8B6881EB9FDD280 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 42 | 0A2B68C22C74ADDF2F161BBE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 43 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 44 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 45 | 27A5DEF75EF0749F99E7945A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 47 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 48 | 656E1AA8230196D30003D545 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 49 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 50 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 51 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 52 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 53 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 54 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 55 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 57 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 58 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 59 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 60 | A810BB879FED628F8CEA584A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 61 | /* End PBXFileReference section */ 62 | 63 | /* Begin PBXFrameworksBuildPhase section */ 64 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 65 | isa = PBXFrameworksBuildPhase; 66 | buildActionMask = 2147483647; 67 | files = ( 68 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 69 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 70 | 57967C0C0ED1AA2EACD64FFB /* Pods_Runner.framework in Frameworks */, 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | /* End PBXFrameworksBuildPhase section */ 75 | 76 | /* Begin PBXGroup section */ 77 | 04D276B1E3F22AB365560AB7 /* Frameworks */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 27A5DEF75EF0749F99E7945A /* Pods_Runner.framework */, 81 | ); 82 | name = Frameworks; 83 | sourceTree = ""; 84 | }; 85 | 9740EEB11CF90186004384FC /* Flutter */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | 3B80C3931E831B6300D905FE /* App.framework */, 89 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 90 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 91 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 92 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 93 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 94 | ); 95 | name = Flutter; 96 | sourceTree = ""; 97 | }; 98 | 97C146E51CF9000F007C117D = { 99 | isa = PBXGroup; 100 | children = ( 101 | 9740EEB11CF90186004384FC /* Flutter */, 102 | 97C146F01CF9000F007C117D /* Runner */, 103 | 97C146EF1CF9000F007C117D /* Products */, 104 | F4524A957B0E6795C61E2D47 /* Pods */, 105 | 04D276B1E3F22AB365560AB7 /* Frameworks */, 106 | ); 107 | sourceTree = ""; 108 | }; 109 | 97C146EF1CF9000F007C117D /* Products */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 97C146EE1CF9000F007C117D /* Runner.app */, 113 | ); 114 | name = Products; 115 | sourceTree = ""; 116 | }; 117 | 97C146F01CF9000F007C117D /* Runner */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 121 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 122 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 123 | 97C147021CF9000F007C117D /* Info.plist */, 124 | 97C146F11CF9000F007C117D /* Supporting Files */, 125 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 126 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 127 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 128 | 656E1AA8230196D30003D545 /* GoogleService-Info.plist */, 129 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 130 | ); 131 | path = Runner; 132 | sourceTree = ""; 133 | }; 134 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | ); 138 | name = "Supporting Files"; 139 | sourceTree = ""; 140 | }; 141 | F4524A957B0E6795C61E2D47 /* Pods */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 09DB52BCC8B6881EB9FDD280 /* Pods-Runner.debug.xcconfig */, 145 | 0A2B68C22C74ADDF2F161BBE /* Pods-Runner.release.xcconfig */, 146 | A810BB879FED628F8CEA584A /* Pods-Runner.profile.xcconfig */, 147 | ); 148 | path = Pods; 149 | sourceTree = ""; 150 | }; 151 | /* End PBXGroup section */ 152 | 153 | /* Begin PBXNativeTarget section */ 154 | 97C146ED1CF9000F007C117D /* Runner */ = { 155 | isa = PBXNativeTarget; 156 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 157 | buildPhases = ( 158 | 4BD9832B9F9D30F2C7A102EC /* [CP] Check Pods Manifest.lock */, 159 | 9740EEB61CF901F6004384FC /* Run Script */, 160 | 97C146EA1CF9000F007C117D /* Sources */, 161 | 97C146EB1CF9000F007C117D /* Frameworks */, 162 | 97C146EC1CF9000F007C117D /* Resources */, 163 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 164 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 165 | 9C8221986A8A7ACD83BA8D8D /* [CP] Embed Pods Frameworks */, 166 | C4D66AB977E7C5D1B39F6986 /* [CP] Copy Pods Resources */, 167 | ); 168 | buildRules = ( 169 | ); 170 | dependencies = ( 171 | ); 172 | name = Runner; 173 | productName = Runner; 174 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 175 | productType = "com.apple.product-type.application"; 176 | }; 177 | /* End PBXNativeTarget section */ 178 | 179 | /* Begin PBXProject section */ 180 | 97C146E61CF9000F007C117D /* Project object */ = { 181 | isa = PBXProject; 182 | attributes = { 183 | LastUpgradeCheck = 1020; 184 | ORGANIZATIONNAME = "The Chromium Authors"; 185 | TargetAttributes = { 186 | 97C146ED1CF9000F007C117D = { 187 | CreatedOnToolsVersion = 7.3.1; 188 | DevelopmentTeam = NGBW354GV5; 189 | LastSwiftMigration = 0910; 190 | }; 191 | }; 192 | }; 193 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 194 | compatibilityVersion = "Xcode 3.2"; 195 | developmentRegion = en; 196 | hasScannedForEncodings = 0; 197 | knownRegions = ( 198 | en, 199 | Base, 200 | ); 201 | mainGroup = 97C146E51CF9000F007C117D; 202 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 203 | projectDirPath = ""; 204 | projectRoot = ""; 205 | targets = ( 206 | 97C146ED1CF9000F007C117D /* Runner */, 207 | ); 208 | }; 209 | /* End PBXProject section */ 210 | 211 | /* Begin PBXResourcesBuildPhase section */ 212 | 97C146EC1CF9000F007C117D /* Resources */ = { 213 | isa = PBXResourcesBuildPhase; 214 | buildActionMask = 2147483647; 215 | files = ( 216 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 217 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 218 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 219 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 220 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 221 | 656E1AA9230196D30003D545 /* GoogleService-Info.plist in Resources */, 222 | ); 223 | runOnlyForDeploymentPostprocessing = 0; 224 | }; 225 | /* End PBXResourcesBuildPhase section */ 226 | 227 | /* Begin PBXShellScriptBuildPhase section */ 228 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 229 | isa = PBXShellScriptBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | ); 233 | inputPaths = ( 234 | ); 235 | name = "Thin Binary"; 236 | outputPaths = ( 237 | ); 238 | runOnlyForDeploymentPostprocessing = 0; 239 | shellPath = /bin/sh; 240 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 241 | }; 242 | 4BD9832B9F9D30F2C7A102EC /* [CP] Check Pods Manifest.lock */ = { 243 | isa = PBXShellScriptBuildPhase; 244 | buildActionMask = 2147483647; 245 | files = ( 246 | ); 247 | inputFileListPaths = ( 248 | ); 249 | inputPaths = ( 250 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 251 | "${PODS_ROOT}/Manifest.lock", 252 | ); 253 | name = "[CP] Check Pods Manifest.lock"; 254 | outputFileListPaths = ( 255 | ); 256 | outputPaths = ( 257 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | shellPath = /bin/sh; 261 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 262 | showEnvVarsInLog = 0; 263 | }; 264 | 9740EEB61CF901F6004384FC /* Run Script */ = { 265 | isa = PBXShellScriptBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | ); 269 | inputPaths = ( 270 | ); 271 | name = "Run Script"; 272 | outputPaths = ( 273 | ); 274 | runOnlyForDeploymentPostprocessing = 0; 275 | shellPath = /bin/sh; 276 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 277 | }; 278 | 9C8221986A8A7ACD83BA8D8D /* [CP] Embed Pods Frameworks */ = { 279 | isa = PBXShellScriptBuildPhase; 280 | buildActionMask = 2147483647; 281 | files = ( 282 | ); 283 | inputPaths = ( 284 | ); 285 | name = "[CP] Embed Pods Frameworks"; 286 | outputPaths = ( 287 | ); 288 | runOnlyForDeploymentPostprocessing = 0; 289 | shellPath = /bin/sh; 290 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 291 | showEnvVarsInLog = 0; 292 | }; 293 | C4D66AB977E7C5D1B39F6986 /* [CP] Copy Pods Resources */ = { 294 | isa = PBXShellScriptBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | ); 298 | inputPaths = ( 299 | ); 300 | name = "[CP] Copy Pods Resources"; 301 | outputPaths = ( 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | shellPath = /bin/sh; 305 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; 306 | showEnvVarsInLog = 0; 307 | }; 308 | /* End PBXShellScriptBuildPhase section */ 309 | 310 | /* Begin PBXSourcesBuildPhase section */ 311 | 97C146EA1CF9000F007C117D /* Sources */ = { 312 | isa = PBXSourcesBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 316 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 317 | ); 318 | runOnlyForDeploymentPostprocessing = 0; 319 | }; 320 | /* End PBXSourcesBuildPhase section */ 321 | 322 | /* Begin PBXVariantGroup section */ 323 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 324 | isa = PBXVariantGroup; 325 | children = ( 326 | 97C146FB1CF9000F007C117D /* Base */, 327 | ); 328 | name = Main.storyboard; 329 | sourceTree = ""; 330 | }; 331 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 332 | isa = PBXVariantGroup; 333 | children = ( 334 | 97C147001CF9000F007C117D /* Base */, 335 | ); 336 | name = LaunchScreen.storyboard; 337 | sourceTree = ""; 338 | }; 339 | /* End PBXVariantGroup section */ 340 | 341 | /* Begin XCBuildConfiguration section */ 342 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 343 | isa = XCBuildConfiguration; 344 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 345 | buildSettings = { 346 | ALWAYS_SEARCH_USER_PATHS = NO; 347 | CLANG_ANALYZER_NONNULL = YES; 348 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 349 | CLANG_CXX_LIBRARY = "libc++"; 350 | CLANG_ENABLE_MODULES = YES; 351 | CLANG_ENABLE_OBJC_ARC = YES; 352 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 353 | CLANG_WARN_BOOL_CONVERSION = YES; 354 | CLANG_WARN_COMMA = YES; 355 | CLANG_WARN_CONSTANT_CONVERSION = YES; 356 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 357 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 358 | CLANG_WARN_EMPTY_BODY = YES; 359 | CLANG_WARN_ENUM_CONVERSION = YES; 360 | CLANG_WARN_INFINITE_RECURSION = YES; 361 | CLANG_WARN_INT_CONVERSION = YES; 362 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 363 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 364 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 365 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 366 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 367 | CLANG_WARN_STRICT_PROTOTYPES = YES; 368 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 369 | CLANG_WARN_UNREACHABLE_CODE = YES; 370 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 371 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 372 | COPY_PHASE_STRIP = NO; 373 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 374 | ENABLE_NS_ASSERTIONS = NO; 375 | ENABLE_STRICT_OBJC_MSGSEND = YES; 376 | GCC_C_LANGUAGE_STANDARD = gnu99; 377 | GCC_NO_COMMON_BLOCKS = YES; 378 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 379 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 380 | GCC_WARN_UNDECLARED_SELECTOR = YES; 381 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 382 | GCC_WARN_UNUSED_FUNCTION = YES; 383 | GCC_WARN_UNUSED_VARIABLE = YES; 384 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 385 | MTL_ENABLE_DEBUG_INFO = NO; 386 | SDKROOT = iphoneos; 387 | TARGETED_DEVICE_FAMILY = "1,2"; 388 | VALIDATE_PRODUCT = YES; 389 | }; 390 | name = Profile; 391 | }; 392 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 393 | isa = XCBuildConfiguration; 394 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 395 | buildSettings = { 396 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 397 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 398 | DEVELOPMENT_TEAM = NGBW354GV5; 399 | ENABLE_BITCODE = NO; 400 | FRAMEWORK_SEARCH_PATHS = ( 401 | "$(inherited)", 402 | "$(PROJECT_DIR)/Flutter", 403 | ); 404 | INFOPLIST_FILE = Runner/Info.plist; 405 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 406 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 407 | LIBRARY_SEARCH_PATHS = ( 408 | "$(inherited)", 409 | "$(PROJECT_DIR)/Flutter", 410 | ); 411 | PRODUCT_BUNDLE_IDENTIFIER = dev.fliver.driver; 412 | PRODUCT_NAME = "$(TARGET_NAME)"; 413 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 414 | SWIFT_VERSION = 4.0; 415 | TARGETED_DEVICE_FAMILY = 1; 416 | VERSIONING_SYSTEM = "apple-generic"; 417 | }; 418 | name = Profile; 419 | }; 420 | 97C147031CF9000F007C117D /* Debug */ = { 421 | isa = XCBuildConfiguration; 422 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 423 | buildSettings = { 424 | ALWAYS_SEARCH_USER_PATHS = NO; 425 | CLANG_ANALYZER_NONNULL = YES; 426 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 427 | CLANG_CXX_LIBRARY = "libc++"; 428 | CLANG_ENABLE_MODULES = YES; 429 | CLANG_ENABLE_OBJC_ARC = YES; 430 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 431 | CLANG_WARN_BOOL_CONVERSION = YES; 432 | CLANG_WARN_COMMA = YES; 433 | CLANG_WARN_CONSTANT_CONVERSION = YES; 434 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 435 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 436 | CLANG_WARN_EMPTY_BODY = YES; 437 | CLANG_WARN_ENUM_CONVERSION = YES; 438 | CLANG_WARN_INFINITE_RECURSION = YES; 439 | CLANG_WARN_INT_CONVERSION = YES; 440 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 441 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 442 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 443 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 444 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 445 | CLANG_WARN_STRICT_PROTOTYPES = YES; 446 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 447 | CLANG_WARN_UNREACHABLE_CODE = YES; 448 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 449 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 450 | COPY_PHASE_STRIP = NO; 451 | DEBUG_INFORMATION_FORMAT = dwarf; 452 | ENABLE_STRICT_OBJC_MSGSEND = YES; 453 | ENABLE_TESTABILITY = YES; 454 | GCC_C_LANGUAGE_STANDARD = gnu99; 455 | GCC_DYNAMIC_NO_PIC = NO; 456 | GCC_NO_COMMON_BLOCKS = YES; 457 | GCC_OPTIMIZATION_LEVEL = 0; 458 | GCC_PREPROCESSOR_DEFINITIONS = ( 459 | "DEBUG=1", 460 | "$(inherited)", 461 | ); 462 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 463 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 464 | GCC_WARN_UNDECLARED_SELECTOR = YES; 465 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 466 | GCC_WARN_UNUSED_FUNCTION = YES; 467 | GCC_WARN_UNUSED_VARIABLE = YES; 468 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 469 | MTL_ENABLE_DEBUG_INFO = YES; 470 | ONLY_ACTIVE_ARCH = YES; 471 | SDKROOT = iphoneos; 472 | TARGETED_DEVICE_FAMILY = "1,2"; 473 | }; 474 | name = Debug; 475 | }; 476 | 97C147041CF9000F007C117D /* Release */ = { 477 | isa = XCBuildConfiguration; 478 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 479 | buildSettings = { 480 | ALWAYS_SEARCH_USER_PATHS = NO; 481 | CLANG_ANALYZER_NONNULL = YES; 482 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 483 | CLANG_CXX_LIBRARY = "libc++"; 484 | CLANG_ENABLE_MODULES = YES; 485 | CLANG_ENABLE_OBJC_ARC = YES; 486 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 487 | CLANG_WARN_BOOL_CONVERSION = YES; 488 | CLANG_WARN_COMMA = YES; 489 | CLANG_WARN_CONSTANT_CONVERSION = YES; 490 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 491 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 492 | CLANG_WARN_EMPTY_BODY = YES; 493 | CLANG_WARN_ENUM_CONVERSION = YES; 494 | CLANG_WARN_INFINITE_RECURSION = YES; 495 | CLANG_WARN_INT_CONVERSION = YES; 496 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 497 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 498 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 499 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 500 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 501 | CLANG_WARN_STRICT_PROTOTYPES = YES; 502 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 503 | CLANG_WARN_UNREACHABLE_CODE = YES; 504 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 505 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 506 | COPY_PHASE_STRIP = NO; 507 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 508 | ENABLE_NS_ASSERTIONS = NO; 509 | ENABLE_STRICT_OBJC_MSGSEND = YES; 510 | GCC_C_LANGUAGE_STANDARD = gnu99; 511 | GCC_NO_COMMON_BLOCKS = YES; 512 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 513 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 514 | GCC_WARN_UNDECLARED_SELECTOR = YES; 515 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 516 | GCC_WARN_UNUSED_FUNCTION = YES; 517 | GCC_WARN_UNUSED_VARIABLE = YES; 518 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 519 | MTL_ENABLE_DEBUG_INFO = NO; 520 | SDKROOT = iphoneos; 521 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 522 | TARGETED_DEVICE_FAMILY = "1,2"; 523 | VALIDATE_PRODUCT = YES; 524 | }; 525 | name = Release; 526 | }; 527 | 97C147061CF9000F007C117D /* Debug */ = { 528 | isa = XCBuildConfiguration; 529 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 530 | buildSettings = { 531 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 532 | CLANG_ENABLE_MODULES = YES; 533 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 534 | DEVELOPMENT_TEAM = NGBW354GV5; 535 | ENABLE_BITCODE = NO; 536 | FRAMEWORK_SEARCH_PATHS = ( 537 | "$(inherited)", 538 | "$(PROJECT_DIR)/Flutter", 539 | ); 540 | INFOPLIST_FILE = Runner/Info.plist; 541 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 542 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 543 | LIBRARY_SEARCH_PATHS = ( 544 | "$(inherited)", 545 | "$(PROJECT_DIR)/Flutter", 546 | ); 547 | PRODUCT_BUNDLE_IDENTIFIER = dev.fliver.driver; 548 | PRODUCT_NAME = "$(TARGET_NAME)"; 549 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 550 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 551 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 552 | SWIFT_VERSION = 4.0; 553 | TARGETED_DEVICE_FAMILY = 1; 554 | VERSIONING_SYSTEM = "apple-generic"; 555 | }; 556 | name = Debug; 557 | }; 558 | 97C147071CF9000F007C117D /* Release */ = { 559 | isa = XCBuildConfiguration; 560 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 561 | buildSettings = { 562 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 563 | CLANG_ENABLE_MODULES = YES; 564 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 565 | DEVELOPMENT_TEAM = NGBW354GV5; 566 | ENABLE_BITCODE = NO; 567 | FRAMEWORK_SEARCH_PATHS = ( 568 | "$(inherited)", 569 | "$(PROJECT_DIR)/Flutter", 570 | ); 571 | INFOPLIST_FILE = Runner/Info.plist; 572 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 573 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 574 | LIBRARY_SEARCH_PATHS = ( 575 | "$(inherited)", 576 | "$(PROJECT_DIR)/Flutter", 577 | ); 578 | PRODUCT_BUNDLE_IDENTIFIER = dev.fliver.driver; 579 | PRODUCT_NAME = "$(TARGET_NAME)"; 580 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 581 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 582 | SWIFT_VERSION = 4.0; 583 | TARGETED_DEVICE_FAMILY = 1; 584 | VERSIONING_SYSTEM = "apple-generic"; 585 | }; 586 | name = Release; 587 | }; 588 | /* End XCBuildConfiguration section */ 589 | 590 | /* Begin XCConfigurationList section */ 591 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 592 | isa = XCConfigurationList; 593 | buildConfigurations = ( 594 | 97C147031CF9000F007C117D /* Debug */, 595 | 97C147041CF9000F007C117D /* Release */, 596 | 249021D3217E4FDB00AE95B9 /* Profile */, 597 | ); 598 | defaultConfigurationIsVisible = 0; 599 | defaultConfigurationName = Release; 600 | }; 601 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 602 | isa = XCConfigurationList; 603 | buildConfigurations = ( 604 | 97C147061CF9000F007C117D /* Debug */, 605 | 97C147071CF9000F007C117D /* Release */, 606 | 249021D4217E4FDB00AE95B9 /* Profile */, 607 | ); 608 | defaultConfigurationIsVisible = 0; 609 | defaultConfigurationName = Release; 610 | }; 611 | /* End XCConfigurationList section */ 612 | }; 613 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 614 | } 615 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/.gitattributes: -------------------------------------------------------------------------------- 1 | AppDelegate.swift filter=git-crypt diff=git-crypt 2 | GoogleService-Info.plist filter=git-crypt diff=git-crypt 3 | .gitattributes !filter !diff -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/AppDelegate.swift -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/GoogleService-Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fliverdev/driver/d296448d959a64d2286433b1d7c90060e83657e6/ios/Runner/GoogleService-Info.plist -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | io.flutter.embedded_views_preview 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleDisplayName 10 | Fliver Driver 11 | CFBundleExecutable 12 | $(EXECUTABLE_NAME) 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | driver 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | $(FLUTTER_BUILD_NAME) 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | $(FLUTTER_BUILD_NUMBER) 27 | LSRequiresIPhoneOS 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIMainStoryboardFile 32 | Main 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UIViewControllerBasedStatusBarAppearance 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/colors.dart'; 2 | import 'package:driver/utils/first_page.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_local_notifications/flutter_local_notifications.dart'; 5 | 6 | void main() { 7 | WidgetsFlutterBinding.ensureInitialized(); 8 | FlutterLocalNotificationsPlugin().cancelAll(); 9 | runApp(MyApp()); 10 | } 11 | 12 | class MyApp extends StatelessWidget { 13 | @override 14 | Widget build(BuildContext context) { 15 | DateTime currentDateTime = DateTime.now(); 16 | DateTime startTime = DateTime(currentDateTime.year, currentDateTime.month, 17 | currentDateTime.day, 6, 0); // 6AM 18 | DateTime endTime = DateTime(currentDateTime.year, currentDateTime.month, 19 | currentDateTime.day, 18, 0); // 6PM 20 | Brightness brightness; 21 | 22 | if (currentDateTime.isAfter(startTime) && 23 | currentDateTime.isBefore(endTime)) { 24 | // 6AM to 6PM 25 | // light mode 26 | print('It is day!'); 27 | brightness = Brightness.light; 28 | } else { 29 | // dark mode 30 | print('It is night!'); 31 | brightness = Brightness.dark; 32 | } 33 | 34 | return MaterialApp( 35 | title: 'Fliver Driver', 36 | theme: ThemeData( 37 | fontFamily: 'AvenirNextRounded', 38 | primaryColor: MyColors.primary, 39 | accentColor: MyColors.accent, 40 | brightness: brightness, 41 | ), 42 | home: FirstPage(), 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/pages/chat_page.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:cloud_firestore/cloud_firestore.dart'; 4 | import 'package:driver/services/censor.dart'; 5 | import 'package:driver/services/firebase_analytics.dart'; 6 | import 'package:driver/utils/text_styles.dart'; 7 | import 'package:driver/utils/translations.dart'; 8 | import 'package:driver/utils/ui_helpers.dart'; 9 | import 'package:driver/widgets/message.dart'; 10 | import 'package:driver/widgets/message_placeholder.dart'; 11 | import 'package:flutter/material.dart'; 12 | import 'package:geoflutterfire/geoflutterfire.dart'; 13 | import 'package:geolocator/geolocator.dart'; 14 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 15 | import 'package:shared_preferences/shared_preferences.dart'; 16 | 17 | class MyChatPage extends StatefulWidget { 18 | final SharedPreferences helper; 19 | final Position location; 20 | final String language; 21 | 22 | MyChatPage({ 23 | Key key, 24 | @required this.helper, 25 | @required this.location, 26 | @required this.language, 27 | }) : super(key: key); 28 | 29 | @override 30 | _MyChatPageState createState() => _MyChatPageState(); 31 | } 32 | 33 | class _MyChatPageState extends State { 34 | bool noHotspotMessages = true; 35 | bool isScrollDownVisible = true; 36 | TextEditingController _messageController = TextEditingController(); 37 | ScrollController _scrollController = ScrollController(); 38 | final messageExpireInterval = 39 | Duration(hours: 1); // timeout to delete old messages 40 | 41 | void _scrollDown() { 42 | _scrollController.animateTo( 43 | _scrollController.position.maxScrollExtent, 44 | curve: Curves.easeOut, 45 | duration: Duration(milliseconds: 300), 46 | ); 47 | } 48 | 49 | Message _messageChecker( 50 | DocumentSnapshot doc, List docs, String identity) { 51 | final messageTimestamp = doc.data['timestamp'].toDate(); 52 | final timeDiff = DateTime.now().difference(messageTimestamp); 53 | final messageLocation = LatLng(doc.data['location']['geopoint'].latitude, 54 | doc.data['location']['geopoint'].longitude); 55 | 56 | if (timeDiff > messageExpireInterval) { 57 | // if expired, delete the message 58 | final documentId = doc.documentID; 59 | Firestore.instance 60 | .collection('global_chat') 61 | .document(documentId) 62 | .delete(); 63 | if (docs.length <= 1) { 64 | return Message( 65 | isMe: identity == doc.data['senderId'], 66 | isNear: false, 67 | senderId: null, 68 | senderName: null, 69 | messageText: null, 70 | destination: null, 71 | location: messageLocation, 72 | timestamp: messageTimestamp, 73 | ); 74 | } 75 | } else { 76 | return Message( 77 | isMe: identity == doc.data['senderId'], 78 | isNear: true, 79 | senderId: doc.data['senderId'], 80 | senderName: doc.data['senderName'], 81 | messageText: doc.data['messageText'], 82 | destination: doc.data['destination'], 83 | location: messageLocation, 84 | timestamp: messageTimestamp, 85 | ); 86 | } 87 | } 88 | 89 | Future _sendMessage(TextEditingController messageController) async { 90 | String name = widget.helper.getString('userName'); 91 | String identity = widget.helper.getString('uuid'); 92 | String messageText = messageController.text; 93 | 94 | messageController.clear(); 95 | 96 | if (name == null) { 97 | int random = Random().nextInt(1000); // 0 to 999 98 | name = 'Driver ' + random.toString() + '🛺'; 99 | widget.helper.setString('userName', name); 100 | } 101 | 102 | if (messageText.length > 0) { 103 | GeoFirePoint geoPoint = Geoflutterfire().point( 104 | latitude: widget.location.latitude, 105 | longitude: widget.location.longitude); 106 | messageText = censor(messageText); 107 | 108 | await Firestore.instance.collection('global_chat').add({ 109 | 'senderId': identity, 110 | 'senderName': name, 111 | 'messageText': messageText, 112 | 'destination': null, 113 | 'location': geoPoint.data, 114 | 'timestamp': DateTime.now(), 115 | }); 116 | _scrollDown(); 117 | logAnalyticsEvent('message_sent_driver'); 118 | } 119 | } 120 | 121 | @override 122 | Widget build(BuildContext context) { 123 | String identity = widget.helper.getString('uuid'); 124 | 125 | return Scaffold( 126 | backgroundColor: invertInvertColorsStrong(context), 127 | body: Container( 128 | child: Column( 129 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 130 | crossAxisAlignment: CrossAxisAlignment.center, 131 | children: [ 132 | Padding( 133 | padding: EdgeInsets.only( 134 | top: 40.0, 135 | left: 15.0, 136 | ), 137 | child: Row( 138 | mainAxisAlignment: MainAxisAlignment.start, 139 | children: [ 140 | IconButton( 141 | icon: Icon(Icons.arrow_back_ios), 142 | tooltip: 'Go back', 143 | iconSize: 20.0, 144 | color: invertColorsStrong(context), 145 | onPressed: () { 146 | Navigator.pop(context); 147 | }, 148 | ), 149 | Text( 150 | chat(widget.language), 151 | style: isThemeCurrentlyDark(context) 152 | ? TitleStyles.white 153 | : TitleStyles.black, 154 | ), 155 | ], 156 | ), 157 | ), 158 | Expanded( 159 | child: Padding( 160 | padding: EdgeInsets.only( 161 | left: 15.0, 162 | right: 15.0, 163 | ), 164 | child: StreamBuilder( 165 | stream: Firestore.instance 166 | .collection('global_chat') 167 | .orderBy('timestamp') 168 | .snapshots(), 169 | builder: (context, snapshot) { 170 | if (!snapshot.hasData) 171 | return messagePlaceholder( 172 | context, loadingMessages(widget.language)); 173 | 174 | List docs = snapshot.data.documents; 175 | 176 | if (docs.isEmpty) 177 | return messagePlaceholder( 178 | context, messagePlaceholderText(widget.language)); 179 | 180 | List messages = docs 181 | .map((doc) => _messageChecker(doc, docs, identity)) 182 | .toList(); 183 | 184 | return Stack( 185 | children: [ 186 | ListView( 187 | controller: _scrollController, 188 | children: [ 189 | ...messages, 190 | ], 191 | ), 192 | Positioned( 193 | bottom: 10.0, 194 | right: 7.5, 195 | child: Visibility( 196 | visible: isScrollDownVisible, 197 | child: FloatingActionButton( 198 | mini: true, 199 | child: Icon(Icons.keyboard_arrow_down), 200 | foregroundColor: invertInvertColorsTheme(context), 201 | backgroundColor: invertColorsTheme(context), 202 | onPressed: () { 203 | _scrollDown(); 204 | setState(() { 205 | isScrollDownVisible = false; 206 | }); 207 | }, 208 | ), 209 | ), 210 | ), 211 | ], 212 | ); 213 | }, 214 | ), 215 | ), 216 | ), 217 | SizedBox( 218 | height: 10.0, 219 | ), 220 | Container( 221 | child: Row( 222 | mainAxisAlignment: MainAxisAlignment.center, 223 | crossAxisAlignment: CrossAxisAlignment.center, 224 | children: [ 225 | SizedBox( 226 | width: 15.0, 227 | ), 228 | Expanded( 229 | child: TextField( 230 | controller: _messageController, 231 | textCapitalization: TextCapitalization.sentences, 232 | decoration: InputDecoration( 233 | hintText: sendMessageText(widget.language), 234 | border: UnderlineInputBorder( 235 | borderSide: BorderSide( 236 | color: invertColorsStrong(context), 237 | ), 238 | ), 239 | focusedBorder: UnderlineInputBorder( 240 | borderSide: BorderSide( 241 | color: invertColorsTheme(context), 242 | ), 243 | ), 244 | ), 245 | ), 246 | ), 247 | SizedBox( 248 | width: 15.0, 249 | ), 250 | FloatingActionButton( 251 | heroTag: 'chat', 252 | foregroundColor: invertInvertColorsTheme(context), 253 | backgroundColor: invertColorsTheme(context), 254 | child: Icon(Icons.send), 255 | elevation: 5.0, 256 | tooltip: 'Send', 257 | onPressed: () { 258 | _sendMessage(_messageController); 259 | setState(() { 260 | isScrollDownVisible = false; 261 | }); 262 | }, 263 | ), 264 | SizedBox( 265 | width: 15.0, 266 | ), 267 | ], 268 | ), 269 | ), 270 | SizedBox( 271 | height: 10.0, 272 | ), 273 | ], 274 | ), 275 | ), 276 | ); 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /lib/pages/map_view_page.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:cloud_firestore/cloud_firestore.dart'; 4 | import 'package:driver/services/firebase_analytics.dart'; 5 | import 'package:driver/utils/map_helper.dart'; 6 | import 'package:driver/utils/map_marker.dart'; 7 | import 'package:driver/utils/map_styles.dart'; 8 | import 'package:driver/utils/text_styles.dart'; 9 | import 'package:driver/utils/translations.dart'; 10 | import 'package:driver/utils/ui_helpers.dart'; 11 | import 'package:driver/widgets/fetching_location.dart'; 12 | import 'package:driver/widgets/no_connection.dart'; 13 | import 'package:fluster/fluster.dart'; 14 | import 'package:flutter/cupertino.dart'; 15 | import 'package:flutter/material.dart'; 16 | import 'package:flutter_offline/flutter_offline.dart'; 17 | import 'package:geolocator/geolocator.dart'; 18 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 19 | import 'package:share/share.dart'; 20 | import 'package:shared_preferences/shared_preferences.dart'; 21 | 22 | import 'chat_page.dart'; 23 | 24 | class MyMapViewPage extends StatefulWidget { 25 | final SharedPreferences helper; 26 | final String identity; 27 | final String language; 28 | 29 | MyMapViewPage( 30 | {Key key, 31 | @required this.helper, 32 | @required this.identity, 33 | @required this.language}) 34 | : super(key: key); 35 | 36 | @override 37 | _MyMapViewPageState createState() => _MyMapViewPageState(); 38 | } 39 | 40 | class _MyMapViewPageState extends State { 41 | /// Minimum zoom at which the markers will cluster 42 | final int _minClusterZoom = 0; 43 | 44 | /// Maximum zoom at which the markers will cluster 45 | final int _maxClusterZoom = 19; 46 | 47 | /// [Fluster] instance used to manage the clusters 48 | Fluster _clusterManager; 49 | 50 | /// Url image used on cluster markers 51 | final String _clusterImageUrl = 'https://i.ibb.co/XYJyqWs/arrow-256x256.png'; 52 | 53 | var currentLocation; 54 | var locationAnimation = 0; // used to switch between 2 kinds of animations 55 | 56 | final markerColor = 165.0; // fliver green marker 57 | final zoom = [15.0, 17.5]; // zoom levels (0/1) 58 | final bearing = [0.0, 90.0]; // bearing level (0/1) 59 | final tilt = [0.0, 45.0]; // axis tilt (0/1) 60 | 61 | double _currentZoom = 15; 62 | 63 | final displayMarkersRadius = 10000.0; // radius up to which markers are loaded 64 | 65 | final markerRefreshInterval = 66 | Duration(seconds: 5); // timeout to repopulate markers 67 | final markerExpireInterval = 68 | Duration(minutes: 15); // timeout to delete old markers 69 | 70 | bool isMarkerDeleted = false; // to check if marker was deleted 71 | 72 | GoogleMapController mapController; 73 | 74 | Future position; 75 | static Map markers = {}; 76 | final Set _markers = Set.of(markers.values); 77 | 78 | Set hotspots = {}; 79 | GlobalKey scaffoldKey = 80 | GlobalKey(); // for snackbar 81 | 82 | @override 83 | void initState() { 84 | print('initState() called'); 85 | super.initState(); 86 | position = _setCurrentLocation(); 87 | print('UUID is ${widget.identity}'); 88 | } // gets current user location when the app launches 89 | 90 | void initCluster(List markersListInit) async { 91 | _clusterManager = await MapHelper.initClusterManager( 92 | markersListInit, 93 | _minClusterZoom, 94 | _maxClusterZoom, 95 | _clusterImageUrl, 96 | ); 97 | 98 | _updateMarkers(); 99 | } 100 | 101 | /// Gets the markers and clusters to be displayed on the map for the current zoom level and 102 | /// updates state. 103 | void _updateMarkers([double updatedZoom]) { 104 | if (_clusterManager == null || updatedZoom == _currentZoom) return; 105 | 106 | if (updatedZoom != null) { 107 | _currentZoom = updatedZoom; 108 | } 109 | 110 | _markers 111 | ..clear() 112 | ..addAll(MapHelper.getClusterMarkers(_clusterManager, _currentZoom)); 113 | } 114 | 115 | void _onMapCreated(GoogleMapController controller) { 116 | print('_onMapCreated() called'); 117 | 118 | mapController = controller; 119 | mapController 120 | .setMapStyle(isThemeCurrentlyDark(context) ? darkMap : lightMap); 121 | 122 | _fetchMarkersFromDb(); 123 | 124 | Timer.periodic(markerRefreshInterval, (Timer t) { 125 | print('$markerRefreshInterval seconds over, refreshing...'); 126 | _fetchMarkersFromDb(); // updates markers every 10 seconds 127 | }); 128 | } 129 | 130 | Future _setCurrentLocation() async { 131 | print('_setCurrentLocation() called'); 132 | currentLocation = await Geolocator().getCurrentPosition(); 133 | return currentLocation; 134 | } 135 | 136 | void _fetchMarkersFromDb() { 137 | print('_fetchMarkersFromDb() called'); 138 | Firestore.instance.collection('markers').getDocuments().then((docs) async { 139 | final docLength = docs.documents.length; 140 | final clients = List(docLength); 141 | for (int i = 0; i < docLength; i++) { 142 | clients[i] = docs.documents[i]; 143 | } 144 | currentLocation = await Geolocator().getCurrentPosition(); 145 | _populateMarkers(clients); 146 | }); 147 | } // fetches markers from firestore 148 | 149 | void _deleteMarker(documentId) { 150 | print('_deleteMarker() called'); 151 | print('Deleting marker $documentId...'); 152 | //isMyMarkerFetched = false; 153 | Firestore.instance.collection('markers').document(documentId).delete(); 154 | setState(() { 155 | markers.remove(MarkerId(documentId)); 156 | }); 157 | } // deletes markers from firestore 158 | 159 | Future _populateMarkers(clients) async { 160 | List markersList = []; 161 | 162 | print('_populateMarkers() called'); 163 | markers.clear(); 164 | 165 | for (int i = 0; i < clients.length; i++) { 166 | print('_populateMarkers() loop ${i + 1}/${clients.length}'); 167 | final documentId = clients[i].documentID; 168 | final markerId = MarkerId(documentId); 169 | final markerData = clients[i].data; 170 | 171 | final markerPosition = LatLng(markerData['position']['geopoint'].latitude, 172 | markerData['position']['geopoint'].longitude); 173 | final markerDestination = markerData['destination']; 174 | final markerTimestamp = markerData['timestamp'].toDate(); 175 | 176 | final timeDiff = DateTime.now().difference(markerTimestamp); 177 | 178 | markersList.add( 179 | Markers( 180 | id: MarkerId(documentId).toString(), 181 | position: LatLng(markerData['position']['geopoint'].latitude, 182 | markerData['position']['geopoint'].longitude), 183 | icon: BitmapDescriptor.defaultMarkerWithHue(markerColor), 184 | infoWindow: InfoWindow( 185 | title: markerDestination == null 186 | ? markerTextLooking(widget.language) 187 | : markerTextDestination(widget.language, markerDestination), 188 | ), 189 | ), 190 | ); 191 | 192 | final distance = await Geolocator().distanceBetween( 193 | currentLocation.latitude.toDouble(), 194 | currentLocation.longitude.toDouble(), 195 | markerPosition.latitude.toDouble(), 196 | markerPosition.longitude.toDouble(), 197 | ); // distance between my location and other markers 198 | 199 | if (timeDiff > markerExpireInterval) { 200 | // if the marker is expired, it gets deleted and doesn't continue 201 | print('Marker $markerId expired, deleting...'); 202 | _deleteMarker(documentId); 203 | isMarkerDeleted = true; 204 | } 205 | 206 | final marker = Marker( 207 | markerId: markerId, 208 | position: markerPosition, 209 | icon: BitmapDescriptor.defaultMarkerWithHue(markerColor), 210 | ); 211 | 212 | initCluster(markersList); 213 | 214 | setState(() { 215 | if (displayMarkersRadius >= distance) { 216 | markers[markerId] = marker; 217 | } // adds markers within 10km of my marker 218 | }); 219 | } 220 | } 221 | 222 | void _animateToLocation(location, animation) { 223 | print('_animateToLocation called'); 224 | mapController.animateCamera( 225 | CameraUpdate.newCameraPosition( 226 | CameraPosition( 227 | target: LatLng(location.latitude, location.longitude), 228 | zoom: zoom[animation], 229 | bearing: bearing[animation], 230 | tilt: tilt[animation], 231 | ), 232 | ), 233 | ); 234 | } // dat cool animation tho 235 | 236 | @override 237 | Widget build(BuildContext context) { 238 | print('Widget build() called'); 239 | 240 | return OfflineBuilder(connectivityBuilder: ( 241 | BuildContext context, 242 | ConnectivityResult connectivity, 243 | Widget child, 244 | ) { 245 | if (connectivity == ConnectivityResult.none) { 246 | return NoConnection(language: widget.language); 247 | } else { 248 | return child; 249 | } 250 | }, builder: (BuildContext context) { 251 | // when there is proper internet 252 | return FutureBuilder( 253 | future: position, 254 | builder: (context, data) { 255 | if (!data.hasData) { 256 | return FetchingLocation(language: widget.language); 257 | } else { 258 | // when current location is obtained 259 | return Scaffold( 260 | key: scaffoldKey, 261 | body: Container( 262 | child: Stack( 263 | children: [ 264 | GoogleMap( 265 | onMapCreated: _onMapCreated, 266 | myLocationEnabled: true, 267 | myLocationButtonEnabled: false, 268 | compassEnabled: false, 269 | mapToolbarEnabled: true, 270 | initialCameraPosition: CameraPosition( 271 | target: LatLng(currentLocation.latitude, 272 | currentLocation.longitude), 273 | zoom: _currentZoom, 274 | bearing: bearing[0], 275 | tilt: tilt[0], 276 | ), 277 | markers: _markers, 278 | onCameraMove: (position) => 279 | _updateMarkers(position.zoom), 280 | ), 281 | Positioned( 282 | top: 45.0, 283 | left: 20.0, 284 | right: 20.0, 285 | child: Row( 286 | mainAxisAlignment: MainAxisAlignment.start, 287 | children: [ 288 | Container( 289 | width: 95.0, 290 | height: 30.0, 291 | child: isThemeCurrentlyDark(context) 292 | ? Image.asset( 293 | 'assets/logo/text-green.png', 294 | fit: BoxFit.cover, 295 | ) 296 | : Image.asset( 297 | 'assets/logo/text-black.png', 298 | fit: BoxFit.cover, 299 | ), 300 | ), 301 | SizedBox( 302 | width: 130.0, 303 | ), 304 | RaisedButton( 305 | child: Text( 306 | shareButton(widget.language), 307 | style: isThemeCurrentlyDark(context) 308 | ? BodyStyles.black 309 | : BodyStyles.white, 310 | ), 311 | color: invertColorsTheme(context), 312 | elevation: 3.0, 313 | shape: RoundedRectangleBorder( 314 | borderRadius: 315 | BorderRadius.all(Radius.circular(5.0))), 316 | onPressed: () { 317 | Share.share( 318 | 'Fliver app download karo aur free mein mere saath bhada dhundho! https://play.google.com/store/apps/details?id=dev.fliver.driver'); 319 | logAnalyticsEvent('driver_share'); 320 | }, 321 | ), 322 | ], 323 | ), 324 | ), 325 | ], 326 | ), 327 | ), 328 | floatingActionButtonLocation: 329 | FloatingActionButtonLocation.centerFloat, 330 | floatingActionButton: Row( 331 | mainAxisAlignment: MainAxisAlignment.center, 332 | crossAxisAlignment: CrossAxisAlignment.center, 333 | children: [ 334 | FloatingActionButton( 335 | heroTag: 'chat', 336 | child: Icon(Icons.message), 337 | foregroundColor: invertInvertColorsTheme(context), 338 | backgroundColor: invertColorsTheme(context), 339 | tooltip: chat(widget.language), 340 | onPressed: () { 341 | Navigator.push(context, 342 | CupertinoPageRoute(builder: (context) { 343 | return MyChatPage( 344 | helper: widget.helper, 345 | location: currentLocation, 346 | language: widget.language, 347 | ); 348 | })); 349 | }, 350 | ), 351 | SizedBox( 352 | width: 10.0, 353 | ), 354 | FloatingActionButton( 355 | child: Icon(Icons.my_location), 356 | foregroundColor: invertInvertColorsTheme(context), 357 | backgroundColor: invertColorsTheme(context), 358 | tooltip: recenter(widget.language), 359 | onPressed: () async { 360 | currentLocation = 361 | await Geolocator().getCurrentPosition(); 362 | locationAnimation = 0; 363 | _animateToLocation(currentLocation, locationAnimation); 364 | }, 365 | ) 366 | ], 367 | ), 368 | ); 369 | } 370 | }); 371 | }); 372 | } 373 | } 374 | -------------------------------------------------------------------------------- /lib/pages/onboarding_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/pages/map_view_page.dart'; 2 | import 'package:driver/services/firebase_analytics.dart'; 3 | import 'package:driver/utils/colors.dart'; 4 | import 'package:driver/utils/text_styles.dart'; 5 | import 'package:driver/utils/translations.dart'; 6 | import 'package:flutter/cupertino.dart'; 7 | import 'package:flutter/material.dart'; 8 | import 'package:shared_preferences/shared_preferences.dart'; 9 | 10 | class MyOnboardingPage1 extends StatelessWidget { 11 | final SharedPreferences helper; 12 | final bool flag; 13 | final String identity; 14 | MyOnboardingPage1( 15 | {Key key, 16 | @required this.helper, 17 | @required this.flag, 18 | @required this.identity}) 19 | : super(key: key); 20 | 21 | @override 22 | Widget build(BuildContext context) { 23 | return Material( 24 | child: Container( 25 | color: MyColors.primary, 26 | child: Row( 27 | mainAxisAlignment: MainAxisAlignment.center, 28 | crossAxisAlignment: CrossAxisAlignment.center, 29 | children: [ 30 | Column( 31 | mainAxisAlignment: MainAxisAlignment.center, 32 | crossAxisAlignment: CrossAxisAlignment.center, 33 | children: [ 34 | Container( 35 | width: 170.0, 36 | height: 54.0, 37 | child: Image.asset( 38 | 'assets/logo/text-black.png', 39 | fit: BoxFit.cover, 40 | ), 41 | ), 42 | SizedBox( 43 | height: 50.0, 44 | ), 45 | Container( 46 | width: 150.0, 47 | height: 150.0, 48 | child: Image.asset( 49 | 'assets/other/rickshaw.png', 50 | fit: BoxFit.cover, 51 | ), 52 | ), 53 | SizedBox( 54 | height: 50.0, 55 | ), 56 | Text( 57 | 'Choose a language:', 58 | style: TitleStyles.black, 59 | textAlign: TextAlign.center, 60 | ), 61 | SizedBox( 62 | height: 10.0, 63 | ), 64 | Row( 65 | children: [ 66 | RaisedButton( 67 | child: Text('English'), 68 | color: MyColors.black, 69 | textColor: MyColors.white, 70 | elevation: 3.0, 71 | shape: RoundedRectangleBorder( 72 | borderRadius: BorderRadius.all(Radius.circular(5.0))), 73 | onPressed: () { 74 | helper.setString('language', 'en'); 75 | logAnalyticsEvent('english'); 76 | 77 | Navigator.push(context, 78 | CupertinoPageRoute(builder: (context) { 79 | return MyOnboardingPage2( 80 | helper: helper, 81 | identity: identity, 82 | language: 'en'); 83 | })); 84 | }, 85 | ), 86 | SizedBox( 87 | width: 10.0, 88 | ), 89 | RaisedButton( 90 | child: Text('हिंदी'), 91 | color: MyColors.black, 92 | textColor: MyColors.white, 93 | elevation: 3.0, 94 | shape: RoundedRectangleBorder( 95 | borderRadius: BorderRadius.all(Radius.circular(5.0))), 96 | onPressed: () { 97 | helper.setString('language', 'hi'); 98 | logAnalyticsEvent('hindi'); 99 | 100 | Navigator.push(context, 101 | CupertinoPageRoute(builder: (context) { 102 | return MyOnboardingPage2( 103 | helper: helper, 104 | identity: identity, 105 | language: 'hi'); 106 | })); 107 | }, 108 | ), 109 | SizedBox( 110 | width: 10.0, 111 | ), 112 | RaisedButton( 113 | child: Text('मराठी'), 114 | color: MyColors.black, 115 | textColor: MyColors.white, 116 | elevation: 3.0, 117 | shape: RoundedRectangleBorder( 118 | borderRadius: BorderRadius.all(Radius.circular(5.0))), 119 | onPressed: () { 120 | helper.setString('language', 'mr'); 121 | logAnalyticsEvent('marathi'); 122 | 123 | Navigator.push(context, 124 | CupertinoPageRoute(builder: (context) { 125 | return MyOnboardingPage2( 126 | helper: helper, 127 | identity: identity, 128 | language: 'mr'); 129 | })); 130 | }, 131 | ), 132 | ], 133 | ), 134 | ], 135 | ), 136 | ], 137 | ), 138 | ), 139 | ); 140 | } 141 | } 142 | 143 | class MyOnboardingPage2 extends StatelessWidget { 144 | final SharedPreferences helper; 145 | final String identity; 146 | final String language; 147 | MyOnboardingPage2( 148 | {Key key, 149 | @required this.helper, 150 | @required this.identity, 151 | @required this.language}) 152 | : super(key: key); 153 | 154 | @override 155 | Widget build(BuildContext context) { 156 | double width = MediaQuery.of(context).size.width * 0.8; 157 | return Material( 158 | child: Container( 159 | color: MyColors.white, 160 | child: Row( 161 | mainAxisAlignment: MainAxisAlignment.center, 162 | crossAxisAlignment: CrossAxisAlignment.center, 163 | children: [ 164 | Container( 165 | width: width, 166 | child: Column( 167 | mainAxisAlignment: MainAxisAlignment.start, 168 | crossAxisAlignment: CrossAxisAlignment.center, 169 | children: [ 170 | SizedBox( 171 | height: 100.0, 172 | ), 173 | Text( 174 | onboardingPageHeading(language), 175 | style: HeadingStyles.black, 176 | ), 177 | SizedBox( 178 | height: 40.0, 179 | ), 180 | Row( 181 | mainAxisAlignment: MainAxisAlignment.start, 182 | crossAxisAlignment: CrossAxisAlignment.start, 183 | children: [ 184 | Column( 185 | mainAxisAlignment: MainAxisAlignment.start, 186 | crossAxisAlignment: CrossAxisAlignment.start, 187 | children: [ 188 | Container( 189 | width: 39.0, 190 | height: 42.0, 191 | child: Image.asset( 192 | 'assets/other/cluster.png', 193 | fit: BoxFit.cover, 194 | ), 195 | ), 196 | ], 197 | ), 198 | SizedBox( 199 | width: 10.0, 200 | ), 201 | Expanded( 202 | child: Column( 203 | mainAxisAlignment: MainAxisAlignment.start, 204 | crossAxisAlignment: CrossAxisAlignment.start, 205 | children: [ 206 | Text( 207 | onboardingPageTitle1(language), 208 | style: SubHeadingStyles.black, 209 | ), 210 | SizedBox( 211 | height: 5.0, 212 | ), 213 | Text( 214 | onboardingPageTitle1Body1(language), 215 | style: BodyStyles.black, 216 | ), 217 | ], 218 | ), 219 | ), 220 | ], 221 | ), 222 | SizedBox( 223 | height: 30.0, 224 | ), 225 | Row( 226 | mainAxisAlignment: MainAxisAlignment.start, 227 | crossAxisAlignment: CrossAxisAlignment.start, 228 | children: [ 229 | Column( 230 | mainAxisAlignment: MainAxisAlignment.start, 231 | crossAxisAlignment: CrossAxisAlignment.start, 232 | children: [ 233 | Container( 234 | width: 32.0, 235 | height: 38.0, 236 | child: Image.asset( 237 | 'assets/other/notification.png', 238 | fit: BoxFit.cover, 239 | ), 240 | ), 241 | ], 242 | ), 243 | SizedBox( 244 | width: 10.0, 245 | ), 246 | Expanded( 247 | child: Column( 248 | mainAxisAlignment: MainAxisAlignment.start, 249 | crossAxisAlignment: CrossAxisAlignment.start, 250 | children: [ 251 | Text( 252 | onboardingPageTitle2(language), 253 | style: SubHeadingStyles.black, 254 | ), 255 | SizedBox( 256 | height: 5.0, 257 | ), 258 | Text( 259 | onboardingPageTitle2Body2(language), 260 | style: BodyStyles.black, 261 | ), 262 | ], 263 | ), 264 | ), 265 | ], 266 | ), 267 | SizedBox( 268 | height: 30.0, 269 | ), 270 | Row( 271 | mainAxisAlignment: MainAxisAlignment.start, 272 | crossAxisAlignment: CrossAxisAlignment.start, 273 | children: [ 274 | Column( 275 | mainAxisAlignment: MainAxisAlignment.start, 276 | crossAxisAlignment: CrossAxisAlignment.start, 277 | children: [ 278 | Container( 279 | width: 25.0, 280 | height: 36.0, 281 | child: Image.asset( 282 | 'assets/other/rupee.png', 283 | fit: BoxFit.cover, 284 | ), 285 | ), 286 | ], 287 | ), 288 | SizedBox( 289 | width: 10.0, 290 | ), 291 | Expanded( 292 | child: Column( 293 | mainAxisAlignment: MainAxisAlignment.start, 294 | crossAxisAlignment: CrossAxisAlignment.start, 295 | children: [ 296 | Text( 297 | onboardingPageTitle3(language), 298 | style: SubHeadingStyles.black, 299 | ), 300 | SizedBox( 301 | height: 5.0, 302 | ), 303 | Text( 304 | onboardingPageTitle3Body3(language), 305 | style: BodyStyles.black, 306 | ), 307 | ], 308 | ), 309 | ), 310 | ], 311 | ), 312 | SizedBox( 313 | height: 40.0, 314 | ), 315 | ButtonTheme( 316 | height: 50.0, 317 | minWidth: 180.0, 318 | child: RaisedButton( 319 | child: Text( 320 | onboardingPageButton(language), 321 | style: BodyStyles.white, 322 | ), 323 | color: MyColors.black, 324 | splashColor: MyColors.primary, 325 | elevation: 3.0, 326 | shape: RoundedRectangleBorder( 327 | borderRadius: BorderRadius.all(Radius.circular(50.0)), 328 | ), 329 | onPressed: () async { 330 | helper.setBool('isFirstLaunch', false); 331 | helper.setString('uuid', identity); 332 | 333 | Navigator.pushAndRemoveUntil( 334 | context, 335 | MaterialPageRoute( 336 | builder: (context) => MyMapViewPage( 337 | helper: helper, 338 | identity: identity, 339 | language: language, 340 | )), 341 | (Route route) => false); 342 | }, 343 | ), 344 | ), 345 | ], 346 | ), 347 | ), 348 | ], 349 | ), 350 | ), 351 | ); 352 | } 353 | } 354 | -------------------------------------------------------------------------------- /lib/services/censor.dart: -------------------------------------------------------------------------------- 1 | String censor(String messageText) { 2 | final List profanity = [ 3 | 'fuck', 4 | 'bitch', 5 | 'bastard', 6 | 'sex', 7 | 'shit', 8 | 'cunt', 9 | 'pussy', 10 | 'vagina', 11 | 'dick', 12 | 'penis', 13 | 'cock', 14 | 'ass', 15 | 'boob', 16 | 'breast', 17 | 'tits', 18 | 'nigg', 19 | 'whore', 20 | 'prostitute', 21 | 'retard', 22 | 'fag', 23 | 'chut', 24 | 'chod', 25 | 'gaand', 26 | 'bhosdike', 27 | 'kamina', 28 | 'kutta', 29 | 'rundi', 30 | 'randi', 31 | 'saala', 32 | 'bhangi', 33 | ]; // add more LOL 34 | 35 | profanity.forEach((badWord) { 36 | String lowerCaseMessage = messageText.toLowerCase(); 37 | if (lowerCaseMessage.contains(badWord)) { 38 | messageText = lowerCaseMessage.replaceAll(badWord, '****'); 39 | } 40 | }); 41 | return messageText; 42 | } 43 | -------------------------------------------------------------------------------- /lib/services/firebase_analytics.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_analytics/firebase_analytics.dart'; 2 | 3 | final FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics(); 4 | 5 | Future logAnalyticsEvent(String event) async { 6 | print('Logging event $event...'); 7 | await firebaseAnalytics.logEvent(name: '$event'); 8 | } 9 | -------------------------------------------------------------------------------- /lib/utils/colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class MyColors { 5 | static const primary = Color(0xff1de9b6); 6 | static const accent = Color(0xff212121); 7 | static const translucent = Color(0x60212121); 8 | static const light = Color(0xffcfd8dc); 9 | static const dark = Color(0xff424242); 10 | static const white = Color(0xfffafafa); 11 | static const black = Color(0xff212121); 12 | } //main app colors 13 | 14 | class MaterialColors { 15 | static const red = Color(0xffd50000); 16 | static const blue = Color(0xff2962ff); 17 | static const yellow = Color(0xffffd600); 18 | static const green = Color(0xff00c853); 19 | static const purple = Color(0xffaa00ff); 20 | static const pink = Color(0xffc51162); 21 | static const orange = Color(0xffff6d00); 22 | } //material design colors 23 | 24 | class ShadowColors { 25 | static const light = Color(0x80718792); 26 | static const dark = Color(0x801c313a); 27 | } //shadow colors for raised elements 28 | -------------------------------------------------------------------------------- /lib/utils/first_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/pages/map_view_page.dart'; 2 | import 'package:driver/pages/onboarding_page.dart'; 3 | import 'package:driver/utils/ui_helpers.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:shared_preferences/shared_preferences.dart'; 6 | import 'package:uuid/uuid.dart'; 7 | 8 | class FirstPage extends StatefulWidget { 9 | @override 10 | _FirstPageState createState() => _FirstPageState(); 11 | } 12 | 13 | class _FirstPageState extends State { 14 | void firstPageChecker() async { 15 | SharedPreferences prefs = await SharedPreferences.getInstance(); 16 | bool isFirstLaunch = prefs.getBool('isFirstLaunch') ?? true; 17 | String uuid = prefs.getString('uuid') ?? Uuid().v4(); 18 | String lang = prefs.getString('language') ?? ''; 19 | // generates random uuid as string 20 | 21 | if (isFirstLaunch) { 22 | Navigator.pushAndRemoveUntil( 23 | context, 24 | MaterialPageRoute( 25 | builder: (context) => MyOnboardingPage1( 26 | helper: prefs, 27 | flag: isFirstLaunch, 28 | identity: uuid, 29 | )), 30 | (Route route) => false); 31 | // very first launch since install 32 | } else { 33 | Navigator.pushAndRemoveUntil( 34 | context, 35 | MaterialPageRoute( 36 | builder: (context) => 37 | MyMapViewPage(helper: prefs, identity: uuid, language: lang)), 38 | (Route route) => false); 39 | } 40 | } 41 | 42 | @override 43 | void initState() { 44 | super.initState(); 45 | firstPageChecker(); 46 | } 47 | 48 | Widget build(BuildContext context) { 49 | return Container( 50 | color: invertInvertColorsStrong(context), // blank screen 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/utils/map_helper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:io'; 3 | import 'dart:typed_data'; 4 | import 'dart:ui'; 5 | 6 | import 'package:driver/utils/map_marker.dart'; 7 | import 'package:fluster/fluster.dart'; 8 | import 'package:flutter_cache_manager/flutter_cache_manager.dart'; 9 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 10 | 11 | /// In here we are encapsulating all the logic required to get marker icons from url images 12 | /// and to show clusters using the [Fluster] package. 13 | class MapHelper { 14 | /// If there is a cached file and it's not old returns the cached marker image file 15 | /// else it will download the image and save it on the temp dir and return that file. 16 | /// 17 | /// This mechanism is possible using the [DefaultCacheManager] package and is useful 18 | /// to improve load times on the next map loads, the first time will always take more 19 | /// time to download the file and set the marker image. 20 | /// 21 | /// You can resize the marker image by providing a [targetWidth]. 22 | static Future getMarkerImageFromUrl( 23 | String url, { 24 | int targetWidth, 25 | }) async { 26 | assert(url != null); 27 | 28 | final File markerImageFile = await DefaultCacheManager().getSingleFile(url); 29 | 30 | Uint8List markerImageBytes = await markerImageFile.readAsBytes(); 31 | 32 | if (targetWidth != null) { 33 | markerImageBytes = await _resizeImageBytes( 34 | markerImageBytes, 35 | targetWidth, 36 | ); 37 | } 38 | 39 | return BitmapDescriptor.fromBytes(markerImageBytes); 40 | } 41 | 42 | /// Resizes the given [imageBytes] with the [targetWidth]. 43 | /// 44 | /// We don't want the marker image to be too big so we might need to resize the image. 45 | static Future _resizeImageBytes( 46 | Uint8List imageBytes, 47 | int targetWidth, 48 | ) async { 49 | assert(imageBytes != null); 50 | assert(targetWidth != null); 51 | 52 | final Codec imageCodec = await instantiateImageCodec( 53 | imageBytes, 54 | targetWidth: targetWidth, 55 | ); 56 | 57 | final FrameInfo frameInfo = await imageCodec.getNextFrame(); 58 | 59 | final ByteData byteData = await frameInfo.image.toByteData( 60 | format: ImageByteFormat.png, 61 | ); 62 | 63 | return byteData.buffer.asUint8List(); 64 | } 65 | 66 | /// Inits the cluster manager with all the [MapMarker] to be displayed on the map. 67 | /// Here we're also setting up the cluster marker itself, also with an [clusterImageUrl]. 68 | /// 69 | /// For more info about customizing your clustering logic check the [Fluster] constructor. 70 | static Future> initClusterManager( 71 | List markers, 72 | int minZoom, 73 | int maxZoom, 74 | String clusterImageUrl, 75 | ) async { 76 | assert(markers != null); 77 | assert(minZoom != null); 78 | assert(maxZoom != null); 79 | assert(clusterImageUrl != null); 80 | 81 | final BitmapDescriptor clusterImage = 82 | await MapHelper.getMarkerImageFromUrl(clusterImageUrl); 83 | 84 | return Fluster( 85 | minZoom: minZoom, 86 | maxZoom: maxZoom, 87 | radius: 150, 88 | extent: 2048, 89 | nodeSize: 64, 90 | points: markers, 91 | createCluster: ( 92 | BaseCluster cluster, 93 | double lng, 94 | double lat, 95 | ) => 96 | Markers( 97 | id: cluster.id.toString(), 98 | position: LatLng(lat, lng), 99 | icon: clusterImage, 100 | isCluster: true, 101 | clusterId: cluster.id, 102 | pointsSize: cluster.pointsSize, 103 | childMarkerId: cluster.childMarkerId, 104 | ), 105 | ); 106 | } 107 | 108 | /// Gets a list of markers and clusters that reside within the visible bounding box for 109 | /// the given [currentZoom]. For more info check [Fluster.clusters]. 110 | static List getClusterMarkers( 111 | Fluster clusterManager, 112 | double currentZoom, 113 | ) { 114 | assert(currentZoom != null); 115 | 116 | if (clusterManager == null) return []; 117 | 118 | return clusterManager 119 | .clusters([-180, -85, 180, 85], currentZoom.toInt()) 120 | .map((cluster) => cluster.toMarker()) 121 | .toList(); 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /lib/utils/map_marker.dart: -------------------------------------------------------------------------------- 1 | import 'package:fluster/fluster.dart'; 2 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 3 | import 'package:meta/meta.dart'; 4 | 5 | /// [Fluster] can only handle markers that conform to the [Clusterable] abstract class. 6 | /// 7 | /// You can customize this class by adding more parameters that might be needed for 8 | /// your use case. For instance, you can pass an onTap callback or add an 9 | /// [InfoWindow] to your marker here, then you can use the [toMarker] method to convert 10 | /// this to a proper [Marker] that the [GoogleMap] can read. 11 | class Markers extends Clusterable { 12 | final String id; 13 | final LatLng position; 14 | final BitmapDescriptor icon; 15 | final InfoWindow infoWindow; 16 | 17 | Markers({ 18 | @required this.id, 19 | @required this.position, 20 | @required this.icon, 21 | @required this.infoWindow, 22 | isCluster = false, 23 | clusterId, 24 | pointsSize, 25 | childMarkerId, 26 | }) : super( 27 | markerId: id, 28 | latitude: position.latitude, 29 | longitude: position.longitude, 30 | isCluster: isCluster, 31 | clusterId: clusterId, 32 | pointsSize: pointsSize, 33 | childMarkerId: childMarkerId, 34 | ); 35 | 36 | Marker toMarker() => Marker( 37 | markerId: MarkerId(id), 38 | position: LatLng( 39 | position.latitude, 40 | position.longitude, 41 | ), 42 | icon: icon, 43 | infoWindow: infoWindow, 44 | ); 45 | } 46 | -------------------------------------------------------------------------------- /lib/utils/map_styles.dart: -------------------------------------------------------------------------------- 1 | String lightMap = 2 | '[{"stylers":[{"visibility":"simplified"}]},{"featureType":"administrative","stylers":[{"color":"#7393ab"}]},{"featureType":"landscape","stylers":[{"color":"#dae6eb"}]},{"featureType":"poi","elementType":"geometry","stylers":[{"color":"#c6e8b3"}]},{"featureType":"poi","elementType":"labels","stylers":[{"color":"#7393ab"},{"visibility":"off"}]},{"featureType":"poi.business","stylers":[{"visibility":"simplified"}]},{"featureType":"poi.school","stylers":[{"visibility":"simplified"}]},{"featureType":"road","stylers":[{"color":"#e4f0f7"}]},{"featureType":"road","elementType":"geometry","stylers":[{"color":"#e4f0f7"},{"visibility":"on"}]},{"featureType":"road","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"transit.line","stylers":[{"color":"#cccccc"}]},{"featureType":"water","stylers":[{"color":"#a6cbe3"}]},{"featureType":"water","elementType":"labels","stylers":[{"visibility":"off"}]}]'; 3 | 4 | String darkMap = 5 | '[{"stylers":[{"visibility":"simplified"}]},{"featureType":"administrative","stylers":[{"color":"#dfdfdf"}]},{"featureType":"landscape","stylers":[{"color":"#3e4f5c"}]},{"featureType":"poi","elementType":"geometry","stylers":[{"color":"#0e8d6f"}]},{"featureType":"poi","elementType":"labels","stylers":[{"color":"#cfd8dc"},{"visibility":"off"}]},{"featureType":"poi.business","stylers":[{"visibility":"simplified"}]},{"featureType":"poi.school","stylers":[{"visibility":"simplified"}]},{"featureType":"road","stylers":[{"color":"#4b5f70"}]},{"featureType":"road","elementType":"geometry","stylers":[{"color":"#4b5f70"},{"visibility":"on"}]},{"featureType":"road","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"transit.line","stylers":[{"color":"#999999"}]},{"featureType":"water","stylers":[{"color":"#2a353e"}]},{"featureType":"water","elementType":"labels","stylers":[{"visibility":"off"}]}]'; 6 | -------------------------------------------------------------------------------- /lib/utils/text_styles.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/colors.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class TitleStyles { 5 | static const white = TextStyle( 6 | fontSize: 20.0, 7 | color: MyColors.white, 8 | ); 9 | static const black = TextStyle( 10 | fontSize: 20.0, 11 | color: MyColors.black, 12 | ); 13 | static const primary = TextStyle( 14 | fontSize: 20.0, 15 | color: MyColors.primary, 16 | ); 17 | } 18 | 19 | class BodyStyles { 20 | static const white = TextStyle( 21 | fontSize: 16.0, 22 | color: MyColors.white, 23 | ); 24 | static const black = TextStyle( 25 | fontSize: 16.0, 26 | color: MyColors.black, 27 | ); 28 | static const primary = TextStyle( 29 | fontSize: 16.0, 30 | color: MyColors.primary, 31 | ); 32 | } 33 | 34 | class BodyStylesItalic { 35 | static const white = TextStyle( 36 | fontSize: 16.0, 37 | color: MyColors.white, 38 | fontStyle: FontStyle.italic, 39 | ); 40 | static const black = TextStyle( 41 | fontSize: 16.0, 42 | color: MyColors.black, 43 | fontStyle: FontStyle.italic, 44 | ); 45 | static const primary = TextStyle( 46 | fontSize: 16.0, 47 | color: MyColors.primary, 48 | fontStyle: FontStyle.italic, 49 | ); 50 | } 51 | 52 | class HeadingStyles { 53 | static const white = TextStyle( 54 | fontSize: 24.0, 55 | fontWeight: FontWeight.w700, 56 | color: MyColors.white, 57 | ); 58 | static const black = TextStyle( 59 | fontSize: 24.0, 60 | fontWeight: FontWeight.w700, 61 | color: MyColors.black, 62 | ); 63 | static const primary = TextStyle( 64 | fontSize: 24.0, 65 | fontWeight: FontWeight.w700, 66 | color: MyColors.primary, 67 | ); 68 | } 69 | 70 | class SubHeadingStyles { 71 | static const white = TextStyle( 72 | fontSize: 18.0, 73 | fontWeight: FontWeight.w700, 74 | color: MyColors.white, 75 | ); 76 | static const black = TextStyle( 77 | fontSize: 18.0, 78 | fontWeight: FontWeight.w700, 79 | color: MyColors.black, 80 | ); 81 | static const primary = TextStyle( 82 | fontSize: 18.0, 83 | fontWeight: FontWeight.w700, 84 | color: MyColors.primary, 85 | ); 86 | } 87 | 88 | class LabelStyles { 89 | static const white = TextStyle( 90 | fontSize: 14.0, 91 | color: MyColors.white, 92 | ); 93 | static const black = TextStyle( 94 | fontSize: 14.0, 95 | color: MyColors.black, 96 | ); 97 | static const primary = TextStyle( 98 | fontSize: 14.0, 99 | color: MyColors.primary, 100 | ); 101 | } 102 | 103 | class MessageSenderStyles { 104 | static const white = TextStyle( 105 | fontSize: 12.0, 106 | color: MyColors.white, 107 | ); 108 | static const black = TextStyle( 109 | fontSize: 12.0, 110 | color: MyColors.black, 111 | ); 112 | static const primary = TextStyle( 113 | fontSize: 12.0, 114 | color: MyColors.primary, 115 | ); 116 | } 117 | 118 | class MessageTextStyles { 119 | static const white = TextStyle( 120 | fontSize: 16.0, 121 | color: MyColors.white, 122 | ); 123 | static const black = TextStyle( 124 | fontSize: 16.0, 125 | color: MyColors.black, 126 | ); 127 | static const primary = TextStyle( 128 | fontSize: 16.0, 129 | color: MyColors.primary, 130 | ); 131 | } 132 | -------------------------------------------------------------------------------- /lib/utils/translations.dart: -------------------------------------------------------------------------------- 1 | String onboardingPageHeading(String language) { 2 | if (language == 'en') { 3 | return 'Find Customers!'; 4 | } else if (language == 'hi') { 5 | return 'भाड़ा ढूंढे!'; 6 | } else if (language == 'mr') { 7 | return 'भाड़ा शोध!'; 8 | } else { 9 | return 'Translation error'; 10 | } 11 | } 12 | 13 | String onboardingPageTitle1(String language) { 14 | if (language == 'en') { 15 | return 'How does it work?'; 16 | } else if (language == 'hi') { 17 | return 'यह कैसे काम करता है?'; 18 | } else if (language == 'mr') { 19 | return 'हे कसे काम करते?'; 20 | } else { 21 | return 'Translation error'; 22 | } 23 | } 24 | 25 | String onboardingPageTitle1Body1(String language) { 26 | if (language == 'en') { 27 | return 'Find out where Riders are waiting for Rickshaws'; 28 | } else if (language == 'hi') { 29 | return 'पास में सवार का पता लगाएँ और उनकी ओर दिशाएँ प्राप्त करें'; 30 | } else if (language == 'mr') { 31 | return 'झवळच्या भाडा ना शोध आणि त्यांच्या काढे जायचा रस्ता पण'; 32 | } else { 33 | return 'Translation error'; 34 | } 35 | } 36 | 37 | String onboardingPageTitle2(String language) { 38 | if (language == 'en') { 39 | return 'How do I get to know?'; 40 | } else if (language == 'hi') { 41 | return 'मुझे कैसे सूचित किया जाएगा?'; 42 | } else if (language == 'mr') { 43 | return 'मला कसे सूचित केले जाईल?'; 44 | } else { 45 | return 'Translation error'; 46 | } 47 | } 48 | 49 | String onboardingPageTitle2Body2(String language) { 50 | if (language == 'en') { 51 | return 'When new Riders mark their location, you will get notified.'; 52 | } else if (language == 'hi') { 53 | return 'जैसे ही नए सवार चिह्नित किए जाएंगे हम आपको एक नोटिफिकेशन भेज देंगे'; 54 | } else if (language == 'mr') { 55 | return 'नवीन रायडर्स चिन्हांकित होताच आम्ही आपल्याला एक सूचना पाठवू'; 56 | } else { 57 | return 'Translation error'; 58 | } 59 | } 60 | 61 | String onboardingPageTitle3(String language) { 62 | if (language == 'en') { 63 | return 'Is it free?'; 64 | } else if (language == 'hi') { 65 | return 'क्या यह मुफ्त है?'; 66 | } else if (language == 'mr') { 67 | return 'हे विनामूल्य आहे का?'; 68 | } else { 69 | return 'Translation error'; 70 | } 71 | } 72 | 73 | String onboardingPageTitle3Body3(String language) { 74 | if (language == 'en') { 75 | return 'Yes, it is completely free!'; 76 | } else if (language == 'hi') { 77 | return 'हाँ, यह एप्लिकेशन पूरी तरह से मुक्त है!'; 78 | } else if (language == 'mr') { 79 | return 'होय हा, अँप ऑटो चालकों वापरणे पूर्णपणे विनामूल्य आहे!'; 80 | } else { 81 | return 'Translation error'; 82 | } 83 | } 84 | 85 | String onboardingPageButton(String language) { 86 | if (language == 'en') { 87 | return 'Let\'s Go!'; 88 | } else if (language == 'hi') { 89 | return 'शुरू करो'; 90 | } else if (language == 'mr') { 91 | return 'सुरु करू!'; 92 | } else { 93 | return 'Translation error'; 94 | } 95 | } 96 | 97 | String shareButton(String language) { 98 | if (language == 'en') { 99 | return 'Share'; 100 | } else if (language == 'hi') { 101 | return 'शेयर'; 102 | } else if (language == 'mr') { 103 | return 'सामायिक'; 104 | } else { 105 | return 'Translation error'; 106 | } 107 | } 108 | 109 | String chat(String language) { 110 | if (language == 'en') { 111 | return 'Chat'; 112 | } else if (language == 'hi') { 113 | return 'बातचीत'; 114 | } else if (language == 'mr') { 115 | return 'गप्पा'; 116 | } else { 117 | return 'Translation error'; 118 | } 119 | } 120 | 121 | String loadingMessages(String language) { 122 | if (language == 'en') { 123 | return 'Loading messages...'; 124 | } else if (language == 'hi') { 125 | return 'लोड हो रहा है...'; 126 | } else if (language == 'mr') { 127 | return 'लोड करीत आहे...'; 128 | } else { 129 | return 'Translation error'; 130 | } 131 | } 132 | 133 | String messagePlaceholderText(String language) { 134 | if (language == 'en') { 135 | return 'Talk to others'; 136 | } else if (language == 'hi') { 137 | return 'दूसरों से बात करें'; 138 | } else if (language == 'mr') { 139 | return 'इतरांशी बोला'; 140 | } else { 141 | return 'Translation error'; 142 | } 143 | } 144 | 145 | String sendMessageText(String language) { 146 | if (language == 'en') { 147 | return 'Send message'; 148 | } else if (language == 'hi') { 149 | return 'मेसेज भेजें'; 150 | } else if (language == 'mr') { 151 | return 'संदेश पाठवा'; 152 | } else { 153 | return 'Translation error'; 154 | } 155 | } 156 | 157 | String recenter(String language) { 158 | if (language == 'en') { 159 | return 'Recenter'; 160 | } else if (language == 'hi') { 161 | return 'रेसेण्टर'; 162 | } else if (language == 'mr') { 163 | return 'रेसेण्टर'; 164 | } else { 165 | return 'Translation error'; 166 | } 167 | } 168 | 169 | String noConnection(String language) { 170 | if (language == 'en') { 171 | return 'Oops...there\'s no Internet!'; 172 | } else if (language == 'hi') { 173 | return 'इंटरनेट नहीं है!'; 174 | } else if (language == 'mr') { 175 | return 'इंटरनेट नाही आहे!'; 176 | } else { 177 | return 'Translation error'; 178 | } 179 | } 180 | 181 | String fetchingLocation(String language) { 182 | if (language == 'en') { 183 | return 'Fetching location...'; 184 | } else if (language == 'hi') { 185 | return 'आपका लोकेशन ढूंढ रहे है...'; 186 | } else if (language == 'mr') { 187 | return 'आपले लोकेशन शोधत आहे...'; 188 | } else { 189 | return 'Translation error'; 190 | } 191 | } 192 | 193 | String markerTextDestination(String language, String destination) { 194 | if (language == 'en') { 195 | return 'Going to $destination'; 196 | } else if (language == 'hi') { 197 | return '$destination जा रहा हैं'; 198 | } else if (language == 'mr') { 199 | return '$destination जाता आहे'; 200 | } else { 201 | return 'Translation error'; 202 | } 203 | } 204 | 205 | String markerTextLooking(String language) { 206 | if (language == 'en') { 207 | return 'Looking for a Rickshaw'; 208 | } else if (language == 'hi') { 209 | return 'ऑटो की तलाश में हैं'; 210 | } else if (language == 'mr') { 211 | return 'ऑटो शोधत आहे'; 212 | } else { 213 | return 'Translation error'; 214 | } 215 | } 216 | -------------------------------------------------------------------------------- /lib/utils/ui_helpers.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | void doNothing() { 6 | print('Nothing is happening here (yet)'); 7 | } //better than doing null-ing, right? ;) 8 | 9 | bool isIOS(BuildContext context) { 10 | if (Theme.of(context).platform == TargetPlatform.iOS) { 11 | return true; 12 | } else { 13 | return false; 14 | } 15 | } // check if android or ios 16 | 17 | bool isThemeCurrentlyDark(BuildContext context) { 18 | if (Theme.of(context).brightness == Brightness.dark) { 19 | return true; 20 | } else { 21 | return false; 22 | } 23 | } //returns current theme status 24 | 25 | Color invertColorsTheme(BuildContext context) { 26 | if (isThemeCurrentlyDark(context)) { 27 | return MyColors.primary; 28 | } else { 29 | return MyColors.accent; 30 | } 31 | } //returns appropriate theme colors for ui elements 32 | 33 | Color invertInvertColorsTheme(BuildContext context) { 34 | if (isThemeCurrentlyDark(context)) { 35 | return MyColors.accent; 36 | } else { 37 | return MyColors.primary; 38 | } 39 | } //keeps the same colors lol 40 | 41 | Color invertColorsMild(BuildContext context) { 42 | if (isThemeCurrentlyDark(context)) { 43 | return MyColors.light; 44 | } else { 45 | return MyColors.dark; 46 | } 47 | } //returns appropriate mild colors for text visibility 48 | 49 | Color invertInvertColorsMild(BuildContext context) { 50 | if (isThemeCurrentlyDark(context)) { 51 | return MyColors.dark; 52 | } else { 53 | return MyColors.light; 54 | } 55 | } //keeps the same colors lol 56 | 57 | Color invertColorsStrong(BuildContext context) { 58 | if (isThemeCurrentlyDark(context)) { 59 | return MyColors.white; 60 | } else { 61 | return MyColors.black; 62 | } 63 | } //returns appropriate strong colors for text visibility 64 | 65 | Color invertInvertColorsStrong(BuildContext context) { 66 | if (isThemeCurrentlyDark(context)) { 67 | return MyColors.black; 68 | } else { 69 | return MyColors.white; 70 | } 71 | } //keeps the same colors lol 72 | 73 | Color shadowColor(BuildContext context) { 74 | if (isThemeCurrentlyDark(context)) { 75 | return ShadowColors.dark; 76 | } else { 77 | return ShadowColors.light; 78 | } 79 | } //returns appropriate colors for raised element shadows 80 | -------------------------------------------------------------------------------- /lib/widgets/fetching_location.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/text_styles.dart'; 2 | import 'package:driver/utils/translations.dart'; 3 | import 'package:driver/utils/ui_helpers.dart'; 4 | import 'package:flare_flutter/flare_actor.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class FetchingLocation extends StatelessWidget { 8 | final String language; 9 | FetchingLocation({Key key, @required this.language}) : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Material( 14 | child: Container( 15 | color: invertInvertColorsStrong(context), 16 | child: Row( 17 | mainAxisAlignment: MainAxisAlignment.center, 18 | crossAxisAlignment: CrossAxisAlignment.center, 19 | children: [ 20 | Column( 21 | mainAxisAlignment: MainAxisAlignment.start, 22 | crossAxisAlignment: CrossAxisAlignment.center, 23 | children: [ 24 | SizedBox( 25 | height: 175.0, 26 | ), 27 | Container( 28 | width: 225.0, 29 | height: 225.0, 30 | child: FlareActor( 31 | 'assets/flare/fetching_location.flr', 32 | animation: 'animation', 33 | ), 34 | ), 35 | Text( 36 | fetchingLocation(language), 37 | style: isThemeCurrentlyDark(context) 38 | ? TitleStyles.white 39 | : TitleStyles.black, 40 | ), 41 | ], 42 | ), 43 | ], 44 | ), 45 | ), 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/widgets/message.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/colors.dart'; 2 | import 'package:driver/utils/text_styles.dart'; 3 | import 'package:driver/utils/ui_helpers.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 6 | 7 | class Message extends StatelessWidget { 8 | final bool isMe; 9 | final bool isNear; 10 | final String senderId; 11 | final String senderName; 12 | final String messageText; 13 | final String destination; 14 | final LatLng location; 15 | final DateTime timestamp; 16 | 17 | const Message({ 18 | Key key, 19 | this.isMe, 20 | this.isNear, 21 | this.senderId, 22 | this.senderName, 23 | this.messageText, 24 | this.destination, 25 | this.location, 26 | this.timestamp, 27 | }) : super(key: key); 28 | 29 | @override 30 | Widget build(BuildContext context) { 31 | return Visibility( 32 | visible: isNear, 33 | child: Container( 34 | child: Column( 35 | crossAxisAlignment: 36 | isMe ? CrossAxisAlignment.end : CrossAxisAlignment.start, 37 | children: [ 38 | SizedBox( 39 | height: 10.0, 40 | ), 41 | Material( 42 | color: isMe ? MyColors.primary : invertInvertColorsMild(context), 43 | borderRadius: BorderRadius.circular(8.0), 44 | elevation: 1.0, 45 | child: Container( 46 | padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0), 47 | child: Column( 48 | mainAxisAlignment: MainAxisAlignment.center, 49 | crossAxisAlignment: 50 | isMe ? CrossAxisAlignment.end : CrossAxisAlignment.start, 51 | children: [ 52 | Text( 53 | isMe ? 'You:' : '$senderName says:', 54 | style: isMe 55 | ? MessageSenderStyles.black 56 | : isThemeCurrentlyDark(context) 57 | ? MessageSenderStyles.white 58 | : MessageSenderStyles.black, 59 | ), 60 | Text( 61 | messageText, 62 | style: isMe 63 | ? MessageTextStyles.black 64 | : isThemeCurrentlyDark(context) 65 | ? MessageTextStyles.white 66 | : MessageTextStyles.black, 67 | ), 68 | ], 69 | ), 70 | ), 71 | ), 72 | SizedBox( 73 | height: 10.0, 74 | ), 75 | ], 76 | ), 77 | ), 78 | ); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /lib/widgets/message_placeholder.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/text_styles.dart'; 2 | import 'package:driver/utils/ui_helpers.dart'; 3 | import 'package:flare_flutter/flare_actor.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | Widget messagePlaceholder(BuildContext context, String text) { 7 | String flareFile = isThemeCurrentlyDark(context) 8 | ? 'messages-dark.flr' 9 | : 'messages-light.flr'; 10 | return Row( 11 | mainAxisAlignment: MainAxisAlignment.center, 12 | children: [ 13 | Column( 14 | mainAxisAlignment: MainAxisAlignment.start, 15 | children: [ 16 | SizedBox( 17 | height: 30.0, 18 | ), 19 | Container( 20 | width: 250.0, 21 | height: 250.0, 22 | child: FlareActor( 23 | 'assets/flare/$flareFile', 24 | animation: 'animation', 25 | ), 26 | ), 27 | Text( 28 | text, 29 | style: isThemeCurrentlyDark(context) 30 | ? BodyStyles.white 31 | : BodyStyles.black, 32 | ), 33 | ], 34 | ), 35 | ], 36 | ); 37 | } 38 | -------------------------------------------------------------------------------- /lib/widgets/no_connection.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/colors.dart'; 2 | import 'package:driver/utils/text_styles.dart'; 3 | import 'package:driver/utils/translations.dart'; 4 | import 'package:flare_flutter/flare_actor.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class NoConnection extends StatelessWidget { 8 | final String language; 9 | NoConnection({Key key, @required this.language}) : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Material( 14 | child: Container( 15 | color: MyColors.light, 16 | child: Row( 17 | mainAxisAlignment: MainAxisAlignment.center, 18 | crossAxisAlignment: CrossAxisAlignment.center, 19 | children: [ 20 | Column( 21 | mainAxisAlignment: MainAxisAlignment.center, 22 | crossAxisAlignment: CrossAxisAlignment.center, 23 | children: [ 24 | Container( 25 | width: 200.0, 26 | height: 200.0, 27 | child: FlareActor( 28 | 'assets/flare/no_connection.flr', 29 | animation: 'animation', 30 | ), 31 | ), 32 | SizedBox( 33 | height: 30.0, 34 | ), 35 | Text( 36 | noConnection(language), 37 | style: TitleStyles.black, 38 | ), 39 | ], 40 | ), 41 | ], 42 | ), 43 | ), 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/widgets/sexy_tile.dart: -------------------------------------------------------------------------------- 1 | import 'package:driver/utils/ui_helpers.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class SexyTile extends StatelessWidget { 6 | const SexyTile({ 7 | this.child, 8 | this.color, 9 | this.splashColor, 10 | this.onTap, 11 | }); 12 | final Widget child; 13 | final Color color; 14 | final Color splashColor; 15 | final Function() onTap; 16 | 17 | Widget build(BuildContext context) { 18 | return Container( 19 | margin: EdgeInsets.all(15.0), 20 | child: Material( 21 | color: color, 22 | elevation: 10.0, 23 | borderRadius: BorderRadius.circular(15.0), 24 | shadowColor: shadowColor(context), 25 | child: InkWell( 26 | child: child, 27 | splashColor: splashColor, 28 | borderRadius: BorderRadius.circular(15.0), 29 | onTap: onTap == null ? doNothing : () => onTap(), 30 | ), 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | archive: 5 | dependency: transitive 6 | description: 7 | name: archive 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.0.11" 11 | args: 12 | dependency: transitive 13 | description: 14 | name: args 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.5.2" 18 | async: 19 | dependency: transitive 20 | description: 21 | name: async 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "2.4.0" 25 | boolean_selector: 26 | dependency: transitive 27 | description: 28 | name: boolean_selector 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.0.5" 32 | charcode: 33 | dependency: transitive 34 | description: 35 | name: charcode 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.1.2" 39 | cloud_firestore: 40 | dependency: "direct main" 41 | description: 42 | name: cloud_firestore 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "0.13.4+2" 46 | cloud_firestore_platform_interface: 47 | dependency: transitive 48 | description: 49 | name: cloud_firestore_platform_interface 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "1.1.0" 53 | cloud_firestore_web: 54 | dependency: transitive 55 | description: 56 | name: cloud_firestore_web 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "0.1.1" 60 | collection: 61 | dependency: transitive 62 | description: 63 | name: collection 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "1.14.11" 67 | connectivity: 68 | dependency: transitive 69 | description: 70 | name: connectivity 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "0.4.5+3" 74 | convert: 75 | dependency: transitive 76 | description: 77 | name: convert 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "2.1.1" 81 | crypto: 82 | dependency: transitive 83 | description: 84 | name: crypto 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "2.1.3" 88 | cupertino_icons: 89 | dependency: "direct main" 90 | description: 91 | name: cupertino_icons 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "0.1.3" 95 | equatable: 96 | dependency: transitive 97 | description: 98 | name: equatable 99 | url: "https://pub.dartlang.org" 100 | source: hosted 101 | version: "1.1.1" 102 | firebase: 103 | dependency: transitive 104 | description: 105 | name: firebase 106 | url: "https://pub.dartlang.org" 107 | source: hosted 108 | version: "7.2.1" 109 | firebase_analytics: 110 | dependency: "direct main" 111 | description: 112 | name: firebase_analytics 113 | url: "https://pub.dartlang.org" 114 | source: hosted 115 | version: "5.0.11" 116 | firebase_core: 117 | dependency: transitive 118 | description: 119 | name: firebase_core 120 | url: "https://pub.dartlang.org" 121 | source: hosted 122 | version: "0.4.4" 123 | firebase_core_platform_interface: 124 | dependency: transitive 125 | description: 126 | name: firebase_core_platform_interface 127 | url: "https://pub.dartlang.org" 128 | source: hosted 129 | version: "1.0.0" 130 | firebase_core_web: 131 | dependency: transitive 132 | description: 133 | name: firebase_core_web 134 | url: "https://pub.dartlang.org" 135 | source: hosted 136 | version: "0.1.1+2" 137 | flare_dart: 138 | dependency: transitive 139 | description: 140 | name: flare_dart 141 | url: "https://pub.dartlang.org" 142 | source: hosted 143 | version: "2.3.3" 144 | flare_flutter: 145 | dependency: "direct main" 146 | description: 147 | name: flare_flutter 148 | url: "https://pub.dartlang.org" 149 | source: hosted 150 | version: "2.0.1" 151 | fluster: 152 | dependency: "direct main" 153 | description: 154 | name: fluster 155 | url: "https://pub.dartlang.org" 156 | source: hosted 157 | version: "1.1.2" 158 | flutter: 159 | dependency: "direct main" 160 | description: flutter 161 | source: sdk 162 | version: "0.0.0" 163 | flutter_cache_manager: 164 | dependency: "direct main" 165 | description: 166 | name: flutter_cache_manager 167 | url: "https://pub.dartlang.org" 168 | source: hosted 169 | version: "1.1.3" 170 | flutter_launcher_icons: 171 | dependency: "direct dev" 172 | description: 173 | name: flutter_launcher_icons 174 | url: "https://pub.dartlang.org" 175 | source: hosted 176 | version: "0.7.4" 177 | flutter_local_notifications: 178 | dependency: "direct main" 179 | description: 180 | name: flutter_local_notifications 181 | url: "https://pub.dartlang.org" 182 | source: hosted 183 | version: "1.2.2" 184 | flutter_local_notifications_platform_interface: 185 | dependency: transitive 186 | description: 187 | name: flutter_local_notifications_platform_interface 188 | url: "https://pub.dartlang.org" 189 | source: hosted 190 | version: "1.0.1" 191 | flutter_offline: 192 | dependency: "direct main" 193 | description: 194 | name: flutter_offline 195 | url: "https://pub.dartlang.org" 196 | source: hosted 197 | version: "0.3.0" 198 | flutter_plugin_android_lifecycle: 199 | dependency: transitive 200 | description: 201 | name: flutter_plugin_android_lifecycle 202 | url: "https://pub.dartlang.org" 203 | source: hosted 204 | version: "1.0.6" 205 | flutter_test: 206 | dependency: "direct dev" 207 | description: flutter 208 | source: sdk 209 | version: "0.0.0" 210 | flutter_web_plugins: 211 | dependency: transitive 212 | description: flutter 213 | source: sdk 214 | version: "0.0.0" 215 | geoflutterfire: 216 | dependency: "direct main" 217 | description: 218 | name: geoflutterfire 219 | url: "https://pub.dartlang.org" 220 | source: hosted 221 | version: "2.1.0" 222 | geolocator: 223 | dependency: "direct main" 224 | description: 225 | name: geolocator 226 | url: "https://pub.dartlang.org" 227 | source: hosted 228 | version: "5.3.0" 229 | google_api_availability: 230 | dependency: transitive 231 | description: 232 | name: google_api_availability 233 | url: "https://pub.dartlang.org" 234 | source: hosted 235 | version: "2.0.3" 236 | google_maps_flutter: 237 | dependency: "direct main" 238 | description: 239 | name: google_maps_flutter 240 | url: "https://pub.dartlang.org" 241 | source: hosted 242 | version: "0.5.24+1" 243 | http: 244 | dependency: transitive 245 | description: 246 | name: http 247 | url: "https://pub.dartlang.org" 248 | source: hosted 249 | version: "0.12.0+2" 250 | http_parser: 251 | dependency: transitive 252 | description: 253 | name: http_parser 254 | url: "https://pub.dartlang.org" 255 | source: hosted 256 | version: "3.1.3" 257 | image: 258 | dependency: transitive 259 | description: 260 | name: image 261 | url: "https://pub.dartlang.org" 262 | source: hosted 263 | version: "2.1.4" 264 | js: 265 | dependency: transitive 266 | description: 267 | name: js 268 | url: "https://pub.dartlang.org" 269 | source: hosted 270 | version: "0.6.1+1" 271 | location_permissions: 272 | dependency: transitive 273 | description: 274 | name: location_permissions 275 | url: "https://pub.dartlang.org" 276 | source: hosted 277 | version: "2.0.5" 278 | matcher: 279 | dependency: transitive 280 | description: 281 | name: matcher 282 | url: "https://pub.dartlang.org" 283 | source: hosted 284 | version: "0.12.6" 285 | meta: 286 | dependency: transitive 287 | description: 288 | name: meta 289 | url: "https://pub.dartlang.org" 290 | source: hosted 291 | version: "1.1.8" 292 | nested: 293 | dependency: transitive 294 | description: 295 | name: nested 296 | url: "https://pub.dartlang.org" 297 | source: hosted 298 | version: "0.0.4" 299 | path: 300 | dependency: transitive 301 | description: 302 | name: path 303 | url: "https://pub.dartlang.org" 304 | source: hosted 305 | version: "1.6.4" 306 | path_provider: 307 | dependency: transitive 308 | description: 309 | name: path_provider 310 | url: "https://pub.dartlang.org" 311 | source: hosted 312 | version: "1.4.5" 313 | pedantic: 314 | dependency: transitive 315 | description: 316 | name: pedantic 317 | url: "https://pub.dartlang.org" 318 | source: hosted 319 | version: "1.8.0+1" 320 | petitparser: 321 | dependency: transitive 322 | description: 323 | name: petitparser 324 | url: "https://pub.dartlang.org" 325 | source: hosted 326 | version: "2.4.0" 327 | platform: 328 | dependency: transitive 329 | description: 330 | name: platform 331 | url: "https://pub.dartlang.org" 332 | source: hosted 333 | version: "2.2.1" 334 | plugin_platform_interface: 335 | dependency: transitive 336 | description: 337 | name: plugin_platform_interface 338 | url: "https://pub.dartlang.org" 339 | source: hosted 340 | version: "1.0.1" 341 | provider: 342 | dependency: "direct main" 343 | description: 344 | name: provider 345 | url: "https://pub.dartlang.org" 346 | source: hosted 347 | version: "4.0.4" 348 | quiver: 349 | dependency: transitive 350 | description: 351 | name: quiver 352 | url: "https://pub.dartlang.org" 353 | source: hosted 354 | version: "2.0.5" 355 | quiver_hashcode: 356 | dependency: transitive 357 | description: 358 | name: quiver_hashcode 359 | url: "https://pub.dartlang.org" 360 | source: hosted 361 | version: "2.0.0" 362 | rxdart: 363 | dependency: transitive 364 | description: 365 | name: rxdart 366 | url: "https://pub.dartlang.org" 367 | source: hosted 368 | version: "0.23.1" 369 | share: 370 | dependency: "direct main" 371 | description: 372 | name: share 373 | url: "https://pub.dartlang.org" 374 | source: hosted 375 | version: "0.6.3+6" 376 | shared_preferences: 377 | dependency: "direct main" 378 | description: 379 | name: shared_preferences 380 | url: "https://pub.dartlang.org" 381 | source: hosted 382 | version: "0.5.6+3" 383 | shared_preferences_macos: 384 | dependency: transitive 385 | description: 386 | name: shared_preferences_macos 387 | url: "https://pub.dartlang.org" 388 | source: hosted 389 | version: "0.0.1+6" 390 | shared_preferences_platform_interface: 391 | dependency: transitive 392 | description: 393 | name: shared_preferences_platform_interface 394 | url: "https://pub.dartlang.org" 395 | source: hosted 396 | version: "1.0.3" 397 | shared_preferences_web: 398 | dependency: transitive 399 | description: 400 | name: shared_preferences_web 401 | url: "https://pub.dartlang.org" 402 | source: hosted 403 | version: "0.1.2+4" 404 | sky_engine: 405 | dependency: transitive 406 | description: flutter 407 | source: sdk 408 | version: "0.0.99" 409 | source_span: 410 | dependency: transitive 411 | description: 412 | name: source_span 413 | url: "https://pub.dartlang.org" 414 | source: hosted 415 | version: "1.5.5" 416 | sqflite: 417 | dependency: transitive 418 | description: 419 | name: sqflite 420 | url: "https://pub.dartlang.org" 421 | source: hosted 422 | version: "1.1.7+3" 423 | stack_trace: 424 | dependency: transitive 425 | description: 426 | name: stack_trace 427 | url: "https://pub.dartlang.org" 428 | source: hosted 429 | version: "1.9.3" 430 | stream_channel: 431 | dependency: transitive 432 | description: 433 | name: stream_channel 434 | url: "https://pub.dartlang.org" 435 | source: hosted 436 | version: "2.0.0" 437 | string_scanner: 438 | dependency: transitive 439 | description: 440 | name: string_scanner 441 | url: "https://pub.dartlang.org" 442 | source: hosted 443 | version: "1.0.5" 444 | synchronized: 445 | dependency: transitive 446 | description: 447 | name: synchronized 448 | url: "https://pub.dartlang.org" 449 | source: hosted 450 | version: "2.1.0+2" 451 | term_glyph: 452 | dependency: transitive 453 | description: 454 | name: term_glyph 455 | url: "https://pub.dartlang.org" 456 | source: hosted 457 | version: "1.1.0" 458 | test_api: 459 | dependency: transitive 460 | description: 461 | name: test_api 462 | url: "https://pub.dartlang.org" 463 | source: hosted 464 | version: "0.2.15" 465 | typed_data: 466 | dependency: transitive 467 | description: 468 | name: typed_data 469 | url: "https://pub.dartlang.org" 470 | source: hosted 471 | version: "1.1.6" 472 | uuid: 473 | dependency: "direct main" 474 | description: 475 | name: uuid 476 | url: "https://pub.dartlang.org" 477 | source: hosted 478 | version: "2.0.4" 479 | vector_math: 480 | dependency: transitive 481 | description: 482 | name: vector_math 483 | url: "https://pub.dartlang.org" 484 | source: hosted 485 | version: "2.0.8" 486 | xml: 487 | dependency: transitive 488 | description: 489 | name: xml 490 | url: "https://pub.dartlang.org" 491 | source: hosted 492 | version: "3.5.0" 493 | yaml: 494 | dependency: transitive 495 | description: 496 | name: yaml 497 | url: "https://pub.dartlang.org" 498 | source: hosted 499 | version: "2.2.0" 500 | sdks: 501 | dart: ">=2.7.0-dev <3.0.0" 502 | flutter: ">=1.12.13+hotfix.5 <2.0.0" 503 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: driver 2 | description: The Fliver Driver app 3 | version: 2.0.0+7 4 | 5 | environment: 6 | sdk: ">=2.2.0 <3.0.0" 7 | 8 | dependencies: 9 | flutter: 10 | sdk: flutter 11 | 12 | cloud_firestore: ^0.13.4+2 13 | cupertino_icons: ^0.1.3 14 | firebase_analytics: ^5.0.11 15 | flare_flutter: ^2.0.1 16 | fluster: ^1.1.2 17 | flutter_cache_manager: ^1.1.3 18 | flutter_local_notifications: ^1.2.2 19 | flutter_offline: ^0.3.0 20 | geoflutterfire: ^2.1.0 21 | geolocator: ^5.3.0 22 | google_maps_flutter: ^0.5.24+1 23 | provider: ^4.0.4 24 | share: ^0.6.3+6 25 | shared_preferences: ^0.5.6+3 26 | uuid: ^2.0.4 27 | 28 | dev_dependencies: 29 | flutter_test: 30 | sdk: flutter 31 | flutter_launcher_icons: ^0.7.3 32 | 33 | flutter_icons: 34 | android: 'launcher_icon' 35 | image_path_android: 'assets/icon/icon-legacy.png' 36 | adaptive_icon_foreground: 'assets/icon/icon-adaptive.png' 37 | adaptive_icon_background: '#eceff1' 38 | 39 | ios: true 40 | image_path_ios: 'assets/icon/icon-ios.png' 41 | 42 | flutter: 43 | uses-material-design: true 44 | 45 | assets: 46 | - assets/credits/ 47 | - assets/flare/ 48 | - assets/logo/ 49 | - assets/other/ 50 | 51 | fonts: 52 | - family: AvenirNextRounded 53 | fonts: 54 | - asset: assets/fonts/AvenirNextRounded/AvenirNextRounded-Medium.ttf 55 | --------------------------------------------------------------------------------