├── assets ├── config │ ├── conf.json │ ├── services.json │ └── flavour │ │ ├── flavour_1 │ │ ├── dev_environment.json │ │ ├── prod_environment.json │ │ └── test_environment.json │ │ └── flavour_2 │ │ ├── dev_environment.json │ │ ├── prod_environment.json │ │ └── test_environment.json ├── images │ └── launcher │ │ └── flavour │ │ ├── flavour_1 │ │ └── launcher.png │ │ └── flavour_2 │ │ └── launcher.png └── l10n │ ├── intl_en.arb │ └── intl_es.arb ├── .fvm ├── flutter_sdk └── fvm_config.json ├── 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 │ │ ├── AppIcon-flavour_1.appiconset │ │ │ ├── AppIcon-flavour_1-20x20@1x.png │ │ │ ├── AppIcon-flavour_1-20x20@2x.png │ │ │ ├── AppIcon-flavour_1-20x20@3x.png │ │ │ ├── AppIcon-flavour_1-29x29@1x.png │ │ │ ├── AppIcon-flavour_1-29x29@2x.png │ │ │ ├── AppIcon-flavour_1-29x29@3x.png │ │ │ ├── AppIcon-flavour_1-40x40@1x.png │ │ │ ├── AppIcon-flavour_1-40x40@2x.png │ │ │ ├── AppIcon-flavour_1-40x40@3x.png │ │ │ ├── AppIcon-flavour_1-60x60@2x.png │ │ │ ├── AppIcon-flavour_1-60x60@3x.png │ │ │ ├── AppIcon-flavour_1-76x76@1x.png │ │ │ ├── AppIcon-flavour_1-76x76@2x.png │ │ │ ├── AppIcon-flavour_1-1024x1024@1x.png │ │ │ ├── AppIcon-flavour_1-83.5x83.5@2x.png │ │ │ └── Contents.json │ │ └── AppIcon-flavour_2.appiconset │ │ │ ├── AppIcon-flavour_2-20x20@1x.png │ │ │ ├── AppIcon-flavour_2-20x20@2x.png │ │ │ ├── AppIcon-flavour_2-20x20@3x.png │ │ │ ├── AppIcon-flavour_2-29x29@1x.png │ │ │ ├── AppIcon-flavour_2-29x29@2x.png │ │ │ ├── AppIcon-flavour_2-29x29@3x.png │ │ │ ├── AppIcon-flavour_2-40x40@1x.png │ │ │ ├── AppIcon-flavour_2-40x40@2x.png │ │ │ ├── AppIcon-flavour_2-40x40@3x.png │ │ │ ├── AppIcon-flavour_2-60x60@2x.png │ │ │ ├── AppIcon-flavour_2-60x60@3x.png │ │ │ ├── AppIcon-flavour_2-76x76@1x.png │ │ │ ├── AppIcon-flavour_2-76x76@2x.png │ │ │ ├── AppIcon-flavour_2-1024x1024@1x.png │ │ │ ├── AppIcon-flavour_2-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ └── Info.plist ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ └── project.pbxproj ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist └── .gitignore ├── lib └── src │ └── uy │ └── com │ └── vberazategui │ ├── shared │ ├── presentation │ │ ├── enums │ │ │ └── flavour.dart │ │ ├── base_bloc │ │ │ ├── bloc_state.dart │ │ │ ├── snackbar_state.dart │ │ │ └── base_bloc.dart │ │ ├── constants │ │ │ ├── color_pallete.dart │ │ │ └── text_styles.dart │ │ ├── routes │ │ │ ├── router.dart │ │ │ └── router.gr.dart │ │ ├── injection │ │ │ ├── injection.dart │ │ │ └── injection.config.dart │ │ ├── mixins │ │ │ └── validation_mixin.dart │ │ ├── theme │ │ │ ├── app_themes.dart │ │ │ ├── flavour_1_theme.dart │ │ │ └── flavour_2_theme.dart │ │ ├── flavour │ │ │ ├── flavour_1 │ │ │ │ ├── main.dev.dart │ │ │ │ ├── main.prod.dart │ │ │ │ └── main.test.dart │ │ │ └── flavour_2 │ │ │ │ ├── main.dev.dart │ │ │ │ ├── main.prod.dart │ │ │ │ └── main.test.dart │ │ ├── blocs │ │ │ └── configuration_bloc.dart │ │ ├── lang │ │ │ ├── intl │ │ │ │ ├── messages_en.dart │ │ │ │ ├── messages_es.dart │ │ │ │ └── messages_all.dart │ │ │ └── l10n.dart │ │ ├── main_common.dart │ │ └── assets │ │ │ └── assets.gen.dart │ ├── infrastructure │ │ ├── log │ │ │ └── log_injectable_module.dart │ │ ├── error │ │ │ └── exceptions.dart │ │ └── network │ │ │ ├── http_injectable_module.dart │ │ │ └── http_handle_error.dart │ ├── application │ │ └── usecases │ │ │ └── usecase.dart │ └── domain │ │ └── error │ │ └── failure.dart │ └── demo │ ├── domain │ ├── entities │ │ └── demo.dart │ └── repositories │ │ └── demo_repository.dart │ ├── infrastructure │ ├── dtos │ │ └── demo_dto.dart │ ├── datasources │ │ ├── demo_remote_data_source.dart │ │ └── demo_local_data_source.dart │ └── repositories │ │ └── demo_repository_impl.dart │ ├── application │ └── usecases │ │ ├── clear_cache_demo.dart │ │ ├── demo.dart │ │ ├── get_cached_demo.dart │ │ └── cache_demo.dart │ └── presentation │ ├── demo_page.dart │ └── blocs │ └── demo_page_bloc.dart ├── docs ├── CleanArchitecture.jpg └── Clean-Architecture-Flutter-Diagram.png ├── flutter_launcher_icons-flavour_1.yaml ├── flutter_launcher_icons-flavour_2.yaml ├── android ├── app │ ├── src │ │ ├── flavour_1 │ │ │ └── res │ │ │ │ ├── values │ │ │ │ └── strings.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ └── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ ├── flavour_2 │ │ │ └── res │ │ │ │ ├── values │ │ │ │ └── strings.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ └── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ ├── 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 │ │ │ │ └── uy │ │ │ │ │ └── com │ │ │ │ │ └── geocom │ │ │ │ │ └── flutter_ddd_skeleton │ │ │ │ │ └── MainActivity.kt │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ └── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle └── build.gradle ├── test_driver ├── features │ └── demo.feature ├── reporters │ ├── cucumber_report.json │ └── cucumber_report.html ├── lunch.json ├── index.js ├── flavour │ ├── flavour_1 │ │ └── app_dev.dart │ └── flavour_2 │ │ └── app_dev.dart ├── bdd_test.dart └── hooks.dart ├── .metadata ├── analysis_options.yaml ├── tools └── test.sh ├── .github └── FUNDING.yml ├── .gitignore ├── README.md ├── test └── widget_test.dart ├── makefile ├── pubspec.yaml └── pubspec.lock /assets/config/conf.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | } -------------------------------------------------------------------------------- /.fvm/flutter_sdk: -------------------------------------------------------------------------------- 1 | C:/Users/Vane/fvm/versions/stable -------------------------------------------------------------------------------- /assets/config/services.json: -------------------------------------------------------------------------------- 1 | { 2 | "demo_url": "" 3 | } -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.fvm/fvm_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "flutterSdkVersion": "stable", 3 | "flavors": {} 4 | } -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart: -------------------------------------------------------------------------------- 1 | enum Flavour { flavour_1, flavour_2 } 2 | -------------------------------------------------------------------------------- /docs/CleanArchitecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/docs/CleanArchitecture.jpg -------------------------------------------------------------------------------- /assets/config/flavour/flavour_1/dev_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "read_timeout": 30000, 3 | "backend_base_url": "http://localhost:8080" 4 | } -------------------------------------------------------------------------------- /assets/config/flavour/flavour_2/dev_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "read_timeout": 30000, 3 | "backend_base_url": "http://localhost:8080" 4 | } -------------------------------------------------------------------------------- /assets/config/flavour/flavour_1/prod_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "read_timeout": 30000, 3 | "backend_base_url": "http://localhost:8080" 4 | } -------------------------------------------------------------------------------- /assets/config/flavour/flavour_1/test_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "read_timeout": 30000, 3 | "backend_base_url": "http://localhost:8080" 4 | } -------------------------------------------------------------------------------- /assets/config/flavour/flavour_2/prod_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "read_timeout": 30000, 3 | "backend_base_url": "http://localhost:8080" 4 | } -------------------------------------------------------------------------------- /assets/config/flavour/flavour_2/test_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "read_timeout": 30000, 3 | "backend_base_url": "http://localhost:8080" 4 | } -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/base_bloc/bloc_state.dart: -------------------------------------------------------------------------------- 1 | /// Represents the state of the view 2 | enum BLoCState { idle, busy } 3 | -------------------------------------------------------------------------------- /docs/Clean-Architecture-Flutter-Diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/docs/Clean-Architecture-Flutter-Diagram.png -------------------------------------------------------------------------------- /flutter_launcher_icons-flavour_1.yaml: -------------------------------------------------------------------------------- 1 | flutter_icons: 2 | android: true 3 | ios: true 4 | image_path: 'assets/images/launcher/flavour/flavour_1/launcher.png' -------------------------------------------------------------------------------- /flutter_launcher_icons-flavour_2.yaml: -------------------------------------------------------------------------------- 1 | flutter_icons: 2 | android: true 3 | ios: true 4 | image_path: 'assets/images/launcher/flavour/flavour_2/launcher.png' -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/base_bloc/snackbar_state.dart: -------------------------------------------------------------------------------- 1 | /// Represents the state of the snackbar 2 | enum SnackBarState { info, error } 3 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/domain/entities/demo.dart: -------------------------------------------------------------------------------- 1 | class Demo { 2 | Demo({ 3 | required this.demoDetail, 4 | }); 5 | 6 | String demoDetail; 7 | } 8 | -------------------------------------------------------------------------------- /android/app/src/flavour_1/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Flavour_1 4 | -------------------------------------------------------------------------------- /android/app/src/flavour_2/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Flavour_2 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /assets/images/launcher/flavour/flavour_1/launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/assets/images/launcher/flavour/flavour_1/launcher.png -------------------------------------------------------------------------------- /assets/images/launcher/flavour/flavour_2/launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/assets/images/launcher/flavour/flavour_2/launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /test_driver/features/demo.feature: -------------------------------------------------------------------------------- 1 | # new feature 2 | # Tags: optional 3 | 4 | Feature: A description 5 | 6 | Scenario: A scenario 7 | Given I wait until the 'DemoRoute' is present -------------------------------------------------------------------------------- /android/app/src/flavour_1/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_1/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_1/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_1/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_1/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_1/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_2/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_2/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_2/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_2/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_2/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_2/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_1/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_1/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_1/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_1/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_2/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_2/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/flavour_2/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/android/app/src/flavour_2/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | org.gradle.java.home=C\:\\Program Files\\AdoptOpenJDK\\jdk-11.0.9.101-hotspot -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/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/Vanessa-Berazategui/flutter_ddd_skeleton/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 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/uy/com/geocom/flutter_ddd_skeleton/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package uy.com.geocom.flutter_ddd_skeleton 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-76x76@2x.png -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/constants/color_pallete.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | //// Theme Colors 4 | const kLightCarminePink = Color(0xffEA7070); 5 | const kMediumElectricBlue = Color(0xff074a94); 6 | -------------------------------------------------------------------------------- /test_driver/reporters/cucumber_report.json: -------------------------------------------------------------------------------- 1 | [{"description":"","id":"a description","keyword":"Feature","line":4,"name":"A description","uri":"C:\\Users\\vberazategui\\Documents\\GitRepository\\flutter_ddd_skeleton\\test_driver\\features\\demo.feature"}] -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/AppIcon-flavour_1-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Vanessa-Berazategui/flutter_ddd_skeleton/HEAD/ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/AppIcon-flavour_2-83.5x83.5@2x.png -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/constants/text_styles.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const TextStyle kBodyText1 = TextStyle( 4 | fontSize: 20, 5 | fontWeight: FontWeight.w900, 6 | letterSpacing: 0.07, 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-7.3-all.zip 7 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/src/uy/com/vberazategui/shared/infrastructure/log/log_injectable_module.dart: -------------------------------------------------------------------------------- 1 | import 'package:injectable/injectable.dart'; 2 | import 'package:logger/logger.dart'; 3 | 4 | @module 5 | abstract class LogInjectableModule { 6 | @injectable 7 | Logger get logger => Logger( 8 | printer: PrettyPrinter(), 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /.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: 18116933e77adc82f80866c928266a5b4f1ed645 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.yaml 2 | 3 | analyzer: 4 | strong-mode: 5 | implicit-casts: true 6 | implicit-dynamic: true 7 | exclude: [build/**, lib/**.config.dart, lib/**/routes/**.gr.dart, lib/**/lang/**, lib/**/assets/**, test/**] 8 | 9 | 10 | linter: 11 | rules: 12 | public_member_api_docs: false -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/application/usecases/usecase.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/domain/error/failure.dart'; 3 | 4 | // ignore: one_member_abstracts 5 | abstract class UseCase { 6 | Future> call(Params params); 7 | } 8 | 9 | class NoParams {} 10 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/routes/router.dart: -------------------------------------------------------------------------------- 1 | import 'package:auto_route/auto_route.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/presentation/demo_page.dart'; 3 | 4 | @MaterialAutoRouter( 5 | replaceInRouteName: 'Page,Route', 6 | routes: [ 7 | AutoRoute(path: '/', page: DemoPage), 8 | ], 9 | ) 10 | class $AppRouter {} 11 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/injection/injection.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.config.dart'; 2 | import 'package:get_it/get_it.dart'; 3 | import 'package:injectable/injectable.dart'; 4 | 5 | final GetIt getIt = GetIt.instance; 6 | 7 | @injectableInit 8 | void configureInjection() => $initGetIt(getIt); 9 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/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. -------------------------------------------------------------------------------- /test_driver/lunch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Flutter", 6 | "request": "launch", 7 | "type": "dart" 8 | }, 9 | { 10 | "name": "Debug Features Tests", 11 | "request": "launch", 12 | "type": "dart", 13 | "program": "test_driver/app_test.dart", 14 | "flutterMode": "debug" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/mixins/validation_mixin.dart: -------------------------------------------------------------------------------- 1 | mixin ValidationMixin { 2 | String? validateEmptinessStr(String? field) { 3 | if (field!.trim().isEmpty) { 4 | return ''; 5 | } else { 6 | return null; 7 | } 8 | } 9 | 10 | String? validateEmptinessInt(int? field) { 11 | if (field == null) { 12 | return ''; 13 | } else { 14 | return null; 15 | } 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/src/uy/com/vberazategui/shared/presentation/theme/app_themes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/theme/flavour_1_theme.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/theme/flavour_2_theme.dart'; 3 | 4 | enum AppTheme { flavour1Theme, flavour2Theme } 5 | 6 | final appThemeData = { 7 | AppTheme.flavour1Theme: Flavour1Theme.theme, 8 | AppTheme.flavour2Theme: Flavour2Theme.theme, 9 | }; 10 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/infrastructure/error/exceptions.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | 3 | class ServerException extends DioError { 4 | ServerException(this.message) 5 | : super( 6 | error: message, 7 | type: DioErrorType.response, 8 | requestOptions: RequestOptions(path: 'path'), 9 | ); 10 | 11 | @override 12 | final String message; 13 | 14 | @override 15 | String toString() => message; 16 | } 17 | 18 | class CacheException implements Exception {} 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 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 | -------------------------------------------------------------------------------- /tools/test.sh: -------------------------------------------------------------------------------- 1 | ## Testing options 2 | ### Running the app from test 3 | dart test_driver/bdd_test.dart (environment.dev) 4 | ### Running test remotely 5 | #### As you make changes in the app under test, just R (reload). In the test window you 6 | #### can rerun the tests and update the Scenarios quickly and easily. 7 | For the app -> flutter run --flavor flavour_1 -t lib/src/uy/com/vberazategui/shared/presentation/flavour/flavour_1/main.test.dart --verbose (copy 'Connecting to service protocol' URL) 8 | For the tests --> dart test_driver/bdd_test.dart http://127.0.0.1:63034/fPkqMbf3YVY=/ -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/domain/repositories/demo_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/entities/demo.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/domain/error/failure.dart'; 4 | 5 | abstract class DemoRepository { 6 | Future> cacheDemo(Demo demo); 7 | Future> getCachedDemo(); 8 | Future> clearCacheDemo(); 9 | Future> demoMethod(String demoDetail); 10 | } 11 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/theme/flavour_1_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/constants/color_pallete.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/constants/text_styles.dart'; 4 | 5 | class Flavour1Theme { 6 | static ThemeData get theme { 7 | return ThemeData( 8 | fontFamily: 'SourceSansPro', 9 | textTheme: const TextTheme( 10 | bodyText1: kBodyText1, 11 | ), 12 | brightness: Brightness.light, 13 | primaryColor: kMediumElectricBlue, 14 | ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/theme/flavour_2_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/constants/color_pallete.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/constants/text_styles.dart'; 4 | 5 | class Flavour2Theme { 6 | static ThemeData get theme { 7 | return ThemeData( 8 | fontFamily: 'SourceSansPro', 9 | textTheme: const TextTheme( 10 | bodyText1: kBodyText1, 11 | ), 12 | brightness: Brightness.light, 13 | primaryColor: kLightCarminePink, 14 | ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.4.32' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.0.3' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/infrastructure/dtos/demo_dto.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/entities/demo.dart'; 2 | 3 | class DemoDto extends Demo { 4 | DemoDto({ 5 | required String demoDetail, 6 | }) : super( 7 | demoDetail: demoDetail, 8 | ); 9 | 10 | factory DemoDto.fromJson(Map parsedJson) { 11 | return DemoDto( 12 | demoDetail: parsedJson['id'], 13 | ); 14 | } 15 | 16 | factory DemoDto.fromDomain(Demo entity) { 17 | return DemoDto( 18 | demoDetail: entity.demoDetail, 19 | ); 20 | } 21 | 22 | Map toJson() { 23 | return { 24 | 'demoDetail': demoDetail, 25 | }; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/infrastructure/network/http_injectable_module.dart: -------------------------------------------------------------------------------- 1 | import 'package:dio/dio.dart'; 2 | import 'package:global_configuration/global_configuration.dart'; 3 | import 'package:injectable/injectable.dart'; 4 | 5 | @module 6 | abstract class HttpInjectableModule { 7 | @injectable 8 | Dio get client { 9 | final client = Dio( 10 | BaseOptions( 11 | // It occurs when url is opened timeout. 12 | connectTimeout: GlobalConfiguration().get('read_timeout'), 13 | contentType: 'application/json; charset=utf-8', 14 | responseType: ResponseType.bytes, 15 | baseUrl: GlobalConfiguration().get('backend_base_url'), 16 | ), 17 | ); 18 | 19 | return client; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/application/usecases/clear_cache_demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/repositories/demo_repository.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/application/usecases/usecase.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/domain/error/failure.dart'; 5 | import 'package:injectable/injectable.dart'; 6 | 7 | @lazySingleton 8 | class ClearCacheDemo implements UseCase { 9 | ClearCacheDemo({required this.repository}); 10 | 11 | final DemoRepository repository; 12 | 13 | @override 14 | Future> call(NoParams params) async { 15 | return repository.clearCacheDemo(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/application/usecases/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/repositories/demo_repository.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/application/usecases/usecase.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/domain/error/failure.dart'; 5 | import 'package:injectable/injectable.dart'; 6 | 7 | @lazySingleton 8 | class Demo implements UseCase { 9 | Demo({required this.repository}); 10 | 11 | final DemoRepository repository; 12 | 13 | @override 14 | Future> call(Params params) async { 15 | return repository.demoMethod(params.demoDetail); 16 | } 17 | } 18 | 19 | class Params { 20 | Params({required this.demoDetail}); 21 | 22 | final String demoDetail; 23 | } 24 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/application/usecases/get_cached_demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/entities/demo.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/repositories/demo_repository.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/application/usecases/usecase.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/domain/error/failure.dart'; 6 | import 'package:injectable/injectable.dart'; 7 | 8 | @lazySingleton 9 | class GetCachedDemo implements UseCase { 10 | GetCachedDemo({required this.repository}); 11 | 12 | final DemoRepository repository; 13 | 14 | @override 15 | Future> call(NoParams params) async { 16 | return repository.getCachedDemo(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: vberazateguisilva 14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 15 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /assets/l10n/intl_en.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "en", 3 | "fb_tx_without_connection": "Without connection", 4 | "@fb_tx_without_connection": { 5 | "description": "Texto de notificación que indica error de conexión" 6 | }, 7 | "fb_tx_expired_time": "Expired time", 8 | "@fb_tx_expired_time": { 9 | "description": "Texto de notificación que indica tiempo expirado" 10 | }, 11 | "fb_tx_internal_server_error": "Internal server error", 12 | "@fb_tx_internal_server_error": { 13 | "description": "Texto de notificación para mostrar cuando el servidor no brinda un mensaje de respuesta" 14 | }, 15 | "fb_tx_unexpected_error": "An unexpected error has occurred", 16 | "@fb_tx_unexpected_error": { 17 | "description": "Texto de notificación de que ha ocurrido un error inesperado" 18 | }, 19 | "tx_demo": "Flutter DDD skeleton", 20 | "@tx_demo": { 21 | "description": "Texto del proyecto" 22 | } 23 | } -------------------------------------------------------------------------------- /assets/l10n/intl_es.arb: -------------------------------------------------------------------------------- 1 | { 2 | "@@locale": "es", 3 | "fb_tx_without_connection": "Sin conexion a Internet", 4 | "@fb_tx_without_connection": { 5 | "description": "Texto de notificación que indica error de conexión" 6 | }, 7 | "fb_tx_expired_time": "Tiempo expirado", 8 | "@fb_tx_expired_time": { 9 | "description": "Texto de notificación que indica tiempo expirado" 10 | }, 11 | "fb_tx_internal_server_error": "Error interno del servidor", 12 | "@fb_tx_internal_server_error": { 13 | "description": "Texto de notificación para mostrar cuando el servidor no brinda un mensaje de respuesta" 14 | }, 15 | "fb_tx_unexpected_error": "Ha ocurrido un error inesperado", 16 | "@fb_tx_unexpected_error": { 17 | "description": "Texto de notificación de que ha ocurrido un error inesperado" 18 | }, 19 | "tx_demo": "Flutter DDD esqueleto", 20 | "@tx_demo": { 21 | "description": "Texto del proyecto" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Android Studio will place build artifacts here 44 | /android/app/debug 45 | /android/app/profile 46 | /android/app/release 47 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/application/usecases/cache_demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:dartz/dartz.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/entities/demo.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/domain/repositories/demo_repository.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/application/usecases/usecase.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/domain/error/failure.dart'; 6 | import 'package:injectable/injectable.dart'; 7 | 8 | @lazySingleton 9 | class CacheDemo implements UseCase { 10 | CacheDemo({required this.repository}); 11 | 12 | final DemoRepository repository; 13 | 14 | @override 15 | Future> call(Params params) async { 16 | return repository.cacheDemo(params.user); 17 | } 18 | } 19 | 20 | class Params { 21 | Params({required this.user}); 22 | 23 | final Demo user; 24 | } 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # flutter_ddd_skeleton 2 | 3 | This is a Flutter project DDD skeleton, inspired by the amazing ResoCoder's tutorials: 4 | 5 | [Flutter TDD Clean Architecture](https://www.youtube.com/playlist?list=PLB6lc7nQ1n4iYGE_khpXRdJkJEp9WOech) 6 | [Flutter Firebase & DDD](https://www.youtube.com/playlist?list=PLB6lc7nQ1n4iS5p-IezFFgqP6YvAJy84U) 7 | 8 | ![](docs/CleanArchitecture.jpg) 9 | 10 | ![](docs/Clean-Architecture-Flutter-Diagram.png) 11 | 12 | Also in this ready to go DDD skeleton is configured: 13 | * Theming. 14 | * l10n and i18n. 15 | * Provider state management solution. 16 | * Either repository responses. 17 | * Dio client for http requests. 18 | * File flavour configuration. 19 | * File environment configuration. 20 | * Getit injection dependencies. 21 | * Auto-route route solution. 22 | * Flutter code generator for your asset. 23 | * Flutter gherkin integration test. 24 | * FVM configuration. 25 | * Makefile for useful commands. 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/flavour/flavour_1/main.dev.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 6 | import 'package:global_configuration/global_configuration.dart'; 7 | import 'package:logger/logger.dart'; 8 | 9 | Future main() async { 10 | //! Init flutter Biding 11 | WidgetsFlutterBinding.ensureInitialized(); 12 | 13 | //! Load log level 14 | Logger.level = Level.verbose; 15 | 16 | //! Load environment conf 17 | await GlobalConfiguration() 18 | .loadFromPath(Assets.config.flavour.flavour1.devEnvironment); 19 | 20 | //! Load dependencies injections 21 | configureInjection(); 22 | 23 | await mainCommon(Flavour.flavour_1); 24 | } 25 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/flavour/flavour_1/main.prod.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 6 | import 'package:global_configuration/global_configuration.dart'; 7 | import 'package:logger/logger.dart'; 8 | 9 | Future main() async { 10 | //! Init flutter Biding 11 | WidgetsFlutterBinding.ensureInitialized(); 12 | 13 | //! Load log level 14 | Logger.level = Level.error; 15 | 16 | //! Load environment conf 17 | await GlobalConfiguration() 18 | .loadFromPath(Assets.config.flavour.flavour1.prodEnvironment); 19 | 20 | //! Load dependencies injections 21 | configureInjection(); 22 | 23 | await mainCommon(Flavour.flavour_1); 24 | } 25 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/flavour/flavour_2/main.dev.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 6 | import 'package:global_configuration/global_configuration.dart'; 7 | import 'package:logger/logger.dart'; 8 | 9 | Future main() async { 10 | //! Init flutter Biding 11 | WidgetsFlutterBinding.ensureInitialized(); 12 | 13 | //! Load log level 14 | Logger.level = Level.verbose; 15 | 16 | //! Load environment conf 17 | await GlobalConfiguration() 18 | .loadFromPath(Assets.config.flavour.flavour2.devEnvironment); 19 | 20 | //! Load dependencies injections 21 | configureInjection(); 22 | 23 | await mainCommon(Flavour.flavour_2); 24 | } 25 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/flavour/flavour_2/main.prod.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 6 | import 'package:global_configuration/global_configuration.dart'; 7 | import 'package:logger/logger.dart'; 8 | 9 | Future main() async { 10 | //! Init flutter Biding 11 | WidgetsFlutterBinding.ensureInitialized(); 12 | 13 | //! Load log level 14 | Logger.level = Level.error; 15 | 16 | //! Load environment conf 17 | await GlobalConfiguration() 18 | .loadFromPath(Assets.config.flavour.flavour2.prodEnvironment); 19 | 20 | //! Load dependencies injections 21 | configureInjection(); 22 | 23 | await mainCommon(Flavour.flavour_2); 24 | } 25 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/base_bloc/base_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/base_bloc/bloc_state.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/base_bloc/snackbar_state.dart'; 4 | 5 | class BaseBLoC extends ChangeNotifier { 6 | BLoCState _state = BLoCState.idle; 7 | late String _snackBarMessage; 8 | SnackBarState _snackBarState = SnackBarState.info; 9 | 10 | // ignore: unnecessary_getters_setters 11 | BLoCState get state => _state; 12 | String get snackBarMessage => _snackBarMessage; 13 | SnackBarState get snackBarState => _snackBarState; 14 | 15 | // ignore: unnecessary_getters_setters 16 | set state(BLoCState value) { 17 | _state = value; 18 | } 19 | 20 | void setNotify(BLoCState viewState) { 21 | _state = viewState; 22 | notifyListeners(); 23 | } 24 | 25 | void setMessage(SnackBarState snackBarState, String message) { 26 | _snackBarState = snackBarState; 27 | _snackBarMessage = message; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /test_driver/index.js: -------------------------------------------------------------------------------- 1 | var reporter = require('cucumber-html-reporter'); 2 | 3 | var options = { 4 | theme: 'bootstrap', 5 | jsonFile: 'test_driver/reporters/cucumber_report.json', 6 | output: 'test_driver/reporters/cucumber_report.html', 7 | reportSuiteAsScenarios: true, 8 | scenarioTimestamp: true, 9 | launchReport: true, 10 | name: "flutter_ddd_skeleton", 11 | brandTitle: "Integration tests", 12 | storeScreenshots: true, 13 | scenarioTimestamp: true, 14 | metadata: { 15 | "App Version":"0.3.2", 16 | "Test Environment": "TESTING", 17 | "Browser": "Chrome 94.0.4606.54", 18 | "Platform": "Windows 10", 19 | "Parallel": "Scenarios", 20 | "Executed": "Remote", 21 | } 22 | }; 23 | 24 | reporter.generate(options); 25 | 26 | 27 | //more info on `metadata` is available in `options` section below. 28 | 29 | //to generate consodilated report from multi-cucumber JSON files, please use `jsonDir` option instead of `jsonFile`. More info is available in `options` section below. -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:flutter_ddd_skeleton/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /test_driver/flavour/flavour_1/app_dev.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 5 | import 'package:flutter_driver/driver_extension.dart'; 6 | import 'package:global_configuration/global_configuration.dart'; 7 | import 'package:logger/logger.dart'; 8 | 9 | Future main() async { 10 | // This line enables the extension 11 | enableFlutterDriverExtension(); 12 | 13 | //! Load log level 14 | Logger.level = Level.verbose; 15 | 16 | //! Load environment conf 17 | await GlobalConfiguration() 18 | .loadFromPath(Assets.config.flavour.flavour1.devEnvironment); 19 | 20 | //! Load dependencies injections 21 | configureInjection(); 22 | 23 | // Call the `main()` function of your app or call `runApp` with any widget you 24 | // are interested in testing. 25 | await mainCommon(Flavour.flavour_1); 26 | } 27 | -------------------------------------------------------------------------------- /test_driver/flavour/flavour_2/app_dev.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 5 | import 'package:flutter_driver/driver_extension.dart'; 6 | import 'package:global_configuration/global_configuration.dart'; 7 | import 'package:logger/logger.dart'; 8 | 9 | Future main() async { 10 | // This line enables the extension 11 | enableFlutterDriverExtension(); 12 | 13 | //! Load log level 14 | Logger.level = Level.verbose; 15 | 16 | //! Load environment conf 17 | await GlobalConfiguration() 18 | .loadFromPath(Assets.config.flavour.flavour2.devEnvironment); 19 | 20 | //! Load dependencies injections 21 | configureInjection(); 22 | 23 | // Call the `main()` function of your app or call `runApp` with any widget you 24 | // are interested in testing. 25 | await mainCommon(Flavour.flavour_2); 26 | } 27 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/routes/router.gr.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | // ************************************************************************** 4 | // AutoRouteGenerator 5 | // ************************************************************************** 6 | 7 | import 'package:auto_route/auto_route.dart' as _i2; 8 | import 'package:flutter/material.dart' as _i3; 9 | 10 | import '../../../demo/presentation/demo_page.dart' as _i1; 11 | 12 | class AppRouter extends _i2.RootStackRouter { 13 | AppRouter([_i3.GlobalKey<_i3.NavigatorState>? navigatorKey]) 14 | : super(navigatorKey); 15 | 16 | @override 17 | final Map pagesMap = { 18 | DemoRoute.name: (routeData) { 19 | return _i2.MaterialPageX( 20 | routeData: routeData, child: _i1.DemoPage()); 21 | } 22 | }; 23 | 24 | @override 25 | List<_i2.RouteConfig> get routes => 26 | [_i2.RouteConfig(DemoRoute.name, path: '/')]; 27 | } 28 | 29 | /// generated route for [_i1.DemoPage] 30 | class DemoRoute extends _i2.PageRouteInfo { 31 | const DemoRoute() : super(name, path: '/'); 32 | 33 | static const String name = 'DemoRoute'; 34 | } 35 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/flavour/flavour_1/main.test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 6 | import 'package:flutter_driver/driver_extension.dart'; 7 | import 'package:global_configuration/global_configuration.dart'; 8 | import 'package:logger/logger.dart'; 9 | 10 | Future main() async { 11 | //! Enable remote testing 12 | enableFlutterDriverExtension(); 13 | 14 | //! Init flutter Biding 15 | WidgetsFlutterBinding.ensureInitialized(); 16 | 17 | //! Load log level 18 | Logger.level = Level.info; 19 | 20 | //! Load environment conf 21 | await GlobalConfiguration() 22 | .loadFromPath(Assets.config.flavour.flavour1.testEnvironment); 23 | 24 | //! Load dependencies injections 25 | configureInjection(); 26 | 27 | await mainCommon(Flavour.flavour_1); 28 | } 29 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/flavour/flavour_2/main.test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/assets/assets.gen.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/main_common.dart'; 6 | import 'package:flutter_driver/driver_extension.dart'; 7 | import 'package:global_configuration/global_configuration.dart'; 8 | import 'package:logger/logger.dart'; 9 | 10 | Future main() async { 11 | //! Enable remote testing 12 | enableFlutterDriverExtension(); 13 | 14 | //! Init flutter Biding 15 | WidgetsFlutterBinding.ensureInitialized(); 16 | 17 | //! Load log level 18 | Logger.level = Level.info; 19 | 20 | //! Load environment conf 21 | await GlobalConfiguration() 22 | .loadFromPath(Assets.config.flavour.flavour2.testEnvironment); 23 | 24 | //! Load dependencies injections 25 | configureInjection(); 26 | 27 | await mainCommon(Flavour.flavour_2); 28 | } 29 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/infrastructure/network/http_handle_error.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/domain/error/failure.dart'; 5 | import 'package:injectable/injectable.dart'; 6 | 7 | @lazySingleton 8 | class HttpHandleError { 9 | Failure getFailure(DioError e) { 10 | switch (e.type) { 11 | 12 | /// When opening url timeout, it occurs. 13 | case DioErrorType.connectTimeout: 14 | return ConnectTimeOutFailure(); 15 | 16 | /// It occurs when receiving timeout. 17 | case DioErrorType.receiveTimeout: 18 | return ReceiveTimeOutFailure(); 19 | 20 | /// When the server response, 21 | /// but with a incorrect status, such as 404, 503... 22 | case DioErrorType.response: 23 | Map parsedJson; 24 | e.response != null 25 | ? parsedJson = json.decode(utf8.decode(e.response!.data)) 26 | : parsedJson = {}; 27 | return ServerFailure(parsedJson['message']); 28 | 29 | /// Default error type, Some other Error. In this case, you can 30 | /// read the DioError.error if it is not null. 31 | // case DioErrorType.DEFAULT: 32 | default: 33 | return NoInternetFailure(); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /test_driver/bdd_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_gherkin/flutter_gherkin.dart'; 2 | import 'package:gherkin/gherkin.dart'; 3 | import 'package:glob/glob.dart'; 4 | 5 | import 'hooks.dart'; 6 | 7 | Future main(List args) { 8 | final config = FlutterTestConfiguration() 9 | // ignore: unnecessary_raw_strings 10 | ..features = [Glob(r'test_driver/features/**.feature')] 11 | ..reporters = [ 12 | StdoutReporter(), 13 | FlutterDriverReporter(), 14 | ProgressReporter(), 15 | TestRunSummaryReporter(), 16 | JsonReporter(path: './test_driver/reporters/cucumber_report.json') 17 | ] 18 | ..hooks = [Hooks(), AttachScreenshotOnFailedStepHook()] 19 | ..stepDefinitions = [] 20 | ..customStepParameterDefinitions = [] 21 | ..restartAppBetweenScenarios = false 22 | ..targetAppPath = 'test_driver/flavour/flavour_1/app_dev.dart' 23 | ..order = ExecutionOrder.sequential 24 | // uncomment to see an example of running scenarios based on tag expressions 25 | //'@supervisor_background' '@cashier_background' '@supervisor' '@cashier' 26 | ..tagExpression = '@test' 27 | ..logFlutterProcessOutput = true 28 | ..flutterBuildTimeout = const Duration(minutes: 10); 29 | 30 | if (args.isNotEmpty) config.runningAppProtocolEndpointUri = args[0]; 31 | 32 | return GherkinRunner().execute(config); 33 | } 34 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/infrastructure/datasources/demo_remote_data_source.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/infrastructure/error/exceptions.dart'; 5 | import 'package:global_configuration/global_configuration.dart'; 6 | import 'package:injectable/injectable.dart'; 7 | 8 | // ignore: one_member_abstracts 9 | abstract class DemoRemoteDataSource { 10 | Future demoMethod(String demoDetail); 11 | } 12 | 13 | @LazySingleton(as: DemoRemoteDataSource) 14 | class DemoRemoteDataSourceImpl implements DemoRemoteDataSource { 15 | DemoRemoteDataSourceImpl({required this.client}); 16 | 17 | final Dio client; 18 | final _demoUrl = GlobalConfiguration().get('demo_url'); 19 | 20 | @override 21 | Future demoMethod(String demoDetail) async { 22 | final url = '$_demoUrl' 23 | .replaceFirst('{demoDetail}', Uri.encodeComponent(demoDetail)); 24 | 25 | final response = await client.post(url); 26 | 27 | final parsedJson = 28 | response.data.isEmpty ? null : json.decode(utf8.decode(response.data)); 29 | 30 | if (response.statusCode != 200) { 31 | if (parsedJson != null) { 32 | throw ServerException(parsedJson['message']); 33 | } else { 34 | throw ServerException('No hay iformación con los datos ingresados'); 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/infrastructure/datasources/demo_local_data_source.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/infrastructure/dtos/demo_dto.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/infrastructure/error/exceptions.dart'; 5 | import 'package:injectable/injectable.dart'; 6 | import 'package:shared_preferences/shared_preferences.dart'; 7 | 8 | // Values stored in phone's memory. 9 | const cachedDemo = 'CACHED_DEMO'; 10 | 11 | abstract class DemoLocalDataSource { 12 | Future cacheDemo(DemoDto demoDto); 13 | Future getCachedDemo(); 14 | Future clearCacheDemo(); 15 | } 16 | 17 | @LazySingleton(as: DemoLocalDataSource) 18 | class DemoLocalDataSourceImpl implements DemoLocalDataSource { 19 | @override 20 | Future cacheDemo(DemoDto userDto) async { 21 | final cache = await SharedPreferences.getInstance(); 22 | 23 | await cache.setString( 24 | cachedDemo, 25 | json.encode(userDto.toJson()), 26 | ); 27 | } 28 | 29 | @override 30 | Future getCachedDemo() async { 31 | final cache = await SharedPreferences.getInstance(); 32 | 33 | final jsonString = cache.getString(cachedDemo); 34 | 35 | if (jsonString != null) { 36 | return DemoDto.fromJson(json.decode(jsonString)); 37 | } else { 38 | throw CacheException(); 39 | } 40 | } 41 | 42 | @override 43 | Future clearCacheDemo() async { 44 | final cache = await SharedPreferences.getInstance(); 45 | 46 | await cache.remove(cachedDemo); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/blocs/configuration_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/enums/flavour.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/theme/app_themes.dart'; 4 | import 'package:injectable/injectable.dart'; 5 | 6 | // Global BLoC for controlling the state of configuration 7 | @lazySingleton 8 | class ConfigurationBLoC with ChangeNotifier { 9 | ConfigurationBLoC({required Flavour flavour}) { 10 | switch (flavour) { 11 | case Flavour.flavour_1: 12 | _flavourTheme = AppTheme.flavour1Theme; 13 | break; 14 | case Flavour.flavour_2: 15 | _flavourTheme = AppTheme.flavour2Theme; 16 | break; 17 | } 18 | 19 | _flavour = flavour; 20 | _flavourThemeData = appThemeData[_flavourTheme]!; 21 | } 22 | 23 | late ThemeData _flavourThemeData; 24 | late AppTheme _flavourTheme; 25 | late Flavour _flavour; 26 | 27 | ThemeData get flavourThemeData => _flavourThemeData; 28 | AppTheme get flavourTheme => _flavourTheme; 29 | Flavour get flavour => _flavour; 30 | 31 | Future toggleAppTheme() async { 32 | switch (_flavourTheme) { 33 | case AppTheme.flavour1Theme: 34 | _flavourTheme = AppTheme.flavour2Theme; 35 | _flavourThemeData = appThemeData[_flavourTheme]!; 36 | break; 37 | case AppTheme.flavour2Theme: 38 | _flavourTheme = AppTheme.flavour1Theme; 39 | _flavourThemeData = appThemeData[_flavourTheme]!; 40 | break; 41 | } 42 | notifyListeners(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | flutter_ddd_skeleton 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/presentation/demo_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/presentation/blocs/demo_page_bloc.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/injection/injection.dart'; 4 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/lang/l10n.dart'; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/routes/router.gr.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class DemoPage extends StatefulWidget { 9 | const DemoPage() : super(key: const ValueKey(DemoRoute.name)); 10 | 11 | @override 12 | // ignore: library_private_types_in_public_api 13 | _DemoPageState createState() => _DemoPageState(); 14 | } 15 | 16 | class _DemoPageState extends State { 17 | final _bloc = getIt(); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | final body = SafeArea( 22 | child: ChangeNotifierProvider( 23 | create: (context) => _bloc, 24 | child: Consumer( 25 | builder: (context, bloc, child) => Center( 26 | child: Text( 27 | AppLocalizations.of(context).tx_demo, 28 | style: Theme.of(context).textTheme.bodyText1!.copyWith( 29 | color: Theme.of(context).primaryColor, 30 | ), 31 | ), 32 | ), 33 | ), 34 | ), 35 | ); 36 | 37 | return Scaffold( 38 | resizeToAvoidBottomInset: false, 39 | body: Builder( 40 | builder: (BuildContext context) { 41 | return body; 42 | }, 43 | ), 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_1.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | {"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-flavour_1-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-flavour_1-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-flavour_1-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-flavour_1-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-flavour_1-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-flavour_1-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-flavour_1-40x40@3x.png","scale":"3x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-flavour_1-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-flavour_1-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-flavour_1-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-flavour_1-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-flavour_1-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-flavour_1-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-flavour_1-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-flavour_1-40x40@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-flavour_1-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-flavour_1-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-flavour_1-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-flavour_1-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon-flavour_2.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | {"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-flavour_2-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-flavour_2-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-flavour_2-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-flavour_2-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-flavour_2-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-flavour_2-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-flavour_2-40x40@3x.png","scale":"3x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-flavour_2-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-flavour_2-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-flavour_2-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-flavour_2-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-flavour_2-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-flavour_2-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-flavour_2-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-flavour_2-40x40@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-flavour_2-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-flavour_2-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-flavour_2-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-flavour_2-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/lang/intl/messages_en.dart: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart 2 | // This is a library that provides messages for a en locale. All the 3 | // messages from the main program should be duplicated here with the same 4 | // function name. 5 | 6 | // Ignore issues from commonly used lints in this file. 7 | // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new 8 | // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering 9 | // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases 10 | // ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes 11 | // ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes 12 | 13 | import 'package:intl/intl.dart'; 14 | import 'package:intl/message_lookup_by_library.dart'; 15 | 16 | final messages = new MessageLookup(); 17 | 18 | typedef String MessageIfAbsent(String messageStr, List args); 19 | 20 | class MessageLookup extends MessageLookupByLibrary { 21 | String get localeName => 'en'; 22 | 23 | final messages = _notInlinedMessages(_notInlinedMessages); 24 | static Map _notInlinedMessages(_) => { 25 | "fb_tx_expired_time": 26 | MessageLookupByLibrary.simpleMessage("Expired time"), 27 | "fb_tx_internal_server_error": 28 | MessageLookupByLibrary.simpleMessage("Internal server error"), 29 | "fb_tx_unexpected_error": MessageLookupByLibrary.simpleMessage( 30 | "An unexpected error has occurred"), 31 | "fb_tx_without_connection": 32 | MessageLookupByLibrary.simpleMessage("Without connection"), 33 | "tx_demo": MessageLookupByLibrary.simpleMessage("Flutter DDD skeleton") 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/presentation/lang/intl/messages_es.dart: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart 2 | // This is a library that provides messages for a es locale. All the 3 | // messages from the main program should be duplicated here with the same 4 | // function name. 5 | 6 | // Ignore issues from commonly used lints in this file. 7 | // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new 8 | // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering 9 | // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases 10 | // ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes 11 | // ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes 12 | 13 | import 'package:intl/intl.dart'; 14 | import 'package:intl/message_lookup_by_library.dart'; 15 | 16 | final messages = new MessageLookup(); 17 | 18 | typedef String MessageIfAbsent(String messageStr, List args); 19 | 20 | class MessageLookup extends MessageLookupByLibrary { 21 | String get localeName => 'es'; 22 | 23 | final messages = _notInlinedMessages(_notInlinedMessages); 24 | static Map _notInlinedMessages(_) => { 25 | "fb_tx_expired_time": 26 | MessageLookupByLibrary.simpleMessage("Tiempo expirado"), 27 | "fb_tx_internal_server_error": 28 | MessageLookupByLibrary.simpleMessage("Error interno del servidor"), 29 | "fb_tx_unexpected_error": MessageLookupByLibrary.simpleMessage( 30 | "Ha ocurrido un error inesperado"), 31 | "fb_tx_without_connection": 32 | MessageLookupByLibrary.simpleMessage("Sin conexion a Internet"), 33 | "tx_demo": MessageLookupByLibrary.simpleMessage("Flutter DDD esqueleto") 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/shared/domain/error/failure.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/lang/l10n.dart'; 2 | 3 | class Failure { 4 | Failure({String? message, String? prefix, String? emoji}) 5 | : _message = message, 6 | _prefix = prefix, 7 | _emoji = emoji; 8 | 9 | String? _message; 10 | String? _prefix; 11 | String? _emoji; 12 | 13 | // ignore: avoid_setters_without_getters 14 | set message(String? value) { 15 | _message = value; 16 | } 17 | 18 | // ignore: avoid_setters_without_getters 19 | set prefix(String? value) { 20 | _prefix = value; 21 | } 22 | 23 | // ignore: avoid_setters_without_getters 24 | set emoji(String? value) { 25 | _emoji = value; 26 | } 27 | 28 | @override 29 | String toString() => (_prefix ?? '') + (_message ?? '') + (_emoji ?? ''); 30 | } 31 | 32 | class NoInternetFailure extends Failure { 33 | NoInternetFailure() 34 | : super(message: AppLocalizations.current.fb_tx_without_connection); 35 | } 36 | 37 | class ReceiveTimeOutFailure extends Failure { 38 | ReceiveTimeOutFailure() 39 | : super(message: AppLocalizations.current.fb_tx_expired_time); 40 | } 41 | 42 | class ConnectTimeOutFailure extends Failure { 43 | ConnectTimeOutFailure() 44 | : super(message: AppLocalizations.current.fb_tx_expired_time); 45 | } 46 | 47 | class ServerFailure extends Failure { 48 | ServerFailure(String message) 49 | : super( 50 | message: message.isEmpty 51 | ? AppLocalizations.current.fb_tx_internal_server_error 52 | : message, 53 | ); 54 | } 55 | 56 | class CacheFailure extends Failure {} 57 | 58 | class UnexpectedFailure extends Failure { 59 | UnexpectedFailure() 60 | : super(message: AppLocalizations.current.fb_tx_unexpected_error); 61 | } 62 | -------------------------------------------------------------------------------- /lib/src/uy/com/vberazategui/demo/presentation/blocs/demo_page_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/application/usecases/cache_demo.dart'; 2 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/application/usecases/clear_cache_demo.dart'; 3 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/application/usecases/demo.dart' 4 | as d_uc; 5 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/demo/application/usecases/get_cached_demo.dart'; 6 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/base_bloc/base_bloc.dart'; 7 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/base_bloc/bloc_state.dart'; 8 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/base_bloc/snackbar_state.dart'; 9 | import 'package:flutter_ddd_skeleton/src/uy/com/vberazategui/shared/presentation/mixins/validation_mixin.dart'; 10 | import 'package:injectable/injectable.dart'; 11 | 12 | @injectable 13 | class DemoPageBLoC extends BaseBLoC with ValidationMixin { 14 | DemoPageBLoC({ 15 | required this.demoUseCase, 16 | required this.cacheDemoUseCase, 17 | required this.getCachedDemoUseCase, 18 | required this.clearCacheDemoUseCase, 19 | }); 20 | 21 | final d_uc.Demo demoUseCase; 22 | final CacheDemo cacheDemoUseCase; 23 | final GetCachedDemo getCachedDemoUseCase; 24 | final ClearCacheDemo clearCacheDemoUseCase; 25 | 26 | Future demo() async { 27 | setNotify(BLoCState.busy); 28 | 29 | final result = await demoUseCase.call(d_uc.Params(demoDetail: 'something')); 30 | 31 | result.fold( 32 | (failure) => setMessage(SnackBarState.error, failure.toString()), 33 | (value) => setMessage(SnackBarState.info, ''), 34 | ); 35 | 36 | setNotify(BLoCState.idle); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | .PHONY: clean, get, generate, regenerate, format, lint, fix, icon, splash, intl, sign, build-apk, report 2 | 3 | clean: ## Cleans the environment 4 | @echo "╠ Cleaning the project..." 5 | @fvm flutter clean 6 | 7 | get: ## Get project dependencies 8 | @echo "╠ Get dependencies" 9 | @fvm flutter pub get 10 | 11 | generate: ## Generates autogenerated code 12 | @echo "╠ Generating code" 13 | @fvm flutter pub run build_runner build 14 | 15 | regenerate: ## Regenerates autogenerated code 16 | @echo "╠ Re-generating code" 17 | @fvm flutter pub run build_runner build --delete-conflicting-outputs 18 | 19 | format: ## Formats the code 20 | @echo "╠ Formatting the code" 21 | dart format . 22 | 23 | lint: ## Lints the code 24 | @echo "╠ Verifying code..." 25 | @fvm flutter analyze . || (echo "Error in project"; exit 1) 26 | 27 | fix: ## Fix the code 28 | @echo "╠ Fixing the code" 29 | dart fix --apply . 30 | 31 | icon: ## Generates launcher icon 32 | @echo "╠ Making launcher icon" 33 | @fvm flutter pub run flutter_launcher_icons -f flutter_launcher_icons* 34 | 35 | splash: ## Generates native splash 36 | @echo "╠ Making native splash" 37 | @fvm flutter pub run flutter_native_splash:create 38 | 39 | intl: 40 | flutter pub run intl_utils:generate 41 | 42 | sign: ## Sign apk 43 | @echo "╠ Signing apk..." 44 | keytool -genkey -v -keystore key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key 45 | 46 | build-apk: ## Build mobile application 47 | @echo "╠ Building mobile application" 48 | @fvm flutter build apk --release --flavor $(flavour) -t lib/shared/presentation/flavour/flavour_1/main.dev.dart --shrink --obfuscate --split-debug-info=./obfuscatation/debug 49 | 50 | 51 | report: ## Generate test report 52 | @echo "╠ Installing cucumber-html-reporter..." 53 | npm install cucumber-html-reporter --save-dev 54 | 55 | @echo "╠ Generating reporter..." 56 | node test_driver/index.js 57 | 58 | -------------------------------------------------------------------------------- /test_driver/hooks.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_print 2 | 3 | import 'package:gherkin/gherkin.dart'; 4 | 5 | class Hooks extends Hook { 6 | /// The priority to assign to this hook. 7 | /// Higher priority gets run first so a priority of 10 is run before 8 | /// a priority of 2 9 | @override 10 | int get priority => 1; 11 | 12 | /// Run before any scenario in a test run have executed 13 | @override 14 | Future onBeforeRun(TestConfiguration config) async => 15 | print('------------ Before run hook ------------'); 16 | 17 | /// Run after all scenarios in a test run have completed 18 | @override 19 | Future onAfterRun(TestConfiguration config) async => 20 | print('------------ After run hook ------------'); 21 | 22 | /// Run after the scenario world is created but run before a scenario 23 | /// and its steps are executed 24 | /// Might not be invoked if there is not a world object 25 | @override 26 | Future onAfterScenarioWorldCreated( 27 | World world, 28 | String scenario, 29 | Iterable tags, 30 | ) async => 31 | print("------------ After scenario world created' ------------"); 32 | 33 | /// Run before a scenario and it steps are executed 34 | @override 35 | Future onBeforeScenario( 36 | TestConfiguration config, 37 | String scenario, 38 | Iterable tags, 39 | ) async => 40 | print( 41 | "------------ Running hook before scenario '$scenario' ------------"); 42 | 43 | /// Run after a scenario has executed 44 | @override 45 | Future onAfterScenario( 46 | TestConfiguration config, 47 | String scenario, 48 | Iterable tags, 49 | ) async => 50 | print("------------ Running hook after scenario '$scenario'------------"); 51 | 52 | /// Run before a step is executed 53 | @override 54 | Future onBeforeStep(World world, String step) => Future.value(null); 55 | 56 | /// Run after a step has executed 57 | @override 58 | Future onAfterStep( 59 | World world, String step, StepResult stepResult) async { 60 | if (stepResult.result == StepExecutionResult.fail) { 61 | world 62 | ..attach('Step execution result.', 'text/plain') 63 | ..attach(stepResult.resultReason!, 'application/json'); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 13 | 17 | 21 | 26 | 30 | 31 | 32 | 33 | 34 | 35 | 37 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_ddd_skeleton 2 | description: A new Flutter application for DDD architecture skeleton. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `flutter pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | version: 1.0.0+1 9 | 10 | environment: 11 | sdk: ">=2.12.0 <3.0.0" 12 | 13 | dependencies: 14 | async: ^2.8.1 15 | auto_route: ^2.3.2 16 | cupertino_icons: ^1.0.4 17 | dartz: ^0.10.0 18 | dio: ^4.0.3 19 | flash: ^2.0.3 20 | flutter: 21 | sdk: flutter 22 | flutter_gherkin: ^2.0.0 23 | flutter_localizations: 24 | sdk: flutter 25 | flutter_svg: ^0.23.0+1 26 | get_it: ^7.2.0 27 | global_configuration: ^2.0.0-nullsafety.1 28 | injectable: ^1.5.0 29 | logger: ^1.1.0 30 | path_provider: ^2.0.7 31 | provider: ^6.0.1 32 | rxdart: ^0.27.2 33 | shared_preferences: ^2.0.9 34 | 35 | dev_dependencies: 36 | auto_route_generator: ^2.3.2 37 | build_runner: ^2.1.5 38 | flutter_driver: # ui test 39 | sdk: flutter 40 | flutter_gen_runner: ^4.1.2 41 | flutter_launcher_icons: ^0.9.2 42 | flutter_test: 43 | sdk: flutter 44 | injectable_generator: ^1.5.2 45 | test: any 46 | very_good_analysis: ^2.4.0 47 | 48 | flutter: 49 | uses-material-design: true 50 | 51 | assets: 52 | # Config 53 | - assets/config/ 54 | - assets/config/flavour/flavour_1/ 55 | - assets/config/flavour/flavour_2/ 56 | 57 | # Images 58 | - assets/images/launcher/ 59 | 60 | flutter_intl: 61 | enabled: true 62 | # Optional 63 | # Default: es 64 | # [_ 426 | 427 | 428 | 429 | 452 | 562 | 563 | 564 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 97 | ); 98 | path = Runner; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 97C146ED1CF9000F007C117D /* Runner */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 107 | buildPhases = ( 108 | 9740EEB61CF901F6004384FC /* Run Script */, 109 | 97C146EA1CF9000F007C117D /* Sources */, 110 | 97C146EB1CF9000F007C117D /* Frameworks */, 111 | 97C146EC1CF9000F007C117D /* Resources */, 112 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = Runner; 120 | productName = Runner; 121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 122 | productType = "com.apple.product-type.application"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 97C146E61CF9000F007C117D /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastUpgradeCheck = 1020; 131 | ORGANIZATIONNAME = ""; 132 | TargetAttributes = { 133 | 97C146ED1CF9000F007C117D = { 134 | CreatedOnToolsVersion = 7.3.1; 135 | LastSwiftMigration = 1100; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 140 | compatibilityVersion = "Xcode 9.3"; 141 | developmentRegion = en; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = 97C146E51CF9000F007C117D; 148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | 97C146ED1CF9000F007C117D /* Runner */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | 97C146EC1CF9000F007C117D /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | ); 179 | name = "Thin Binary"; 180 | outputPaths = ( 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 185 | }; 186 | 9740EEB61CF901F6004384FC /* Run Script */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputPaths = ( 192 | ); 193 | name = "Run Script"; 194 | outputPaths = ( 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 199 | }; 200 | /* End PBXShellScriptBuildPhase section */ 201 | 202 | /* Begin PBXSourcesBuildPhase section */ 203 | 97C146EA1CF9000F007C117D /* Sources */ = { 204 | isa = PBXSourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 97C146FB1CF9000F007C117D /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C147001CF9000F007C117D /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 265 | ENABLE_NS_ASSERTIONS = NO; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu99; 268 | GCC_NO_COMMON_BLOCKS = YES; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 276 | MTL_ENABLE_DEBUG_INFO = NO; 277 | SDKROOT = iphoneos; 278 | SUPPORTED_PLATFORMS = iphoneos; 279 | TARGETED_DEVICE_FAMILY = "1,2"; 280 | VALIDATE_PRODUCT = YES; 281 | }; 282 | name = Profile; 283 | }; 284 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 285 | isa = XCBuildConfiguration; 286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 287 | buildSettings = { 288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 289 | CLANG_ENABLE_MODULES = YES; 290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 291 | ENABLE_BITCODE = NO; 292 | INFOPLIST_FILE = Runner/Info.plist; 293 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 294 | PRODUCT_BUNDLE_IDENTIFIER = uy.com.geocom.flutterDddSkeleton; 295 | PRODUCT_NAME = "$(TARGET_NAME)"; 296 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 297 | SWIFT_VERSION = 5.0; 298 | VERSIONING_SYSTEM = "apple-generic"; 299 | }; 300 | name = Profile; 301 | }; 302 | 97C147031CF9000F007C117D /* Debug */ = { 303 | isa = XCBuildConfiguration; 304 | buildSettings = { 305 | ALWAYS_SEARCH_USER_PATHS = NO; 306 | CLANG_ANALYZER_NONNULL = YES; 307 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 308 | CLANG_CXX_LIBRARY = "libc++"; 309 | CLANG_ENABLE_MODULES = YES; 310 | CLANG_ENABLE_OBJC_ARC = YES; 311 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 312 | CLANG_WARN_BOOL_CONVERSION = YES; 313 | CLANG_WARN_COMMA = YES; 314 | CLANG_WARN_CONSTANT_CONVERSION = YES; 315 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 316 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 317 | CLANG_WARN_EMPTY_BODY = YES; 318 | CLANG_WARN_ENUM_CONVERSION = YES; 319 | CLANG_WARN_INFINITE_RECURSION = YES; 320 | CLANG_WARN_INT_CONVERSION = YES; 321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 325 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 326 | CLANG_WARN_STRICT_PROTOTYPES = YES; 327 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 328 | CLANG_WARN_UNREACHABLE_CODE = YES; 329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 330 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 331 | COPY_PHASE_STRIP = NO; 332 | DEBUG_INFORMATION_FORMAT = dwarf; 333 | ENABLE_STRICT_OBJC_MSGSEND = YES; 334 | ENABLE_TESTABILITY = YES; 335 | GCC_C_LANGUAGE_STANDARD = gnu99; 336 | GCC_DYNAMIC_NO_PIC = NO; 337 | GCC_NO_COMMON_BLOCKS = YES; 338 | GCC_OPTIMIZATION_LEVEL = 0; 339 | GCC_PREPROCESSOR_DEFINITIONS = ( 340 | "DEBUG=1", 341 | "$(inherited)", 342 | ); 343 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 344 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 345 | GCC_WARN_UNDECLARED_SELECTOR = YES; 346 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 347 | GCC_WARN_UNUSED_FUNCTION = YES; 348 | GCC_WARN_UNUSED_VARIABLE = YES; 349 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 350 | MTL_ENABLE_DEBUG_INFO = YES; 351 | ONLY_ACTIVE_ARCH = YES; 352 | SDKROOT = iphoneos; 353 | TARGETED_DEVICE_FAMILY = "1,2"; 354 | }; 355 | name = Debug; 356 | }; 357 | 97C147041CF9000F007C117D /* Release */ = { 358 | isa = XCBuildConfiguration; 359 | buildSettings = { 360 | ALWAYS_SEARCH_USER_PATHS = NO; 361 | CLANG_ANALYZER_NONNULL = YES; 362 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 363 | CLANG_CXX_LIBRARY = "libc++"; 364 | CLANG_ENABLE_MODULES = YES; 365 | CLANG_ENABLE_OBJC_ARC = YES; 366 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 367 | CLANG_WARN_BOOL_CONVERSION = YES; 368 | CLANG_WARN_COMMA = YES; 369 | CLANG_WARN_CONSTANT_CONVERSION = YES; 370 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 371 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 372 | CLANG_WARN_EMPTY_BODY = YES; 373 | CLANG_WARN_ENUM_CONVERSION = YES; 374 | CLANG_WARN_INFINITE_RECURSION = YES; 375 | CLANG_WARN_INT_CONVERSION = YES; 376 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 377 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 378 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 379 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 380 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 381 | CLANG_WARN_STRICT_PROTOTYPES = YES; 382 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 383 | CLANG_WARN_UNREACHABLE_CODE = YES; 384 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 385 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 386 | COPY_PHASE_STRIP = NO; 387 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 388 | ENABLE_NS_ASSERTIONS = NO; 389 | ENABLE_STRICT_OBJC_MSGSEND = YES; 390 | GCC_C_LANGUAGE_STANDARD = gnu99; 391 | GCC_NO_COMMON_BLOCKS = YES; 392 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 393 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 394 | GCC_WARN_UNDECLARED_SELECTOR = YES; 395 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 396 | GCC_WARN_UNUSED_FUNCTION = YES; 397 | GCC_WARN_UNUSED_VARIABLE = YES; 398 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 399 | MTL_ENABLE_DEBUG_INFO = NO; 400 | SDKROOT = iphoneos; 401 | SUPPORTED_PLATFORMS = iphoneos; 402 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 403 | TARGETED_DEVICE_FAMILY = "1,2"; 404 | VALIDATE_PRODUCT = YES; 405 | }; 406 | name = Release; 407 | }; 408 | 97C147061CF9000F007C117D /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 411 | buildSettings = { 412 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 413 | CLANG_ENABLE_MODULES = YES; 414 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 415 | ENABLE_BITCODE = NO; 416 | INFOPLIST_FILE = Runner/Info.plist; 417 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 418 | PRODUCT_BUNDLE_IDENTIFIER = uy.com.geocom.flutterDddSkeleton; 419 | PRODUCT_NAME = "$(TARGET_NAME)"; 420 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 421 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 422 | SWIFT_VERSION = 5.0; 423 | VERSIONING_SYSTEM = "apple-generic"; 424 | }; 425 | name = Debug; 426 | }; 427 | 97C147071CF9000F007C117D /* Release */ = { 428 | isa = XCBuildConfiguration; 429 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 430 | buildSettings = { 431 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 432 | CLANG_ENABLE_MODULES = YES; 433 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 434 | ENABLE_BITCODE = NO; 435 | INFOPLIST_FILE = Runner/Info.plist; 436 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 437 | PRODUCT_BUNDLE_IDENTIFIER = uy.com.geocom.flutterDddSkeleton; 438 | PRODUCT_NAME = "$(TARGET_NAME)"; 439 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 440 | SWIFT_VERSION = 5.0; 441 | VERSIONING_SYSTEM = "apple-generic"; 442 | }; 443 | name = Release; 444 | }; 445 | /* End XCBuildConfiguration section */ 446 | 447 | /* Begin XCConfigurationList section */ 448 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 449 | isa = XCConfigurationList; 450 | buildConfigurations = ( 451 | 97C147031CF9000F007C117D /* Debug */, 452 | 97C147041CF9000F007C117D /* Release */, 453 | 249021D3217E4FDB00AE95B9 /* Profile */, 454 | ); 455 | defaultConfigurationIsVisible = 0; 456 | defaultConfigurationName = Release; 457 | }; 458 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 459 | isa = XCConfigurationList; 460 | buildConfigurations = ( 461 | 97C147061CF9000F007C117D /* Debug */, 462 | 97C147071CF9000F007C117D /* Release */, 463 | 249021D4217E4FDB00AE95B9 /* Profile */, 464 | ); 465 | defaultConfigurationIsVisible = 0; 466 | defaultConfigurationName = Release; 467 | }; 468 | /* End XCConfigurationList section */ 469 | }; 470 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 471 | } -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | _fe_analyzer_shared: 5 | dependency: transitive 6 | description: 7 | name: _fe_analyzer_shared 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "31.0.0" 11 | analyzer: 12 | dependency: transitive 13 | description: 14 | name: analyzer 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "2.8.0" 18 | archive: 19 | dependency: transitive 20 | description: 21 | name: archive 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "3.1.2" 25 | args: 26 | dependency: transitive 27 | description: 28 | name: args 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "2.3.0" 32 | async: 33 | dependency: "direct main" 34 | description: 35 | name: async 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "2.8.1" 39 | auto_route: 40 | dependency: "direct main" 41 | description: 42 | name: auto_route 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "2.4.2" 46 | auto_route_generator: 47 | dependency: "direct dev" 48 | description: 49 | name: auto_route_generator 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "2.4.1" 53 | boolean_selector: 54 | dependency: transitive 55 | description: 56 | name: boolean_selector 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "2.1.0" 60 | build: 61 | dependency: transitive 62 | description: 63 | name: build 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "2.1.1" 67 | build_config: 68 | dependency: transitive 69 | description: 70 | name: build_config 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "1.0.0" 74 | build_daemon: 75 | dependency: transitive 76 | description: 77 | name: build_daemon 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "3.0.1" 81 | build_resolvers: 82 | dependency: transitive 83 | description: 84 | name: build_resolvers 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "2.0.5" 88 | build_runner: 89 | dependency: "direct dev" 90 | description: 91 | name: build_runner 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "2.1.5" 95 | build_runner_core: 96 | dependency: transitive 97 | description: 98 | name: build_runner_core 99 | url: "https://pub.dartlang.org" 100 | source: hosted 101 | version: "7.2.2" 102 | built_collection: 103 | dependency: transitive 104 | description: 105 | name: built_collection 106 | url: "https://pub.dartlang.org" 107 | source: hosted 108 | version: "5.1.1" 109 | built_value: 110 | dependency: transitive 111 | description: 112 | name: built_value 113 | url: "https://pub.dartlang.org" 114 | source: hosted 115 | version: "8.1.3" 116 | characters: 117 | dependency: transitive 118 | description: 119 | name: characters 120 | url: "https://pub.dartlang.org" 121 | source: hosted 122 | version: "1.1.0" 123 | charcode: 124 | dependency: transitive 125 | description: 126 | name: charcode 127 | url: "https://pub.dartlang.org" 128 | source: hosted 129 | version: "1.3.1" 130 | checked_yaml: 131 | dependency: transitive 132 | description: 133 | name: checked_yaml 134 | url: "https://pub.dartlang.org" 135 | source: hosted 136 | version: "2.0.1" 137 | cli_util: 138 | dependency: transitive 139 | description: 140 | name: cli_util 141 | url: "https://pub.dartlang.org" 142 | source: hosted 143 | version: "0.3.5" 144 | clock: 145 | dependency: transitive 146 | description: 147 | name: clock 148 | url: "https://pub.dartlang.org" 149 | source: hosted 150 | version: "1.1.0" 151 | code_builder: 152 | dependency: transitive 153 | description: 154 | name: code_builder 155 | url: "https://pub.dartlang.org" 156 | source: hosted 157 | version: "4.1.0" 158 | collection: 159 | dependency: transitive 160 | description: 161 | name: collection 162 | url: "https://pub.dartlang.org" 163 | source: hosted 164 | version: "1.15.0" 165 | color: 166 | dependency: transitive 167 | description: 168 | name: color 169 | url: "https://pub.dartlang.org" 170 | source: hosted 171 | version: "3.0.0" 172 | convert: 173 | dependency: transitive 174 | description: 175 | name: convert 176 | url: "https://pub.dartlang.org" 177 | source: hosted 178 | version: "3.0.1" 179 | coverage: 180 | dependency: transitive 181 | description: 182 | name: coverage 183 | url: "https://pub.dartlang.org" 184 | source: hosted 185 | version: "1.0.3" 186 | crypto: 187 | dependency: transitive 188 | description: 189 | name: crypto 190 | url: "https://pub.dartlang.org" 191 | source: hosted 192 | version: "3.0.1" 193 | cupertino_icons: 194 | dependency: "direct main" 195 | description: 196 | name: cupertino_icons 197 | url: "https://pub.dartlang.org" 198 | source: hosted 199 | version: "1.0.4" 200 | dart_style: 201 | dependency: transitive 202 | description: 203 | name: dart_style 204 | url: "https://pub.dartlang.org" 205 | source: hosted 206 | version: "2.2.0" 207 | dartx: 208 | dependency: transitive 209 | description: 210 | name: dartx 211 | url: "https://pub.dartlang.org" 212 | source: hosted 213 | version: "0.8.0" 214 | dartz: 215 | dependency: "direct main" 216 | description: 217 | name: dartz 218 | url: "https://pub.dartlang.org" 219 | source: hosted 220 | version: "0.10.0" 221 | dio: 222 | dependency: "direct main" 223 | description: 224 | name: dio 225 | url: "https://pub.dartlang.org" 226 | source: hosted 227 | version: "4.0.4" 228 | fake_async: 229 | dependency: transitive 230 | description: 231 | name: fake_async 232 | url: "https://pub.dartlang.org" 233 | source: hosted 234 | version: "1.2.0" 235 | ffi: 236 | dependency: transitive 237 | description: 238 | name: ffi 239 | url: "https://pub.dartlang.org" 240 | source: hosted 241 | version: "1.1.2" 242 | file: 243 | dependency: transitive 244 | description: 245 | name: file 246 | url: "https://pub.dartlang.org" 247 | source: hosted 248 | version: "6.1.2" 249 | fixnum: 250 | dependency: transitive 251 | description: 252 | name: fixnum 253 | url: "https://pub.dartlang.org" 254 | source: hosted 255 | version: "1.0.0" 256 | flash: 257 | dependency: "direct main" 258 | description: 259 | name: flash 260 | url: "https://pub.dartlang.org" 261 | source: hosted 262 | version: "2.0.3" 263 | flutter: 264 | dependency: "direct main" 265 | description: flutter 266 | source: sdk 267 | version: "0.0.0" 268 | flutter_driver: 269 | dependency: "direct dev" 270 | description: flutter 271 | source: sdk 272 | version: "0.0.0" 273 | flutter_gen_core: 274 | dependency: transitive 275 | description: 276 | name: flutter_gen_core 277 | url: "https://pub.dartlang.org" 278 | source: hosted 279 | version: "4.1.2" 280 | flutter_gen_runner: 281 | dependency: "direct dev" 282 | description: 283 | name: flutter_gen_runner 284 | url: "https://pub.dartlang.org" 285 | source: hosted 286 | version: "4.1.2" 287 | flutter_gherkin: 288 | dependency: "direct main" 289 | description: 290 | name: flutter_gherkin 291 | url: "https://pub.dartlang.org" 292 | source: hosted 293 | version: "2.0.0" 294 | flutter_launcher_icons: 295 | dependency: "direct dev" 296 | description: 297 | name: flutter_launcher_icons 298 | url: "https://pub.dartlang.org" 299 | source: hosted 300 | version: "0.9.2" 301 | flutter_localizations: 302 | dependency: "direct main" 303 | description: flutter 304 | source: sdk 305 | version: "0.0.0" 306 | flutter_svg: 307 | dependency: "direct main" 308 | description: 309 | name: flutter_svg 310 | url: "https://pub.dartlang.org" 311 | source: hosted 312 | version: "0.23.0+1" 313 | flutter_test: 314 | dependency: "direct dev" 315 | description: flutter 316 | source: sdk 317 | version: "0.0.0" 318 | flutter_web_plugins: 319 | dependency: transitive 320 | description: flutter 321 | source: sdk 322 | version: "0.0.0" 323 | frontend_server_client: 324 | dependency: transitive 325 | description: 326 | name: frontend_server_client 327 | url: "https://pub.dartlang.org" 328 | source: hosted 329 | version: "2.1.2" 330 | fuchsia_remote_debug_protocol: 331 | dependency: transitive 332 | description: flutter 333 | source: sdk 334 | version: "0.0.0" 335 | get_it: 336 | dependency: "direct main" 337 | description: 338 | name: get_it 339 | url: "https://pub.dartlang.org" 340 | source: hosted 341 | version: "7.2.0" 342 | gherkin: 343 | dependency: transitive 344 | description: 345 | name: gherkin 346 | url: "https://pub.dartlang.org" 347 | source: hosted 348 | version: "2.0.8" 349 | glob: 350 | dependency: transitive 351 | description: 352 | name: glob 353 | url: "https://pub.dartlang.org" 354 | source: hosted 355 | version: "2.0.2" 356 | global_configuration: 357 | dependency: "direct main" 358 | description: 359 | name: global_configuration 360 | url: "https://pub.dartlang.org" 361 | source: hosted 362 | version: "2.0.0-nullsafety.1" 363 | graphs: 364 | dependency: transitive 365 | description: 366 | name: graphs 367 | url: "https://pub.dartlang.org" 368 | source: hosted 369 | version: "2.1.0" 370 | http: 371 | dependency: transitive 372 | description: 373 | name: http 374 | url: "https://pub.dartlang.org" 375 | source: hosted 376 | version: "0.13.4" 377 | http_multi_server: 378 | dependency: transitive 379 | description: 380 | name: http_multi_server 381 | url: "https://pub.dartlang.org" 382 | source: hosted 383 | version: "3.0.1" 384 | http_parser: 385 | dependency: transitive 386 | description: 387 | name: http_parser 388 | url: "https://pub.dartlang.org" 389 | source: hosted 390 | version: "4.0.0" 391 | image: 392 | dependency: transitive 393 | description: 394 | name: image 395 | url: "https://pub.dartlang.org" 396 | source: hosted 397 | version: "3.1.0" 398 | injectable: 399 | dependency: "direct main" 400 | description: 401 | name: injectable 402 | url: "https://pub.dartlang.org" 403 | source: hosted 404 | version: "1.5.0" 405 | injectable_generator: 406 | dependency: "direct dev" 407 | description: 408 | name: injectable_generator 409 | url: "https://pub.dartlang.org" 410 | source: hosted 411 | version: "1.5.2" 412 | intl: 413 | dependency: transitive 414 | description: 415 | name: intl 416 | url: "https://pub.dartlang.org" 417 | source: hosted 418 | version: "0.17.0" 419 | io: 420 | dependency: transitive 421 | description: 422 | name: io 423 | url: "https://pub.dartlang.org" 424 | source: hosted 425 | version: "1.0.3" 426 | js: 427 | dependency: transitive 428 | description: 429 | name: js 430 | url: "https://pub.dartlang.org" 431 | source: hosted 432 | version: "0.6.3" 433 | json_annotation: 434 | dependency: transitive 435 | description: 436 | name: json_annotation 437 | url: "https://pub.dartlang.org" 438 | source: hosted 439 | version: "4.4.0" 440 | logger: 441 | dependency: "direct main" 442 | description: 443 | name: logger 444 | url: "https://pub.dartlang.org" 445 | source: hosted 446 | version: "1.1.0" 447 | logging: 448 | dependency: transitive 449 | description: 450 | name: logging 451 | url: "https://pub.dartlang.org" 452 | source: hosted 453 | version: "1.0.2" 454 | matcher: 455 | dependency: transitive 456 | description: 457 | name: matcher 458 | url: "https://pub.dartlang.org" 459 | source: hosted 460 | version: "0.12.10" 461 | meta: 462 | dependency: transitive 463 | description: 464 | name: meta 465 | url: "https://pub.dartlang.org" 466 | source: hosted 467 | version: "1.7.0" 468 | mime: 469 | dependency: transitive 470 | description: 471 | name: mime 472 | url: "https://pub.dartlang.org" 473 | source: hosted 474 | version: "1.0.1" 475 | nested: 476 | dependency: transitive 477 | description: 478 | name: nested 479 | url: "https://pub.dartlang.org" 480 | source: hosted 481 | version: "1.0.0" 482 | node_preamble: 483 | dependency: transitive 484 | description: 485 | name: node_preamble 486 | url: "https://pub.dartlang.org" 487 | source: hosted 488 | version: "2.0.1" 489 | package_config: 490 | dependency: transitive 491 | description: 492 | name: package_config 493 | url: "https://pub.dartlang.org" 494 | source: hosted 495 | version: "2.0.2" 496 | path: 497 | dependency: transitive 498 | description: 499 | name: path 500 | url: "https://pub.dartlang.org" 501 | source: hosted 502 | version: "1.8.0" 503 | path_drawing: 504 | dependency: transitive 505 | description: 506 | name: path_drawing 507 | url: "https://pub.dartlang.org" 508 | source: hosted 509 | version: "0.5.1+1" 510 | path_parsing: 511 | dependency: transitive 512 | description: 513 | name: path_parsing 514 | url: "https://pub.dartlang.org" 515 | source: hosted 516 | version: "0.2.1" 517 | path_provider: 518 | dependency: "direct main" 519 | description: 520 | name: path_provider 521 | url: "https://pub.dartlang.org" 522 | source: hosted 523 | version: "2.0.7" 524 | path_provider_android: 525 | dependency: transitive 526 | description: 527 | name: path_provider_android 528 | url: "https://pub.dartlang.org" 529 | source: hosted 530 | version: "2.0.9" 531 | path_provider_ios: 532 | dependency: transitive 533 | description: 534 | name: path_provider_ios 535 | url: "https://pub.dartlang.org" 536 | source: hosted 537 | version: "2.0.7" 538 | path_provider_linux: 539 | dependency: transitive 540 | description: 541 | name: path_provider_linux 542 | url: "https://pub.dartlang.org" 543 | source: hosted 544 | version: "2.1.2" 545 | path_provider_macos: 546 | dependency: transitive 547 | description: 548 | name: path_provider_macos 549 | url: "https://pub.dartlang.org" 550 | source: hosted 551 | version: "2.0.3" 552 | path_provider_platform_interface: 553 | dependency: transitive 554 | description: 555 | name: path_provider_platform_interface 556 | url: "https://pub.dartlang.org" 557 | source: hosted 558 | version: "2.0.1" 559 | path_provider_windows: 560 | dependency: transitive 561 | description: 562 | name: path_provider_windows 563 | url: "https://pub.dartlang.org" 564 | source: hosted 565 | version: "2.0.4" 566 | pedantic: 567 | dependency: transitive 568 | description: 569 | name: pedantic 570 | url: "https://pub.dartlang.org" 571 | source: hosted 572 | version: "1.11.1" 573 | petitparser: 574 | dependency: transitive 575 | description: 576 | name: petitparser 577 | url: "https://pub.dartlang.org" 578 | source: hosted 579 | version: "4.4.0" 580 | platform: 581 | dependency: transitive 582 | description: 583 | name: platform 584 | url: "https://pub.dartlang.org" 585 | source: hosted 586 | version: "3.0.0" 587 | plugin_platform_interface: 588 | dependency: transitive 589 | description: 590 | name: plugin_platform_interface 591 | url: "https://pub.dartlang.org" 592 | source: hosted 593 | version: "2.0.2" 594 | pool: 595 | dependency: transitive 596 | description: 597 | name: pool 598 | url: "https://pub.dartlang.org" 599 | source: hosted 600 | version: "1.5.0" 601 | process: 602 | dependency: transitive 603 | description: 604 | name: process 605 | url: "https://pub.dartlang.org" 606 | source: hosted 607 | version: "4.2.3" 608 | provider: 609 | dependency: "direct main" 610 | description: 611 | name: provider 612 | url: "https://pub.dartlang.org" 613 | source: hosted 614 | version: "6.0.1" 615 | pub_semver: 616 | dependency: transitive 617 | description: 618 | name: pub_semver 619 | url: "https://pub.dartlang.org" 620 | source: hosted 621 | version: "2.1.0" 622 | pubspec_parse: 623 | dependency: transitive 624 | description: 625 | name: pubspec_parse 626 | url: "https://pub.dartlang.org" 627 | source: hosted 628 | version: "1.1.0" 629 | rxdart: 630 | dependency: "direct main" 631 | description: 632 | name: rxdart 633 | url: "https://pub.dartlang.org" 634 | source: hosted 635 | version: "0.27.3" 636 | shared_preferences: 637 | dependency: "direct main" 638 | description: 639 | name: shared_preferences 640 | url: "https://pub.dartlang.org" 641 | source: hosted 642 | version: "2.0.9" 643 | shared_preferences_android: 644 | dependency: transitive 645 | description: 646 | name: shared_preferences_android 647 | url: "https://pub.dartlang.org" 648 | source: hosted 649 | version: "2.0.9" 650 | shared_preferences_ios: 651 | dependency: transitive 652 | description: 653 | name: shared_preferences_ios 654 | url: "https://pub.dartlang.org" 655 | source: hosted 656 | version: "2.0.8" 657 | shared_preferences_linux: 658 | dependency: transitive 659 | description: 660 | name: shared_preferences_linux 661 | url: "https://pub.dartlang.org" 662 | source: hosted 663 | version: "2.0.3" 664 | shared_preferences_macos: 665 | dependency: transitive 666 | description: 667 | name: shared_preferences_macos 668 | url: "https://pub.dartlang.org" 669 | source: hosted 670 | version: "2.0.2" 671 | shared_preferences_platform_interface: 672 | dependency: transitive 673 | description: 674 | name: shared_preferences_platform_interface 675 | url: "https://pub.dartlang.org" 676 | source: hosted 677 | version: "2.0.0" 678 | shared_preferences_web: 679 | dependency: transitive 680 | description: 681 | name: shared_preferences_web 682 | url: "https://pub.dartlang.org" 683 | source: hosted 684 | version: "2.0.2" 685 | shared_preferences_windows: 686 | dependency: transitive 687 | description: 688 | name: shared_preferences_windows 689 | url: "https://pub.dartlang.org" 690 | source: hosted 691 | version: "2.0.3" 692 | shelf: 693 | dependency: transitive 694 | description: 695 | name: shelf 696 | url: "https://pub.dartlang.org" 697 | source: hosted 698 | version: "1.2.0" 699 | shelf_packages_handler: 700 | dependency: transitive 701 | description: 702 | name: shelf_packages_handler 703 | url: "https://pub.dartlang.org" 704 | source: hosted 705 | version: "3.0.0" 706 | shelf_static: 707 | dependency: transitive 708 | description: 709 | name: shelf_static 710 | url: "https://pub.dartlang.org" 711 | source: hosted 712 | version: "1.1.0" 713 | shelf_web_socket: 714 | dependency: transitive 715 | description: 716 | name: shelf_web_socket 717 | url: "https://pub.dartlang.org" 718 | source: hosted 719 | version: "1.0.1" 720 | sky_engine: 721 | dependency: transitive 722 | description: flutter 723 | source: sdk 724 | version: "0.0.99" 725 | source_gen: 726 | dependency: transitive 727 | description: 728 | name: source_gen 729 | url: "https://pub.dartlang.org" 730 | source: hosted 731 | version: "1.2.0" 732 | source_map_stack_trace: 733 | dependency: transitive 734 | description: 735 | name: source_map_stack_trace 736 | url: "https://pub.dartlang.org" 737 | source: hosted 738 | version: "2.1.0" 739 | source_maps: 740 | dependency: transitive 741 | description: 742 | name: source_maps 743 | url: "https://pub.dartlang.org" 744 | source: hosted 745 | version: "0.10.10" 746 | source_span: 747 | dependency: transitive 748 | description: 749 | name: source_span 750 | url: "https://pub.dartlang.org" 751 | source: hosted 752 | version: "1.8.1" 753 | stack_trace: 754 | dependency: transitive 755 | description: 756 | name: stack_trace 757 | url: "https://pub.dartlang.org" 758 | source: hosted 759 | version: "1.10.0" 760 | stream_channel: 761 | dependency: transitive 762 | description: 763 | name: stream_channel 764 | url: "https://pub.dartlang.org" 765 | source: hosted 766 | version: "2.1.0" 767 | stream_transform: 768 | dependency: transitive 769 | description: 770 | name: stream_transform 771 | url: "https://pub.dartlang.org" 772 | source: hosted 773 | version: "2.0.0" 774 | string_scanner: 775 | dependency: transitive 776 | description: 777 | name: string_scanner 778 | url: "https://pub.dartlang.org" 779 | source: hosted 780 | version: "1.1.0" 781 | sync_http: 782 | dependency: transitive 783 | description: 784 | name: sync_http 785 | url: "https://pub.dartlang.org" 786 | source: hosted 787 | version: "0.3.0" 788 | term_glyph: 789 | dependency: transitive 790 | description: 791 | name: term_glyph 792 | url: "https://pub.dartlang.org" 793 | source: hosted 794 | version: "1.2.0" 795 | test: 796 | dependency: "direct dev" 797 | description: 798 | name: test 799 | url: "https://pub.dartlang.org" 800 | source: hosted 801 | version: "1.17.10" 802 | test_api: 803 | dependency: transitive 804 | description: 805 | name: test_api 806 | url: "https://pub.dartlang.org" 807 | source: hosted 808 | version: "0.4.2" 809 | test_core: 810 | dependency: transitive 811 | description: 812 | name: test_core 813 | url: "https://pub.dartlang.org" 814 | source: hosted 815 | version: "0.4.0" 816 | time: 817 | dependency: transitive 818 | description: 819 | name: time 820 | url: "https://pub.dartlang.org" 821 | source: hosted 822 | version: "2.0.1" 823 | timing: 824 | dependency: transitive 825 | description: 826 | name: timing 827 | url: "https://pub.dartlang.org" 828 | source: hosted 829 | version: "1.0.0" 830 | typed_data: 831 | dependency: transitive 832 | description: 833 | name: typed_data 834 | url: "https://pub.dartlang.org" 835 | source: hosted 836 | version: "1.3.0" 837 | vector_math: 838 | dependency: transitive 839 | description: 840 | name: vector_math 841 | url: "https://pub.dartlang.org" 842 | source: hosted 843 | version: "2.1.0" 844 | very_good_analysis: 845 | dependency: "direct dev" 846 | description: 847 | name: very_good_analysis 848 | url: "https://pub.dartlang.org" 849 | source: hosted 850 | version: "2.4.0" 851 | vm_service: 852 | dependency: transitive 853 | description: 854 | name: vm_service 855 | url: "https://pub.dartlang.org" 856 | source: hosted 857 | version: "7.1.1" 858 | watcher: 859 | dependency: transitive 860 | description: 861 | name: watcher 862 | url: "https://pub.dartlang.org" 863 | source: hosted 864 | version: "1.0.1" 865 | web_socket_channel: 866 | dependency: transitive 867 | description: 868 | name: web_socket_channel 869 | url: "https://pub.dartlang.org" 870 | source: hosted 871 | version: "2.1.0" 872 | webdriver: 873 | dependency: transitive 874 | description: 875 | name: webdriver 876 | url: "https://pub.dartlang.org" 877 | source: hosted 878 | version: "3.0.0" 879 | webkit_inspection_protocol: 880 | dependency: transitive 881 | description: 882 | name: webkit_inspection_protocol 883 | url: "https://pub.dartlang.org" 884 | source: hosted 885 | version: "1.0.0" 886 | win32: 887 | dependency: transitive 888 | description: 889 | name: win32 890 | url: "https://pub.dartlang.org" 891 | source: hosted 892 | version: "2.3.1" 893 | xdg_directories: 894 | dependency: transitive 895 | description: 896 | name: xdg_directories 897 | url: "https://pub.dartlang.org" 898 | source: hosted 899 | version: "0.2.0" 900 | xml: 901 | dependency: transitive 902 | description: 903 | name: xml 904 | url: "https://pub.dartlang.org" 905 | source: hosted 906 | version: "5.3.1" 907 | yaml: 908 | dependency: transitive 909 | description: 910 | name: yaml 911 | url: "https://pub.dartlang.org" 912 | source: hosted 913 | version: "3.1.0" 914 | sdks: 915 | dart: ">=2.14.0 <3.0.0" 916 | flutter: ">=2.5.0" 917 | --------------------------------------------------------------------------------