├── README.md
├── app
├── lego_app
│ ├── ios
│ │ ├── Flutter
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── AppFrameworkInfo.plist
│ │ ├── Runner
│ │ │ ├── Runner-Bridging-Header.h
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── LaunchImage.imageset
│ │ │ │ │ ├── LaunchImage.png
│ │ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── Contents.json
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ └── Contents.json
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Base.lproj
│ │ │ │ ├── Main.storyboard
│ │ │ │ └── LaunchScreen.storyboard
│ │ │ └── Info.plist
│ │ ├── Runner.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
│ ├── android
│ │ ├── gradle.properties
│ │ ├── app
│ │ │ ├── src
│ │ │ │ ├── main
│ │ │ │ │ ├── res
│ │ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── drawable
│ │ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── drawable-v21
│ │ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── values
│ │ │ │ │ │ │ └── styles.xml
│ │ │ │ │ │ └── values-night
│ │ │ │ │ │ │ └── styles.xml
│ │ │ │ │ ├── kotlin
│ │ │ │ │ │ └── com
│ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ └── lego_style
│ │ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ ├── debug
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ └── profile
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ └── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── .gitignore
│ │ ├── settings.gradle
│ │ └── build.gradle
│ ├── lib
│ │ ├── di
│ │ │ └── di_initializer.dart
│ │ └── main.dart
│ ├── pubspec.yaml
│ ├── README.md
│ ├── test
│ │ └── widget_test.dart
│ ├── .metadata
│ └── pubspec.lock
├── lego_configuration
│ ├── lib
│ │ ├── lego_configuration.dart
│ │ └── src
│ │ │ ├── feature
│ │ │ └── lego_list.dart
│ │ │ └── di
│ │ │ └── di_initializer.dart
│ ├── pubspec.yaml
│ └── pubspec.lock
└── lego_navigation
│ ├── lib
│ ├── lego_navigation.dart
│ └── src
│ │ ├── feature
│ │ └── lego_list.dart
│ │ ├── di
│ │ └── di_initializer.dart
│ │ ├── route_information.dart
│ │ └── router.dart
│ ├── pubspec.yaml
│ └── pubspec.lock
├── feature
├── lego_list
│ ├── l10n
│ │ └── app_en.arb
│ ├── lib
│ │ ├── src
│ │ │ ├── navigation
│ │ │ │ └── navigation.dart
│ │ │ ├── configurator
│ │ │ │ └── configurator.dart
│ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ └── lego_set.dart
│ │ │ │ └── repository
│ │ │ │ │ └── lego_repository.dart
│ │ │ ├── widget
│ │ │ │ ├── localization
│ │ │ │ │ ├── app_localizations_en.dart
│ │ │ │ │ └── app_localizations.dart
│ │ │ │ ├── bloc
│ │ │ │ │ ├── lego_list_state.dart
│ │ │ │ │ └── lego_list_cubit.dart
│ │ │ │ └── lego_list_page.dart
│ │ │ ├── di
│ │ │ │ └── di_initializer.dart
│ │ │ └── flow
│ │ │ │ └── lego_list_flow.dart
│ │ └── lego_list.dart
│ ├── l10n.yaml
│ ├── test
│ │ ├── step
│ │ │ ├── i_tap_text.dart
│ │ │ ├── i_see_text.dart
│ │ │ ├── i_see_widget.dart
│ │ │ ├── navigation_to_universe_is_requested.dart
│ │ │ └── the_flow_is_running_with_configuration.dart
│ │ ├── utils
│ │ │ └── mocks.dart
│ │ ├── lego_list.feature
│ │ └── lego_list_test.dart
│ ├── pubspec.yaml
│ └── pubspec.lock
└── harry_potter
│ ├── lib
│ ├── harry_potter.dart
│ └── src
│ │ ├── widget
│ │ ├── hp_list
│ │ │ ├── localization
│ │ │ │ ├── translations
│ │ │ │ │ ├── hp.i69n.yaml
│ │ │ │ │ └── hp.i69n.dart
│ │ │ │ └── hp_localizations.dart
│ │ │ ├── bloc
│ │ │ │ ├── hp_state.dart
│ │ │ │ ├── hp_cubit.dart
│ │ │ │ └── hp_state.freezed.dart
│ │ │ └── hp_list_page.dart
│ │ └── hp_details
│ │ │ └── hp_details_page.dart
│ │ ├── domain
│ │ ├── model
│ │ │ ├── character.dart
│ │ │ └── character.freezed.dart
│ │ └── repository
│ │ │ └── hp_repository.dart
│ │ ├── di
│ │ ├── di_initializer.dart
│ │ └── di_initializer.config.dart
│ │ └── flow
│ │ ├── harry_potter_state.dart
│ │ ├── harry_potter_flow.dart
│ │ └── harry_potter_state.freezed.dart
│ ├── pubspec.yaml
│ └── pubspec.lock
├── core
└── design_system
│ ├── lib
│ ├── design_system.dart
│ └── src
│ │ └── theme.dart
│ ├── pubspec.yaml
│ └── pubspec.lock
├── .gitignore
└── analysis_options.yaml
/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/lego_app/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/app/lego_app/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/feature/lego_list/l10n/app_en.arb:
--------------------------------------------------------------------------------
1 | {
2 | "legoWorlds": "Lego worlds"
3 | }
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/core/design_system/lib/design_system.dart:
--------------------------------------------------------------------------------
1 | export 'package:design_system/src/theme.dart';
2 |
--------------------------------------------------------------------------------
/feature/harry_potter/lib/harry_potter.dart:
--------------------------------------------------------------------------------
1 | export 'package:harry_potter/src/flow/harry_potter_flow.dart';
2 |
--------------------------------------------------------------------------------
/app/lego_configuration/lib/lego_configuration.dart:
--------------------------------------------------------------------------------
1 | export 'package:lego_configuration/src/di/di_initializer.dart';
2 |
--------------------------------------------------------------------------------
/feature/harry_potter/lib/src/widget/hp_list/localization/translations/hp.i69n.yaml:
--------------------------------------------------------------------------------
1 | chooseCharacter: 'Choose a character'
--------------------------------------------------------------------------------
/app/lego_app/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/feature/lego_list/lib/src/navigation/navigation.dart:
--------------------------------------------------------------------------------
1 | abstract class LegoListNavigation {
2 | void openUniverse(String id);
3 | }
4 |
--------------------------------------------------------------------------------
/feature/lego_list/lib/src/configurator/configurator.dart:
--------------------------------------------------------------------------------
1 | abstract class LegoListConfigurator {
2 | bool get gridRepresentation;
3 | }
4 |
--------------------------------------------------------------------------------
/feature/lego_list/l10n.yaml:
--------------------------------------------------------------------------------
1 | arb-dir: l10n
2 | template-arb-file: app_en.arb
3 | synthetic-package: false
4 | output-dir: ./lib/src/widget/localization
--------------------------------------------------------------------------------
/core/design_system/lib/src/theme.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | final legoTheme = ThemeData(
4 | primarySwatch: Colors.yellow,
5 | );
6 |
--------------------------------------------------------------------------------
/app/lego_navigation/lib/lego_navigation.dart:
--------------------------------------------------------------------------------
1 | export 'package:lego_navigation/src/di/di_initializer.dart';
2 | export 'package:lego_navigation/src/route_information.dart';
3 |
--------------------------------------------------------------------------------
/app/lego_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/lego_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/lego_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/lego_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/lego_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olexale/lego_style_demo/HEAD/app/lego_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/feature/lego_list/lib/lego_list.dart:
--------------------------------------------------------------------------------
1 | export 'package:lego_list/src/flow/lego_list_flow.dart';
2 | export 'package:lego_list/src/configurator/configurator.dart';
3 | export 'package:lego_list/src/navigation/navigation.dart';
4 |
--------------------------------------------------------------------------------
/app/lego_app/android/app/src/main/kotlin/com/example/lego_style/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.lego_style
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/lego_app/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/feature/lego_list/test/step/i_tap_text.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_test/flutter_test.dart';
2 |
3 | Future iTapText(WidgetTester tester, String text) async {
4 | await tester.tap(find.text(text));
5 | await tester.pump();
6 | }
7 |
--------------------------------------------------------------------------------
/feature/lego_list/test/step/i_see_text.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter_test/flutter_test.dart';
4 |
5 | FutureOr iSeeText(WidgetTester tester, String text) {
6 | expect(find.text(text), findsOneWidget);
7 | }
8 |
--------------------------------------------------------------------------------
/app/lego_app/lib/di/di_initializer.dart:
--------------------------------------------------------------------------------
1 | import 'package:lego_configuration/lego_configuration.dart' as configuration;
2 | import 'package:lego_navigation/lego_navigation.dart' as navigation;
3 |
4 | void initialize() {
5 | configuration.initialize();
6 | navigation.initialize();
7 | }
8 |
--------------------------------------------------------------------------------
/app/lego_app/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.4-all.zip
7 |
--------------------------------------------------------------------------------
/app/lego_configuration/lib/src/feature/lego_list.dart:
--------------------------------------------------------------------------------
1 | import 'package:lego_list/lego_list.dart';
2 |
3 | class LegoListConfiguratorImpl implements LegoListConfigurator {
4 | @override
5 | bool get gridRepresentation =>
6 | const String.fromEnvironment('GRID_UI', defaultValue: 'false') == 'true';
7 | }
8 |
--------------------------------------------------------------------------------
/feature/lego_list/lib/src/domain/model/lego_set.dart:
--------------------------------------------------------------------------------
1 | import 'package:equatable/equatable.dart';
2 |
3 | class LegoSet extends Equatable {
4 | const LegoSet(this.id, this.name);
5 |
6 | final String id;
7 | final String name;
8 |
9 | @override
10 | List