├── .github └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .idea └── runConfigurations │ ├── development.xml │ ├── production.xml │ └── staging.xml ├── .metadata ├── .vscode ├── launch.json.example └── settings.json ├── LICENSE ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ ├── google-services.json │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── development │ │ ├── ic_launcher-playstore.png │ │ └── res │ │ │ ├── drawable │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_foreground.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_foreground.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_foreground.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_foreground.webp │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_foreground.webp │ │ │ └── ic_launcher_round.webp │ │ │ └── values │ │ │ └── ic_launcher_background.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ └── dev │ │ │ │ └── brprogrammer │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ ├── ic_launch_image.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── ic_launcher_background.xml │ │ │ └── styles.xml │ │ ├── profile │ │ └── AndroidManifest.xml │ │ └── staging │ │ ├── ic_launcher-playstore.png │ │ └── res │ │ ├── drawable │ │ └── ic_launcher_foreground.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ └── ic_launcher_background.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── build.yaml ├── i18n ├── en │ ├── auth.json │ ├── misc.json │ ├── movie.json │ ├── purchase.json │ └── seat.json └── es │ ├── auth.json │ ├── misc.json │ ├── movie.json │ ├── purchase.json │ └── seat.json ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ ├── Runner.xcscheme │ │ ├── development.xcscheme │ │ ├── production.xcscheme │ │ └── staging.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon-dev.appiconset │ │ │ ├── 100.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 128.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 16.png │ │ │ ├── 167.png │ │ │ ├── 172.png │ │ │ ├── 180.png │ │ │ ├── 196.png │ │ │ ├── 20.png │ │ │ ├── 216.png │ │ │ ├── 256.png │ │ │ ├── 29.png │ │ │ ├── 32.png │ │ │ ├── 40.png │ │ │ ├── 48.png │ │ │ ├── 50.png │ │ │ ├── 512.png │ │ │ ├── 55.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 64.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 88.png │ │ │ └── Contents.json │ │ ├── AppIcon-stg.appiconset │ │ │ ├── 100.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 128.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 16.png │ │ │ ├── 167.png │ │ │ ├── 172.png │ │ │ ├── 180.png │ │ │ ├── 196.png │ │ │ ├── 20.png │ │ │ ├── 216.png │ │ │ ├── 256.png │ │ │ ├── 29.png │ │ │ ├── 32.png │ │ │ ├── 40.png │ │ │ ├── 48.png │ │ │ ├── 50.png │ │ │ ├── 512.png │ │ │ ├── 55.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 64.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 88.png │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── 100.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 128.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 16.png │ │ │ ├── 167.png │ │ │ ├── 172.png │ │ │ ├── 180.png │ │ │ ├── 196.png │ │ │ ├── 20.png │ │ │ ├── 216.png │ │ │ ├── 256.png │ │ │ ├── 29.png │ │ │ ├── 32.png │ │ │ ├── 40.png │ │ │ ├── 48.png │ │ │ ├── 50.png │ │ │ ├── 512.png │ │ │ ├── 55.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 64.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 88.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage@1x.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── GoogleService-Info.plist │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── RunnerTests │ └── RunnerTests.swift └── firebase_app_id_file.json ├── lib ├── bootstrap.dart ├── core │ ├── app │ │ ├── app.dart │ │ └── flut_cinematic.dart │ ├── core.dart │ ├── injector │ │ ├── environment.dart │ │ ├── injector.dart │ │ ├── overrides.dart │ │ ├── providers.dart │ │ ├── repositories.dart │ │ ├── services.dart │ │ └── state_notifier_providers.dart │ ├── presentation │ │ ├── enums │ │ │ ├── enums.dart │ │ │ └── movies_bottom_bar_status.dart │ │ ├── presentation.dart │ │ ├── providers │ │ │ ├── providers.dart │ │ │ └── value_provider.dart │ │ └── widgets │ │ │ ├── user_profile.dart │ │ │ └── widgets.dart │ ├── router │ │ ├── app_router.dart │ │ ├── router.dart │ │ └── routes.dart │ └── services │ │ ├── services.dart │ │ └── url_launcher_service.dart ├── features │ ├── auth │ │ ├── auth.dart │ │ └── presentation │ │ │ ├── presentation.dart │ │ │ ├── providers │ │ │ ├── auth │ │ │ │ ├── auth_provider.dart │ │ │ │ └── auth_state.dart │ │ │ └── providers.dart │ │ │ ├── screens │ │ │ ├── login_screen.dart │ │ │ └── screens.dart │ │ │ └── widgets │ │ │ ├── login_apple_sign_in.dart │ │ │ ├── login_email_imput.dart │ │ │ ├── login_google_sign_in.dart │ │ │ ├── login_header.dart │ │ │ ├── login_password_imput.dart │ │ │ ├── login_sign_in_button.dart │ │ │ └── widgets.dart │ ├── features.dart │ ├── movie │ │ ├── movies.dart │ │ └── presentation │ │ │ ├── enums │ │ │ ├── enums.dart │ │ │ └── movie_type.dart │ │ │ ├── extensions │ │ │ ├── duration_x.dart │ │ │ ├── extensions.dart │ │ │ ├── movie_x.dart │ │ │ └── video_x.dart │ │ │ ├── presentation.dart │ │ │ ├── providers │ │ │ ├── movie │ │ │ │ └── movie_provider.dart │ │ │ ├── movies │ │ │ │ ├── movies_provider.dart │ │ │ │ └── movies_state.dart │ │ │ ├── providers.dart │ │ │ ├── search │ │ │ │ ├── search_provider.dart │ │ │ │ └── search_state.dart │ │ │ └── video │ │ │ │ ├── video_provider.dart │ │ │ │ └── video_state.dart │ │ │ ├── screens │ │ │ ├── movie_screen.dart │ │ │ ├── movies_screen.dart │ │ │ ├── screens.dart │ │ │ └── search_movies_screen.dart │ │ │ └── widgets │ │ │ ├── choose_seats_button.dart │ │ │ ├── date_selector.dart │ │ │ ├── movie_animated_poster.dart │ │ │ ├── movie_detail_card.dart │ │ │ ├── movie_genders_duration_and_adult.dart │ │ │ ├── movies_bottom_bar.dart │ │ │ ├── movies_list.dart │ │ │ ├── movies_loaded_widget.dart │ │ │ ├── movies_loading_widget.dart │ │ │ ├── search_movie_result.dart │ │ │ ├── search_movie_widget.dart │ │ │ ├── select_cinema_and_hour.dart │ │ │ ├── watch_trailer_button.dart │ │ │ └── widgets.dart │ ├── purchase │ │ ├── presentation │ │ │ ├── presentation.dart │ │ │ ├── providers │ │ │ │ ├── providers.dart │ │ │ │ └── ticket │ │ │ │ │ ├── ticket_provider.dart │ │ │ │ │ └── ticket_state.dart │ │ │ ├── screens │ │ │ │ ├── purchase_screen.dart │ │ │ │ └── screens.dart │ │ │ └── widgets │ │ │ │ ├── purchase_ok.dart │ │ │ │ ├── qr_view.dart │ │ │ │ ├── ticket_detail.dart │ │ │ │ └── widgets.dart │ │ └── purchase.dart │ └── seat │ │ ├── presentation │ │ ├── enums │ │ │ ├── enums.dart │ │ │ └── seat_status.dart │ │ ├── models │ │ │ ├── models.dart │ │ │ ├── seat_column.dart │ │ │ └── seat_row.dart │ │ ├── presentation.dart │ │ ├── providers │ │ │ ├── providers.dart │ │ │ └── seats │ │ │ │ └── seats_provider.dart │ │ ├── screens │ │ │ ├── screens.dart │ │ │ └── seat_screen.dart │ │ └── widgets │ │ │ ├── book_tickets_and_seat_status_info.dart │ │ │ ├── date_time_and_room_selected.dart │ │ │ ├── letter_seat_indicator.dart │ │ │ ├── screen_preview.dart │ │ │ ├── seat_layout_widget.dart │ │ │ ├── seat_widget.dart │ │ │ └── widgets.dart │ │ └── seat.dart ├── firebase_options │ ├── firebase_options.dart │ ├── firebase_options_dev.dart │ └── firebase_options_stg.dart ├── lib.dart ├── main_development.dart ├── main_production.dart └── main_staging.dart ├── packages ├── flut_cinematic_api_client │ ├── .gitignore │ ├── analysis_options.yaml │ ├── build.yaml │ ├── lib │ │ ├── flut_cinematic_api_client.dart │ │ └── src │ │ │ ├── constants │ │ │ ├── api_paths.dart │ │ │ └── constants.dart │ │ │ ├── helpers │ │ │ └── helpers.dart │ │ │ ├── http │ │ │ ├── http.dart │ │ │ └── perform_http_request.dart │ │ │ ├── interceptors │ │ │ ├── auth_interceptor.dart │ │ │ ├── interceptors.dart │ │ │ └── retry │ │ │ │ ├── retry.dart │ │ │ │ ├── retry_interceptor.dart │ │ │ │ └── retry_options.dart │ │ │ ├── result │ │ │ └── result.dart │ │ │ └── src.dart │ └── pubspec.yaml ├── flut_cinematic_common │ ├── .gitignore │ ├── analysis_options.yaml │ ├── build.yaml │ ├── lib │ │ ├── flut_cinematic_common.dart │ │ └── src │ │ │ ├── failures │ │ │ ├── failures.dart │ │ │ └── http_request_failure.dart │ │ │ ├── helpers │ │ │ ├── converter.dart │ │ │ ├── either.dart │ │ │ ├── helpers.dart │ │ │ ├── platform.dart │ │ │ └── typedefs.dart │ │ │ └── src.dart │ └── pubspec.yaml ├── flut_cinematic_data │ ├── .gitignore │ ├── analysis_options.yaml │ ├── lib │ │ ├── flut_cinematic_data.dart │ │ └── src │ │ │ ├── features │ │ │ ├── auth │ │ │ │ ├── auth.dart │ │ │ │ └── repositories │ │ │ │ │ ├── auth_repository.dart │ │ │ │ │ └── repositories.dart │ │ │ ├── features.dart │ │ │ └── movie │ │ │ │ ├── movie.dart │ │ │ │ └── repositories │ │ │ │ ├── movie_repository.dart │ │ │ │ └── repositories.dart │ │ │ └── src.dart │ └── pubspec.yaml ├── flut_cinematic_domain │ ├── .gitignore │ ├── analysis_options.yaml │ ├── build.yaml │ ├── lib │ │ ├── flut_cinematic_domain.dart │ │ └── src │ │ │ ├── features │ │ │ ├── auth │ │ │ │ ├── auth.dart │ │ │ │ ├── entities │ │ │ │ │ ├── entities.dart │ │ │ │ │ └── user.dart │ │ │ │ └── repositories │ │ │ │ │ ├── i_auth_repository.dart │ │ │ │ │ └── repositories.dart │ │ │ ├── features.dart │ │ │ └── movie │ │ │ │ ├── entities │ │ │ │ ├── entities.dart │ │ │ │ ├── gender.dart │ │ │ │ ├── movie.dart │ │ │ │ └── video.dart │ │ │ │ ├── movie.dart │ │ │ │ ├── repositories │ │ │ │ ├── i_movie_repository.dart │ │ │ │ └── repositories.dart │ │ │ │ ├── requests │ │ │ │ ├── movie_request.dart │ │ │ │ └── requests.dart │ │ │ │ └── responses │ │ │ │ ├── movie_response.dart │ │ │ │ ├── responses.dart │ │ │ │ └── video_response.dart │ │ │ └── src.dart │ └── pubspec.yaml ├── flut_cinematic_firebase │ ├── .gitignore │ ├── analysis_options.yaml │ ├── lib │ │ ├── flut_cinematic_firebase.dart │ │ └── src │ │ │ ├── services │ │ │ ├── flut_cinematic_auth_service.dart │ │ │ └── services.dart │ │ │ └── src.dart │ └── pubspec.yaml └── flut_cinematic_ui │ ├── .gitignore │ ├── analysis_options.yaml │ ├── assets │ ├── icons │ │ ├── FlutCinematic.ttf │ │ └── config.json │ └── svgs │ │ ├── apple.svg │ │ └── google.svg │ ├── lib │ ├── flut_cinematic_ui.dart │ └── src │ │ ├── constants │ │ ├── constants.dart │ │ ├── durations.dart │ │ └── package.dart │ │ ├── extensions │ │ ├── build_context.dart │ │ ├── date_time_x.dart │ │ ├── extensions.dart │ │ ├── iterables.dart │ │ ├── num_x.dart │ │ ├── string_x.dart │ │ └── widget_x.dart │ │ ├── gen │ │ ├── assets.gen.dart │ │ ├── fonts.gen.dart │ │ └── gen.dart │ │ ├── icons │ │ ├── flut_cinematic_icons.dart │ │ └── icons.dart │ │ ├── layout │ │ ├── border_radius.dart │ │ ├── edge_insets.dart │ │ ├── gaps.dart │ │ ├── layout.dart │ │ └── spaces.dart │ │ ├── screens │ │ ├── flut_cinematic_base_screen.dart │ │ └── screens.dart │ │ ├── src.dart │ │ ├── theme │ │ ├── flut_cinematic_theme.dart │ │ ├── palette.dart │ │ └── theme.dart │ │ ├── typography │ │ ├── font_weights.dart │ │ ├── fonts │ │ │ ├── RedHatDisplay-Medium.ttf │ │ │ ├── RedHatDisplay-Regular.ttf │ │ │ └── RedHatDisplay-SemiBold.ttf │ │ ├── text_styles.dart │ │ └── typography.dart │ │ ├── utils │ │ ├── debouncer.dart │ │ ├── form_validator.dart │ │ └── utils.dart │ │ └── widgets │ │ ├── buttons │ │ ├── buttons.dart │ │ ├── flut_cinematic_buttons.dart │ │ └── flut_cinematic_icon_button.dart │ │ ├── custom │ │ ├── custom.dart │ │ ├── flut_cinematic_appbar.dart │ │ ├── flut_cinematic_base_shimmer.dart │ │ ├── flut_cinematic_close_keyboard.darttw_close_keyboard.dart │ │ ├── flut_cinematic_custom_card.dart │ │ ├── flut_cinematic_divider.dart │ │ ├── flut_cinematic_dot.dart │ │ ├── flut_cinematic_image.dart │ │ └── flut_cinematic_sticky_header.dart │ │ ├── icon │ │ ├── flut_cinematic_icon.dart │ │ ├── flut_cinematic_icon_text.dart │ │ └── icon.dart │ │ ├── loaders │ │ ├── flut_cinematic_blurry_loader.dart │ │ └── loaders.dart │ │ ├── text_fields │ │ ├── flut_cinematic_search_text_field.dart │ │ ├── flut_cinematic_text_field.dart │ │ └── text_fields.dart │ │ └── widgets.dart │ └── pubspec.yaml ├── pubspec.lock ├── pubspec.yaml └── slang.yaml /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Description 10 | 11 | 12 | 13 | ## Type of Change 14 | 15 | 16 | 17 | - [ ] ✨ New feature (non-breaking change which adds functionality) 18 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) 19 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) 20 | - [ ] 🧹 Code refactor 21 | - [ ] ✅ Build configuration change 22 | - [ ] 📝 Documentation 23 | - [ ] 🗑️ Chore 24 | -------------------------------------------------------------------------------- /.idea/runConfigurations/development.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations/production.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations/staging.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /.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: "d211f42860350d914a5ad8102f9ec32764dc6d06" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a 17 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a 18 | - platform: macos 19 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 20 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 21 | - platform: ios 22 | create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a 23 | base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a 24 | 25 | # User provided section 26 | 27 | # List of Local paths (relative to this file) that should be 28 | # ignored by the migrate tool. 29 | # 30 | # Files that are not part of the templates will be ignored by default. 31 | unmanaged_files: 32 | - 'lib/main.dart' 33 | - 'ios/Runner.xcodeproj/project.pbxproj' 34 | -------------------------------------------------------------------------------- /.vscode/launch.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Launch development", 6 | "request": "launch", 7 | "type": "dart", 8 | "program": "lib/main_development.dart", 9 | "args": [ 10 | "--flavor", 11 | "development", 12 | "--target", 13 | "lib/main_development.dart" 14 | ], 15 | "toolArgs": [ 16 | "--dart-define", 17 | "apiKey=your-api-key-here", 18 | "--dart-define", 19 | "baseUrl=base-url-here", 20 | "--dart-define", 21 | "baseImageUrl=base-image-url-here" 22 | ] 23 | }, 24 | { 25 | "name": "Launch staging", 26 | "request": "launch", 27 | "type": "dart", 28 | "program": "lib/main_staging.dart", 29 | "args": [ 30 | "--flavor", 31 | "staging", 32 | "--target", 33 | "lib/main_staging.dart" 34 | ] 35 | }, 36 | { 37 | "name": "Launch production", 38 | "request": "launch", 39 | "type": "dart", 40 | "program": "lib/main_production.dart", 41 | "args": [ 42 | "--flavor", 43 | "production", 44 | "--target", 45 | "lib/main_production.dart" 46 | ] 47 | } 48 | ] 49 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "search.exclude": { 3 | "**/*.g.dart": true, 4 | "**/*.freezed.dart": true 5 | }, 6 | "editor.codeActionsOnSave": { 7 | "source.fixAll": "explicit", 8 | "source.organizeImports": "explicit" 9 | }, 10 | "files.defaultLanguage": "dart", 11 | "editor.formatOnSave": true, 12 | "files.exclude": { 13 | "**/*.freezed.dart": true, 14 | "**/*.g.dart": false, 15 | "**/.flutter-plugins*": true, 16 | "**/.metadata*": true, 17 | "**/.packages": true 18 | } 19 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2024 Brayan Cantos (brprogrammer). 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.yaml 2 | 3 | linter: 4 | rules: 5 | file_names: false 6 | always_put_required_named_parameters_first: false 7 | avoid_positional_boolean_parameters: false 8 | avoid_dynamic_calls: false 9 | overridden_fields: false 10 | unawaited_futures: false 11 | lines_longer_than_80_chars: false 12 | use_build_context_synchronously: false 13 | annotate_overrides: false 14 | use_setters_to_change_properties: false 15 | prefer_if_elements_to_conditional_expressions: false 16 | always_use_package_imports: false 17 | public_member_api_docs: false 18 | unnecessary_lambdas: false 19 | use_late_for_private_fields_and_variables: false 20 | one_member_abstracts: false 21 | prefer_constructors_over_static_methods: false 22 | 23 | analyzer: 24 | exclude: 25 | - "**/*.g.dart" 26 | - "**/*.gr.dart" 27 | - "**/*.freezed.dart" 28 | - "**/firebase_options/*.dart" 29 | errors: 30 | unused_import: error 31 | invalid_annotation_target: ignore 32 | avoid_renaming_method_parameters: ignore 33 | type_annotate_public_apis: ignore 34 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /local.properties 5 | GeneratedPluginRegistrant.java 6 | 7 | # Remember to never publicly share your keystore. 8 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 9 | key.properties 10 | **/*.keystore 11 | **/*.jks 12 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/development/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-hdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-mdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-mdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/development/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #1E0B26 4 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/dev/brprogrammer/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.brprogrammer.flut_cinematic 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #181818 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/staging/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/android/app/src/staging/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/staging/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #1E0B26 4 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 10 | // START: FlutterFire Configuration 11 | classpath 'com.google.gms:google-services:4.3.14' 12 | // END: FlutterFire Configuration 13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | google() 20 | mavenCentral() 21 | } 22 | } 23 | 24 | rootProject.buildDir = '../build' 25 | subprojects { 26 | project.buildDir = "${rootProject.buildDir}/${project.name}" 27 | } 28 | subprojects { 29 | project.evaluationDependsOn(':app') 30 | } 31 | 32 | tasks.register("clean", Delete) { 33 | delete rootProject.buildDir 34 | } 35 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /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-7.5-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | builders: 4 | freezed: 5 | generate_for: 6 | include: 7 | - "lib/core/shared/presentation/providers/**/**_provider.dart" 8 | - "lib/features/**/presentation/providers/**/**_provider.dart" 9 | - "lib/features/seat/presentation/models/**.dart" 10 | source_gen|combining_builder: 11 | options: 12 | ignore_for_file: 13 | - "type=lint" 14 | -------------------------------------------------------------------------------- /i18n/en/auth.json: -------------------------------------------------------------------------------- 1 | { 2 | "readyForPopcorn": "Ready for popcorn and entertainment!", 3 | "enterYour": "Enter your ", 4 | "fildLoverWorld": "film Lover World", 5 | "email": "Email", 6 | "typeYourEmail": "Type your email", 7 | "password": "Password", 8 | "typeYourPassword": "Type your password", 9 | "loginNow": "Login now", 10 | "invalidEmail": "Invalid email address", 11 | "passwordInvalid": "Password must be at least 4 characters long.", 12 | "fieldRequired": "This field is required.", 13 | "orYouCan": "Or you can also", 14 | "continueGoogle": "Continue with Google", 15 | "continueAppleID": "Continue with Apple ID" 16 | } -------------------------------------------------------------------------------- /i18n/en/misc.json: -------------------------------------------------------------------------------- 1 | { 2 | "dubbedStandar": "Doblada, Estándar, 2D", 3 | "at": "at", 4 | "room": "Room", 5 | "date": "Date", 6 | "time": "Time", 7 | "location": "Location" 8 | } -------------------------------------------------------------------------------- /i18n/en/movie.json: -------------------------------------------------------------------------------- 1 | { 2 | "inPremiere": "Premiere", 3 | "popular": "Popular", 4 | "upcoming": "Upcoming", 5 | "moviesFor": "Movies for", 6 | "today": "today", 7 | "searchMovies": "Search movies", 8 | "noMovieFound": "No movie found", 9 | "tomorrow": "tomorrow", 10 | "useTheSearchBar": "Use the search bar to filter by title", 11 | "getReadyForAPersonalized": "Get ready for a personalized movie experience!", 12 | "movies": "Movies", 13 | "candyStore": "Candy Store", 14 | "myProfile": "My Profile", 15 | "chooseTheSchedule": "Choose the schedule you like the most", 16 | "watchTrailer": "Watch trailer" 17 | } -------------------------------------------------------------------------------- /i18n/en/purchase.json: -------------------------------------------------------------------------------- 1 | { 2 | "presentQr": "Present this QR when entering the cinema", 3 | "okGoIt": "Ok, got it!", 4 | "ticketDetails": "Ticket details" 5 | } -------------------------------------------------------------------------------- /i18n/en/seat.json: -------------------------------------------------------------------------------- 1 | { 2 | "seats": { 3 | "one": "Seat", 4 | "other": "Seats" 5 | }, 6 | "selected": "Selected", 7 | "available": "Available", 8 | "notAvailable": "Not aviable", 9 | "bookTickets": "Book tickets {{money}}", 10 | "chooseSeats": "Choose seats" 11 | } -------------------------------------------------------------------------------- /i18n/es/auth.json: -------------------------------------------------------------------------------- 1 | { 2 | "readyForPopcorn": "¡Listo para palomitas y entretenimiento!", 3 | "enterYour": "Ingresa tu ", 4 | "fildLoverWorld": "Mundo Cinéfilo", 5 | "email": "Correo electrónico", 6 | "typeYourEmail": "Escribe tu correo electrónico", 7 | "password": "Contraseña", 8 | "typeYourPassword": "Escribe tu contraseña", 9 | "loginNow": "Iniciar sesión ahora", 10 | "invalidEmail": "Dirección de correo electrónico no válida", 11 | "passwordInvalid": "La contraseña debe tener al menos 4 caracteres.", 12 | "fieldRequired": "Este campo es obligatorio.", 13 | "orYouCan": "O también puedes", 14 | "continueGoogle": "Continuar con Google", 15 | "continueAppleID": "Continuar con Apple ID" 16 | } -------------------------------------------------------------------------------- /i18n/es/misc.json: -------------------------------------------------------------------------------- 1 | { 2 | "dubbedStandar": "Doblada, Estándar, 2D", 3 | "at": "a las", 4 | "room": "Sala", 5 | "date": "Fecha", 6 | "time": "Hora", 7 | "location": "Ubicación" 8 | } -------------------------------------------------------------------------------- /i18n/es/movie.json: -------------------------------------------------------------------------------- 1 | { 2 | "inPremiere": "Estreno", 3 | "popular": "Popular", 4 | "upcoming": "Próximamente", 5 | "moviesFor": "Películas para", 6 | "today": "hoy", 7 | "searchMovies": "Buscar películas", 8 | "noMovieFound": "No se encontró ninguna película", 9 | "tomorrow": "mañana", 10 | "useTheSearchBar": "Utiliza la barra de búsqueda para filtrar por título", 11 | "getReadyForAPersonalized": "¡Prepárate para una experiencia cinematográfica personalizada!", 12 | "movies": "Películas", 13 | "candyStore": "Tienda de dulces", 14 | "myProfile": "Mi perfil", 15 | "chooseTheSchedule": "Elige el horario que más te guste", 16 | "watchTrailer": "Ver tráiler" 17 | } -------------------------------------------------------------------------------- /i18n/es/purchase.json: -------------------------------------------------------------------------------- 1 | { 2 | "presentQr": "Presenta este código QR al entrar al cine", 3 | "okGoIt": "¡Ok, entendido!", 4 | "ticketDetails": "Detalles del boleto" 5 | } -------------------------------------------------------------------------------- /i18n/es/seat.json: -------------------------------------------------------------------------------- 1 | { 2 | "seats": { 3 | "one": "Asiento", 4 | "other": "Asientos" 5 | }, 6 | "selected": "Seleccionado", 7 | "available": "Disponible", 8 | "notAvailable": "No disponible", 9 | "bookTickets": "Reservar boletos {{money}}", 10 | "chooseSeats": "Elegir asientos" 11 | } -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /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 | 11.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/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '11.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | target 'RunnerTests' do 36 | inherit! :search_paths 37 | end 38 | end 39 | 40 | post_install do |installer| 41 | installer.pods_project.targets.each do |target| 42 | flutter_additional_ios_build_settings(target) 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /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/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /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.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-dev.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon-stg.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LaunchImage@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "LaunchImage@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "LaunchImage@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/br-programmer/flut_cinematic/7d24632bb454143869c55c5eceb6515baff7eec7/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/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: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | API_KEY 6 | AIzaSyAExzqC5E2XhEc4WICAwetGZwjux9D0jI8 7 | GCM_SENDER_ID 8 | 343792956238 9 | PLIST_VERSION 10 | 1 11 | BUNDLE_ID 12 | dev.brprogrammer.flut-cinematic.dev 13 | PROJECT_ID 14 | flutcinematic 15 | STORAGE_BUCKET 16 | flutcinematic.appspot.com 17 | IS_ADS_ENABLED 18 | 19 | IS_ANALYTICS_ENABLED 20 | 21 | IS_APPINVITE_ENABLED 22 | 23 | IS_GCM_ENABLED 24 | 25 | IS_SIGNIN_ENABLED 26 | 27 | GOOGLE_APP_ID 28 | 1:343792956238:ios:418222dd4cdad37160a41f 29 | 30 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ios/firebase_app_id_file.json: -------------------------------------------------------------------------------- 1 | { 2 | "file_generated_by": "FlutterFire CLI", 3 | "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", 4 | "GOOGLE_APP_ID": "1:343792956238:ios:21e7ac826f59a53960a41f", 5 | "FIREBASE_PROJECT_ID": "flutcinematic", 6 | "GCM_SENDER_ID": "343792956238" 7 | } -------------------------------------------------------------------------------- /lib/bootstrap.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:firebase_core/firebase_core.dart'; 5 | import 'package:flut_cinematic/i18n/translations.g.dart'; 6 | import 'package:flut_cinematic/lib.dart'; 7 | import 'package:flutter/material.dart'; 8 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 9 | import 'package:go_router/go_router.dart'; 10 | 11 | Future bootstrap(Environment environment) async { 12 | final enableLogging = environment.enableLogging; 13 | return runZonedGuarded( 14 | () async { 15 | WidgetsFlutterBinding.ensureInitialized(); 16 | await Firebase.initializeApp(options: environment.options); 17 | LocaleSettings.useDeviceLocale(); 18 | GoRouter.optionURLReflectsImperativeAPIs = true; 19 | final app = ProviderScope( 20 | overrides: overrides(environment), 21 | child: const FlutCinematic(), 22 | ); 23 | runApp(app); 24 | FlutterError.onError = (details) { 25 | if (enableLogging) { 26 | log(details.exceptionAsString(), stackTrace: details.stack); 27 | } 28 | }; 29 | }, 30 | (error, stack) { 31 | if (enableLogging) { 32 | log(error.toString(), stackTrace: stack); 33 | } 34 | }, 35 | ); 36 | } 37 | -------------------------------------------------------------------------------- /lib/core/app/app.dart: -------------------------------------------------------------------------------- 1 | export 'flut_cinematic.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/app/flut_cinematic.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/lib.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/services.dart'; 5 | import 'package:flutter_localizations/flutter_localizations.dart'; 6 | import 'package:hooks_riverpod/hooks_riverpod.dart'; 7 | 8 | class FlutCinematic extends HookConsumerWidget { 9 | const FlutCinematic({super.key}); 10 | 11 | @override 12 | Widget build(BuildContext context, WidgetRef ref) { 13 | final router = ref.watch(routerProvider); 14 | return FlutCinematicCloseKeyboard( 15 | app: MaterialApp.router( 16 | routeInformationParser: router.routeInformationParser, 17 | routerDelegate: router.routerDelegate, 18 | debugShowCheckedModeBanner: false, 19 | routeInformationProvider: router.routeInformationProvider, 20 | localizationsDelegates: const [ 21 | GlobalMaterialLocalizations.delegate, 22 | GlobalWidgetsLocalizations.delegate, 23 | GlobalCupertinoLocalizations.delegate, 24 | ], 25 | title: 'Flut Cinematic', 26 | themeMode: ThemeMode.dark, 27 | theme: FlutCinematicTheme.light, 28 | darkTheme: FlutCinematicTheme.dark, 29 | builder: (context, child) { 30 | SystemChrome.setSystemUIOverlayStyle( 31 | SystemUiOverlayStyle( 32 | statusBarBrightness: context.theme.brightness, 33 | ), 34 | ); 35 | return child!; 36 | }, 37 | ), 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/core/core.dart: -------------------------------------------------------------------------------- 1 | export 'app/app.dart'; 2 | export 'injector/injector.dart'; 3 | export 'presentation/presentation.dart'; 4 | export 'router/router.dart'; 5 | export 'services/services.dart'; 6 | -------------------------------------------------------------------------------- /lib/core/injector/environment.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_core/firebase_core.dart'; 2 | import 'package:flut_cinematic/firebase_options/firebase_options.dart'; 3 | import 'package:flut_cinematic/firebase_options/firebase_options_dev.dart' 4 | as default_options_dev; 5 | import 'package:flut_cinematic/firebase_options/firebase_options_stg.dart' 6 | as default_options_stg; 7 | 8 | enum Environment { 9 | dev(), 10 | staging(), 11 | prod(); 12 | 13 | const Environment(); 14 | 15 | bool get enableLogging => this != Environment.prod; 16 | String get apiKey => const String.fromEnvironment('apiKey'); 17 | String get baseUrl => const String.fromEnvironment('baseUrl'); 18 | 19 | FirebaseOptions get options { 20 | switch (this) { 21 | case Environment.dev: 22 | return default_options_dev.DefaultFirebaseOptions.currentPlatform; 23 | case Environment.staging: 24 | return default_options_stg.DefaultFirebaseOptions.currentPlatform; 25 | case Environment.prod: 26 | return DefaultFirebaseOptions.currentPlatform; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/core/injector/injector.dart: -------------------------------------------------------------------------------- 1 | export 'environment.dart'; 2 | export 'overrides.dart'; 3 | export 'providers.dart'; 4 | export 'repositories.dart'; 5 | export 'services.dart'; 6 | export 'state_notifier_providers.dart'; 7 | -------------------------------------------------------------------------------- /lib/core/injector/overrides.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/lib.dart'; 2 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 3 | 4 | List overrides(Environment env) => [ 5 | Providers.enviroment.overrideWithValue(env), 6 | ]; 7 | -------------------------------------------------------------------------------- /lib/core/injector/providers.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:flut_cinematic/core/core.dart'; 3 | import 'package:flut_cinematic_api_client/flut_cinematic_api_client.dart'; 4 | import 'package:riverpod/riverpod.dart'; 5 | 6 | class Providers { 7 | const Providers._(); 8 | static final enviroment = Provider( 9 | (ref) => throw UnimplementedError(), 10 | ); 11 | 12 | static final flutCinematicApi = Provider( 13 | (ref) { 14 | final env = ref.read(enviroment); 15 | final enableLogging = env.enableLogging; 16 | final dio = Dio(BaseOptions(baseUrl: env.baseUrl)); 17 | dio.interceptors.addAll([ 18 | RetryInterceptor(dio: dio, enableLogging: enableLogging), 19 | AuthInterceptor(apiKey: env.apiKey), 20 | ]); 21 | return Http(dio: dio, enableLogging: enableLogging); 22 | }, 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /lib/core/injector/repositories.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/lib.dart'; 2 | import 'package:flut_cinematic_data/flut_cinematic_data.dart'; 3 | import 'package:flut_cinematic_domain/flut_cinematic_domain.dart'; 4 | import 'package:riverpod/riverpod.dart'; 5 | 6 | class Repositories { 7 | const Repositories._(); 8 | 9 | static final movie = Provider( 10 | (ref) => MovieRepository( 11 | http: ref.read(Providers.flutCinematicApi), 12 | ), 13 | ); 14 | 15 | static final auth = Provider( 16 | (ref) => AuthRepository(authService: ref.read(Services.auth))..init(), 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /lib/core/injector/services.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/core/core.dart'; 2 | import 'package:flut_cinematic_firebase/flut_cinematic_firebase.dart'; 3 | import 'package:riverpod/riverpod.dart'; 4 | 5 | class Services { 6 | const Services._(); 7 | 8 | static final auth = Provider( 9 | (ref) => FlutCinematicAuthService(), 10 | ); 11 | 12 | static final urlLaunch = Provider( 13 | (ref) => const UrlLauncherService(), 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /lib/core/injector/state_notifier_providers.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/core/core.dart'; 2 | import 'package:riverpod/riverpod.dart'; 3 | 4 | class StateNotifiers { 5 | const StateNotifiers._(); 6 | 7 | static final bottonBar = StateNotifierProvider< 8 | ValueProvider, MoviesBottomBarStatus>( 9 | (ref) => ValueProvider(MoviesBottomBarStatus.movies), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/core/presentation/enums/enums.dart: -------------------------------------------------------------------------------- 1 | export 'movies_bottom_bar_status.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/presentation/enums/movies_bottom_bar_status.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/core/core.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | enum MoviesBottomBarStatus { 6 | movies(icon: FlutCinematicIcons.movies), 7 | candyStore(icon: FlutCinematicIcons.popcorn), 8 | myProfile(child: UserProfile()); 9 | 10 | const MoviesBottomBarStatus({this.icon, this.child}); 11 | 12 | final IconData? icon; 13 | final Widget? child; 14 | 15 | bool get profile => this == MoviesBottomBarStatus.myProfile; 16 | } 17 | -------------------------------------------------------------------------------- /lib/core/presentation/presentation.dart: -------------------------------------------------------------------------------- 1 | export 'enums/enums.dart'; 2 | export 'providers/providers.dart'; 3 | export 'widgets/widgets.dart'; 4 | -------------------------------------------------------------------------------- /lib/core/presentation/providers/providers.dart: -------------------------------------------------------------------------------- 1 | export 'value_provider.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/presentation/providers/value_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 2 | 3 | class ValueProvider extends StateNotifier { 4 | ValueProvider(super.state); 5 | 6 | void change(T value) => state = value; 7 | } 8 | -------------------------------------------------------------------------------- /lib/core/presentation/widgets/user_profile.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/lib.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:hooks_riverpod/hooks_riverpod.dart'; 5 | 6 | class UserProfile extends HookConsumerWidget { 7 | const UserProfile({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context, WidgetRef ref) { 11 | final url = switch (ref.watch(authProvider)) { 12 | Authenticated(user: final user) => user.photoURL, 13 | _ => null, 14 | }; 15 | return CircleAvatar( 16 | radius: 11, 17 | backgroundColor: Palette.grey, 18 | child: FlutCinematicImage( 19 | borderRadius: borderRadius12, 20 | imageUrl: url, 21 | ), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/core/presentation/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'user_profile.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/router/app_router.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/lib.dart'; 2 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 3 | import 'package:go_router/go_router.dart'; 4 | 5 | final routerProvider = Provider( 6 | (ref) { 7 | return GoRouter( 8 | initialLocation: Routes.movies.path, 9 | routes: AppRouter.routes, 10 | ); 11 | }, 12 | ); 13 | 14 | class AppRouter { 15 | const AppRouter._(); 16 | 17 | static List get routes => [ 18 | GoRoute( 19 | path: Routes.auth.path, 20 | name: Routes.auth.name, 21 | builder: LoginScreen.builder, 22 | ), 23 | GoRoute( 24 | path: Routes.movies.path, 25 | name: Routes.movies.name, 26 | builder: MoviesScreen.builder, 27 | routes: [ 28 | GoRoute( 29 | path: Routes.search.path, 30 | name: Routes.search.name, 31 | builder: SearchMoviesScreen.builder, 32 | ), 33 | GoRoute( 34 | path: Routes.movie.path, 35 | name: Routes.movie.name, 36 | builder: MovieScreen.builder, 37 | ), 38 | ], 39 | ), 40 | GoRoute( 41 | path: Routes.seat.path, 42 | name: Routes.seat.name, 43 | builder: SeatScreen.builder, 44 | ), 45 | GoRoute( 46 | path: Routes.ticketPurchase.path, 47 | name: Routes.ticketPurchase.name, 48 | builder: PurchaseScreen.builder, 49 | ), 50 | ]; 51 | } 52 | -------------------------------------------------------------------------------- /lib/core/router/router.dart: -------------------------------------------------------------------------------- 1 | export 'app_router.dart'; 2 | export 'routes.dart'; 3 | -------------------------------------------------------------------------------- /lib/core/router/routes.dart: -------------------------------------------------------------------------------- 1 | class Routes { 2 | const Routes._({required this.name, required this.path}); 3 | final String name; 4 | final String path; 5 | 6 | static Routes get auth => const Routes._( 7 | name: 'auth', 8 | path: '/auth', 9 | ); 10 | 11 | static Routes get movies => const Routes._( 12 | name: 'movies', 13 | path: '/', 14 | ); 15 | 16 | static Routes get search => const Routes._( 17 | name: 'search', 18 | path: 'search', 19 | ); 20 | 21 | static Routes get movie => const Routes._( 22 | name: 'movie', 23 | path: 'movie/:id', 24 | ); 25 | 26 | static Routes get seat => const Routes._( 27 | name: 'seat', 28 | path: '/seat', 29 | ); 30 | 31 | static Routes get ticketPurchase => const Routes._( 32 | name: 'ticketPurchase', 33 | path: '/ticket-purchase', 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /lib/core/services/services.dart: -------------------------------------------------------------------------------- 1 | export 'url_launcher_service.dart'; 2 | -------------------------------------------------------------------------------- /lib/core/services/url_launcher_service.dart: -------------------------------------------------------------------------------- 1 | import 'package:url_launcher/url_launcher.dart'; 2 | 3 | class UrlLauncherService { 4 | const UrlLauncherService(); 5 | 6 | Future launch(Uri uri) async { 7 | if (await canLaunchUrl(uri)) { 8 | launchUrl( 9 | uri, 10 | mode: LaunchMode.externalApplication, 11 | ); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/features/auth/auth.dart: -------------------------------------------------------------------------------- 1 | export 'presentation/presentation.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/presentation.dart: -------------------------------------------------------------------------------- 1 | export 'providers/providers.dart'; 2 | export 'screens/screens.dart'; 3 | export 'widgets/widgets.dart'; 4 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/providers/auth/auth_provider.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flut_cinematic/lib.dart'; 4 | import 'package:flut_cinematic_common/flut_cinematic_common.dart'; 5 | import 'package:flut_cinematic_domain/flut_cinematic_domain.dart'; 6 | import 'package:freezed_annotation/freezed_annotation.dart'; 7 | import 'package:riverpod/riverpod.dart'; 8 | 9 | part 'auth_provider.freezed.dart'; 10 | part 'auth_state.dart'; 11 | 12 | final authProvider = StateNotifierProvider( 13 | (ref) => AuthProvider( 14 | const AuthState.unauthenticated(), 15 | authRepository: ref.read(Repositories.auth), 16 | )..init(), 17 | ); 18 | 19 | class AuthProvider extends StateNotifier { 20 | AuthProvider( 21 | super.state, { 22 | required IAuthRepository authRepository, 23 | }) : _authRepository = authRepository; 24 | 25 | final IAuthRepository _authRepository; 26 | StreamSubscription? _subscription; 27 | 28 | void init() { 29 | _subscription = _authRepository.onUserChanged.listen(_listen); 30 | } 31 | 32 | Future login(String email, String password) async { 33 | state = const AuthState.authenticationInProgress(); 34 | final result = await _authRepository.login(email, password); 35 | state = switch (result) { 36 | Right() => state, 37 | Left(value: final failure) => AuthState.authenticationFailed( 38 | failure: failure, 39 | ), 40 | }; 41 | } 42 | 43 | @override 44 | void dispose() { 45 | _subscription?.cancel(); 46 | _authRepository.dispose(); 47 | super.dispose(); 48 | } 49 | 50 | void _listen(User user) { 51 | state = AuthState.authenticated(user: user); 52 | } 53 | 54 | Future logout() async { 55 | await _authRepository.logout(); 56 | state = const AuthState.unauthenticated(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/providers/auth/auth_state.dart: -------------------------------------------------------------------------------- 1 | part of 'auth_provider.dart'; 2 | 3 | @freezed 4 | class AuthState with _$AuthState { 5 | const factory AuthState.authenticated({required User user}) = Authenticated; 6 | const factory AuthState.unauthenticated() = Unauthenticated; 7 | const factory AuthState.authenticationInProgress() = AuthenticationInProgress; 8 | const factory AuthState.authenticationFailed({ 9 | required HttpRequestFailure failure, 10 | }) = AuthenticationFailed; 11 | } 12 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/providers/providers.dart: -------------------------------------------------------------------------------- 1 | export 'auth/auth_provider.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/screens/screens.dart: -------------------------------------------------------------------------------- 1 | export 'login_screen.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/widgets/login_apple_sign_in.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/i18n/translations.g.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class LoginAppleSignIn extends StatelessWidget { 6 | const LoginAppleSignIn({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return FlutCinematicPrimaryButton( 11 | onPressed: () {}, 12 | color: Palette.black, 13 | child: Row( 14 | mainAxisAlignment: MainAxisAlignment.center, 15 | children: [ 16 | Assets.svgs.apple.svg(height: 24, width: 24), 17 | space12, 18 | Text( 19 | texts.auth.continueAppleID, 20 | style: context.textTheme.titleLarge?.copyWith( 21 | fontWeight: AppFontWeight.semiBold, 22 | ), 23 | ), 24 | ], 25 | ), 26 | ); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/widgets/login_email_imput.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/i18n/translations.g.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class LoginEmailImput extends StatelessWidget { 6 | const LoginEmailImput({super.key, required this.emailController}); 7 | 8 | final TextEditingController emailController; 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return FlutCinematicTextField( 13 | title: texts.auth.email, 14 | hintText: texts.auth.typeYourEmail, 15 | prefixIcon: FlutCinematicIcons.email, 16 | controller: emailController, 17 | autovalidateMode: AutovalidateMode.onUserInteraction, 18 | validator: (value) => FormValidator.email( 19 | value, 20 | emailInvalid: texts.auth.invalidEmail, 21 | emailRequired: texts.auth.fieldRequired, 22 | ), 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/widgets/login_google_sign_in.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/i18n/translations.g.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class LoginGoogleSignIn extends StatelessWidget { 6 | const LoginGoogleSignIn({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return FlutCinematicPrimaryButton( 11 | onPressed: () {}, 12 | color: Palette.white, 13 | child: Row( 14 | mainAxisAlignment: MainAxisAlignment.center, 15 | children: [ 16 | Assets.svgs.google.svg(height: 24, width: 24), 17 | space12, 18 | Text( 19 | texts.auth.continueGoogle, 20 | style: context.textTheme.titleLarge?.copyWith( 21 | color: Palette.dark, 22 | fontWeight: AppFontWeight.semiBold, 23 | ), 24 | ), 25 | ], 26 | ), 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/widgets/login_header.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/i18n/translations.g.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class LoginHeader extends StatelessWidget { 6 | const LoginHeader({super.key}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return Column( 11 | crossAxisAlignment: CrossAxisAlignment.stretch, 12 | children: [ 13 | Text( 14 | texts.auth.readyForPopcorn, 15 | style: context.textTheme.bodyLarge, 16 | ), 17 | gap4, 18 | RichText( 19 | text: TextSpan( 20 | text: texts.auth.enterYour, 21 | style: context.textTheme.headlineLarge, 22 | children: [ 23 | TextSpan( 24 | text: texts.auth.fildLoverWorld, 25 | style: context.textTheme.headlineMedium, 26 | ), 27 | ], 28 | ), 29 | ), 30 | gap20, 31 | ], 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/widgets/login_password_imput.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/i18n/translations.g.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class LoginPasswordImput extends StatelessWidget { 6 | const LoginPasswordImput({super.key, required this.passwordController}); 7 | 8 | final TextEditingController passwordController; 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return FlutCinematicTextField.password( 13 | title: texts.auth.password, 14 | hintText: texts.auth.typeYourPassword, 15 | prefixIcon: FlutCinematicIcons.key, 16 | controller: passwordController, 17 | autovalidateMode: AutovalidateMode.onUserInteraction, 18 | validator: (value) => FormValidator.passwordValid( 19 | value, 20 | passwordRequired: texts.auth.fieldRequired, 21 | passwordShort: texts.auth.passwordInvalid, 22 | ), 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/widgets/login_sign_in_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/i18n/translations.g.dart'; 2 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class LoginSignInButton extends StatelessWidget { 6 | const LoginSignInButton({super.key, required this.onPressed}); 7 | 8 | final VoidCallback onPressed; 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return FlutCinematicPrimaryButton( 13 | text: texts.auth.loginNow, 14 | onPressed: onPressed, 15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/features/auth/presentation/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'login_apple_sign_in.dart'; 2 | export 'login_email_imput.dart'; 3 | export 'login_google_sign_in.dart'; 4 | export 'login_header.dart'; 5 | export 'login_password_imput.dart'; 6 | export 'login_sign_in_button.dart'; 7 | -------------------------------------------------------------------------------- /lib/features/features.dart: -------------------------------------------------------------------------------- 1 | export 'auth/auth.dart'; 2 | export 'movie/movies.dart'; 3 | export 'purchase/purchase.dart'; 4 | export 'seat/seat.dart'; 5 | -------------------------------------------------------------------------------- /lib/features/movie/movies.dart: -------------------------------------------------------------------------------- 1 | export 'presentation/presentation.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/enums/enums.dart: -------------------------------------------------------------------------------- 1 | export 'movie_type.dart'; 2 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/enums/movie_type.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/i18n/translations.g.dart'; 2 | 3 | enum MovieType { 4 | nowPlaying(), 5 | popular(), 6 | upcoming(); 7 | 8 | const MovieType(); 9 | 10 | String get title { 11 | switch (this) { 12 | case MovieType.nowPlaying: 13 | return texts.movie.inPremiere; 14 | case MovieType.popular: 15 | return texts.movie.popular; 16 | case MovieType.upcoming: 17 | return texts.movie.upcoming; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/extensions/duration_x.dart: -------------------------------------------------------------------------------- 1 | extension DurationX on Duration { 2 | String get remainingMinutes { 3 | String twoDigits(int n) => n.toString().padLeft(2, '0'); 4 | String oneDigits(int n) => n.toString().padLeft(1, '0'); 5 | final hours = oneDigits(inHours.remainder(60)); 6 | final minutes = twoDigits(inMinutes.remainder(60)); 7 | return '${hours}hrs ${minutes}min'; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/extensions/extensions.dart: -------------------------------------------------------------------------------- 1 | export 'duration_x.dart'; 2 | export 'movie_x.dart'; 3 | export 'video_x.dart'; 4 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/extensions/movie_x.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic_domain/flut_cinematic_domain.dart'; 2 | 3 | extension MovieX on Movie { 4 | String get _baseImageUrl => const String.fromEnvironment('baseImageUrl'); 5 | String get poster => '$_baseImageUrl/w780/$posterPath'; 6 | String get backdrop => '$_baseImageUrl/w780/$backdropPath'; 7 | } 8 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/extensions/video_x.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic_domain/flut_cinematic_domain.dart'; 2 | 3 | extension VideoX on Video { 4 | Uri get trailer => Uri.https('youtu.be', key); 5 | 6 | bool get youtube => site == 'YouTube'; 7 | } 8 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/presentation.dart: -------------------------------------------------------------------------------- 1 | export 'enums/enums.dart'; 2 | export 'extensions/extensions.dart'; 3 | export 'providers/providers.dart'; 4 | export 'screens/screens.dart'; 5 | export 'widgets/widgets.dart'; 6 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/providers/movie/movie_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/lib.dart'; 2 | import 'package:flut_cinematic_common/flut_cinematic_common.dart'; 3 | import 'package:flut_cinematic_domain/flut_cinematic_domain.dart'; 4 | import 'package:riverpod/riverpod.dart'; 5 | 6 | final movieProvider = StateNotifierProviderFamily( 7 | (ref, arg) => MovieProvider( 8 | arg, 9 | movieRepository: ref.read(Repositories.movie), 10 | )..loadMovie(), 11 | ); 12 | 13 | class MovieProvider extends StateNotifier { 14 | MovieProvider( 15 | super.state, { 16 | required IMovieRepository movieRepository, 17 | }) : _movieRepository = movieRepository; 18 | 19 | final IMovieRepository _movieRepository; 20 | 21 | Future loadMovie() async { 22 | final result = await _movieRepository.movie(movieId: state.id); 23 | state = switch (result) { 24 | Right(value: final movie) => movie.copyWith(tag: state.tag), 25 | Left() => state, 26 | }; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/providers/movies/movies_state.dart: -------------------------------------------------------------------------------- 1 | part of 'movies_provider.dart'; 2 | 3 | @freezed 4 | class MoviesState with _$MoviesState { 5 | const factory MoviesState.loading() = _MoviesLoadingState; 6 | const factory MoviesState.loaded({ 7 | @Default([]) List movies, 8 | @Default(false) bool loadingMore, 9 | required MovieRequest movieRequest, 10 | }) = MoviesLoadedState; 11 | const factory MoviesState.error({ 12 | required HttpRequestFailure failure, 13 | }) = MoviesErrorState; 14 | } 15 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/providers/providers.dart: -------------------------------------------------------------------------------- 1 | export 'movie/movie_provider.dart'; 2 | export 'movies/movies_provider.dart'; 3 | export 'search/search_provider.dart'; 4 | export 'video/video_provider.dart'; 5 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/providers/search/search_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/core/core.dart'; 2 | import 'package:flut_cinematic_common/flut_cinematic_common.dart'; 3 | import 'package:flut_cinematic_domain/flut_cinematic_domain.dart'; 4 | import 'package:freezed_annotation/freezed_annotation.dart'; 5 | import 'package:riverpod/riverpod.dart'; 6 | 7 | part 'search_provider.freezed.dart'; 8 | part 'search_state.dart'; 9 | 10 | final searchProvider = 11 | StateNotifierProvider.autoDispose( 12 | (ref) => SearchProvider( 13 | const SearchState.initial(), 14 | movieRepository: ref.read(Repositories.movie), 15 | ), 16 | ); 17 | 18 | class SearchProvider extends StateNotifier { 19 | SearchProvider( 20 | super.state, { 21 | required IMovieRepository movieRepository, 22 | }) : _movieRepository = movieRepository; 23 | final IMovieRepository _movieRepository; 24 | 25 | Future search(String query) async { 26 | if (query.isEmpty) { 27 | state = const SearchState.initial(); 28 | } else { 29 | state = const SearchState.searching(); 30 | final request = MovieRequest(query: query, includeAdult: true); 31 | final result = await _movieRepository.search(request: request); 32 | state = switch (result) { 33 | Right(value: final moviesResponse) => SearchState.result( 34 | movies: moviesResponse.movies, 35 | ), 36 | Left(value: final failure) => SearchState.error(failure: failure), 37 | }; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/providers/search/search_state.dart: -------------------------------------------------------------------------------- 1 | part of 'search_provider.dart'; 2 | 3 | @freezed 4 | class SearchState with _$SearchState { 5 | const factory SearchState.initial() = _SearchInitialState; 6 | const factory SearchState.searching() = SearchingState; 7 | const factory SearchState.result({ 8 | @Default([]) List movies, 9 | }) = SearchResultState; 10 | const factory SearchState.error({ 11 | required HttpRequestFailure failure, 12 | }) = SearchErrorState; 13 | } 14 | -------------------------------------------------------------------------------- /lib/features/movie/presentation/providers/video/video_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flut_cinematic/core/core.dart'; 2 | import 'package:flut_cinematic/features/features.dart'; 3 | import 'package:flut_cinematic_common/flut_cinematic_common.dart'; 4 | import 'package:flut_cinematic_domain/flut_cinematic_domain.dart'; 5 | import 'package:flut_cinematic_ui/flut_cinematic_ui.dart'; 6 | import 'package:freezed_annotation/freezed_annotation.dart'; 7 | import 'package:riverpod/riverpod.dart'; 8 | 9 | part 'video_provider.freezed.dart'; 10 | part 'video_state.dart'; 11 | 12 | final videoProvider = 13 | StateNotifierProviderFamily( 14 | (ref, movieId) => VideoProvider( 15 | VideoState.loading(), 16 | movieRepository: ref.read(Repositories.movie), 17 | movieId: movieId, 18 | )..loadVideos(), 19 | ); 20 | 21 | class VideoProvider extends StateNotifier { 22 | VideoProvider( 23 | super.state, { 24 | required IMovieRepository movieRepository, 25 | required int movieId, 26 | }) : _movieRepository = movieRepository, 27 | _movieId = movieId; 28 | 29 | final IMovieRepository _movieRepository; 30 | final int _movieId; 31 | 32 | Future loadVideos() async { 33 | final result = await _movieRepository.videos(movieId: _movieId); 34 | state = switch (result) { 35 | Right(value: final response) => VideoState.loaded( 36 | videos: response.videos.whereList