{"id":13694396,"url":"https://github.com/rwema3/FindSeat-App","last_synced_at":"2025-05-03T01:33:28.832Z","repository":{"id":37450846,"uuid":"476232464","full_name":"rwema3/FindSeat-App","owner":"rwema3","description":"FindSeat-App","archived":false,"fork":false,"pushed_at":"2023-05-02T22:45:21.000Z","size":11573,"stargazers_count":51,"open_issues_count":0,"forks_count":16,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-08-03T17:19:43.530Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rwema3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-03-31T09:12:37.000Z","updated_at":"2024-01-18T02:51:28.000Z","dependencies_parsed_at":"2024-04-12T23:53:21.125Z","dependency_job_id":null,"html_url":"https://github.com/rwema3/FindSeat-App","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwema3%2FFindSeat-App","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwema3%2FFindSeat-App/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwema3%2FFindSeat-App/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rwema3%2FFindSeat-App/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rwema3","download_url":"https://codeload.github.com/rwema3/FindSeat-App/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224346598,"owners_count":17296248,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T17:01:30.898Z","updated_at":"2024-11-12T20:32:24.192Z","avatar_url":"https://github.com/rwema3.png","language":"Dart","funding_links":[],"categories":["Misc"],"sub_categories":["Flutter"],"readme":"# A Completed Functional Flutter App - FindSeat (BLoC + Json API + Unit Test + Firebase Auth)\n\n![Banner](https://github.com/rwema3/FindSeat-App/blob/main/images/Findseat.png)\n\n## II. Showcase\n#### 2.1. Home\nIn Home screen, it just simply load then show data to UI. What you can try\n###### 2.1.1. Screen: Home 1\n![Home_1](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/Home_1.png)\n- (0) is about me :D\n- (1) is carousel slider for displaying banners, it’s automatically animate each 1 second. You can swipe left or right to see next/previous item\n- (2) is list seat categories. If you click on a category, app will open All shows screen. It’s horizontal list so you can swipe to reach more item\n- (3) is recommended seats. Click on item app will open Show details screen\n###### 2.1.2. Screen: Home 2\n![Home_2](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/Home_2.png)\n- (4) is nearby theatres. There’s nothing special to try here, it’s just simple map with highlighted cine’s locations\n- (5) (6) is list shows by each category. Same with recommended seats, you can click on item to open Show details screen\n#### 2.2. All Shows\n###### 2.2.1. Screen: All Shows 1\n![AllShows_1](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/AllShows_1.png)\n- (1) click to open search field. Basically support search by name\n- (2) click to open sort option. Basically support sort by rating and name\n- (3) there’re 3 tabs: Now showing, Coming soon and Exclusive. You can swipe left/right to view content of each tab\n- (4) Display list show in gridview\n###### 2.2.2. Screen: All Shows 2\n![AllShows_2](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/AllShows_2.png)\n- Sort options dialog\n###### 2.2.3. Screen: All Shows 3\n![AllShows_3](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/AllShows_3.png)\n- App will perform search after stop typing for 400 milliseconds, technically it’s debounce technique.\nTry to click on item, app will open Show details screen\n#### 2.3. Show info\n###### 2.3.1. Screen: Show Info 1\n![ShowInfo_1](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/ShowInfo_1.png)\n- (1) is trailer of show from Youtube link\n- (2) show’s description\n- (3) is offer section. This is not static content, it can be changed in mock API\n###### 2.3.2. Screen: Show Info 2\n![ShowInfo_2](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/ShowInfo_2.png)\n- (4) is user’s review section. Basically write review function is not available yet\n- (5) is casts section. It’s horizontal listview, you can swipe to reach more content.\n- (6) Click Book seats then app will open Book Time Slot screen\n#### 2.4. Book Time Slot\n###### 2.4.1. Screen: Book Time Slot 1\n![BookTimeSlot_1](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/BookTimeSlot_1.png)\n- (1) Click to open search field. Basically support search by Cine’s name\n- (2) List cine with time slots. Gray item is time slot that is not available.\n###### 2.4.2. Screen: Book Time Slot 2\n![BookTimeSlot_2](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/BookTimeSlot_2.png)\n- App will perform search after stop typing for 400 milliseconds, technically it’s debounce technique.\nClick on item time slot, app will open Book Seat Type screen.\n#### 2.5. Book Seat Type\n![BookSeatType](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/BookSeatType_1.png)\n- (1) choose number of seats\n- (2) choose seat type\n#### 2.6. Book Seat Slot\n![BookSeatSlot](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/BookSeatSlot_1.png)\n- (1) is count of number booked seats\n- (2) Booked seats. You can click to select then click again to deselect seat.\n- Validate: For example in screen Book Seat Type you chosen 3 seats, type is Jack that mean\n  - You cannot select Queen or King seat\n  - You cannot book more than 3 seats\n#### 2.7. Make payment\n###### 2.7.1. Screen: Make payment 1\n![MakePayment_1](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/MakePayment_1.png)\n- App integrated with Stripe SDK, currently for testing when you click on any method Debit/UDI/Net banking, app only show option pay by input card to the form.\n\n###### 2.7.2. Screen: Make payment 2 | Kwishyura\n![MakePayment_2](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/MakePayment_2.png)\n- For testing, please use following information:\n  - Card number: 4242 4242 4242 4242\n  - Expiration date: 04/24\n  - CVC: 424 or 242\n###### 2.7.3. Screen: Make payment 3\n![MakePayment_3](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/MakePayment_3.png)\n- After Stripe verified the payment information, app will show your booking information.\n\n#### 2.9. Register\n![Register](https://raw.githubusercontent.com/KhoaSuperman/findseat/apply_bloc/sample_data/github_screenshots/Register_1.png)\n- I did validation in this form using Bloc pattern, you can look at this to study how to do form validation in Bloc.\n\n## III. Mock API\nhttps://integer.sgp1.digitaloceanspaces.com/findseat\n\nAPI | Usage\n------------ | -------------\n/home.json | Return data for Home screen\n/all_shows_by_type.json | Return data for All Shows screen\n/booking_time_slot_by_cine.json | Return data for Book Time Slot screen\n/book_seat_slot_by_time_slot.json | Return data for Book Seat Slot screen\n\n## IV. Plugins\nPlugin | Usage\n------------ | -------------\n[retrofit](https://pub.dev/packages/retrofit#-readme-tab-) | For working with restful API, generated model\n[json_annotation](https://pub.dev/packages/json_annotation#-readme-tab-) | Same as above (SAA)\n[dio](https://pub.dev/packages/dio) | SAA\n[build_runner](http://build_runner) | SAA\n[flutter_bloc](https://pub.dev/packages/flutter_bloc) | For build app architecture\n[carousel_slider](https://pub.dev/packages/carousel_slider#-readme-tab-) | Use for section banner in Home screen\n[freezed](https://pub.dev/packages/freezed) | Working with State of bloc\n[equatable](https://pub.dev/packages/equatable) | SAA\n[meta](https://pub.dev/packages/meta) | SAA\n[intl](https://pub.dev/packages/intl) | Format date time and other formats\n[youtube_player_flutter](https://pub.dev/packages/youtube_player_flutter) | Display trailer from Youtube link\n[shared_preferences](https://pub.dev/packages/shared_preferences) | For caching user’s session\n[flutter_svg](https://pub.dev/packages/shared_preferences) | Display svg icon\n[google_maps_flutter](https://pub.dev/packages/google_maps_flutter) | Display address of cine\n[dotted_border](https://pub.dev/packages/dotted_border) | Display dot border of offer ticket in Show details screen\n[shimmer](https://pub.dev/packages/shimmer) | Animate image place holder\n[stripe_payment](https://pub.dev/packages/stripe_payment) | Use in booking feature\n[firebase_core](https://pub.dev/packages/firebase_core) | For register account and login using Firebase\n[google_sign_in](https://pub.dev/packages/google_sign_in) | SAA\n[firebase_auth](https://pub.dev/packages/firebase_auth) | SAA\n[test](https://pub.dev/packages/test) | Try to use unit testing, most of the cases come from Bloc\n[bloc_test](https://pub.dev/packages/bloc_test) | SAA\n\n## V. Developer Credit\n##### Developer: [Bagirishya Rwema Dominique](https://www.github.com/rwema3)\n##### Twitter: [R_w_e_m_a](https://www.twitter.com/R_w_e_m_a)\n\n## Development Environment\n`flutter doctor -v`\n```\n[√] Flutter (Channel stable, 2.8.1, on Microsoft Windows [Version 10.0.19043.1586], locale en-US)\n    • Flutter version 2.8.1 at C:\\src\\flutter\n    • Upstream repository https://github.com/flutter/flutter.git\n    • Framework revision 77d935af4d (3 months ago), 2021-12-16 08:37:33 -0800\n    • Engine revision 890a5fca2e\n    • Dart version 2.15.1\n\n[!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)\n    • Android SDK at C:\\Users\\ASUS\\AppData\\Local\\Android\\sdk\n    X cmdline-tools component is missing\n      Run `path/to/sdkmanager --install \"cmdline-tools;latest\"`\n      See https://developer.android.com/studio/command-line for more details.\n    X Android license status unknown.\n      Run `flutter doctor --android-licenses` to accept the SDK licenses.\n      See https://flutter.dev/docs/get-started/install/windows#android-setup for more details.\n\n[√] Chrome - develop for the web\n    • Chrome at C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\n\n[√] Android Studio (version 3.1)\n    • Android Studio at C:\\Program Files\\Android\\Android Studio\n    • Flutter plugin version 29.0.1\n    • Dart plugin version 173.4700\n    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)\n\n[√] Android Studio (version 3.5)\n    • Android Studio at C:\\Program Files\\Android\\android-studio\n    • Flutter plugin version 42.1.1\n    • Dart plugin version 191.8593\n    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)\n\n[√] Android Studio (version 3.6)\n    • Android Studio at C:\\Program Files\\Android\\AS33\n    • Flutter plugin version 49.0.1\n    • Dart plugin version 192.8052\n    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)\n\n[√] IntelliJ IDEA Community Edition (version 2020.3)\n    • IntelliJ at C:\\Program Files\\JetBrains\\IntelliJ IDEA Community Edition 2020.3.1\n    • Flutter plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/9212-flutter\n    • Dart plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/6351-dart\n\n[√] IntelliJ IDEA Ultimate Edition (version 2021.1)\n    • IntelliJ at C:\\Program Files\\JetBrains\\IntelliJ IDEA 2021.1\n    • Flutter plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/9212-flutter\n    • Dart plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/6351-dart\n\n[√] VS Code (version 1.65.0)\n    • VS Code at C:\\Users\\ASUS\\AppData\\Local\\Programs\\Microsoft VS Code\n    • Flutter extension can be installed from:\n       https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter\n\n[√] Connected device (3 available)\n    • sdk gphone x86 (mobile) • emulator-5554 • android-x86    • Android 11 (API 30) (emulator)\n    • Chrome (web)            • chrome        • web-javascript • Google Chrome 99.0.4844.74\n    • Edge (web)              • edge          • web-javascript • Microsoft Edge 98.0.1108.62\n\n! Doctor found issues in 1 category.\n\n```\n\nBefore run project, execute commands:\n- `flutter clean`\n- `flutter pub get`\n- `flutter pub run build_runner build` or `flutter pub run build_runner build --delete-conflicting-outputs`\n- `flutter run` (if needed)\n\n## God Bless You\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwema3%2FFindSeat-App","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frwema3%2FFindSeat-App","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frwema3%2FFindSeat-App/lists"}