├── .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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------