├── test
└── widget_test.dart
├── ios
├── Runner
│ ├── Runner-Bridging-Header.h
│ ├── Assets.xcassets
│ │ ├── LaunchImage.imageset
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ ├── README.md
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── 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-1024x1024@1x.png
│ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ └── Contents.json
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── Main.storyboard
│ │ └── LaunchScreen.storyboard
│ ├── Info-Release.plist
│ └── Info-Debug.plist
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── dev.xcscheme
│ │ ├── prod.xcscheme
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── .gitignore
├── Podfile
└── Podfile.lock
├── lib
├── app
│ ├── data
│ │ ├── local
│ │ │ ├── db
│ │ │ │ └── db.txt
│ │ │ └── preference
│ │ │ │ ├── preference_manager.dart
│ │ │ │ └── preference_manager_impl.dart
│ │ ├── repository
│ │ │ ├── github_repository.dart
│ │ │ └── github_repository_impl.dart
│ │ ├── remote
│ │ │ ├── github_remote_data_source.dart
│ │ │ └── github_remote_data_source_impl.dart
│ │ └── model
│ │ │ └── github_project_search_response.dart
│ ├── network
│ │ ├── exceptions
│ │ │ ├── base_exception.dart
│ │ │ ├── network_exception.dart
│ │ │ ├── timeout_exception.dart
│ │ │ ├── app_exception.dart
│ │ │ ├── json_format_exception.dart
│ │ │ ├── not_found_exception.dart
│ │ │ ├── api_exception.dart
│ │ │ ├── base_api_exception.dart
│ │ │ ├── unauthorize_exception.dart
│ │ │ └── service_unavailable_exception.dart
│ │ ├── request_headers.dart
│ │ ├── dio_request_retrier.dart
│ │ ├── dio_provider.dart
│ │ ├── error_handlers.dart
│ │ └── pretty_dio_logger.dart
│ ├── core
│ │ ├── model
│ │ │ ├── page_state.dart
│ │ │ ├── page_status.dart
│ │ │ └── github_search_query_param.dart
│ │ ├── widget
│ │ │ ├── app_bar_title.dart
│ │ │ ├── loading.dart
│ │ │ ├── ripple.dart
│ │ │ ├── custom_app_bar.dart
│ │ │ ├── elevated_container.dart
│ │ │ ├── asset_image_view.dart
│ │ │ ├── icon_text_widgets.dart
│ │ │ └── paging_view.dart
│ │ ├── utils
│ │ │ └── debouncer.dart
│ │ ├── base
│ │ │ ├── base_widget_mixin.dart
│ │ │ ├── paging_controller.dart
│ │ │ ├── base_remote_source.dart
│ │ │ ├── base_view.dart
│ │ │ └── base_controller.dart
│ │ └── values
│ │ │ ├── app_colors.dart
│ │ │ ├── app_values.dart
│ │ │ └── text_styles.dart
│ ├── modules
│ │ ├── other
│ │ │ ├── controllers
│ │ │ │ └── other_controller.dart
│ │ │ ├── bindings
│ │ │ │ └── other_binding.dart
│ │ │ └── views
│ │ │ │ └── other_view.dart
│ │ ├── favorite
│ │ │ ├── controllers
│ │ │ │ └── favorite_controller.dart
│ │ │ ├── bindings
│ │ │ │ └── favorite_binding.dart
│ │ │ └── views
│ │ │ │ └── favorite_view.dart
│ │ ├── settings
│ │ │ ├── controllers
│ │ │ │ └── settings_controller.dart
│ │ │ ├── bindings
│ │ │ │ └── settings_binding.dart
│ │ │ ├── widgets
│ │ │ │ └── item_settings_widgets.dart
│ │ │ └── views
│ │ │ │ └── settings_view.dart
│ │ ├── home
│ │ │ ├── bindings
│ │ │ │ └── home_binding.dart
│ │ │ ├── model
│ │ │ │ └── github_project_ui_data.dart
│ │ │ ├── views
│ │ │ │ └── home_view.dart
│ │ │ ├── controllers
│ │ │ │ └── home_controller.dart
│ │ │ └── widget
│ │ │ │ └── item_github_project.dart
│ │ ├── main
│ │ │ ├── controllers
│ │ │ │ ├── bottom_nav_controller.dart
│ │ │ │ └── main_controller.dart
│ │ │ ├── model
│ │ │ │ ├── menu_item.dart
│ │ │ │ └── menu_code.dart
│ │ │ ├── bindings
│ │ │ │ └── main_binding.dart
│ │ │ └── views
│ │ │ │ ├── main_view.dart
│ │ │ │ └── bottom_nav_bar.dart
│ │ └── project_details
│ │ │ ├── bindings
│ │ │ └── project_details_binding.dart
│ │ │ ├── controllers
│ │ │ └── project_details_controller.dart
│ │ │ └── views
│ │ │ └── project_details_view.dart
│ ├── bindings
│ │ ├── initial_binding.dart
│ │ ├── repository_bindings.dart
│ │ ├── remote_source_bindings.dart
│ │ └── local_source_bindings.dart
│ ├── routes
│ │ ├── app_routes.dart
│ │ └── app_pages.dart
│ └── my_app.dart
├── flavors
│ ├── environment.dart
│ ├── build_config.dart
│ └── env_config.dart
├── l10n
│ ├── app_bn.arb
│ └── app_en.arb
├── main_dev.dart
└── main_prod.dart
├── images
├── test.jpg
├── ic_test.png
├── ic_theme.png
├── test_jpeg.jpeg
├── launcher_icon.png
├── ic_language.svg
├── ic_font_size.svg
├── arrow_forward.svg
├── ic_fork.svg
├── ic_home.svg
├── ic_settings.svg
└── ic_favorite.svg
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ └── Icon-512.png
├── manifest.json
└── index.html
├── fonts
├── Roboto-Bold.ttf
├── Roboto-Light.ttf
├── Roboto-Thin.ttf
├── Roboto-Italic.ttf
├── Roboto-Medium.ttf
└── Roboto-Regular.ttf
├── l10n.yaml
├── repo_data
├── mvvm_flow.png
├── flutter_getx_template_1.png
├── flutter_getx_template_2.png
├── flutter_getx_template_3.png
└── flutter_getx_template_4.png
├── android
├── gradle.properties
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── 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
│ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night
│ │ │ │ │ └── styles.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── hellohasan
│ │ │ │ │ └── flutter_getx_template
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── .gitignore
├── settings.gradle
└── build.gradle
├── pull_request_template.md
├── .metadata
├── LICENSE
├── pubspec.yaml
├── analysis_options.yaml
├── readme_configuration_guideline.md
├── .gitignore
├── README.md
└── pubspec.lock
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/app/data/local/db/db.txt:
--------------------------------------------------------------------------------
1 | DB related files will be placed in this package
--------------------------------------------------------------------------------
/lib/flavors/environment.dart:
--------------------------------------------------------------------------------
1 | enum Environment { DEVELOPMENT, PRODUCTION }
2 |
--------------------------------------------------------------------------------
/images/test.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/images/test.jpg
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/web/favicon.png
--------------------------------------------------------------------------------
/images/ic_test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/images/ic_test.png
--------------------------------------------------------------------------------
/images/ic_theme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/images/ic_theme.png
--------------------------------------------------------------------------------
/fonts/Roboto-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/fonts/Roboto-Bold.ttf
--------------------------------------------------------------------------------
/fonts/Roboto-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/fonts/Roboto-Light.ttf
--------------------------------------------------------------------------------
/fonts/Roboto-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/fonts/Roboto-Thin.ttf
--------------------------------------------------------------------------------
/images/test_jpeg.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/images/test_jpeg.jpeg
--------------------------------------------------------------------------------
/l10n.yaml:
--------------------------------------------------------------------------------
1 | arb-dir: lib/l10n
2 | template-arb-file: app_en.arb
3 | output-localization-file: app_localizations.dart
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/fonts/Roboto-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/fonts/Roboto-Italic.ttf
--------------------------------------------------------------------------------
/fonts/Roboto-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/fonts/Roboto-Medium.ttf
--------------------------------------------------------------------------------
/fonts/Roboto-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/fonts/Roboto-Regular.ttf
--------------------------------------------------------------------------------
/images/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/images/launcher_icon.png
--------------------------------------------------------------------------------
/repo_data/mvvm_flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/repo_data/mvvm_flow.png
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/repo_data/flutter_getx_template_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/repo_data/flutter_getx_template_1.png
--------------------------------------------------------------------------------
/repo_data/flutter_getx_template_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/repo_data/flutter_getx_template_2.png
--------------------------------------------------------------------------------
/repo_data/flutter_getx_template_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/repo_data/flutter_getx_template_3.png
--------------------------------------------------------------------------------
/repo_data/flutter_getx_template_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/repo_data/flutter_getx_template_4.png
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/pull_request_template.md:
--------------------------------------------------------------------------------
1 | ## Why? (ticket link or issue description)
2 |
3 |
4 | ## What was done and how?
5 |
6 |
7 | ## Anything special? (optional)
8 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/lib/app/network/exceptions/base_exception.dart:
--------------------------------------------------------------------------------
1 | abstract class BaseException implements Exception {
2 | final String message;
3 |
4 | BaseException({this.message = ""});
5 | }
6 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/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/hasancse91/flutter_getx_template/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hasancse91/flutter_getx_template/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/lib/app/core/model/page_state.dart:
--------------------------------------------------------------------------------
1 | enum PageState {
2 | DEFAULT,
3 | LOADING,
4 | SUCCESS,
5 | FAILED,
6 | UPDATED,
7 | CREATED,
8 | NO_INTERNET,
9 | MESSAGE,
10 | UNAUTHORIZED,
11 | }
12 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/network_exception.dart:
--------------------------------------------------------------------------------
1 | import '/app/network/exceptions/base_exception.dart';
2 |
3 | class NetworkException extends BaseException {
4 | NetworkException(String message) : super(message: message);
5 | }
6 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/timeout_exception.dart:
--------------------------------------------------------------------------------
1 | import '/app/network/exceptions/base_exception.dart';
2 |
3 | class TimeoutException extends BaseException {
4 | TimeoutException(String message) : super(message: message);
5 | }
6 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/hellohasan/flutter_getx_template/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.hellohasan.flutter_getx_template
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/app_exception.dart:
--------------------------------------------------------------------------------
1 | import '/app/network/exceptions/base_exception.dart';
2 |
3 | class AppException extends BaseException {
4 | AppException({
5 | String message = "",
6 | }) : super(message: message);
7 | }
8 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/json_format_exception.dart:
--------------------------------------------------------------------------------
1 | import '/app/network/exceptions/base_exception.dart';
2 |
3 | class JsonFormatException extends BaseException {
4 | JsonFormatException(String message) : super(message: message);
5 | }
6 |
--------------------------------------------------------------------------------
/lib/l10n/app_bn.arb:
--------------------------------------------------------------------------------
1 | {
2 | "bottomNavHome": "হোম",
3 | "bottomNavFavorite": "ফেভারিট",
4 | "bottomNavSettings": "সেটিংস",
5 | "titleOtherView": "অন্যান্য",
6 | "settingsTheme": "থিম",
7 | "settingsLanguage": "ভাষা",
8 | "settingsFontSize": "অক্ষরের আকার"
9 | }
--------------------------------------------------------------------------------
/lib/l10n/app_en.arb:
--------------------------------------------------------------------------------
1 | {
2 | "bottomNavHome": "Home",
3 | "bottomNavFavorite": "Favorite",
4 | "bottomNavSettings": "Settings",
5 | "titleOtherView": "OtherView",
6 | "settingsTheme": "Theme",
7 | "settingsLanguage": "Language",
8 | "settingsFontSize": "Font Size"
9 | }
--------------------------------------------------------------------------------
/lib/app/modules/other/controllers/other_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/core/base/base_controller.dart';
4 |
5 | class OtherController extends BaseController {
6 | final count = 0.obs;
7 |
8 | void increment() => count.value++;
9 | }
10 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Dec 12 12:34:09 BDT 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/lib/app/modules/favorite/controllers/favorite_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/core/base/base_controller.dart';
4 |
5 | class FavoriteController extends BaseController {
6 | final count = 0.obs;
7 |
8 | void increment() => count.value++;
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/modules/settings/controllers/settings_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/core/base/base_controller.dart';
4 |
5 | class SettingsController extends BaseController {
6 | final count = 0.obs;
7 |
8 | void increment() => count.value++;
9 | }
10 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/not_found_exception.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import '/app/network/exceptions/api_exception.dart';
4 |
5 | class NotFoundException extends ApiException {
6 | NotFoundException(String message, String status)
7 | : super(httpCode: HttpStatus.notFound, status: status, message: message);
8 | }
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/app/modules/home/bindings/home_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/modules/home/controllers/home_controller.dart';
4 |
5 | class HomeBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(
9 | () => HomeController(),
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app/modules/other/bindings/other_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/modules/other/controllers/other_controller.dart';
4 |
5 | class OtherBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(
9 | () => OtherController(),
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app/modules/main/controllers/bottom_nav_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | class BottomNavController extends GetxController {
4 | final _selectedIndexController = 0.obs;
5 |
6 | updateSelectedIndex(int index) => _selectedIndexController(index);
7 |
8 | int get selectedIndex => _selectedIndexController.value;
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/api_exception.dart:
--------------------------------------------------------------------------------
1 | import '/app/network/exceptions/base_api_exception.dart';
2 |
3 | class ApiException extends BaseApiException {
4 | ApiException({
5 | required int httpCode,
6 | required String status,
7 | String message = "",
8 | }) : super(httpCode: httpCode, status: status, message: message);
9 | }
10 |
--------------------------------------------------------------------------------
/.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: f4abaa0735eba4dfd8f33f73363911d63931fe03
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/base_api_exception.dart:
--------------------------------------------------------------------------------
1 | import '/app/network/exceptions/app_exception.dart';
2 |
3 | abstract class BaseApiException extends AppException {
4 | final int httpCode;
5 | final String status;
6 |
7 | BaseApiException({this.httpCode = -1, this.status = "", String message = ""})
8 | : super(message: message);
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/modules/main/model/menu_item.dart:
--------------------------------------------------------------------------------
1 | import '/app/modules/main/model/menu_code.dart';
2 |
3 | class BottomNavItem {
4 | final String navTitle;
5 | final String iconSvgName;
6 | final MenuCode menuCode;
7 |
8 | const BottomNavItem(
9 | {required this.navTitle,
10 | required this.iconSvgName,
11 | required this.menuCode});
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app/modules/favorite/bindings/favorite_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/modules/favorite/controllers/favorite_controller.dart';
4 |
5 | class FavoriteBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(
9 | () => FavoriteController(),
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app/modules/settings/bindings/settings_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/modules/settings/controllers/settings_controller.dart';
4 |
5 | class SettingsBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(
9 | () => SettingsController(),
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/lib/app/data/repository/github_repository.dart:
--------------------------------------------------------------------------------
1 | import '/app/core/model/github_search_query_param.dart';
2 | import '/app/data/model/github_project_search_response.dart';
3 |
4 | abstract class GithubRepository {
5 | Future searchProject(
6 | GithubSearchQueryParam queryParam);
7 |
8 | Future- getProject(String userName, String repositoryName);
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/unauthorize_exception.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import '/app/network/exceptions/base_api_exception.dart';
4 |
5 | class UnauthorizedException extends BaseApiException {
6 | UnauthorizedException(String message)
7 | : super(
8 | httpCode: HttpStatus.unauthorized,
9 | message: message,
10 | status: "unauthorized");
11 | }
12 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/app/modules/project_details/bindings/project_details_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/modules/project_details/controllers/project_details_controller.dart';
4 |
5 | class ProjectDetailsBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(
9 | () => ProjectDetailsController(),
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app/network/exceptions/service_unavailable_exception.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import '/app/network/exceptions/base_api_exception.dart';
4 |
5 | class ServiceUnavailableException extends BaseApiException {
6 | ServiceUnavailableException(String message)
7 | : super(
8 | httpCode: HttpStatus.serviceUnavailable,
9 | message: message,
10 | status: "");
11 | }
12 |
--------------------------------------------------------------------------------
/lib/app/data/remote/github_remote_data_source.dart:
--------------------------------------------------------------------------------
1 | import '/app/core/model/github_search_query_param.dart';
2 | import '/app/data/model/github_project_search_response.dart';
3 |
4 | abstract class GithubRemoteDataSource {
5 | Future searchGithubProject(
6 | GithubSearchQueryParam queryParam);
7 |
8 | Future
- getGithubProjectDetails(String userName, String repositoryName);
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/bindings/initial_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import 'local_source_bindings.dart';
4 | import 'remote_source_bindings.dart';
5 | import 'repository_bindings.dart';
6 |
7 | class InitialBinding implements Bindings {
8 | @override
9 | void dependencies() {
10 | RepositoryBindings().dependencies();
11 | RemoteSourceBindings().dependencies();
12 | LocalSourceBindings().dependencies();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/lib/app/bindings/repository_bindings.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/data/repository/github_repository.dart';
4 | import '/app/data/repository/github_repository_impl.dart';
5 |
6 | class RepositoryBindings implements Bindings {
7 | @override
8 | void dependencies() {
9 | Get.lazyPut(
10 | () => GithubRepositoryImpl(),
11 | tag: (GithubRepository).toString(),
12 | );
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/lib/app/core/model/page_status.dart:
--------------------------------------------------------------------------------
1 | import '/app/core/model/page_state.dart';
2 |
3 | class PageStatus {
4 | final bool isSuccess;
5 | final String message;
6 | final String title;
7 | final String nextRoute;
8 | final PageState pageState;
9 |
10 | PageStatus({
11 | this.isSuccess = false,
12 | this.title = "",
13 | this.message = "",
14 | this.nextRoute = "",
15 | this.pageState = PageState.DEFAULT,
16 | });
17 | }
18 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/app/bindings/remote_source_bindings.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/data/remote/github_remote_data_source.dart';
4 | import '/app/data/remote/github_remote_data_source_impl.dart';
5 |
6 | class RemoteSourceBindings implements Bindings {
7 | @override
8 | void dependencies() {
9 | Get.lazyPut(
10 | () => GithubRemoteDataSourceImpl(),
11 | tag: (GithubRemoteDataSource).toString(),
12 | );
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/lib/app/bindings/local_source_bindings.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/data/local/preference/preference_manager.dart';
4 | import '/app/data/local/preference/preference_manager_impl.dart';
5 |
6 | class LocalSourceBindings implements Bindings {
7 | @override
8 | void dependencies() {
9 | Get.lazyPut(
10 | () => PreferenceManagerImpl(),
11 | tag: (PreferenceManager).toString(),
12 | fenix: true,
13 | );
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/lib/app/core/widget/app_bar_title.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '/app/core/values/text_styles.dart';
4 |
5 | class AppBarTitle extends StatelessWidget {
6 | final String text;
7 |
8 | const AppBarTitle({Key? key, required this.text}) : super(key: key);
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | return Text(
13 | text,
14 | style: pageTitleStyle,
15 | textAlign: TextAlign.center,
16 | );
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | -
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | -
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/lib/app/core/utils/debouncer.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter/material.dart';
4 |
5 | import '/app/core/values/app_values.dart';
6 |
7 | class Debouncer {
8 | final int milliseconds;
9 | VoidCallback? action;
10 | Timer? _timer;
11 |
12 | Debouncer({this.milliseconds = AppValues.defaultDebounceTimeInMilliSeconds});
13 |
14 | run(VoidCallback action) {
15 | if (_timer != null) {
16 | _timer!.cancel();
17 | }
18 | _timer = Timer(Duration(milliseconds: milliseconds), action);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/lib/app/modules/main/controllers/main_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import '/app/core/base/base_controller.dart';
4 | import '/app/modules/main/model/menu_code.dart';
5 |
6 | class MainController extends BaseController {
7 | final _selectedMenuCodeController = MenuCode.HOME.obs;
8 |
9 | MenuCode get selectedMenuCode => _selectedMenuCodeController.value;
10 |
11 | final lifeCardUpdateController = false.obs;
12 |
13 | onMenuSelected(MenuCode menuCode) async {
14 | _selectedMenuCodeController(menuCode);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/lib/main_dev.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '/app/my_app.dart';
4 | import '/flavors/build_config.dart';
5 | import '/flavors/env_config.dart';
6 | import '/flavors/environment.dart';
7 |
8 | void main() {
9 | EnvConfig devConfig = EnvConfig(
10 | appName: "Flutter GetX Template Dev",
11 | baseUrl: "https://api.github.com",
12 | shouldCollectCrashLog: true,
13 | );
14 |
15 | BuildConfig.instantiate(
16 | envType: Environment.DEVELOPMENT,
17 | envConfig: devConfig,
18 | );
19 |
20 | runApp(const MyApp());
21 | }
22 |
--------------------------------------------------------------------------------
/lib/main_prod.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '/app/my_app.dart';
4 | import '/flavors/build_config.dart';
5 | import '/flavors/env_config.dart';
6 | import '/flavors/environment.dart';
7 |
8 | void main() {
9 | EnvConfig prodConfig = EnvConfig(
10 | appName: "Flutter GetX Template Prod",
11 | baseUrl: "https://api.github.com",
12 | shouldCollectCrashLog: true,
13 | );
14 |
15 | BuildConfig.instantiate(
16 | envType: Environment.PRODUCTION,
17 | envConfig: prodConfig,
18 | );
19 |
20 | runApp(const MyApp());
21 | }
22 |
--------------------------------------------------------------------------------
/lib/app/modules/home/model/github_project_ui_data.dart:
--------------------------------------------------------------------------------
1 | class GithubProjectUiData {
2 | String repositoryName;
3 | String ownerLoginName;
4 | String ownerAvatar;
5 | int numberOfStar;
6 | int numberOfFork;
7 | String description;
8 | double score;
9 | int watchers;
10 |
11 | GithubProjectUiData({
12 | this.repositoryName = "",
13 | this.ownerLoginName = "",
14 | this.ownerAvatar = "",
15 | this.numberOfStar = 0,
16 | this.numberOfFork = 0,
17 | this.description = "",
18 | this.score = 0.0,
19 | this.watchers = 0,
20 | });
21 | }
22 |
--------------------------------------------------------------------------------
/lib/app/network/request_headers.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 |
3 | class RequestHeaderInterceptor extends InterceptorsWrapper {
4 | @override
5 | void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
6 | getCustomHeaders().then((customHeaders) {
7 | options.headers.addAll(customHeaders);
8 | super.onRequest(options, handler);
9 | });
10 | }
11 |
12 | Future