├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ ├── application-bug.yml │ └── provider-bug.yml ├── .gitignore ├── .metadata ├── LICENSE ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── .gitignore │ ├── build.gradle │ ├── google-services.json │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ └── cf │ │ │ │ └── beamlakaschalew │ │ │ │ └── cinemax │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ ├── android12splash.png │ │ │ └── splash.png │ │ │ ├── drawable-mdpi │ │ │ ├── android12splash.png │ │ │ └── splash.png │ │ │ ├── drawable-night-hdpi │ │ │ └── android12splash.png │ │ │ ├── drawable-night-mdpi │ │ │ └── android12splash.png │ │ │ ├── drawable-night-v21 │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-night-xhdpi │ │ │ └── android12splash.png │ │ │ ├── drawable-night-xxhdpi │ │ │ └── android12splash.png │ │ │ ├── drawable-night-xxxhdpi │ │ │ └── android12splash.png │ │ │ ├── drawable-night │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-v21 │ │ │ ├── background.png │ │ │ └── launch_background.xml │ │ │ ├── drawable-xhdpi │ │ │ ├── android12splash.png │ │ │ └── splash.png │ │ │ ├── drawable-xxhdpi │ │ │ ├── android12splash.png │ │ │ └── splash.png │ │ │ ├── drawable-xxxhdpi │ │ │ ├── android12splash.png │ │ │ └── splash.png │ │ │ ├── drawable │ │ │ ├── background.png │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_monochrome.xml │ │ │ ├── icon.xml │ │ │ └── launch_background.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-night-v31 │ │ │ └── styles.xml │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ ├── values-v31 │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── ca │ └── lets-encrypt-r3.pem ├── fonts │ ├── Poppins │ │ ├── Poppins-Black.ttf │ │ ├── Poppins-BlackItalic.ttf │ │ ├── Poppins-Bold.ttf │ │ ├── Poppins-BoldItalic.ttf │ │ ├── Poppins-ExtraBold.ttf │ │ ├── Poppins-ExtraBoldItalic.ttf │ │ ├── Poppins-ExtraLight.ttf │ │ ├── Poppins-ExtraLightItalic.ttf │ │ ├── Poppins-Italic.ttf │ │ ├── Poppins-Light.ttf │ │ ├── Poppins-LightItalic.ttf │ │ ├── Poppins-Medium.ttf │ │ ├── Poppins-MediumItalic.ttf │ │ ├── Poppins-Regular.ttf │ │ ├── Poppins-SemiBold.ttf │ │ ├── Poppins-SemiBoldItalic.ttf │ │ ├── Poppins-Thin.ttf │ │ └── Poppins-ThinItalic.ttf │ ├── SocialIcons.ttf │ └── imdb.ttf ├── images │ ├── 404.png │ ├── amazon_prime.png │ ├── apple_tv.png │ ├── check.png │ ├── checkmark.svg │ ├── country_flags │ │ ├── argentina.png │ │ ├── australia.png │ │ ├── austria.png │ │ ├── belgium.png │ │ ├── brazil.png │ │ ├── bulgaria.png │ │ ├── canada.png │ │ ├── croatia.png │ │ ├── czech-republic.png │ │ ├── denmark.png │ │ ├── estonia.png │ │ ├── finland.png │ │ ├── france.png │ │ ├── germany.png │ │ ├── hong-kong.png │ │ ├── hungary.png │ │ ├── india.png │ │ ├── indonesia.png │ │ ├── ireland.png │ │ ├── italy.png │ │ ├── ivory-coast.png │ │ ├── japan.png │ │ ├── kenya.png │ │ ├── lithuania.png │ │ ├── mexico.png │ │ ├── netherlands.png │ │ ├── new-zealand.png │ │ ├── norway.png │ │ ├── philippines.png │ │ ├── poland.png │ │ ├── portugal.png │ │ ├── russia.png │ │ ├── serbia.png │ │ ├── slovakia.png │ │ ├── south-africa.png │ │ ├── south-korea.png │ │ ├── spain.png │ │ ├── sweden.png │ │ ├── switzerland.png │ │ ├── turkey.png │ │ ├── united-arab-emirates.png │ │ ├── united-kingdom.png │ │ └── united-states.png │ ├── disney_plus.png │ ├── entertainment.png │ ├── family.png │ ├── flixhq_bw.svg │ ├── fq_svg.svg │ ├── general.png │ ├── grid_final.jpg │ ├── hbo_max.png │ ├── hulu.png │ ├── icons8-amazon-prime-video-512.png │ ├── imdb_logo.png │ ├── itunes.png │ ├── loading_5.gif │ ├── logo.png │ ├── movie.png │ ├── music.png │ ├── na_logo.png │ ├── na_rect.png │ ├── na_square.png │ ├── netflix.png │ ├── network-signal.png │ ├── network-signal.svg │ ├── news.png │ ├── paramount.png │ ├── peacock.png │ ├── popcorn.png │ ├── profiles │ │ ├── 0.png │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 100.png │ │ ├── 101.png │ │ ├── 102.png │ │ ├── 103.png │ │ ├── 104.png │ │ ├── 105.png │ │ ├── 106.png │ │ ├── 107.png │ │ ├── 108.png │ │ ├── 109.png │ │ ├── 11.png │ │ ├── 110.png │ │ ├── 111.png │ │ ├── 112.png │ │ ├── 113.png │ │ ├── 114.png │ │ ├── 115.png │ │ ├── 116.png │ │ ├── 117.png │ │ ├── 118.png │ │ ├── 119.png │ │ ├── 12.png │ │ ├── 120.png │ │ ├── 121.png │ │ ├── 122.png │ │ ├── 123.png │ │ ├── 124.png │ │ ├── 125.png │ │ ├── 126.png │ │ ├── 127.png │ │ ├── 128.png │ │ ├── 129.png │ │ ├── 13.png │ │ ├── 130.png │ │ ├── 131.png │ │ ├── 132.png │ │ ├── 133.png │ │ ├── 134.png │ │ ├── 135.png │ │ ├── 136.png │ │ ├── 137.png │ │ ├── 138.png │ │ ├── 139.png │ │ ├── 14.png │ │ ├── 140.png │ │ ├── 141.png │ │ ├── 142.png │ │ ├── 143.png │ │ ├── 144.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 2.png │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 22.png │ │ ├── 23.png │ │ ├── 24.png │ │ ├── 25.png │ │ ├── 26.png │ │ ├── 27.png │ │ ├── 28.png │ │ ├── 29.png │ │ ├── 3.png │ │ ├── 30.png │ │ ├── 31.png │ │ ├── 32.png │ │ ├── 33.png │ │ ├── 34.png │ │ ├── 35.png │ │ ├── 36.png │ │ ├── 37.png │ │ ├── 38.png │ │ ├── 39.png │ │ ├── 4.png │ │ ├── 40.png │ │ ├── 41.png │ │ ├── 42.png │ │ ├── 43.png │ │ ├── 44.png │ │ ├── 45.png │ │ ├── 46.png │ │ ├── 47.png │ │ ├── 48.png │ │ ├── 49.png │ │ ├── 5.png │ │ ├── 50.png │ │ ├── 51.png │ │ ├── 52.png │ │ ├── 53.png │ │ ├── 54.png │ │ ├── 55.png │ │ ├── 56.png │ │ ├── 57.png │ │ ├── 58.png │ │ ├── 59.png │ │ ├── 6.png │ │ ├── 60.png │ │ ├── 61.png │ │ ├── 62.png │ │ ├── 63.png │ │ ├── 64.png │ │ ├── 65.png │ │ ├── 66.png │ │ ├── 67.png │ │ ├── 68.png │ │ ├── 69.png │ │ ├── 7.png │ │ ├── 70.png │ │ ├── 71.png │ │ ├── 72.png │ │ ├── 73.png │ │ ├── 74.png │ │ ├── 75.png │ │ ├── 76.png │ │ ├── 77.png │ │ ├── 78.png │ │ ├── 79.png │ │ ├── 8.png │ │ ├── 80.png │ │ ├── 81.png │ │ ├── 82.png │ │ ├── 83.png │ │ ├── 84.png │ │ ├── 85.png │ │ ├── 86.png │ │ ├── 87.png │ │ ├── 88.png │ │ ├── 89.png │ │ ├── 9.png │ │ ├── 90.png │ │ ├── 91.png │ │ ├── 92.png │ │ ├── 93.png │ │ ├── 94.png │ │ ├── 95.png │ │ ├── 96.png │ │ ├── 97.png │ │ ├── 98.png │ │ └── 99.png │ ├── sample_frame.jpg │ ├── search.png │ ├── series.png │ ├── splash_logo.png │ ├── sport.png │ ├── tmdb_logo.png │ └── youtube.png └── translations │ ├── ar.json │ ├── en.json │ ├── es.json │ └── hi.json ├── devtools_options.yaml ├── lib ├── api │ └── endpoints.dart ├── constants │ ├── api_constants.dart │ ├── app_constants.dart │ └── theme_data.dart ├── controllers │ ├── bookmark_database_controller.dart │ └── recently_watched_database_controller.dart ├── flixquest_main.dart ├── functions │ ├── function.dart │ └── network.dart ├── main.dart ├── models │ ├── app_colors.dart │ ├── app_languages.dart │ ├── choice_chip.dart │ ├── credits.dart │ ├── custom_exceptions.dart │ ├── dropdown_select.dart │ ├── external_subtitles.dart │ ├── filter_chip.dart │ ├── genres.dart │ ├── images.dart │ ├── live_tv.dart │ ├── movie.dart │ ├── movie_stream_metadata.dart │ ├── person.dart │ ├── profile_image_list.dart │ ├── recently_watched.dart │ ├── social_icons_icons.dart │ ├── sub_languages.dart │ ├── translation.dart │ ├── tv.dart │ ├── tv_genres.dart │ ├── tv_stream_metadata.dart │ ├── update.dart │ ├── video_converter.dart │ ├── video_quality.dart │ ├── videos.dart │ ├── watch_providers.dart │ └── watchprovider_countries.dart ├── preferences │ ├── app_dependency_preferences.dart │ └── setting_preferences.dart ├── provider │ ├── app_dependency_provider.dart │ ├── recently_watched_provider.dart │ └── settings_provider.dart ├── screens │ ├── common │ │ ├── about.dart │ │ ├── bookmark_screen.dart │ │ ├── country_choose.dart │ │ ├── did_you_know.dart │ │ ├── discover.dart │ │ ├── hero_photoview.dart │ │ ├── landing_screen.dart │ │ ├── language_choose.dart │ │ ├── live_player.dart │ │ ├── live_tv_screen.dart │ │ ├── news_screen.dart │ │ ├── news_webview.dart │ │ ├── photoview.dart │ │ ├── player.dart │ │ ├── player_settings.dart │ │ ├── player_test.dart │ │ ├── provider_choose.dart │ │ ├── search_view.dart │ │ ├── server_status_screen.dart │ │ ├── settings.dart │ │ ├── sublanguage_choose.dart │ │ ├── sync_screen.dart │ │ ├── title_reviews.dart │ │ └── update_screen.dart │ ├── movie │ │ ├── bookmark_movies_tab.dart │ │ ├── collection_detail.dart │ │ ├── discover_movie_result.dart │ │ ├── discover_movies_tab.dart │ │ ├── genremovies.dart │ │ ├── main_movies_list.dart │ │ ├── movie_castandcrew.dart │ │ ├── movie_detail.dart │ │ ├── movie_stream.dart │ │ ├── movie_stream_select.dart │ │ ├── movie_video_loader.dart │ │ └── streaming_services_movies.dart │ ├── person │ │ ├── cast_detail.dart │ │ ├── createdby_detail.dart │ │ ├── crew_detail.dart │ │ ├── guest_star_detail.dart │ │ └── searchedperson.dart │ ├── tv │ │ ├── bookmark_tv_tab.dart │ │ ├── discover_tv_result.dart │ │ ├── discover_tv_tab.dart │ │ ├── episode_detail.dart │ │ ├── genre_tv.dart │ │ ├── main_tv_list.dart │ │ ├── seasons_detail.dart │ │ ├── streaming_services_tvshows.dart │ │ ├── tv_detail.dart │ │ ├── tv_stream.dart │ │ ├── tv_stream_select.dart │ │ ├── tv_video_loader.dart │ │ ├── tvdetail_castandcrew.dart │ │ ├── tvepisode_castandcrew.dart │ │ └── tvseason_castandcrew.dart │ └── user │ │ ├── delete_account.dart │ │ ├── edit_profile.dart │ │ ├── email_change.dart │ │ ├── forgot_password.dart │ │ ├── login_screen.dart │ │ ├── password_change.dart │ │ ├── signup_screen.dart │ │ ├── user_info.dart │ │ └── user_state.dart ├── services │ └── globle_method.dart ├── singleton │ └── sharedpreferences_singleton.dart ├── translations │ └── locale_keys.g.dart ├── ui_components │ ├── movie_ui_components.dart │ └── tv_ui_components.dart ├── video_providers │ ├── common.dart │ ├── dramacool.dart │ ├── flixhq.dart │ ├── flixquest_api_source.dart │ ├── gogoanime.dart │ ├── names.dart │ ├── viewasian.dart │ └── zoro.dart └── widgets │ ├── common_widgets.dart │ ├── movie_widgets.dart │ ├── person_widgets.dart │ └── tv_widgets.dart ├── pubspec.lock ├── pubspec.yaml └── removed.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/application-bug.yml: -------------------------------------------------------------------------------- 1 | name: 🐞 Application Issue Report 2 | description: Report a issue in FlixQuest 3 | labels: [bug] 4 | body: 5 | - type: textarea 6 | id: reproduce-steps 7 | attributes: 8 | label: Steps to reproduce 9 | description: Provide an example of the issue. 10 | placeholder: | 11 | Example: 12 | 1. First step 13 | 2. Second step 14 | 3. Issue here 15 | validations: 16 | required: true 17 | 18 | - type: textarea 19 | id: expected-behavior 20 | attributes: 21 | label: Expected behavior 22 | placeholder: | 23 | Example: 24 | "This should happen..." 25 | validations: 26 | required: true 27 | 28 | - type: textarea 29 | id: actual-behavior 30 | attributes: 31 | label: Actual behavior 32 | placeholder: | 33 | Example: 34 | "This happened instead..." 35 | validations: 36 | required: true 37 | 38 | - type: input 39 | id: android-version 40 | attributes: 41 | label: Android version 42 | description: | 43 | You can find this somewhere in your Android settings. 44 | placeholder: | 45 | Example: "Android 12" 46 | validations: 47 | required: true 48 | 49 | - type: textarea 50 | id: other-details 51 | attributes: 52 | label: Other details 53 | placeholder: | 54 | Additional details and attachments. 55 | 56 | - type: checkboxes 57 | id: acknowledgements 58 | attributes: 59 | label: Acknowledgements 60 | description: Your issue will be closed if you haven't done these steps. 61 | options: 62 | - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue. 63 | required: true 64 | - label: I have written a short but informative title. 65 | required: true 66 | - label: I will fill out all of the requested information in this form. 67 | required: true 68 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/provider-bug.yml: -------------------------------------------------------------------------------- 1 | name: 🐞 Provider Issue Report 2 | description: Report a source issue 3 | labels: [provider] 4 | body: 5 | 6 | - type: input 7 | id: source 8 | attributes: 9 | label: Source information 10 | placeholder: | 11 | Example: "2embed" 12 | validations: 13 | required: true 14 | 15 | - type: input 16 | id: source-url 17 | attributes: 18 | label: Source link 19 | placeholder: | 20 | Example: 21 | "www.example.org" 22 | validations: 23 | required: true 24 | 25 | - type: textarea 26 | id: reproduce-steps 27 | attributes: 28 | label: Steps to reproduce 29 | description: Provide an example of the issue. 30 | placeholder: | 31 | Example: 32 | 1. First step 33 | 2. Second step 34 | 3. Issue here 35 | validations: 36 | required: true 37 | 38 | - type: input 39 | id: android-version 40 | attributes: 41 | label: Android version 42 | description: | 43 | You can find this somewhere in your Android settings. 44 | placeholder: | 45 | Example: "Android 12" 46 | validations: 47 | required: true 48 | 49 | - type: textarea 50 | id: other-details 51 | attributes: 52 | label: Other details 53 | placeholder: | 54 | Additional details and attachments. 55 | 56 | - type: checkboxes 57 | id: acknowledgements 58 | attributes: 59 | label: Acknowledgements 60 | description: Your issue will be closed if you haven't done these steps. 61 | options: 62 | - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open issue. 63 | required: true 64 | - label: I have written a short but informative title. 65 | required: true 66 | - label: If related to a provider, I have checked the site and it works, but not the app. 67 | required: true 68 | - label: I will fill out all of the requested information in this form. 69 | required: true 70 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | .env 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Web related 36 | lib/generated_plugin_registrant.dart 37 | 38 | # Symbolication related 39 | app.*.symbols 40 | 41 | # Obfuscation related 42 | app.*.map.json 43 | 44 | # Android Studio will place build artifacts here 45 | /android/app/debug 46 | /android/app/profile 47 | /android/app/release 48 | 49 | # API keys 50 | /lib/api/api_keys.dart 51 | 52 | # Google firebase 53 | /android/app/google-services.json 54 | android/app/google-services.json 55 | "/android/app/google-services.json" 56 | "android/app/google-services.json" 57 | -------------------------------------------------------------------------------- /.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: ffb2ecea5223acdd139a5039be2f9c796962833d 8 | channel: unknown 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | avoid_print: true 26 | prefer_single_quotes: true 27 | prefer_interpolation_to_compose_strings: true 28 | sort_pub_dependencies: true 29 | prefer_final_in_for_each: true 30 | prefer_final_parameters: false 31 | curly_braces_in_flow_control_structures: true 32 | # Additional information about this file can be found at 33 | # https://dart.dev/guides/language/analysis-options 34 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | /app/google-services.json 9 | app/google-services.json 10 | "/android/app/google-services.json" 11 | "android/app/google-services.json" 12 | 13 | # Remember to never publicly share your keystore. 14 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 15 | key.properties 16 | **/*.keystore 17 | **/*.jks 18 | -------------------------------------------------------------------------------- /android/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build/ -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "kotlin-android" 4 | id "dev.flutter.flutter-gradle-plugin" 5 | id "com.google.gms.google-services" 6 | } 7 | 8 | def localProperties = new Properties() 9 | def localPropertiesFile = rootProject.file('local.properties') 10 | if (localPropertiesFile.exists()) { 11 | localPropertiesFile.withReader('UTF-8') { reader -> 12 | localProperties.load(reader) 13 | } 14 | } 15 | 16 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 17 | if (flutterVersionCode == null) { 18 | flutterVersionCode = '1' 19 | } 20 | 21 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 22 | if (flutterVersionName == null) { 23 | flutterVersionName = '1.0' 24 | } 25 | 26 | def keystoreProperties = new Properties() 27 | def keystorePropertiesFile = rootProject.file('key.properties') 28 | if (keystorePropertiesFile.exists()) { 29 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 30 | } 31 | 32 | android { 33 | compileSdkVersion 34 34 | 35 | compileOptions { 36 | sourceCompatibility JavaVersion.VERSION_1_8 37 | targetCompatibility JavaVersion.VERSION_1_8 38 | } 39 | 40 | kotlinOptions { 41 | jvmTarget = '1.8' 42 | } 43 | 44 | sourceSets { 45 | main.java.srcDirs += 'src/main/kotlin' 46 | } 47 | 48 | defaultConfig { 49 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 50 | applicationId "dev.beamlak.flixquest_v2" 51 | minSdkVersion 23 52 | targetSdkVersion 33 53 | versionCode flutterVersionCode.toInteger() 54 | versionName flutterVersionName 55 | multiDexEnabled true 56 | } 57 | 58 | signingConfigs { 59 | release { 60 | keyAlias keystoreProperties['keyAlias'] 61 | keyPassword keystoreProperties['keyPassword'] 62 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null 63 | storePassword keystoreProperties['storePassword'] 64 | } 65 | } 66 | buildTypes { 67 | release { 68 | signingConfig signingConfigs.release 69 | packagingOptions { 70 | jniLibs { 71 | useLegacyPackaging true 72 | } 73 | } 74 | } 75 | } 76 | } 77 | 78 | flutter { 79 | source '../..' 80 | } 81 | 82 | dependencies { 83 | implementation platform('com.google.firebase:firebase-bom:29.0.4') 84 | implementation 'com.google.firebase:firebase-analytics-ktx' 85 | implementation 'com.android.support:multidex:2.0.1' 86 | } 87 | 88 | android { 89 | compileSdkVersion 34 90 | } 91 | 92 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/cf/beamlakaschalew/cinemax/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.beamlak.flixquest_v2 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-hdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-mdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-hdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-night-hdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-mdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-night-mdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-night-v21/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-night-xhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-night-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-night-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-night/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-night/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-v21/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-xhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-xxhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/android12splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-xxxhdpi/android12splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/drawable/background.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/icon.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /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.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /android/app/src/main/res/values-night-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | ext.kotlin_version = '2.0.20' 2 | 3 | allprojects { 4 | repositories { 5 | google() 6 | mavenCentral() 7 | } 8 | } 9 | 10 | ext { 11 | compileSdkVersion = 34 12 | targetSdkVersion = 33 13 | appCompatVersion = "1.7.0" 14 | } 15 | 16 | rootProject.buildDir = '../build' 17 | subprojects { 18 | project.buildDir = "${rootProject.buildDir}/${project.name}" 19 | project.evaluationDependsOn(':app') 20 | ext.kotlin_version = '2.0.20' 21 | } 22 | 23 | tasks.register("clean", Delete) { 24 | delete rootProject.buildDir 25 | } 26 | -------------------------------------------------------------------------------- /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.1-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | }() 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "7.3.0" apply false 22 | id "org.jetbrains.kotlin.android" version "2.0.20" apply false 23 | id "com.google.gms.google-services" version "4.3.8" apply false 24 | } 25 | 26 | include ":app" -------------------------------------------------------------------------------- /assets/ca/lets-encrypt-r3.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw 3 | TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh 4 | cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw 5 | WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg 6 | RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK 7 | AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP 8 | R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx 9 | sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm 10 | NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg 11 | Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG 12 | /kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC 13 | AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB 14 | Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA 15 | FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw 16 | AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw 17 | Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB 18 | gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W 19 | PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl 20 | ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz 21 | CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm 22 | lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4 23 | avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2 24 | yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O 25 | yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids 26 | hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+ 27 | HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv 28 | MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX 29 | nLRbwHOoq7hHwg== 30 | -----END CERTIFICATE----- 31 | -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-Black.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-BlackItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-ExtraBold.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-ExtraLight.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-Light.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-LightItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-Medium.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-MediumItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-SemiBold.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-Thin.ttf -------------------------------------------------------------------------------- /assets/fonts/Poppins/Poppins-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/Poppins/Poppins-ThinItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/SocialIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/SocialIcons.ttf -------------------------------------------------------------------------------- /assets/fonts/imdb.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/fonts/imdb.ttf -------------------------------------------------------------------------------- /assets/images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/404.png -------------------------------------------------------------------------------- /assets/images/amazon_prime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/amazon_prime.png -------------------------------------------------------------------------------- /assets/images/apple_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/apple_tv.png -------------------------------------------------------------------------------- /assets/images/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/check.png -------------------------------------------------------------------------------- /assets/images/checkmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/images/country_flags/argentina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/argentina.png -------------------------------------------------------------------------------- /assets/images/country_flags/australia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/australia.png -------------------------------------------------------------------------------- /assets/images/country_flags/austria.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/austria.png -------------------------------------------------------------------------------- /assets/images/country_flags/belgium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/belgium.png -------------------------------------------------------------------------------- /assets/images/country_flags/brazil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/brazil.png -------------------------------------------------------------------------------- /assets/images/country_flags/bulgaria.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/bulgaria.png -------------------------------------------------------------------------------- /assets/images/country_flags/canada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/canada.png -------------------------------------------------------------------------------- /assets/images/country_flags/croatia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/croatia.png -------------------------------------------------------------------------------- /assets/images/country_flags/czech-republic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/czech-republic.png -------------------------------------------------------------------------------- /assets/images/country_flags/denmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/denmark.png -------------------------------------------------------------------------------- /assets/images/country_flags/estonia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/estonia.png -------------------------------------------------------------------------------- /assets/images/country_flags/finland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/finland.png -------------------------------------------------------------------------------- /assets/images/country_flags/france.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/france.png -------------------------------------------------------------------------------- /assets/images/country_flags/germany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/germany.png -------------------------------------------------------------------------------- /assets/images/country_flags/hong-kong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/hong-kong.png -------------------------------------------------------------------------------- /assets/images/country_flags/hungary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/hungary.png -------------------------------------------------------------------------------- /assets/images/country_flags/india.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/india.png -------------------------------------------------------------------------------- /assets/images/country_flags/indonesia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/indonesia.png -------------------------------------------------------------------------------- /assets/images/country_flags/ireland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/ireland.png -------------------------------------------------------------------------------- /assets/images/country_flags/italy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/italy.png -------------------------------------------------------------------------------- /assets/images/country_flags/ivory-coast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/ivory-coast.png -------------------------------------------------------------------------------- /assets/images/country_flags/japan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/japan.png -------------------------------------------------------------------------------- /assets/images/country_flags/kenya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/kenya.png -------------------------------------------------------------------------------- /assets/images/country_flags/lithuania.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/lithuania.png -------------------------------------------------------------------------------- /assets/images/country_flags/mexico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/mexico.png -------------------------------------------------------------------------------- /assets/images/country_flags/netherlands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/netherlands.png -------------------------------------------------------------------------------- /assets/images/country_flags/new-zealand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/new-zealand.png -------------------------------------------------------------------------------- /assets/images/country_flags/norway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/norway.png -------------------------------------------------------------------------------- /assets/images/country_flags/philippines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/philippines.png -------------------------------------------------------------------------------- /assets/images/country_flags/poland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/poland.png -------------------------------------------------------------------------------- /assets/images/country_flags/portugal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/portugal.png -------------------------------------------------------------------------------- /assets/images/country_flags/russia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/russia.png -------------------------------------------------------------------------------- /assets/images/country_flags/serbia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/serbia.png -------------------------------------------------------------------------------- /assets/images/country_flags/slovakia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/slovakia.png -------------------------------------------------------------------------------- /assets/images/country_flags/south-africa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/south-africa.png -------------------------------------------------------------------------------- /assets/images/country_flags/south-korea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/south-korea.png -------------------------------------------------------------------------------- /assets/images/country_flags/spain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/spain.png -------------------------------------------------------------------------------- /assets/images/country_flags/sweden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/sweden.png -------------------------------------------------------------------------------- /assets/images/country_flags/switzerland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/switzerland.png -------------------------------------------------------------------------------- /assets/images/country_flags/turkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/turkey.png -------------------------------------------------------------------------------- /assets/images/country_flags/united-arab-emirates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/united-arab-emirates.png -------------------------------------------------------------------------------- /assets/images/country_flags/united-kingdom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/united-kingdom.png -------------------------------------------------------------------------------- /assets/images/country_flags/united-states.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/country_flags/united-states.png -------------------------------------------------------------------------------- /assets/images/disney_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/disney_plus.png -------------------------------------------------------------------------------- /assets/images/entertainment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/entertainment.png -------------------------------------------------------------------------------- /assets/images/family.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/family.png -------------------------------------------------------------------------------- /assets/images/flixhq_bw.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 14 | 19 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /assets/images/general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/general.png -------------------------------------------------------------------------------- /assets/images/grid_final.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/grid_final.jpg -------------------------------------------------------------------------------- /assets/images/hbo_max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/hbo_max.png -------------------------------------------------------------------------------- /assets/images/hulu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/hulu.png -------------------------------------------------------------------------------- /assets/images/icons8-amazon-prime-video-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/icons8-amazon-prime-video-512.png -------------------------------------------------------------------------------- /assets/images/imdb_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/imdb_logo.png -------------------------------------------------------------------------------- /assets/images/itunes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/itunes.png -------------------------------------------------------------------------------- /assets/images/loading_5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/loading_5.gif -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/logo.png -------------------------------------------------------------------------------- /assets/images/movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/movie.png -------------------------------------------------------------------------------- /assets/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/music.png -------------------------------------------------------------------------------- /assets/images/na_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/na_logo.png -------------------------------------------------------------------------------- /assets/images/na_rect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/na_rect.png -------------------------------------------------------------------------------- /assets/images/na_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/na_square.png -------------------------------------------------------------------------------- /assets/images/netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/netflix.png -------------------------------------------------------------------------------- /assets/images/network-signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/network-signal.png -------------------------------------------------------------------------------- /assets/images/network-signal.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 31 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /assets/images/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/news.png -------------------------------------------------------------------------------- /assets/images/paramount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/paramount.png -------------------------------------------------------------------------------- /assets/images/peacock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/peacock.png -------------------------------------------------------------------------------- /assets/images/popcorn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/popcorn.png -------------------------------------------------------------------------------- /assets/images/profiles/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/0.png -------------------------------------------------------------------------------- /assets/images/profiles/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/1.png -------------------------------------------------------------------------------- /assets/images/profiles/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/10.png -------------------------------------------------------------------------------- /assets/images/profiles/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/100.png -------------------------------------------------------------------------------- /assets/images/profiles/101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/101.png -------------------------------------------------------------------------------- /assets/images/profiles/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/102.png -------------------------------------------------------------------------------- /assets/images/profiles/103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/103.png -------------------------------------------------------------------------------- /assets/images/profiles/104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/104.png -------------------------------------------------------------------------------- /assets/images/profiles/105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/105.png -------------------------------------------------------------------------------- /assets/images/profiles/106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/106.png -------------------------------------------------------------------------------- /assets/images/profiles/107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/107.png -------------------------------------------------------------------------------- /assets/images/profiles/108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/108.png -------------------------------------------------------------------------------- /assets/images/profiles/109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/109.png -------------------------------------------------------------------------------- /assets/images/profiles/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/11.png -------------------------------------------------------------------------------- /assets/images/profiles/110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/110.png -------------------------------------------------------------------------------- /assets/images/profiles/111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/111.png -------------------------------------------------------------------------------- /assets/images/profiles/112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/112.png -------------------------------------------------------------------------------- /assets/images/profiles/113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/113.png -------------------------------------------------------------------------------- /assets/images/profiles/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/114.png -------------------------------------------------------------------------------- /assets/images/profiles/115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/115.png -------------------------------------------------------------------------------- /assets/images/profiles/116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/116.png -------------------------------------------------------------------------------- /assets/images/profiles/117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/117.png -------------------------------------------------------------------------------- /assets/images/profiles/118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/118.png -------------------------------------------------------------------------------- /assets/images/profiles/119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/119.png -------------------------------------------------------------------------------- /assets/images/profiles/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/12.png -------------------------------------------------------------------------------- /assets/images/profiles/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/120.png -------------------------------------------------------------------------------- /assets/images/profiles/121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/121.png -------------------------------------------------------------------------------- /assets/images/profiles/122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/122.png -------------------------------------------------------------------------------- /assets/images/profiles/123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/123.png -------------------------------------------------------------------------------- /assets/images/profiles/124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/124.png -------------------------------------------------------------------------------- /assets/images/profiles/125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/125.png -------------------------------------------------------------------------------- /assets/images/profiles/126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/126.png -------------------------------------------------------------------------------- /assets/images/profiles/127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/127.png -------------------------------------------------------------------------------- /assets/images/profiles/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/128.png -------------------------------------------------------------------------------- /assets/images/profiles/129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/129.png -------------------------------------------------------------------------------- /assets/images/profiles/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/13.png -------------------------------------------------------------------------------- /assets/images/profiles/130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/130.png -------------------------------------------------------------------------------- /assets/images/profiles/131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/131.png -------------------------------------------------------------------------------- /assets/images/profiles/132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/132.png -------------------------------------------------------------------------------- /assets/images/profiles/133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/133.png -------------------------------------------------------------------------------- /assets/images/profiles/134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/134.png -------------------------------------------------------------------------------- /assets/images/profiles/135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/135.png -------------------------------------------------------------------------------- /assets/images/profiles/136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/136.png -------------------------------------------------------------------------------- /assets/images/profiles/137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/137.png -------------------------------------------------------------------------------- /assets/images/profiles/138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/138.png -------------------------------------------------------------------------------- /assets/images/profiles/139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/139.png -------------------------------------------------------------------------------- /assets/images/profiles/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/14.png -------------------------------------------------------------------------------- /assets/images/profiles/140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/140.png -------------------------------------------------------------------------------- /assets/images/profiles/141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/141.png -------------------------------------------------------------------------------- /assets/images/profiles/142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/142.png -------------------------------------------------------------------------------- /assets/images/profiles/143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/143.png -------------------------------------------------------------------------------- /assets/images/profiles/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/144.png -------------------------------------------------------------------------------- /assets/images/profiles/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/15.png -------------------------------------------------------------------------------- /assets/images/profiles/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/16.png -------------------------------------------------------------------------------- /assets/images/profiles/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/17.png -------------------------------------------------------------------------------- /assets/images/profiles/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/18.png -------------------------------------------------------------------------------- /assets/images/profiles/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/19.png -------------------------------------------------------------------------------- /assets/images/profiles/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/2.png -------------------------------------------------------------------------------- /assets/images/profiles/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/20.png -------------------------------------------------------------------------------- /assets/images/profiles/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/21.png -------------------------------------------------------------------------------- /assets/images/profiles/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/22.png -------------------------------------------------------------------------------- /assets/images/profiles/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/23.png -------------------------------------------------------------------------------- /assets/images/profiles/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/24.png -------------------------------------------------------------------------------- /assets/images/profiles/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/25.png -------------------------------------------------------------------------------- /assets/images/profiles/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/26.png -------------------------------------------------------------------------------- /assets/images/profiles/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/27.png -------------------------------------------------------------------------------- /assets/images/profiles/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/28.png -------------------------------------------------------------------------------- /assets/images/profiles/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/29.png -------------------------------------------------------------------------------- /assets/images/profiles/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/3.png -------------------------------------------------------------------------------- /assets/images/profiles/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/30.png -------------------------------------------------------------------------------- /assets/images/profiles/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/31.png -------------------------------------------------------------------------------- /assets/images/profiles/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/32.png -------------------------------------------------------------------------------- /assets/images/profiles/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/33.png -------------------------------------------------------------------------------- /assets/images/profiles/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/34.png -------------------------------------------------------------------------------- /assets/images/profiles/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/35.png -------------------------------------------------------------------------------- /assets/images/profiles/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/36.png -------------------------------------------------------------------------------- /assets/images/profiles/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/37.png -------------------------------------------------------------------------------- /assets/images/profiles/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/38.png -------------------------------------------------------------------------------- /assets/images/profiles/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/39.png -------------------------------------------------------------------------------- /assets/images/profiles/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/4.png -------------------------------------------------------------------------------- /assets/images/profiles/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/40.png -------------------------------------------------------------------------------- /assets/images/profiles/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/41.png -------------------------------------------------------------------------------- /assets/images/profiles/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/42.png -------------------------------------------------------------------------------- /assets/images/profiles/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/43.png -------------------------------------------------------------------------------- /assets/images/profiles/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/44.png -------------------------------------------------------------------------------- /assets/images/profiles/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/45.png -------------------------------------------------------------------------------- /assets/images/profiles/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/46.png -------------------------------------------------------------------------------- /assets/images/profiles/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/47.png -------------------------------------------------------------------------------- /assets/images/profiles/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/48.png -------------------------------------------------------------------------------- /assets/images/profiles/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/49.png -------------------------------------------------------------------------------- /assets/images/profiles/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/5.png -------------------------------------------------------------------------------- /assets/images/profiles/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/50.png -------------------------------------------------------------------------------- /assets/images/profiles/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/51.png -------------------------------------------------------------------------------- /assets/images/profiles/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/52.png -------------------------------------------------------------------------------- /assets/images/profiles/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/53.png -------------------------------------------------------------------------------- /assets/images/profiles/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/54.png -------------------------------------------------------------------------------- /assets/images/profiles/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/55.png -------------------------------------------------------------------------------- /assets/images/profiles/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/56.png -------------------------------------------------------------------------------- /assets/images/profiles/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/57.png -------------------------------------------------------------------------------- /assets/images/profiles/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/58.png -------------------------------------------------------------------------------- /assets/images/profiles/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/59.png -------------------------------------------------------------------------------- /assets/images/profiles/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/6.png -------------------------------------------------------------------------------- /assets/images/profiles/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/60.png -------------------------------------------------------------------------------- /assets/images/profiles/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/61.png -------------------------------------------------------------------------------- /assets/images/profiles/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/62.png -------------------------------------------------------------------------------- /assets/images/profiles/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/63.png -------------------------------------------------------------------------------- /assets/images/profiles/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/64.png -------------------------------------------------------------------------------- /assets/images/profiles/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/65.png -------------------------------------------------------------------------------- /assets/images/profiles/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/66.png -------------------------------------------------------------------------------- /assets/images/profiles/67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/67.png -------------------------------------------------------------------------------- /assets/images/profiles/68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/68.png -------------------------------------------------------------------------------- /assets/images/profiles/69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/69.png -------------------------------------------------------------------------------- /assets/images/profiles/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/7.png -------------------------------------------------------------------------------- /assets/images/profiles/70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/70.png -------------------------------------------------------------------------------- /assets/images/profiles/71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/71.png -------------------------------------------------------------------------------- /assets/images/profiles/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/72.png -------------------------------------------------------------------------------- /assets/images/profiles/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/73.png -------------------------------------------------------------------------------- /assets/images/profiles/74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/74.png -------------------------------------------------------------------------------- /assets/images/profiles/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/75.png -------------------------------------------------------------------------------- /assets/images/profiles/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/76.png -------------------------------------------------------------------------------- /assets/images/profiles/77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/77.png -------------------------------------------------------------------------------- /assets/images/profiles/78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/78.png -------------------------------------------------------------------------------- /assets/images/profiles/79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/79.png -------------------------------------------------------------------------------- /assets/images/profiles/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/8.png -------------------------------------------------------------------------------- /assets/images/profiles/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/80.png -------------------------------------------------------------------------------- /assets/images/profiles/81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/81.png -------------------------------------------------------------------------------- /assets/images/profiles/82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/82.png -------------------------------------------------------------------------------- /assets/images/profiles/83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/83.png -------------------------------------------------------------------------------- /assets/images/profiles/84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/84.png -------------------------------------------------------------------------------- /assets/images/profiles/85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/85.png -------------------------------------------------------------------------------- /assets/images/profiles/86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/86.png -------------------------------------------------------------------------------- /assets/images/profiles/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/87.png -------------------------------------------------------------------------------- /assets/images/profiles/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/88.png -------------------------------------------------------------------------------- /assets/images/profiles/89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/89.png -------------------------------------------------------------------------------- /assets/images/profiles/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/9.png -------------------------------------------------------------------------------- /assets/images/profiles/90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/90.png -------------------------------------------------------------------------------- /assets/images/profiles/91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/91.png -------------------------------------------------------------------------------- /assets/images/profiles/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/92.png -------------------------------------------------------------------------------- /assets/images/profiles/93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/93.png -------------------------------------------------------------------------------- /assets/images/profiles/94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/94.png -------------------------------------------------------------------------------- /assets/images/profiles/95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/95.png -------------------------------------------------------------------------------- /assets/images/profiles/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/96.png -------------------------------------------------------------------------------- /assets/images/profiles/97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/97.png -------------------------------------------------------------------------------- /assets/images/profiles/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/98.png -------------------------------------------------------------------------------- /assets/images/profiles/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/profiles/99.png -------------------------------------------------------------------------------- /assets/images/sample_frame.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/sample_frame.jpg -------------------------------------------------------------------------------- /assets/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/search.png -------------------------------------------------------------------------------- /assets/images/series.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/series.png -------------------------------------------------------------------------------- /assets/images/splash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/splash_logo.png -------------------------------------------------------------------------------- /assets/images/sport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/sport.png -------------------------------------------------------------------------------- /assets/images/tmdb_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/tmdb_logo.png -------------------------------------------------------------------------------- /assets/images/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BeamlakAschalew/flixquest/0e7dbf041c05791208339436eafa5cc51569ecac/assets/images/youtube.png -------------------------------------------------------------------------------- /devtools_options.yaml: -------------------------------------------------------------------------------- 1 | extensions: 2 | -------------------------------------------------------------------------------- /lib/constants/api_constants.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: non_constant_identifier_names, constant_identifier_names 2 | 3 | import 'package:flutter_dotenv/flutter_dotenv.dart'; 4 | 5 | const String TMDB_API_BASE_URL = 'https://api.themoviedb.org/3'; 6 | const String opensubtitlesBaseUrl = 'https://api.opensubtitles.com/api/v1'; 7 | String TMDB_API_KEY = dotenv.env['TMDB_API_KEY']!; 8 | String mixpanelKey = dotenv.env['MIXPANEL_API_KEY']!; 9 | String openSubtitlesKey = dotenv.env['OPENSUBTITLES_API_KEY']!; 10 | const TMDB_BASE_IMAGE_URL = 'https://image.tmdb.org/t/p/'; 11 | const String EMBED_BASE_MOVIE_URL = 12 | 'https://www.2embed.to/embed/tmdb/movie?id='; 13 | const String EMBED_BASE_TV_URL = 'https://www.2embed.to/embed/tmdb/tv?id='; 14 | const String YOUTUBE_THUMBNAIL_URL = 'https://i3.ytimg.com/vi/'; 15 | const String YOUTUBE_BASE_URL = 'https://youtube.com/watch?v='; 16 | const String FACEBOOK_BASE_URL = 'https://facebook.com/'; 17 | const String INSTAGRAM_BASE_URL = 'https://instagram.com/'; 18 | const String TWITTER_BASE_URL = 'https://twitter.com/'; 19 | const String IMDB_BASE_URL = 'https://imdb.com/title/'; 20 | const String TWOEMBED_BASE_URL = 'https://2embed.biz'; 21 | const String FLIXQUEST_UPDATE_URL = 22 | 'https://beamlakaschalew.github.io/cinemax/res/update.json'; 23 | String CONSUMET_API = dotenv.env['CONSUMET_URL']!; 24 | String CONSUMET_INFO_API = dotenv.env['CONSUMET_URL']!; 25 | String flixquestApiUrl = dotenv.env['FLIXQUEST_API_URL']!; 26 | const String STREAMING_SERVER_FLIXHQ = 'vidcloud'; 27 | const String STREAMING_SERVER_DCVA = 'asianload'; 28 | const String STREAMING_SERVER_ZORO = 'vidcloud'; 29 | -------------------------------------------------------------------------------- /lib/constants/app_constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_cache_manager/flutter_cache_manager.dart'; 3 | import 'package:retry/retry.dart'; 4 | import 'dart:io'; 5 | 6 | import 'package:shared_preferences/shared_preferences.dart'; 7 | 8 | const kTextHeaderStyle = TextStyle( 9 | fontFamily: 'PoppinsSB', 10 | fontSize: 22, 11 | ); 12 | 13 | const kBoldItemTitleStyle = TextStyle( 14 | fontFamily: 'PoppinsSB', 15 | fontSize: 19, 16 | ); 17 | 18 | const kTextSmallHeaderStyle = TextStyle( 19 | fontFamily: 'PoppinsSB', 20 | fontSize: 17, 21 | overflow: TextOverflow.ellipsis, 22 | ); 23 | 24 | const kTextSmallBodyStyle = TextStyle( 25 | fontFamily: 'Poppins', 26 | fontSize: 17, 27 | overflow: TextOverflow.ellipsis, 28 | ); 29 | 30 | const kTextVerySmallBodyStyle = TextStyle( 31 | fontFamily: 'Poppins', 32 | fontSize: 13, 33 | overflow: TextOverflow.ellipsis, 34 | ); 35 | 36 | const kTextSmallAboutBodyStyle = TextStyle( 37 | fontFamily: 'Poppins', 38 | fontSize: 14, 39 | overflow: TextOverflow.ellipsis, 40 | ); 41 | 42 | const kTableLeftStyle = 43 | TextStyle(overflow: TextOverflow.ellipsis, fontWeight: FontWeight.bold); 44 | 45 | const String currentAppVersion = '2.7.1'; 46 | 47 | final client = HttpClient(); 48 | const retryOptions = RetryOptions( 49 | maxDelay: Duration(milliseconds: 300), 50 | delayFactor: Duration(seconds: 0), 51 | maxAttempts: 100000); 52 | const timeOut = Duration(seconds: 60); 53 | 54 | const retryOptionsStream = RetryOptions( 55 | maxDelay: Duration(milliseconds: 300), 56 | delayFactor: Duration(seconds: 0), 57 | maxAttempts: 1); 58 | const timeOutStream = Duration(seconds: 15); 59 | 60 | final List appNames = [ 61 | 'flixquest-v2.4.0.apk', 62 | 'flixquest-v2.4.1.apk', 63 | 'flixquest-v2.4.2.apk', 64 | 'flixquest-v2.4.3.apk', 65 | 'flixquest-v2.4.4.apk', 66 | 'flixquest-v2.5.0.apk', 67 | 'flixquest-v2.5.0-2.apk', 68 | 'flixquest-v2.5.0-3.apk', 69 | 'flixquest-v2.5.0-4.apk', 70 | 'flixquest-v2.5.0-5.apk', 71 | 'flixquest-v2.5.0-6.apk', 72 | 'flixquest-v2.6.0.apk', 73 | 'flixquest-v2.7.0.apk', 74 | 'flixquest-v2.7.1.apk' 75 | ]; 76 | 77 | CacheManager cacheProp() { 78 | return CacheManager( 79 | Config('cacheKey', stalePeriod: const Duration(days: 15))); 80 | } 81 | 82 | enum MediaType { movie, tvShow } 83 | 84 | enum StreamRoute { flixHQ, tmDB } 85 | 86 | class MyHttpOverrides extends HttpOverrides { 87 | @override 88 | HttpClient createHttpClient(SecurityContext? context) { 89 | return super.createHttpClient(context) 90 | ..badCertificateCallback = 91 | (X509Certificate cert, String host, int port) => true; 92 | } 93 | } 94 | 95 | const providerPreference = 96 | 'flixhq-FlixHQ zoro-Zoro dramacool-Dramacool'; 97 | 98 | late SharedPreferences sharedPrefsSingleton; 99 | 100 | 101 | /// easy localization run command 102 | // flutter pub run easy_localization:generate -S assets/translations -f keys -O lib/translations -o locale_keys.g.dart 103 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'package:flixquest/flixquest_main.dart'; 3 | import '../models/translation.dart'; 4 | import '../provider/app_dependency_provider.dart'; 5 | import 'package:easy_localization/easy_localization.dart'; 6 | import 'package:firebase_core/firebase_core.dart'; 7 | import 'package:firebase_messaging/firebase_messaging.dart'; 8 | import 'package:flutter_dotenv/flutter_dotenv.dart'; 9 | import 'package:flutter_downloader/flutter_downloader.dart'; 10 | import 'constants/app_constants.dart'; 11 | import 'provider/recently_watched_provider.dart'; 12 | import 'package:flutter/material.dart'; 13 | import 'provider/settings_provider.dart'; 14 | import 'singleton/sharedpreferences_singleton.dart'; 15 | 16 | Future _messageHandler(RemoteMessage message) async {} 17 | 18 | bool isTablet(BuildContext context) { 19 | double screenWidth = MediaQuery.of(context).size.width; 20 | double threshold = 1000.0; 21 | return screenWidth > threshold; 22 | } 23 | 24 | SettingsProvider settingsProvider = SettingsProvider(); 25 | RecentProvider recentProvider = RecentProvider(); 26 | AppDependencyProvider appDependencyProvider = AppDependencyProvider(); 27 | final Future _initialization = Firebase.initializeApp(); 28 | 29 | Future appInitialize() async { 30 | WidgetsFlutterBinding.ensureInitialized(); 31 | // ByteData data = 32 | // await PlatformAssetBundle().load('assets/ca/lets-encrypt-r3.pem'); 33 | // SecurityContext.defaultContext 34 | // .setTrustedCertificatesBytes(data.buffer.asUint8List()); 35 | await dotenv.load(fileName: '.env'); 36 | await EasyLocalization.ensureInitialized(); 37 | sharedPrefsSingleton = await SharedPreferencesSingleton.getInstance(); 38 | FirebaseMessaging.onBackgroundMessage(_messageHandler); 39 | await FlutterDownloader.initialize(debug: true, ignoreSsl: true); 40 | 41 | await settingsProvider.getCurrentThemeMode(); 42 | await settingsProvider.getCurrentMaterial3Mode(); 43 | await settingsProvider.initMixpanel(); 44 | await settingsProvider.getCurrentAdultMode(); 45 | await settingsProvider.getCurrentDefaultScreen(); 46 | await settingsProvider.getCurrentImageQuality(); 47 | await settingsProvider.getCurrentWatchCountry(); 48 | await settingsProvider.getCurrentViewType(); 49 | await settingsProvider.getSeekDuration(); 50 | await settingsProvider.getMaxBufferDuration(); 51 | await settingsProvider.getVideoResolution(); 52 | await settingsProvider.getSubtitleLanguage(); 53 | await settingsProvider.getSubtitleMode(); 54 | await settingsProvider.getViewMode(); 55 | await settingsProvider.getSubtitleSize(); 56 | await settingsProvider.getForegroundSubtitleColor(); 57 | await settingsProvider.getBackgroundSubtitleColor(); 58 | await settingsProvider.getAppLanguage(); 59 | await settingsProvider.getAppColorIndex(); 60 | await settingsProvider.getProviderPrecedence(); 61 | await settingsProvider.getPlayerTimeStyle(); 62 | await settingsProvider.getUseProxyMode(); 63 | await settingsProvider.getSubtitleStyle(); 64 | await recentProvider.fetchMovies(); 65 | await recentProvider.fetchEpisodes(); 66 | await appDependencyProvider.getConsumetUrl(); 67 | await appDependencyProvider.getFlixQuestLogo(); 68 | await appDependencyProvider.getOpenSubKey(); 69 | await appDependencyProvider.getStreamingServerFlixHQ(); 70 | await appDependencyProvider.getStreamingServerDCVA(); 71 | await appDependencyProvider.getStreamingServerZoro(); 72 | await appDependencyProvider.getStreamRoute(); 73 | await appDependencyProvider.getFQUrl(); 74 | await appDependencyProvider.getTmdbProxy(); 75 | 76 | await _initialization; 77 | } 78 | 79 | void main() async { 80 | await appInitialize(); 81 | HttpOverrides.global = MyHttpOverrides(); 82 | runApp(EasyLocalization( 83 | supportedLocales: Translation.all, 84 | path: 'assets/translations', 85 | fallbackLocale: Translation.all[0], 86 | startLocale: Locale(settingsProvider.appLanguage), 87 | child: FlixQuest( 88 | settingsProvider: settingsProvider, 89 | recentProvider: recentProvider, 90 | appDependencyProvider: appDependencyProvider, 91 | init: _initialization, 92 | ), 93 | )); 94 | } 95 | -------------------------------------------------------------------------------- /lib/models/app_colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AppColor { 4 | ColorScheme cs; 5 | int index; 6 | AppColor({required this.cs, required this.index}); 7 | 8 | static ColorScheme colorGetter(Color color, bool isDark) { 9 | return ColorScheme.fromSeed( 10 | seedColor: color, 11 | brightness: isDark ? Brightness.dark : Brightness.light); 12 | } 13 | } 14 | 15 | class AppColorsList { 16 | List appColors(bool isDark) { 17 | List baseColors = [ 18 | const Color(0xFF32a852), // Green 19 | const Color(0xFFff5722), // Deep Orange 20 | const Color(0xFF3f51b5), // Indigo 21 | const Color(0xFFe91e63), // Pink 22 | const Color(0xFF009688), // Teal 23 | const Color(0xFF673ab7), // Deep Purple 24 | const Color(0xFF795548), // Brown 25 | const Color(0xFF607d8b), // Blue Grey 26 | const Color(0xFFcddc39), // Lime 27 | const Color(0xFF4caf50), // Green 28 | const Color(0xFF9c27b0), // Purple 29 | const Color(0xFF00bcd4), // Cyan 30 | const Color(0xFF795548), // Brown 31 | const Color(0xFFf44336), // Red 32 | const Color(0xFF03a9f4), // Light Blue 33 | ]; 34 | 35 | List appColors = [ 36 | AppColor( 37 | cs: AppColor.colorGetter(const Color(0xFFF57C00), isDark), index: -1), 38 | AppColor(cs: AppColor.colorGetter(baseColors[0], isDark), index: 1), 39 | AppColor(cs: AppColor.colorGetter(baseColors[1], isDark), index: 2), 40 | AppColor(cs: AppColor.colorGetter(baseColors[2], isDark), index: 3), 41 | AppColor(cs: AppColor.colorGetter(baseColors[3], isDark), index: 4), 42 | AppColor(cs: AppColor.colorGetter(baseColors[4], isDark), index: 5), 43 | AppColor(cs: AppColor.colorGetter(baseColors[5], isDark), index: 6), 44 | AppColor(cs: AppColor.colorGetter(baseColors[6], isDark), index: 7), 45 | AppColor(cs: AppColor.colorGetter(baseColors[7], isDark), index: 8), 46 | AppColor(cs: AppColor.colorGetter(baseColors[8], isDark), index: 9), 47 | AppColor(cs: AppColor.colorGetter(baseColors[9], isDark), index: 10), 48 | AppColor(cs: AppColor.colorGetter(baseColors[10], isDark), index: 11), 49 | AppColor(cs: AppColor.colorGetter(baseColors[11], isDark), index: 12), 50 | AppColor(cs: AppColor.colorGetter(baseColors[12], isDark), index: 13), 51 | AppColor(cs: AppColor.colorGetter(baseColors[13], isDark), index: 14), 52 | AppColor(cs: AppColor.colorGetter(baseColors[14], isDark), index: 15), 53 | ]; 54 | return appColors; 55 | } 56 | } 57 | 58 | /* 59 | 60 | 61 | List appColors = [ 62 | AppColor( 63 | cs: AppColor.colorGetter(const Color(0xFFF57C00), isDark), index: -1), 64 | AppColor( 65 | cs: AppColor.colorGetter(const Color(0xFF32a852), isDark), index: 0), 66 | AppColor( 67 | cs: AppColor.colorGetter(const Color(0xFF8e44ad), isDark), index: 1), 68 | AppColor( 69 | cs: AppColor.colorGetter(const Color(0xFF2c3e50), isDark), index: 2), 70 | AppColor( 71 | cs: AppColor.colorGetter(const Color(0xFFd35400), isDark), index: 3), 72 | AppColor( 73 | cs: AppColor.colorGetter(const Color(0xFF16a085), isDark), index: 4), 74 | AppColor( 75 | cs: AppColor.colorGetter(const Color(0xFFc0392b), isDark), index: 5), 76 | AppColor( 77 | cs: AppColor.colorGetter(const Color(0xFFc09b2b), isDark), index: 6), 78 | ]; 79 | 80 | 81 | */ 82 | -------------------------------------------------------------------------------- /lib/models/app_languages.dart: -------------------------------------------------------------------------------- 1 | class AppLanguages { 2 | AppLanguages( 3 | {required this.languageFlag, 4 | required this.languageName, 5 | required this.languageCode}); 6 | String languageName; 7 | String languageFlag; 8 | String languageCode; 9 | } 10 | -------------------------------------------------------------------------------- /lib/models/choice_chip.dart: -------------------------------------------------------------------------------- 1 | class SortChoiceChipWidget { 2 | SortChoiceChipWidget( 3 | {required this.name, required this.value, required this.index}); 4 | final String value; 5 | final String name; 6 | final int index; 7 | } 8 | 9 | class AdultChoiceChipWidget { 10 | AdultChoiceChipWidget( 11 | {required this.index, required this.name, required this.value}); 12 | final String name; 13 | final bool value; 14 | final int index; 15 | } 16 | 17 | class TVSeriesStatus { 18 | TVSeriesStatus( 19 | {required this.statusId, required this.statusName, required this.index}); 20 | String statusName; 21 | String statusId; 22 | final int index; 23 | } 24 | -------------------------------------------------------------------------------- /lib/models/custom_exceptions.dart: -------------------------------------------------------------------------------- 1 | class NotFoundException implements Exception { 2 | String? message; 3 | 4 | NotFoundException({this.message}); 5 | 6 | @override 7 | String toString() { 8 | return message ?? ''; 9 | } 10 | } 11 | 12 | class ServerDownException implements Exception { 13 | String? message; 14 | 15 | ServerDownException({this.message}); 16 | 17 | @override 18 | String toString() { 19 | return message ?? ''; 20 | } 21 | } 22 | 23 | class ChannelsNotFoundException implements Exception { 24 | String? message; 25 | 26 | ChannelsNotFoundException({this.message}); 27 | 28 | @override 29 | String toString() { 30 | return message ?? ''; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/models/dropdown_select.dart: -------------------------------------------------------------------------------- 1 | class YearDropdownData { 2 | List yearsList = [ 3 | '', 4 | '2024', 5 | '2023', 6 | '2022', 7 | '2021', 8 | '2020', 9 | '2019', 10 | '2018', 11 | '2017', 12 | '2016', 13 | '2015', 14 | '2014', 15 | '2013', 16 | '2012', 17 | '2011', 18 | '2010', 19 | '2009', 20 | '2008', 21 | '2007', 22 | '2006', 23 | '2005', 24 | '2004', 25 | '2003', 26 | '2002', 27 | '2001', 28 | '2000', 29 | '1999', 30 | '1998', 31 | '1997', 32 | '1996', 33 | '1995', 34 | '1994', 35 | '1993', 36 | '1992', 37 | '1991', 38 | '1990', 39 | '1989', 40 | '1988', 41 | '1987', 42 | '1986', 43 | '1985', 44 | ]; 45 | } 46 | -------------------------------------------------------------------------------- /lib/models/external_subtitles.dart: -------------------------------------------------------------------------------- 1 | class ExternalSubtitle { 2 | ExternalSubtitle({required this.data}); 3 | List? data; 4 | 5 | ExternalSubtitle.fromJson(Map json) { 6 | if (json['data'] != null) { 7 | data = []; 8 | json['data'].forEach((v) { 9 | data!.add(SubtitleData.fromJson(v)); 10 | }); 11 | } 12 | } 13 | } 14 | 15 | class SubtitleData { 16 | SubtitleData({required this.attr}); 17 | 18 | SubtitleAttr? attr; 19 | 20 | SubtitleData.fromJson(Map json) { 21 | attr = SubtitleAttr.fromJson(json['attributes']); 22 | } 23 | } 24 | 25 | class SubtitleAttr { 26 | SubtitleAttr({required this.files}); 27 | List? files; 28 | 29 | SubtitleAttr.fromJson(Map json) { 30 | if (json['files'] != null) { 31 | files = []; 32 | json['files'].forEach((v) { 33 | files!.add(SubtitleFiles.fromJson(v)); 34 | }); 35 | } 36 | } 37 | } 38 | 39 | class SubtitleFiles { 40 | SubtitleFiles({required this.fileId}); 41 | int? fileId; 42 | 43 | SubtitleFiles.fromJson(Map json) { 44 | fileId = json['file_id']; 45 | } 46 | } 47 | 48 | class SubtitleDownload { 49 | SubtitleDownload({required this.link}); 50 | String? link; 51 | 52 | SubtitleDownload.fromJson(Map json) { 53 | if (json.containsKey('link')) { 54 | link = json['link']; 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /lib/models/filter_chip.dart: -------------------------------------------------------------------------------- 1 | class MovieGenreFilterChipWidget { 2 | MovieGenreFilterChipWidget( 3 | {required this.genreName, required this.genreValue}); 4 | String genreName; 5 | String genreValue; 6 | } 7 | 8 | class TVGenreFilterChipWidget { 9 | TVGenreFilterChipWidget({required this.genreName, required this.genreValue}); 10 | String genreName; 11 | String genreValue; 12 | } 13 | 14 | class WatchProvidersFilterChipWidget { 15 | WatchProvidersFilterChipWidget( 16 | {required this.networkName, required this.networkId}); 17 | String networkName; 18 | String networkId; 19 | } 20 | -------------------------------------------------------------------------------- /lib/models/genres.dart: -------------------------------------------------------------------------------- 1 | class GenreList { 2 | List? genre; 3 | 4 | GenreList({ 5 | this.genre, 6 | }); 7 | 8 | GenreList.fromJson(Map json) { 9 | if (json['genres'] != null) { 10 | genre = []; 11 | json['genres'].forEach((v) { 12 | genre?.add(Genres.fromJson(v)); 13 | }); 14 | } 15 | } 16 | 17 | Map toJson() { 18 | final Map data = {}; 19 | if (genre != null) { 20 | data['genres'] = genre?.map((v) => v.toJson()).toList(); 21 | } 22 | return data; 23 | } 24 | } 25 | 26 | class Genres { 27 | String? genreName; 28 | int? genreID; 29 | Genres({this.genreName, this.genreID}); 30 | Genres.fromJson(Map json) { 31 | genreName = json['name']; 32 | genreID = json['id']; 33 | } 34 | Map toJson() { 35 | final Map data = {}; 36 | data['name'] = genreName; 37 | data['id'] = genreID; 38 | return data; 39 | } 40 | } 41 | 42 | class MovieGenreNaming { 43 | String? genreName; 44 | int? genreValue; 45 | 46 | MovieGenreNaming({this.genreValue, this.genreName}); 47 | } 48 | 49 | class TVGenreNaming { 50 | String? genreName; 51 | int? genreValue; 52 | 53 | TVGenreNaming({this.genreValue, this.genreName}); 54 | } 55 | 56 | class GenreData { 57 | List movieGenres = [ 58 | MovieGenreNaming(genreName: 'Action', genreValue: 28), 59 | MovieGenreNaming(genreName: 'Adventure', genreValue: 12), 60 | MovieGenreNaming(genreName: 'Animation', genreValue: 16), 61 | MovieGenreNaming(genreName: 'Comedy', genreValue: 35), 62 | MovieGenreNaming(genreName: 'Crime', genreValue: 80), 63 | MovieGenreNaming(genreName: 'Documentary', genreValue: 99), 64 | MovieGenreNaming(genreName: 'Drama', genreValue: 18), 65 | MovieGenreNaming(genreName: 'Family', genreValue: 10751), 66 | MovieGenreNaming(genreName: 'Fantasy', genreValue: 14), 67 | MovieGenreNaming(genreName: 'History', genreValue: 36), 68 | MovieGenreNaming(genreName: 'Horror', genreValue: 27), 69 | MovieGenreNaming(genreName: 'Music', genreValue: 10402), 70 | MovieGenreNaming(genreName: 'Mystery', genreValue: 9648), 71 | MovieGenreNaming(genreName: 'Romance', genreValue: 10749), 72 | MovieGenreNaming(genreName: 'Science Fiction', genreValue: 878), 73 | MovieGenreNaming(genreName: 'TV Movie', genreValue: 10770), 74 | MovieGenreNaming(genreName: 'Thriller', genreValue: 53), 75 | MovieGenreNaming(genreName: 'War', genreValue: 10752), 76 | MovieGenreNaming(genreName: 'Western', genreValue: 37), 77 | ]; 78 | 79 | List tvGenre = [ 80 | TVGenreNaming(genreName: 'Action & Adventure', genreValue: 10759), 81 | TVGenreNaming(genreName: 'Animation', genreValue: 16), 82 | TVGenreNaming(genreName: 'Comedy', genreValue: 35), 83 | TVGenreNaming(genreName: 'Crime', genreValue: 80), 84 | TVGenreNaming(genreName: 'Documentary', genreValue: 99), 85 | TVGenreNaming(genreName: 'Drama', genreValue: 18), 86 | TVGenreNaming(genreName: 'Family', genreValue: 10751), 87 | TVGenreNaming(genreName: 'Kids', genreValue: 10762), 88 | TVGenreNaming(genreName: 'Mystery', genreValue: 9648), 89 | TVGenreNaming(genreName: 'News', genreValue: 10763), 90 | TVGenreNaming(genreName: 'Reality', genreValue: 10764), 91 | TVGenreNaming(genreName: 'Sci-Fi & Fantasy', genreValue: 10765), 92 | TVGenreNaming(genreName: 'Soap', genreValue: 10766), 93 | TVGenreNaming(genreName: 'Talk', genreValue: 10767), 94 | TVGenreNaming(genreName: 'War & Politics', genreValue: 10768), 95 | TVGenreNaming(genreName: 'Western', genreValue: 37), 96 | ]; 97 | } 98 | -------------------------------------------------------------------------------- /lib/models/images.dart: -------------------------------------------------------------------------------- 1 | class Images { 2 | List? backdrop; 3 | List? poster; 4 | List? still; 5 | List? logos; 6 | 7 | Images({ 8 | this.backdrop, 9 | this.poster, 10 | this.still, 11 | this.logos, 12 | }); 13 | 14 | Images.fromJson(Map json) { 15 | if (json['backdrops'] != null) { 16 | backdrop = []; 17 | json['backdrops'].forEach((v) { 18 | backdrop?.add(Backdrops.fromJson(v)); 19 | }); 20 | } 21 | if (json['posters'] != null) { 22 | poster = []; 23 | json['posters'].forEach((v) { 24 | poster?.add(Posters.fromJson(v)); 25 | }); 26 | } 27 | if (json['stills'] != null) { 28 | still = []; 29 | json['stills'].forEach((v) { 30 | still?.add(Stills.fromJson(v)); 31 | }); 32 | } 33 | if (json['logos'] != null) { 34 | logos = []; 35 | json['logos'].forEach((v) { 36 | logos?.add(Logos.fromJson(v)); 37 | }); 38 | } 39 | } 40 | 41 | Map toJson() { 42 | final Map data = {}; 43 | if (backdrop != null) { 44 | data['backdrops'] = backdrop?.map((v) => v.toJson()).toList(); 45 | } 46 | if (poster != null) { 47 | data['posters'] = poster?.map((v) => v.toJson()).toList(); 48 | } 49 | if (still != null) { 50 | data['stills'] = still?.map((v) => v.toJson()).toList(); 51 | } 52 | if (logos != null) { 53 | data['logos'] = logos?.map((v) => v.toJson()).toList(); 54 | } 55 | return data; 56 | } 57 | } 58 | 59 | class Backdrops { 60 | String? filePath; 61 | Backdrops({this.filePath}); 62 | Backdrops.fromJson(Map json) { 63 | filePath = json['file_path']; 64 | } 65 | Map toJson() { 66 | final Map data = {}; 67 | data['file_path'] = filePath; 68 | 69 | return data; 70 | } 71 | } 72 | 73 | class Posters { 74 | String? posterPath; 75 | Posters({this.posterPath}); 76 | Posters.fromJson(Map json) { 77 | posterPath = json['file_path']; 78 | } 79 | Map toJson() { 80 | final Map data = {}; 81 | data['file_path'] = posterPath; 82 | return data; 83 | } 84 | } 85 | 86 | class Stills { 87 | String? stillPath; 88 | Stills({this.stillPath}); 89 | Stills.fromJson(Map json) { 90 | stillPath = json['file_path']; 91 | } 92 | Map toJson() { 93 | final Map data = {}; 94 | data['file_path'] = stillPath; 95 | return data; 96 | } 97 | } 98 | 99 | class Logos { 100 | String? stillPath; 101 | Logos({this.stillPath}); 102 | Logos.fromJson(Map json) { 103 | stillPath = json['file_path']; 104 | } 105 | Map toJson() { 106 | final Map data = {}; 107 | data['file_path'] = stillPath; 108 | return data; 109 | } 110 | } 111 | 112 | class PersonImages { 113 | List? profile; 114 | PersonImages(this.profile); 115 | 116 | PersonImages.fromJson(Map json) { 117 | if (json['profiles'] != null) { 118 | profile = []; 119 | json['profiles'].forEach((v) { 120 | profile?.add(Profiles.fromJson(v)); 121 | }); 122 | } 123 | } 124 | 125 | Map toJson() { 126 | final Map data = {}; 127 | if (profile != null) { 128 | data['profiles'] = profile?.map((v) => v.toJson()).toList(); 129 | } 130 | return data; 131 | } 132 | } 133 | 134 | class Profiles { 135 | String? filePath; 136 | Profiles(this.filePath); 137 | Profiles.fromJson(Map json) { 138 | filePath = json['file_path']; 139 | } 140 | Map toJson() { 141 | final Map data = {}; 142 | data['file_path'] = filePath; 143 | 144 | return data; 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /lib/models/live_tv.dart: -------------------------------------------------------------------------------- 1 | class Channels { 2 | static String? baseUrl; 3 | static String? trailingUrl; 4 | static String? referrer; 5 | static String? userAgent; 6 | List? channels; 7 | Channels.fromJson(Map json) { 8 | baseUrl = json['base_url']; 9 | trailingUrl = json['trailing_url']; 10 | referrer = json['referrer']; 11 | userAgent = json['user_agent']; 12 | if (json['channels'] != null) { 13 | channels = []; 14 | json['channels'].forEach((v) { 15 | channels!.add(Channel.fromJson(v)); 16 | }); 17 | } 18 | } 19 | 20 | Channels({this.channels}); 21 | 22 | Channels.fromObject(Channels channel); 23 | } 24 | 25 | class Channel { 26 | String? channelName; 27 | int? channelId; 28 | Channel({this.channelId, this.channelName}); 29 | 30 | Channel.fromJson(Map json) { 31 | channelName = json['channel_name']; 32 | channelId = json['id']; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/models/movie_stream_metadata.dart: -------------------------------------------------------------------------------- 1 | class MovieStreamMetadata { 2 | int? movieId; 3 | String? movieName; 4 | int? releaseYear; 5 | String? posterPath; 6 | String? backdropPath; 7 | int? elapsed; 8 | bool? isAdult; 9 | String? releaseDate; 10 | 11 | MovieStreamMetadata( 12 | {required this.backdropPath, 13 | required this.elapsed, 14 | required this.movieId, 15 | required this.movieName, 16 | required this.posterPath, 17 | required this.releaseYear, 18 | required this.isAdult, 19 | required this.releaseDate}); 20 | } 21 | -------------------------------------------------------------------------------- /lib/models/profile_image_list.dart: -------------------------------------------------------------------------------- 1 | class Profile { 2 | Profile({required this.index}); 3 | final int index; 4 | } 5 | 6 | class ProfileImages { 7 | List profile() { 8 | List profileImages = []; 9 | for (int i = 0; i <= 143; i++) { 10 | profileImages.add(Profile(index: i)); 11 | } 12 | return profileImages; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/models/recently_watched.dart: -------------------------------------------------------------------------------- 1 | class RecentMovie { 2 | RecentMovie( 3 | {required this.backdropPath, 4 | required this.dateTime, 5 | required this.elapsed, 6 | required this.id, 7 | required this.posterPath, 8 | required this.releaseYear, 9 | required this.remaining, 10 | required this.title}); 11 | 12 | int? id; 13 | String? title; 14 | int? releaseYear; 15 | int? elapsed; 16 | int? remaining; 17 | String? dateTime; 18 | String? posterPath; 19 | String? backdropPath; 20 | 21 | Map toMap() { 22 | var map = {}; 23 | map['id'] = id; 24 | map['title'] = title; 25 | map['release_year'] = releaseYear; 26 | map['elapsed'] = elapsed; 27 | map['remaining'] = remaining; 28 | map['date_watched'] = dateTime; 29 | map['poster_path'] = posterPath; 30 | map['backdrop_path'] = backdropPath; 31 | return map; 32 | } 33 | 34 | RecentMovie.fromMapObject(Map map) { 35 | id = map['id']; 36 | title = map['title']; 37 | releaseYear = map['release_year']; 38 | elapsed = map['elapsed']; 39 | remaining = map['remaining']; 40 | dateTime = map['date_watched']; 41 | posterPath = map['poster_path']; 42 | backdropPath = map['backdrop_path']; 43 | } 44 | } 45 | 46 | class RecentEpisode { 47 | int? id; 48 | String? seriesName; 49 | String? episodeName; 50 | int? episodeNum; 51 | int? seasonNum; 52 | String? posterPath; 53 | String? dateTime; 54 | int? elapsed; 55 | int? remaining; 56 | int? seriesId; 57 | 58 | RecentEpisode( 59 | {required this.dateTime, 60 | required this.elapsed, 61 | required this.episodeName, 62 | required this.episodeNum, 63 | required this.id, 64 | required this.posterPath, 65 | required this.remaining, 66 | required this.seasonNum, 67 | required this.seriesName, 68 | required this.seriesId}); 69 | 70 | Map toMap() { 71 | var map = {}; 72 | map['id'] = id; 73 | map['series_name'] = seriesName; 74 | map['episode_name'] = episodeName; 75 | map['episode_num'] = episodeNum; 76 | map['season_num'] = seasonNum; 77 | map['poster_path'] = posterPath; 78 | map['elapsed'] = elapsed; 79 | map['remaining'] = remaining; 80 | map['date_added'] = dateTime; 81 | map['series_id'] = seriesId; 82 | return map; 83 | } 84 | 85 | RecentEpisode.fromMapObject(Map map) { 86 | id = map['id']; 87 | seriesName = map['series_name']; 88 | episodeName = map['episode_name']; 89 | episodeNum = map['episode_num']; 90 | seasonNum = map['season_num']; 91 | posterPath = map['poster_path']; 92 | elapsed = map['elapsed']; 93 | remaining = map['remaining']; 94 | dateTime = map['date_added']; 95 | seriesId = map['series_id']; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /lib/models/social_icons_icons.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: constant_identifier_names 2 | 3 | import 'package:flutter/widgets.dart'; 4 | 5 | class SocialIcons { 6 | SocialIcons._(); 7 | 8 | static const _kFontFam = 'SocialIcons'; 9 | static const String? _kFontPkg = null; 10 | 11 | static const IconData globe = 12 | IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg); 13 | static const IconData twitter = 14 | IconData(0xf099, fontFamily: _kFontFam, fontPackage: _kFontPkg); 15 | static const IconData instagram = 16 | IconData(0xf16d, fontFamily: _kFontFam, fontPackage: _kFontPkg); 17 | static const IconData imdb = 18 | IconData(0xf2d8, fontFamily: _kFontFam, fontPackage: _kFontPkg); 19 | static const IconData facebook_f = 20 | IconData(0xf39e, fontFamily: _kFontFam, fontPackage: _kFontPkg); 21 | } 22 | -------------------------------------------------------------------------------- /lib/models/translation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Translation { 4 | static const all = [Locale('en'), Locale('es'), Locale('ar'), Locale('hi')]; 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/tv_genres.dart: -------------------------------------------------------------------------------- 1 | class TVGenreList { 2 | List? genre; 3 | 4 | TVGenreList({ 5 | this.genre, 6 | }); 7 | 8 | TVGenreList.fromJson(Map json) { 9 | if (json['genres'] != null) { 10 | genre = []; 11 | json['genres'].forEach((v) { 12 | genre?.add(TVGenres.fromJson(v)); 13 | }); 14 | } 15 | } 16 | 17 | Map toJson() { 18 | final Map data = {}; 19 | if (genre != null) { 20 | data['genres'] = genre?.map((v) => v.toJson()).toList(); 21 | } 22 | return data; 23 | } 24 | } 25 | 26 | class TVGenres { 27 | String? genreName; 28 | int? genreID; 29 | TVGenres({this.genreName, this.genreID}); 30 | TVGenres.fromJson(Map json) { 31 | genreName = json['name']; 32 | genreID = json['id']; 33 | } 34 | Map toJson() { 35 | final Map data = {}; 36 | data['name'] = genreName; 37 | data['id'] = genreID; 38 | return data; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/models/tv_stream_metadata.dart: -------------------------------------------------------------------------------- 1 | class TVStreamMetadata { 2 | int? episodeId; 3 | String? seriesName; 4 | String? episodeName; 5 | int? episodeNumber; 6 | int? seasonNumber; 7 | String? posterPath; 8 | int? elapsed; 9 | int? tvId; 10 | String? airDate; 11 | 12 | TVStreamMetadata( 13 | {required this.elapsed, 14 | required this.episodeId, 15 | required this.episodeName, 16 | required this.episodeNumber, 17 | required this.posterPath, 18 | required this.seasonNumber, 19 | required this.seriesName, 20 | required this.tvId, 21 | required this.airDate}); 22 | } 23 | -------------------------------------------------------------------------------- /lib/models/update.dart: -------------------------------------------------------------------------------- 1 | class UpdateChecker { 2 | String? versionNumber; 3 | String? downloadLink; 4 | String? changeLog; 5 | UpdateChecker({this.changeLog, this.downloadLink, this.versionNumber}); 6 | 7 | UpdateChecker.fromJson(Map json) { 8 | changeLog = json['changelog']; 9 | downloadLink = json['downloadlink']; 10 | versionNumber = json['versionnumber']; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/models/video_converter.dart: -------------------------------------------------------------------------------- 1 | // // ignore_for_file: unused_local_variable, unnecessary_brace_in_string_interps, avoid_print 2 | 3 | // import 'package:ffmpeg_kit_flutter/ffmpeg_kit.dart'; 4 | // import 'package:ffmpeg_kit_flutter/ffmpeg_kit_config.dart'; 5 | // import 'package:ffmpeg_kit_flutter/ffprobe_kit.dart'; 6 | // import 'package:ffmpeg_kit_flutter/media_information_session.dart'; 7 | // import 'package:ffmpeg_kit_flutter/statistics.dart'; 8 | 9 | // class VideoConverter { 10 | // Statistics? _statistics; 11 | // late Function(double) _onProgress; 12 | // String? duration; 13 | 14 | // Future convertM3U8toMP4(String inputPath, String outputPath, 15 | // int index, Function(double) onProgress) async { 16 | // _onProgress = onProgress; 17 | 18 | // FFprobeKit.getMediaInformation(inputPath) 19 | // .then((MediaInformationSession session) async { 20 | // var information = session.getMediaInformation(); 21 | 22 | // if (information != null) { 23 | // duration = information.getDuration(); 24 | // } 25 | // print('DURATIONNNN: ${duration}'); 26 | // }); 27 | 28 | // FFmpegKit.executeAsync( 29 | // '-i $inputPath -y -c:v mpeg4 $outputPath', 30 | // ((session) async { 31 | // final state = 32 | // FFmpegKitConfig.sessionStateToString(await session.getState()); 33 | // final returnCode = await session.getReturnCode(); 34 | // final failStackTrace = await session.getFailStackTrace(); 35 | // final duration = await session.getDuration(); 36 | // }), 37 | // ((log) => print(log.getMessage())), 38 | // (statistics) { 39 | // _statistics = statistics; 40 | // _updateProgressDialog(); 41 | // }, 42 | // ); 43 | 44 | // return ''; 45 | // } 46 | 47 | // void _updateProgressDialog() { 48 | // if (_statistics != null) { 49 | // final progress = ((_statistics!.getTime() / 50 | // Duration(seconds: num.parse(duration!).toInt()).inMilliseconds) * 51 | // 100); 52 | // // final progress = _statistics!.getTime(); 53 | // print('PRRR: ${progress}'); 54 | // print('Tota; dur: ${duration}'); 55 | 56 | // _onProgress(progress.toDouble() / 100); 57 | // } 58 | // } 59 | // } 60 | -------------------------------------------------------------------------------- /lib/models/video_quality.dart: -------------------------------------------------------------------------------- 1 | class VideoQuality { 2 | VideoQuality({required this.resolution, required this.videoUrl}); 3 | final String resolution; 4 | final String videoUrl; 5 | } 6 | -------------------------------------------------------------------------------- /lib/models/videos.dart: -------------------------------------------------------------------------------- 1 | class Videos { 2 | List? result; 3 | 4 | Videos({ 5 | this.result, 6 | }); 7 | 8 | Videos.fromJson(Map json) { 9 | if (json['results'] != null) { 10 | result = []; 11 | json['results'].forEach((v) { 12 | result?.add(Results.fromJson(v)); 13 | }); 14 | } 15 | } 16 | 17 | Map toJson() { 18 | final Map data = {}; 19 | if (result != null) { 20 | data['results'] = result?.map((v) => v.toJson()).toList(); 21 | } 22 | return data; 23 | } 24 | } 25 | 26 | class Results { 27 | String? name; 28 | String? videoLink; 29 | Results({this.name, this.videoLink}); 30 | Results.fromJson(Map json) { 31 | name = json['name']; 32 | videoLink = json['key']; 33 | } 34 | Map toJson() { 35 | final Map data = {}; 36 | data['name'] = name; 37 | data['key'] = videoLink; 38 | return data; 39 | } 40 | } -------------------------------------------------------------------------------- /lib/models/watchprovider_countries.dart: -------------------------------------------------------------------------------- 1 | class WatchProviderCountries { 2 | WatchProviderCountries( 3 | {required this.countryName, 4 | required this.flagPath, 5 | required this.isoCode}); 6 | String isoCode; 7 | String countryName; 8 | String flagPath; 9 | } 10 | -------------------------------------------------------------------------------- /lib/preferences/app_dependency_preferences.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: constant_identifier_names 2 | 3 | import '../constants/api_constants.dart'; 4 | import '../constants/app_constants.dart'; 5 | 6 | class AppDependencies { 7 | static const CONSUMET_URL_KEY = 'consumetUrlKey'; 8 | static const FLIXQUEST_LOGO_URL = 'flixquestLogoUrl'; 9 | static const OPENSUBTITLES_KEY = 'opensubtitlesKey'; 10 | static const STREAM_SERVER_FLIXHQ = 'vidcloud'; 11 | static const STREAM_SERVER_DCVA = 'asianload'; 12 | static const STREAM_SERVER_ZORO = 'vidcloud'; 13 | static const SHOWBOX_URL = 'showbox_url'; 14 | static const STREAM_ROUTE = 'streamRoute'; 15 | static const FLIXQUEST_API_URL = 'flixquestAPIURL'; 16 | static const TMDB_PROXY = 'tmdb_proxy'; 17 | 18 | setConsumetUrl(String value) async { 19 | sharedPrefsSingleton.setString(CONSUMET_URL_KEY, value); 20 | } 21 | 22 | Future getConsumetUrl() async { 23 | return sharedPrefsSingleton.getString(CONSUMET_URL_KEY) ?? 24 | 'https://consumet.beamlak.dev/'; 25 | } 26 | 27 | setFlixQuestUrl(String value) async { 28 | sharedPrefsSingleton.setString(FLIXQUEST_LOGO_URL, value); 29 | } 30 | 31 | Future getFQURL() async { 32 | return sharedPrefsSingleton.getString(FLIXQUEST_API_URL) ?? 33 | 'https://flixquest-api.beamlak.dev/'; 34 | } 35 | 36 | setFlixquestAPIUrl(String value) async { 37 | sharedPrefsSingleton.setString(FLIXQUEST_API_URL, value); 38 | } 39 | 40 | Future getFlixQuestLogo() async { 41 | return sharedPrefsSingleton.getString(FLIXQUEST_LOGO_URL) ?? 'default'; 42 | } 43 | 44 | setOpenSubKey(String value) async { 45 | sharedPrefsSingleton.setString(OPENSUBTITLES_KEY, value); 46 | } 47 | 48 | Future getOpenSubtitlesKey() async { 49 | return sharedPrefsSingleton.getString(OPENSUBTITLES_KEY) ?? 50 | openSubtitlesKey; 51 | } 52 | 53 | setStreamServerFlixHQ(String value) async { 54 | sharedPrefsSingleton.setString(STREAM_SERVER_FLIXHQ, value); 55 | } 56 | 57 | Future getStreamServerFlixHQ() async { 58 | return sharedPrefsSingleton.getString(STREAM_SERVER_FLIXHQ) ?? 59 | STREAMING_SERVER_FLIXHQ; 60 | } 61 | 62 | setStreamServerDCVA(String value) async { 63 | sharedPrefsSingleton.setString(STREAM_SERVER_DCVA, value); 64 | } 65 | 66 | Future getStreamServerDCVA() async { 67 | return sharedPrefsSingleton.getString(STREAM_SERVER_DCVA) ?? 68 | STREAMING_SERVER_DCVA; 69 | } 70 | 71 | Future enableAD(bool enable) async { 72 | return enable; 73 | } 74 | 75 | Future getShowboxUrl() async { 76 | return sharedPrefsSingleton.getString(SHOWBOX_URL) ?? ''; 77 | } 78 | 79 | setShowboxUrl(String value) async { 80 | sharedPrefsSingleton.setString(SHOWBOX_URL, value); 81 | } 82 | 83 | Future getStreamRoute() async { 84 | return sharedPrefsSingleton.getString(STREAM_ROUTE) ?? 'flixHQ'; 85 | } 86 | 87 | setStreamRoute(String value) async { 88 | sharedPrefsSingleton.setString(STREAM_ROUTE, value); 89 | } 90 | 91 | setStreamServerZoro(String value) async { 92 | sharedPrefsSingleton.setString(STREAM_SERVER_ZORO, value); 93 | } 94 | 95 | Future getStreamServerZoro() async { 96 | return sharedPrefsSingleton.getString(STREAM_SERVER_ZORO) ?? 97 | STREAMING_SERVER_ZORO; 98 | } 99 | 100 | setTmdbProxy(String value) async { 101 | sharedPrefsSingleton.setString(TMDB_PROXY, value); 102 | } 103 | 104 | Future getTmdbProxy() async { 105 | return sharedPrefsSingleton.getString(TMDB_PROXY) ?? ''; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /lib/provider/recently_watched_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '../controllers/recently_watched_database_controller.dart'; 3 | import '../models/recently_watched.dart'; 4 | 5 | class RecentProvider extends ChangeNotifier { 6 | final RecentlyWatchedMoviesController _movieController = 7 | RecentlyWatchedMoviesController(); 8 | final RecentlyWatchedEpisodeController _episodeController = 9 | RecentlyWatchedEpisodeController(); 10 | 11 | List _movies = []; 12 | List get movies => _movies; 13 | 14 | List _episodes = []; 15 | List get episodes => _episodes; 16 | 17 | Future fetchMovies() async { 18 | _movies = await _movieController.getRecentMovieList(); 19 | notifyListeners(); 20 | } 21 | 22 | Future addMovie(RecentMovie movie) async { 23 | await _movieController.insertMovie(movie); 24 | await fetchMovies(); 25 | } 26 | 27 | Future updateMovie(RecentMovie movie, int id) async { 28 | await _movieController.updateMovie(movie, id); 29 | await fetchMovies(); 30 | } 31 | 32 | Future deleteMovie(int id) async { 33 | await _movieController.deleteMovie(id); 34 | await fetchMovies(); 35 | } 36 | 37 | /// Episode 38 | 39 | Future fetchEpisodes() async { 40 | _episodes = await _episodeController.getEpisodeList(); 41 | notifyListeners(); 42 | } 43 | 44 | Future addEpisode(RecentEpisode episode) async { 45 | await _episodeController.insertTV(episode); 46 | await fetchEpisodes(); 47 | } 48 | 49 | Future updateEpisode( 50 | RecentEpisode episode, int id, int episodeNum, int seasonNum) async { 51 | await _episodeController.updateTV(episode, id, episodeNum, seasonNum); 52 | await fetchEpisodes(); 53 | } 54 | 55 | Future deleteEpisode(int id, int episodeNum, int seasonNum) async { 56 | await _episodeController.deleteTV(id, episodeNum, seasonNum); 57 | await fetchEpisodes(); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/screens/common/discover.dart: -------------------------------------------------------------------------------- 1 | import 'package:easy_localization/easy_localization.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:provider/provider.dart'; 4 | import '../../provider/settings_provider.dart'; 5 | import '../movie/discover_movies_tab.dart'; 6 | import '../tv/discover_tv_tab.dart'; 7 | 8 | class DiscoverPage extends StatefulWidget { 9 | const DiscoverPage({ 10 | Key? key, 11 | }) : super(key: key); 12 | 13 | @override 14 | State createState() => _DiscoverPageState(); 15 | } 16 | 17 | class _DiscoverPageState extends State 18 | with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin { 19 | late TabController tabController; 20 | 21 | @override 22 | void initState() { 23 | tabController = TabController(length: 2, vsync: this); 24 | super.initState(); 25 | } 26 | 27 | @override 28 | Widget build(BuildContext context) { 29 | super.build(context); 30 | final themeMode = Provider.of(context).appTheme; 31 | return Column( 32 | children: [ 33 | Container( 34 | color: Colors.grey, 35 | width: double.infinity, 36 | child: TabBar( 37 | tabs: [ 38 | Tab( 39 | child: Row( 40 | mainAxisAlignment: MainAxisAlignment.center, 41 | crossAxisAlignment: CrossAxisAlignment.center, 42 | children: [ 43 | const Padding( 44 | padding: EdgeInsets.only(right: 8.0), 45 | child: Icon(Icons.movie_creation_rounded), 46 | ), 47 | Expanded( 48 | child: Text( 49 | tr('movies'), 50 | overflow: TextOverflow.ellipsis, 51 | ), 52 | ), 53 | ], 54 | )), 55 | Tab( 56 | child: Row( 57 | mainAxisAlignment: MainAxisAlignment.center, 58 | children: [ 59 | const Padding( 60 | padding: EdgeInsets.only(right: 8.0), 61 | child: Icon(Icons.live_tv_rounded)), 62 | Expanded( 63 | child: Text( 64 | tr('tv_series'), 65 | overflow: TextOverflow.ellipsis, 66 | ), 67 | ), 68 | ], 69 | )) 70 | ], 71 | indicatorColor: themeMode == 'dark' || themeMode == 'amoled' 72 | ? Colors.white 73 | : Colors.black, 74 | indicatorWeight: 3, 75 | //isScrollable: true, 76 | labelStyle: const TextStyle( 77 | fontFamily: 'PoppinsSB', 78 | color: Colors.black, 79 | fontSize: 17, 80 | ), 81 | unselectedLabelStyle: 82 | const TextStyle(fontFamily: 'Poppins', color: Colors.black87), 83 | labelColor: Colors.black, 84 | controller: tabController, 85 | indicatorSize: TabBarIndicatorSize.tab, 86 | ), 87 | ), 88 | Expanded( 89 | child: TabBarView( 90 | controller: tabController, 91 | children: const [DiscoverMoviesTab(), DiscoverTVTab()], 92 | ), 93 | ) 94 | ], 95 | ); 96 | } 97 | 98 | @override 99 | bool get wantKeepAlive => true; 100 | } 101 | -------------------------------------------------------------------------------- /lib/screens/common/language_choose.dart: -------------------------------------------------------------------------------- 1 | import '../../models/app_languages.dart'; 2 | import 'package:easy_localization/easy_localization.dart'; 3 | import '/provider/settings_provider.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:provider/provider.dart'; 6 | 7 | class AppLanguageChoose extends StatefulWidget { 8 | const AppLanguageChoose({Key? key}) : super(key: key); 9 | 10 | @override 11 | State createState() => _AppLanguageChooseState(); 12 | } 13 | 14 | class _AppLanguageChooseState extends State { 15 | @override 16 | Widget build(BuildContext context) { 17 | final languageChange = Provider.of(context); 18 | 19 | List langs = [ 20 | AppLanguages( 21 | languageFlag: 'assets/images/country_flags/united-kingdom.png', 22 | languageName: tr('english'), 23 | languageCode: 'en'), 24 | AppLanguages( 25 | languageFlag: 'assets/images/country_flags/united-arab-emirates.png', 26 | languageName: tr('arabic'), 27 | languageCode: 'ar'), 28 | AppLanguages( 29 | languageFlag: 'assets/images/country_flags/spain.png', 30 | languageName: tr('spanish'), 31 | languageCode: 'es'), 32 | AppLanguages( 33 | languageFlag: 'assets/images/country_flags/india.png', 34 | languageName: tr('hindi'), 35 | languageCode: 'hi') 36 | ]; 37 | 38 | return Scaffold( 39 | appBar: AppBar(title: Text(tr('choose_language'))), 40 | body: SingleChildScrollView( 41 | child: Center( 42 | child: Column( 43 | children: langs 44 | .map( 45 | (AppLanguages langs) => ListTile( 46 | title: Text(langs.languageName), 47 | leading: Wrap( 48 | crossAxisAlignment: WrapCrossAlignment.center, 49 | children: [ 50 | Radio( 51 | value: langs.languageCode, 52 | groupValue: languageChange.appLanguage, 53 | onChanged: (String? value) { 54 | setState(() { 55 | languageChange.appLanguage = value!; 56 | }); 57 | EasyLocalization.of(context)!.setLocale( 58 | Locale(languageChange.appLanguage)); 59 | }, 60 | ), 61 | Image.asset( 62 | langs.languageFlag, 63 | width: 25, 64 | height: 25, 65 | ), 66 | ], 67 | ), 68 | ), 69 | ) 70 | .toList())), 71 | )); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /lib/screens/movie/genremovies.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | 3 | import 'package:easy_localization/easy_localization.dart'; 4 | 5 | import '/provider/settings_provider.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:provider/provider.dart'; 8 | import '/api/endpoints.dart'; 9 | import '/widgets/movie_widgets.dart'; 10 | import '/models/genres.dart'; 11 | 12 | class GenreMovies extends StatelessWidget { 13 | final Genres genres; 14 | const GenreMovies({Key? key, required this.genres}) : super(key: key); 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | final lang = Provider.of(context).appLanguage; 19 | return Scaffold( 20 | appBar: AppBar( 21 | title: Text( 22 | tr('genre_movie_title', namedArgs: {'g': genres.genreName ?? 'Null'}), 23 | ), 24 | leading: IconButton( 25 | icon: const Icon( 26 | Icons.arrow_back, 27 | ), 28 | onPressed: () { 29 | Navigator.pop(context); 30 | }, 31 | ), 32 | ), 33 | body: Container( 34 | child: ParticularGenreMovies( 35 | includeAdult: Provider.of(context).isAdult, 36 | genreId: genres.genreID!, 37 | api: Endpoints.getMoviesForGenre(genres.genreID!, 1, lang), 38 | watchRegion: Provider.of(context).defaultCountry, 39 | ), 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/screens/movie/movie_castandcrew.dart: -------------------------------------------------------------------------------- 1 | import 'package:easy_localization/easy_localization.dart'; 2 | 3 | import '/widgets/movie_widgets.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:provider/provider.dart'; 6 | 7 | import '../../models/credits.dart'; 8 | import '../../provider/settings_provider.dart'; 9 | 10 | class MovieCastAndCrew extends StatefulWidget { 11 | const MovieCastAndCrew({Key? key, required this.credits}) : super(key: key); 12 | final Credits credits; 13 | 14 | @override 15 | State createState() => _MovieCastAndCrewState(); 16 | } 17 | 18 | class _MovieCastAndCrewState extends State 19 | with SingleTickerProviderStateMixin { 20 | late TabController tabController; 21 | 22 | @override 23 | void initState() { 24 | tabController = TabController(length: 2, vsync: this); 25 | super.initState(); 26 | } 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | final themeMode = Provider.of(context).appTheme; 31 | return DefaultTabController( 32 | length: 2, 33 | child: Scaffold( 34 | appBar: AppBar( 35 | elevation: 3, 36 | title: Text( 37 | tr('cast_and_crew'), 38 | ), 39 | leading: IconButton( 40 | icon: const Icon( 41 | Icons.arrow_back, 42 | ), 43 | onPressed: () { 44 | Navigator.pop(context); 45 | }, 46 | ), 47 | ), 48 | body: Column( 49 | children: [ 50 | Container( 51 | color: Colors.grey, 52 | child: TabBar( 53 | tabs: [ 54 | Tab( 55 | child: Text( 56 | tr('cast'), 57 | )), 58 | Tab( 59 | child: Text( 60 | tr('crew'), 61 | )) 62 | ], 63 | indicatorColor: themeMode == 'dark' || themeMode == 'amoled' 64 | ? Colors.white 65 | : Colors.black, 66 | indicatorWeight: 3, 67 | //isScrollable: true, 68 | labelStyle: const TextStyle( 69 | fontFamily: 'PoppinsSB', 70 | color: Colors.black, 71 | fontSize: 17, 72 | ), 73 | unselectedLabelStyle: const TextStyle( 74 | fontFamily: 'Poppins', color: Colors.black87), 75 | labelColor: Colors.black, 76 | controller: tabController, 77 | indicatorSize: TabBarIndicatorSize.tab, 78 | ), 79 | ), 80 | Expanded( 81 | child: TabBarView( 82 | controller: tabController, 83 | children: [ 84 | CastTab(credits: widget.credits), 85 | CrewTab( 86 | credits: widget.credits, 87 | ) 88 | ], 89 | ), 90 | ), 91 | ], 92 | ), 93 | )); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /lib/screens/movie/streaming_services_movies.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | 3 | import 'package:easy_localization/easy_localization.dart'; 4 | 5 | import '/provider/settings_provider.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:provider/provider.dart'; 8 | import '/api/endpoints.dart'; 9 | import '/widgets/movie_widgets.dart'; 10 | 11 | class StreamingServicesMovies extends StatelessWidget { 12 | final int providerId; 13 | final String providerName; 14 | const StreamingServicesMovies( 15 | {Key? key, required this.providerId, required this.providerName}) 16 | : super(key: key); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | final lang = Provider.of(context).appLanguage; 21 | return Scaffold( 22 | appBar: AppBar( 23 | title: Text( 24 | tr('streaming_service_movie', namedArgs: {'provider': providerName}), 25 | ), 26 | leading: IconButton( 27 | icon: const Icon( 28 | Icons.arrow_back, 29 | ), 30 | onPressed: () { 31 | Navigator.pop(context); 32 | }, 33 | ), 34 | ), 35 | body: Container( 36 | child: ParticularStreamingServiceMovies( 37 | includeAdult: Provider.of(context).isAdult, 38 | providerID: providerId, 39 | api: Endpoints.watchProvidersMovies(providerId, 1, lang), 40 | watchRegion: Provider.of(context).defaultCountry, 41 | ), 42 | ), 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/screens/person/cast_detail.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | 3 | import '../../widgets/movie_widgets.dart'; 4 | import '/provider/settings_provider.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:provider/provider.dart'; 7 | import '/models/credits.dart'; 8 | import '/widgets/person_widgets.dart'; 9 | 10 | class CastDetailPage extends StatefulWidget { 11 | final Cast? cast; 12 | final String heroId; 13 | 14 | const CastDetailPage({ 15 | Key? key, 16 | this.cast, 17 | required this.heroId, 18 | }) : super(key: key); 19 | @override 20 | CastDetailPageState createState() => CastDetailPageState(); 21 | } 22 | 23 | class CastDetailPageState extends State 24 | with 25 | SingleTickerProviderStateMixin, 26 | AutomaticKeepAliveClientMixin { 27 | late TabController tabController; 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | 33 | tabController = TabController(length: 3, vsync: this); 34 | mixpanelUpload(context); 35 | } 36 | 37 | void mixpanelUpload(BuildContext context) { 38 | final mixpanel = 39 | Provider.of(context, listen: false).mixpanel; 40 | mixpanel.track('Most viewed person pages', properties: { 41 | 'Person name': '${widget.cast!.name}', 42 | 'Person id': '${widget.cast!.id}' 43 | }); 44 | } 45 | 46 | int selectedIndex = 0; 47 | final scrollController = ScrollController(); 48 | 49 | @override 50 | Widget build(BuildContext context) { 51 | super.build(context); 52 | final themeMode = Provider.of(context).appTheme; 53 | final imageQuality = Provider.of(context).imageQuality; 54 | return Scaffold( 55 | body: CustomScrollView( 56 | controller: scrollController, 57 | slivers: [ 58 | SliverAppBar( 59 | pinned: true, 60 | elevation: 1, 61 | shadowColor: themeMode == 'dark' || themeMode == 'amoled' 62 | ? Colors.white 63 | : Colors.black, 64 | forceElevated: true, 65 | backgroundColor: themeMode == 'dark' || themeMode == 'amoled' 66 | ? Colors.black 67 | : Colors.white, 68 | leading: SABTN( 69 | onBack: () { 70 | Navigator.pop(context); 71 | }, 72 | ), 73 | title: SABT( 74 | child: Text( 75 | widget.cast!.name!, 76 | style: TextStyle( 77 | color: Theme.of(context).colorScheme.onSurface, 78 | ), 79 | )), 80 | expandedHeight: 210, 81 | flexibleSpace: FlexibleSpaceBar( 82 | collapseMode: CollapseMode.pin, 83 | background: Column( 84 | children: [ 85 | CastDetailQuickInfo( 86 | widget: widget, 87 | imageQuality: imageQuality, 88 | ), 89 | ], 90 | ), 91 | ), 92 | ), 93 | SliverList( 94 | delegate: SliverChildListDelegate.fixed( 95 | [ 96 | CastDetailAbout( 97 | cast: widget.cast, 98 | selectedIndex: selectedIndex, 99 | tabController: tabController) 100 | ], 101 | ), 102 | ) 103 | ], 104 | ), 105 | ); 106 | } 107 | 108 | @override 109 | bool get wantKeepAlive => true; 110 | } 111 | -------------------------------------------------------------------------------- /lib/screens/person/createdby_detail.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | import 'package:provider/provider.dart'; 3 | import '../../provider/settings_provider.dart'; 4 | import '../../widgets/movie_widgets.dart'; 5 | import '/models/tv.dart'; 6 | import 'package:flutter/material.dart'; 7 | import '/widgets/person_widgets.dart'; 8 | 9 | class CreatedByPersonDetailPage extends StatefulWidget { 10 | final CreatedBy? createdBy; 11 | final String heroId; 12 | 13 | const CreatedByPersonDetailPage({ 14 | Key? key, 15 | this.createdBy, 16 | required this.heroId, 17 | }) : super(key: key); 18 | @override 19 | CreatedByPersonDetailPageState createState() => 20 | CreatedByPersonDetailPageState(); 21 | } 22 | 23 | class CreatedByPersonDetailPageState extends State 24 | with 25 | SingleTickerProviderStateMixin, 26 | AutomaticKeepAliveClientMixin { 27 | late TabController tabController; 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | 33 | tabController = TabController(length: 3, vsync: this); 34 | mixpanelUpload(context); 35 | } 36 | 37 | void mixpanelUpload(BuildContext context) { 38 | final mixpanel = 39 | Provider.of(context, listen: false).mixpanel; 40 | mixpanel.track('Most viewed person pages', properties: { 41 | 'Person name': '${widget.createdBy!.name}', 42 | 'Person id': '${widget.createdBy!.id}' 43 | }); 44 | } 45 | 46 | int selectedIndex = 0; 47 | final scrollController = ScrollController(); 48 | 49 | @override 50 | Widget build(BuildContext context) { 51 | super.build(context); 52 | final themeMode = Provider.of(context).appTheme; 53 | final imageQuality = Provider.of(context).imageQuality; 54 | return Scaffold( 55 | body: CustomScrollView( 56 | controller: scrollController, 57 | slivers: [ 58 | SliverAppBar( 59 | pinned: true, 60 | elevation: 1, 61 | shadowColor: themeMode == 'dark' || themeMode == 'amoled' 62 | ? Colors.white 63 | : Colors.black, 64 | forceElevated: true, 65 | backgroundColor: themeMode == 'dark' || themeMode == 'amoled' 66 | ? Colors.black 67 | : Colors.white, 68 | leading: SABTN( 69 | onBack: () { 70 | Navigator.pop(context); 71 | }, 72 | ), 73 | title: SABT( 74 | child: Text( 75 | widget.createdBy!.name!, 76 | style: TextStyle( 77 | color: Theme.of(context).colorScheme.onSurface, 78 | ), 79 | )), 80 | expandedHeight: 210, 81 | flexibleSpace: FlexibleSpaceBar( 82 | collapseMode: CollapseMode.pin, 83 | background: Column( 84 | children: [ 85 | CreatedByQuickInfo( 86 | widget: widget, 87 | imageQuality: imageQuality, 88 | ) 89 | ], 90 | ), 91 | ), 92 | ), 93 | SliverList( 94 | delegate: SliverChildListDelegate.fixed( 95 | [ 96 | CreatedByAbout( 97 | createdBy: widget.createdBy, 98 | selectedIndex: selectedIndex, 99 | tabController: tabController) 100 | ], 101 | ), 102 | ) 103 | ], 104 | ), 105 | ); 106 | } 107 | 108 | @override 109 | bool get wantKeepAlive => true; 110 | } 111 | -------------------------------------------------------------------------------- /lib/screens/person/crew_detail.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:provider/provider.dart'; 5 | import '../../provider/settings_provider.dart'; 6 | import '../../widgets/movie_widgets.dart'; 7 | import '/models/credits.dart'; 8 | import '/widgets/person_widgets.dart'; 9 | 10 | class CrewDetailPage extends StatefulWidget { 11 | final String heroId; 12 | final Crew? crew; 13 | 14 | const CrewDetailPage({ 15 | Key? key, 16 | this.crew, 17 | required this.heroId, 18 | }) : super(key: key); 19 | @override 20 | CrewDetailPageState createState() => CrewDetailPageState(); 21 | } 22 | 23 | class CrewDetailPageState extends State 24 | with 25 | SingleTickerProviderStateMixin, 26 | AutomaticKeepAliveClientMixin { 27 | late TabController tabController; 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | 33 | tabController = TabController(length: 3, vsync: this); 34 | mixpanelUpload(context); 35 | } 36 | 37 | void mixpanelUpload(BuildContext context) { 38 | final mixpanel = 39 | Provider.of(context, listen: false).mixpanel; 40 | mixpanel.track('Most viewed person pages', properties: { 41 | 'Person name': '${widget.crew!.name}', 42 | 'Person id': '${widget.crew!.id}' 43 | }); 44 | } 45 | 46 | int selectedIndex = 0; 47 | final scrollController = ScrollController(); 48 | 49 | @override 50 | Widget build(BuildContext context) { 51 | super.build(context); 52 | final themeMode = Provider.of(context).appTheme; 53 | final imageQuality = Provider.of(context).imageQuality; 54 | 55 | return Scaffold( 56 | body: CustomScrollView( 57 | controller: scrollController, 58 | slivers: [ 59 | SliverAppBar( 60 | pinned: true, 61 | elevation: 1, 62 | shadowColor: themeMode == 'dark' || themeMode == 'amoled' 63 | ? Colors.white 64 | : Colors.black, 65 | forceElevated: true, 66 | backgroundColor: themeMode == 'dark' || themeMode == 'amoled' 67 | ? Colors.black 68 | : Colors.white, 69 | leading: SABTN( 70 | onBack: () { 71 | Navigator.pop(context); 72 | }, 73 | ), 74 | title: SABT( 75 | child: Text( 76 | widget.crew!.name!, 77 | style: TextStyle( 78 | color: Theme.of(context).colorScheme.onSurface, 79 | ), 80 | )), 81 | expandedHeight: 210, 82 | flexibleSpace: FlexibleSpaceBar( 83 | collapseMode: CollapseMode.pin, 84 | background: Column( 85 | children: [ 86 | CrewDetailQuickInfo( 87 | widget: widget, 88 | imageQuality: imageQuality, 89 | ) 90 | ], 91 | ), 92 | ), 93 | ), 94 | SliverList( 95 | delegate: SliverChildListDelegate.fixed( 96 | [ 97 | CrewDetailAbout( 98 | crew: widget.crew, 99 | selectedIndex: selectedIndex, 100 | tabController: tabController) 101 | ], 102 | ), 103 | ) 104 | ], 105 | ), 106 | ); 107 | } 108 | 109 | @override 110 | bool get wantKeepAlive => true; 111 | } 112 | -------------------------------------------------------------------------------- /lib/screens/person/guest_star_detail.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | import '../../widgets/movie_widgets.dart'; 3 | import '/provider/settings_provider.dart'; 4 | import 'package:provider/provider.dart'; 5 | import 'package:flutter/material.dart'; 6 | import '/models/credits.dart'; 7 | import '/widgets/person_widgets.dart'; 8 | 9 | class GuestStarDetailPage extends StatefulWidget { 10 | final TVEpisodeGuestStars? cast; 11 | final String heroId; 12 | 13 | const GuestStarDetailPage({ 14 | Key? key, 15 | this.cast, 16 | required this.heroId, 17 | }) : super(key: key); 18 | @override 19 | GuestStarDetailPageState createState() => GuestStarDetailPageState(); 20 | } 21 | 22 | class GuestStarDetailPageState extends State 23 | with 24 | SingleTickerProviderStateMixin, 25 | AutomaticKeepAliveClientMixin { 26 | late TabController tabController; 27 | 28 | @override 29 | void initState() { 30 | super.initState(); 31 | tabController = TabController(length: 3, vsync: this); 32 | mixpanelUpload(context); 33 | } 34 | 35 | void mixpanelUpload(BuildContext context) { 36 | final mixpanel = 37 | Provider.of(context, listen: false).mixpanel; 38 | mixpanel.track('Most viewed person pages', properties: { 39 | 'Person name': '${widget.cast!.name}', 40 | 'Person id': '${widget.cast!.id}' 41 | }); 42 | } 43 | 44 | int selectedIndex = 0; 45 | final scrollController = ScrollController(); 46 | 47 | @override 48 | Widget build(BuildContext context) { 49 | super.build(context); 50 | final themeMode = Provider.of(context).appTheme; 51 | final imageQuality = Provider.of(context).imageQuality; 52 | return Scaffold( 53 | body: CustomScrollView( 54 | controller: scrollController, 55 | slivers: [ 56 | SliverAppBar( 57 | pinned: true, 58 | elevation: 1, 59 | shadowColor: themeMode == 'dark' || themeMode == 'amoled' 60 | ? Colors.white 61 | : Colors.black, 62 | forceElevated: true, 63 | backgroundColor: themeMode == 'dark' || themeMode == 'amoled' 64 | ? Colors.black 65 | : Colors.white, 66 | leading: SABTN( 67 | onBack: () { 68 | Navigator.pop(context); 69 | }, 70 | ), 71 | title: SABT( 72 | child: Text( 73 | widget.cast!.name!, 74 | style: TextStyle( 75 | color: Theme.of(context).colorScheme.onSurface, 76 | ), 77 | )), 78 | expandedHeight: 210, 79 | flexibleSpace: FlexibleSpaceBar( 80 | collapseMode: CollapseMode.pin, 81 | background: Column( 82 | children: [ 83 | GuestStarDetailQuickInfo( 84 | widget: widget, 85 | imageQuality: imageQuality, 86 | ), 87 | ], 88 | ), 89 | ), 90 | ), 91 | SliverList( 92 | delegate: SliverChildListDelegate.fixed( 93 | [ 94 | GuestStarDetailAbout( 95 | cast: widget.cast, 96 | selectedIndex: selectedIndex, 97 | tabController: tabController) 98 | ], 99 | ), 100 | ) 101 | ], 102 | ), 103 | ); 104 | } 105 | 106 | @override 107 | bool get wantKeepAlive => true; 108 | } 109 | -------------------------------------------------------------------------------- /lib/screens/person/searchedperson.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | 3 | import 'package:provider/provider.dart'; 4 | import '../../provider/settings_provider.dart'; 5 | import '../../widgets/movie_widgets.dart'; 6 | import '/models/person.dart'; 7 | import 'package:flutter/material.dart'; 8 | import '/widgets/person_widgets.dart'; 9 | 10 | class SearchedPersonDetailPage extends StatefulWidget { 11 | final Person? person; 12 | final String heroId; 13 | 14 | const SearchedPersonDetailPage({ 15 | Key? key, 16 | this.person, 17 | required this.heroId, 18 | }) : super(key: key); 19 | @override 20 | SearchedPersonDetailPageState createState() => 21 | SearchedPersonDetailPageState(); 22 | } 23 | 24 | class SearchedPersonDetailPageState extends State 25 | with 26 | SingleTickerProviderStateMixin, 27 | AutomaticKeepAliveClientMixin { 28 | late TabController tabController; 29 | 30 | @override 31 | void initState() { 32 | super.initState(); 33 | tabController = TabController(length: 3, vsync: this); 34 | mixpanelUpload(context); 35 | } 36 | 37 | void mixpanelUpload(BuildContext context) { 38 | final mixpanel = 39 | Provider.of(context, listen: false).mixpanel; 40 | mixpanel.track('Most viewed person pages', properties: { 41 | 'Person name': '${widget.person!.name}', 42 | 'Person id': '${widget.person!.id}', 43 | 'Is Person adult?': '${widget.person!.adult}' 44 | }); 45 | } 46 | 47 | int selectedIndex = 0; 48 | final scrollController = ScrollController(); 49 | 50 | @override 51 | Widget build(BuildContext context) { 52 | super.build(context); 53 | final themeMode = Provider.of(context).appTheme; 54 | final imageQuality = Provider.of(context).imageQuality; 55 | return Scaffold( 56 | body: CustomScrollView( 57 | controller: scrollController, 58 | slivers: [ 59 | SliverAppBar( 60 | pinned: true, 61 | elevation: 1, 62 | shadowColor: themeMode == 'dark' || themeMode == 'amoled' 63 | ? Colors.white 64 | : Colors.black, 65 | forceElevated: true, 66 | backgroundColor: themeMode == 'dark' || themeMode == 'amoled' 67 | ? Colors.black 68 | : Colors.white, 69 | leading: SABTN( 70 | onBack: () { 71 | Navigator.pop(context); 72 | }, 73 | ), 74 | title: SABT( 75 | child: Text( 76 | widget.person!.name!, 77 | style: TextStyle( 78 | color: Theme.of(context).colorScheme.onSurface, 79 | ), 80 | )), 81 | expandedHeight: 210, 82 | flexibleSpace: FlexibleSpaceBar( 83 | collapseMode: CollapseMode.pin, 84 | background: Column( 85 | children: [ 86 | SearchedPersonQuickInfo( 87 | widget: widget, 88 | imageQuality: imageQuality, 89 | ) 90 | ], 91 | ), 92 | ), 93 | ), 94 | SliverList( 95 | delegate: SliverChildListDelegate.fixed( 96 | [ 97 | SearchedPersonAbout( 98 | person: widget.person, 99 | selectedIndex: selectedIndex, 100 | tabController: tabController) 101 | ], 102 | ), 103 | ) 104 | ], 105 | ), 106 | ); 107 | } 108 | 109 | @override 110 | bool get wantKeepAlive => true; 111 | } 112 | -------------------------------------------------------------------------------- /lib/screens/tv/genre_tv.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | 3 | import 'package:easy_localization/easy_localization.dart'; 4 | 5 | import '/provider/settings_provider.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | import '/models/genres.dart'; 9 | import '/widgets/tv_widgets.dart'; 10 | import 'package:flutter/material.dart'; 11 | import '/api/endpoints.dart'; 12 | 13 | class TVGenre extends StatelessWidget { 14 | final Genres genres; 15 | const TVGenre({Key? key, required this.genres}) : super(key: key); 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | final lang = Provider.of(context).appLanguage; 20 | return Scaffold( 21 | appBar: AppBar( 22 | title: Text(tr( 23 | 'genre_tv_title', 24 | namedArgs: {'g': genres.genreName ?? 'Null'}, 25 | )), 26 | leading: IconButton( 27 | icon: const Icon( 28 | Icons.arrow_back, 29 | ), 30 | onPressed: () { 31 | Navigator.pop(context); 32 | }, 33 | ), 34 | ), 35 | body: Container( 36 | child: ParticularGenreTV( 37 | includeAdult: Provider.of(context).isAdult, 38 | genreId: genres.genreID!, 39 | api: Endpoints.getTVShowsForGenre(genres.genreID!, 1, lang), 40 | ), 41 | ), 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/screens/tv/streaming_services_tvshows.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_unnecessary_containers 2 | 3 | import 'package:easy_localization/easy_localization.dart'; 4 | 5 | import '/provider/settings_provider.dart'; 6 | import 'package:provider/provider.dart'; 7 | import '/widgets/tv_widgets.dart'; 8 | import 'package:flutter/material.dart'; 9 | import '/api/endpoints.dart'; 10 | 11 | class StreamingServicesTVShows extends StatelessWidget { 12 | final int providerId; 13 | final String providerName; 14 | const StreamingServicesTVShows( 15 | {Key? key, required this.providerId, required this.providerName}) 16 | : super(key: key); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | final lang = Provider.of(context).appLanguage; 21 | return Scaffold( 22 | appBar: AppBar( 23 | title: Text( 24 | tr('streaming_service_tv', namedArgs: {'provider': providerName})), 25 | leading: IconButton( 26 | icon: const Icon( 27 | Icons.arrow_back, 28 | ), 29 | onPressed: () { 30 | Navigator.pop(context); 31 | }, 32 | ), 33 | ), 34 | body: Container( 35 | child: ParticularStreamingServiceTVShows( 36 | includeAdult: Provider.of(context).isAdult, 37 | providerID: providerId, 38 | api: Endpoints.watchProvidersTVShows(providerId, 1, lang), 39 | ), 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/screens/tv/tvdetail_castandcrew.dart: -------------------------------------------------------------------------------- 1 | import 'package:easy_localization/easy_localization.dart'; 2 | 3 | import '../../api/endpoints.dart'; 4 | import '../../widgets/tv_widgets.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:provider/provider.dart'; 7 | import '../../models/credits.dart'; 8 | import '../../provider/settings_provider.dart'; 9 | 10 | class TVDetailCastAndCrew extends StatefulWidget { 11 | const TVDetailCastAndCrew( 12 | {Key? key, required this.id, required this.passedFrom}) 13 | : super(key: key); 14 | 15 | final int id; 16 | final String passedFrom; 17 | 18 | @override 19 | State createState() => _TVDetailCastAndCrewState(); 20 | } 21 | 22 | class _TVDetailCastAndCrewState extends State 23 | with SingleTickerProviderStateMixin { 24 | late TabController tabController; 25 | Credits? credits; 26 | 27 | @override 28 | void initState() { 29 | tabController = TabController(length: 2, vsync: this); 30 | super.initState(); 31 | } 32 | 33 | @override 34 | Widget build(BuildContext context) { 35 | final themeMode = Provider.of(context).appTheme; 36 | final lang = Provider.of(context).appLanguage; 37 | return DefaultTabController( 38 | length: 2, 39 | child: Scaffold( 40 | appBar: AppBar( 41 | elevation: 3, 42 | title: Text( 43 | tr('cast_and_crew'), 44 | ), 45 | leading: IconButton( 46 | icon: const Icon( 47 | Icons.arrow_back, 48 | ), 49 | onPressed: () { 50 | Navigator.pop(context); 51 | }, 52 | ), 53 | ), 54 | body: Column( 55 | children: [ 56 | Container( 57 | color: Colors.grey, 58 | child: TabBar( 59 | tabs: [ 60 | Tab( 61 | child: Text( 62 | tr('cast'), 63 | )), 64 | Tab( 65 | child: Text( 66 | tr('crew'), 67 | )) 68 | ], 69 | indicatorColor: themeMode == 'dark' || themeMode == 'amoled' 70 | ? Colors.white 71 | : Colors.black, 72 | indicatorWeight: 3, 73 | //isScrollable: true, 74 | labelStyle: const TextStyle( 75 | fontFamily: 'PoppinsSB', 76 | color: Colors.black, 77 | fontSize: 17, 78 | ), 79 | unselectedLabelStyle: const TextStyle( 80 | fontFamily: 'Poppins', color: Colors.black87), 81 | labelColor: Colors.black, 82 | controller: tabController, 83 | indicatorSize: TabBarIndicatorSize.tab, 84 | ), 85 | ), 86 | Expanded( 87 | child: TabBarView( 88 | controller: tabController, 89 | children: [ 90 | TVCastTab( 91 | api: Endpoints.getFullTVCreditsUrl(widget.id, lang), 92 | ), 93 | TVCrewTab( 94 | api: Endpoints.getFullTVCreditsUrl(widget.id, lang), 95 | ) 96 | ], 97 | ), 98 | ), 99 | ], 100 | ), 101 | )); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /lib/screens/tv/tvseason_castandcrew.dart: -------------------------------------------------------------------------------- 1 | import 'package:easy_localization/easy_localization.dart'; 2 | 3 | import '../../api/endpoints.dart'; 4 | import '../../widgets/tv_widgets.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:provider/provider.dart'; 7 | import '../../models/credits.dart'; 8 | import '../../provider/settings_provider.dart'; 9 | 10 | class TVSeasonCastAndCrew extends StatefulWidget { 11 | const TVSeasonCastAndCrew( 12 | {Key? key, 13 | required this.id, 14 | required this.seasonNumber, 15 | required this.passedFrom}) 16 | : super(key: key); 17 | 18 | final int id; 19 | final int seasonNumber; 20 | final String passedFrom; 21 | 22 | @override 23 | State createState() => _TVSeasonCastAndCrewState(); 24 | } 25 | 26 | class _TVSeasonCastAndCrewState extends State 27 | with SingleTickerProviderStateMixin { 28 | late TabController tabController; 29 | Credits? credits; 30 | 31 | @override 32 | void initState() { 33 | tabController = TabController(length: 2, vsync: this); 34 | super.initState(); 35 | } 36 | 37 | @override 38 | Widget build(BuildContext context) { 39 | final lang = Provider.of(context).appLanguage; 40 | final themeMode = Provider.of(context).appTheme; 41 | return DefaultTabController( 42 | length: 2, 43 | child: Scaffold( 44 | appBar: AppBar( 45 | elevation: 3, 46 | title: Text( 47 | tr('cast_and_crew'), 48 | ), 49 | leading: IconButton( 50 | icon: const Icon( 51 | Icons.arrow_back, 52 | ), 53 | onPressed: () { 54 | Navigator.pop(context); 55 | }, 56 | ), 57 | ), 58 | body: Column( 59 | children: [ 60 | Container( 61 | color: Colors.grey, 62 | child: TabBar( 63 | tabs: [ 64 | Tab( 65 | child: Text( 66 | tr('cast'), 67 | )), 68 | Tab( 69 | child: Text( 70 | tr('crew'), 71 | )) 72 | ], 73 | indicatorColor: themeMode == 'dark' || themeMode == 'amoled' 74 | ? Colors.white 75 | : Colors.black, 76 | indicatorWeight: 3, 77 | //isScrollable: true, 78 | labelStyle: const TextStyle( 79 | fontFamily: 'PoppinsSB', 80 | color: Colors.black, 81 | fontSize: 17, 82 | ), 83 | unselectedLabelStyle: const TextStyle( 84 | fontFamily: 'Poppins', color: Colors.black87), 85 | labelColor: Colors.black, 86 | controller: tabController, 87 | indicatorSize: TabBarIndicatorSize.tab, 88 | ), 89 | ), 90 | Expanded( 91 | child: TabBarView( 92 | controller: tabController, 93 | children: [ 94 | TVCastTab( 95 | api: Endpoints.getFullTVSeasonCreditsUrl( 96 | widget.id, widget.seasonNumber, lang), 97 | ), 98 | TVCrewTab( 99 | api: Endpoints.getFullTVSeasonCreditsUrl( 100 | widget.id, widget.seasonNumber, lang), 101 | ) 102 | ], 103 | ), 104 | ), 105 | ], 106 | ), 107 | )); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /lib/screens/user/user_state.dart: -------------------------------------------------------------------------------- 1 | import 'package:easy_localization/easy_localization.dart'; 2 | import '../../flixquest_main.dart'; 3 | import '/screens/common/landing_screen.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:firebase_auth/firebase_auth.dart'; 6 | 7 | class UserState extends StatelessWidget { 8 | const UserState({Key? key}) : super(key: key); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return StreamBuilder( 13 | stream: FirebaseAuth.instance.authStateChanges(), 14 | builder: (context, userSnapshot) { 15 | if (userSnapshot.connectionState == ConnectionState.waiting) { 16 | return const FlixQuestHomePage(); 17 | } else if (userSnapshot.connectionState == ConnectionState.active) { 18 | if (userSnapshot.hasData) { 19 | return const FlixQuestHomePage(); 20 | } else { 21 | return const LandingScreen(); 22 | } 23 | } else { 24 | return Center( 25 | child: Text(tr('error_occured')), 26 | ); 27 | } 28 | }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/singleton/sharedpreferences_singleton.dart: -------------------------------------------------------------------------------- 1 | import 'package:shared_preferences/shared_preferences.dart'; 2 | 3 | class SharedPreferencesSingleton { 4 | static SharedPreferences? _instance; 5 | 6 | static Future getInstance() async { 7 | _instance ??= await SharedPreferences.getInstance(); 8 | return _instance!; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/video_providers/common.dart: -------------------------------------------------------------------------------- 1 | class RegularVideoLinks { 2 | String? url; 3 | String? quality; 4 | bool? isM3U8; 5 | 6 | RegularVideoLinks.fromJson(Map json) { 7 | url = json['url']; 8 | if (json.containsKey('quality')) { 9 | quality = json['quality']; 10 | } else { 11 | quality = 'unknown quality'; 12 | } 13 | isM3U8 = json['isM3U8']; 14 | } 15 | } 16 | 17 | class RegularSubtitleLinks { 18 | String? url; 19 | String? language; 20 | 21 | RegularSubtitleLinks.fromJson(Map json) { 22 | url = json['url']; 23 | language = json['lang']; 24 | } 25 | } 26 | 27 | /// Dramacool/Viewasian provider 28 | 29 | /// Dramacool/Viewasian search 30 | class DCVASearch { 31 | int? currentPage; 32 | bool? hasNextPage; 33 | List? results; 34 | 35 | DCVASearch.fromJson(Map json) { 36 | currentPage = json['currentPage']; 37 | hasNextPage = json['hasNextPage']; 38 | if (json['results'] != null) { 39 | results = []; 40 | json['results'].forEach((v) { 41 | results!.add(DCVASearchEntry.fromJson(v)); 42 | }); 43 | } 44 | } 45 | } 46 | 47 | class DCVASearchEntry { 48 | DCVASearchEntry({ 49 | required this.id, 50 | required this.title, 51 | }); 52 | 53 | String? id; 54 | String? title; 55 | 56 | DCVASearchEntry.fromJson(Map json) { 57 | id = json['id']; 58 | title = json['title']; 59 | } 60 | } 61 | 62 | class DCVAInfo { 63 | String? id; 64 | String? title; 65 | String? releaseDate; 66 | String? message; 67 | List? episodes; 68 | 69 | DCVAInfo.fromJson(Map json) { 70 | id = json['id']; 71 | title = json['title']; 72 | releaseDate = json['releaseDate']; 73 | if (json.containsKey('message')) { 74 | message = json['message']; 75 | } 76 | if (json['episodes'] != null) { 77 | episodes = []; 78 | json['episodes'].forEach((v) { 79 | episodes!.add(DCVAInfoEntries.fromJson(v)); 80 | }); 81 | } 82 | } 83 | } 84 | 85 | class DCVAInfoEntries { 86 | String? id; 87 | String? title; 88 | String? url; 89 | String? subType; 90 | String? episode; 91 | 92 | DCVAInfoEntries.fromJson(Map json) { 93 | id = json['id']; 94 | title = json['title']; 95 | url = json['url']; 96 | episode = json['episode'].toString(); 97 | subType = json['subType']; 98 | } 99 | } 100 | 101 | class DCVAStreamSources { 102 | DCVAStreamSources( 103 | {required this.videoLinks, 104 | required this.videoSubtitles, 105 | required this.messageExists}); 106 | 107 | List? videoLinks; 108 | List? videoSubtitles; 109 | 110 | bool? messageExists; 111 | 112 | DCVAStreamSources.fromJson(Map json) { 113 | if (json.containsKey('sources') && json['sources'] != null) { 114 | videoLinks = []; 115 | json['sources'].forEach((v) { 116 | videoLinks!.add(DCVAVideoLinks.fromJson(v)); 117 | }); 118 | } 119 | if (json.containsKey('subtitles') && json['subtitles'] != null) { 120 | videoSubtitles = []; 121 | json['subtitles'].forEach((v) { 122 | videoSubtitles!.add(DCVASubLinks.fromJson(v)); 123 | }); 124 | } 125 | if (json.containsKey('message')) { 126 | messageExists = true; 127 | } 128 | } 129 | } 130 | 131 | class DCVAVideoLinks extends RegularVideoLinks { 132 | DCVAVideoLinks.fromJson(Map json) : super.fromJson(json); 133 | } 134 | 135 | class DCVASubLinks extends RegularSubtitleLinks { 136 | DCVASubLinks.fromJson(Map json) : super.fromJson(json); 137 | } 138 | -------------------------------------------------------------------------------- /lib/video_providers/dramacool.dart: -------------------------------------------------------------------------------- 1 | import 'common.dart'; 2 | 3 | /// Dramacool provider 4 | 5 | /// Dramacool search 6 | class DramacoolSearch extends DCVASearch { 7 | DramacoolSearch.fromJson(Map json) : super.fromJson(json); 8 | } 9 | 10 | class DramacoolSearchEntry extends DCVASearchEntry { 11 | DramacoolSearchEntry.fromJson(Map json) 12 | : super.fromJson(json); 13 | } 14 | 15 | class DramacoolInfo extends DCVAInfo { 16 | DramacoolInfo.fromJson(Map json) : super.fromJson(json); 17 | } 18 | 19 | class DramacoolInfoEntries extends DCVAInfoEntries { 20 | DramacoolInfoEntries.fromJson(Map json) 21 | : super.fromJson(json); 22 | } 23 | 24 | class DramacoolStreamSources extends DCVAStreamSources { 25 | DramacoolStreamSources.fromJson(Map json) 26 | : super.fromJson(json); 27 | } 28 | 29 | class DramacoolVideoLinks extends RegularVideoLinks { 30 | DramacoolVideoLinks.fromJson(Map json) 31 | : super.fromJson(json); 32 | } 33 | 34 | class DramacoolSubLinks extends RegularSubtitleLinks { 35 | DramacoolSubLinks.fromJson(Map json) : super.fromJson(json); 36 | } 37 | -------------------------------------------------------------------------------- /lib/video_providers/flixquest_api_source.dart: -------------------------------------------------------------------------------- 1 | import 'common.dart'; 2 | 3 | /// Currently available providers from the FlixQuest API: flixhq, zoe, gomovies, vidsrc, showbox 4 | 5 | class FlixQuestAPIStreamSources { 6 | FlixQuestAPIStreamSources( 7 | {required this.videoLinks, 8 | required this.videoSubtitles, 9 | required this.messageExists}); 10 | 11 | List? videoLinks; 12 | List? videoSubtitles; 13 | 14 | bool? messageExists; 15 | 16 | FlixQuestAPIStreamSources.fromJson(Map json) { 17 | if (json.containsKey('sources') && json['sources'] != null) { 18 | videoLinks = []; 19 | json['sources'].forEach((v) { 20 | videoLinks!.add(FlixQuestAPIVideoLinks.fromJson(v)); 21 | }); 22 | } 23 | if (json.containsKey('subtitles') && json['subtitles'] != null) { 24 | videoSubtitles = []; 25 | json['subtitles'].forEach((v) { 26 | videoSubtitles!.add(FlixQuestAPISubLinks.fromJson(v)); 27 | }); 28 | } 29 | if (json.containsKey('message')) { 30 | messageExists = true; 31 | } 32 | } 33 | } 34 | 35 | class FlixQuestAPIVideoLinks extends RegularVideoLinks { 36 | FlixQuestAPIVideoLinks.fromJson(Map json) 37 | : super.fromJson(json); 38 | } 39 | 40 | class FlixQuestAPISubLinks extends RegularSubtitleLinks { 41 | FlixQuestAPISubLinks.fromJson(Map json) 42 | : super.fromJson(json); 43 | } 44 | -------------------------------------------------------------------------------- /lib/video_providers/gogoanime.dart: -------------------------------------------------------------------------------- 1 | import 'common.dart'; 2 | 3 | class GogoSearch { 4 | int? currentPage; 5 | bool? hasNextPage; 6 | List? results; 7 | 8 | GogoSearch.fromJson(Map json) { 9 | currentPage = json['currentPage']; 10 | hasNextPage = json['hasNextPage']; 11 | if (json['results'] != null) { 12 | results = []; 13 | json['results'].forEach((v) { 14 | results!.add(GogoSearchEntry.fromJson(v)); 15 | }); 16 | } 17 | } 18 | } 19 | 20 | class GogoSearchEntry { 21 | GogoSearchEntry( 22 | {required this.id, 23 | required this.title, 24 | required this.releaseDate, 25 | required this.subOrDub}); 26 | 27 | String? id; 28 | String? title; 29 | String? releaseDate; 30 | String? subOrDub; 31 | 32 | GogoSearchEntry.fromJson(Map json) { 33 | id = json['id']; 34 | title = json['title']; 35 | releaseDate = json['releaseDate']; 36 | subOrDub = json['subOrDub']; 37 | } 38 | } 39 | 40 | class GogoInfo { 41 | String? id; 42 | String? title; 43 | String? message; 44 | List? episodes; 45 | 46 | GogoInfo.fromJson(Map json) { 47 | id = json['id']; 48 | title = json['title']; 49 | if (json.containsKey('message')) { 50 | message = json['message']; 51 | } 52 | if (json['episodes'] != null) { 53 | episodes = []; 54 | json['episodes'].forEach((v) { 55 | episodes!.add(GogoInfoEntries.fromJson(v)); 56 | }); 57 | } 58 | } 59 | } 60 | 61 | class GogoInfoEntries { 62 | String? id; 63 | String? title; 64 | String? url; 65 | String? episode; 66 | 67 | GogoInfoEntries.fromJson(Map json) { 68 | id = json['id']; 69 | title = json['title']; 70 | url = json['url']; 71 | episode = json['number'].toString(); 72 | } 73 | } 74 | 75 | class GogoStreamSources { 76 | GogoStreamSources( 77 | {required this.videoLinks, 78 | required this.videoSubtitles, 79 | required this.messageExists}); 80 | 81 | List? videoLinks; 82 | List? videoSubtitles; 83 | 84 | bool? messageExists; 85 | 86 | GogoStreamSources.fromJson(Map json) { 87 | if (json.containsKey('sources') && json['sources'] != null) { 88 | videoLinks = []; 89 | json['sources'].forEach((v) { 90 | videoLinks!.add(GogoVideoLinks.fromJson(v)); 91 | }); 92 | } 93 | if (json.containsKey('subtitles') && json['subtitles'] != null) { 94 | videoSubtitles = []; 95 | json['subtitles'].forEach((v) { 96 | videoSubtitles!.add(GogoSubLinks.fromJson(v)); 97 | }); 98 | } 99 | if (json.containsKey('message')) { 100 | messageExists = true; 101 | } 102 | } 103 | } 104 | 105 | class GogoVideoLinks extends RegularVideoLinks { 106 | GogoVideoLinks.fromJson(Map json) : super.fromJson(json); 107 | } 108 | 109 | class GogoSubLinks extends RegularSubtitleLinks { 110 | GogoSubLinks.fromJson(Map json) : super.fromJson(json); 111 | } 112 | -------------------------------------------------------------------------------- /lib/video_providers/names.dart: -------------------------------------------------------------------------------- 1 | class ProviderNames { 2 | static List providers = [ 3 | VideoProvider(fullName: 'FlixHQ', codeName: 'flixhq'), 4 | VideoProvider(fullName: 'Superstream', codeName: 'superstream'), 5 | VideoProvider(fullName: 'Dramacool', codeName: 'dramacool'), 6 | VideoProvider(fullName: 'ViewAsian', codeName: 'viewasian') 7 | ]; 8 | } 9 | 10 | class VideoProvider { 11 | String fullName; 12 | String codeName; 13 | 14 | VideoProvider({required this.fullName, required this.codeName}); 15 | } 16 | -------------------------------------------------------------------------------- /lib/video_providers/viewasian.dart: -------------------------------------------------------------------------------- 1 | import 'common.dart'; 2 | 3 | /// ViewAsian Movie classes 4 | class ViewasianMovieSearch { 5 | int? currentPage; 6 | bool? hasNextPage; 7 | List? results; 8 | 9 | ViewasianMovieSearch.fromJson(Map json) { 10 | currentPage = json['currentPage']; 11 | hasNextPage = json['hasNextPage']; 12 | if (json['results'] != null) { 13 | results = []; 14 | json['results'].forEach((v) { 15 | results!.add(ViewasianMovieSearchEntry.fromJson(v)); 16 | }); 17 | } 18 | } 19 | } 20 | 21 | class ViewasianMovieSearchEntry { 22 | ViewasianMovieSearchEntry({ 23 | required this.id, 24 | required this.title, 25 | }); 26 | 27 | String? id; 28 | String? title; 29 | 30 | ViewasianMovieSearchEntry.fromJson(Map json) { 31 | id = json['id']; 32 | title = json['title']; 33 | } 34 | } 35 | 36 | class ViewasianMovieInfo { 37 | String? id; 38 | String? title; 39 | String? releaseDate; 40 | String? message; 41 | List? episodes; 42 | 43 | ViewasianMovieInfo.fromJson(Map json) { 44 | id = json['id']; 45 | title = json['title']; 46 | releaseDate = json['releaseDate']; 47 | if (json.containsKey('message')) { 48 | message = json['message']; 49 | } 50 | if (json['episodes'] != null) { 51 | episodes = []; 52 | json['episodes'].forEach((v) { 53 | episodes!.add(ViewasianMovieInfoEntries.fromJson(v)); 54 | }); 55 | } 56 | } 57 | } 58 | 59 | class ViewasianMovieInfoEntries { 60 | String? id; 61 | String? title; 62 | String? url; 63 | String? subType; 64 | int? episode; 65 | 66 | ViewasianMovieInfoEntries.fromJson(Map json) { 67 | id = json['id']; 68 | title = json['title']; 69 | url = json['url']; 70 | episode = json['episode']; 71 | subType = json['subType']; 72 | } 73 | } 74 | 75 | class ViewasianStreamSources { 76 | ViewasianStreamSources( 77 | {required this.videoLinks, 78 | required this.videoSubtitles, 79 | required this.messageExists}); 80 | 81 | List? videoLinks; 82 | List? videoSubtitles; 83 | 84 | bool? messageExists; 85 | 86 | ViewasianStreamSources.fromJson(Map json) { 87 | if (json.containsKey('sources') && json['sources'] != null) { 88 | videoLinks = []; 89 | json['sources'].forEach((v) { 90 | videoLinks!.add(ViewasianVideoLinks.fromJson(v)); 91 | }); 92 | } 93 | if (json.containsKey('subtitles') && json['subtitles'] != null) { 94 | videoSubtitles = []; 95 | json['subtitles'].forEach((v) { 96 | videoSubtitles!.add(ViewasianSubLinks.fromJson(v)); 97 | }); 98 | } 99 | if (json.containsKey('message')) { 100 | messageExists = true; 101 | } 102 | } 103 | } 104 | 105 | class ViewasianVideoLinks extends RegularVideoLinks { 106 | ViewasianVideoLinks.fromJson(Map json) 107 | : super.fromJson(json); 108 | } 109 | 110 | class ViewasianSubLinks extends RegularSubtitleLinks { 111 | ViewasianSubLinks.fromJson(Map json) 112 | : super.fromJson(json); 113 | } 114 | -------------------------------------------------------------------------------- /lib/video_providers/zoro.dart: -------------------------------------------------------------------------------- 1 | import 'common.dart'; 2 | 3 | class ZoroSearch { 4 | int? currentPage; 5 | bool? hasNextPage; 6 | List? results; 7 | 8 | ZoroSearch.fromJson(Map json) { 9 | currentPage = json['currentPage']; 10 | hasNextPage = json['hasNextPage']; 11 | if (json['results'] != null) { 12 | results = []; 13 | json['results'].forEach((v) { 14 | results!.add(ZoroSearchEntry.fromJson(v)); 15 | }); 16 | } 17 | } 18 | } 19 | 20 | class ZoroSearchEntry { 21 | ZoroSearchEntry({ 22 | required this.id, 23 | required this.title, 24 | }); 25 | 26 | String? id; 27 | String? title; 28 | String? type; 29 | 30 | ZoroSearchEntry.fromJson(Map json) { 31 | id = json['id']; 32 | title = json['title']; 33 | type = json['type']; 34 | } 35 | } 36 | 37 | class ZoroInfo { 38 | String? id; 39 | String? title; 40 | String? message; 41 | List? episodes; 42 | 43 | ZoroInfo.fromJson(Map json) { 44 | id = json['id']; 45 | title = json['title']; 46 | if (json.containsKey('message')) { 47 | message = json['message']; 48 | } 49 | if (json['episodes'] != null) { 50 | episodes = []; 51 | json['episodes'].forEach((v) { 52 | episodes!.add(ZoroInfoEntries.fromJson(v)); 53 | }); 54 | } 55 | } 56 | } 57 | 58 | class ZoroInfoEntries { 59 | String? id; 60 | String? title; 61 | String? url; 62 | String? episode; 63 | 64 | ZoroInfoEntries.fromJson(Map json) { 65 | id = json['id']; 66 | title = json['title']; 67 | url = json['url']; 68 | episode = json['number'].toString(); 69 | } 70 | } 71 | 72 | class ZoroStreamSources { 73 | ZoroStreamSources( 74 | {required this.videoLinks, 75 | required this.videoSubtitles, 76 | required this.messageExists}); 77 | 78 | List? videoLinks; 79 | List? videoSubtitles; 80 | 81 | bool? messageExists; 82 | 83 | ZoroStreamSources.fromJson(Map json) { 84 | if (json.containsKey('sources') && json['sources'] != null) { 85 | videoLinks = []; 86 | json['sources'].forEach((v) { 87 | videoLinks!.add(ZoroVideoLinks.fromJson(v)); 88 | }); 89 | } 90 | if (json.containsKey('subtitles') && json['subtitles'] != null) { 91 | videoSubtitles = []; 92 | json['subtitles'].forEach((v) { 93 | videoSubtitles!.add(ZoroSubLinks.fromJson(v)); 94 | }); 95 | } 96 | if (json.containsKey('message')) { 97 | messageExists = true; 98 | } 99 | } 100 | } 101 | 102 | class ZoroVideoLinks extends RegularVideoLinks { 103 | ZoroVideoLinks.fromJson(Map json) : super.fromJson(json); 104 | } 105 | 106 | class ZoroSubLinks extends RegularSubtitleLinks { 107 | ZoroSubLinks.fromJson(Map json) : super.fromJson(json); 108 | } 109 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flixquest 2 | description: A Flutter movie app. 3 | 4 | publish_to: "none" 5 | 6 | version: 2.7.1+7 7 | 8 | environment: 9 | sdk: ">=2.12.0 <3.0.0" 10 | 11 | dependencies: 12 | animated_text_kit: ^4.2.1 13 | better_player: 14 | # git: 15 | # url: https://github.com/BeamlakAschalew/flixquest-betterplayer.git 16 | path: ../flixquest-betterplayer 17 | cached_network_image: ^3.2.1 18 | carousel_slider: ^5.0.0 19 | clipboard: ^0.1.3 20 | cloud_firestore: ^5.4.2 21 | cupertino_icons: ^1.0.2 22 | device_info_plus: ^10.1.2 23 | dio: ^4.0.6 24 | dynamic_color: ^1.5.4 25 | easy_localization: ^3.0.2 26 | fading_edge_scrollview: ^4.1.1 27 | firebase_analytics: ^11.3.2 28 | firebase_auth: ^5.3.0 29 | firebase_core: ^3.5.0 30 | firebase_messaging: ^15.1.2 31 | firebase_remote_config: ^5.1.2 32 | flutter: 33 | sdk: flutter 34 | flutter_cache_manager: ^3.3.0 35 | flutter_colorpicker: ^1.0.3 36 | flutter_dotenv: ^5.1.0 37 | flutter_download_manager: ^0.5.4 38 | flutter_downloader: ^1.8.3+2 39 | flutter_local_notifications: ^17.2.3 40 | flutter_localization: ^0.1.13 41 | flutter_svg: ^1.1.5 42 | font_awesome_flutter: ^10.5.0 43 | google_nav_bar: ^5.0.6 44 | http: ^0.13.4 45 | intl: ^0.19.0 46 | mixpanel_flutter: ^2.3.2 47 | native_device_orientation: ^1.1.4 48 | open_file_plus: ^3.3.0 49 | path_provider: ^2.1.2 50 | percent_indicator: ^4.2.2 51 | permission_handler: ^11.0.1 52 | photo_view: ^0.14.0 53 | provider: ^6.0.3 54 | readmore: ^2.1.0 55 | retry: ^3.1.0 56 | share_plus: ^4.0.7 57 | share_plus_web: ^3.0.0 58 | shared_preferences: ^2.0.15 59 | shimmer: ^2.0.0 60 | sqflite: ^2.2.2 61 | url_launcher: ^6.0.18 62 | 63 | dev_dependencies: 64 | flutter_lints: ^2.0.1 65 | flutter_native_splash: ^2.2.10+1 66 | flutter_test: 67 | sdk: flutter 68 | 69 | flutter: 70 | uses-material-design: true 71 | assets: 72 | - assets/images/ 73 | - assets/images/country_flags/ 74 | - assets/images/profiles/ 75 | - assets/translations/ 76 | - assets/ca/ 77 | - .env 78 | 79 | fonts: 80 | - family: Poppins 81 | fonts: 82 | - asset: assets/fonts/poppins/Poppins-Regular.ttf 83 | - family: PoppinsBold 84 | fonts: 85 | - asset: assets/fonts/poppins/Poppins-Bold.ttf 86 | - family: PoppinsSB 87 | fonts: 88 | - asset: assets/fonts/poppins/Poppins-SemiBold.ttf 89 | - family: PoppinsMedium 90 | fonts: 91 | - asset: assets/fonts/poppins/Poppins-Medium.ttf 92 | - family: PoppinsBlack 93 | fonts: 94 | - asset: assets/fonts/poppins/Poppins-Black.ttf 95 | - family: PoppinsLight 96 | fonts: 97 | - asset: assets/fonts/poppins/Poppins-Light.ttf 98 | - family: SocialIcons 99 | fonts: 100 | - asset: assets/fonts/SocialIcons.ttf 101 | - family: IMdb 102 | fonts: 103 | - asset: assets/fonts/imdb.ttf 104 | 105 | flutter_native_splash: 106 | color: "#FFFFFF" 107 | color_dark: "#161716" 108 | image: assets/images/splash_logo.png 109 | android_12: 110 | image: assets/images/splash_logo.png 111 | color: "#FFFFFF" 112 | color_dark: "#161716" 113 | --------------------------------------------------------------------------------