├── ios
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── AppFrameworkInfo.plist
├── 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.plist
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── Runner.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ └── project.pbxproj
└── .gitignore
├── lib
├── app
│ ├── presentation
│ │ ├── home_bloc
│ │ │ ├── widgets
│ │ │ │ ├── widgets.dart
│ │ │ │ ├── fab.dart
│ │ │ │ └── articles_view.dart
│ │ │ ├── controller
│ │ │ │ ├── index.dart
│ │ │ │ ├── event.dart
│ │ │ │ ├── state.dart
│ │ │ │ ├── bloc_controller.dart
│ │ │ │ ├── event.freezed.dart
│ │ │ │ └── state.freezed.dart
│ │ │ └── view
│ │ │ │ └── home_view.dart
│ │ ├── home_cubit
│ │ │ ├── widgets
│ │ │ │ ├── widgets.dart
│ │ │ │ ├── fab.dart
│ │ │ │ └── articles_view.dart
│ │ │ ├── controller
│ │ │ │ ├── index.dart
│ │ │ │ ├── state.dart
│ │ │ │ ├── cubit_controller.dart
│ │ │ │ └── state.freezed.dart
│ │ │ └── view
│ │ │ │ └── home_view.dart
│ │ ├── home_get
│ │ │ ├── widgets
│ │ │ │ ├── widgets.dart
│ │ │ │ ├── fab.dart
│ │ │ │ ├── connectivity_icon.dart
│ │ │ │ └── articles_view.dart
│ │ │ ├── home_binding.dart
│ │ │ ├── home_view.dart
│ │ │ └── home_controller.dart
│ │ ├── loading
│ │ │ ├── loading_binding.dart
│ │ │ ├── loading_controller.dart
│ │ │ └── loading_view.dart
│ │ └── index.dart
│ ├── core
│ │ ├── assets
│ │ │ └── constans.dart
│ │ ├── errors
│ │ │ └── failure.dart
│ │ ├── widgets
│ │ │ ├── index.dart
│ │ │ ├── loading_widget.dart
│ │ │ ├── asset_image_widget.dart
│ │ │ ├── error_widget.dart
│ │ │ ├── keep_alive_wrapper.dart
│ │ │ └── image_handler_widget.dart
│ │ ├── utils
│ │ │ └── launcher.dart
│ │ ├── usecases
│ │ │ └── usecase.dart
│ │ └── network
│ │ │ └── network_info.dart
│ ├── routes
│ │ ├── app_routes.dart
│ │ └── app_pages.dart
│ ├── theme
│ │ └── theme_data.dart
│ ├── domain
│ │ ├── repositories
│ │ │ └── articles_repository.dart
│ │ ├── entities
│ │ │ └── article.dart
│ │ └── usecases
│ │ │ ├── get_remote_articles.dart
│ │ │ └── get_local_articles.dart
│ └── data
│ │ ├── datasources
│ │ ├── local
│ │ │ ├── articles_local_datasource.dart
│ │ │ ├── hive
│ │ │ │ ├── article.dart
│ │ │ │ ├── article.g.dart
│ │ │ │ └── articles_local_datasource_hive.dart
│ │ │ ├── sembast
│ │ │ │ └── articles_local_datasource_sembast.dart
│ │ │ └── sqflite
│ │ │ │ └── articles_local_datasource_sqlite.dart
│ │ └── remote
│ │ │ └── articles_remote_datasource.dart
│ │ ├── api
│ │ ├── api.dart
│ │ └── api.g.dart
│ │ ├── models
│ │ ├── article_model.dart
│ │ └── article_model.g.dart
│ │ └── repositories
│ │ └── articles_repository_impl.dart
├── main.dart
└── di
│ ├── injector.g.dart
│ └── injector.dart
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ └── Icon-512.png
├── manifest.json
└── index.html
├── assets
└── images
│ ├── icon.png
│ ├── loading.jpg
│ ├── placeHolder.jpg
│ └── splash_icon.png
├── screenshots
├── screenshot_1.jpg
├── screenshot_3.jpg
├── screenshot_4.jpg
└── screenshot_5.jpg
├── android
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ └── styles.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── drawable-hdpi
│ │ │ │ │ └── splash.png
│ │ │ │ ├── drawable-mdpi
│ │ │ │ │ └── splash.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── icon.png
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── drawable-xhdpi
│ │ │ │ │ └── splash.png
│ │ │ │ ├── drawable-xxhdpi
│ │ │ │ │ └── splash.png
│ │ │ │ ├── drawable-xxxhdpi
│ │ │ │ │ └── splash.png
│ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ └── values-night
│ │ │ │ │ └── styles.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── omergamliel
│ │ │ │ │ └── getx_hacker_news_api
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── .gitignore
├── settings.gradle
└── build.gradle
├── test
├── data
│ ├── datasources
│ │ ├── fake_data.dart
│ │ └── articles_remote_datasource_test.dart
│ └── repository
│ │ └── articles_repository_impl_test.dart
├── test_helper.dart
├── core
│ └── network
│ │ └── network_info_test.dart
├── domain
│ └── usecases
│ │ ├── get_local_articles_test.dart
│ │ └── get_remote_articles_test.dart
└── presentation
│ ├── home_bloc
│ └── articles_bloc_test.dart
│ └── home_cubit
│ └── articles_cubit_test.dart
├── test_driver
├── app.dart
└── app_test.dart
├── analysis_options.yaml
├── .gitignore
├── README.md
└── pubspec.yaml
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/app/presentation/home_bloc/widgets/widgets.dart:
--------------------------------------------------------------------------------
1 | export 'fab.dart';
2 | export 'articles_view.dart';
3 |
--------------------------------------------------------------------------------
/lib/app/presentation/home_cubit/widgets/widgets.dart:
--------------------------------------------------------------------------------
1 | export 'fab.dart';
2 | export 'articles_view.dart';
3 |
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/web/favicon.png
--------------------------------------------------------------------------------
/lib/app/presentation/home_cubit/controller/index.dart:
--------------------------------------------------------------------------------
1 | export 'cubit_controller.dart';
2 | export 'state.dart';
3 |
--------------------------------------------------------------------------------
/assets/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/assets/images/icon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/assets/images/loading.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/assets/images/loading.jpg
--------------------------------------------------------------------------------
/assets/images/placeHolder.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/assets/images/placeHolder.jpg
--------------------------------------------------------------------------------
/assets/images/splash_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/assets/images/splash_icon.png
--------------------------------------------------------------------------------
/lib/app/presentation/home_bloc/controller/index.dart:
--------------------------------------------------------------------------------
1 | export 'bloc_controller.dart';
2 | export 'event.dart';
3 | export 'state.dart';
4 |
--------------------------------------------------------------------------------
/screenshots/screenshot_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/screenshots/screenshot_1.jpg
--------------------------------------------------------------------------------
/screenshots/screenshot_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/screenshots/screenshot_3.jpg
--------------------------------------------------------------------------------
/screenshots/screenshot_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/screenshots/screenshot_4.jpg
--------------------------------------------------------------------------------
/screenshots/screenshot_5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/screenshots/screenshot_5.jpg
--------------------------------------------------------------------------------
/lib/app/presentation/home_get/widgets/widgets.dart:
--------------------------------------------------------------------------------
1 | export 'fab.dart';
2 | export 'articles_view.dart';
3 | export 'connectivity_icon.dart';
4 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableR8=true
3 | android.useAndroidX=true
4 | android.enableJetifier=true
5 |
--------------------------------------------------------------------------------
/lib/app/core/assets/constans.dart:
--------------------------------------------------------------------------------
1 | const loadingAsset = 'assets/images/loading.jpg';
2 | const placeholderAsset = 'assets/images/placeHolder.jpg';
3 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFEB3B
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/mipmap-hdpi/icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/mipmap-mdpi/icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/mipmap-xhdpi/icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/mipmap-xxhdpi/icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/drawable-hdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/drawable-mdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/mipmap-xxxhdpi/icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/drawable-xhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/drawable-xxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/drawable-xxxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/lib/app/core/errors/failure.dart:
--------------------------------------------------------------------------------
1 | class Failure {
2 | const Failure(this.message);
3 | final String message;
4 | @override
5 | String toString() {
6 | return message;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/lib/app/core/widgets/index.dart:
--------------------------------------------------------------------------------
1 | export 'error_widget.dart';
2 | export 'keep_alive_wrapper.dart';
3 | export 'loading_widget.dart';
4 | export 'image_handler_widget.dart';
5 | export 'asset_image_widget.dart';
6 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/omergamliel3/flutter-clean-architecture-app/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/omergamliel3/flutter-clean-architecture-app/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/app/routes/app_routes.dart:
--------------------------------------------------------------------------------
1 | part of 'app_pages.dart';
2 | // DO NOT EDIT. This is code generated via package:get_cli/get_cli.dart
3 |
4 | abstract class Routes {
5 | static const HOME = '/home';
6 | static const LOADING = '/loading';
7 | }
8 |
--------------------------------------------------------------------------------
/lib/app/theme/theme_data.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | // Light theme data
4 | ThemeData lightThemeData() {
5 | return ThemeData.light();
6 | }
7 |
8 | // Dark theme data
9 | ThemeData darkThemeData() {
10 | return ThemeData.dark();
11 | }
12 |
--------------------------------------------------------------------------------
/lib/app/presentation/loading/loading_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import 'loading_controller.dart';
4 |
5 | class LoadingBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.put(LoadingController());
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/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-5.6.2-all.zip
7 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/app/presentation/home_get/home_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 |
3 | import 'home_controller.dart';
4 |
5 | class HomeBinding extends Bindings {
6 | @override
7 | void dependencies() {
8 | Get.lazyPut(
9 | () => HomeController(),
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/test/data/datasources/fake_data.dart:
--------------------------------------------------------------------------------
1 | String fakeData =
2 | // ignore: lines_longer_than_80_chars
3 | '{"articles": "[{"title": "test", "content": "test", "publishedAt":"test", "url":"test", "urlToImage": "urlToImage"}, {"title": "test", "content": "test", "publishedAt":"test", "url":"test", "urlToImage": "urlToImage"}]"}';
4 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/omergamliel/getx_hacker_news_api/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.omergamliel.getx_hacker_news_api
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | import android.os.Build
6 | import android.view.ViewTreeObserver
7 | import android.view.WindowManager
8 | class MainActivity: FlutterActivity() {
9 | }
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/lib/app/presentation/home_bloc/controller/event.dart:
--------------------------------------------------------------------------------
1 | import 'package:freezed_annotation/freezed_annotation.dart';
2 | import 'package:flutter/foundation.dart';
3 |
4 | part 'event.freezed.dart';
5 |
6 | @freezed
7 | abstract class ArticlesEvent with _$ArticlesEvent {
8 | const factory ArticlesEvent.getData() = GetData;
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/presentation/index.dart:
--------------------------------------------------------------------------------
1 | export '../presentation/loading/loading_view.dart';
2 | export '../presentation/loading/loading_binding.dart';
3 | export '../presentation/home_get/home_view.dart';
4 | export '../presentation/home_get/home_binding.dart';
5 | export 'home_cubit/view/home_view.dart';
6 |
7 | export 'home_bloc/view/home_view.dart';
8 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | !gradle/wrapper/gradle-wrapper.jar
3 | /.gradle
4 | /captures/
5 | /gradlew
6 | /gradlew.bat
7 | /local.properties
8 | GeneratedPluginRegistrant.java
9 |
10 | # Remember to never publicly share your keystore.
11 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
12 | key.properties
13 |
--------------------------------------------------------------------------------
/lib/app/core/utils/launcher.dart:
--------------------------------------------------------------------------------
1 | import 'package:get/get.dart';
2 | import 'package:url_launcher/url_launcher.dart' as url_launcher;
3 |
4 | // launch call via url launcher
5 | Future launch(String url) async {
6 | if (await url_launcher.canLaunch(url)) {
7 | url_launcher.launch(url);
8 | } else {
9 | Get.snackbar('Ooops...', 'Can not launch url');
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/lib/app/core/widgets/loading_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class LoadingWidget extends StatelessWidget {
4 | @override
5 | Widget build(BuildContext context) {
6 | return const Center(
7 | child: CircularProgressIndicator(
8 | valueColor: AlwaysStoppedAnimation(Colors.black),
9 | ),
10 | );
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/app/domain/repositories/articles_repository.dart:
--------------------------------------------------------------------------------
1 | import 'package:dartz/dartz.dart';
2 | import '../../domain/entities/article.dart';
3 | import 'package:getx_hacker_news_api/app/core/errors/failure.dart';
4 |
5 | abstract class ArticlesRepository {
6 | Future>> getRemoteArticles();
7 | Future>> getLocalArticles();
8 | }
9 |
--------------------------------------------------------------------------------
/test_driver/app.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_driver/driver_extension.dart';
2 | import 'package:getx_hacker_news_api/main.dart' as app;
3 |
4 | void main() {
5 | // This line enables the extension.
6 | enableFlutterDriverExtension();
7 | // Call the `main()` function of the app, or call `runApp` with
8 | // any widget you are interested in testing.
9 | app.main();
10 | }
11 |
--------------------------------------------------------------------------------
/lib/app/core/widgets/asset_image_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '../assets/constans.dart';
3 |
4 | class AssetImageWidget extends StatelessWidget {
5 | const AssetImageWidget();
6 | @override
7 | Widget build(BuildContext context) {
8 | return Image.asset(
9 | placeholderAsset,
10 | fit: BoxFit.cover,
11 | );
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/app/data/datasources/local/articles_local_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:getx_hacker_news_api/app/data/models/article_model.dart';
2 |
3 | abstract class ArticlesLocalDatasource {
4 | Future initDb();
5 | Future deleteDb();
6 | Future insertArticles(List articles);
7 | Future deleteAllArticles();
8 | Future> getArticles();
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/core/usecases/usecase.dart:
--------------------------------------------------------------------------------
1 | import 'package:dartz/dartz.dart';
2 | import 'package:equatable/equatable.dart';
3 | import '../errors/failure.dart';
4 |
5 | // ignore: one_member_abstracts
6 | abstract class UseCase {
7 | Future> call(Params params);
8 | }
9 |
10 | class NoParams extends Equatable {
11 | @override
12 | List