├── lib
├── core
│ ├── .gitkeep
│ ├── error
│ │ ├── .gitkeep
│ │ ├── exceptions.dart
│ │ └── failures.dart
│ ├── usecases
│ │ ├── .gitkeep
│ │ └── usecase.dart
│ ├── network
│ │ └── network_info.dart
│ └── util
│ │ └── input_converter.dart
├── features
│ ├── .gitkeep
│ └── number_trivia
│ │ ├── data
│ │ ├── .gitkeep
│ │ ├── models
│ │ │ ├── .gitkeep
│ │ │ └── number_trivia_model.dart
│ │ ├── datasources
│ │ │ ├── .gitkeep
│ │ │ ├── number_trivia_local_data_source.dart
│ │ │ └── number_trivia_remote_data_source.dart
│ │ └── repositories
│ │ │ ├── .gitkeep
│ │ │ └── number_trivia_repository_impl.dart
│ │ ├── domain
│ │ ├── .gitkeep
│ │ ├── entities
│ │ │ ├── .gitkeep
│ │ │ └── number_trivia.dart
│ │ ├── usecases
│ │ │ ├── .gitkeep
│ │ │ ├── get_random_number_trivia.dart
│ │ │ └── get_concrete_number_trivia.dart
│ │ └── repositories
│ │ │ ├── .gitkeep
│ │ │ └── number_trivia_repository.dart
│ │ └── presentation
│ │ ├── .gitkeep
│ │ ├── pages
│ │ ├── .gitkeep
│ │ └── number_trivia_page.dart
│ │ ├── widgets
│ │ ├── .gitkeep
│ │ ├── widgets.dart
│ │ ├── loading_widget.dart
│ │ ├── message_display.dart
│ │ ├── trivia_display.dart
│ │ └── trivia_controls.dart
│ │ └── bloc
│ │ ├── bloc.dart
│ │ ├── number_trivia_event.dart
│ │ ├── number_trivia_state.dart
│ │ └── number_trivia_bloc.dart
├── main.dart
└── injection_container.dart
├── test
├── core
│ ├── .gitkeep
│ ├── error
│ │ └── .gitkeep
│ ├── usecases
│ │ └── .gitkeep
│ ├── network
│ │ └── network_info_test.dart
│ └── util
│ │ └── input_converter_test.dart
├── features
│ ├── .gitkeep
│ └── number_trivia
│ │ ├── data
│ │ ├── .gitkeep
│ │ ├── models
│ │ │ ├── .gitkeep
│ │ │ └── number_trivia_model_test.dart
│ │ ├── datasources
│ │ │ ├── .gitkeep
│ │ │ ├── number_trivia_local_data_source_test.dart
│ │ │ └── number_trivia_remote_data_source_test.dart
│ │ └── repositories
│ │ │ ├── .gitkeep
│ │ │ └── number_trivia_repository_impl_test.dart
│ │ ├── domain
│ │ ├── .gitkeep
│ │ ├── entities
│ │ │ └── .gitkeep
│ │ ├── usecases
│ │ │ ├── .gitkeep
│ │ │ ├── get_concrete_number_trivia_test.dart
│ │ │ └── get_random_number_trivia_test.dart
│ │ └── repositories
│ │ │ └── .gitkeep
│ │ └── presentation
│ │ ├── .gitkeep
│ │ ├── bloc
│ │ ├── .gitkeep
│ │ └── number_trivia_bloc_test.dart
│ │ ├── pages
│ │ └── .gitkeep
│ │ └── widgets
│ │ └── .gitkeep
└── fixtures
│ ├── trivia_cached.json
│ ├── trivia.json
│ ├── trivia_double.json
│ └── fixture_reader.dart
├── ios
├── Flutter
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ ├── flutter_export_environment.sh
│ └── 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
└── Runner.xcodeproj
│ ├── project.xcworkspace
│ └── contents.xcworkspacedata
│ ├── xcshareddata
│ └── xcschemes
│ │ └── Runner.xcscheme
│ └── project.pbxproj
├── 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
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── resocoder
│ │ │ │ │ └── clean_architecture_tdd_course
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ └── profile
│ │ │ └── AndroidManifest.xml
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── settings.gradle
└── build.gradle
├── architecture-proposal.png
├── .flutter-plugins-dependencies
├── .metadata
├── .vscode
└── launch.json
├── README.md
├── pubspec.yaml
├── .gitignore
└── pubspec.lock
/lib/core/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/core/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/core/error/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/core/usecases/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/core/error/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/core/usecases/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/data/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/domain/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/data/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/domain/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/data/models/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/presentation/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/data/models/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/data/datasources/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/data/repositories/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/domain/entities/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/domain/usecases/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/data/datasources/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/domain/entities/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/domain/usecases/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/presentation/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/domain/repositories/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/presentation/pages/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/presentation/widgets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/data/repositories/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/domain/repositories/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/presentation/bloc/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/presentation/pages/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test/features/number_trivia/presentation/widgets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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"
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 |
3 | android.enableR8=true
4 |
--------------------------------------------------------------------------------
/test/fixtures/trivia_cached.json:
--------------------------------------------------------------------------------
1 | {
2 | "text": "Test Text",
3 | "number": 1
4 | }
5 |
--------------------------------------------------------------------------------
/test/fixtures/trivia.json:
--------------------------------------------------------------------------------
1 | {
2 | "text": "Test Text",
3 | "number": 1,
4 | "found": true,
5 | "type": "trivia"
6 | }
7 |
--------------------------------------------------------------------------------
/architecture-proposal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-tdd-clean-architecture-course/HEAD/architecture-proposal.png
--------------------------------------------------------------------------------
/lib/core/error/exceptions.dart:
--------------------------------------------------------------------------------
1 | class ServerException implements Exception {}
2 |
3 | class CacheException implements Exception {}
4 |
--------------------------------------------------------------------------------
/test/fixtures/trivia_double.json:
--------------------------------------------------------------------------------
1 | {
2 | "text": "Test Text",
3 | "number": 1.0,
4 | "found": true,
5 | "type": "trivia"
6 | }
7 |
--------------------------------------------------------------------------------
/test/fixtures/fixture_reader.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | String fixture(String name) => File('test/fixtures/$name').readAsStringSync();
4 |
--------------------------------------------------------------------------------
/lib/features/number_trivia/presentation/bloc/bloc.dart:
--------------------------------------------------------------------------------
1 | export 'number_trivia_bloc.dart';
2 | export 'number_trivia_event.dart';
3 | export 'number_trivia_state.dart';
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/lib/features/number_trivia/presentation/widgets/widgets.dart:
--------------------------------------------------------------------------------
1 | export 'loading_widget.dart';
2 | export 'message_display.dart';
3 | export 'trivia_display.dart';
4 | export 'trivia_controls.dart';
5 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-tdd-clean-architecture-course/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-tdd-clean-architecture-course/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ResoCoder/flutter-tdd-clean-architecture-course/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/ResoCoder/flutter-tdd-clean-architecture-course/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/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-4.10.2-all.zip
7 |
--------------------------------------------------------------------------------
/lib/core/error/failures.dart:
--------------------------------------------------------------------------------
1 | import 'package:equatable/equatable.dart';
2 |
3 | abstract class Failure extends Equatable {
4 | @override
5 | List