├── .github
└── workflows
│ └── dart.yml
├── .gitignore
├── .gradle
├── 6.1.1
│ ├── executionHistory
│ │ └── executionHistory.lock
│ ├── fileChanges
│ │ └── last-build.bin
│ ├── fileHashes
│ │ └── fileHashes.lock
│ └── gc.properties
├── buildOutputCleanup
│ ├── buildOutputCleanup.lock
│ └── cache.properties
├── checksums
│ └── checksums.lock
└── vcs-1
│ └── gc.properties
├── .metadata
├── .vscode
└── launch.json
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── .project
├── .settings
│ └── org.eclipse.buildship.core.prefs
├── app
│ ├── build.gradle
│ ├── google-services.json
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── dev
│ │ └── res
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ ├── developine
│ │ │ │ └── developine_app
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── tutorials
│ │ │ │ └── demo_code
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ ├── prod
│ │ └── res
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── ios
├── .gitignore
├── Flutter
│ ├── .last_build_id
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ └── Icon-App-83.5x83.5@2x.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── l10n.yaml
├── lib
├── app.dart
├── app_parent_view.dart
├── config
│ ├── env_config.dart
│ ├── flavors.dart
│ └── setup_config.dart
├── core
│ ├── bloc
│ │ ├── base_cubit.dart
│ │ ├── bloc_observer.dart
│ │ ├── network_cubit.dart
│ │ └── network_state.dart
│ ├── const
│ │ ├── events_constants.dart
│ │ ├── exception_constants.dart
│ │ ├── network_constants.dart
│ │ └── route_constants.dart
│ ├── db
│ │ ├── app_database.dart
│ │ └── app_database.g.dart
│ ├── di
│ │ ├── cache_container.dart
│ │ ├── domain_container.dart
│ │ ├── injection_container.dart
│ │ ├── presentation_container.dart
│ │ └── remote_container.dart
│ ├── error
│ │ ├── exception.dart
│ │ └── failures.dart
│ ├── firebase
│ │ ├── firebase_analytics_handler.dart
│ │ └── firebase_notification_handler.dart
│ ├── layout
│ │ ├── colored_safearea.dart
│ │ └── image_placeholder.dart
│ ├── logger
│ │ ├── abstract_logger.dart
│ │ └── firebase_logger.dart
│ ├── model
│ │ └── categories.dart
│ ├── network
│ │ ├── network_client.dart
│ │ ├── network_info.dart
│ │ └── pretty_dio_logger.dart
│ ├── routing
│ │ └── routes.dart
│ └── util
│ │ ├── constant.dart
│ │ ├── location_handler.dart
│ │ ├── string_apis.dart
│ │ ├── theme.dart
│ │ ├── theme_controller.dart
│ │ ├── utils.dart
│ │ └── validation.dart
├── features
│ ├── cart
│ │ ├── data
│ │ │ ├── local
│ │ │ │ └── data_sources
│ │ │ │ │ └── cart_local_datasource.dart
│ │ │ ├── remote
│ │ │ │ └── data_sources
│ │ │ │ │ └── cart_remote_datasource.dart
│ │ │ └── repositories
│ │ │ │ └── cart_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── cart_repository.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── cart_bloc.dart
│ │ │ ├── cart_event.dart
│ │ │ └── cart_state.dart
│ │ │ └── pages
│ │ │ └── cart_page.dart
│ ├── categories
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── categories_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── categories_ model.dart
│ │ │ └── repositories
│ │ │ │ └── categories_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── categories_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── categories_bloc.dart
│ │ │ ├── categories_event.dart
│ │ │ └── categories_state.dart
│ │ │ └── pages
│ │ │ └── categories_page.dart
│ ├── checkout
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── checkout_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── checkout_model.dart
│ │ │ └── repositories
│ │ │ │ └── checkout_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── checkout_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── checkout_bloc.dart
│ │ │ ├── checkout_event.dart
│ │ │ └── checkout_state.dart
│ │ │ └── pages
│ │ │ └── checkout_page.dart
│ ├── detail
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── detail_remote_datasource.dart
│ │ │ └── repositories
│ │ │ │ └── detail_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── detail_repository.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── detail_bloc.dart
│ │ │ ├── detail_event.dart
│ │ │ └── detail_state.dart
│ │ │ └── pages
│ │ │ └── detail_page.dart
│ ├── faqs
│ │ └── faqs_page.dart
│ ├── history
│ │ ├── data
│ │ │ └── repositories
│ │ │ │ └── history_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── history_repository.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── history_bloc.dart
│ │ │ ├── history_event.dart
│ │ │ └── history_state.dart
│ │ │ └── pages
│ │ │ └── history_page.dart
│ ├── home
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── home_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── home_model.dart
│ │ │ └── repositories
│ │ │ │ └── home_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── home_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── home_bloc.dart
│ │ │ ├── home_event.dart
│ │ │ └── home_state.dart
│ │ │ ├── pages
│ │ │ └── home_page.dart
│ │ │ └── widgets
│ │ │ ├── header_menu_widget.dart
│ │ │ └── search_field_widget.dart
│ ├── listing
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── user_list_local_datasource.dart
│ │ │ ├── models
│ │ │ │ └── user_model.dart
│ │ │ └── repositories
│ │ │ │ └── user_list_repository_impl.dart
│ │ ├── domain
│ │ │ ├── entities
│ │ │ │ └── user.dart
│ │ │ └── repositories
│ │ │ │ └── user_list_repository.dart
│ │ └── presentation
│ │ │ ├── cubit
│ │ │ ├── listing_cubit.dart
│ │ │ └── listing_state.dart
│ │ │ ├── pages
│ │ │ └── listing_page.dart
│ │ │ └── widgets
│ │ │ ├── customer_card.dart
│ │ │ ├── customer_card_item.dart
│ │ │ ├── customer_list.dart
│ │ │ └── search_field.dart
│ ├── location
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── location_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── location_model.dart
│ │ │ └── repositories
│ │ │ │ └── location_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── location_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── location_bloc.dart
│ │ │ ├── location_event.dart
│ │ │ └── location_state.dart
│ │ │ └── pages
│ │ │ └── deliverylocation_page.dart
│ ├── login
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ ├── login_local_datasource.dart
│ │ │ │ └── login_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── login_response_model.dart
│ │ │ └── repositories
│ │ │ │ └── login_repository_impl.dart
│ │ ├── domain
│ │ │ ├── entities
│ │ │ │ └── login_response.dart
│ │ │ └── repositories
│ │ │ │ └── login_repository.dart
│ │ └── presentation
│ │ │ ├── cubit
│ │ │ ├── login_cubit.dart
│ │ │ └── login_state.dart
│ │ │ ├── pages
│ │ │ └── login_page.dart
│ │ │ └── widgets
│ │ │ ├── input_field.dart
│ │ │ └── login_button.dart
│ ├── notifiations
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── notifications_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── notifications_bloc.dart
│ │ │ ├── notifications_event.dart
│ │ │ └── notifications_state.dart
│ │ │ └── pages
│ │ │ └── notifications_page.dart
│ ├── password
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── password_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── password_model.dart
│ │ │ └── repositories
│ │ │ │ └── password_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── password_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── password_bloc.dart
│ │ │ ├── password_event.dart
│ │ │ └── password_state.dart
│ │ │ └── pages
│ │ │ ├── changepassword_page.dart
│ │ │ └── forgotpassword_page.dart
│ ├── payment
│ │ └── presentation
│ │ │ └── manager
│ │ │ ├── payment_bloc.dart
│ │ │ ├── payment_event.dart
│ │ │ └── payment_state.dart
│ ├── profile
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── profile_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── profile_model.dart
│ │ │ └── repositories
│ │ │ │ └── profile_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── profile_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── profile_bloc.dart
│ │ │ ├── profile_event.dart
│ │ │ └── profile_state.dart
│ │ │ └── pages
│ │ │ └── profile_page.dart
│ ├── search
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── search_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── search_model.dart
│ │ │ └── repositories
│ │ │ │ └── search_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── search_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── search_bloc.dart
│ │ │ ├── search_event.dart
│ │ │ └── search_state.dart
│ │ │ └── pages
│ │ │ └── search_page.dart
│ ├── signup
│ │ ├── data
│ │ │ ├── data_sources
│ │ │ │ └── signup_remote_datasource.dart
│ │ │ ├── models
│ │ │ │ └── signup_model.dart
│ │ │ └── repositories
│ │ │ │ └── signup_repo_impl.dart
│ │ ├── domain
│ │ │ └── repositories
│ │ │ │ └── signup_repo.dart
│ │ └── presentation
│ │ │ ├── manager
│ │ │ ├── signup_bloc.dart
│ │ │ ├── signup_event.dart
│ │ │ └── signup_state.dart
│ │ │ └── pages
│ │ │ └── signup_page.dart
│ ├── splash
│ │ └── splash_page.dart
│ └── support
│ │ ├── data
│ │ ├── data_sources
│ │ │ └── support_remote_datasource.dart
│ │ ├── models
│ │ │ └── support_model.dart
│ │ └── repositories
│ │ │ └── support_repo_impl.dart
│ │ ├── domain
│ │ └── repositories
│ │ │ └── support_repo.dart
│ │ └── presentation
│ │ ├── manager
│ │ ├── support_bloc.dart
│ │ ├── support_event.dart
│ │ └── support_state.dart
│ │ └── pages
│ │ ├── feeback_page.dart
│ │ └── support_page.dart
├── generated_plugin_registrant.dart
├── l10n
│ ├── app_ar.arb
│ └── app_en.arb
├── main_dev.dart
└── main_prod.dart
├── local.properties
├── pubspec.yaml
├── test
├── features
│ ├── listing
│ │ ├── data
│ │ │ └── repositories
│ │ │ │ └── user_list_repository_impl_test.dart
│ │ ├── domain
│ │ │ └── usecases
│ │ │ │ └── get_user_list_test.dart
│ │ └── presentation
│ │ │ └── bloc
│ │ │ └── listing_bloc_test.dart
│ └── login
│ │ └── presentation
│ │ └── bloc
│ │ └── login_bloc_test.dart
└── widget_test.dart
└── web
├── favicon.png
├── icons
├── Icon-192.png
└── Icon-512.png
├── index.html
└── manifest.json
/.github/workflows/dart.yml:
--------------------------------------------------------------------------------
1 | name: Dart
2 |
3 | on:
4 | push:
5 | branches: [ master ]
6 | pull_request:
7 | branches: [ master ]
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-latest
12 |
13 | # Note that this workflow uses the latest stable version of the Dart SDK.
14 | # Docker images for other release channels - like dev and beta - are also
15 | # available. See https://hub.docker.com/r/google/dart/ for the available
16 | # images.
17 | container:
18 | image: google/dart:latest
19 |
20 | steps:
21 | - uses: actions/checkout@v2
22 |
23 | - name: Print Dart SDK version
24 | run: dart --version
25 |
26 | - name: Install dependencies
27 | run: dart pub get
28 |
29 | # Uncomment this step to verify the use of 'dart format' on each commit.
30 | # - name: Verify formatting
31 | # run: dart format --output=none --set-exit-if-changed .
32 |
33 | # Consider passing '--fatal-infos' for slightly stricter analysis.
34 | - name: Analyze project source
35 | run: dart analyze
36 |
37 | # Your project will need to have tests in test/ and a dependency on
38 | # package:test for this step to succeed. Note that Flutter projects will
39 | # want to change this to 'flutter test'.
40 | - name: Run tests
41 | run: dart test
42 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.lock
5 | *.pyc
6 | *.swp
7 | .DS_Store
8 | .atom/
9 | .buildlog/
10 | .history
11 | .svn/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # Visual Studio Code related
20 | .classpath
21 | .project
22 | .settings/
23 | .vscode/
24 |
25 | # The .vscode folder contains launch configuration and tasks you configure in
26 | # VS Code which you may wish to be included in version control, so this line
27 | # is commented out by default.
28 | #.vscode/
29 |
30 | # Flutter/Dart/Pub related
31 | **/doc/api/
32 | **/ios/Flutter/.last_build_id
33 | .dart_tool/
34 | .flutter-plugins
35 | .flutter-plugins-dependencies
36 | .packages
37 | .pub-cache/
38 | /bin/internal/bootstrap.bat
39 | /bin/internal/bootstrap.sh
40 | /bin/mingit/
41 | /dev/benchmarks/mega_gallery/
42 | /dev/bots/.recipe_deps
43 | /dev/bots/android_tools/
44 | /dev/devicelab/ABresults*.json
45 | /dev/docs/doc/
46 | /dev/docs/flutter.docs.zip
47 | /dev/docs/lib/
48 | /dev/docs/pubspec.yaml
49 | .pub/
50 | /build/
51 | flutter_*.png
52 | linked_*.ds
53 | unlinked.ds
54 | unlinked_spec.ds
55 | .fvm/
56 |
57 | # Web related
58 | lib/generated_plugin_registrant.dart
59 |
60 | # Submodules
61 | !pubspec.lock
62 | pubspec.lock
63 | packages/**/pubspec.lock
64 |
65 | # Symbolication related
66 | app.*.symbols
67 |
68 | # Obfuscation related
69 | app.*.map.json
70 |
71 | # Android Studio will place build artifacts here
72 | /android/app/debug
73 | /android/app/profile
74 | /android/app/release
75 |
76 | # Android related
77 | **/android/**/gradle-wrapper.jar
78 | **/android/.gradle
79 | **/android/captures/
80 | **/android/gradlew
81 | **/android/gradlew.bat
82 | **/android/local.properties
83 | **/android/**/GeneratedPluginRegistrant.java
84 |
85 | # iOS/XCode related
86 | **/ios/**/*.mode1v3
87 | **/ios/**/*.mode2v3
88 | **/ios/**/*.moved-aside
89 | **/ios/**/*.pbxuser
90 | **/ios/**/*.perspectivev3
91 | **/ios/**/*sync/
92 | **/ios/**/.sconsign.dblite
93 | **/ios/**/.tags*
94 | **/ios/**/.vagrant/
95 | **/ios/**/DerivedData/
96 | **/ios/**/Icon?
97 | **/ios/**/Pods/
98 | **/ios/**/.symlinks/
99 | **/ios/**/profile
100 | **/ios/**/xcuserdata
101 | **/ios/.generated/
102 | **/ios/Flutter/App.framework
103 | **/ios/Flutter/Flutter.framework
104 | **/ios/Flutter/Generated.xcconfig
105 | **/ios/Flutter/app.flx
106 | **/ios/Flutter/app.zip
107 | **/ios/Flutter/flutter_assets/
108 | **/ios/ServiceDefinitions.json
109 | **/ios/Runner/GeneratedPluginRegistrant.*
110 |
111 | # Exceptions to above rules.
112 | !**/ios/**/default.mode1v3
113 | !**/ios/**/default.mode2v3
114 | !**/ios/**/default.pbxuser
115 | !**/ios/**/default.perspectivev3
116 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
117 |
118 |
--------------------------------------------------------------------------------
/.gradle/6.1.1/executionHistory/executionHistory.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/.gradle/6.1.1/executionHistory/executionHistory.lock
--------------------------------------------------------------------------------
/.gradle/6.1.1/fileChanges/last-build.bin:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/6.1.1/fileHashes/fileHashes.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/.gradle/6.1.1/fileHashes/fileHashes.lock
--------------------------------------------------------------------------------
/.gradle/6.1.1/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/.gradle/6.1.1/gc.properties
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/buildOutputCleanup.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/.gradle/buildOutputCleanup/buildOutputCleanup.lock
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/cache.properties:
--------------------------------------------------------------------------------
1 | #Wed Jan 20 16:39:47 GST 2021
2 | gradle.version=6.1.1
3 |
--------------------------------------------------------------------------------
/.gradle/checksums/checksums.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/.gradle/checksums/checksums.lock
--------------------------------------------------------------------------------
/.gradle/vcs-1/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/.gradle/vcs-1/gc.properties
--------------------------------------------------------------------------------
/.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: 9f5ff2306bb3e30b2b98eee79cd231b1336f41f4
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Flutter",
9 | "request": "launch",
10 | "type": "dart"
11 | }
12 | ]
13 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Flutter Demo App
2 |
3 | A new Flutter application.
4 |
5 | ## Getting Started
6 |
7 | This project is a starting point for a Flutter application.
8 |
9 | A few resources to get you started if this is your first Flutter project:
10 |
11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
13 |
14 | For help getting started with Flutter, view our
15 | [online documentation](https://flutter.dev/docs), which offers tutorials,
16 | samples, guidance on mobile development, and a full API reference.
17 |
18 | ## Libraries/Frameworks and Architecture
19 |
20 | - Clean Code
21 | - Bloc for Widget state management
22 | - Dio for Networking
23 | - Flutter Localization
24 | - Equatable to facilitate == and hashCode overrides
25 | - DartZ for functional programming
26 | - Get_it for service locator
27 | - Manage theme from single source
28 |
29 |
--------------------------------------------------------------------------------
/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: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 | analyzer:
28 | exclude:
29 | - "**/*.g.dart"
30 |
31 | # Additional information about this file can be found at
32 | # https://dart.dev/guides/language/analysis-options
33 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | android
4 | Project android created by Buildship.
5 |
6 |
7 |
8 |
9 | org.eclipse.buildship.core.gradleprojectbuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.buildship.core.gradleprojectnature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/android/.settings/org.eclipse.buildship.core.prefs:
--------------------------------------------------------------------------------
1 | arguments=
2 | auto.sync=false
3 | build.scans.enabled=false
4 | connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
5 | connection.project.dir=
6 | eclipse.preferences.version=1
7 | gradle.user.home=
8 | java.home=/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home
9 | jvm.arguments=
10 | offline.mode=false
11 | override.workspace.settings=true
12 | show.console.view=true
13 | show.executions.view=true
14 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 |
30 | // ----- BEGIN flavorDimensions (autogenerated by flutter_flavorizr) -----
31 | flavorDimensions "flavor-type"
32 |
33 | productFlavors {
34 | dev {
35 | dimension "flavor-type"
36 | applicationId "com.developine.developine_app"
37 | resValue "string", "app_name", "developine Dev"
38 | }
39 | prod {
40 | dimension "flavor-type"
41 | applicationId "com.developine.developine_app"
42 | resValue "string", "app_name", "developine "
43 | }
44 | }
45 |
46 | // ----- END flavorDimensions (autogenerated by flutter_flavorizr) -----
47 | compileSdkVersion flutter.compileSdkVersion
48 |
49 | compileOptions {
50 | sourceCompatibility JavaVersion.VERSION_1_8
51 | targetCompatibility JavaVersion.VERSION_1_8
52 | }
53 |
54 | kotlinOptions {
55 | jvmTarget = '1.8'
56 | }
57 |
58 | sourceSets {
59 | main.java.srcDirs += 'src/main/kotlin'
60 | }
61 |
62 | defaultConfig {
63 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
64 | applicationId "com.developine.developine_app"
65 | minSdkVersion 21
66 | targetSdkVersion flutter.targetSdkVersion
67 | versionCode flutterVersionCode.toInteger()
68 | versionName flutterVersionName
69 | multiDexEnabled true
70 | }
71 |
72 | buildTypes {
73 | debug {
74 | signingConfig signingConfigs.debug
75 | debuggable true
76 | }
77 | release {
78 | shrinkResources false
79 | minifyEnabled false
80 | signingConfig signingConfigs.debug
81 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
82 | }
83 | }
84 | }
85 |
86 | flutter {
87 | source '../..'
88 | }
89 |
90 | dependencies {
91 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
92 | }
93 |
94 | apply plugin: 'com.google.gms.google-services'
95 | apply plugin: 'com.google.firebase.crashlytics'
--------------------------------------------------------------------------------
/android/app/google-services.json:
--------------------------------------------------------------------------------
1 | {
2 | "project_info": {
3 | "project_number": "1010263203879",
4 | "project_id": "developine-66453",
5 | "storage_bucket": "developine-66453.appspot.com"
6 | },
7 | "client": [
8 | {
9 | "client_info": {
10 | "mobilesdk_app_id": "1:1010263203879:android:730eb76ca616835edf2e02",
11 | "android_client_info": {
12 | "package_name": "com.developine.developine_app"
13 | }
14 | },
15 | "oauth_client": [
16 | {
17 | "client_id": "1010263203879-le7f29t61orve80bv1qqsa2bs9o6qae7.apps.googleusercontent.com",
18 | "client_type": 3
19 | }
20 | ],
21 | "api_key": [
22 | {
23 | "current_key": "AIzaSyCpYR1cDMYi7j7_px6famqqMA90lclUdnU"
24 | }
25 | ],
26 | "services": {
27 | "appinvite_service": {
28 | "other_platform_oauth_client": [
29 | {
30 | "client_id": "1010263203879-le7f29t61orve80bv1qqsa2bs9o6qae7.apps.googleusercontent.com",
31 | "client_type": 3
32 | }
33 | ]
34 | }
35 | }
36 | }
37 | ],
38 | "configuration_version": "1"
39 | }
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/dev/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/dev/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/dev/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/dev/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/dev/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
16 |
20 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
33 |
34 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/developine/developine_app/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.developine.developine_app
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/tutorials/demo_code/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.tutorials.demo_code
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/prod/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/prod/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/prod/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/prod/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/prod/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/prod/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/prod/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/prod/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/prod/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/android/app/src/prod/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.6.10'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:4.1.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | classpath 'com.google.gms:google-services:4.3.10'
12 | classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
13 | }
14 | }
15 |
16 | allprojects {
17 | repositories {
18 | google()
19 | mavenCentral()
20 | }
21 | }
22 |
23 | rootProject.buildDir = '../build'
24 | subprojects {
25 | project.buildDir = "${rootProject.buildDir}/${project.name}"
26 | }
27 | subprojects {
28 | project.evaluationDependsOn(':app')
29 | }
30 |
31 | task clean(type: Delete) {
32 | delete rootProject.buildDir
33 | }
34 |
--------------------------------------------------------------------------------
/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-6.7-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | #profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/ios/Flutter/.last_build_id:
--------------------------------------------------------------------------------
1 | 22c4cfb87a2df2e663952edf975e3a07
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def parse_KV_file(file, separator='=')
14 | file_abs_path = File.expand_path(file)
15 | if !File.exists? file_abs_path
16 | return [];
17 | end
18 | generated_key_values = {}
19 | skip_line_start_symbols = ["#", "/"]
20 | File.foreach(file_abs_path) do |line|
21 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
22 | plugin = line.split(pattern=separator)
23 | if plugin.length == 2
24 | podname = plugin[0].strip()
25 | path = plugin[1].strip()
26 | podpath = File.expand_path("#{path}", file_abs_path)
27 | generated_key_values[podname] = podpath
28 | else
29 | puts "Invalid plugin specification: #{line}"
30 | end
31 | end
32 | generated_key_values
33 | end
34 |
35 | target 'Runner' do
36 | use_frameworks!
37 | use_modular_headers!
38 |
39 | # Flutter Pod
40 |
41 | copied_flutter_dir = File.join(__dir__, 'Flutter')
42 | copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
43 | copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
44 | unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
45 | # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
46 | # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
47 | # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
48 |
49 | generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
50 | unless File.exist?(generated_xcode_build_settings_path)
51 | raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
52 | end
53 | generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
54 | cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
55 |
56 | unless File.exist?(copied_framework_path)
57 | FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
58 | end
59 | unless File.exist?(copied_podspec_path)
60 | FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
61 | end
62 | end
63 |
64 | # Keep pod path relative so it can be checked into Podfile.lock.
65 | pod 'Flutter', :path => 'Flutter'
66 |
67 | # Plugin Pods
68 |
69 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
70 | # referring to absolute paths on developers' machines.
71 | system('rm -rf .symlinks')
72 | system('mkdir -p .symlinks/plugins')
73 | plugin_pods = parse_KV_file('../.flutter-plugins')
74 | plugin_pods.each do |name, path|
75 | symlink = File.join('.symlinks', 'plugins', name)
76 | File.symlink(path, symlink)
77 | pod name, :path => File.join(symlink, 'ios')
78 | end
79 | end
80 |
81 | # Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
82 | install! 'cocoapods', :disable_input_output_paths => true
83 |
84 | post_install do |installer|
85 | installer.pods_project.targets.each do |target|
86 | target.build_configurations.each do |config|
87 | config.build_settings['ENABLE_BITCODE'] = 'NO'
88 | end
89 | end
90 | end
91 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - connectivity (0.0.1):
3 | - Flutter
4 | - Reachability
5 | - connectivity_for_web (0.1.0):
6 | - Flutter
7 | - connectivity_macos (0.0.1):
8 | - Flutter
9 | - Flutter (1.0.0)
10 | - path_provider_linux (0.0.1):
11 | - Flutter
12 | - path_provider_windows (0.0.1):
13 | - Flutter
14 | - Reachability (3.2)
15 | - shared_preferences (0.0.1):
16 | - Flutter
17 | - shared_preferences_linux (0.0.1):
18 | - Flutter
19 | - shared_preferences_macos (0.0.1):
20 | - Flutter
21 | - shared_preferences_web (0.0.1):
22 | - Flutter
23 | - shared_preferences_windows (0.0.1):
24 | - Flutter
25 |
26 | DEPENDENCIES:
27 | - connectivity (from `.symlinks/plugins/connectivity/ios`)
28 | - connectivity_for_web (from `.symlinks/plugins/connectivity_for_web/ios`)
29 | - connectivity_macos (from `.symlinks/plugins/connectivity_macos/ios`)
30 | - Flutter (from `Flutter`)
31 | - path_provider_linux (from `.symlinks/plugins/path_provider_linux/ios`)
32 | - path_provider_windows (from `.symlinks/plugins/path_provider_windows/ios`)
33 | - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
34 | - shared_preferences_linux (from `.symlinks/plugins/shared_preferences_linux/ios`)
35 | - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`)
36 | - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`)
37 | - shared_preferences_windows (from `.symlinks/plugins/shared_preferences_windows/ios`)
38 |
39 | SPEC REPOS:
40 | trunk:
41 | - Reachability
42 |
43 | EXTERNAL SOURCES:
44 | connectivity:
45 | :path: ".symlinks/plugins/connectivity/ios"
46 | connectivity_for_web:
47 | :path: ".symlinks/plugins/connectivity_for_web/ios"
48 | connectivity_macos:
49 | :path: ".symlinks/plugins/connectivity_macos/ios"
50 | Flutter:
51 | :path: Flutter
52 | path_provider_linux:
53 | :path: ".symlinks/plugins/path_provider_linux/ios"
54 | path_provider_windows:
55 | :path: ".symlinks/plugins/path_provider_windows/ios"
56 | shared_preferences:
57 | :path: ".symlinks/plugins/shared_preferences/ios"
58 | shared_preferences_linux:
59 | :path: ".symlinks/plugins/shared_preferences_linux/ios"
60 | shared_preferences_macos:
61 | :path: ".symlinks/plugins/shared_preferences_macos/ios"
62 | shared_preferences_web:
63 | :path: ".symlinks/plugins/shared_preferences_web/ios"
64 | shared_preferences_windows:
65 | :path: ".symlinks/plugins/shared_preferences_windows/ios"
66 |
67 | SPEC CHECKSUMS:
68 | connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
69 | connectivity_for_web: 2b8584556930d4bd490d82b836bcf45067ce345b
70 | connectivity_macos: e2e9731b6b22dda39eb1b128f6969d574460e191
71 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
72 | path_provider_linux: 4d630dc393e1f20364f3e3b4a2ff41d9674a84e4
73 | path_provider_windows: a2b81600c677ac1959367280991971cb9a1edb3b
74 | Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
75 | shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
76 | shared_preferences_linux: afefbfe8d921e207f01ede8b60373d9e3b566b78
77 | shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087
78 | shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9
79 | shared_preferences_windows: 36b76d6f54e76ead957e60b49e2f124b4cd3e6ae
80 |
81 | PODFILE CHECKSUM: 1b66dae606f75376c5f2135a8290850eeb09ae83
82 |
83 | COCOAPODS: 1.9.3
84 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hammad-tariq/flutter-app-architecture/6edbf1b783aafedd2e6cbbcab887f0fd358a6b11/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | flutter_app
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
--------------------------------------------------------------------------------
/l10n.yaml:
--------------------------------------------------------------------------------
1 | arb-dir: lib/l10n
2 | template-arb-file: app_en.arb
3 | output-localization-file: app_localizations.dart
--------------------------------------------------------------------------------
/lib/app.dart:
--------------------------------------------------------------------------------
1 | import 'package:developine_app/app_parent_view.dart';
2 | import 'package:developine_app/core/bloc/network_cubit.dart';
3 | import 'package:flutter/widgets.dart';
4 | import 'package:flutter_bloc/flutter_bloc.dart';
5 | import 'core/di/injection_container.dart';
6 | import 'features/login/presentation/cubit/login_cubit.dart';
7 |
8 | class App extends StatelessWidget {
9 | @override
10 | Widget build(BuildContext context) {
11 | return MultiBlocProvider(
12 | providers: [
13 | BlocProvider(
14 | create: (_) => serviceLocator(),
15 | ),
16 | BlocProvider(
17 | create: (_) => serviceLocator(),
18 | ),
19 | ],
20 | child: AppParentView(),
21 | );
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/app_parent_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_analytics/firebase_analytics.dart';
2 | import 'package:firebase_analytics/observer.dart';
3 | import 'package:firebase_crashlytics/firebase_crashlytics.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:flutter_localizations/flutter_localizations.dart';
6 | import 'core/const/route_constants.dart';
7 | import 'core/routing/routes.dart';
8 | import 'core/util/constant.dart';
9 | import 'core/util/theme.dart';
10 |
11 | class AppParentView extends StatefulWidget {
12 | const AppParentView({Key? key}) : super(key: key);
13 |
14 | @override
15 | State createState() {
16 | return _AppParentViewState();
17 | }
18 | }
19 |
20 | class _AppParentViewState extends State {
21 | // Adding English and Arabic support.
22 | var supportedLocales = [const Locale('en', ''), const Locale('ar', '')];
23 | static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
24 | static FirebaseAnalyticsObserver observer =
25 | FirebaseAnalyticsObserver(analytics: analytics);
26 |
27 | @override
28 | void initState() {
29 | super.initState();
30 | _initializeFlutterFire();
31 | }
32 |
33 | @override
34 | Widget build(BuildContext context) {
35 | return MaterialApp(
36 | localizationsDelegates: const [
37 | GlobalMaterialLocalizations.delegate,
38 | GlobalWidgetsLocalizations.delegate,
39 | GlobalCupertinoLocalizations.delegate,
40 | ],
41 | supportedLocales: supportedLocales,
42 | title: 'DEVELOPINE',
43 | navigatorKey: RouteNavigator.navigatorKey,
44 | navigatorObservers: [observer],
45 | onGenerateRoute: RouteNavigator.generateNamedRoute,
46 | routes: RouteNavigator.routesList,
47 | // TODO: implement Route navigation.
48 | onGenerateInitialRoutes: RouteNavigator.defaultGenerateInitialRoutes,
49 | theme: lightTheme,
50 | initialRoute: RoutesList.initialRoute,
51 | debugShowCheckedModeBanner: false,
52 | );
53 | }
54 |
55 | // Define an async function to
56 | // initialize FlutterFire
57 | Future _initializeFlutterFire() async {
58 | // Wait for Firebase to initialize
59 | if (kTestingCrashlytics) {
60 | // Force enable crashlytics collection enabled if we're testing it.
61 | await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
62 | } else {
63 | // Else only enable it in non-debug builds.
64 | // You could additionally extend this to allow users to opt-in.
65 | await FirebaseCrashlytics.instance
66 | .setCrashlyticsCollectionEnabled(!kDebugMode);
67 | }
68 | // Pass all uncaught errors to Crashlytics.
69 | Function originalOnError = FlutterError.onError as Function;
70 | FlutterError.onError = (FlutterErrorDetails errorDetails) async {
71 | await FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
72 | // Forward to original handler.
73 | originalOnError(errorDetails);
74 | };
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/lib/config/env_config.dart:
--------------------------------------------------------------------------------
1 | enum EnvType { development, production }
2 |
3 | class GlobalAppConfig {
4 | final String? appName;
5 | final String? flavorName;
6 | final String? apiBaseURL;
7 |
8 | GlobalAppConfig(
9 | {required this.appName,
10 | required this.flavorName,
11 | required this.apiBaseURL});
12 |
13 | static GlobalAppConfig? _globalAppConfig;
14 |
15 | static GlobalAppConfig? getInstance({appName, flavorName, apiBaseUrl}) {
16 | if (_globalAppConfig == null) {
17 | _globalAppConfig = GlobalAppConfig(
18 | appName: appName, flavorName: flavorName, apiBaseURL: apiBaseUrl);
19 | return _globalAppConfig;
20 | }
21 | return _globalAppConfig;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/config/flavors.dart:
--------------------------------------------------------------------------------
1 | enum Flavor {
2 | dev,
3 | prod,
4 | }
5 |
6 | class F {
7 | static Flavor? appFlavor;
8 |
9 | static String get name => appFlavor?.name ?? '';
10 |
11 | static String get baseURL {
12 | switch (appFlavor) {
13 | case Flavor.dev:
14 | return 'https://ae-api-dev.developine.com';
15 | case Flavor.prod:
16 | return 'https://ae-api.developine.com';
17 | default:
18 | return '';
19 | }
20 | }
21 |
22 | static String get title {
23 | switch (appFlavor) {
24 | case Flavor.dev:
25 | return 'developine dev';
26 | case Flavor.prod:
27 | return 'developine ';
28 | default:
29 | return 'title';
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/config/setup_config.dart:
--------------------------------------------------------------------------------
1 | import 'env_config.dart';
2 |
3 | class SetupConfig {
4 | void startDev() {
5 | GlobalAppConfig.getInstance(appName: '', flavorName: '', apiBaseUrl: '');
6 | }
7 |
8 | void startProd() {
9 | GlobalAppConfig.getInstance(appName: '', flavorName: '', apiBaseUrl: '');
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/lib/core/bloc/base_cubit.dart:
--------------------------------------------------------------------------------
1 | import 'dart:developer';
2 |
3 | import 'package:dio/dio.dart';
4 | import 'package:flutter_bloc/flutter_bloc.dart';
5 | import '../error/exception.dart';
6 | import 'package:bloc/bloc.dart';
7 |
8 | abstract class BaseCubit extends BlocBase {
9 | /// {@macro cubit}
10 | BaseCubit(State initialState) : super(initialState);
11 |
12 | String handleException(Exception exception) {
13 | var message = "";
14 | if (exception is ServerException) {
15 | return handleDioError(exception.dioError);
16 | } else if (exception is NoInternetException) {
17 | message = "No internet connection available";
18 | } else {
19 | message = "An Exception has occurred";
20 | }
21 |
22 | log("Cubit response.fold left: " + message);
23 | return message;
24 | }
25 |
26 | handleDioError(DioError dioError) {
27 | String message = "";
28 | switch (dioError.type) {
29 | case DioErrorType.cancel:
30 | message = "Request was cancelled";
31 | break;
32 | case DioErrorType.connectTimeout:
33 | message = "Connection timeout";
34 | break;
35 | case DioErrorType.other:
36 | message = "Connection failed due to internet connection";
37 | break;
38 | case DioErrorType.receiveTimeout:
39 | message = "Receive timeout in connection";
40 | break;
41 | case DioErrorType.response:
42 | {
43 | if (dioError.response?.statusCode == 204) {
44 | } else if (dioError.response?.statusCode == 400) {
45 | // BadRequestException
46 | message = "BadRequestException";
47 | } else if (dioError.response?.statusCode == 401) {
48 | // UnauthorisedException
49 | message = "UnauthorisedException";
50 | } else if (dioError.response?.statusCode == 403) {
51 | // ForbiddenException
52 | message = "ForbiddenException";
53 | } else if (dioError.response?.statusCode == 500) {
54 | // ServerException
55 | message = "ServerException";
56 | } else {
57 | message =
58 | "Received invalid status code: ${dioError.response?.statusCode}";
59 | }
60 | }
61 | break;
62 | case DioErrorType.sendTimeout:
63 | message = "Receive timeout in send request";
64 | break;
65 | }
66 | return message;
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/lib/core/bloc/bloc_observer.dart:
--------------------------------------------------------------------------------
1 | import 'dart:developer';
2 | import 'package:bloc/bloc.dart';
3 |
4 | class CubitObserver extends BlocObserver {
5 | @override
6 | void onChange(BlocBase bloc, Change change) {
7 | log('CubitObserver onChange: (${bloc.runtimeType}, $change)');
8 | super.onChange(bloc, change);
9 | }
10 |
11 | @override
12 | void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
13 | log('CubitObserver onError: (${bloc.runtimeType}, $error, $stackTrace)');
14 | super.onError(bloc, error, stackTrace);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/lib/core/bloc/network_cubit.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'dart:developer';
3 | import 'package:bloc/bloc.dart';
4 | import 'package:flutter_bloc/flutter_bloc.dart';
5 | import 'package:simple_connection_checker/simple_connection_checker.dart';
6 | import 'network_state.dart';
7 |
8 | class NetworkCubit extends Cubit {
9 | StreamSubscription? subscription;
10 | SimpleConnectionChecker simpleConnectionChecker = SimpleConnectionChecker();
11 |
12 | NetworkCubit() : super(NetworkInitialState()) {
13 | subscription =
14 | simpleConnectionChecker.onConnectionChange.listen((connected) {
15 | log("Network onConnectionChange: $connected");
16 | connected
17 | ? emit(NetworkConnectedState())
18 | : emit(NetworkDisConnectedState());
19 | });
20 | }
21 |
22 | @override
23 | Future close() {
24 | subscription?.cancel();
25 | return super.close();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/lib/core/bloc/network_state.dart:
--------------------------------------------------------------------------------
1 | import 'package:equatable/equatable.dart';
2 |
3 | abstract class NetworkState extends Equatable {
4 | String get message;
5 | }
6 |
7 | class NetworkConnectedState extends NetworkState {
8 | @override
9 | List