From ee0f3bd713962b4bee06d8af32516f56fa543cdf Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sat, 5 Jul 2025 18:04:10 +0100 Subject: [PATCH 01/89] Upgrade the vanilla app to the latest version of Flutter --- .gitignore | 2 + integration_tests/lib/integration_tests.dart | 8 +- .../elements/filters_element.dart | 6 +- .../page_objects/screens/add_test_screen.dart | 10 +- .../screens/details_test_screen.dart | 4 +- .../screens/edit_test_screen.dart | 2 +- .../screens/home_test_screen.dart | 4 +- .../lib/page_objects/screens/test_screen.dart | 4 +- integration_tests/lib/page_objects/utils.dart | 4 +- integration_tests/pubspec.yaml | 6 +- todos_app_core/.flutter-plugins-dependencies | 2 +- todos_app_core/lib/src/localization.dart | 4 +- .../lib/src/localizations/messages_all.dart | 6 +- todos_app_core/lib/src/optional.dart | 12 +- todos_app_core/lib/src/theme.dart | 23 +- todos_app_core/pubspec.yaml | 2 +- .../lib/src/todo_entity.dart | 2 +- .../lib/src/user_entity.dart | 6 +- todos_repository_core/pubspec.yaml | 2 +- .../lib/src/key_value_storage.dart | 18 +- .../lib/src/reactive_repository.dart | 13 +- .../lib/src/repository.dart | 5 +- todos_repository_local_storage/pubspec.yaml | 6 +- .../test/key_value_storage_test.dart | 4 +- vanilla/.metadata | 39 +- vanilla/analysis_options.yaml | 28 + vanilla/android/.gitignore | 7 + vanilla/android/app/build.gradle | 67 -- vanilla/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 31 +- .../com/example/vanilla/MainActivity.kt | 9 +- .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- vanilla/android/build.gradle | 31 - vanilla/android/build.gradle.kts | 21 + vanilla/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- vanilla/android/settings.gradle | 15 - vanilla/android/settings.gradle.kts | 25 + vanilla/ios/.gitignore | 2 + vanilla/ios/Flutter/AppFrameworkInfo.plist | 4 +- vanilla/ios/Flutter/Debug.xcconfig | 2 +- vanilla/ios/Flutter/Release.xcconfig | 2 +- vanilla/ios/Podfile | 83 +- vanilla/ios/Runner.xcodeproj/project.pbxproj | 207 +++-- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + vanilla/ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes vanilla/ios/Runner/Info.plist | 8 +- vanilla/ios/Runner/Runner-Bridging-Header.h | 2 +- vanilla/ios/RunnerTests/RunnerTests.swift | 12 + vanilla/lib/app.dart | 12 +- vanilla/lib/localization.dart | 4 +- vanilla/lib/main.dart | 7 +- vanilla/lib/main_web.dart | 25 - vanilla/lib/models.dart | 7 +- vanilla/lib/screens/add_edit_screen.dart | 45 +- vanilla/lib/screens/detail_screen.dart | 13 +- vanilla/lib/screens/home_screen.dart | 25 +- vanilla/lib/widgets/extra_actions_button.dart | 7 +- vanilla/lib/widgets/filter_button.dart | 30 +- vanilla/lib/widgets/stats_counter.dart | 12 +- vanilla/lib/widgets/todo_item.dart | 18 +- vanilla/lib/widgets/todo_list.dart | 13 +- vanilla/macos/.gitignore | 7 + vanilla/macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + vanilla/macos/Podfile | 42 + vanilla/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + vanilla/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes vanilla/macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ vanilla/macos/Runner/Configs/AppInfo.xcconfig | 14 + vanilla/macos/Runner/Configs/Debug.xcconfig | 2 + vanilla/macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + vanilla/macos/Runner/Info.plist | 32 + vanilla/macos/Runner/MainFlutterWindow.swift | 15 + vanilla/macos/Runner/Release.entitlements | 8 + vanilla/macos/RunnerTests/RunnerTests.swift | 12 + vanilla/pubspec.yaml | 7 +- vanilla/test_driver/todo_app.dart | 2 +- vanilla/web/favicon.png | Bin 0 -> 917 bytes vanilla/web/icons/Icon-192.png | Bin 0 -> 5292 bytes vanilla/web/icons/Icon-512.png | Bin 0 -> 8252 bytes vanilla/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes vanilla/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes vanilla/web/manifest.json | 35 + 134 files changed, 2247 insertions(+), 496 deletions(-) create mode 100644 vanilla/analysis_options.yaml delete mode 100644 vanilla/android/app/build.gradle create mode 100644 vanilla/android/app/build.gradle.kts create mode 100644 vanilla/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 vanilla/android/app/src/main/res/values-night/styles.xml delete mode 100644 vanilla/android/build.gradle create mode 100644 vanilla/android/build.gradle.kts delete mode 100644 vanilla/android/settings.gradle create mode 100644 vanilla/android/settings.gradle.kts create mode 100644 vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 vanilla/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 vanilla/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png create mode 100644 vanilla/ios/RunnerTests/RunnerTests.swift delete mode 100644 vanilla/lib/main_web.dart create mode 100644 vanilla/macos/.gitignore create mode 100644 vanilla/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 vanilla/macos/Flutter/Flutter-Release.xcconfig create mode 100644 vanilla/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 vanilla/macos/Podfile create mode 100644 vanilla/macos/Podfile.lock create mode 100644 vanilla/macos/Runner.xcodeproj/project.pbxproj create mode 100644 vanilla/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 vanilla/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 vanilla/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 vanilla/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 vanilla/macos/Runner/AppDelegate.swift create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 vanilla/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 vanilla/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 vanilla/macos/Runner/Configs/Debug.xcconfig create mode 100644 vanilla/macos/Runner/Configs/Release.xcconfig create mode 100644 vanilla/macos/Runner/Configs/Warnings.xcconfig create mode 100644 vanilla/macos/Runner/DebugProfile.entitlements create mode 100644 vanilla/macos/Runner/Info.plist create mode 100644 vanilla/macos/Runner/MainFlutterWindow.swift create mode 100644 vanilla/macos/Runner/Release.entitlements create mode 100644 vanilla/macos/RunnerTests/RunnerTests.swift create mode 100644 vanilla/web/favicon.png create mode 100644 vanilla/web/icons/Icon-192.png create mode 100644 vanilla/web/icons/Icon-512.png create mode 100644 vanilla/web/icons/Icon-maskable-192.png create mode 100644 vanilla/web/icons/Icon-maskable-512.png create mode 100644 vanilla/web/manifest.json diff --git a/.gitignore b/.gitignore index 34d26916..3489b024 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,5 @@ lcov.info !**/*/ios/**/default.pbxuser !**/*/ios/**/default.perspectivev3 **/*/generated_plugin_registrant.dart + +.vscode/ diff --git a/integration_tests/lib/integration_tests.dart b/integration_tests/lib/integration_tests.dart index dda79c03..cca4c8e3 100644 --- a/integration_tests/lib/integration_tests.dart +++ b/integration_tests/lib/integration_tests.dart @@ -11,8 +11,8 @@ import 'page_objects/page_objects.dart'; void main() { group('Todo App Test', () { - FlutterDriver driver; - HomeTestScreen homeScreen; + late FlutterDriver driver; + late HomeTestScreen homeScreen; setUpAll(() async { driver = await FlutterDriver.connect(); @@ -20,9 +20,7 @@ void main() { }); tearDownAll(() async { - if (driver != null) { - await driver.close(); - } + await driver.close(); }); test('should show a loading screen while the todos are fetched', () async { diff --git a/integration_tests/lib/page_objects/elements/filters_element.dart b/integration_tests/lib/page_objects/elements/filters_element.dart index c0898612..4a4a039f 100644 --- a/integration_tests/lib/page_objects/elements/filters_element.dart +++ b/integration_tests/lib/page_objects/elements/filters_element.dart @@ -15,11 +15,11 @@ class FiltersElement extends TestElement { FiltersElement(FlutterDriver driver) : super(driver); - Future tapShowAll() async => await driver.tap(_allFilter); + Future tapShowAll() async => await driver.tap(_allFilter); - Future tapShowActive() async => await driver.tap(_activeFilter); + Future tapShowActive() async => await driver.tap(_activeFilter); - Future tapShowCompleted() async { + Future tapShowCompleted() async { return await driver.tap(_completedFilter); } } diff --git a/integration_tests/lib/page_objects/screens/add_test_screen.dart b/integration_tests/lib/page_objects/screens/add_test_screen.dart index c2d8a81a..85b73deb 100644 --- a/integration_tests/lib/page_objects/screens/add_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/add_test_screen.dart @@ -19,30 +19,30 @@ class AddTestScreen extends TestScreen { AddTestScreen(FlutterDriver driver) : super(driver); @override - Future isReady({Duration timeout}) => + Future isReady({Duration? timeout}) => widgetExists(driver, _addScreenFinder); - Future tapBackButton() async { + Future tapBackButton() async { await driver.tap(_backButtonFinder); return this; } - Future enterTask(String task) async { + Future enterTask(String task) async { // must set focus to 'enable' keyboard even though focus already set await driver.tap(_taskFieldFinder); await driver.enterText(task); await driver.waitFor(find.text(task)); } - Future enterNote(String note) async { + Future enterNote(String note) async { // must set focus to 'enable' keyboard even though focus already set await driver.tap(_noteFieldFinder); await driver.enterText(note); await driver.waitFor(find.text(note)); } - Future tapSaveNewButton() async { + Future tapSaveNewButton() async { await driver.tap(_saveNewButtonFinder); } } diff --git a/integration_tests/lib/page_objects/screens/details_test_screen.dart b/integration_tests/lib/page_objects/screens/details_test_screen.dart index f934b787..00692906 100644 --- a/integration_tests/lib/page_objects/screens/details_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/details_test_screen.dart @@ -22,7 +22,7 @@ class DetailsTestScreen extends TestScreen { DetailsTestScreen(FlutterDriver driver) : super(driver); @override - Future isReady({Duration timeout}) => + Future isReady({Duration? timeout}) => widgetExists(driver, _detailsScreenFinder, timeout: timeout); Future get task => driver.getText(_taskFinder); @@ -45,7 +45,7 @@ class DetailsTestScreen extends TestScreen { await driver.tap(_deleteButtonFinder); } - Future tapBackButton() async { + Future tapBackButton() async { return await driver.tap(_backButtonFinder); } } diff --git a/integration_tests/lib/page_objects/screens/edit_test_screen.dart b/integration_tests/lib/page_objects/screens/edit_test_screen.dart index 38a63cf5..20f31b56 100644 --- a/integration_tests/lib/page_objects/screens/edit_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/edit_test_screen.dart @@ -19,7 +19,7 @@ class EditTestScreen extends TestScreen { EditTestScreen(FlutterDriver driver) : super(driver); @override - Future isReady({Duration timeout}) => + Future isReady({Duration? timeout}) => widgetExists(driver, _editScreenFinder, timeout: timeout); Future tapBackButton() async { diff --git a/integration_tests/lib/page_objects/screens/home_test_screen.dart b/integration_tests/lib/page_objects/screens/home_test_screen.dart index 16628e65..d38db962 100644 --- a/integration_tests/lib/page_objects/screens/home_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/home_test_screen.dart @@ -25,11 +25,11 @@ class HomeTestScreen extends TestScreen { HomeTestScreen(FlutterDriver driver) : super(driver); @override - Future isLoading({Duration timeout}) async => + Future isLoading({Duration? timeout}) async => TodoListElement(driver).isLoading; @override - Future isReady({Duration timeout}) => TodoListElement(driver).isReady; + Future isReady({Duration? timeout}) => TodoListElement(driver).isReady; TodoListElement get todoList { return TodoListElement(driver); diff --git a/integration_tests/lib/page_objects/screens/test_screen.dart b/integration_tests/lib/page_objects/screens/test_screen.dart index ad7887a7..93df44be 100644 --- a/integration_tests/lib/page_objects/screens/test_screen.dart +++ b/integration_tests/lib/page_objects/screens/test_screen.dart @@ -11,9 +11,9 @@ abstract class TestScreen { TestScreen(this.driver); - Future isLoading({Duration timeout}) async { + Future isLoading({Duration? timeout}) async { return !(await isReady(timeout: timeout)); } - Future isReady({Duration timeout}); + Future isReady({Duration? timeout}); } diff --git a/integration_tests/lib/page_objects/utils.dart b/integration_tests/lib/page_objects/utils.dart index 042f4117..91c316d6 100644 --- a/integration_tests/lib/page_objects/utils.dart +++ b/integration_tests/lib/page_objects/utils.dart @@ -9,7 +9,7 @@ import 'package:flutter_driver/flutter_driver.dart'; Future widgetExists( FlutterDriver driver, SerializableFinder finder, { - Duration timeout, + Duration? timeout, }) async { try { await driver.waitFor(finder, timeout: timeout); @@ -23,7 +23,7 @@ Future widgetExists( Future widgetAbsent( FlutterDriver driver, SerializableFinder finder, { - Duration timeout, + Duration? timeout, }) async { try { await driver.waitForAbsent(finder, timeout: timeout); diff --git a/integration_tests/pubspec.yaml b/integration_tests/pubspec.yaml index 05b8ee31..7eea9988 100644 --- a/integration_tests/pubspec.yaml +++ b/integration_tests/pubspec.yaml @@ -2,17 +2,13 @@ name: integration_tests description: An integration test suite for the Flutter Architecture Samples environment: - sdk: ">=2.0.0-dev.28.0 <3.0.0" + sdk: ">=3.0.0 <4.0.0" dependencies: test: flutter: sdk: flutter - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.0 - dev_dependencies: flutter_driver: sdk: flutter diff --git a/todos_app_core/.flutter-plugins-dependencies b/todos_app_core/.flutter-plugins-dependencies index 8885f09e..ea4ac95d 100644 --- a/todos_app_core/.flutter-plugins-dependencies +++ b/todos_app_core/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"android":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":[]}],"date_created":"2020-02-10 11:24:47.749791","version":"1.14.7-pre.38"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"path_provider_android","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_android-2.2.17/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"path_provider_foundation","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"path_provider_linux","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"path_provider_windows","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2025-07-05 15:37:05.164581","version":"3.32.5","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file diff --git a/todos_app_core/lib/src/localization.dart b/todos_app_core/lib/src/localization.dart index 642ddac3..fd83b871 100644 --- a/todos_app_core/lib/src/localization.dart +++ b/todos_app_core/lib/src/localization.dart @@ -22,7 +22,9 @@ class ArchSampleLocalizations { static ArchSampleLocalizations of(BuildContext context) { return Localizations.of( - context, ArchSampleLocalizations); + context, + ArchSampleLocalizations, + )!; } String get todos => Intl.message( diff --git a/todos_app_core/lib/src/localizations/messages_all.dart b/todos_app_core/lib/src/localizations/messages_all.dart index 839d9511..12e1112d 100644 --- a/todos_app_core/lib/src/localizations/messages_all.dart +++ b/todos_app_core/lib/src/localizations/messages_all.dart @@ -20,7 +20,7 @@ Map _deferredLibraries = { 'en': () => Future.value(null), }; -MessageLookupByLibrary _findExact(localeName) { +MessageLookupByLibrary? _findExact(String? localeName) { switch (localeName) { case 'en': return messages_en.messages; @@ -45,9 +45,11 @@ bool _messagesExistFor(String locale) { } } -MessageLookupByLibrary _findGeneratedMessagesFor(locale) { +MessageLookupByLibrary? _findGeneratedMessagesFor(locale) { var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null); + if (actualLocale == null) return null; + return _findExact(actualLocale); } diff --git a/todos_app_core/lib/src/optional.dart b/todos_app_core/lib/src/optional.dart index 59d8e146..6342a128 100644 --- a/todos_app_core/lib/src/optional.dart +++ b/todos_app_core/lib/src/optional.dart @@ -10,7 +10,7 @@ import 'dart:collection'; /// values to be null. It signals that a value is not required and provides /// convenience methods for dealing with the absent case. class Optional extends IterableBase { - final T _value; + final T? _value; /// Constructs an empty Optional. const Optional.absent() : _value = null; @@ -40,13 +40,13 @@ class Optional extends IterableBase { if (_value == null) { throw StateError('value called on absent Optional.'); } - return _value; + return _value!; } /// Executes a function if the Optional value is present. void ifPresent(void Function(T value) ifPresent) { if (isPresent) { - ifPresent(_value); + ifPresent(_value!); } } @@ -70,7 +70,7 @@ class Optional extends IterableBase { } /// Gets the Optional value, or [null] if there is none. - T get orNull => _value; + T? get orNull => _value; /// Transforms the Optional value. /// @@ -80,12 +80,12 @@ class Optional extends IterableBase { Optional transform(S Function(T value) transformer) { return _value == null ? Optional.absent() - : Optional.of(transformer(_value)); + : Optional.of(transformer(_value!)); } @override Iterator get iterator => - isPresent ? [_value].iterator : Iterable.empty().iterator; + isPresent ? [_value!].iterator : Iterable.empty().iterator; /// Delegates to the underlying [value] hashCode. @override diff --git a/todos_app_core/lib/src/theme.dart b/todos_app_core/lib/src/theme.dart index b03c5b87..703e9304 100644 --- a/todos_app_core/lib/src/theme.dart +++ b/todos_app_core/lib/src/theme.dart @@ -6,27 +6,6 @@ import 'package:flutter/material.dart'; class ArchSampleTheme { static ThemeData get theme { - final themeData = ThemeData.dark(); - final textTheme = themeData.textTheme; - final body1 = textTheme.body1.copyWith(decorationColor: Colors.transparent); - - return ThemeData.dark().copyWith( - primaryColor: Colors.grey[800], - accentColor: Colors.cyan[300], - buttonColor: Colors.grey[800], - textSelectionColor: Colors.cyan[100], - toggleableActiveColor: Colors.cyan[300], - floatingActionButtonTheme: FloatingActionButtonThemeData( - backgroundColor: Colors.cyan[300], - ), - snackBarTheme: SnackBarThemeData( - backgroundColor: themeData.dialogBackgroundColor, - contentTextStyle: body1, - actionTextColor: Colors.cyan[300], - ), - textTheme: textTheme.copyWith( - body1: body1, - ), - ); + return ThemeData.light(useMaterial3: true); } } diff --git a/todos_app_core/pubspec.yaml b/todos_app_core/pubspec.yaml index e4973028..73b83a26 100644 --- a/todos_app_core/pubspec.yaml +++ b/todos_app_core/pubspec.yaml @@ -1,7 +1,7 @@ name: todos_app_core environment: - sdk: '>=2.0.0-dev.28.0 <3.0.0' + sdk: '>=3.0.0 <4.0.0' dependencies: intl: diff --git a/todos_repository_core/lib/src/todo_entity.dart b/todos_repository_core/lib/src/todo_entity.dart index 56429e66..9cdb6f26 100644 --- a/todos_repository_core/lib/src/todo_entity.dart +++ b/todos_repository_core/lib/src/todo_entity.dart @@ -38,7 +38,7 @@ class TodoEntity { return 'TodoEntity{complete: $complete, task: $task, note: $note, id: $id}'; } - static TodoEntity fromJson(Map json) { + static TodoEntity fromJson(Map json) { return TodoEntity( json['task'] as String, json['id'] as String, diff --git a/todos_repository_core/lib/src/user_entity.dart b/todos_repository_core/lib/src/user_entity.dart index e04d85c3..ba66a7b4 100644 --- a/todos_repository_core/lib/src/user_entity.dart +++ b/todos_repository_core/lib/src/user_entity.dart @@ -7,7 +7,11 @@ class UserEntity { final String displayName; final String photoUrl; - UserEntity({this.id, this.displayName, this.photoUrl}); + UserEntity({ + required this.id, + required this.displayName, + required this.photoUrl, + }); @override bool operator ==(Object other) => diff --git a/todos_repository_core/pubspec.yaml b/todos_repository_core/pubspec.yaml index 0c906d71..72d3a8cb 100644 --- a/todos_repository_core/pubspec.yaml +++ b/todos_repository_core/pubspec.yaml @@ -2,7 +2,7 @@ name: todos_repository_core description: An app-agnostic data source that can be used by all implementations environment: - sdk: '>=2.0.0 <3.0.0' + sdk: '>=3.0.0 <4.0.0' dependencies: meta: diff --git a/todos_repository_local_storage/lib/src/key_value_storage.dart b/todos_repository_local_storage/lib/src/key_value_storage.dart index e43ea6ee..734e757f 100644 --- a/todos_repository_local_storage/lib/src/key_value_storage.dart +++ b/todos_repository_local_storage/lib/src/key_value_storage.dart @@ -4,7 +4,7 @@ import 'dart:convert'; -import 'package:key_value_store/key_value_store.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; /// Loads and saves a List of Todos using a provided KeyValueStore, which works @@ -16,23 +16,29 @@ import 'package:todos_repository_core/todos_repository_core.dart'; /// LocalStorageRepository. class KeyValueStorage implements TodosRepository { final String key; - final KeyValueStore store; + final SharedPreferences sharedPreferences; final JsonCodec codec; - const KeyValueStorage(this.key, this.store, [this.codec = json]); + const KeyValueStorage(this.key, this.sharedPreferences, [this.codec = json]); @override Future> loadTodos() async { + final todos = sharedPreferences.getString(key); + + if (todos == null) { + throw Exception('No todos found for key: $key'); + } + return codec - .decode(store.getString(key))['todos'] - .cast>() + .decode(todos)['todos'] + .cast>() .map(TodoEntity.fromJson) .toList(growable: false); } @override Future saveTodos(List todos) { - return store.setString( + return sharedPreferences.setString( key, codec.encode({ 'todos': todos.map((todo) => todo.toJson()).toList(), diff --git a/todos_repository_local_storage/lib/src/reactive_repository.dart b/todos_repository_local_storage/lib/src/reactive_repository.dart index 2e0e4502..f26f1c9a 100644 --- a/todos_repository_local_storage/lib/src/reactive_repository.dart +++ b/todos_repository_local_storage/lib/src/reactive_repository.dart @@ -2,10 +2,8 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; import 'dart:core'; -import 'package:meta/meta.dart'; import 'package:rxdart/subjects.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -17,8 +15,8 @@ class ReactiveLocalStorageRepository implements ReactiveTodosRepository { bool _loaded = false; ReactiveLocalStorageRepository({ - @required TodosRepository repository, - List seedValue, + required TodosRepository repository, + List? seedValue, }) : _repository = repository, _subject = seedValue != null ? BehaviorSubject>.seeded(seedValue) @@ -56,9 +54,10 @@ class ReactiveLocalStorageRepository implements ReactiveTodosRepository { _loaded = true; _repository.loadTodos().then((entities) { - _subject.add(List.unmodifiable( - [if (_subject.value != null) ..._subject.value, ...entities], - )); + _subject.add(List.unmodifiable([ + ..._subject.value, + ...entities, + ])); }); } diff --git a/todos_repository_local_storage/lib/src/repository.dart b/todos_repository_local_storage/lib/src/repository.dart index eb5b52b8..9280ecef 100644 --- a/todos_repository_local_storage/lib/src/repository.dart +++ b/todos_repository_local_storage/lib/src/repository.dart @@ -2,11 +2,10 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; import 'dart:core'; -import 'package:meta/meta.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; + import 'web_client.dart'; /// A class that glues together our local file storage and web client. It has a @@ -16,7 +15,7 @@ class LocalStorageRepository implements TodosRepository { final TodosRepository webClient; const LocalStorageRepository({ - @required this.localStorage, + required this.localStorage, this.webClient = const WebClient(), }); diff --git a/todos_repository_local_storage/pubspec.yaml b/todos_repository_local_storage/pubspec.yaml index 0587370d..4a27c0b6 100644 --- a/todos_repository_local_storage/pubspec.yaml +++ b/todos_repository_local_storage/pubspec.yaml @@ -2,15 +2,15 @@ name: todos_repository_local_storage description: An app-agnostic data source that can be used by all implementations environment: - sdk: '>=2.2.2 <3.0.0' + sdk: '>=3.0.0 <4.0.0' dependencies: flutter: sdk: flutter todos_repository_core: path: ../todos_repository_core - rxdart: ^0.23.1 - key_value_store: + rxdart: + shared_preferences: dev_dependencies: test: diff --git a/todos_repository_local_storage/test/key_value_storage_test.dart b/todos_repository_local_storage/test/key_value_storage_test.dart index c59ff825..e2caca2e 100644 --- a/todos_repository_local_storage/test/key_value_storage_test.dart +++ b/todos_repository_local_storage/test/key_value_storage_test.dart @@ -2,13 +2,13 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:key_value_store/key_value_store.dart'; import 'package:mockito/mockito.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -class MockKeyValueStore extends Mock implements KeyValueStore {} +class MockKeyValueStore extends Mock implements SharedPreferences {} void main() { group('KeyValueStorage', () { diff --git a/vanilla/.metadata b/vanilla/.metadata index 1b5cec02..fdb4416b 100644 --- a/vanilla/.metadata +++ b/vanilla/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "fcf2c11572af6f390246c056bc905eca609533a0" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: android + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: ios + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: linux + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: macos + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: web + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: windows + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/vanilla/analysis_options.yaml b/vanilla/analysis_options.yaml new file mode 100644 index 00000000..0d290213 --- /dev/null +++ b/vanilla/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/vanilla/android/.gitignore b/vanilla/android/.gitignore index bc2100d8..be3943c9 100644 --- a/vanilla/android/.gitignore +++ b/vanilla/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/vanilla/android/app/build.gradle b/vanilla/android/app/build.gradle deleted file mode 100644 index 7489a6f9..00000000 --- a/vanilla/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.vanilla" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/vanilla/android/app/build.gradle.kts b/vanilla/android/app/build.gradle.kts new file mode 100644 index 00000000..714aef16 --- /dev/null +++ b/vanilla/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.vanilla" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.vanilla" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/vanilla/android/app/src/debug/AndroidManifest.xml b/vanilla/android/app/src/debug/AndroidManifest.xml index d1bf7acd..399f6981 100644 --- a/vanilla/android/app/src/debug/AndroidManifest.xml +++ b/vanilla/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/vanilla/android/app/src/main/AndroidManifest.xml b/vanilla/android/app/src/main/AndroidManifest.xml index 7ee3bec6..732b20b0 100644 --- a/vanilla/android/app/src/main/AndroidManifest.xml +++ b/vanilla/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/vanilla/android/app/src/main/kotlin/com/example/vanilla/MainActivity.kt b/vanilla/android/app/src/main/kotlin/com/example/vanilla/MainActivity.kt index 54d143cf..bd7af163 100644 --- a/vanilla/android/app/src/main/kotlin/com/example/vanilla/MainActivity.kt +++ b/vanilla/android/app/src/main/kotlin/com/example/vanilla/MainActivity.kt @@ -1,12 +1,5 @@ package com.example.vanilla -import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} +class MainActivity : FlutterActivity() diff --git a/vanilla/android/app/src/main/res/drawable-v21/launch_background.xml b/vanilla/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/vanilla/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/vanilla/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/vanilla/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/vanilla/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/vanilla/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 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 literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/vanilla/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/vanilla/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/vanilla/android/app/src/main/res/values/styles.xml b/vanilla/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/vanilla/android/app/src/main/res/values/styles.xml +++ b/vanilla/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/vanilla/android/app/src/profile/AndroidManifest.xml b/vanilla/android/app/src/profile/AndroidManifest.xml index d1bf7acd..399f6981 100644 --- a/vanilla/android/app/src/profile/AndroidManifest.xml +++ b/vanilla/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/vanilla/android/build.gradle b/vanilla/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/vanilla/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/vanilla/android/build.gradle.kts b/vanilla/android/build.gradle.kts new file mode 100644 index 00000000..89176ef4 --- /dev/null +++ b/vanilla/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/vanilla/android/gradle.properties b/vanilla/android/gradle.properties index 38c8d454..f018a618 100644 --- a/vanilla/android/gradle.properties +++ b/vanilla/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/vanilla/android/gradle/wrapper/gradle-wrapper.properties b/vanilla/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/vanilla/android/gradle/wrapper/gradle-wrapper.properties +++ b/vanilla/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/vanilla/android/settings.gradle b/vanilla/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/vanilla/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/vanilla/android/settings.gradle.kts b/vanilla/android/settings.gradle.kts new file mode 100644 index 00000000..ab39a10a --- /dev/null +++ b/vanilla/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.3" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/vanilla/ios/.gitignore b/vanilla/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/vanilla/ios/.gitignore +++ b/vanilla/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/vanilla/ios/Flutter/AppFrameworkInfo.plist b/vanilla/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..7c569640 100644 --- a/vanilla/ios/Flutter/AppFrameworkInfo.plist +++ b/vanilla/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 12.0 diff --git a/vanilla/ios/Flutter/Debug.xcconfig b/vanilla/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/vanilla/ios/Flutter/Debug.xcconfig +++ b/vanilla/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/vanilla/ios/Flutter/Release.xcconfig b/vanilla/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/vanilla/ios/Flutter/Release.xcconfig +++ b/vanilla/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/vanilla/ios/Podfile b/vanilla/ios/Podfile index b30a428b..e549ee22 100644 --- a/vanilla/ios/Podfile +++ b/vanilla/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/vanilla/ios/Runner.xcodeproj/project.pbxproj b/vanilla/ios/Runner.xcodeproj/project.pbxproj index f8757c55..7ce1ef68 100644 --- a/vanilla/ios/Runner.xcodeproj/project.pbxproj +++ b/vanilla/ios/Runner.xcodeproj/project.pbxproj @@ -3,22 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -26,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -37,14 +42,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -57,20 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -84,6 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -91,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -102,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -111,16 +121,26 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -147,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -157,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -170,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -191,20 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -220,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -231,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -253,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -285,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -293,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -309,16 +362,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = H54QW28H73; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -328,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -362,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -376,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -386,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -418,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -426,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -443,16 +542,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = H54QW28H73; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -470,16 +565,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = H54QW28H73; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -492,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/vanilla/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/vanilla/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/vanilla/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/vanilla/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/vanilla/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/vanilla/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/vanilla/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/vanilla/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/vanilla/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - + + + + IDEDidComputeMac32BitWarning + + + diff --git a/vanilla/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/vanilla/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/vanilla/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/vanilla/ios/Runner/AppDelegate.swift b/vanilla/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/vanilla/ios/Runner/AppDelegate.swift +++ b/vanilla/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 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 U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 zcmV<84ju7{P)eM-ZTF#Iu^~aV=HLuxJUHhR;)%U74Ro7H+I)AV6nd+LnWBHl$ z_iRKpibs=q`uttg_rd3t_aSi}ncMli?D2H?eCVOeq8%e&%w+Q=2Z-{?Uaw z?1o_|Z&_538tQw!F1=9C2i#Y~^L+X`Z_B>2x9smQX-RodLajOS^o5%BXdxkf98Kl| zy1^^q;Zxra>krC%px>AMB?mp^fNdEix>FV;Q#%*EPu77&zWARwGt6ptno7`FSg zp?K6M{Ji9GvF2IH$6++o!p0;f4zhF!qDo72*qrvs!g!hNi=Pkbf=1cVxl9$5(V8Dgj z_G-BhU8ae`CNw3S4ZaVTP~Vs7y@35CFUieed@usvW9t}RE~2qVp&pHq8d^LI|Bmmq zy1b40%cn+tB_5+BxjwT~#Q6H@zUOVsi^xoF) zmwsNEpR<4H8?);KOSsD`Dfj2C=4!L~Mr)%Q9tzh`L29T*D~d;Tg6`{eW4tHT6_z4b;LibqpX{C*qi`;_zP`|NZ*Za#QSj(WHu``>I^Htr{4BJkQWQWI6q z;{)ob5*CE_2T;#f+-|o`Q?rs^(QrfeH(PJEM@A5j3R|2$JTy3*=Wc+|d0^Y}zBXqG^^BZlQwIP^}-zSrp%f77tUvEB%-)>HeE*yKQcM ziR@B^8@j)t5YvGsK}~6f*ZWBgEq)%4Lcn>Y{@#W@`(SC=hWwb4a0B-@slya*cc2m5 zQ2Z@aLtj4peSBEIk2eq6>6O)xTnRULe-jrwBgCVnz+JsxC+hpKegWrYK~(rs$FN;k zT?@^XaD(?Z+wR1R3gS^g4x-`V!IShyf!^ACI^XNg+m$tb*Hu!uq5Dg?U3RN1NXTl~ zLKo_LwGJS?PylKu0CS?g*ZSjsJ5b=avriIk@cxG361j^CvIq*Yq_(UchSDGJ-A8?| z*Zmpk^Gfc45?64z!TXzdq3#I0w!G9(&ntBu(@|ONS{nUA- zS4B;at>?G1nTET{tf}`m{3MC(HE4{S{aN)DyXQ`4VzY4c_wcBP8ur1uKHJG}XR{Ai z-XMom`v|50&o|_qrvCj(l}s;=a>(=ucymR8CV?5Yd)$Nhz%J;7|R z?Nf_VL-B+w{N?mn`^G!%)Qdwet$zu8v^{61R#wXr?DE>W{btWt$@53y?x^dJz-x!4 zM!4{|Q>X1)Z?~ojVh4&xOXLe(qjr9Ett`Px-_LjD|6~7Rs;Y{Qx$cXO`VgFF%|qTd*Coi}sKN zTYP`iLqBhJHVlc05Rc+fNE0r6_wp^dqxF|TP&NF@#vxntc)o1G*1O)7O+&@^4}x$T z<#IaYY}#<)Czo#6T{5J+<0$|&R5;W!V%ujI%NFd7$vL~XDQtf<4JJN3EXWs7JQ}eh zFkJZ6g{yWC;W@Pa;?cLX=Ir47QrUt%_h82EmYo9kME}=9+1*rvx z3x7C&*;X_RNDrWAq`rT5$EY1&S}9ww|13PV>>av4>U*tjFfk)29>tdwE_J^eT@zf0kh~eQJ3Qrs^f8g_`x?X=E`^~}ocBxFion3Lk zet+nJx@XA#;MeqU4ESJ&)k`X=;!@B#ay!cOPWBn(9kq7kjA zAhqnmJ#*%a&E;}-Y;4TV&CO*V?BvR-{YX!NeG;J-vOgMmR5@>AGb%^{#iJnMW)f^Z zpSPo z%{<_d#TEOu&hg|h+C0Sv?jM5TfkawS{8*$v2nhJdkt6o6fBmbis;aU_j~-Qng_)U| zl7sD;U$$@P9CLxh>_WlYf!#v)N9m0UauyX#RD^ca_sPTl;OZR-Pv!XWBF1ZJAxN2Rp`PUY5s;`d$quWPcy6pNStFkHBk}sd4`MdcgKC zfBB33^{; zLk*Zu?azMpGyCmte_Q_^n^C}5rsnNl=IKCVb~%qm9tCzSb$?LaH#E~9D_;NpwYz?} z(f8Lce({U;+_`fERWegkQ);j$AI&jC2m$+r)d5V%Fnc;DEQ&|J=LP(YZ+ydEx^#(v z$`bHj?$6pi%q8Gc&I=jruhtDeDNga>zIVOGzWnmb_Qs7H1d|z)larQzTJ*=lO!4K! zcNS0~s-c|AWPhM08igwtyY5HeMU&X$sm7J|P68=M!15eR)-M4S-zHdh-92o~YK0ajONhu;F~Sr|gYp&W3RDJiZrIkU>#@kt_o)6bkm)j)9F~;L&6VvS_&3?=P6W z-4B-?R**($5fUHAQ-4$MLz|zNc%oo`(LP|c`S$iaLls#`p2z`;=w>ys7AU)Tlr92oE^}X7EFY5b% z_dx5P#r~3`#_wj0-c}t%saDQQN=7_@x z2D3lsKD~o8>y?Av;XxFSW`YcY;?ZOVJ;jI5oBDicKgo|ztza;M8}wOOPFqH5Xyj2m zni6_x{qf=Nhrh?(PqP2M!P#dW1~3u(N9=!94$an84$W9WE}*_w>!|WLWYe$6eFz9& z?xMl_yWHMt?W-IHFktqNF1*@3FcDvzwP<;P85EBu;?Ec`Z|42>4bM(UZVuyvfrx{- z`Pa#X%Hg@_vS10ef>P%tD~v@$C0z5`h8~6_peL(!~!M}`5t^AxA1J`$ozWZvZ#W39zTNO(L}=E zADKsepWKggY0kSm4&>&Z<$J6KMo`(GTYhT)$ovrrSsv4dFGeMbM>AnV7y@2-FZ8_Z zFF8ma4pR(FN+jfkKkm;j4DZV=L=U5Qv}j$xE8&B>ESjo605yGHdhgFI49nhxnifnj zhewxQyDz`^p#%Aas{Q%J>ixOJMmI#>=`zEDvMgRSW5VB)xn+LYL-vuqWIx%{VM^h@ Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 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 diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 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 diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/vanilla/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 zcmX9^dpuMB|DWqHw{k6)QGJkWrBE&-B;}Iauao2&llx^h*N|J0kTRE05lX0BX1U*! zkX+_|zie~cnC*9bf9LVo_Rs76x;&rH*X#X0J16O$i2)bKSq=~g#ASF}?>_KLJ^8S) z0^jE4-R>Ze;(J3q9g9$gjklJedFrH&y@dGnCOfxpSk2|S%e#at%Kv}uNTs%Fe%kc= z{o|stTd$9e`oC?PBNdUi#J?1m@iUr(6SOgKF2jUb(th28#6TrouiJ*HB9p9NRbTf83FqWj2IpJ3a3UE!AE)dIY(O zLM?_|yIZ^N^>^e-ciTG|6(Ti1_Mi+S)g)8%$-#uX=4IEBK7r{tgVDJIJX$XG@(gqu zT9si*+n)=$w&^u7qSk%Y-q=xN0*<;@+CVK_DAP-o2ElYk?6h~UL_nG)@&nOo29$|h zY;jFs$HFvHZ$9m`@#4eE1S9Nq6e{9%N(|D*Q?@?g`sox2(Sla1BK#&JMpY@~0< zBZ$@G%*=E1?pKINz_$_XlcSw~NXL{|hN12UW`Hpg8{?VV+830Hc3Q!VhONXHrdtm% zNc2hq$43*?qBV^nB;mGOQ|%T*P5cY#Q*A8B7weHjX65tIP-LO<)FT8R-ku+R>07=t z3~xchKFWU@9){KHX}XEVNdchpBYL- z$LM1)>8IPg3uf*wSfdsP`Fmhtp5Kws3{SmOBNN4l2V_L|)3BkACVd!l3Z~F2a`pp{ z{CT%XH~NPiIV{N?avmKJlIFT*ImI_+dU>)u7BnZ6gG7`+JbV38wHV658OgzJly?$e z@z`{7YJ!0IJv@iG5qx0xXk{mjKY@lU)W$%5Z;rE|iB8wmr z>ZOMG1=u}a8A>Ps;1aPx{q~jnNz&h7A{#O(6%~;!=ckKIUkSl5#)%v4FNHW!mS(6$ zge-cn>y9ScMCoi}kjL10kI#@1u2U8DE6T@`5?Tyu3F+xSzsH1H+K(jGpCSN707z%J zdRcyA%EXG`m9ONmi-O3}sQnf*HPy{MW|o`J5`p|-6UsLvC=CbGvoBZAL_(YIUA(}C zq$K|fWu)vCoj_OCV0fig=84)~>a-rL1fIdz)6rQaOv!>%rltZzUb?D%W}1Zc4GP|p z^H%($yryvII&8*cvkO_3a|6_Y3Ne^+^dZAqx&&@H*&jW<)x?7BK+&|>2kb$D(%M>D zK;v4|9Ja~chD+0dRd4AudR=&@TfB%M^b#NZa4vqnusVGTPNf2(*tJBxI)af-OBWbz z{}u9MvaMdJIVK5l37}>h;SU*cMPwmcN)}e1ygHC!bQ_m8IYZ|A(o~$x2-;Q+j*20J zQWJ2U^AN^JAmXdpZ86)xkZjk{4ECU3CG;0O^5|JL;*R-BHc19csy~NL+fwYV_;0)5 z%W;FaUN8;IxStl5tYw=dkzc>E6EOUb$3`0PW3?dN-=J=ErF>D$q7<>AyC(|T3xl9$ zqR32b*C?UXP!nNOAg3%!KwyHQTkUD^Li4IvWDraaCP8C)7O8_(y zlvI*W=vYDt0!2VKTd0xWn;c-m5=1XZ%;AijiCUeL1*OeU_`4O3R#322*R z^YD<>!O3Cv*gToP5Zm2hXcd+5B07IJJ+nsT*XseyIuxdR#iZl-IrKG>Gw42;>yG>( zZy=-m;d~>RyqY|YCCOo5(no2A>Vf+)wX=dO*oOHF4<~sj%}MSf*_RLshs{v=?*6@3 zN$DI=-Zo~KaQaj_uqKLLiMyzdqJ4Q}$4{l;lH6aUJb^8+N;NkgYPayn%b<0hmzJ8j$^?zlvr;Lf*Kh97Su1cHn+;u^#G3O1#u){t7b;o{_u% z=>+J(iSHBQSQU5g$7Te4KxgXbQJQHb+P`ur%3mj?C7IKZk)5wG?F13H)$~L6Wub}! zeH>;z?@d6+)TEY8nBTn8o!gnyHy-i9#WCrfsXS~QfYz1Qu@4?&ni{{k#w(mfg^U?D zqt}*Z;-U=^WA{~7%MVy?K9JWz@^CdHH9D)PJ@ot!vBAEcu&2Ue;S_fDskG>S{g?^;^wD*ohw|s zcpKojY7_RrdLdiP{wj5=vH_Mr=T?@imZZuv8uCP)ISH8ATDE!Ps|R_?QI&%GfL>rN ztuP-Ax}ZYDNxfzi5r-;1zlgYO)x;9-J?C_jXeKERjGcpVjA`G$Ag>`pLxb;1Y+(yS z7dIz0bgp|2fE|AWP=78~R_^g-B2Vtd%paR6r7j5@=`mHAzY={6aH>Fjy3h$$5qsGW(0gH8UKlG?5=vGF9!KVl6&i@&es-AsOp zp9<0)Acph32H!2xa$gk5s8UjLMnx{-E2x8tRvRzM15`=`xnQf`3Yp&?urrCo`kAgI zM15W%Gq&aQU~MVzD;f_62NeGD{|}P9$zQua(SkYqqe-k`$+$(Ol&e~Is>RDat5@Xc zZVTwmzo>{O4~9x7=Vr?qd?jWp{90!cj&MI8jJ@JbIc1ZsFjMGxvI&b;QS+YD#WE8% z_DUW#Feu2P_)K`k@1NuRnGF6(M(S`d;Fcja6jeUDK``_)q_;OX*3N<|bxHdR&YAAD z*plHPZ}S8h219H2;J2voe<42=t1A9-JvJle?K#|&-Iu#PA_TpsEzATI%1_0YVPz*$ z1kGv2C=csRcGhH+)_ce48;hr5S24Cw0gw^Z89B*w*n_80(Q22y^F~~Hu#yJ%BxIOp z;1a&E!g9h;%fV2fMD!5}|0VLD;DAGQ|KrPx_}fx`5SJHh5LP6PyxH(kWr){?5`7V! zN5nrlP_#c>el)QGMCD@Mjb&oEmny_h_H552$)Jx2utx^%TR#FvI(`A6UKq7lmk=2< zg+#~jgyauY9~`}JPCQ~|ElA{U@^(JCptc9{4rzn(CMTA?}7%zePs8T8JhxV`G6qwC*4z#68Gf+qB zN_=xfeZ7f2?#6emFQk~vDjrn0&^ch&q)#^U5#YBw$4`I*pI-7QYD-{g31{zs%;WN_ zzmds((azLSpue_7Z}`|3w!cK{Lf@Hz7^0rl&mita7Zz0gN6Dg(bq+l;uqd(m z4A}4Hq8PN>?aMw*v(ANKV*+%+DLXo!+N!Aa8Jjl(aCP?qa9Ck2`ec?x*rQAa;?5~M zCqF~@Izf)UslNZW!Ch(G>ZE37R%Yhp0!EO`%0rbt!GcDNtrCzk`u>v+6Ng4G`_Di+ znL>>#_8}IH#z=&jqy*uCughf>d*@lowEudn3jmS(%Y%Q%)|C@hK7hXqu}>K3F3f`O zw5q3h+Q1k`V19|R6?*_Bu$({IOj_Tm%d$73sLpb!Z4!eOzJGQV360j~m5V3$k%7Ys zU0@!(xj`-R*#j``=Yo7oN-|zxsUhYbcXm}#5&1VBD=8_C2YUcf z$x)2)Dp5b1B?<~=oEvvRIWZ}za0=e~y4UinY@dd&fCMh^{bdOTPMh*d6eJ3*Vd?;k z0#9=Jm(AY*FVQUThbP*=>zyneu{_5Dh#?+^BnYp3bwEaOJ4|S*s6Vv?qFCDVx6CzCR2LwqBQ$1 z+U73H#K4J)jD(dqTbL>Y6;>4NwSfs>R;_{t0sWInMko#ZjUK;SH+6y#E=HS0u#u%A zbN##=__>h9q0mi=Ilzo(M;Z>E<+J=hfKG;z@5S)s=3Tkd=G7woRa8^xG{RjGUY}P2 zP*)?s#E&b&*fDHNipX^Fw~;Q=v40ylmcG4^`bZBEQgd@#x+L8x>IPg=%57Q!oZfCv zce97Gt*>qQ*M*$hOtTubXj-f6Ga77MMg6|IV=k=*LB>}%S z7z-8KT~#zt_~2~1f*K`Zrd^Kh9;3QcevFvNp|IdxEzo!PUuY;%{eBy4mFg}uavx7% zOC1w@M^z`DUJBANNsR5x3!9aaQyW_*YB)%SX|!me3EU!d_??GWuacrV0wDKkZ_A8M zb3))XR~9G+X`+Sk%T>L^#TaEgCXzzA+DpEI zmFcGF9RdgTZIhAdkvLo&k%tvGmwZb>;EKPPK`dxuixP!|tSm{yz4UI}SnNzRdeEUL zN!Itxac;-5HsJls%%gTW^Lvd@7qHcv8>V~+0oW4_ z?qlBBiDjkEyFxTR@qNd~9l#26^rz*_#*f;I_{%xY)lp##PjF1$ruilA2!Zt{ocmxo zp^8Y_m6$&Ic*>O@6KMvIiUrr9?+*NBnX=LDf8x~tt0p|S#x}3X&o882y}IBTPO};+ zCOWc0`zMd}b*>gJ_avqa*X zKY?wQF-z-BxsE!Pp%yA$Tk+c^eWVt^bVpC5(Vi6oRgol692P_y(l7<8zWh1c21|Tw zG(!Ku!vs1w?BGKo6bPYEUYw90|Ci}C+CW4?M{%X0TKh~zj2-VNnVV-rJ^0OZL%uZM z)$RHL{8!Lp68&Sr>wjS4`^SGOYlDa0rOYhjiPfMPYn;xXbNf)uJ5YEp&Vhd5o`fYH zz9O3{RhEcr$lf(mANixh_xl1p&A*~mo6v$gZ?M`cmn+V#Mh-puijo4qLs61V9g+~w zDtW(Ig}7Trg~VhthF>Uf!Ofj-V&{gn@nmm>!yJyNO_PP@9q1>Iiua}871x#2{kKWl z7WPpq7PUH9l*=enZ%jFp?VGnP#KwzmiO`@^5br%D>-GC1Va{Qe=5|YX!(g0n8`=do zUy{cU5xwn$gb?=)(tC=&WBgEZh}#oX^;?jST0qzI#fX~XNEGpHLJMNK^7nA@J{a;6 zM>_tuth8+~t%SsoO+yoFhKj#mPD6_QGVXku`oufYlKN>h^x*G@D*h@7Yrq7AxP z{rXhr>u>*O5`V|&;z#2ns=Dx-d(o{w6S5@x6J{cD&xVCOeox)sIksI=su+|I>dGXc zFPF!ViVYqOO)hga%U7`L)5NIf!59g?8K`9S2WC|^+)-Rm*}(6bkUMjvXaojJp=Dg7 z)xMFH-9G68Z&Bf*bW*u)Cc4u(1{Xt+bA~c#LAUE?h`;;KgcJACtVi{|n9kv43BihW zcdHf}lz^#rp6+chy?nw}`IbmQy?^=5EVKd7d)8JGh$Jv@6irqLZ4BI5+nnnpL_;}g zgw(nA)iJe1Dom-Oa1_%m8>`8Xp~o!TU1^k2nR`gOE%5JWTT z??o>I5%msT+PIigjx&e&_J;(miuKk~J;Fvwp4=ImF)cd(CmwW2MJk(u*P2F$F-@!( zWSdnj8V>)-Y=iD$=IQ%^OsF6U9mem?O26^jd$Q-sC!Ur1`Y^7h?#H9X1!&9|Q_EU2 zgX9AZWL>@hjwxAjl8qDHc17vZcL^zX%U`u8`6}V4<|A>+9Fa7JPG?4H8&A}On}YIG z4jbgV`WXD6V@XmlB|?VnyEDA&L(v-(4Ox+EdteQeJYt3dc|?1_05&ws-@PgB@;1+T68zXS3gvImteP!ifTz_Dt5>@BL- zTV!omynzXr|6My%xz~r7fFU3+!nYT!&5fb|s|Iz5NM3)pW3)|$90kqEdvM%}(n&+u z5<*v(L^ZR`+@i4#Aigi<&e!1S*80_$>GI+w1|ZAYSGd9i_xs*{)2naMFTS8Hg^%s?Gw zpn^K{;=CJwttC{s<*8~SoM|VmU>Lq`@}!5n!;CZiI)f_rD3a9BG%#xzn=(~ew1O!p@qqy~mjtL`8WJYdBj$!LKP)4F@oW1wa@S!X zk_pGQ2PIG&qM*x+Gb;?WhJD$pEjadG@M#Sk6F5!0#1ye4orJaU^N;pPt~KBo`&U~h z9xm1SHNTyR>w~3B6P_4J&3KXi60aXT2!ajCSva$#XZtoczsR$odC70s?1X7aY3-)# zr}w0JmE|>f6ooMK>>*%uLaL&6ntwHjs;Ao4*=qU~!^iREq{^4&w%s#I(kYAcxd}Up zwYSoH)_l+p!Rqk-D>#=o$A_we*e+>qH2AHk8@L5I8}*yOJ?Qk~`?@N+ICOB?%6#cP zu!YrK8}*gH-Qs`T3*4xI;Zw8yQZ4?WcnM~VIGOm{I2V2TG}#NqB@lFwIa*W|`O$Z1 zKrTP(0hCg`zlNtnp0;47X3HPsDnSdjV2b%`v5)2@$zOj$m#c;@;K{wq^xy{yQzzST z0GfpoVHxl<=EZ{=TK^c>h^#Ko9T%H=ISnjXA|QxqFv`3x1mj5gk1!t*^yj^%tVrbM zFw<-Jw9Fe-b-Y2$d`vZ*?oZomsv)vcpCk-^3TA*$KflgEY58q-qS14jd5){OFlf31 z()_-uSTUgK=6z2u&se|an@w}bSabSHat+L;#%0snvj8q*c5$ z?J(5Y&G!7>E%eRTzy2jWT`ix>k(c16P<_U*6c*eY7&As#YU$@1>J6%Y&9yZ+0jz@2 z&{cAOB|QL_>B7k6O~FRB;{<`6rS(6nF~(f0GHBQvJpAiWmoH7@W_{8H>3PmR(ju#^ z=9#)FZ8GG2rlf;9+p748(z5tI*nI?L8heCyJoC6T*_tG7AA` z%rHp$ir(aWz^mc(BTT)xEeBQ|_6Gn}Zd0sajKk}{=&l(?vw%+{*z44p?HuMf%mv26 zQzy1`lNYDZSsD{E%_u4+98-yDo0IglO>v_QT3;mY?$FO-vi6N#uTF2Cb5itX#PrkPB#KW-IG z0VU(+*^diPYecLrxuG0rgNq~I+KuA`YmSb0b)85?WDPJ_y9C(N`a zk6SC>BBIxw#4J-z5{o#i9{FCnKu}Ptf)ldG1Iwj~WwL+d**D}4Wt89P1P+N9MZEuY z^gYqyLo?t|1V8#(S?S38{vO=n5+SUKNZenCKFl1zn{hL?SPN>&Curo0JzuKfN|(c7 zZUjAhCR_f##G0O~2@r%Xw_l9WkNmIPX>$~PhpgUnioM(V!Wj~)F0iY)58Mk1x;8R0 zVip;x$;EvOx;&B@2eYibV5Li`?o+K&<(}BXT%n~U$mOiEGBeH!QYkyjA4*F*1k`zx z+dZ6}qdL6J(IyeWVVNNey?Zi)_15%@i`yPdt^^Rk%Y)7sm8bn&M`E>KSQc6uj+x9V;>J6dFxUM zN%g=&nv^bY^+#hHr>dxt!}=C{QiC=_#g>SJWIPHLwNvHxZgBof0?#lm7VJr<9e)kk zcKTQAEwuUfbF9C=e@^20A@`uYAqY#*O=X534&vv>_}HxZ0hu+vn%=WJG`Ucim{nVFsGK6qDK6T5m@eB&$D>0yR6%f-;E# zm5)k{Hr9O8FufyFqUZ2mJ^6h8R!5J1vN!M^tthlCxB4DwX=%ypdgs^p_!)9lq@CH= z)+!8%0Y@$sC$@)utA$AVl z6kaR0yV#pO4CvmIIM=?mm7eWfQCM7j-VbQyf{)ieP_oy1%bn%_$Fn~#2o)pZGCvDB z7FW?Y3J<>DRw@1(H@J9bh4=f9Jh>P2qiyW&0UlkBS(m)A?twt?^o?m5mwTA#)B5L` zNTKQ{2rCDd5g9JwsZm$kQdQS~&_lxacD~VGM0RKV$NYj$S;p)FUdq#{Mu9I@CK7I~ ztbZwexrC>O*Vvq3>!(J=7o;S`U$*HVW7pmtZ>DWjqFw3B81zaNmR1C#kz-Luo2rM4 z+3*!Iah}(9=GW-xEfu@@nM;xP|GEB0N3jbx9}rht;LWYQ49>Hyj0et+@B3T*Z+7H_ zo$nOFmD3B%&vgQ9(O1hb9z#X?f%_Y_iE`B*K0YNDb+2iX;oI0-5DJgr@8{STGuIfk znJQu?!0Te9L*>flP@3hN!<9;{FZ9Fps@DH$TaK3=C80)YQ`^kktG&S=k8$_tH;kMo+@ zJ)`NIZVuWvafdbCewXvHQ)`1PdsE1U_ z5ptE?fA6jiXQiu7|32H_-{1U<<`Mzb)8t18`mKx<2wP|&TAYQDb*Y3YFrj0n*w1zVNY{e(l6u2kG8O;me()RZ* z54#REAh5=7Z)7#oX%UC}69`XWbXhn#aet0uH8wWR*TXh^P~RjW0??~1_{;Xyr+}RZ z1e@>PDVutx6ut-B!6SFLBKJnDw+6Sfva)y$W%OZJuDH-@P50h<=Avz&ymx@}!O<6I zGp35I9dZ)l8=F;HXJK+a%%gZ~4TGkAKh$iXoi@4Xi=eX5ZmHDNeFov%Q7QfC#fRdtOIkQyaGw0f^;8V z2sPeyoYLGiHuG88QA&YYQ^f-PbD&X6(&5_r#?^F#%a2`%G=l-#6*Yh62j6ziCaI;r z$WGk6q^zv?G&k3bpVvw6!N8TB*RRHfmj?dW`5ymvwV0?B@eaQGds~+Bx>@#Ev-v;# z@eS*b!Bq}ch~UG#gWX=0s@?SQuSK-^2pMDQ)6-!%7sPWk)48*M3nzCcCMJ$x@dp;p z!5_2gX!FQaz`*ngm_J3xi{ab?znL9o*ERT1hCb7BVN}gop*v@U&rHmtPy$6?hA z{0t+Nl^Ww8wJ-SG2x~7ZwhFE57E0dl7?L+fzdau7Kp<6&9^F+`@fQ;5xyhLfZo4eA z&8q)K=v-P^`hmgFuIoPK@qm-MS>lp49_>hFl_F%I-nCqt;Wg4_R=ujXr192Z!_d?X zlk>JV+f;Ffx^`5RfWL~k*vLhWAFMcv0|!f*L;-nofau02XG;* zA%E1e!3EmWcU@HpYYtpSSnC^q+~~o9lTMc!w)(4@=^SL^8`hLzK9GuhL*nGnVRK3Uk-BCKAZs-HucUw%WHvI+SlV}#|LeL?M8aE+f@Pffrm6zW^LIct|ui30zSSnqE9aViiJf86e9zho% zWRCTJp!D#3aA?n1F@81#{;18Fz6`N=a%$A8iGg=kzHl#>sA0-zYzk96GQuYscMet+ z1ITo*ONGw!i6<(7mOg*VuKLDyU7y#S7Z;Z45`GxDZvd8>Tecnr^1$TGq^jC0+K8VM zFVF|srOO?C5~R#5Q1Sl08pf>@+=DdEAgyI9cHdsh^&W10~U-P^Xm8A z-m2^0h<6#9zELL(!;b#HZ6K}Fe5OC{1IMWVlp>t>`;7_L!}!Oe)0fN=G4O!@$HKN8 z`$qV?PUVYUh!hNykL<0gw+7-_!nVP!PB5{>-rbhRO$4aEW=1OG2wL{}--Wsil{ z@srV6+_B)QUKfuFG@x0Viriv-xij1u@p-j-1D>ApZ%3$(uchi8K$3F&8YDWUFx#RK zRf*JvvV)kHXGNs&Ro+>bH6QMqKE1Vh9iq-YWBunuFhuQ+U%k2IwVAnGW>l^v((B}$ zgyo$U67k(xy{?Pms;JQ45wDN`wp44%HDrTOk52d!=W*q1dL9$I@idCi^8OO&Jnhya z4(8J-?q>rvC=I|PWp#D1%F)qr?0$;Fbp~qB;fd(Qx}L9;6uKM>LuS59nqQ)jUHaQ2 z1tfYPQcK&m<(aFtHP~TQSLN^ijAQ|zpU^*SGzGh!8!315uaC{X>u>?4MdDn{P4Tht zW{t~)2IGJ2W#=B;oi_g zDkWrsBXMEtiZ0?{*z0`M{N^m~gC1#p4a-O?2?t)ydUiaB4!W>UmIrpiZ z(X%N#m(!E6s+W$*qxqX+`FG{9l_yFxrH@V92KM?en|*7wjSz4n^Xy}*-(4D(dL!T3 zeTB345;e;23ztt!gCFa=%kxog;%~|{C!fTIrh#J^Eg=_3b&%EsR^?sF!28K5(GJg5wJ_I#gz_+Xdm zeGOaKjYB;4b2N*jFX5>>@_Z)eUD)Wi(aVV}ZBZ6be+3Oc(f1s3Ght`Rtd|^Z#5%8$Y|N0wh z_xt$cZ=Ym|n3XfkG1|0`8+d9SI{(2>vEF+gz8?<;N>tmPIcZOyeKhjV{q{PDNtRhD zTvOEf!apqBNZ>dRy#qZSbDBLPHTgMFE&u&A4Ww~thHFKY->@AV!^FiS3U<&xsbF}c z*;EaBE=}6AwrbiIQI(36XhGbT)w%?I{I0?-0V<4oC?~rB#HNS4D|m8MO1@hB<3|Kbt<>aW?O#!6Mya30+%zbpWa8^sUY^9@^#QNYCF>kUCnE{`BCC5cm<+Y zRXBDF{EkUhu669)Q|S8;&Amtfo54Tm*XVZ%kuR9Al;McMs?|bCb|^Ga^#SC0W2RLsD1zPVGBV-1pDMN;Lmgow&_DK zI^}DZm?J*+E=;d9EtKoxABLxNes)z5?Gz{$BYjr20`U2OHh=4YZSeGLX;R|q7m6zB zH6`SUY=SmW4KdNOJ$n5p-oo+|G5lc@4j>0Qh^C3rL;~j}T@D}9rjEYSE#54xyD;B8 zcxAaxXgM`|bV?5lEdc!HTv)H#>5IaOz)qcWGnnkD&wK&9aFsz+#tSsKXIr7v7l;P( zyn7t$9`9G9*Y#0Z=6;nYAV+|Dym10v>((B6|omo>`NAs2)3$R

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/vanilla/ios/Runner/Info.plist b/vanilla/ios/Runner/Info.plist index bd94c30a..59cf3a65 100644 --- a/vanilla/ios/Runner/Info.plist +++ b/vanilla/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Vanilla CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/vanilla/ios/Runner/Runner-Bridging-Header.h b/vanilla/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/vanilla/ios/Runner/Runner-Bridging-Header.h +++ b/vanilla/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/vanilla/ios/RunnerTests/RunnerTests.swift b/vanilla/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/vanilla/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/vanilla/lib/app.dart b/vanilla/lib/app.dart index e544ba8f..64342b3b 100644 --- a/vanilla/lib/app.dart +++ b/vanilla/lib/app.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -14,7 +13,7 @@ import 'package:vanilla/screens/home_screen.dart'; class VanillaApp extends StatefulWidget { final TodosRepository repository; - VanillaApp({@required this.repository}); + VanillaApp({required this.repository}); @override State createState() { @@ -46,7 +45,6 @@ class VanillaAppState extends State { Widget build(BuildContext context) { return MaterialApp( onGenerateTitle: (context) => VanillaLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), VanillaLocalizationsDelegate(), @@ -99,10 +97,10 @@ class VanillaAppState extends State { void updateTodo( Todo todo, { - bool complete, - String id, - String note, - String task, + bool? complete, + String? id, + String? note, + String? task, }) { setState(() { todo.complete = complete ?? todo.complete; diff --git a/vanilla/lib/localization.dart b/vanilla/lib/localization.dart index 01a21469..7e4c92c4 100644 --- a/vanilla/lib/localization.dart +++ b/vanilla/lib/localization.dart @@ -9,7 +9,9 @@ import 'package:flutter/material.dart'; class VanillaLocalizations { static VanillaLocalizations of(BuildContext context) { return Localizations.of( - context, VanillaLocalizations); + context, + VanillaLocalizations, + )!; } String get appTitle => 'Vanilla Example'; diff --git a/vanilla/lib/main.dart b/vanilla/lib/main.dart index 48a3702f..e51db15c 100644 --- a/vanilla/lib/main.dart +++ b/vanilla/lib/main.dart @@ -3,20 +3,19 @@ // in the LICENSE file. import 'package:flutter/material.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; import 'package:vanilla/app.dart'; -Future main() async { +Future main({String? storageKey}) async { WidgetsFlutterBinding.ensureInitialized(); runApp( VanillaApp( repository: LocalStorageRepository( localStorage: KeyValueStorage( - 'vanilla', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + storageKey ?? 'vanilla', + await SharedPreferences.getInstance(), ), ), ), diff --git a/vanilla/lib/main_web.dart b/vanilla/lib/main_web.dart deleted file mode 100644 index 4d1b687e..00000000 --- a/vanilla/lib/main_web.dart +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - -import 'dart:html'; - -import 'package:flutter/material.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -import 'package:vanilla/app.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - VanillaApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'vanilla', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ); -} diff --git a/vanilla/lib/models.dart b/vanilla/lib/models.dart index 50f610f6..110b3ed3 100644 --- a/vanilla/lib/models.dart +++ b/vanilla/lib/models.dart @@ -26,7 +26,6 @@ class AppState { case VisibilityFilter.completed: return todo.complete; case VisibilityFilter.all: - default: return true; } }).toList(); @@ -76,7 +75,7 @@ class Todo { String note; String task; - Todo(this.task, {this.complete = false, this.note = '', String id}) + Todo(this.task, {this.complete = false, this.note = '', String? id}) : id = id ?? Uuid().generateV4(); @override @@ -105,9 +104,9 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, - id: entity.id ?? Uuid().generateV4(), + id: entity.id, ); } } diff --git a/vanilla/lib/screens/add_edit_screen.dart b/vanilla/lib/screens/add_edit_screen.dart index 8c9e93f7..d73d5756 100644 --- a/vanilla/lib/screens/add_edit_screen.dart +++ b/vanilla/lib/screens/add_edit_screen.dart @@ -2,23 +2,20 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; import 'package:vanilla/widgets/typedefs.dart'; class AddEditScreen extends StatefulWidget { - final Todo todo; + final Todo? todo; final TodoAdder addTodo; final TodoUpdater updateTodo; AddEditScreen({ - Key key, - @required this.addTodo, - @required this.updateTodo, + Key? key, + required this.addTodo, + required this.updateTodo, this.todo, }) : super(key: key ?? ArchSampleKeys.addTodoScreen); @@ -27,10 +24,10 @@ class AddEditScreen extends StatefulWidget { } class _AddEditScreenState extends State { - static final GlobalKey formKey = GlobalKey(); + final GlobalKey _formKey = GlobalKey(); - String _task; - String _note; + String? _task; + String? _note; @override Widget build(BuildContext context) { @@ -43,30 +40,27 @@ class _AddEditScreenState extends State { body: Padding( padding: EdgeInsets.all(16.0), child: Form( - key: formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, + key: _formKey, + canPop: true, child: ListView( children: [ TextFormField( - initialValue: widget.todo != null ? widget.todo.task : '', + initialValue: widget.todo != null ? widget.todo!.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.titleLarge, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint), - validator: (val) => val.trim().isEmpty + validator: (val) => val?.trim().isEmpty ?? true ? ArchSampleLocalizations.of(context).emptyTodoError : null, onSaved: (value) => _task = value, ), TextFormField( - initialValue: widget.todo != null ? widget.todo.note : '', + initialValue: widget.todo != null ? widget.todo!.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.bodyMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), @@ -83,17 +77,18 @@ class _AddEditScreenState extends State { tooltip: isEditing ? ArchSampleLocalizations.of(context).saveChanges : ArchSampleLocalizations.of(context).addTodo, - child: Icon(isEditing ? Icons.check : Icons.add), + child: Icon(Icons.check), onPressed: () { - final form = formKey.currentState; + final form = _formKey.currentState!; + if (form.validate()) { form.save(); - final task = _task; - final note = _note; + final task = _task!; + final note = _note!; if (isEditing) { - widget.updateTodo(widget.todo, task: task, note: note); + widget.updateTodo(widget.todo!, task: task, note: note); } else { widget.addTodo(Todo( task, diff --git a/vanilla/lib/screens/detail_screen.dart b/vanilla/lib/screens/detail_screen.dart index 0c3b0958..56a271b9 100644 --- a/vanilla/lib/screens/detail_screen.dart +++ b/vanilla/lib/screens/detail_screen.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; @@ -16,10 +15,10 @@ class DetailScreen extends StatelessWidget { final TodoUpdater updateTodo; DetailScreen({ - @required this.todo, - @required this.addTodo, - @required this.updateTodo, - @required this.onDelete, + required this.todo, + required this.addTodo, + required this.updateTodo, + required this.onDelete, }) : super(key: ArchSampleKeys.todoDetailsScreen); @override @@ -68,13 +67,13 @@ class DetailScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ) ], ), diff --git a/vanilla/lib/screens/home_screen.dart b/vanilla/lib/screens/home_screen.dart index 43589afc..22f097d6 100644 --- a/vanilla/lib/screens/home_screen.dart +++ b/vanilla/lib/screens/home_screen.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/localization.dart'; @@ -22,14 +21,14 @@ class HomeScreen extends StatefulWidget { final Function clearCompleted; HomeScreen({ - @required this.appState, - @required this.addTodo, - @required this.removeTodo, - @required this.updateTodo, - @required this.toggleAll, - @required this.clearCompleted, - Key key, - }) : super(key: ArchSampleKeys.homeScreen); + required this.appState, + required this.addTodo, + required this.removeTodo, + required this.updateTodo, + required this.toggleAll, + required this.clearCompleted, + super.key = ArchSampleKeys.homeScreen, + }); @override State createState() { @@ -111,11 +110,9 @@ class HomeScreenState extends State { ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ), diff --git a/vanilla/lib/widgets/extra_actions_button.dart b/vanilla/lib/widgets/extra_actions_button.dart index bc2aff03..5b017c60 100644 --- a/vanilla/lib/widgets/extra_actions_button.dart +++ b/vanilla/lib/widgets/extra_actions_button.dart @@ -12,16 +12,15 @@ class ExtraActionsButton extends StatelessWidget { final bool hasCompletedTodos; ExtraActionsButton({ - this.onSelected, + required this.onSelected, this.allComplete = false, this.hasCompletedTodos = true, - Key key, - }) : super(key: key); + super.key = ArchSampleKeys.extraActionsButton, + }); @override Widget build(BuildContext context) { return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, onSelected: onSelected, itemBuilder: (BuildContext context) => >[ PopupMenuItem( diff --git a/vanilla/lib/widgets/filter_button.dart b/vanilla/lib/widgets/filter_button.dart index beff7085..90cd3aaf 100644 --- a/vanilla/lib/widgets/filter_button.dart +++ b/vanilla/lib/widgets/filter_button.dart @@ -11,21 +11,25 @@ class FilterButton extends StatelessWidget { final VisibilityFilter activeFilter; final bool isActive; - FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + FilterButton({ + required this.onSelected, + required this.activeFilter, + required this.isActive, + super.key = ArchSampleKeys.filterButton, + }); @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.body1; + final defaultStyle = Theme.of(context).textTheme.bodyMedium; final activeStyle = Theme.of(context) .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + .bodyMedium + ?.copyWith(color: Theme.of(context).colorScheme.secondary); final button = _Button( onSelected: onSelected, activeFilter: activeFilter, - activeStyle: activeStyle, - defaultStyle: defaultStyle, + activeStyle: activeStyle!, + defaultStyle: defaultStyle!, ); return AnimatedOpacity( @@ -38,12 +42,11 @@ class FilterButton extends StatelessWidget { class _Button extends StatelessWidget { const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); + required this.onSelected, + required this.activeFilter, + required this.activeStyle, + required this.defaultStyle, + }); final PopupMenuItemSelected onSelected; final VisibilityFilter activeFilter; @@ -53,7 +56,6 @@ class _Button extends StatelessWidget { @override Widget build(BuildContext context) { return PopupMenuButton( - key: ArchSampleKeys.filterButton, tooltip: ArchSampleLocalizations.of(context).filterTodos, onSelected: onSelected, itemBuilder: (BuildContext context) => >[ diff --git a/vanilla/lib/widgets/stats_counter.dart b/vanilla/lib/widgets/stats_counter.dart index d058d2a5..bfe1ff54 100644 --- a/vanilla/lib/widgets/stats_counter.dart +++ b/vanilla/lib/widgets/stats_counter.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -11,7 +9,7 @@ class StatsCounter extends StatelessWidget { final int numActive; final int numCompleted; - StatsCounter({@required this.numActive, @required this.numCompleted}) + StatsCounter({required this.numActive, required this.numCompleted}) : super(key: ArchSampleKeys.statsCounter); @override @@ -24,7 +22,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -32,14 +30,14 @@ class StatsCounter extends StatelessWidget { child: Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -47,7 +45,7 @@ class StatsCounter extends StatelessWidget { child: Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ) ], diff --git a/vanilla/lib/widgets/todo_item.dart b/vanilla/lib/widgets/todo_item.dart index 391bc3ff..0d0bb909 100644 --- a/vanilla/lib/widgets/todo_item.dart +++ b/vanilla/lib/widgets/todo_item.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; @@ -10,16 +9,15 @@ import 'package:vanilla/models.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; TodoItem({ - Key key, - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, - }) : super(key: key); + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, + }); @override Widget build(BuildContext context) { @@ -36,14 +34,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/vanilla/lib/widgets/todo_list.dart b/vanilla/lib/widgets/todo_list.dart index 2483f7fd..2ffefc51 100644 --- a/vanilla/lib/widgets/todo_list.dart +++ b/vanilla/lib/widgets/todo_list.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; @@ -18,11 +17,11 @@ class TodoList extends StatelessWidget { final TodoUpdater updateTodo; TodoList({ - @required this.filteredTodos, - @required this.loading, - @required this.addTodo, - @required this.removeTodo, - @required this.updateTodo, + required this.filteredTodos, + required this.loading, + required this.addTodo, + required this.removeTodo, + required this.updateTodo, }) : super(key: ArchSampleKeys.todoList); @override @@ -70,7 +69,7 @@ class TodoList extends StatelessWidget { void _removeTodo(BuildContext context, Todo todo) { removeTodo(todo); - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( key: ArchSampleKeys.snackbar, duration: Duration(seconds: 2), diff --git a/vanilla/macos/.gitignore b/vanilla/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/vanilla/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/vanilla/macos/Flutter/Flutter-Debug.xcconfig b/vanilla/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/vanilla/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/vanilla/macos/Flutter/Flutter-Release.xcconfig b/vanilla/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/vanilla/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/vanilla/macos/Flutter/GeneratedPluginRegistrant.swift b/vanilla/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/vanilla/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/vanilla/macos/Podfile b/vanilla/macos/Podfile new file mode 100644 index 00000000..29c8eb32 --- /dev/null +++ b/vanilla/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/vanilla/macos/Podfile.lock b/vanilla/macos/Podfile.lock new file mode 100644 index 00000000..390b5331 --- /dev/null +++ b/vanilla/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 7eb978b976557c8c1cd717d8185ec483fd090a82 + +COCOAPODS: 1.16.2 diff --git a/vanilla/macos/Runner.xcodeproj/project.pbxproj b/vanilla/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..8fe44347 --- /dev/null +++ b/vanilla/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 34697CEC16A1759F06EB6061 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 579AA55793A0F14ADE0D341B /* Pods_Runner.framework */; }; + FFF670F5B788828982642A61 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A182194720070DC79CF1B8D9 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* vanilla.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vanilla.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 42096AC9028D97CC9490E504 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 579AA55793A0F14ADE0D341B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BADAC203C80713E56957AA3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 678B62E02B78627621BF0AB5 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8F421DCE5FEBEBAC01B6B6AF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + A182194720070DC79CF1B8D9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D84D97F02455DC3C974F9D24 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + E1786C732E6E280909A0D251 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FFF670F5B788828982642A61 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 34697CEC16A1759F06EB6061 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 7795C5975CBFEACF6D5C9868 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* vanilla.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 7795C5975CBFEACF6D5C9868 /* Pods */ = { + isa = PBXGroup; + children = ( + 8F421DCE5FEBEBAC01B6B6AF /* Pods-Runner.debug.xcconfig */, + D84D97F02455DC3C974F9D24 /* Pods-Runner.release.xcconfig */, + 42096AC9028D97CC9490E504 /* Pods-Runner.profile.xcconfig */, + E1786C732E6E280909A0D251 /* Pods-RunnerTests.debug.xcconfig */, + 5BADAC203C80713E56957AA3 /* Pods-RunnerTests.release.xcconfig */, + 678B62E02B78627621BF0AB5 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 579AA55793A0F14ADE0D341B /* Pods_Runner.framework */, + A182194720070DC79CF1B8D9 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 23E78861A1030B20FE20E087 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + F072ED29184E48A9C5AB0AD4 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + DD87BBF009895E636E84AD11 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* vanilla.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 23E78861A1030B20FE20E087 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + DD87BBF009895E636E84AD11 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F072ED29184E48A9C5AB0AD4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E1786C732E6E280909A0D251 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/vanilla.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/vanilla"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5BADAC203C80713E56957AA3 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/vanilla.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/vanilla"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 678B62E02B78627621BF0AB5 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/vanilla.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/vanilla"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/vanilla/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/vanilla/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/vanilla/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/vanilla/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/vanilla/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..5aef3c77 --- /dev/null +++ b/vanilla/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vanilla/macos/Runner.xcworkspace/contents.xcworkspacedata b/vanilla/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/vanilla/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/vanilla/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/vanilla/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/vanilla/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/vanilla/macos/Runner/AppDelegate.swift b/vanilla/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/vanilla/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/vanilla/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vanilla/macos/Runner/Configs/AppInfo.xcconfig b/vanilla/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..09113f2a --- /dev/null +++ b/vanilla/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = vanilla + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.vanilla + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/vanilla/macos/Runner/Configs/Debug.xcconfig b/vanilla/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/vanilla/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/vanilla/macos/Runner/Configs/Release.xcconfig b/vanilla/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/vanilla/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/vanilla/macos/Runner/Configs/Warnings.xcconfig b/vanilla/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/vanilla/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/vanilla/macos/Runner/DebugProfile.entitlements b/vanilla/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/vanilla/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/vanilla/macos/Runner/Info.plist b/vanilla/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/vanilla/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/vanilla/macos/Runner/MainFlutterWindow.swift b/vanilla/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/vanilla/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/vanilla/macos/Runner/Release.entitlements b/vanilla/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/vanilla/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/vanilla/macos/RunnerTests/RunnerTests.swift b/vanilla/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/vanilla/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/vanilla/pubspec.yaml b/vanilla/pubspec.yaml index c168de5c..1c4266a4 100644 --- a/vanilla/pubspec.yaml +++ b/vanilla/pubspec.yaml @@ -12,9 +12,10 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: none environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ">=3.0.0 <4.0.0" dependencies: flutter: @@ -23,11 +24,9 @@ dependencies: path: ../todos_app_core todos_repository_local_storage: path: ../todos_repository_local_storage - key_value_store_flutter: - key_value_store_web: shared_preferences: - dev_dependencies: + flutter_lints: flutter_test: sdk: flutter flutter_driver: diff --git a/vanilla/test_driver/todo_app.dart b/vanilla/test_driver/todo_app.dart index 36be3ffc..eaac4db8 100644 --- a/vanilla/test_driver/todo_app.dart +++ b/vanilla/test_driver/todo_app.dart @@ -9,5 +9,5 @@ import 'package:vanilla/main.dart' as app; void main() { enableFlutterDriverExtension(); - app.main(); + app.main(storageKey: 'vanilla_test_${DateTime.now().toIso8601String()}'); } diff --git a/vanilla/web/favicon.png b/vanilla/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/vanilla/web/icons/Icon-192.png b/vanilla/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/vanilla/web/icons/Icon-512.png b/vanilla/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 zcmd5=2T+s!lYZ%-(h(2@5fr2dC?F^$C=i-}R6$UX8af(!je;W5yC_|HmujSgN*6?W z3knF*TL1$|?oD*=zPbBVex*RUIKsL<(&Rj9%^UD2IK3W?2j>D?eWQgvS-HLymHo9%~|N2Q{~j za?*X-{b9JRowv_*Mh|;*-kPFn>PI;r<#kFaxFqbn?aq|PduQg=2Q;~Qc}#z)_T%x9 zE|0!a70`58wjREmAH38H1)#gof)U3g9FZ^ zF7&-0^Hy{4XHWLoC*hOG(dg~2g6&?-wqcpf{ z&3=o8vw7lMi22jCG9RQbv8H}`+}9^zSk`nlR8?Z&G2dlDy$4#+WOlg;VHqzuE=fM@ z?OI6HEJH4&tA?FVG}9>jAnq_^tlw8NbjNhfqk2rQr?h(F&WiKy03Sn=-;ZJRh~JrD zbt)zLbnabttEZ>zUiu`N*u4sfQaLE8-WDn@tHp50uD(^r-}UsUUu)`!Rl1PozAc!a z?uj|2QDQ%oV-jxUJmJycySBINSKdX{kDYRS=+`HgR2GO19fg&lZKyBFbbXhQV~v~L za^U944F1_GtuFXtvDdDNDvp<`fqy);>Vw=ncy!NB85Tw{&sT5&Ox%-p%8fTS;OzlRBwErvO+ROe?{%q-Zge=%Up|D4L#>4K@Ke=x%?*^_^P*KD zgXueMiS63!sEw@fNLB-i^F|@Oib+S4bcy{eu&e}Xvb^(mA!=U=Xr3||IpV~3K zQWzEsUeX_qBe6fky#M zzOJm5b+l;~>=sdp%i}}0h zO?B?i*W;Ndn02Y0GUUPxERG`3Bjtj!NroLoYtyVdLtl?SE*CYpf4|_${ku2s`*_)k zN=a}V8_2R5QANlxsq!1BkT6$4>9=-Ix4As@FSS;1q^#TXPrBsw>hJ}$jZ{kUHoP+H zvoYiR39gX}2OHIBYCa~6ERRPJ#V}RIIZakUmuIoLF*{sO8rAUEB9|+A#C|@kw5>u0 zBd=F!4I)Be8ycH*)X1-VPiZ+Ts8_GB;YW&ZFFUo|Sw|x~ZajLsp+_3gv((Q#N>?Jz zFBf`~p_#^${zhPIIJY~yo!7$-xi2LK%3&RkFg}Ax)3+dFCjGgKv^1;lUzQlPo^E{K zmCnrwJ)NuSaJEmueEPO@(_6h3f5mFffhkU9r8A8(JC5eOkux{gPmx_$Uv&|hyj)gN zd>JP8l2U&81@1Hc>#*su2xd{)T`Yw< zN$dSLUN}dfx)Fu`NcY}TuZ)SdviT{JHaiYgP4~@`x{&h*Hd>c3K_To9BnQi@;tuoL z%PYQo&{|IsM)_>BrF1oB~+`2_uZQ48z9!)mtUR zdfKE+b*w8cPu;F6RYJiYyV;PRBbThqHBEu_(U{(gGtjM}Zi$pL8Whx}<JwE3RM0F8x7%!!s)UJVq|TVd#hf1zVLya$;mYp(^oZQ2>=ZXU1c$}f zm|7kfk>=4KoQoQ!2&SOW5|JP1)%#55C$M(u4%SP~tHa&M+=;YsW=v(Old9L3(j)`u z2?#fK&1vtS?G6aOt@E`gZ9*qCmyvc>Ma@Q8^I4y~f3gs7*d=ATlP>1S zyF=k&6p2;7dn^8?+!wZO5r~B+;@KXFEn^&C=6ma1J7Au6y29iMIxd7#iW%=iUzq&C=$aPLa^Q zncia$@TIy6UT@69=nbty5epP>*fVW@5qbUcb2~Gg75dNd{COFLdiz3}kODn^U*=@E z0*$7u7Rl2u)=%fk4m8EK1ctR!6%Ve`e!O20L$0LkM#f+)n9h^dn{n`T*^~d+l*Qlx z$;JC0P9+en2Wlxjwq#z^a6pdnD6fJM!GV7_%8%c)kc5LZs_G^qvw)&J#6WSp< zmsd~1-(GrgjC56Pdf6#!dt^y8Rg}!#UXf)W%~PeU+kU`FeSZHk)%sFv++#Dujk-~m zFHvVJC}UBn2jN& zs!@nZ?e(iyZPNo`p1i#~wsv9l@#Z|ag3JR>0#u1iW9M1RK1iF6-RbJ4KYg?B`dET9 zyR~DjZ>%_vWYm*Z9_+^~hJ_|SNTzBKx=U0l9 z9x(J96b{`R)UVQ$I`wTJ@$_}`)_DyUNOso6=WOmQKI1e`oyYy1C&%AQU<0-`(ow)1 zT}gYdwWdm4wW6|K)LcfMe&psE0XGhMy&xS`@vLi|1#Za{D6l@#D!?nW87wcscUZgELT{Cz**^;Zb~7 z(~WFRO`~!WvyZAW-8v!6n&j*PLm9NlN}BuUN}@E^TX*4Or#dMMF?V9KBeLSiLO4?B zcE3WNIa-H{ThrlCoN=XjOGk1dT=xwwrmt<1a)mrRzg{35`@C!T?&_;Q4Ce=5=>z^*zE_c(0*vWo2_#TD<2)pLXV$FlwP}Ik74IdDQU@yhkCr5h zn5aa>B7PWy5NQ!vf7@p_qtC*{dZ8zLS;JetPkHi>IvPjtJ#ThGQD|Lq#@vE2xdl%`x4A8xOln}BiQ92Po zW;0%A?I5CQ_O`@Ad=`2BLPPbBuPUp@Hb%a_OOI}y{Rwa<#h z5^6M}s7VzE)2&I*33pA>e71d78QpF>sNK;?lj^Kl#wU7G++`N_oL4QPd-iPqBhhs| z(uVM}$ItF-onXuuXO}o$t)emBO3Hjfyil@*+GF;9j?`&67GBM;TGkLHi>@)rkS4Nj zAEk;u)`jc4C$qN6WV2dVd#q}2X6nKt&X*}I@jP%Srs%%DS92lpDY^K*Sx4`l;aql$ zt*-V{U&$DM>pdO?%jt$t=vg5|p+Rw?SPaLW zB6nvZ69$ne4Z(s$3=Rf&RX8L9PWMV*S0@R zuIk&ba#s6sxVZ51^4Kon46X^9`?DC9mEhWB3f+o4#2EXFqy0(UTc>GU| zGCJmI|Dn-dX#7|_6(fT)>&YQ0H&&JX3cTvAq(a@ydM4>5Njnuere{J8p;3?1az60* z$1E7Yyxt^ytULeokgDnRVKQw9vzHg1>X@@jM$n$HBlveIrKP5-GJq%iWH#odVwV6cF^kKX(@#%%uQVb>#T6L^mC@)%SMd4DF? zVky!~ge27>cpUP1Vi}Z32lbLV+CQy+T5Wdmva6Fg^lKb!zrg|HPU=5Qu}k;4GVH+x z%;&pN1LOce0w@9i1Mo-Y|7|z}fbch@BPp2{&R-5{GLoeu8@limQmFF zaJRR|^;kW_nw~0V^ zfTnR!Ni*;-%oSHG1yItARs~uxra|O?YJxBzLjpeE-=~TO3Dn`JL5Gz;F~O1u3|FE- zvK2Vve`ylc`a}G`gpHg58Cqc9fMoy1L}7x7T>%~b&irrNMo?np3`q;d3d;zTK>nrK zOjPS{@&74-fA7j)8uT9~*g23uGnxwIVj9HorzUX#s0pcp2?GH6i}~+kv9fWChtPa_ z@T3m+$0pbjdQw7jcnHn;Pi85hk_u2-1^}c)LNvjdam8K-XJ+KgKQ%!?2n_!#{$H|| zLO=%;hRo6EDmnOBKCL9Cg~ETU##@u^W_5joZ%Et%X_n##%JDOcsO=0VL|Lkk!VdRJ z^|~2pB@PUspT?NOeO?=0Vb+fAGc!j%Ufn-cB`s2A~W{Zj{`wqWq_-w0wr@6VrM zbzni@8c>WS!7c&|ZR$cQ;`niRw{4kG#e z70e!uX8VmP23SuJ*)#(&R=;SxGAvq|&>geL&!5Z7@0Z(No*W561n#u$Uc`f9pD70# z=sKOSK|bF~#khTTn)B28h^a1{;>EaRnHj~>i=Fnr3+Fa4 z`^+O5_itS#7kPd20rq66_wH`%?HNzWk@XFK0n;Z@Cx{kx==2L22zWH$Yg?7 zvDj|u{{+NR3JvUH({;b*$b(U5U z7(lF!1bz2%06+|-v(D?2KgwNw7( zJB#Tz+ZRi&U$i?f34m7>uTzO#+E5cbaiQ&L}UxyOQq~afbNB4EI{E04ZWg53w0A{O%qo=lF8d zf~ktGvIgf-a~zQoWf>loF7pOodrd0a2|BzwwPDV}ShauTK8*fmF6NRbO>Iw9zZU}u zw8Ya}?seBnEGQDmH#XpUUkj}N49tP<2jYwTFp!P+&Fd(%Z#yo80|5@zN(D{_pNow*&4%ql zW~&yp@scb-+Qj-EmErY+Tu=dUmf@*BoXY2&oKT8U?8?s1d}4a`Aq>7SV800m$FE~? zjmz(LY+Xx9sDX$;vU`xgw*jLw7dWOnWWCO8o|;}f>cu0Q&`0I{YudMn;P;L3R-uz# zfns_mZED_IakFBPP2r_S8XM$X)@O-xVKi4`7373Jkd5{2$M#%cRhWer3M(vr{S6>h zj{givZJ3(`yFL@``(afn&~iNx@B1|-qfYiZu?-_&Z8+R~v`d6R-}EX9IVXWO-!hL5 z*k6T#^2zAXdardU3Ao~I)4DGdAv2bx{4nOK`20rJo>rmk3S2ZDu}))8Z1m}CKigf0 z3L`3Y`{huj`xj9@`$xTZzZc3je?n^yG<8sw$`Y%}9mUsjUR%T!?k^(q)6FH6Af^b6 zlPg~IEwg0y;`t9y;#D+uz!oE4VP&Je!<#q*F?m5L5?J3i@!0J6q#eu z!RRU`-)HeqGi_UJZ(n~|PSNsv+Wgl{P-TvaUQ9j?ZCtvb^37U$sFpBrkT{7Jpd?HpIvj2!}RIq zH{9~+gErN2+}J`>Jvng2hwM`=PLNkc7pkjblKW|+Fk9rc)G1R>Ww>RC=r-|!m-u7( zc(a$9NG}w#PjWNMS~)o=i~WA&4L(YIW25@AL9+H9!?3Y}sv#MOdY{bb9j>p`{?O(P zIvb`n?_(gP2w3P#&91JX*md+bBEr%xUHMVqfB;(f?OPtMnAZ#rm5q5mh;a2f_si2_ z3oXWB?{NF(JtkAn6F(O{z@b76OIqMC$&oJ_&S|YbFJ*)3qVX_uNf5b8(!vGX19hsG z(OP>RmZp29KH9Ge2kKjKigUmOe^K_!UXP`von)PR8Qz$%=EmOB9xS(ZxE_tnyzo}7 z=6~$~9k0M~v}`w={AeqF?_)9q{m8K#6M{a&(;u;O41j)I$^T?lx5(zlebpY@NT&#N zR+1bB)-1-xj}R8uwqwf=iP1GbxBjneCC%UrSdSxK1vM^i9;bUkS#iRZw2H>rS<2<$ zNT3|sDH>{tXb=zq7XZi*K?#Zsa1h1{h5!Tq_YbKFm_*=A5-<~j63he;4`77!|LBlo zR^~tR3yxcU=gDFbshyF6>o0bdp$qmHS7D}m3;^QZq9kBBU|9$N-~oU?G5;jyFR7>z hN`IR97YZXIo@y!QgFWddJ3|0`sjFx!m))><{BI=FK%f8s literal 0 HcmV?d00001 diff --git a/vanilla/web/icons/Icon-maskable-192.png b/vanilla/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/vanilla/web/icons/Icon-maskable-512.png b/vanilla/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/vanilla/web/manifest.json b/vanilla/web/manifest.json new file mode 100644 index 00000000..13e3c5c8 --- /dev/null +++ b/vanilla/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "vanilla", + "short_name": "vanilla", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} From e051916cc622c0c3716c66a8b5ecda6a2f3b32d6 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sat, 5 Jul 2025 22:28:06 +0100 Subject: [PATCH 02/89] Migrate flutter_driver to integration_test --- integration_tests/lib/integration_tests.dart | 288 +++++++++--------- .../elements/extra_actions_element.dart | 17 +- .../elements/filters_element.dart | 26 +- .../page_objects/elements/stats_element.dart | 15 +- .../page_objects/elements/test_element.dart | 6 +- .../elements/todo_item_element.dart | 35 ++- .../elements/todo_list_element.dart | 38 ++- .../page_objects/screens/add_test_screen.dart | 35 +-- .../screens/details_test_screen.dart | 48 +-- .../screens/edit_test_screen.dart | 39 +-- .../screens/home_test_screen.dart | 77 ++--- .../lib/page_objects/screens/test_screen.dart | 14 +- integration_tests/lib/page_objects/utils.dart | 18 +- integration_tests/pubspec.yaml | 6 +- vanilla/integration_test/todo_app_test.dart | 21 ++ vanilla/ios/Podfile.lock | 36 +++ vanilla/ios/Runner.xcodeproj/project.pbxproj | 112 +++++++ .../contents.xcworkspacedata | 3 + vanilla/lib/app.dart | 3 +- vanilla/lib/main.dart | 4 +- vanilla/lib/widgets/todo_list.dart | 3 +- vanilla/pubspec.yaml | 2 +- vanilla/test_driver/todo_app.dart | 13 - vanilla/test_driver/todo_app_test.dart | 9 - 24 files changed, 508 insertions(+), 360 deletions(-) create mode 100644 vanilla/integration_test/todo_app_test.dart create mode 100644 vanilla/ios/Podfile.lock delete mode 100644 vanilla/test_driver/todo_app.dart delete mode 100644 vanilla/test_driver/todo_app_test.dart diff --git a/integration_tests/lib/integration_tests.dart b/integration_tests/lib/integration_tests.dart index cca4c8e3..e1089242 100644 --- a/integration_tests/lib/integration_tests.dart +++ b/integration_tests/lib/integration_tests.dart @@ -4,167 +4,153 @@ library integration_tests; -import 'package:flutter_driver/flutter_driver.dart'; -import 'package:test/test.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; import 'page_objects/page_objects.dart'; -void main() { - group('Todo App Test', () { - late FlutterDriver driver; - late HomeTestScreen homeScreen; +void run({required Future Function() appBuilder}) { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - setUpAll(() async { - driver = await FlutterDriver.connect(); - homeScreen = HomeTestScreen(driver); - }); + testWidgets('Todo App Test', (WidgetTester tester) async { + final app = await appBuilder(); + final homeScreen = HomeTestScreen(tester); - tearDownAll(() async { - await driver.close(); - }); + // Build the app + await tester.pumpWidget(app); - test('should show a loading screen while the todos are fetched', () async { - expect(await homeScreen.isLoading(), isTrue); - }); + // should show a loading screen while the todos are fetched + expect(await homeScreen.isLoading(), isTrue); - test('should start with a list of Todos', () async { - expect(await homeScreen.isReady(), isTrue); - expect(await homeScreen.todoList.todoItem('1').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('2').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('3').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('4').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('5').isVisible, isTrue); - }); + // should start with a list of Todos + expect(await homeScreen.isReady(), isTrue); + expect(await homeScreen.todoList.todoItem('1').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('2').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('3').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('4').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('5').isVisible, isTrue); - test('should be able to click on an item to see details', () async { - final detailsScreen = await homeScreen.todoList.todoItem('2').tap(); - expect(await detailsScreen.task, isNotEmpty); - expect(await detailsScreen.note, isNotEmpty); + // should be able to click on an item to see details + var detailsScreen = await homeScreen.todoList.todoItem('2').tap(); + expect(await detailsScreen.isReady(), isTrue); + expect(await detailsScreen.task, isNotEmpty); + expect(await detailsScreen.note, isNotEmpty); - final editScreen = detailsScreen.tapEditTodoButton(); + var editScreen = await detailsScreen.tapEditTodoButton(); - expect(await editScreen.isReady(), isTrue); + expect(await editScreen.isReady(), isTrue); + + await editScreen.tapBackButton(); - await editScreen.tapBackButton(); - }); - - test('should be able to delete a todo on the details screen', () async { - final detailsScreen = DetailsTestScreen(driver); - - await detailsScreen.tapDeleteButton(); - - expect(await homeScreen.todoList.todoItem('2').isAbsent, isTrue, - reason: 'TodoItem2 should be absent'); - expect(await homeScreen.snackbarVisible, isTrue, - reason: 'snackbar should be visible'); - }); - - test('should filter to completed todos', () async { - await homeScreen.tapFilterButton().tapShowCompleted(); - - expect(await homeScreen.todoList.todoItem('3').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('5').isVisible, isTrue); - }); - - test('should filter to active todos', () async { - await homeScreen.tapFilterButton().tapShowActive(); - - expect(await homeScreen.todoList.todoItem('1').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('4').isVisible, isTrue); - }); - - test('should once again filter to all todos', () async { - await homeScreen.tapFilterButton().tapShowAll(); - - expect(await homeScreen.todoList.todoItem('1').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('3').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('4').isVisible, isTrue); - expect(await homeScreen.todoList.todoItem('5').isVisible, isTrue); - }); - - test('should be able to view stats', () async { - final stats = await homeScreen.tapStatsTab(); - - expect(await stats.numActive, 2); - expect(await stats.numCompleted, 2); - }); - - test('should be able to toggle a todo complete', () async { - await homeScreen.tapTodosTab().todoItem('1').tapCheckbox(); - final stats = homeScreen.tapStatsTab(); - - // This is a hacky way to check if the tapping the checkbox was - // successful. Would be better to have an `isChecked` method from the - // driver or perhaps need to write a custom Matcher. - expect(await stats.numActive, 1); - expect(await stats.numCompleted, 3); - }); - - test('should be able to clear the completed todos', () async { - await homeScreen.tapExtraActionsButton().tapClearCompleted(); - - final stats = homeScreen.tapStatsTab(); - - expect(await stats.numActive, 1); - expect(await stats.numCompleted, 0); - }); - - test('should be able to toggle all todos complete', () async { - await homeScreen.tapExtraActionsButton().tapToggleAll(); - - expect(await homeScreen.stats.numActive, 0); - expect(await homeScreen.stats.numCompleted, 1); - }); - - test('should be able to add a todo', () async { - final task = 'Plan day trip to pyramids'; - final note = 'Take picture next to Great Pyramid of Giza!'; - - // init to home screen - await homeScreen.tapTodosTab(); - expect(await homeScreen.isReady(), isTrue); - - // go to add screen and enter a _todo - final addScreen = homeScreen.tapAddTodoButton(); - await addScreen.enterTask(task); - await addScreen.enterNote(note); - - // save and return to home screen and find new _todo - await addScreen.tapSaveNewButton(); - expect(await homeScreen.isReady(), true); - expect(await driver.getText(find.text(task)), task); - }); - - test('should be able to modify a todo', () async { - final task = 'Plan day trip to pyramids'; - final taskEdit = 'Plan full day trip to pyramids'; - final noteEdit = - 'Have lunch next to Great Pyramid of Giza and take pictures!'; - - // init to home screen - await homeScreen.tapTodosTab(); - expect(await homeScreen.isReady(), isTrue); - - // find the _todo text to edit and go to details screen - final detailsScreen = await homeScreen.tapTodo(task); - expect(await detailsScreen.isReady(), isTrue); - - // go to edit screen and edit this _todo - final editScreen = detailsScreen.tapEditTodoButton(); - expect(await editScreen.isReady(), isTrue); - await editScreen.editTask(taskEdit); - await editScreen.editNote(noteEdit); - - // save and return to details screen - await editScreen.tapSaveFab(); - expect(await detailsScreen.isReady(), isTrue); - expect(await driver.getText(find.text(taskEdit)), taskEdit); - expect(await driver.getText(find.text(noteEdit)), noteEdit); - - // check shows up on home screen - await detailsScreen.tapBackButton(); - expect(await homeScreen.isReady(), isTrue); - expect(await driver.getText(find.text(taskEdit)), taskEdit); - }); + // should be able to delete a todo on the details screen + await detailsScreen.tapDeleteButton(); + + expect( + await homeScreen.todoList.todoItem('2').isAbsent, + isTrue, + reason: 'TodoItem2 should be absent', + ); + + expect( + await homeScreen.snackbarVisible, + isTrue, + reason: 'snackbar should be visible', + ); + + // should filter to completed todos + await (await homeScreen.tapFilterButton()).tapShowCompleted(); + + expect(await homeScreen.todoList.todoItem('3').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('5').isVisible, isTrue); + + // should filter to active todos + await (await homeScreen.tapFilterButton()).tapShowActive(); + expect(await homeScreen.todoList.todoItem('1').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('4').isVisible, isTrue); + + // should once again filter to all todos + await (await homeScreen.tapFilterButton()).tapShowAll(); + expect(await homeScreen.todoList.todoItem('1').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('3').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('4').isVisible, isTrue); + expect(await homeScreen.todoList.todoItem('5').isVisible, isTrue); + + // should be able to view stats + var stats = await homeScreen.tapStatsTab(); + expect(await stats.numActive, 2); + expect(await stats.numCompleted, 2); + + // should be able to toggle a todo complete + await (await homeScreen.tapTodosTab()).todoItem('1').tapCheckbox(); + stats = await homeScreen.tapStatsTab(); + + // This is a hacky way to check if the tapping the checkbox was + // successful. Would be better to have an `isChecked` method from the + // driver or perhaps need to write a custom Matcher. + expect(await stats.numActive, 1); + expect(await stats.numCompleted, 3); + + // should be able to clear the completed todos + await (await homeScreen.tapExtraActionsButton()).tapClearCompleted(); + + stats = await homeScreen.tapStatsTab(); + + expect(await stats.numActive, 1); + expect(await stats.numCompleted, 0); + + // should be able to toggle all todos complete + await (await homeScreen.tapExtraActionsButton()).tapToggleAll(); + + expect(await homeScreen.stats.numActive, 0); + expect(await homeScreen.stats.numCompleted, 1); + + // should be able to add a todo + final taskAdd = 'Plan day trip to pyramids'; + final noteAdd = 'Take picture next to Great Pyramid of Giza!'; + + // init to home screen + await homeScreen.tapTodosTab(); + expect(await homeScreen.isReady(), isTrue); + + // go to add screen and enter a _todo + final addScreen = await homeScreen.tapAddTodoButton(); + await addScreen.enterTask(taskAdd); + await addScreen.enterNote(noteAdd); + + // save and return to home screen and find new _todo + await addScreen.tapSaveNewButton(); + expect(await homeScreen.isReady(), isTrue); + expect(find.text(taskAdd), findsOneWidget); + + // should be able to modify a todo' + final taskEdit = 'Plan full day trip to pyramids'; + final noteEdit = + 'Have lunch next to Great Pyramid of Giza and take pictures!'; + + // init to home screen + await homeScreen.tapTodosTab(); + expect(await homeScreen.isReady(), isTrue); + + // find the _todo text to edit and go to details screen + detailsScreen = await homeScreen.tapTodo(taskAdd); + expect(await detailsScreen.isReady(), isTrue); + + // go to edit screen and edit this _todo + editScreen = await detailsScreen.tapEditTodoButton(); + expect(await editScreen.isReady(), isTrue); + await editScreen.editTask(taskEdit); + await editScreen.editNote(noteEdit); + + // save and return to details screen + await editScreen.tapSaveFab(); + expect(await detailsScreen.isReady(), isTrue); + expect(find.text(taskEdit), findsOneWidget); + expect(find.text(noteEdit), findsOneWidget); + + // check shows up on home screen + await detailsScreen.tapBackButton(); + expect(await homeScreen.isReady(), isTrue); + expect(find.text(taskEdit), findsOneWidget); }); } diff --git a/integration_tests/lib/page_objects/elements/extra_actions_element.dart b/integration_tests/lib/page_objects/elements/extra_actions_element.dart index 3662076b..7d3be268 100644 --- a/integration_tests/lib/page_objects/elements/extra_actions_element.dart +++ b/integration_tests/lib/page_objects/elements/extra_actions_element.dart @@ -2,26 +2,27 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'test_element.dart'; class ExtraActionsElement extends TestElement { - final _toggleAll = find.byValueKey('__markAllDone__'); - final _clearCompleted = find.byValueKey('__clearCompleted__'); + final _toggleAll = find.byKey(ValueKey('__markAllDone__')); + final _clearCompleted = find.byKey(ValueKey('__clearCompleted__')); - ExtraActionsElement(FlutterDriver driver) : super(driver); + ExtraActionsElement(WidgetTester tester) : super(tester); Future tapToggleAll() async { - await driver.tap(_toggleAll); + await tester.tap(_toggleAll); + await tester.pumpAndSettle(); return this; } Future tapClearCompleted() async { - await driver.tap(_clearCompleted); + await tester.tap(_clearCompleted); + await tester.pumpAndSettle(); return this; } diff --git a/integration_tests/lib/page_objects/elements/filters_element.dart b/integration_tests/lib/page_objects/elements/filters_element.dart index 4a4a039f..d3be6ae5 100644 --- a/integration_tests/lib/page_objects/elements/filters_element.dart +++ b/integration_tests/lib/page_objects/elements/filters_element.dart @@ -2,24 +2,30 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'test_element.dart'; class FiltersElement extends TestElement { - final _allFilter = find.byValueKey('__allFilter__'); - final _activeFilter = find.byValueKey('__activeFilter__'); - final _completedFilter = find.byValueKey('__completedFilter__'); + final _allFilter = find.byKey(ValueKey('__allFilter__')); + final _activeFilter = find.byKey(ValueKey('__activeFilter__')); + final _completedFilter = find.byKey(ValueKey('__completedFilter__')); - FiltersElement(FlutterDriver driver) : super(driver); + FiltersElement(WidgetTester tester) : super(tester); - Future tapShowAll() async => await driver.tap(_allFilter); + Future tapShowAll() async { + await tester.tap(_allFilter); + await tester.pumpAndSettle(); + } - Future tapShowActive() async => await driver.tap(_activeFilter); + Future tapShowActive() async { + await tester.tap(_activeFilter); + await tester.pumpAndSettle(); + } Future tapShowCompleted() async { - return await driver.tap(_completedFilter); + await tester.tap(_completedFilter); + await tester.pumpAndSettle(); } } diff --git a/integration_tests/lib/page_objects/elements/stats_element.dart b/integration_tests/lib/page_objects/elements/stats_element.dart index 5bd72f68..20921d85 100644 --- a/integration_tests/lib/page_objects/elements/stats_element.dart +++ b/integration_tests/lib/page_objects/elements/stats_element.dart @@ -2,21 +2,20 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'test_element.dart'; class StatsElement extends TestElement { - final _activeItemsFinder = find.byValueKey('__statsActiveItems__'); - final _completedItemsFinder = find.byValueKey('__statsCompletedItems__'); + final _activeItemsFinder = find.byKey(ValueKey('__statsActiveItems__')); + final _completedItemsFinder = find.byKey(ValueKey('__statsCompletedItems__')); - StatsElement(FlutterDriver driver) : super(driver); + StatsElement(WidgetTester tester) : super(tester); Future get numActive async => - int.parse((await driver.getText(_activeItemsFinder))); + int.parse(tester.widget(_activeItemsFinder).data!); Future get numCompleted async => - int.parse((await driver.getText(_completedItemsFinder))); + int.parse(tester.widget(_completedItemsFinder).data!); } diff --git a/integration_tests/lib/page_objects/elements/test_element.dart b/integration_tests/lib/page_objects/elements/test_element.dart index ef46afec..f117a49b 100644 --- a/integration_tests/lib/page_objects/elements/test_element.dart +++ b/integration_tests/lib/page_objects/elements/test_element.dart @@ -2,10 +2,10 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter_test/flutter_test.dart'; abstract class TestElement { - final FlutterDriver driver; + final WidgetTester tester; - TestElement(this.driver); + TestElement(this.tester); } diff --git a/integration_tests/lib/page_objects/elements/todo_item_element.dart b/integration_tests/lib/page_objects/elements/todo_item_element.dart index 87dcc40e..8eaa661f 100644 --- a/integration_tests/lib/page_objects/elements/todo_item_element.dart +++ b/integration_tests/lib/page_objects/elements/todo_item_element.dart @@ -2,9 +2,8 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import '../screens/details_test_screen.dart'; import '../utils.dart'; @@ -13,35 +12,35 @@ import 'test_element.dart'; class TodoItemElement extends TestElement { final String id; - TodoItemElement(this.id, FlutterDriver driver) : super(driver); + TodoItemElement(this.id, WidgetTester tester) : super(tester); - SerializableFinder get _taskFinder => - find.byValueKey('TodoItem__${id}__Task'); + Finder get _taskFinder => find.byKey(ValueKey('TodoItem__${id}__Task')); - SerializableFinder get _checkboxFinder => - find.byValueKey('TodoItem__${id}__Checkbox'); + Finder get _checkboxFinder => + find.byKey(ValueKey('TodoItem__${id}__Checkbox')); - SerializableFinder get _todoItemFinder => find.byValueKey('TodoItem__${id}'); + Finder get _todoItemFinder => find.byKey(ValueKey('TodoItem__${id}')); - Future get isVisible => widgetExists(driver, _todoItemFinder); + Future get isVisible => widgetExists(tester, _todoItemFinder); - Future get isAbsent => widgetAbsent(driver, _todoItemFinder); + Future get isAbsent => widgetAbsent(tester, _todoItemFinder); - Future get task async => await driver.getText(_taskFinder); + Future get task async => tester.widget(_taskFinder).data!; Future get note async => - await driver.getText(find.byValueKey('TodoItem__${id}__Note')); + tester.widget(find.byKey(ValueKey('TodoItem__${id}__Note'))).data!; Future tapCheckbox() async { - await driver.tap(_checkboxFinder); - await driver.waitUntilNoTransientCallbacks(); + await tester.tap(_checkboxFinder); + await tester.pumpAndSettle(); return this; } - DetailsTestScreen tap() { - driver.tap(_taskFinder); + Future tap() async { + await tester.tap(_taskFinder); + await tester.pumpAndSettle(); - return DetailsTestScreen(driver); + return DetailsTestScreen(tester); } } diff --git a/integration_tests/lib/page_objects/elements/todo_list_element.dart b/integration_tests/lib/page_objects/elements/todo_list_element.dart index 6a8f7657..3e5376d9 100644 --- a/integration_tests/lib/page_objects/elements/todo_list_element.dart +++ b/integration_tests/lib/page_objects/elements/todo_list_element.dart @@ -2,35 +2,31 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import '../utils.dart'; import 'test_element.dart'; import 'todo_item_element.dart'; class TodoListElement extends TestElement { - final _todoListFinder = find.byValueKey('__todoList__'); - final _loadingFinder = find.byValueKey('__todosLoading__'); - - TodoListElement(FlutterDriver driver) : super(driver); - - Future get isLoading { - // We need to run this command "unsynchronized". This means it immediately - // checks if the loading widget is on screen, rather than waiting for any - // pending animations to complete. - // - // Since the CircularProgressIndicator runs a continuous animation, if we - // do not `runUnsynchronized`, this check will never work. - return driver.runUnsynchronized(() { - return widgetExists(driver, _loadingFinder); - }); + final _todoListFinder = find.byKey(ValueKey('__todoList__')); + final _loadingFinder = find.byKey(ValueKey('__todosLoading__')); + + TodoListElement(WidgetTester tester) : super(tester); + + Future get isLoading async { + await tester.pump(); + + return widgetExists(tester, _loadingFinder); } - Future get isReady => widgetExists(driver, _todoListFinder); + Future get isReady async { + await tester.pumpAndSettle(); + return widgetExists(tester, _todoListFinder); + } - TodoItemElement todoItem(String id) => TodoItemElement(id, driver); + TodoItemElement todoItem(String id) => TodoItemElement(id, tester); - TodoItemElement todoItemAbsent(String id) => TodoItemElement(id, driver); + TodoItemElement todoItemAbsent(String id) => TodoItemElement(id, tester); } diff --git a/integration_tests/lib/page_objects/screens/add_test_screen.dart b/integration_tests/lib/page_objects/screens/add_test_screen.dart index 85b73deb..a722287e 100644 --- a/integration_tests/lib/page_objects/screens/add_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/add_test_screen.dart @@ -2,47 +2,48 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import '../utils.dart'; import 'test_screen.dart'; class AddTestScreen extends TestScreen { - final _addScreenFinder = find.byValueKey('__addTodoScreen__'); + final _addScreenFinder = find.byKey(ValueKey('__addTodoScreen__')); final _backButtonFinder = find.byTooltip('Back'); - final _saveNewButtonFinder = find.byValueKey('__saveNewTodo__'); - final _taskFieldFinder = find.byValueKey('__taskField__'); - final _noteFieldFinder = find.byValueKey('__noteField__'); + final _saveNewButtonFinder = find.byKey(ValueKey('__saveNewTodo__')); + final _taskFieldFinder = find.byKey(ValueKey('__taskField__')); + final _noteFieldFinder = find.byKey(ValueKey('__noteField__')); - AddTestScreen(FlutterDriver driver) : super(driver); + AddTestScreen(WidgetTester tester) : super(tester); @override Future isReady({Duration? timeout}) => - widgetExists(driver, _addScreenFinder); + widgetExists(tester, _addScreenFinder); Future tapBackButton() async { - await driver.tap(_backButtonFinder); + await tester.tap(_backButtonFinder); + await tester.pumpAndSettle(); return this; } Future enterTask(String task) async { // must set focus to 'enable' keyboard even though focus already set - await driver.tap(_taskFieldFinder); - await driver.enterText(task); - await driver.waitFor(find.text(task)); + await tester.tap(_taskFieldFinder); + await tester.enterText(_taskFieldFinder, task); + await tester.pumpAndSettle(); } Future enterNote(String note) async { // must set focus to 'enable' keyboard even though focus already set - await driver.tap(_noteFieldFinder); - await driver.enterText(note); - await driver.waitFor(find.text(note)); + await tester.tap(_noteFieldFinder); + await tester.enterText(_noteFieldFinder, note); + await tester.pumpAndSettle(); } Future tapSaveNewButton() async { - await driver.tap(_saveNewButtonFinder); + await tester.tap(_saveNewButtonFinder); + await tester.pumpAndSettle(); } } diff --git a/integration_tests/lib/page_objects/screens/details_test_screen.dart b/integration_tests/lib/page_objects/screens/details_test_screen.dart index 00692906..f04f5747 100644 --- a/integration_tests/lib/page_objects/screens/details_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/details_test_screen.dart @@ -2,50 +2,56 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import '../utils.dart'; import 'edit_test_screen.dart'; import 'test_screen.dart'; class DetailsTestScreen extends TestScreen { - final _detailsScreenFinder = find.byValueKey('__todoDetailsScreen__'); - final _deleteButtonFinder = find.byValueKey('__deleteTodoFab__'); - final _checkboxFinder = find.byValueKey('DetailsTodo__Checkbox'); - final _taskFinder = find.byValueKey('DetailsTodo__Task'); - final _noteFinder = find.byValueKey('DetailsTodo__Note'); - final _editTodoFabFinder = find.byValueKey('__editTodoFab__'); + final _detailsScreenFinder = find.byKey(ValueKey('__todoDetailsScreen__')); + final _deleteButtonFinder = find.byKey(ValueKey('__deleteTodoFab__')); + final _checkboxFinder = find.byKey(ValueKey('DetailsTodo__Checkbox')); + final _taskFinder = find.byKey(ValueKey('DetailsTodo__Task')); + final _noteFinder = find.byKey(ValueKey('DetailsTodo__Note')); + final _editTodoFabFinder = find.byKey(ValueKey('__editTodoFab__')); final _backButtonFinder = find.byTooltip('Back'); - DetailsTestScreen(FlutterDriver driver) : super(driver); + DetailsTestScreen(WidgetTester tester) : super(tester); @override - Future isReady({Duration? timeout}) => - widgetExists(driver, _detailsScreenFinder, timeout: timeout); + Future isReady() async { + await tester.pumpAndSettle(); + + return widgetExists(tester, _detailsScreenFinder); + } - Future get task => driver.getText(_taskFinder); + String get task => tester.widget(_taskFinder).data!; - Future get note => driver.getText(_noteFinder); + String get note => tester.widget(_noteFinder).data!; Future tapCheckbox() async { - await driver.tap(_checkboxFinder); + await tester.tap(_checkboxFinder); + await tester.pumpAndSettle(); return this; } - EditTestScreen tapEditTodoButton() { - driver.tap(_editTodoFabFinder); + Future tapEditTodoButton() async { + await tester.tap(_editTodoFabFinder); + await tester.pumpAndSettle(); - return EditTestScreen(driver); + return EditTestScreen(tester); } - Future tapDeleteButton() async { - await driver.tap(_deleteButtonFinder); + Future tapDeleteButton() async { + await tester.tap(_deleteButtonFinder); + await tester.pumpAndSettle(); } Future tapBackButton() async { - return await driver.tap(_backButtonFinder); + await tester.tap(_backButtonFinder); + await tester.pumpAndSettle(); } } diff --git a/integration_tests/lib/page_objects/screens/edit_test_screen.dart b/integration_tests/lib/page_objects/screens/edit_test_screen.dart index 20f31b56..8d138d70 100644 --- a/integration_tests/lib/page_objects/screens/edit_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/edit_test_screen.dart @@ -2,45 +2,48 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import '../utils.dart'; import 'test_screen.dart'; class EditTestScreen extends TestScreen { - final _editScreenFinder = find.byValueKey('__editTodoScreen__'); + final _editScreenFinder = find.byKey(ValueKey('__editTodoScreen__')); final _backButtonFinder = find.byTooltip('Back'); - final _taskFieldFinder = find.byValueKey('__taskField__'); - final _noteFieldFinder = find.byValueKey('__noteField__'); - final _saveFabFinder = find.byValueKey('__saveTodoFab__'); + final _taskFieldFinder = find.byKey(ValueKey('__taskField__')); + final _noteFieldFinder = find.byKey(ValueKey('__noteField__')); + final _saveFabFinder = find.byKey(ValueKey('__saveTodoFab__')); - EditTestScreen(FlutterDriver driver) : super(driver); + EditTestScreen(WidgetTester tester) : super(tester); @override - Future isReady({Duration? timeout}) => - widgetExists(driver, _editScreenFinder, timeout: timeout); + Future isReady() async { + await tester.pumpAndSettle(); + + return widgetExists(tester, _editScreenFinder); + } Future tapBackButton() async { - await driver.tap(_backButtonFinder); + await tester.tap(_backButtonFinder); + await tester.pumpAndSettle(); } Future editTask(String task) async { // must set focus to 'enable' keyboard even though focus already set - await driver.tap(_taskFieldFinder); - await driver.enterText(task); - await driver.waitFor(find.text(task)); + await tester.tap(_taskFieldFinder); + await tester.enterText(_taskFieldFinder, task); + await tester.pumpAndSettle(); } Future editNote(String note) async { // must set focus to 'enable' keyboard even though focus already set - await driver.tap(_noteFieldFinder); - await driver.enterText(note); - await driver.waitFor(find.text(note)); + await tester.tap(_noteFieldFinder); + await tester.enterText(_noteFieldFinder, note); + await tester.pumpAndSettle(); } Future tapSaveFab() async { - await driver.tap(_saveFabFinder); + await tester.tap(_saveFabFinder); } } diff --git a/integration_tests/lib/page_objects/screens/home_test_screen.dart b/integration_tests/lib/page_objects/screens/home_test_screen.dart index d38db962..096966bc 100644 --- a/integration_tests/lib/page_objects/screens/home_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/home_test_screen.dart @@ -2,9 +2,8 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:integration_tests/page_objects/page_objects.dart'; import '../elements/extra_actions_element.dart'; @@ -15,66 +14,74 @@ import '../utils.dart'; import 'test_screen.dart'; class HomeTestScreen extends TestScreen { - final _filterButtonFinder = find.byValueKey('__filterButton__'); - final _extraActionsButtonFinder = find.byValueKey('__extraActionsButton__'); - final _todosTabFinder = find.byValueKey('__todoTab__'); - final _statsTabFinder = find.byValueKey('__statsTab__'); - final _snackbarFinder = find.byValueKey('__snackbar__'); - final _addTodoButtonFinder = find.byValueKey('__addTodoFab__'); + final _filterButtonFinder = find.byKey(ValueKey('__filterButton__')); + final _extraActionsButtonFinder = + find.byKey(ValueKey('__extraActionsButton__')); + final _todosTabFinder = find.byKey(ValueKey('__todoTab__')); + final _statsTabFinder = find.byKey(ValueKey('__statsTab__')); + final _snackbarFinder = find.byKey(ValueKey('__snackbar__')); + final _addTodoButtonFinder = find.byKey(ValueKey('__addTodoFab__')); - HomeTestScreen(FlutterDriver driver) : super(driver); + HomeTestScreen(WidgetTester tester) : super(tester); @override - Future isLoading({Duration? timeout}) async => - TodoListElement(driver).isLoading; + Future isLoading() async => TodoListElement(tester).isLoading; @override - Future isReady({Duration? timeout}) => TodoListElement(driver).isReady; + Future isReady() => TodoListElement(tester).isReady; TodoListElement get todoList { - return TodoListElement(driver); + return TodoListElement(tester); } StatsElement get stats { - return StatsElement(driver); + return StatsElement(tester); } - TodoListElement tapTodosTab() { - driver.tap(_todosTabFinder); + Future tapTodosTab() async { + await tester.tap(_todosTabFinder); + await tester.pumpAndSettle(); - return TodoListElement(driver); + return TodoListElement(tester); } - StatsElement tapStatsTab() { - driver.tap(_statsTabFinder); + Future tapStatsTab() async { + await tester.tap(_statsTabFinder); + await tester.pumpAndSettle(); - return StatsElement(driver); + return StatsElement(tester); } - FiltersElement tapFilterButton() { - driver.tap(_filterButtonFinder); + Future tapFilterButton() async { + await tester.tap(_filterButtonFinder); + await tester.pumpAndSettle(); - return FiltersElement(driver); + return FiltersElement(tester); } - ExtraActionsElement tapExtraActionsButton() { - driver.tap(_extraActionsButtonFinder); + Future tapExtraActionsButton() async { + await tester.tap(_extraActionsButtonFinder); + await tester.pumpAndSettle(); - return ExtraActionsElement(driver); + return ExtraActionsElement(tester); } - Future get snackbarVisible { - return widgetExists(driver, _snackbarFinder); + Future get snackbarVisible async { + await tester.pumpAndSettle(); + return widgetExists(tester, _snackbarFinder); } - AddTestScreen tapAddTodoButton() { - driver.tap(_addTodoButtonFinder); + Future tapAddTodoButton() async { + await tester.tap(_addTodoButtonFinder); + await tester.pumpAndSettle(); - return AddTestScreen(driver); + return AddTestScreen(tester); } - DetailsTestScreen tapTodo(String text) { - driver.tap(find.text(text)); - return DetailsTestScreen(driver); + Future tapTodo(String text) async { + await tester.tap(find.text(text)); + await tester.pumpAndSettle(); + + return DetailsTestScreen(tester); } } diff --git a/integration_tests/lib/page_objects/screens/test_screen.dart b/integration_tests/lib/page_objects/screens/test_screen.dart index 93df44be..35023041 100644 --- a/integration_tests/lib/page_objects/screens/test_screen.dart +++ b/integration_tests/lib/page_objects/screens/test_screen.dart @@ -2,18 +2,16 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter_test/flutter_test.dart'; abstract class TestScreen { - final FlutterDriver driver; + final WidgetTester tester; - TestScreen(this.driver); + TestScreen(this.tester); - Future isLoading({Duration? timeout}) async { - return !(await isReady(timeout: timeout)); + Future isLoading() async { + return !(await isReady()); } - Future isReady({Duration? timeout}); + Future isReady(); } diff --git a/integration_tests/lib/page_objects/utils.dart b/integration_tests/lib/page_objects/utils.dart index 91c316d6..246fdc43 100644 --- a/integration_tests/lib/page_objects/utils.dart +++ b/integration_tests/lib/page_objects/utils.dart @@ -2,18 +2,15 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; - -import 'package:flutter_driver/flutter_driver.dart'; +import 'package:flutter_test/flutter_test.dart'; Future widgetExists( - FlutterDriver driver, - SerializableFinder finder, { + WidgetTester tester, + Finder finder, { Duration? timeout, }) async { try { - await driver.waitFor(finder, timeout: timeout); - + expect(finder, findsOneWidget); return true; } catch (_) { return false; @@ -21,13 +18,12 @@ Future widgetExists( } Future widgetAbsent( - FlutterDriver driver, - SerializableFinder finder, { + WidgetTester tester, + Finder finder, { Duration? timeout, }) async { try { - await driver.waitForAbsent(finder, timeout: timeout); - + expect(finder, findsNothing); return true; } catch (_) { return false; diff --git a/integration_tests/pubspec.yaml b/integration_tests/pubspec.yaml index 7eea9988..47eceb5a 100644 --- a/integration_tests/pubspec.yaml +++ b/integration_tests/pubspec.yaml @@ -5,12 +5,10 @@ environment: sdk: ">=3.0.0 <4.0.0" dependencies: - test: flutter: sdk: flutter - -dev_dependencies: - flutter_driver: + integration_test: sdk: flutter flutter_test: sdk: flutter + diff --git a/vanilla/integration_test/todo_app_test.dart b/vanilla/integration_test/todo_app_test.dart new file mode 100644 index 00000000..eeb867f1 --- /dev/null +++ b/vanilla/integration_test/todo_app_test.dart @@ -0,0 +1,21 @@ +// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. +// Use of this source code is governed by the MIT license that can be found +// in the LICENSE file. + +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; +import 'package:vanilla/app.dart'; + +void main() { + integration_tests.run(appBuilder: () async { + return VanillaApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'vanilla_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ); + }); +} diff --git a/vanilla/ios/Podfile.lock b/vanilla/ios/Podfile.lock new file mode 100644 index 00000000..08687c4f --- /dev/null +++ b/vanilla/ios/Podfile.lock @@ -0,0 +1,36 @@ +PODS: + - Flutter (1.0.0) + - integration_test (0.0.1): + - Flutter + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - Flutter (from `Flutter`) + - integration_test (from `.symlinks/plugins/integration_test/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + integration_test: + :path: ".symlinks/plugins/integration_test/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + +SPEC CHECKSUMS: + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 4305caec6b40dde0ae97be1573c53de1882a07e5 + +COCOAPODS: 1.16.2 diff --git a/vanilla/ios/Runner.xcodeproj/project.pbxproj b/vanilla/ios/Runner.xcodeproj/project.pbxproj index 7ce1ef68..218a547e 100644 --- a/vanilla/ios/Runner.xcodeproj/project.pbxproj +++ b/vanilla/ios/Runner.xcodeproj/project.pbxproj @@ -10,10 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3EE858315859C3F799362DF0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68FA29C02BF6C898B8034DB9 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + F7E1E4A039FDA7D15008B47F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A287D5B3E024352388909AE /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,12 +44,17 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2A287D5B3E024352388909AE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 493E106468F002FDC8F73575 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 68FA29C02BF6C898B8034DB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 76691252ADE67572F257F332 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 80A78C71B49A0EE44CB5D3D8 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,13 +62,25 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AE49379C8A5AA3D0B0930A80 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + D0963B7D6937E611A31743CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E39B9DE5900D2908FAAD2A2F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 2039A6A022C038EA54B964F9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F7E1E4A039FDA7D15008B47F /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 3EE858315859C3F799362DF0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -76,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 63435DBB790665929F2FF8F8 /* Pods */ = { + isa = PBXGroup; + children = ( + D0963B7D6937E611A31743CE /* Pods-Runner.debug.xcconfig */, + 493E106468F002FDC8F73575 /* Pods-Runner.release.xcconfig */, + 76691252ADE67572F257F332 /* Pods-Runner.profile.xcconfig */, + E39B9DE5900D2908FAAD2A2F /* Pods-RunnerTests.debug.xcconfig */, + 80A78C71B49A0EE44CB5D3D8 /* Pods-RunnerTests.release.xcconfig */, + AE49379C8A5AA3D0B0930A80 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 8F3AB7ADAB9FA900B3D1D69E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 68FA29C02BF6C898B8034DB9 /* Pods_Runner.framework */, + 2A287D5B3E024352388909AE /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 63435DBB790665929F2FF8F8 /* Pods */, + 8F3AB7ADAB9FA900B3D1D69E /* Frameworks */, ); sourceTree = ""; }; @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + 9F55E1C6C164756FD3E96A39 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 2039A6A022C038EA54B964F9 /* Frameworks */, ); buildRules = ( ); @@ -145,12 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 2306CB171E37EE9CB52B4C41 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + FB859F161608BA3C84908FA8 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -222,6 +270,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 2306CB171E37EE9CB52B4C41 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +323,45 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + 9F55E1C6C164756FD3E96A39 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FB859F161608BA3C84908FA8 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -379,6 +488,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = E39B9DE5900D2908FAAD2A2F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -396,6 +506,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 80A78C71B49A0EE44CB5D3D8 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -411,6 +522,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = AE49379C8A5AA3D0B0930A80 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata b/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16..21a3cc14 100644 --- a/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/vanilla/lib/app.dart b/vanilla/lib/app.dart index 64342b3b..4ff96844 100644 --- a/vanilla/lib/app.dart +++ b/vanilla/lib/app.dart @@ -10,10 +10,11 @@ import 'package:vanilla/models.dart'; import 'package:vanilla/screens/add_edit_screen.dart'; import 'package:vanilla/screens/home_screen.dart'; +@immutable class VanillaApp extends StatefulWidget { final TodosRepository repository; - VanillaApp({required this.repository}); + const VanillaApp({required this.repository}); @override State createState() { diff --git a/vanilla/lib/main.dart b/vanilla/lib/main.dart index e51db15c..e755d98f 100644 --- a/vanilla/lib/main.dart +++ b/vanilla/lib/main.dart @@ -7,14 +7,14 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; import 'package:vanilla/app.dart'; -Future main({String? storageKey}) async { +Future main() async { WidgetsFlutterBinding.ensureInitialized(); runApp( VanillaApp( repository: LocalStorageRepository( localStorage: KeyValueStorage( - storageKey ?? 'vanilla', + 'vanilla', await SharedPreferences.getInstance(), ), ), diff --git a/vanilla/lib/widgets/todo_list.dart b/vanilla/lib/widgets/todo_list.dart index 2ffefc51..a7b4edcc 100644 --- a/vanilla/lib/widgets/todo_list.dart +++ b/vanilla/lib/widgets/todo_list.dart @@ -22,7 +22,8 @@ class TodoList extends StatelessWidget { required this.addTodo, required this.removeTodo, required this.updateTodo, - }) : super(key: ArchSampleKeys.todoList); + super.key, + }); @override Widget build(BuildContext context) { diff --git a/vanilla/pubspec.yaml b/vanilla/pubspec.yaml index 1c4266a4..bb125238 100644 --- a/vanilla/pubspec.yaml +++ b/vanilla/pubspec.yaml @@ -29,7 +29,7 @@ dev_dependencies: flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter test: mockito: diff --git a/vanilla/test_driver/todo_app.dart b/vanilla/test_driver/todo_app.dart deleted file mode 100644 index eaac4db8..00000000 --- a/vanilla/test_driver/todo_app.dart +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:vanilla/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(storageKey: 'vanilla_test_${DateTime.now().toIso8601String()}'); -} diff --git a/vanilla/test_driver/todo_app_test.dart b/vanilla/test_driver/todo_app_test.dart deleted file mode 100644 index ad93f5a5..00000000 --- a/vanilla/test_driver/todo_app_test.dart +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} From ee0309b0e383f8d3467b15740aeaaa6c47e4484d Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 00:38:44 +0100 Subject: [PATCH 03/89] Fix tests --- .../lib/src/todos_repository.dart | 3 +- todos_repository_local_storage/pubspec.yaml | 2 +- .../test/key_value_storage_test.dart | 20 ++++--- .../test/reactive_repository_test.dart | 39 +++++++------- .../test/repository_test.dart | 54 +++++++++++-------- 5 files changed, 67 insertions(+), 51 deletions(-) diff --git a/todos_repository_core/lib/src/todos_repository.dart b/todos_repository_core/lib/src/todos_repository.dart index 364cc9d4..1e777283 100644 --- a/todos_repository_core/lib/src/todos_repository.dart +++ b/todos_repository_core/lib/src/todos_repository.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'dart:async'; import 'dart:core'; import 'todo_entity.dart'; @@ -21,5 +20,5 @@ abstract class TodosRepository { Future> loadTodos(); // Persists todos to local disk and the web - Future saveTodos(List todos); + Future saveTodos(List todos); } diff --git a/todos_repository_local_storage/pubspec.yaml b/todos_repository_local_storage/pubspec.yaml index 4a27c0b6..964a02bf 100644 --- a/todos_repository_local_storage/pubspec.yaml +++ b/todos_repository_local_storage/pubspec.yaml @@ -16,4 +16,4 @@ dev_dependencies: test: flutter_test: sdk: flutter - mockito: + mocktail: diff --git a/todos_repository_local_storage/test/key_value_storage_test.dart b/todos_repository_local_storage/test/key_value_storage_test.dart index e2caca2e..eca1476f 100644 --- a/todos_repository_local_storage/test/key_value_storage_test.dart +++ b/todos_repository_local_storage/test/key_value_storage_test.dart @@ -2,30 +2,38 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:mockito/mockito.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -class MockKeyValueStore extends Mock implements SharedPreferences {} +class MocktailKeyValueStore extends Mock implements SharedPreferences {} void main() { group('KeyValueStorage', () { - final store = MockKeyValueStore(); final todos = [TodoEntity('Task', '1', 'Hallo', true)]; final todosJson = '{"todos":[{"complete":true,"task":"Task","note":"Hallo","id":"1"}]}'; - final storage = KeyValueStorage('T', store); test('Should persist TodoEntities to the store', () async { + final store = MocktailKeyValueStore(); + final storage = KeyValueStorage('T', store); + + when(() => store.setString('T', todosJson)).thenAnswer((_) async { + return true; + }); + await storage.saveTodos(todos); - verify(store.setString('T', todosJson)); + verify(() => store.setString('T', todosJson)); }); test('Should load TodoEntities from disk', () async { - when(store.getString('T')).thenReturn(todosJson); + final store = MocktailKeyValueStore(); + final storage = KeyValueStorage('T', store); + + when(() => store.getString('T')).thenReturn(todosJson); expect(await storage.loadTodos(), todos); }); diff --git a/todos_repository_local_storage/test/reactive_repository_test.dart b/todos_repository_local_storage/test/reactive_repository_test.dart index 74453787..ec7f403d 100644 --- a/todos_repository_local_storage/test/reactive_repository_test.dart +++ b/todos_repository_local_storage/test/reactive_repository_test.dart @@ -4,12 +4,12 @@ import 'dart:async'; -import 'package:mockito/mockito.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -class MockTodosRepository extends Mock implements TodosRepository {} +class MocktailTodosRepository extends Mock implements TodosRepository {} void main() { group('ReactiveTodosRepository', () { @@ -24,13 +24,13 @@ void main() { test('should load todos from the base repo and send them to the client', () { final todos = createTodos(); - final repository = MockTodosRepository(); + final repository = MocktailTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: todos, ); - when(repository.loadTodos()) + when(() => repository.loadTodos()) .thenAnswer((_) => Future.value([])); expect(reactiveRepository.todos(), emits(todos)); @@ -38,54 +38,55 @@ void main() { test('should only load from the base repo once', () { final todos = createTodos(); - final repository = MockTodosRepository(); + final repository = MocktailTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: todos, ); - when(repository.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(() => repository.loadTodos()).thenAnswer((_) => Future.value(todos)); expect(reactiveRepository.todos(), emits(todos)); expect(reactiveRepository.todos(), emits(todos)); - verify(repository.loadTodos()).called(1); + verify(() => repository.loadTodos()).called(1); }); test('should add todos to the repository and emit the change', () async { final todos = createTodos(); - final repository = MockTodosRepository(); + final repository = MocktailTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: [], ); - when(repository.loadTodos()) + when(() => repository.loadTodos()) .thenAnswer((_) => Future.value([])); - when(repository.saveTodos(todos)).thenAnswer((_) => Future.value()); + when(() => repository.saveTodos([todos.first])) + .thenAnswer((_) async => {}); await reactiveRepository.addNewTodo(todos.first); - verify(repository.saveTodos(any)); + verify(() => repository.saveTodos([todos.first])); expect(reactiveRepository.todos(), emits([todos.first])); }); test('should update a todo in the repository and emit the change', () async { final todos = createTodos(); - final repository = MockTodosRepository(); + final repository = MocktailTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: todos, ); final update = createTodos('task'); - when(repository.loadTodos()).thenAnswer((_) => Future.value(todos)); - when(repository.saveTodos(any)).thenAnswer((_) => Future.value()); + when(() => repository.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(() => repository.saveTodos(any())).thenAnswer((_) => Future.value()); await reactiveRepository.updateTodo(update.first); - verify(repository.saveTodos(any)); + verify(() => repository.saveTodos(any())); expect( reactiveRepository.todos(), emits([update[0], todos[1], todos[2]]), @@ -93,7 +94,7 @@ void main() { }); test('should remove todos from the repo and emit the change', () async { - final repository = MockTodosRepository(); + final repository = MocktailTodosRepository(); final todos = createTodos(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, @@ -101,12 +102,12 @@ void main() { ); final future = Future.value(todos); - when(repository.loadTodos()).thenAnswer((_) => future); - when(repository.saveTodos(any)).thenAnswer((_) => Future.value()); + when(() => repository.loadTodos()).thenAnswer((_) => future); + when(() => repository.saveTodos(any())).thenAnswer((_) => Future.value()); await reactiveRepository.deleteTodo([todos.first.id, todos.last.id]); - verify(repository.saveTodos(any)); + verify(() => repository.saveTodos(any())); expect(reactiveRepository.todos(), emits([todos[1]])); }); }); diff --git a/todos_repository_local_storage/test/repository_test.dart b/todos_repository_local_storage/test/repository_test.dart index 5774ce6f..9ac0795a 100644 --- a/todos_repository_local_storage/test/repository_test.dart +++ b/todos_repository_local_storage/test/repository_test.dart @@ -5,16 +5,16 @@ import 'dart:async'; import 'dart:io'; -import 'package:mockito/mockito.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; /// We create two Mocks for our Web Client and File Storage. We will use these /// mock classes to verify the behavior of the TodosRepository. -class MockFileStorage extends Mock implements FileStorage {} +class MocktailFileStorage extends Mock implements FileStorage {} -class MockWebClient extends Mock implements WebClient {} +class MocktailWebClient extends Mock implements WebClient {} void main() { group('TodosRepository', () { @@ -25,8 +25,8 @@ void main() { test( 'should load todos from File Storage if they exist without calling the web client', () { - final fileStorage = MockFileStorage(); - final webClient = MockWebClient(); + final fileStorage = MocktailFileStorage(); + final webClient = MocktailWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, @@ -36,17 +36,18 @@ void main() { // We'll use our mock throughout the tests to set certain conditions. In // this first test, we want to mock out our file storage to return a // list of Todos that we define here in our test! - when(fileStorage.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(() => fileStorage.loadTodos()) + .thenAnswer((_) => Future.value(todos)); expect(repository.loadTodos(), completion(todos)); - verifyNever(webClient.loadTodos()); + verifyNever(() => webClient.loadTodos()); }); test( 'should fetch todos from the Web Client if the file storage throws a synchronous error', () async { - final fileStorage = MockFileStorage(); - final webClient = MockWebClient(); + final fileStorage = MocktailFileStorage(); + final webClient = MocktailWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, @@ -55,51 +56,58 @@ void main() { // In this instance, we'll ask our Mock to throw an error. When it does, // we expect the web client to be called instead. - when(fileStorage.loadTodos()).thenThrow('Uh ohhhh'); - when(webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(() => fileStorage.loadTodos()).thenThrow('Uh ohhhh'); + when(() => fileStorage.saveTodos(todos)).thenAnswer( + (_) => Future.value(File('test')), + ); + when(() => webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); // We check that the correct todos were returned, and that the // webClient.loadTodos method was in fact called! expect(await repository.loadTodos(), todos); - verify(webClient.loadTodos()); + verify(() => webClient.loadTodos()); }); test( 'should fetch todos from the Web Client if the File storage returns an async error', () async { - final fileStorage = MockFileStorage(); - final webClient = MockWebClient(); + final fileStorage = MocktailFileStorage(); + final webClient = MocktailWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, ); final todos = createTodos(); - when(fileStorage.loadTodos()).thenThrow(Exception('Oh no.')); - when(webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(() => fileStorage.loadTodos()).thenThrow(Exception('Oh no.')); + when(() => fileStorage.saveTodos(todos)).thenAnswer( + (_) => Future.value(File('test')), + ); + when(() => webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); expect(await repository.loadTodos(), todos); - verify(webClient.loadTodos()); + verify(() => webClient.loadTodos()); }); test('should persist the todos to local disk and the web client', () { - final fileStorage = MockFileStorage(); - final webClient = MockWebClient(); + final fileStorage = MocktailFileStorage(); + final webClient = MocktailWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, ); final todos = createTodos(); - when(fileStorage.saveTodos(todos)) + when(() => fileStorage.saveTodos(todos)) .thenAnswer((_) => Future.value(File('falsch'))); - when(webClient.saveTodos(todos)).thenAnswer((_) => Future.value(true)); + when(() => webClient.saveTodos(todos)) + .thenAnswer((_) => Future.value(true)); // In this case, we just want to verify we're correctly persisting to all // the storage mechanisms we care about. expect(repository.saveTodos(todos), completes); - verify(fileStorage.saveTodos(todos)); - verify(webClient.saveTodos(todos)); + verify(() => fileStorage.saveTodos(todos)); + verify(() => webClient.saveTodos(todos)); }); }); } From b82c0bdf0537d609342ee486238053d146e94082 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 00:51:31 +0100 Subject: [PATCH 04/89] Migrate to mockito again --- todos_repository_local_storage/pubspec.yaml | 3 +- .../test/key_value_storage_test.dart | 20 +- .../test/key_value_storage_test.mocks.dart | 227 ++++++++++++++++++ .../test/reactive_repository_test.dart | 40 +-- .../test/reactive_repository_test.mocks.dart | 51 ++++ .../test/repository_test.dart | 60 +++-- .../test/repository_test.mocks.dart | 198 +++++++++++++++ 7 files changed, 537 insertions(+), 62 deletions(-) create mode 100644 todos_repository_local_storage/test/key_value_storage_test.mocks.dart create mode 100644 todos_repository_local_storage/test/reactive_repository_test.mocks.dart create mode 100644 todos_repository_local_storage/test/repository_test.mocks.dart diff --git a/todos_repository_local_storage/pubspec.yaml b/todos_repository_local_storage/pubspec.yaml index 964a02bf..6bb8c3f7 100644 --- a/todos_repository_local_storage/pubspec.yaml +++ b/todos_repository_local_storage/pubspec.yaml @@ -16,4 +16,5 @@ dev_dependencies: test: flutter_test: sdk: flutter - mocktail: + mockito: + build_runner: diff --git a/todos_repository_local_storage/test/key_value_storage_test.dart b/todos_repository_local_storage/test/key_value_storage_test.dart index eca1476f..f05d59df 100644 --- a/todos_repository_local_storage/test/key_value_storage_test.dart +++ b/todos_repository_local_storage/test/key_value_storage_test.dart @@ -2,14 +2,16 @@ // Use of this source code is governed by the MIT license that can be found // in the LICENSE file. -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -class MocktailKeyValueStore extends Mock implements SharedPreferences {} +import 'key_value_storage_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('KeyValueStorage', () { final todos = [TodoEntity('Task', '1', 'Hallo', true)]; @@ -17,23 +19,23 @@ void main() { '{"todos":[{"complete":true,"task":"Task","note":"Hallo","id":"1"}]}'; test('Should persist TodoEntities to the store', () async { - final store = MocktailKeyValueStore(); - final storage = KeyValueStorage('T', store); + final prefs = MockSharedPreferences(); + final storage = KeyValueStorage('T', prefs); - when(() => store.setString('T', todosJson)).thenAnswer((_) async { + when(prefs.setString('T', todosJson)).thenAnswer((_) async { return true; }); await storage.saveTodos(todos); - verify(() => store.setString('T', todosJson)); + verify(prefs.setString('T', todosJson)); }); test('Should load TodoEntities from disk', () async { - final store = MocktailKeyValueStore(); - final storage = KeyValueStorage('T', store); + final prefs = MockSharedPreferences(); + final storage = KeyValueStorage('T', prefs); - when(() => store.getString('T')).thenReturn(todosJson); + when(prefs.getString('T')).thenReturn(todosJson); expect(await storage.loadTodos(), todos); }); diff --git a/todos_repository_local_storage/test/key_value_storage_test.mocks.dart b/todos_repository_local_storage/test/key_value_storage_test.mocks.dart new file mode 100644 index 00000000..f6af9524 --- /dev/null +++ b/todos_repository_local_storage/test/key_value_storage_test.mocks.dart @@ -0,0 +1,227 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in todos_repository_local_storage/test/key_value_storage_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:shared_preferences/src/shared_preferences_legacy.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [SharedPreferences]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockSharedPreferences extends _i1.Mock implements _i2.SharedPreferences { + @override + Set getKeys() => (super.noSuchMethod( + Invocation.method( + #getKeys, + [], + ), + returnValue: {}, + returnValueForMissingStub: {}, + ) as Set); + + @override + Object? get(String? key) => (super.noSuchMethod( + Invocation.method( + #get, + [key], + ), + returnValueForMissingStub: null, + ) as Object?); + + @override + bool? getBool(String? key) => (super.noSuchMethod( + Invocation.method( + #getBool, + [key], + ), + returnValueForMissingStub: null, + ) as bool?); + + @override + int? getInt(String? key) => (super.noSuchMethod( + Invocation.method( + #getInt, + [key], + ), + returnValueForMissingStub: null, + ) as int?); + + @override + double? getDouble(String? key) => (super.noSuchMethod( + Invocation.method( + #getDouble, + [key], + ), + returnValueForMissingStub: null, + ) as double?); + + @override + String? getString(String? key) => (super.noSuchMethod( + Invocation.method( + #getString, + [key], + ), + returnValueForMissingStub: null, + ) as String?); + + @override + bool containsKey(String? key) => (super.noSuchMethod( + Invocation.method( + #containsKey, + [key], + ), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + List? getStringList(String? key) => (super.noSuchMethod( + Invocation.method( + #getStringList, + [key], + ), + returnValueForMissingStub: null, + ) as List?); + + @override + _i3.Future setBool( + String? key, + bool? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setBool, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future setInt( + String? key, + int? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setInt, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future setDouble( + String? key, + double? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setDouble, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future setString( + String? key, + String? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setString, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future setStringList( + String? key, + List? value, + ) => + (super.noSuchMethod( + Invocation.method( + #setStringList, + [ + key, + value, + ], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future remove(String? key) => (super.noSuchMethod( + Invocation.method( + #remove, + [key], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future commit() => (super.noSuchMethod( + Invocation.method( + #commit, + [], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future clear() => (super.noSuchMethod( + Invocation.method( + #clear, + [], + ), + returnValue: _i3.Future.value(false), + returnValueForMissingStub: _i3.Future.value(false), + ) as _i3.Future); + + @override + _i3.Future reload() => (super.noSuchMethod( + Invocation.method( + #reload, + [], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); +} diff --git a/todos_repository_local_storage/test/reactive_repository_test.dart b/todos_repository_local_storage/test/reactive_repository_test.dart index ec7f403d..bbebb41d 100644 --- a/todos_repository_local_storage/test/reactive_repository_test.dart +++ b/todos_repository_local_storage/test/reactive_repository_test.dart @@ -4,13 +4,15 @@ import 'dart:async'; -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -class MocktailTodosRepository extends Mock implements TodosRepository {} +import 'reactive_repository_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('ReactiveTodosRepository', () { List createTodos([String task = 'Task']) { @@ -24,13 +26,13 @@ void main() { test('should load todos from the base repo and send them to the client', () { final todos = createTodos(); - final repository = MocktailTodosRepository(); + final repository = MockTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: todos, ); - when(() => repository.loadTodos()) + when(repository.loadTodos()) .thenAnswer((_) => Future.value([])); expect(reactiveRepository.todos(), emits(todos)); @@ -38,55 +40,53 @@ void main() { test('should only load from the base repo once', () { final todos = createTodos(); - final repository = MocktailTodosRepository(); + final repository = MockTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: todos, ); - when(() => repository.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(repository.loadTodos()).thenAnswer((_) => Future.value(todos)); expect(reactiveRepository.todos(), emits(todos)); expect(reactiveRepository.todos(), emits(todos)); - verify(() => repository.loadTodos()).called(1); + verify(repository.loadTodos()).called(1); }); test('should add todos to the repository and emit the change', () async { final todos = createTodos(); - final repository = MocktailTodosRepository(); + final repository = MockTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: [], ); - when(() => repository.loadTodos()) + when(repository.loadTodos()) .thenAnswer((_) => Future.value([])); - when(() => repository.saveTodos([todos.first])) - .thenAnswer((_) async => {}); await reactiveRepository.addNewTodo(todos.first); - verify(() => repository.saveTodos([todos.first])); + verify(repository.saveTodos([todos.first])); expect(reactiveRepository.todos(), emits([todos.first])); }); test('should update a todo in the repository and emit the change', () async { final todos = createTodos(); - final repository = MocktailTodosRepository(); + final repository = MockTodosRepository(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, seedValue: todos, ); final update = createTodos('task'); - when(() => repository.loadTodos()).thenAnswer((_) => Future.value(todos)); - when(() => repository.saveTodos(any())).thenAnswer((_) => Future.value()); + when(repository.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(repository.saveTodos(any)).thenAnswer((_) => Future.value()); await reactiveRepository.updateTodo(update.first); - verify(() => repository.saveTodos(any())); + verify(repository.saveTodos(any)); expect( reactiveRepository.todos(), emits([update[0], todos[1], todos[2]]), @@ -94,7 +94,7 @@ void main() { }); test('should remove todos from the repo and emit the change', () async { - final repository = MocktailTodosRepository(); + final repository = MockTodosRepository(); final todos = createTodos(); final reactiveRepository = ReactiveLocalStorageRepository( repository: repository, @@ -102,12 +102,12 @@ void main() { ); final future = Future.value(todos); - when(() => repository.loadTodos()).thenAnswer((_) => future); - when(() => repository.saveTodos(any())).thenAnswer((_) => Future.value()); + when(repository.loadTodos()).thenAnswer((_) => future); + when(repository.saveTodos(any)).thenAnswer((_) => Future.value()); await reactiveRepository.deleteTodo([todos.first.id, todos.last.id]); - verify(() => repository.saveTodos(any())); + verify(repository.saveTodos(any)); expect(reactiveRepository.todos(), emits([todos[1]])); }); }); diff --git a/todos_repository_local_storage/test/reactive_repository_test.mocks.dart b/todos_repository_local_storage/test/reactive_repository_test.mocks.dart new file mode 100644 index 00000000..9492a4e4 --- /dev/null +++ b/todos_repository_local_storage/test/reactive_repository_test.mocks.dart @@ -0,0 +1,51 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in todos_repository_local_storage/test/reactive_repository_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; +import 'package:todos_repository_core/src/todos_repository.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosRepository extends _i1.Mock implements _i2.TodosRepository { + @override + _i3.Future> loadTodos() => (super.noSuchMethod( + Invocation.method( + #loadTodos, + [], + ), + returnValue: _i3.Future>.value(<_i4.TodoEntity>[]), + returnValueForMissingStub: + _i3.Future>.value(<_i4.TodoEntity>[]), + ) as _i3.Future>); + + @override + _i3.Future saveTodos(List<_i4.TodoEntity>? todos) => + (super.noSuchMethod( + Invocation.method( + #saveTodos, + [todos], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); +} diff --git a/todos_repository_local_storage/test/repository_test.dart b/todos_repository_local_storage/test/repository_test.dart index 9ac0795a..b69e9d31 100644 --- a/todos_repository_local_storage/test/repository_test.dart +++ b/todos_repository_local_storage/test/repository_test.dart @@ -5,17 +5,18 @@ import 'dart:async'; import 'dart:io'; -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -/// We create two Mocks for our Web Client and File Storage. We will use these -/// mock classes to verify the behavior of the TodosRepository. -class MocktailFileStorage extends Mock implements FileStorage {} - -class MocktailWebClient extends Mock implements WebClient {} +import 'repository_test.mocks.dart'; +@GenerateNiceMocks([ + MockSpec(), + MockSpec(), +]) void main() { group('TodosRepository', () { List createTodos() { @@ -25,8 +26,8 @@ void main() { test( 'should load todos from File Storage if they exist without calling the web client', () { - final fileStorage = MocktailFileStorage(); - final webClient = MocktailWebClient(); + final fileStorage = MockFileStorage(); + final webClient = MockWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, @@ -36,18 +37,17 @@ void main() { // We'll use our mock throughout the tests to set certain conditions. In // this first test, we want to mock out our file storage to return a // list of Todos that we define here in our test! - when(() => fileStorage.loadTodos()) - .thenAnswer((_) => Future.value(todos)); + when(fileStorage.loadTodos()).thenAnswer((_) => Future.value(todos)); expect(repository.loadTodos(), completion(todos)); - verifyNever(() => webClient.loadTodos()); + verifyNever(webClient.loadTodos()); }); test( 'should fetch todos from the Web Client if the file storage throws a synchronous error', () async { - final fileStorage = MocktailFileStorage(); - final webClient = MocktailWebClient(); + final fileStorage = MockFileStorage(); + final webClient = MockWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, @@ -56,58 +56,54 @@ void main() { // In this instance, we'll ask our Mock to throw an error. When it does, // we expect the web client to be called instead. - when(() => fileStorage.loadTodos()).thenThrow('Uh ohhhh'); - when(() => fileStorage.saveTodos(todos)).thenAnswer( - (_) => Future.value(File('test')), - ); - when(() => webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(fileStorage.loadTodos()).thenThrow('Uh ohhhh'); + when(webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); // We check that the correct todos were returned, and that the // webClient.loadTodos method was in fact called! expect(await repository.loadTodos(), todos); - verify(() => webClient.loadTodos()); + verify(webClient.loadTodos()); }); test( 'should fetch todos from the Web Client if the File storage returns an async error', () async { - final fileStorage = MocktailFileStorage(); - final webClient = MocktailWebClient(); + final fileStorage = MockFileStorage(); + final webClient = MockWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, ); final todos = createTodos(); - when(() => fileStorage.loadTodos()).thenThrow(Exception('Oh no.')); - when(() => fileStorage.saveTodos(todos)).thenAnswer( + when(fileStorage.loadTodos()).thenThrow(Exception('Oh no.')); + when(fileStorage.saveTodos(todos)).thenAnswer( (_) => Future.value(File('test')), ); - when(() => webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); + when(webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); expect(await repository.loadTodos(), todos); - verify(() => webClient.loadTodos()); + verify(webClient.loadTodos()); }); test('should persist the todos to local disk and the web client', () { - final fileStorage = MocktailFileStorage(); - final webClient = MocktailWebClient(); + final fileStorage = MockFileStorage(); + final webClient = MockWebClient(); final repository = LocalStorageRepository( localStorage: fileStorage, webClient: webClient, ); final todos = createTodos(); - when(() => fileStorage.saveTodos(todos)) + when(fileStorage.saveTodos(todos)) .thenAnswer((_) => Future.value(File('falsch'))); - when(() => webClient.saveTodos(todos)) - .thenAnswer((_) => Future.value(true)); + when(webClient.saveTodos(todos)).thenAnswer((_) => Future.value(true)); // In this case, we just want to verify we're correctly persisting to all // the storage mechanisms we care about. expect(repository.saveTodos(todos), completes); - verify(() => fileStorage.saveTodos(todos)); - verify(() => webClient.saveTodos(todos)); + verify(fileStorage.saveTodos(todos)); + verify(webClient.saveTodos(todos)); }); }); } diff --git a/todos_repository_local_storage/test/repository_test.mocks.dart b/todos_repository_local_storage/test/repository_test.mocks.dart new file mode 100644 index 00000000..ebf0cdbe --- /dev/null +++ b/todos_repository_local_storage/test/repository_test.mocks.dart @@ -0,0 +1,198 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in todos_repository_local_storage/test/repository_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i5; +import 'dart:io' as _i2; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i4; +import 'package:todos_repository_core/todos_repository_core.dart' as _i6; +import 'package:todos_repository_local_storage/src/file_storage.dart' as _i3; +import 'package:todos_repository_local_storage/src/web_client.dart' as _i7; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeDirectory_0 extends _i1.SmartFake implements _i2.Directory { + _FakeDirectory_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeFile_1 extends _i1.SmartFake implements _i2.File { + _FakeFile_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeFileSystemEntity_2 extends _i1.SmartFake + implements _i2.FileSystemEntity { + _FakeFileSystemEntity_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeDuration_3 extends _i1.SmartFake implements Duration { + _FakeDuration_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [FileStorage]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockFileStorage extends _i1.Mock implements _i3.FileStorage { + @override + String get tag => (super.noSuchMethod( + Invocation.getter(#tag), + returnValue: _i4.dummyValue( + this, + Invocation.getter(#tag), + ), + returnValueForMissingStub: _i4.dummyValue( + this, + Invocation.getter(#tag), + ), + ) as String); + + @override + _i5.Future<_i2.Directory> Function() get getDirectory => (super.noSuchMethod( + Invocation.getter(#getDirectory), + returnValue: () => _i5.Future<_i2.Directory>.value(_FakeDirectory_0( + this, + Invocation.getter(#getDirectory), + )), + returnValueForMissingStub: () => + _i5.Future<_i2.Directory>.value(_FakeDirectory_0( + this, + Invocation.getter(#getDirectory), + )), + ) as _i5.Future<_i2.Directory> Function()); + + @override + _i5.Future> loadTodos() => (super.noSuchMethod( + Invocation.method( + #loadTodos, + [], + ), + returnValue: _i5.Future>.value(<_i6.TodoEntity>[]), + returnValueForMissingStub: + _i5.Future>.value(<_i6.TodoEntity>[]), + ) as _i5.Future>); + + @override + _i5.Future<_i2.File> saveTodos(List<_i6.TodoEntity>? todos) => + (super.noSuchMethod( + Invocation.method( + #saveTodos, + [todos], + ), + returnValue: _i5.Future<_i2.File>.value(_FakeFile_1( + this, + Invocation.method( + #saveTodos, + [todos], + ), + )), + returnValueForMissingStub: _i5.Future<_i2.File>.value(_FakeFile_1( + this, + Invocation.method( + #saveTodos, + [todos], + ), + )), + ) as _i5.Future<_i2.File>); + + @override + _i5.Future<_i2.FileSystemEntity> clean() => (super.noSuchMethod( + Invocation.method( + #clean, + [], + ), + returnValue: + _i5.Future<_i2.FileSystemEntity>.value(_FakeFileSystemEntity_2( + this, + Invocation.method( + #clean, + [], + ), + )), + returnValueForMissingStub: + _i5.Future<_i2.FileSystemEntity>.value(_FakeFileSystemEntity_2( + this, + Invocation.method( + #clean, + [], + ), + )), + ) as _i5.Future<_i2.FileSystemEntity>); +} + +/// A class which mocks [WebClient]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWebClient extends _i1.Mock implements _i7.WebClient { + @override + Duration get delay => (super.noSuchMethod( + Invocation.getter(#delay), + returnValue: _FakeDuration_3( + this, + Invocation.getter(#delay), + ), + returnValueForMissingStub: _FakeDuration_3( + this, + Invocation.getter(#delay), + ), + ) as Duration); + + @override + _i5.Future> loadTodos() => (super.noSuchMethod( + Invocation.method( + #loadTodos, + [], + ), + returnValue: _i5.Future>.value(<_i6.TodoEntity>[]), + returnValueForMissingStub: + _i5.Future>.value(<_i6.TodoEntity>[]), + ) as _i5.Future>); + + @override + _i5.Future saveTodos(List<_i6.TodoEntity>? todos) => + (super.noSuchMethod( + Invocation.method( + #saveTodos, + [todos], + ), + returnValue: _i5.Future.value(false), + returnValueForMissingStub: _i5.Future.value(false), + ) as _i5.Future); +} From 2203fcff08c104f3f318f6efb9d83951cfcf6c0b Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 13:05:21 +0100 Subject: [PATCH 05/89] Update for tests --- .../test/key_value_storage_test.dart | 4 ---- todos_repository_local_storage/test/repository_test.dart | 3 --- 2 files changed, 7 deletions(-) diff --git a/todos_repository_local_storage/test/key_value_storage_test.dart b/todos_repository_local_storage/test/key_value_storage_test.dart index f05d59df..0509e462 100644 --- a/todos_repository_local_storage/test/key_value_storage_test.dart +++ b/todos_repository_local_storage/test/key_value_storage_test.dart @@ -22,10 +22,6 @@ void main() { final prefs = MockSharedPreferences(); final storage = KeyValueStorage('T', prefs); - when(prefs.setString('T', todosJson)).thenAnswer((_) async { - return true; - }); - await storage.saveTodos(todos); verify(prefs.setString('T', todosJson)); diff --git a/todos_repository_local_storage/test/repository_test.dart b/todos_repository_local_storage/test/repository_test.dart index b69e9d31..d0febe82 100644 --- a/todos_repository_local_storage/test/repository_test.dart +++ b/todos_repository_local_storage/test/repository_test.dart @@ -77,9 +77,6 @@ void main() { final todos = createTodos(); when(fileStorage.loadTodos()).thenThrow(Exception('Oh no.')); - when(fileStorage.saveTodos(todos)).thenAnswer( - (_) => Future.value(File('test')), - ); when(webClient.loadTodos()).thenAnswer((_) => Future.value(todos)); expect(await repository.loadTodos(), todos); From fa3646b1429a4ca144cfaaf1b8252fb76e69bd87 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 14:04:24 +0100 Subject: [PATCH 06/89] Upgrade vanilla lints --- vanilla/analysis_options.yaml | 6 ++++++ vanilla/lib/app.dart | 2 +- vanilla/lib/models.dart | 4 +++- vanilla/lib/screens/add_edit_screen.dart | 8 ++++---- vanilla/lib/screens/detail_screen.dart | 9 +++++---- vanilla/lib/screens/home_screen.dart | 4 ++-- vanilla/lib/widgets/extra_actions_button.dart | 2 +- vanilla/lib/widgets/filter_button.dart | 2 +- vanilla/lib/widgets/stats_counter.dart | 2 +- vanilla/lib/widgets/todo_item.dart | 3 ++- vanilla/lib/widgets/todo_list.dart | 4 ++-- vanilla/pubspec.yaml | 2 ++ 12 files changed, 30 insertions(+), 18 deletions(-) diff --git a/vanilla/analysis_options.yaml b/vanilla/analysis_options.yaml index 0d290213..134f2137 100644 --- a/vanilla/analysis_options.yaml +++ b/vanilla/analysis_options.yaml @@ -9,6 +9,12 @@ # packages, and plugins designed to encourage good coding practices. include: package:flutter_lints/flutter.yaml +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + linter: # The lint rules applied to this project can be customized in the # section below to disable rules from the `package:flutter_lints/flutter.yaml` diff --git a/vanilla/lib/app.dart b/vanilla/lib/app.dart index 4ff96844..8612b2eb 100644 --- a/vanilla/lib/app.dart +++ b/vanilla/lib/app.dart @@ -14,7 +14,7 @@ import 'package:vanilla/screens/home_screen.dart'; class VanillaApp extends StatefulWidget { final TodosRepository repository; - const VanillaApp({required this.repository}); + const VanillaApp({super.key, required this.repository}); @override State createState() { diff --git a/vanilla/lib/models.dart b/vanilla/lib/models.dart index 110b3ed3..f70189e2 100644 --- a/vanilla/lib/models.dart +++ b/vanilla/lib/models.dart @@ -56,7 +56,9 @@ class AppState { void toggleAll() { final allCompleted = allComplete; - todos.forEach((todo) => todo.complete = !allCompleted); + for (final todo in todos) { + todo.complete = !allCompleted; + } } @override diff --git a/vanilla/lib/screens/add_edit_screen.dart b/vanilla/lib/screens/add_edit_screen.dart index d73d5756..47dfa848 100644 --- a/vanilla/lib/screens/add_edit_screen.dart +++ b/vanilla/lib/screens/add_edit_screen.dart @@ -12,15 +12,15 @@ class AddEditScreen extends StatefulWidget { final TodoAdder addTodo; final TodoUpdater updateTodo; - AddEditScreen({ - Key? key, + const AddEditScreen({ + super.key = ArchSampleKeys.addTodoScreen, required this.addTodo, required this.updateTodo, this.todo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + }); @override - _AddEditScreenState createState() => _AddEditScreenState(); + State createState() => _AddEditScreenState(); } class _AddEditScreenState extends State { diff --git a/vanilla/lib/screens/detail_screen.dart b/vanilla/lib/screens/detail_screen.dart index 56a271b9..051ca512 100644 --- a/vanilla/lib/screens/detail_screen.dart +++ b/vanilla/lib/screens/detail_screen.dart @@ -14,12 +14,13 @@ class DetailScreen extends StatelessWidget { final TodoAdder addTodo; final TodoUpdater updateTodo; - DetailScreen({ + const DetailScreen({ + super.key = ArchSampleKeys.todoDetailsScreen, required this.todo, required this.addTodo, required this.updateTodo, required this.onDelete, - }) : super(key: ArchSampleKeys.todoDetailsScreen); + }); @override Widget build(BuildContext context) { @@ -85,10 +86,9 @@ class DetailScreen extends StatelessWidget { ), floatingActionButton: FloatingActionButton( tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), key: ArchSampleKeys.editTodoFab, onPressed: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) { return AddEditScreen( @@ -101,6 +101,7 @@ class DetailScreen extends StatelessWidget { ), ); }, + child: Icon(Icons.edit), ), ); } diff --git a/vanilla/lib/screens/home_screen.dart b/vanilla/lib/screens/home_screen.dart index 22f097d6..97b2a7f1 100644 --- a/vanilla/lib/screens/home_screen.dart +++ b/vanilla/lib/screens/home_screen.dart @@ -20,7 +20,7 @@ class HomeScreen extends StatefulWidget { final Function toggleAll; final Function clearCompleted; - HomeScreen({ + const HomeScreen({ required this.appState, required this.addTodo, required this.removeTodo, @@ -93,8 +93,8 @@ class HomeScreenState extends State { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.add), ), bottomNavigationBar: BottomNavigationBar( key: ArchSampleKeys.tabs, diff --git a/vanilla/lib/widgets/extra_actions_button.dart b/vanilla/lib/widgets/extra_actions_button.dart index 5b017c60..f4f89d57 100644 --- a/vanilla/lib/widgets/extra_actions_button.dart +++ b/vanilla/lib/widgets/extra_actions_button.dart @@ -11,7 +11,7 @@ class ExtraActionsButton extends StatelessWidget { final bool allComplete; final bool hasCompletedTodos; - ExtraActionsButton({ + const ExtraActionsButton({ required this.onSelected, this.allComplete = false, this.hasCompletedTodos = true, diff --git a/vanilla/lib/widgets/filter_button.dart b/vanilla/lib/widgets/filter_button.dart index 90cd3aaf..570dc607 100644 --- a/vanilla/lib/widgets/filter_button.dart +++ b/vanilla/lib/widgets/filter_button.dart @@ -11,7 +11,7 @@ class FilterButton extends StatelessWidget { final VisibilityFilter activeFilter; final bool isActive; - FilterButton({ + const FilterButton({ required this.onSelected, required this.activeFilter, required this.isActive, diff --git a/vanilla/lib/widgets/stats_counter.dart b/vanilla/lib/widgets/stats_counter.dart index bfe1ff54..f3f41dbc 100644 --- a/vanilla/lib/widgets/stats_counter.dart +++ b/vanilla/lib/widgets/stats_counter.dart @@ -9,7 +9,7 @@ class StatsCounter extends StatelessWidget { final int numActive; final int numCompleted; - StatsCounter({required this.numActive, required this.numCompleted}) + const StatsCounter({required this.numActive, required this.numCompleted}) : super(key: ArchSampleKeys.statsCounter); @override diff --git a/vanilla/lib/widgets/todo_item.dart b/vanilla/lib/widgets/todo_item.dart index 0d0bb909..8bdf2056 100644 --- a/vanilla/lib/widgets/todo_item.dart +++ b/vanilla/lib/widgets/todo_item.dart @@ -12,7 +12,8 @@ class TodoItem extends StatelessWidget { final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ + const TodoItem({ + super.key, required this.onDismissed, required this.onTap, required this.onCheckboxChanged, diff --git a/vanilla/lib/widgets/todo_list.dart b/vanilla/lib/widgets/todo_list.dart index a7b4edcc..f454f376 100644 --- a/vanilla/lib/widgets/todo_list.dart +++ b/vanilla/lib/widgets/todo_list.dart @@ -16,7 +16,7 @@ class TodoList extends StatelessWidget { final TodoRemover removeTodo; final TodoUpdater updateTodo; - TodoList({ + const TodoList({ required this.filteredTodos, required this.loading, required this.addTodo, @@ -45,7 +45,7 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (_) { return DetailScreen( diff --git a/vanilla/pubspec.yaml b/vanilla/pubspec.yaml index bb125238..d9661b7f 100644 --- a/vanilla/pubspec.yaml +++ b/vanilla/pubspec.yaml @@ -22,6 +22,8 @@ dependencies: sdk: flutter todos_app_core: path: ../todos_app_core + todos_repository_core: + path: ../todos_repository_core todos_repository_local_storage: path: ../todos_repository_local_storage shared_preferences: From 76d12ad8a9eda6e4e9cbd617914784cfa7b4bda2 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 14:45:30 +0100 Subject: [PATCH 07/89] Remove old CI bits, to be replaced by github actions --- .cirrus.yml | 112 -------------- .travis.yml | 352 ------------------------------------------ CHANGELOG.md | 5 - Makefile | 19 --- analysis_options.yaml | 56 ------- 5 files changed, 544 deletions(-) delete mode 100644 .cirrus.yml delete mode 100644 .travis.yml delete mode 100644 CHANGELOG.md delete mode 100644 Makefile delete mode 100644 analysis_options.yaml diff --git a/.cirrus.yml b/.cirrus.yml deleted file mode 100644 index b5c29eca..00000000 --- a/.cirrus.yml +++ /dev/null @@ -1,112 +0,0 @@ -timeout_in: 30m -env: - FLUTTER_CHANNEL: stable - FLUTTER_VERSION: v1.12.13+hotfix.5 - DOCKER_VERSION: v1.12.13-hotfix.5 # docker tags cannot have plus - -task: - # this task should fail fast or rely on 'depends_on' for all other tasks - name: Static analysis, formatting, and unit tests - container: - image: cirrusci/flutter:$DOCKER_VERSION - pub_cache: - folder: ~/.pub-cache - activate_coverage_script: pub global activate coverage - tests_script: ./scripts/runTests.sh - -task: - name: Integration Tests for $app_arch (Linux) - # don't run for PRs - only_if: $CIRRUS_PR == '' - skip: '!changesInclude(".cirrus.yml", "$app_arch/*", "$app_arch/**/*")' - env: - EMULATOR_API_LEVEL: 28 - ANDROID_ABI: "default;x86" - matrix: - app_arch: bloc_flutter - app_arch: bloc_library - app_arch: built_redux - app_arch: firestore_redux - app_arch: frideos_library - app_arch: inherited_widget - app_arch: mobx - app_arch: mvc - app_arch: mvi_flutter - app_arch: mvu - app_arch: change_notifier_provider - app_arch: redux - app_arch: scoped_model - app_arch: simple_bloc_flutter - app_arch: vanilla - app_arch: states_rebuilder - container: - image: cirrusci/flutter:$DOCKER_VERSION - cpu: 4 - memory: 10G - kvm: true - fix_kvm_script: sudo chown cirrus:cirrus /dev/kvm - install_images_script: sdkmanager "system-images;android-$EMULATOR_API_LEVEL;$ANDROID_ABI" - create_device_script: - echo no | avdmanager create avd --force -n test -k "system-images;android-$EMULATOR_API_LEVEL;$ANDROID_ABI" - start_emulator_background_script: - $ANDROID_HOME/emulator/emulator-headless -verbose -avd test -no-audio -no-window - pub_cache: - folder: ~/.pub-cache - wait_for_emulator_script: - - ./scripts/android-wait-for-emulator.sh -# - adb shell input keyevent 82 - doctor_script: flutter doctor -v - devices_script: flutter devices - ci_script: ./scripts/ci.sh ./$app_arch || ./scripts/ci.sh ./$app_arch - -task: - name: Integration Tests for $app_arch (macOS) - # don't run for PRs - only_if: $CIRRUS_PR == '' - skip: '!changesInclude(".cirrus.yml", "$app_arch/*", "$app_arch/**/*")' - env: - matrix: - app_arch: bloc_flutter - app_arch: bloc_library - app_arch: built_redux - app_arch: firestore_redux - app_arch: frideos_library - app_arch: inherited_widget - app_arch: mvc - app_arch: mvi_flutter - app_arch: mvu - app_arch: change_notifier_provider - app_arch: redux - app_arch: scoped_model - app_arch: simple_bloc_flutter - app_arch: vanilla - app_arch: states_rebuilder - osx_instance: - image: mojave-xcode-11.2.1-flutter - simulator_script: - - xcrun simctl list devicetypes - - xcrun simctl list runtimes - # create simulator - - udid=$(xcrun simctl create "iPhone X" com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-13-2) - # boot simulator - - xcrun simctl boot $udid - pin_flutter_script: -# - sudo gem install cocoapods # missing from mojave-xcode-11.2.1-flutter (not found) - - flutter --version - # pin to ${FLUTTER_VERSION} - - wget --quiet --output-document=flutter.zip https://storage.googleapis.com/flutter_infra/releases/${FLUTTER_CHANNEL}/macos/flutter_macos_${FLUTTER_VERSION}-${FLUTTER_CHANNEL}.zip && unzip -qq flutter.zip > /dev/null && rm flutter.zip - - export PATH="$PATH":"$HOME/.pub-cache/bin" - - export PATH=$PWD/flutter/bin:$PWD/flutter/bin/cache/dart-sdk/bin:$PATH - - flutter --version - doctor_script: - - export PATH="$PATH":"$HOME/.pub-cache/bin" - - export PATH=$PWD/flutter/bin:$PWD/flutter/bin/cache/dart-sdk/bin:$PATH - - flutter doctor -v - devices_script: - - export PATH="$PATH":"$HOME/.pub-cache/bin" - - export PATH=$PWD/flutter/bin:$PWD/flutter/bin/cache/dart-sdk/bin:$PATH - - flutter devices - ci_script: - - export PATH="$PATH":"$HOME/.pub-cache/bin" - - export PATH=$PWD/flutter/bin:$PWD/flutter/bin/cache/dart-sdk/bin:$PATH - - ./scripts/ci.sh ./$app_arch || ./scripts/ci.sh ./$app_arch diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d09dd464..00000000 --- a/.travis.yml +++ /dev/null @@ -1,352 +0,0 @@ -language: generic -env: - global: - - FLUTTER_CHANNEL=stable - - FLUTTER_VERSION=1.12.13+hotfix.5-${FLUTTER_CHANNEL} - - API=28 - - ABI=x86 - - GOO=default - - ANDROID_TOOLS=4333796 # android-28 - - ANDROID_HOME=${HOME}/android-sdk - - GRAVIS="https://raw.githubusercontent.com/DanySK/Gravis-CI/master/" - - JDK="1.8" # the JDK used for running tests - - TOOLS=${ANDROID_HOME}/tools - # PATH order is incredibly important. e.g. the 'emulator' script exists in more than one place! - - PATH=${ANDROID_HOME}:${ANDROID_HOME}/emulator:${TOOLS}:${TOOLS}/bin:${ANDROID_HOME}/platform-tools:${PATH} - - FLUTTER_HOME=${HOME}/flutter - - PATH=${HOME}/.pub-cache/bin:${PATH} - - PATH=${FLUTTER_HOME}/bin:${FLUTTER_HOME}/bin/cache/dart-sdk/bin:${PATH} - -jobs: - include: - - - stage: Static analysis, formatting, and unit tests - language: generic - dist: bionic - os: linux - env: All unit and widget tests - before_script: - - sudo apt-get install -y --no-install-recommends lib32stdc++6 libstdc++6 > /dev/null - - # install pre-compiled flutter - - wget --quiet --output-document=flutter.tar.xz https://storage.googleapis.com/flutter_infra/releases/${FLUTTER_CHANNEL}/linux/flutter_linux_v${FLUTTER_VERSION}.tar.xz && tar xf flutter.tar.xz > /dev/null && rm flutter.tar.xz - - export PATH="$PATH":"$HOME/.pub-cache/bin" - - export PATH=$PWD/flutter/bin:$PWD/flutter/bin/cache/dart-sdk/bin:$PATH - - flutter doctor -v - - pub global activate coverage - script: ./scripts/runTests.sh - after_success: bash <(curl -s https://codecov.io/bash) -f lcov.info - cache: - directories: - - $HOME/.pub-cache - - - &integration-test - stage: Testing - dist: bionic - language: generic - os: linux - env: bloc_flutter_android - # Run integration tests on android - before_install: &before_install_linux - - java -version - - # Set up KVM - - sudo apt-get -y --no-install-recommends install bridge-utils libpulse0 libvirt-bin qemu-kvm virtinst ubuntu-vm-builder > /dev/null - # add travis user to groups - - sudo adduser $USER libvirt - - sudo adduser $USER kvm - - # Set up JDK 8 for Android SDK - - curl "${GRAVIS}.install-jdk-travis.sh" --output ~/.install-jdk-travis.sh - - export TARGET_JDK="${JDK}" - - JDK="1.8" # used when running sdkmanager - - source ~/.install-jdk-travis.sh - - # Set up Android SDK - - wget -q "https://dl.google.com/android/repository/sdk-tools-linux-$ANDROID_TOOLS.zip" -O android-sdk-tools.zip - - unzip -q android-sdk-tools.zip -d ${ANDROID_HOME} - - rm android-sdk-tools.zip - - # Avoid harmless sdkmanager warning - - mkdir ~/.android - - echo 'count=0' > ~/.android/repositories.cfg - - # Accept licenses before installing components, no need to echo y for each component - - yes | sdkmanager --licenses >/dev/null - - # Download SDK tools - - sdkmanager "platform-tools" >/dev/null - - sdkmanager "tools" >/dev/null # A second time per Travis docs, gets latest versions - - sdkmanager "build-tools;28.0.3" >/dev/null # Implicit gradle dependency - gradle drives changes - - sdkmanager "platforms;android-$API" >/dev/null # We need the API of the emulator we will run - - sdkmanager "platforms;android-28" >/dev/null # We need the API of the current compileSdkVersion from gradle.properties - - - - sdkmanager "emulator" >/dev/null - - | - if [[ $ABI =~ "arm" ]]; then - # Download a pinned version of the emulator since default version can cause issues - ${ANDROID_HOME}/emulator/emulator -version - emulator_version=5264690 # 29.2.1.0 (build_id 5889189) ==> 28.0.23.0 (build_id 5264690) - # sudo apt-get install -y libunwind8 libc++1 - curl -fo emulator.zip "https://dl.google.com/android/repository/emulator-linux-$emulator_version.zip" - rm -rf "${ANDROID_HOME}/emulator" - unzip -q emulator.zip -d "${ANDROID_HOME}" - rm -f emulator.zip - # install build tools and platforms for arm (to allow emulator to run) - sdkmanager "build-tools;25.0.2" "platforms;android-25" > /dev/null - fi - - ${ANDROID_HOME}/emulator/emulator -version - - - sdkmanager "extras;android;m2repository" >/dev/null - - sdkmanager "system-images;android-$API;$GOO;$ABI" >/dev/null # install system images for emulator - - # Create an Android emulator - # - echo no | avdmanager --verbose create avd --force -n test -k "system-images;android-$API;$GOO;$ABI" -c 10M - - echo no | avdmanager --verbose create avd --force -n test -k "system-images;android-$API;$GOO;$ABI" - # - EMU_PARAMS=" - # -verbose - # -no-snapshot - # -no-window - # -no-audio - # -no-boot-anim - # -camera-back none - # -camera-front none - # -selinux permissive - # -qemu -m 2048" - - EMU_PARAMS=" - -avd test - -verbose - -no-window - -no-audio - " - - EMU_COMMAND="emulator" - - | - if [[ $ABI =~ "x86" ]]; then - EMU_COMMAND="emulator" - else - # emulate graphics if running on ARM - EMU_PARAMS="${EMU_PARAMS} -gpu swiftshader" - fi - # This double "sudo" monstrosity is used to have Travis execute the - # emulator with its new group permissions and help preserve the rule - # of least privilege. - - sudo -E sudo -u $USER -E bash -c "${ANDROID_HOME}/emulator/${EMU_COMMAND} ${EMU_PARAMS} &" - - # install flutter (while emulator is starting) - - sudo apt-get install -y --no-install-recommends lib32stdc++6 libstdc++6 > /dev/null - - wget --quiet --output-document=flutter.tar.xz https://storage.googleapis.com/flutter_infra/releases/${FLUTTER_CHANNEL}/linux/flutter_linux_v${FLUTTER_VERSION}.tar.xz - - tar xf flutter.tar.xz -C $(dirname ${FLUTTER_HOME}) - - rm flutter.tar.xz - - # Switch back to our target JDK version to build and run tests - - JDK="${TARGET_JDK}" - - source ~/.install-jdk-travis.sh - - - flutter doctor -v - - # wait for emulator to finish startup - - ./scripts/android-wait-for-emulator.sh - # unlock screen - - adb shell input keyevent 82 & - - script: travis_retry ./scripts/ci.sh ./bloc_flutter - cache: - directories: - - $HOME/.pub-cache - - $HOME/.gradle - -# - <<: *integration-test - - stage: Testing - os: osx -# osx_image: xcode9.4 -# osx_image: xcode9.2 - osx_image: xcode11.3 # for firebase - env: bloc_flutter_ios -# env: vanilla_ios - # Run integration tests on ios - before_install: &before_install_osx -# - xcrun simctl list devicetypes -# - xcrun simctl list runtimes -# # create simulator -# - udid=$(xcrun simctl create "iPhone X" com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-11-2) -# # boot simulator -# - xcrun simctl boot $udid -# - xcrun simctl list - - xcrun simctl create "iPhone X" com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-13-3 | xargs xcrun simctl boot - # skip homebrew update - - export HOMEBREW_NO_AUTO_UPDATE=1 - # - brew update - - brew install libimobiledevice - - brew install ideviceinstaller - - brew install ios-deploy - - sudo gem install cocoapods - - # install pre-compiled flutter - - wget --quiet --output-document=flutter.zip https://storage.googleapis.com/flutter_infra/releases/${FLUTTER_CHANNEL}/macos/flutter_macos_v${FLUTTER_VERSION}.zip && unzip -qq flutter.zip > /dev/null && rm flutter.zip - - export PATH="$PATH":"$HOME/.pub-cache/bin" - - export PATH=$PWD/flutter/bin:$PWD/flutter/bin/cache/dart-sdk/bin:$PATH - - flutter doctor -v - script: travis_retry ./scripts/ci.sh ./bloc_flutter - cache: - directories: - - $HOME/.pub-cache - - - <<: *integration-test - os: linux - env: built_redux_android - script: travis_retry ./scripts/ci.sh ./built_redux - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: built_redux_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./built_redux - - <<: *integration-test - os: linux - env: bloc_library_android - script: travis_retry ./scripts/ci.sh ./bloc_library - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: bloc_library_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./bloc_library - - <<: *integration-test - os: linux - env: firestore_redux_android - script: travis_retry ./scripts/ci.sh ./firestore_redux - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: firestore_redux_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./firestore_redux - - <<: *integration-test - os: linux - env: frideos_library_android - script: travis_retry ./scripts/ci.sh ./frideos_library - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: frideos_library_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./frideos_library - - <<: *integration-test - os: linux - env: inherited_widget_android - script: travis_retry ./scripts/ci.sh ./inherited_widget - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: inherited_widget_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./inherited_widget - - <<: *integration-test - os: linux - env: mvc_android - script: travis_retry ./scripts/ci.sh ./mvc - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: mvc_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./mvc - - <<: *integration-test - os: linux - env: mvi_flutter_android - script: travis_retry ./scripts/ci.sh ./mvi_flutter - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: mvi_flutter_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./mvi_flutter - - <<: *integration-test - os: linux - env: mvu_android - script: travis_retry ./scripts/ci.sh ./mvu - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: mvu_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./mvu - - <<: *integration-test - os: linux - env: redux_android - script: travis_retry ./scripts/ci.sh ./redux - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: redux_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./redux - - <<: *integration-test - os: linux - env: change_notifier_provider_android - script: travis_retry ./scripts/ci.sh ./change_notifier_provider - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: change_notifier_provider_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./change_notifier_provider - - <<: *integration-test - os: linux - env: scoped_model_android - script: travis_retry ./scripts/ci.sh ./scoped_model - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: scoped_model_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./scoped_model - - <<: *integration-test - os: linux - env: simple_bloc_flutter_android - script: travis_retry ./scripts/ci.sh ./simple_bloc_flutter - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: simple_bloc_flutter_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./simple_bloc_flutter - - <<: *integration-test - os: linux - env: vanilla_android - script: travis_retry ./scripts/ci.sh ./vanilla - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: vanilla_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./vanilla - - <<: *integration-test - os: linux - env: mobx_android - script: travis_retry ./scripts/ci.sh ./mobx - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: mobx_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./mobx - - <<: *integration-test - os: linux - env: states_rebuilder_android - script: travis_retry ./scripts/ci.sh ./states_rebuilder - - <<: *integration-test - os: osx - osx_image: xcode11.3 - env: states_rebuilder_ios - before_install: *before_install_osx - script: travis_retry ./scripts/ci.sh ./states_rebuilder - - allow_failures: -# - env: -# - bloc_flutter_ios -# - built_redux_android -# - firestore_redux_android -# - firestore_redux_ios -# - mvu_android -# - mvu_ios diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 791a857f..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -# Changelog - -## 0.0.1 - -- Initial version, created by Stagehand diff --git a/Makefile b/Makefile deleted file mode 100644 index 74218fa2..00000000 --- a/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -.PHONY: clean localize all check_env - -FILES := $(shell find . -name '*.arb' | xargs) - -all: localize - -localize: check_env clean - flutter pub pub run intl_translation:extract_to_arb --output-dir=./ --no-transformer lib/src/localization.dart - mv intl_messages.arb intl_en.arb - flutter pub pub run intl_translation:generate_from_arb --no-use-deferred-loading lib/src/localization.dart $(FILES) - mv messages*.dart lib/src/localizations - -clean: - rm -f *.arb - -check_env: -ifndef FLUTTER_ROOT - $(error FLUTTER_ROOT is undefined. Please export a FLUTTER_ROOT pointing to the installation of Flutter.) -endif diff --git a/analysis_options.yaml b/analysis_options.yaml deleted file mode 100644 index 962f9342..00000000 --- a/analysis_options.yaml +++ /dev/null @@ -1,56 +0,0 @@ -# Pedantic 1.9.0 -# -# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -# for details. All rights reserved. Use of this source code is governed by a -# BSD-style license that can be found in the LICENSE file. -# -# Google internally enforced rules. See README.md for more information, -# including a list of lints that are intentionally _not_ enforced. - -linter: - rules: - - always_declare_return_types - - always_require_non_null_named_parameters - - annotate_overrides - - avoid_empty_else - - avoid_init_to_null - - avoid_null_checks_in_equality_operators - - avoid_relative_lib_imports - - avoid_return_types_on_setters - - avoid_shadowing_type_parameters - - avoid_types_as_parameter_names - - camel_case_extensions - - curly_braces_in_flow_control_structures - - empty_catches - - empty_constructor_bodies - - library_names - - library_prefixes - - no_duplicate_case_values - - null_closures - - omit_local_variable_types - - prefer_adjacent_string_concatenation - - prefer_collection_literals - - prefer_conditional_assignment - - prefer_contains - - prefer_equal_for_default_values - - prefer_final_fields - - prefer_for_elements_to_map_fromIterable - - prefer_generic_function_type_aliases - - prefer_if_null_operators - - prefer_is_empty - - prefer_is_not_empty - - prefer_iterable_whereType - - prefer_single_quotes - - prefer_spread_collections - - recursive_getters - - slash_for_doc_comments - - type_init_formals - - unawaited_futures - - unnecessary_const - - unnecessary_new - - unnecessary_null_in_if_null_operators - - unnecessary_this - - unrelated_type_equality_checks - - use_function_type_syntax_for_parameters - - use_rethrow_when_possible - - valid_regexps From 9ce687918fe921fc7105dc85d8010ea49ce7e0c4 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 14:45:48 +0100 Subject: [PATCH 08/89] Remove Copyright notices --- bloc_flutter/lib/app.dart | 4 - bloc_flutter/lib/dependency_injection.dart | 4 - bloc_flutter/lib/localization.dart | 4 - bloc_flutter/lib/main.dart | 24 +- bloc_flutter/lib/main_firebase.dart | 16 +- bloc_flutter/lib/main_web.dart | 24 +- bloc_flutter/lib/screens/add_edit_screen.dart | 24 +- bloc_flutter/lib/screens/detail_screen.dart | 24 +- bloc_flutter/lib/screens/home_screen.dart | 27 +- .../lib/widgets/extra_actions_button.dart | 8 +- bloc_flutter/lib/widgets/filter_button.dart | 6 +- bloc_flutter/lib/widgets/loading.dart | 8 +- bloc_flutter/lib/widgets/stats_counter.dart | 8 +- bloc_flutter/lib/widgets/todo_item.dart | 4 - bloc_flutter/lib/widgets/todo_list.dart | 42 ++- .../lib/widgets/todos_bloc_provider.dart | 13 +- bloc_flutter/test_driver/todo_app.dart | 4 - bloc_flutter/test_driver/todo_app_test.dart | 4 - bloc_library/lib/bloc_library_keys.dart | 19 +- bloc_library/lib/blocs/blocs.dart | 4 - .../blocs/filtered_todos/filtered_todos.dart | 4 - .../filtered_todos/filtered_todos_bloc.dart | 8 +- .../filtered_todos/filtered_todos_event.dart | 4 - .../filtered_todos/filtered_todos_state.dart | 9 +- .../lib/blocs/simple_bloc_delegate.dart | 4 - bloc_library/lib/blocs/tab/tab.dart | 4 - bloc_library/lib/blocs/tab/tab_bloc.dart | 4 - bloc_library/lib/blocs/tab/tab_event.dart | 4 - bloc_library/lib/blocs/todos/todos.dart | 4 - bloc_library/lib/blocs/todos/todos_bloc.dart | 24 +- bloc_library/lib/blocs/todos/todos_event.dart | 4 - bloc_library/lib/blocs/todos/todos_state.dart | 4 - bloc_library/lib/localization.dart | 4 - bloc_library/lib/models/app_tab.dart | 4 - bloc_library/lib/models/extra_action.dart | 4 - bloc_library/lib/models/models.dart | 4 - bloc_library/lib/models/todo.dart | 8 +- .../lib/models/visibility_filter.dart | 4 - bloc_library/lib/run_app.dart | 8 +- bloc_library/lib/screens/add_edit_screen.dart | 19 +- bloc_library/lib/screens/details_screen.dart | 39 ++- bloc_library/lib/screens/home_screen.dart | 4 - bloc_library/lib/widgets/extra_actions.dart | 14 +- bloc_library/lib/widgets/filter_button.dart | 48 ++- bloc_library/lib/widgets/filtered_todos.dart | 45 ++- .../lib/widgets/loading_indicator.dart | 8 +- bloc_library/lib/widgets/stats.dart | 6 +- bloc_library/lib/widgets/tab_selector.dart | 19 +- bloc_library/lib/widgets/todo_item.dart | 4 - .../test/blocs/filtered_todos_bloc_test.dart | 48 ++- .../test/blocs/filtered_todos_event_test.dart | 4 - .../test/blocs/simple_bloc_delegate_test.dart | 81 ++--- bloc_library/test/blocs/stats_bloc_test.dart | 24 +- bloc_library/test/blocs/stats_event_test.dart | 9 +- bloc_library/test/blocs/tab_bloc_test.dart | 9 +- bloc_library/test/blocs/tab_event_test.dart | 4 - bloc_library/test/blocs/todos_bloc_test.dart | 24 +- bloc_library/test/blocs/todos_event_test.dart | 19 +- bloc_library/test/blocs/todos_state_test.dart | 14 +- bloc_library/test/localization_test.dart | 4 - bloc_library/test/models/todo_test.dart | 4 - .../test/screens/add_edit_screen_test.dart | 29 +- .../test/screens/details_screen_test.dart | 87 +++-- .../test/screens/home_screen_test.dart | 49 +-- .../widgets/delete_todo_snack_bar_test.dart | 87 ++--- .../test/widgets/extra_actions_test.dart | 152 ++++----- .../test/widgets/filter_button_test.dart | 74 ++-- .../test/widgets/filtered_todos_test.dart | 320 ++++++++---------- .../test/widgets/loading_indicator_test.dart | 8 +- bloc_library/test/widgets/stats_tab_test.dart | 40 +-- .../test/widgets/tab_selector_test.dart | 62 ++-- bloc_library/test/widgets/todo_item_test.dart | 14 +- bloc_library/test_driver/todo_app.dart | 4 - bloc_library/test_driver/todo_app_test.dart | 4 - blocs/lib/blocs.dart | 4 - blocs/lib/src/models/models.dart | 4 - blocs/lib/src/models/todo.dart | 8 +- blocs/lib/src/models/visibility_filter.dart | 4 - blocs/lib/src/stats_bloc.dart | 9 +- blocs/lib/src/todo_bloc.dart | 4 - blocs/lib/src/todos_interactor.dart | 18 +- blocs/lib/src/todos_list_bloc.dart | 4 - blocs/lib/src/user_bloc.dart | 4 - blocs/lib/src/uuid.dart | 4 - blocs/test/stats_bloc_test.dart | 9 +- blocs/test/todos_interactor_test.dart | 34 +- built_redux/lib/actions/actions.dart | 9 +- .../lib/containers/action_selector.dart | 4 - built_redux/lib/containers/active_tab.dart | 4 - built_redux/lib/containers/add_todo.dart | 17 +- built_redux/lib/containers/app_loading.dart | 4 - built_redux/lib/containers/edit_todo.dart | 17 +- .../lib/containers/filter_selector.dart | 27 +- .../lib/containers/filtered_todos.dart | 12 +- built_redux/lib/containers/stats.dart | 12 +- built_redux/lib/containers/tab_selector.dart | 12 +- built_redux/lib/containers/todo_details.dart | 14 +- built_redux/lib/containers/typedefs.dart | 8 +- built_redux/lib/data/file_storage.dart | 9 +- built_redux/lib/data/todos_repository.dart | 4 - built_redux/lib/data/web_client.dart | 71 ++-- built_redux/lib/localization.dart | 4 - built_redux/lib/main.dart | 8 +- .../middleware/store_todos_middleware.dart | 61 ++-- built_redux/lib/models/app_state.dart | 39 +-- built_redux/lib/models/app_tab.dart | 4 - built_redux/lib/models/extra_actions.dart | 4 - built_redux/lib/models/models.dart | 4 - built_redux/lib/models/serializers.dart | 12 +- built_redux/lib/models/todo.dart | 4 - built_redux/lib/models/visibility_filter.dart | 4 - .../lib/presentation/add_edit_screen.dart | 28 +- .../lib/presentation/details_screen.dart | 17 +- .../presentation/extra_actions_button.dart | 19 +- .../lib/presentation/filter_button.dart | 75 ++-- built_redux/lib/presentation/home_screen.dart | 6 +- .../lib/presentation/stats_counter.dart | 92 +++-- built_redux/lib/presentation/todo_item.dart | 4 - built_redux/lib/presentation/todo_list.dart | 124 +++---- built_redux/lib/reducers/reducers.dart | 41 ++- built_redux/test/app_state_test.dart | 50 ++- built_redux/test/file_storage_test.dart | 9 +- built_redux/test/middleware_test.dart | 85 +++-- built_redux/test/reducer_test.dart | 9 +- built_redux/test/todos_repository_test.dart | 121 +++---- built_redux/test_driver/todo_app.dart | 4 - built_redux/test_driver/todo_app_test.dart | 4 - change_notifier_provider/lib/app.dart | 8 +- .../lib/home/extra_actions_button.dart | 16 +- .../lib/home/filter_button.dart | 20 +- .../lib/localization.dart | 8 +- change_notifier_provider/lib/main.dart | 18 +- change_notifier_provider/lib/main_web.dart | 18 +- change_notifier_provider/lib/models.dart | 6 +- .../lib/todo_list_model.dart | 27 +- .../test/todo_list_model_test.dart | 62 ++-- .../test_driver/todo_app.dart | 4 - .../lib/reactive_todos_repository.dart | 12 +- .../lib/user_repository.dart | 4 - .../firebase_flutter_repository_test.dart | 29 +- .../lib/reactive_todos_repository.dart | 25 +- .../lib/user_repository.dart | 4 - .../firebase_flutter_repository_test.dart | 29 +- firestore_redux/lib/actions/actions.dart | 4 - .../lib/containers/active_tab.dart | 4 - firestore_redux/lib/containers/add_todo.dart | 9 +- .../lib/containers/app_loading.dart | 4 - firestore_redux/lib/containers/edit_todo.dart | 14 +- .../containers/extra_actions_container.dart | 9 +- .../lib/containers/filter_selector.dart | 9 +- .../lib/containers/filtered_todos.dart | 11 +- firestore_redux/lib/containers/stats.dart | 4 - .../lib/containers/tab_selector.dart | 17 +- .../lib/containers/todo_details.dart | 11 +- firestore_redux/lib/localization.dart | 4 - firestore_redux/lib/main.dart | 24 +- .../middleware/store_todos_middleware.dart | 57 +--- firestore_redux/lib/models/app_state.dart | 4 - firestore_redux/lib/models/app_tab.dart | 4 - firestore_redux/lib/models/extra_action.dart | 4 - firestore_redux/lib/models/models.dart | 4 - firestore_redux/lib/models/todo.dart | 8 +- .../lib/models/visibility_filter.dart | 4 - .../lib/presentation/add_edit_screen.dart | 28 +- .../lib/presentation/details_screen.dart | 15 +- .../presentation/extra_actions_button.dart | 19 +- .../lib/presentation/filter_button.dart | 13 +- .../lib/presentation/home_screen.dart | 4 - .../lib/presentation/loading_indicator.dart | 8 +- .../lib/presentation/stats_counter.dart | 23 +- .../lib/presentation/todo_item.dart | 4 - .../lib/presentation/todo_list.dart | 64 ++-- .../lib/presentation/typedefs.dart | 4 - .../lib/reducers/app_state_reducer.dart | 4 - .../lib/reducers/loading_reducer.dart | 4 - .../lib/reducers/tabs_reducer.dart | 4 - .../lib/reducers/todos_reducer.dart | 4 - .../lib/reducers/visibility_reducer.dart | 8 +- firestore_redux/lib/selectors/selectors.dart | 4 - firestore_redux/test/middleware_test.dart | 55 ++- firestore_redux/test/reducer_test.dart | 10 +- firestore_redux/test/selectors_test.dart | 76 ++--- .../test_driver/mock_reactive_repository.dart | 8 +- firestore_redux/test_driver/todo_app.dart | 14 +- .../test_driver/todo_app_test.dart | 4 - freezed_provider_value_notifier/lib/app.dart | 8 +- .../lib/home/extra_actions_button.dart | 16 +- .../lib/home/filter_button.dart | 20 +- .../lib/localization.dart | 8 +- freezed_provider_value_notifier/lib/main.dart | 18 +- .../lib/main_web.dart | 18 +- .../lib/models.dart | 6 +- .../lib/todo_list_model.dart | 64 ++-- .../test/app_state_test.dart | 89 +++-- .../test_driver/todo_app.dart | 4 - inherited_widget/lib/app.dart | 4 - inherited_widget/lib/localization.dart | 8 +- inherited_widget/lib/main.dart | 20 +- inherited_widget/lib/main_web.dart | 20 +- inherited_widget/lib/models.dart | 26 +- .../lib/screens/add_edit_screen.dart | 30 +- .../lib/screens/detail_screen.dart | 18 +- inherited_widget/lib/screens/home_screen.dart | 6 +- inherited_widget/lib/state_container.dart | 58 ++-- .../lib/widgets/extra_actions_button.dart | 8 +- .../lib/widgets/filter_button.dart | 6 +- .../lib/widgets/stats_counter.dart | 6 +- inherited_widget/lib/widgets/todo_item.dart | 4 - inherited_widget/lib/widgets/todo_list.dart | 34 +- inherited_widget/test/app_state_test.dart | 102 ++---- inherited_widget/test_driver/todo_app.dart | 4 - .../test_driver/todo_app_test.dart | 4 - integration_tests/lib/integration_tests.dart | 4 - .../elements/extra_actions_element.dart | 4 - .../elements/filters_element.dart | 4 - .../page_objects/elements/stats_element.dart | 4 - .../page_objects/elements/test_element.dart | 4 - .../elements/todo_item_element.dart | 4 - .../elements/todo_list_element.dart | 4 - .../lib/page_objects/page_objects.dart | 4 - .../page_objects/screens/add_test_screen.dart | 4 - .../screens/details_test_screen.dart | 4 - .../screens/edit_test_screen.dart | 4 - .../screens/home_test_screen.dart | 4 - .../lib/page_objects/screens/test_screen.dart | 4 - integration_tests/lib/page_objects/utils.dart | 4 - mobx/lib/home/extra_actions_button.dart | 16 +- mobx/lib/home/filter_button.dart | 20 +- mobx/lib/localization.dart | 4 - mobx/test/todo_store_test.dart | 12 +- mobx/test_driver/todo_app.dart | 4 - mobx/test_driver/todo_app_test.dart | 4 - mvc/lib/main.dart | 4 - mvc/lib/src/App.dart | 4 - mvc/lib/src/Controller.dart | 4 - mvc/lib/src/Model.dart | 4 - mvc/lib/src/models.dart | 6 +- mvc/lib/src/screens/add_edit_screen.dart | 28 +- mvc/lib/src/screens/detail_screen.dart | 18 +- mvc/lib/src/screens/home_screen.dart | 6 +- mvc/lib/src/todo_list_model.dart | 64 ++-- mvc/lib/src/widgets/extra_actions_button.dart | 16 +- mvc/lib/src/widgets/filter_button.dart | 13 +- mvc/lib/src/widgets/stats_counter.dart | 6 +- mvc/lib/src/widgets/todo_item.dart | 4 - mvc/lib/src/widgets/todo_list.dart | 38 +-- mvc/test/todo_list_model_test.dart | 133 +++----- mvc/test_driver/todo_app.dart | 4 - mvc/test_driver/todo_app_test.dart | 4 - mvi_base/lib/mvi_base.dart | 4 - mvi_base/lib/src/models/models.dart | 4 - mvi_base/lib/src/models/todo.dart | 8 +- mvi_base/lib/src/models/user.dart | 4 - .../lib/src/models/visibility_filter.dart | 4 - mvi_base/lib/src/mvi_core.dart | 26 +- mvi_base/lib/src/mvi_stats.dart | 18 +- mvi_base/lib/src/mvi_todo.dart | 15 +- mvi_base/lib/src/mvi_todos_list.dart | 16 +- mvi_base/lib/src/todos_interactor.dart | 24 +- mvi_base/lib/src/user_interactor.dart | 4 - mvi_base/lib/src/uuid.dart | 4 - mvi_base/test/mvi_stats_test.dart | 9 +- mvi_base/test/mvi_todo_test.dart | 19 +- mvi_base/test/mvi_todos_list_test.dart | 121 +++---- mvi_base/test/todos_interactor_test.dart | 34 +- mvi_base/test/user_interactor_test.dart | 9 +- mvi_flutter/lib/dependency_injection.dart | 4 - mvi_flutter/lib/localization.dart | 4 - mvi_flutter/lib/main.dart | 24 +- mvi_flutter/lib/main_firebase.dart | 20 +- mvi_flutter/lib/main_web.dart | 24 +- mvi_flutter/lib/mvi_app.dart | 6 +- mvi_flutter/lib/screens/add_edit_screen.dart | 24 +- mvi_flutter/lib/screens/detail_screen.dart | 25 +- mvi_flutter/lib/screens/home_screen.dart | 26 +- .../lib/widgets/extra_actions_button.dart | 8 +- mvi_flutter/lib/widgets/filter_button.dart | 6 +- mvi_flutter/lib/widgets/loading.dart | 8 +- mvi_flutter/lib/widgets/stats_counter.dart | 8 +- mvi_flutter/lib/widgets/todo_item.dart | 4 - mvi_flutter/lib/widgets/todo_list.dart | 28 +- mvi_flutter/test/detail_screen_test.dart | 49 +-- mvi_flutter/test_driver/todo_app.dart | 4 - mvi_flutter/test_driver/todo_app_test.dart | 4 - redux/lib/actions/actions.dart | 4 - redux/lib/containers/active_tab.dart | 4 - redux/lib/containers/add_todo.dart | 9 +- redux/lib/containers/app_loading.dart | 4 - redux/lib/containers/edit_todo.dart | 14 +- .../containers/extra_actions_container.dart | 9 +- redux/lib/containers/filter_selector.dart | 9 +- redux/lib/containers/filtered_todos.dart | 11 +- redux/lib/containers/stats.dart | 4 - redux/lib/containers/tab_selector.dart | 17 +- redux/lib/containers/todo_details.dart | 11 +- redux/lib/localization.dart | 9 +- redux/lib/main.dart | 28 +- redux/lib/main_web.dart | 28 +- .../middleware/store_todos_middleware.dart | 21 +- redux/lib/models/app_state.dart | 15 +- redux/lib/models/app_tab.dart | 4 - redux/lib/models/extra_action.dart | 4 - redux/lib/models/models.dart | 4 - redux/lib/models/todo.dart | 8 +- redux/lib/models/visibility_filter.dart | 4 - redux/lib/presentation/add_edit_screen.dart | 28 +- redux/lib/presentation/details_screen.dart | 15 +- .../presentation/extra_actions_button.dart | 19 +- redux/lib/presentation/filter_button.dart | 13 +- redux/lib/presentation/home_screen.dart | 4 - redux/lib/presentation/loading_indicator.dart | 8 +- redux/lib/presentation/stats_counter.dart | 23 +- redux/lib/presentation/todo_item.dart | 4 - redux/lib/presentation/todo_list.dart | 64 ++-- redux/lib/presentation/typedefs.dart | 4 - redux/lib/reducers/app_state_reducer.dart | 4 - redux/lib/reducers/loading_reducer.dart | 4 - redux/lib/reducers/tabs_reducer.dart | 4 - redux/lib/reducers/todos_reducer.dart | 4 - redux/lib/reducers/visibility_reducer.dart | 8 +- redux/lib/selectors/selectors.dart | 4 - redux/test/middleware_test.dart | 8 +- redux/test/reducer_test.dart | 4 - redux/test/selectors_test.dart | 64 +--- redux/test_driver/todo_app.dart | 4 - redux/test_driver/todo_app_test.dart | 4 - scoped_model/lib/app.dart | 12 +- scoped_model/lib/localization.dart | 8 +- scoped_model/lib/main.dart | 8 +- scoped_model/lib/models.dart | 6 +- scoped_model/lib/screens/add_edit_screen.dart | 21 +- scoped_model/lib/screens/detail_screen.dart | 18 +- scoped_model/lib/screens/home_screen.dart | 6 +- scoped_model/lib/todo_list_model.dart | 47 ++- .../lib/widgets/extra_actions_button.dart | 63 ++-- scoped_model/lib/widgets/filter_button.dart | 15 +- scoped_model/lib/widgets/stats_counter.dart | 75 ++-- scoped_model/lib/widgets/todo_item.dart | 4 - scoped_model/lib/widgets/todo_list.dart | 34 +- scoped_model/lib/widgets/typedefs.dart | 19 +- scoped_model/test/app_state_test.dart | 144 ++++---- scoped_model/test_driver/todo_app.dart | 4 - scoped_model/test_driver/todo_app_test.dart | 4 - simple_bloc_flutter/lib/app.dart | 11 +- .../lib/dependency_injection.dart | 4 - simple_bloc_flutter/lib/localization.dart | 4 - simple_bloc_flutter/lib/main.dart | 24 +- simple_bloc_flutter/lib/main_firebase.dart | 16 +- simple_bloc_flutter/lib/main_web.dart | 24 +- .../lib/screens/add_edit_screen.dart | 24 +- .../lib/screens/detail_screen.dart | 22 +- .../lib/screens/home_screen.dart | 27 +- .../lib/widgets/extra_actions_button.dart | 8 +- .../lib/widgets/filter_button.dart | 6 +- simple_bloc_flutter/lib/widgets/loading.dart | 8 +- .../lib/widgets/stats_counter.dart | 8 +- .../lib/widgets/todo_item.dart | 4 - .../lib/widgets/todo_list.dart | 41 ++- .../lib/widgets/todos_bloc_provider.dart | 13 +- simple_bloc_flutter/test_driver/todo_app.dart | 4 - .../test_driver/todo_app_test.dart | 4 - simple_blocs/lib/simple_blocs.dart | 4 - simple_blocs/lib/src/models/models.dart | 4 - simple_blocs/lib/src/models/todo.dart | 8 +- .../lib/src/models/visibility_filter.dart | 4 - simple_blocs/lib/src/stats_bloc.dart | 16 +- simple_blocs/lib/src/todo_bloc.dart | 4 - simple_blocs/lib/src/todos_interactor.dart | 24 +- simple_blocs/lib/src/todos_list_bloc.dart | 4 - simple_blocs/lib/src/user_bloc.dart | 4 - simple_blocs/lib/src/uuid.dart | 4 - simple_blocs/test/all_tests.dart | 4 - simple_blocs/test/stats_bloc_test.dart | 9 +- simple_blocs/test/todos_interactor_test.dart | 34 +- states_rebuilder/lib/localization.dart | 4 - states_rebuilder/lib/main.dart | 4 - states_rebuilder/lib/main_web.dart | 4 - .../add_edit_screen.dart/add_edit_screen.dart | 35 +- .../ui/pages/detail_screen/detail_screen.dart | 13 +- .../ui/pages/home_screen/filter_button.dart | 16 +- .../ui/pages/home_screen/stats_counter.dart | 6 +- .../lib/ui/pages/home_screen/todo_item.dart | 9 +- .../lib/ui/pages/home_screen/todo_list.dart | 8 +- states_rebuilder/test_driver/todo_app.dart | 4 - .../test_driver/todo_app_test.dart | 4 - todos_app_core/lib/src/keys.dart | 4 - todos_app_core/lib/src/localization.dart | 4 - .../lib/src/localizations/messages_all.dart | 4 - .../lib/src/localizations/messages_en.dart | 4 - todos_app_core/lib/src/optional.dart | 4 - todos_app_core/lib/src/routes.dart | 4 - todos_app_core/lib/src/theme.dart | 4 - todos_app_core/lib/src/uuid.dart | 4 - .../lib/src/reactive_repository.dart | 4 - .../lib/src/todo_entity.dart | 4 - .../lib/src/todos_repository.dart | 4 - .../lib/src/user_entity.dart | 4 - .../lib/src/user_repository.dart | 4 - .../lib/todos_repository_core.dart | 4 - .../lib/src/file_storage.dart | 4 - .../lib/src/key_value_storage.dart | 4 - .../lib/src/reactive_repository.dart | 4 - .../lib/src/repository.dart | 4 - .../lib/src/web_client.dart | 4 - .../lib/todos_repository_local_storage.dart | 4 - .../test/file_storage_test.dart | 4 - .../test/key_value_storage_test.dart | 4 - .../test/reactive_repository_test.dart | 4 - .../test/repository_test.dart | 4 - vanilla/integration_test/todo_app_test.dart | 4 - vanilla/lib/app.dart | 4 - vanilla/lib/localization.dart | 4 - vanilla/lib/main.dart | 4 - vanilla/lib/models.dart | 4 - vanilla/lib/screens/add_edit_screen.dart | 4 - vanilla/lib/screens/detail_screen.dart | 4 - vanilla/lib/screens/home_screen.dart | 4 - vanilla/lib/widgets/extra_actions_button.dart | 4 - vanilla/lib/widgets/filter_button.dart | 4 - vanilla/lib/widgets/stats_counter.dart | 4 - vanilla/lib/widgets/todo_item.dart | 4 - vanilla/lib/widgets/todo_list.dart | 4 - vanilla/lib/widgets/typedefs.dart | 4 - vanilla/test/app_state_test.dart | 4 - 424 files changed, 2561 insertions(+), 4562 deletions(-) diff --git a/bloc_flutter/lib/app.dart b/bloc_flutter/lib/app.dart index 44f322e9..e76ac460 100644 --- a/bloc_flutter/lib/app.dart +++ b/bloc_flutter/lib/app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_flutter_sample/dependency_injection.dart'; import 'package:bloc_flutter_sample/localization.dart'; import 'package:bloc_flutter_sample/screens/add_edit_screen.dart'; diff --git a/bloc_flutter/lib/dependency_injection.dart b/bloc_flutter/lib/dependency_injection.dart index 2bfdc6b1..d34d0f55 100644 --- a/bloc_flutter/lib/dependency_injection.dart +++ b/bloc_flutter/lib/dependency_injection.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // A poor man's DI. This should be replaced by a proper solution once they // are more stable. library dependency_injector; diff --git a/bloc_flutter/lib/localization.dart b/bloc_flutter/lib/localization.dart index 78698325..3872b5d9 100644 --- a/bloc_flutter/lib/localization.dart +++ b/bloc_flutter/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/bloc_flutter/lib/main.dart b/bloc_flutter/lib/main.dart index 29c83666..85421cb4 100644 --- a/bloc_flutter/lib/main.dart +++ b/bloc_flutter/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:bloc_flutter_sample/app.dart'; @@ -15,19 +11,21 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(BlocApp( - todosInteractor: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'bloc_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + runApp( + BlocApp( + todosInteractor: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'bloc_todos', + FlutterKeyValueStore(await SharedPreferences.getInstance()), + ), ), ), ), + userRepository: AnonymousUserRepository(), ), - userRepository: AnonymousUserRepository(), - )); + ); } class AnonymousUserRepository implements UserRepository { diff --git a/bloc_flutter/lib/main_firebase.dart b/bloc_flutter/lib/main_firebase.dart index a78bef69..9844d176 100644 --- a/bloc_flutter/lib/main_firebase.dart +++ b/bloc_flutter/lib/main_firebase.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_flutter_sample/app.dart'; import 'package:blocs/blocs.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; @@ -13,10 +9,12 @@ import 'package:flutter/widgets.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(BlocApp( - todosInteractor: TodosInteractor( - FirestoreReactiveTodosRepository(Firestore.instance), + runApp( + BlocApp( + todosInteractor: TodosInteractor( + FirestoreReactiveTodosRepository(Firestore.instance), + ), + userRepository: FirebaseUserRepository(FirebaseAuth.instance), ), - userRepository: FirebaseUserRepository(FirebaseAuth.instance), - )); + ); } diff --git a/bloc_flutter/lib/main_web.dart b/bloc_flutter/lib/main_web.dart index fb868ff1..003c5cfd 100644 --- a/bloc_flutter/lib/main_web.dart +++ b/bloc_flutter/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:html'; @@ -15,19 +11,21 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(BlocApp( - todosInteractor: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'bloc_todos', - WebKeyValueStore(window.localStorage), + runApp( + BlocApp( + todosInteractor: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'bloc_todos', + WebKeyValueStore(window.localStorage), + ), ), ), ), + userRepository: AnonymousUserRepository(), ), - userRepository: AnonymousUserRepository(), - )); + ); } class AnonymousUserRepository implements UserRepository { diff --git a/bloc_flutter/lib/screens/add_edit_screen.dart b/bloc_flutter/lib/screens/add_edit_screen.dart index 611399e4..10d4d766 100644 --- a/bloc_flutter/lib/screens/add_edit_screen.dart +++ b/bloc_flutter/lib/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:blocs/blocs.dart'; @@ -13,12 +9,8 @@ class AddEditScreen extends StatefulWidget { final Function(Todo) addTodo; final Function(Todo) updateTodo; - AddEditScreen({ - Key key, - this.todo, - this.addTodo, - this.updateTodo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({Key key, this.todo, this.addTodo, this.updateTodo}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); @@ -72,14 +64,15 @@ class _AddEditScreenState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? ArchSampleLocalizations.of(context).saveChanges : ArchSampleLocalizations.of(context).addTodo, @@ -92,10 +85,7 @@ class _AddEditScreenState extends State { if (isEditing) { widget.updateTodo(widget.todo.copyWith(task: _task, note: _note)); } else { - widget.addTodo(Todo( - _task, - note: _note, - )); + widget.addTodo(Todo(_task, note: _note)); } Navigator.pop(context); diff --git a/bloc_flutter/lib/screens/detail_screen.dart b/bloc_flutter/lib/screens/detail_screen.dart index d11cd801..52764923 100644 --- a/bloc_flutter/lib/screens/detail_screen.dart +++ b/bloc_flutter/lib/screens/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_flutter_sample/screens/add_edit_screen.dart'; import 'package:bloc_flutter_sample/widgets/loading.dart'; import 'package:blocs/blocs.dart'; @@ -13,10 +9,8 @@ class DetailScreen extends StatefulWidget { final String todoId; final TodoBloc Function() initBloc; - DetailScreen({ - @required this.todoId, - @required this.initBloc, - }) : super(key: ArchSampleKeys.todoDetailsScreen); + DetailScreen({@required this.todoId, @required this.initBloc}) + : super(key: ArchSampleKeys.todoDetailsScreen); @override DetailScreenState createState() { @@ -60,7 +54,7 @@ class DetailScreenState extends State { todoBloc.deleteTodo.add(todo.id); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -76,8 +70,9 @@ class DetailScreenState extends State { value: todo.complete, key: ArchSampleKeys.detailsTodoItemCheckbox, onChanged: (complete) { - todoBloc.updateTodo - .add(todo.copyWith(complete: !todo.complete)); + todoBloc.updateTodo.add( + todo.copyWith(complete: !todo.complete), + ); }, ), ), @@ -86,10 +81,7 @@ class DetailScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -100,7 +92,7 @@ class DetailScreenState extends State { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), diff --git a/bloc_flutter/lib/screens/home_screen.dart b/bloc_flutter/lib/screens/home_screen.dart index 9429c3a9..91cd1cbb 100644 --- a/bloc_flutter/lib/screens/home_screen.dart +++ b/bloc_flutter/lib/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:bloc_flutter_sample/dependency_injection.dart'; @@ -25,7 +21,7 @@ class HomeScreen extends StatefulWidget { final UserRepository repository; HomeScreen({@required this.repository}) - : super(key: ArchSampleKeys.homeScreen); + : super(key: ArchSampleKeys.homeScreen); @override State createState() { @@ -73,14 +69,12 @@ class HomeScreenState extends State { ), body: userSnapshot.hasData ? activeTabSnapshot.data == AppTab.todos - ? TodoList() - : StatsCounter( - buildBloc: () => - StatsBloc(Injector.of(context).todosInteractor), - ) - : LoadingSpinner( - key: ArchSampleKeys.todosLoading, - ), + ? TodoList() + : StatsCounter( + buildBloc: () => + StatsBloc(Injector.of(context).todosInteractor), + ) + : LoadingSpinner(key: ArchSampleKeys.todosLoading), floatingActionButton: FloatingActionButton( key: ArchSampleKeys.addTodoFab, onPressed: () { @@ -141,10 +135,7 @@ class HomeScreenState extends State { todosBloc.allComplete, todosBloc.hasCompletedTodos, (allComplete, hasCompletedTodos) { - return ExtraActionsButtonViewModel( - allComplete, - hasCompletedTodos, - ); + return ExtraActionsButtonViewModel(allComplete, hasCompletedTodos); }, ), builder: (context, snapshot) { @@ -160,7 +151,7 @@ class HomeScreenState extends State { }, ); }, - ) + ), ]; } } diff --git a/bloc_flutter/lib/widgets/extra_actions_button.dart b/bloc_flutter/lib/widgets/extra_actions_button.dart index 1f6955b7..1701e8e0 100644 --- a/bloc_flutter/lib/widgets/extra_actions_button.dart +++ b/bloc_flutter/lib/widgets/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -36,9 +32,7 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.clearCompleted, value: ExtraAction.clearCompleted, - child: Text( - ArchSampleLocalizations.of(context).clearCompleted, - ), + child: Text(ArchSampleLocalizations.of(context).clearCompleted), ), ]; }, diff --git a/bloc_flutter/lib/widgets/filter_button.dart b/bloc_flutter/lib/widgets/filter_button.dart index e88a4e43..38254072 100644 --- a/bloc_flutter/lib/widgets/filter_button.dart +++ b/bloc_flutter/lib/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:blocs/blocs.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -12,7 +8,7 @@ class FilterButton extends StatelessWidget { final bool isActive; FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { diff --git a/bloc_flutter/lib/widgets/loading.dart b/bloc_flutter/lib/widgets/loading.dart index 0fa4416a..440fc4f3 100644 --- a/bloc_flutter/lib/widgets/loading.dart +++ b/bloc_flutter/lib/widgets/loading.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; class LoadingSpinner extends StatelessWidget { @@ -9,8 +5,6 @@ class LoadingSpinner extends StatelessWidget { @override Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); + return Center(child: CircularProgressIndicator()); } } diff --git a/bloc_flutter/lib/widgets/stats_counter.dart b/bloc_flutter/lib/widgets/stats_counter.dart index 8780d73a..4fc68554 100644 --- a/bloc_flutter/lib/widgets/stats_counter.dart +++ b/bloc_flutter/lib/widgets/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:blocs/blocs.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; @@ -12,7 +8,7 @@ class StatsCounter extends StatefulWidget { final StatsBloc Function() buildBloc; StatsCounter({Key key, @required this.buildBloc}) - : super(key: key ?? ArchSampleKeys.statsCounter); + : super(key: key ?? ArchSampleKeys.statsCounter); @override StatsCounterState createState() { @@ -72,7 +68,7 @@ class StatsCounterState extends State { ); }, ), - ) + ), ], ), ); diff --git a/bloc_flutter/lib/widgets/todo_item.dart b/bloc_flutter/lib/widgets/todo_item.dart index 716f87a5..23972ffa 100644 --- a/bloc_flutter/lib/widgets/todo_item.dart +++ b/bloc_flutter/lib/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:blocs/blocs.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; diff --git a/bloc_flutter/lib/widgets/todo_list.dart b/bloc_flutter/lib/widgets/todo_list.dart index e4f24023..4d2181d3 100644 --- a/bloc_flutter/lib/widgets/todo_list.dart +++ b/bloc_flutter/lib/widgets/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_flutter_sample/dependency_injection.dart'; import 'package:bloc_flutter_sample/screens/detail_screen.dart'; import 'package:bloc_flutter_sample/widgets/loading.dart'; @@ -37,26 +33,28 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return DetailScreen( - todoId: todo.id, - initBloc: () => - TodoBloc(Injector.of(context).todosInteractor), - ); - }, - ), - ).then((todo) { - if (todo is Todo) { - _showUndoSnackbar(context, todo); - } - }); + Navigator.of(context) + .push( + MaterialPageRoute( + builder: (_) { + return DetailScreen( + todoId: todo.id, + initBloc: () => + TodoBloc(Injector.of(context).todosInteractor), + ); + }, + ), + ) + .then((todo) { + if (todo is Todo) { + _showUndoSnackbar(context, todo); + } + }); }, onCheckboxChanged: (complete) { - TodosBlocProvider.of(context) - .updateTodo - .add(todo.copyWith(complete: !todo.complete)); + TodosBlocProvider.of( + context, + ).updateTodo.add(todo.copyWith(complete: !todo.complete)); }, ); }, diff --git a/bloc_flutter/lib/widgets/todos_bloc_provider.dart b/bloc_flutter/lib/widgets/todos_bloc_provider.dart index 37103758..8f7b86fb 100644 --- a/bloc_flutter/lib/widgets/todos_bloc_provider.dart +++ b/bloc_flutter/lib/widgets/todos_bloc_provider.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:blocs/blocs.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -11,7 +7,7 @@ class TodosBlocProvider extends StatefulWidget { final TodosListBloc bloc; TodosBlocProvider({Key key, @required this.child, @required this.bloc}) - : super(key: key); + : super(key: key); @override _TodosBlocProviderState createState() => _TodosBlocProviderState(); @@ -39,11 +35,8 @@ class _TodosBlocProviderState extends State { class _TodosBlocProvider extends InheritedWidget { final TodosListBloc bloc; - _TodosBlocProvider({ - Key key, - @required this.bloc, - @required Widget child, - }) : super(key: key, child: child); + _TodosBlocProvider({Key key, @required this.bloc, @required Widget child}) + : super(key: key, child: child); @override bool updateShouldNotify(_TodosBlocProvider old) => bloc != old.bloc; diff --git a/bloc_flutter/test_driver/todo_app.dart b/bloc_flutter/test_driver/todo_app.dart index 5822c6d9..15b09606 100644 --- a/bloc_flutter/test_driver/todo_app.dart +++ b/bloc_flutter/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:bloc_flutter_sample/main.dart' as app; import 'package:flutter_driver/driver_extension.dart'; diff --git a/bloc_flutter/test_driver/todo_app_test.dart b/bloc_flutter/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/bloc_flutter/test_driver/todo_app_test.dart +++ b/bloc_flutter/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/bloc_library/lib/bloc_library_keys.dart b/bloc_library/lib/bloc_library_keys.dart index 79cabe6a..81bab004 100644 --- a/bloc_library/lib/bloc_library_keys.dart +++ b/bloc_library/lib/bloc_library_keys.dart @@ -1,16 +1,15 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/widgets.dart'; class BlocLibraryKeys { - static final extraActionsPopupMenuButton = - const Key('__extraActionsPopupMenuButton__'); - static final extraActionsEmptyContainer = - const Key('__extraActionsEmptyContainer__'); - static final filteredTodosEmptyContainer = - const Key('__filteredTodosEmptyContainer__'); + static final extraActionsPopupMenuButton = const Key( + '__extraActionsPopupMenuButton__', + ); + static final extraActionsEmptyContainer = const Key( + '__extraActionsEmptyContainer__', + ); + static final filteredTodosEmptyContainer = const Key( + '__filteredTodosEmptyContainer__', + ); static final statsLoadingIndicator = const Key('__statsLoadingIndicator__'); static final emptyStatsContainer = const Key('__emptyStatsContainer__'); static final emptyDetailsContainer = const Key('__emptyDetailsContainer__'); diff --git a/bloc_library/lib/blocs/blocs.dart b/bloc_library/lib/blocs/blocs.dart index b4e836a2..21c9a2bd 100644 --- a/bloc_library/lib/blocs/blocs.dart +++ b/bloc_library/lib/blocs/blocs.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export './filtered_todos/filtered_todos.dart'; export './stats/stats.dart'; export './tab/tab.dart'; diff --git a/bloc_library/lib/blocs/filtered_todos/filtered_todos.dart b/bloc_library/lib/blocs/filtered_todos/filtered_todos.dart index 2dab7174..f15a9590 100644 --- a/bloc_library/lib/blocs/filtered_todos/filtered_todos.dart +++ b/bloc_library/lib/blocs/filtered_todos/filtered_todos.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export './filtered_todos_bloc.dart'; export './filtered_todos_event.dart'; export './filtered_todos_state.dart'; diff --git a/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart b/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart index 19f268c8..630976bc 100644 --- a/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart +++ b/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:meta/meta.dart'; @@ -54,9 +50,7 @@ class FilteredTodosBloc extends Bloc { } } - Stream _mapTodosUpdatedToState( - UpdateTodos event, - ) async* { + Stream _mapTodosUpdatedToState(UpdateTodos event) async* { final visibilityFilter = state is FilteredTodosLoaded ? (state as FilteredTodosLoaded).activeFilter : VisibilityFilter.all; diff --git a/bloc_library/lib/blocs/filtered_todos/filtered_todos_event.dart b/bloc_library/lib/blocs/filtered_todos/filtered_todos_event.dart index 24ff55d8..7a07f880 100644 --- a/bloc_library/lib/blocs/filtered_todos/filtered_todos_event.dart +++ b/bloc_library/lib/blocs/filtered_todos/filtered_todos_event.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:equatable/equatable.dart'; import 'package:bloc_library/models/models.dart'; diff --git a/bloc_library/lib/blocs/filtered_todos/filtered_todos_state.dart b/bloc_library/lib/blocs/filtered_todos/filtered_todos_state.dart index 400d6172..89ec5158 100644 --- a/bloc_library/lib/blocs/filtered_todos/filtered_todos_state.dart +++ b/bloc_library/lib/blocs/filtered_todos/filtered_todos_state.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:equatable/equatable.dart'; import 'package:bloc_library/models/models.dart'; @@ -18,10 +14,7 @@ class FilteredTodosLoaded extends FilteredTodosState { final List filteredTodos; final VisibilityFilter activeFilter; - const FilteredTodosLoaded( - this.filteredTodos, - this.activeFilter, - ); + const FilteredTodosLoaded(this.filteredTodos, this.activeFilter); @override List get props => [filteredTodos, activeFilter]; diff --git a/bloc_library/lib/blocs/simple_bloc_delegate.dart b/bloc_library/lib/blocs/simple_bloc_delegate.dart index 334e2363..b38b8727 100644 --- a/bloc_library/lib/blocs/simple_bloc_delegate.dart +++ b/bloc_library/lib/blocs/simple_bloc_delegate.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc/bloc.dart'; // We can extend `BlocDelegate` and override `onTransition` and `onError` diff --git a/bloc_library/lib/blocs/tab/tab.dart b/bloc_library/lib/blocs/tab/tab.dart index 28f7b1ea..2d61e12b 100644 --- a/bloc_library/lib/blocs/tab/tab.dart +++ b/bloc_library/lib/blocs/tab/tab.dart @@ -1,6 +1,2 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'tab_bloc.dart'; export 'tab_event.dart'; diff --git a/bloc_library/lib/blocs/tab/tab_bloc.dart b/bloc_library/lib/blocs/tab/tab_bloc.dart index bc5d8b8b..8dd6c515 100644 --- a/bloc_library/lib/blocs/tab/tab_bloc.dart +++ b/bloc_library/lib/blocs/tab/tab_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:bloc/bloc.dart'; diff --git a/bloc_library/lib/blocs/tab/tab_event.dart b/bloc_library/lib/blocs/tab/tab_event.dart index fe6e0a49..bf3a240c 100644 --- a/bloc_library/lib/blocs/tab/tab_event.dart +++ b/bloc_library/lib/blocs/tab/tab_event.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:equatable/equatable.dart'; import 'package:bloc_library/models/models.dart'; diff --git a/bloc_library/lib/blocs/todos/todos.dart b/bloc_library/lib/blocs/todos/todos.dart index 6ad36e3f..22d556dd 100644 --- a/bloc_library/lib/blocs/todos/todos.dart +++ b/bloc_library/lib/blocs/todos/todos.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'todos_bloc.dart'; export 'todos_event.dart'; export 'todos_state.dart'; diff --git a/bloc_library/lib/blocs/todos/todos_bloc.dart b/bloc_library/lib/blocs/todos/todos_bloc.dart index ea1222a8..16c10367 100644 --- a/bloc_library/lib/blocs/todos/todos_bloc.dart +++ b/bloc_library/lib/blocs/todos/todos_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:bloc/bloc.dart'; @@ -38,9 +34,7 @@ class TodosBloc extends Bloc { Stream _mapLoadTodosToState() async* { try { final todos = await todosRepository.loadTodos(); - yield TodosLoaded( - todos.map(Todo.fromEntity).toList(), - ); + yield TodosLoaded(todos.map(Todo.fromEntity).toList()); } catch (_) { yield TodosNotLoaded(); } @@ -67,8 +61,7 @@ class TodosBloc extends Bloc { Stream _mapDeleteTodoToState(DeleteTodo event) async* { if (state is TodosLoaded) { - final updatedTodos = (state as TodosLoaded) - .todos + final updatedTodos = (state as TodosLoaded).todos .where((todo) => todo.id != event.todo.id) .toList(); yield TodosLoaded(updatedTodos); @@ -78,10 +71,10 @@ class TodosBloc extends Bloc { Stream _mapToggleAllToState() async* { if (state is TodosLoaded) { - final allComplete = - (state as TodosLoaded).todos.every((todo) => todo.complete); - final updatedTodos = (state as TodosLoaded) - .todos + final allComplete = (state as TodosLoaded).todos.every( + (todo) => todo.complete, + ); + final updatedTodos = (state as TodosLoaded).todos .map((todo) => todo.copyWith(complete: !allComplete)) .toList(); yield TodosLoaded(updatedTodos); @@ -91,8 +84,9 @@ class TodosBloc extends Bloc { Stream _mapClearCompletedToState() async* { if (state is TodosLoaded) { - final updatedTodos = - (state as TodosLoaded).todos.where((todo) => !todo.complete).toList(); + final updatedTodos = (state as TodosLoaded).todos + .where((todo) => !todo.complete) + .toList(); yield TodosLoaded(updatedTodos); await _saveTodos(updatedTodos); } diff --git a/bloc_library/lib/blocs/todos/todos_event.dart b/bloc_library/lib/blocs/todos/todos_event.dart index ab18d06d..d403e0ee 100644 --- a/bloc_library/lib/blocs/todos/todos_event.dart +++ b/bloc_library/lib/blocs/todos/todos_event.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:equatable/equatable.dart'; import 'package:bloc_library/models/models.dart'; diff --git a/bloc_library/lib/blocs/todos/todos_state.dart b/bloc_library/lib/blocs/todos/todos_state.dart index 79334039..0830df43 100644 --- a/bloc_library/lib/blocs/todos/todos_state.dart +++ b/bloc_library/lib/blocs/todos/todos_state.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:equatable/equatable.dart'; import 'package:bloc_library/models/models.dart'; diff --git a/bloc_library/lib/localization.dart b/bloc_library/lib/localization.dart index 3ccb24e3..84c3f7f2 100644 --- a/bloc_library/lib/localization.dart +++ b/bloc_library/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/bloc_library/lib/models/app_tab.dart b/bloc_library/lib/models/app_tab.dart index 096b6f56..8348dfcf 100644 --- a/bloc_library/lib/models/app_tab.dart +++ b/bloc_library/lib/models/app_tab.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum AppTab { todos, stats } diff --git a/bloc_library/lib/models/extra_action.dart b/bloc_library/lib/models/extra_action.dart index 236a7d0b..4ca0c02b 100644 --- a/bloc_library/lib/models/extra_action.dart +++ b/bloc_library/lib/models/extra_action.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum ExtraAction { toggleAllComplete, clearCompleted } diff --git a/bloc_library/lib/models/models.dart b/bloc_library/lib/models/models.dart index 21dff725..69216858 100644 --- a/bloc_library/lib/models/models.dart +++ b/bloc_library/lib/models/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'app_tab.dart'; export 'extra_action.dart'; export 'todo.dart'; diff --git a/bloc_library/lib/models/todo.dart b/bloc_library/lib/models/todo.dart index 025120dc..84dadd81 100644 --- a/bloc_library/lib/models/todo.dart +++ b/bloc_library/lib/models/todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:meta/meta.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -14,8 +10,8 @@ class Todo { final String task; Todo(this.task, {this.complete = false, String note = '', String id}) - : note = note ?? '', - id = id ?? Uuid().generateV4(); + : note = note ?? '', + id = id ?? Uuid().generateV4(); Todo copyWith({bool complete, String id, String note, String task}) { return Todo( diff --git a/bloc_library/lib/models/visibility_filter.dart b/bloc_library/lib/models/visibility_filter.dart index 11f11982..a47beca1 100644 --- a/bloc_library/lib/models/visibility_filter.dart +++ b/bloc_library/lib/models/visibility_filter.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum VisibilityFilter { all, active, completed } diff --git a/bloc_library/lib/run_app.dart b/bloc_library/lib/run_app.dart index c4a6dad4..b1505bbb 100644 --- a/bloc_library/lib/run_app.dart +++ b/bloc_library/lib/run_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc/bloc.dart'; import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/localization.dart'; @@ -44,9 +40,7 @@ class TodosApp extends StatelessWidget { ArchSampleRoutes.home: (context) { return MultiBlocProvider( providers: [ - BlocProvider( - create: (context) => TabBloc(), - ), + BlocProvider(create: (context) => TabBloc()), BlocProvider( create: (context) => FilteredTodosBloc(todosBloc: todosBloc), ), diff --git a/bloc_library/lib/screens/add_edit_screen.dart b/bloc_library/lib/screens/add_edit_screen.dart index 8c67e96a..c33a68b8 100644 --- a/bloc_library/lib/screens/add_edit_screen.dart +++ b/bloc_library/lib/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -40,9 +36,7 @@ class _AddEditScreenState extends State { return Scaffold( appBar: AppBar( - title: Text( - isEditing ? localizations.editTodo : localizations.addTodo, - ), + title: Text(isEditing ? localizations.editTodo : localizations.addTodo), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -70,18 +64,17 @@ class _AddEditScreenState extends State { key: ArchSampleKeys.noteField, maxLines: 10, style: textTheme.subhead, - decoration: InputDecoration( - hintText: localizations.notesHint, - ), + decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { diff --git a/bloc_library/lib/screens/details_screen.dart b/bloc_library/lib/screens/details_screen.dart index 701f409d..eb62b77c 100644 --- a/bloc_library/lib/screens/details_screen.dart +++ b/bloc_library/lib/screens/details_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -14,7 +10,7 @@ class DetailsScreen extends StatelessWidget { final String id; DetailsScreen({Key key, @required this.id}) - : super(key: key ?? ArchSampleKeys.todoDetailsScreen); + : super(key: key ?? ArchSampleKeys.todoDetailsScreen); @override Widget build(BuildContext context) { @@ -22,9 +18,10 @@ class DetailsScreen extends StatelessWidget { return BlocBuilder( bloc: todosBloc, builder: (BuildContext context, TodosState state) { - final todo = (state as TodosLoaded) - .todos - .firstWhere((todo) => todo.id == id, orElse: () => null); + final todo = (state as TodosLoaded).todos.firstWhere( + (todo) => todo.id == id, + orElse: () => null, + ); final localizations = ArchSampleLocalizations.of(context); return Scaffold( appBar: AppBar( @@ -38,7 +35,7 @@ class DetailsScreen extends StatelessWidget { todosBloc.add(DeleteTodo(todo)); Navigator.pop(context, todo); }, - ) + ), ], ), body: todo == null @@ -53,15 +50,16 @@ class DetailsScreen extends StatelessWidget { Padding( padding: EdgeInsets.only(right: 8.0), child: Checkbox( - key: BlocLibraryKeys.detailsScreenCheckBox, - value: todo.complete, - onChanged: (_) { - todosBloc.add( - UpdateTodo( - todo.copyWith(complete: !todo.complete), - ), - ); - }), + key: BlocLibraryKeys.detailsScreenCheckBox, + value: todo.complete, + onChanged: (_) { + todosBloc.add( + UpdateTodo( + todo.copyWith(complete: !todo.complete), + ), + ); + }, + ), ), Expanded( child: Column( @@ -78,8 +76,9 @@ class DetailsScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: - Theme.of(context).textTheme.headline, + style: Theme.of( + context, + ).textTheme.headline, ), ), ), diff --git a/bloc_library/lib/screens/home_screen.dart b/bloc_library/lib/screens/home_screen.dart index 043e001e..e4834cd3 100644 --- a/bloc_library/lib/screens/home_screen.dart +++ b/bloc_library/lib/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; diff --git a/bloc_library/lib/widgets/extra_actions.dart b/bloc_library/lib/widgets/extra_actions.dart index cb9992d8..61aa7500 100644 --- a/bloc_library/lib/widgets/extra_actions.dart +++ b/bloc_library/lib/widgets/extra_actions.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; @@ -21,9 +17,9 @@ class ExtraActions extends StatelessWidget { bloc: todosBloc, builder: (BuildContext context, TodosState state) { if (state is TodosLoaded) { - final allComplete = (todosBloc.state as TodosLoaded) - .todos - .every((todo) => todo.complete); + final allComplete = (todosBloc.state as TodosLoaded).todos.every( + (todo) => todo.complete, + ); return PopupMenuButton( key: BlocLibraryKeys.extraActionsPopupMenuButton, onSelected: (action) { @@ -49,9 +45,7 @@ class ExtraActions extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.clearCompleted, value: ExtraAction.clearCompleted, - child: Text( - ArchSampleLocalizations.of(context).clearCompleted, - ), + child: Text(ArchSampleLocalizations.of(context).clearCompleted), ), ], ); diff --git a/bloc_library/lib/widgets/filter_button.dart b/bloc_library/lib/widgets/filter_button.dart index f81ace89..be4289ed 100644 --- a/bloc_library/lib/widgets/filter_button.dart +++ b/bloc_library/lib/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -16,30 +12,30 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { final defaultStyle = Theme.of(context).textTheme.body1; - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final filteredTodosBloc = BlocProvider.of(context); return BlocBuilder( - bloc: filteredTodosBloc, - builder: (BuildContext context, FilteredTodosState state) { - final button = _Button( - onSelected: (filter) { - filteredTodosBloc.add(UpdateFilter(filter)); - }, - activeFilter: state is FilteredTodosLoaded - ? state.activeFilter - : VisibilityFilter.all, - activeStyle: activeStyle, - defaultStyle: defaultStyle, - ); - return AnimatedOpacity( - opacity: visible ? 1.0 : 0.0, - duration: Duration(milliseconds: 150), - child: visible ? button : IgnorePointer(child: button), - ); - }); + bloc: filteredTodosBloc, + builder: (BuildContext context, FilteredTodosState state) { + final button = _Button( + onSelected: (filter) { + filteredTodosBloc.add(UpdateFilter(filter)); + }, + activeFilter: state is FilteredTodosLoaded + ? state.activeFilter + : VisibilityFilter.all, + activeStyle: activeStyle, + defaultStyle: defaultStyle, + ); + return AnimatedOpacity( + opacity: visible ? 1.0 : 0.0, + duration: Duration(milliseconds: 150), + child: visible ? button : IgnorePointer(child: button), + ); + }, + ); } } diff --git a/bloc_library/lib/widgets/filtered_todos.dart b/bloc_library/lib/widgets/filtered_todos.dart index e1c6f8d7..4251181a 100644 --- a/bloc_library/lib/widgets/filtered_todos.dart +++ b/bloc_library/lib/widgets/filtered_todos.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_library/models/models.dart'; import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; @@ -22,10 +18,7 @@ class FilteredTodos extends StatelessWidget { final localizations = ArchSampleLocalizations.of(context); return BlocBuilder( - builder: ( - BuildContext context, - FilteredTodosState state, - ) { + builder: (BuildContext context, FilteredTodosState state) { if (state is FilteredTodosLoading) { return LoadingIndicator(key: ArchSampleKeys.todosLoading); } else if (state is FilteredTodosLoaded) { @@ -39,26 +32,32 @@ class FilteredTodos extends StatelessWidget { todo: todo, onDismissed: (_) { todosBloc.add(DeleteTodo(todo)); - Scaffold.of(context).showSnackBar(DeleteTodoSnackBar( - key: ArchSampleKeys.snackbar, - todo: todo, - onUndo: () => todosBloc.add(AddTodo(todo)), - localizations: localizations, - )); + Scaffold.of(context).showSnackBar( + DeleteTodoSnackBar( + key: ArchSampleKeys.snackbar, + todo: todo, + onUndo: () => todosBloc.add(AddTodo(todo)), + localizations: localizations, + ), + ); }, onTap: () async { final removedTodo = await Navigator.of(context).push( - MaterialPageRoute(builder: (_) { - return DetailsScreen(id: todo.id); - }), + MaterialPageRoute( + builder: (_) { + return DetailsScreen(id: todo.id); + }, + ), ); if (removedTodo != null) { - Scaffold.of(context).showSnackBar(DeleteTodoSnackBar( - key: ArchSampleKeys.snackbar, - todo: todo, - onUndo: () => todosBloc.add(AddTodo(todo)), - localizations: localizations, - )); + Scaffold.of(context).showSnackBar( + DeleteTodoSnackBar( + key: ArchSampleKeys.snackbar, + todo: todo, + onUndo: () => todosBloc.add(AddTodo(todo)), + localizations: localizations, + ), + ); } }, onCheckboxChanged: (_) { diff --git a/bloc_library/lib/widgets/loading_indicator.dart b/bloc_library/lib/widgets/loading_indicator.dart index 822a4c32..e9884bb8 100644 --- a/bloc_library/lib/widgets/loading_indicator.dart +++ b/bloc_library/lib/widgets/loading_indicator.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; class LoadingIndicator extends StatelessWidget { @@ -9,8 +5,6 @@ class LoadingIndicator extends StatelessWidget { @override Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); + return Center(child: CircularProgressIndicator()); } } diff --git a/bloc_library/lib/widgets/stats.dart b/bloc_library/lib/widgets/stats.dart index 59b6940d..1ccf3d14 100644 --- a/bloc_library/lib/widgets/stats.dart +++ b/bloc_library/lib/widgets/stats.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; @@ -56,7 +52,7 @@ class Stats extends StatelessWidget { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.subhead, ), - ) + ), ], ), ); diff --git a/bloc_library/lib/widgets/tab_selector.dart b/bloc_library/lib/widgets/tab_selector.dart index 4fd51b4e..6055b17a 100644 --- a/bloc_library/lib/widgets/tab_selector.dart +++ b/bloc_library/lib/widgets/tab_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -12,11 +8,8 @@ class TabSelector extends StatelessWidget { final AppTab activeTab; final Function(AppTab) onTabSelected; - TabSelector({ - Key key, - @required this.activeTab, - @required this.onTabSelected, - }) : super(key: key); + TabSelector({Key key, @required this.activeTab, @required this.onTabSelected}) + : super(key: key); @override Widget build(BuildContext context) { @@ -32,9 +25,11 @@ class TabSelector extends StatelessWidget { ? ArchSampleKeys.todoTab : ArchSampleKeys.statsTab, ), - title: Text(tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos), + title: Text( + tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, + ), ); }).toList(), ); diff --git a/bloc_library/lib/widgets/todo_item.dart b/bloc_library/lib/widgets/todo_item.dart index 8f7c8e0f..2c0ed037 100644 --- a/bloc_library/lib/widgets/todo_item.dart +++ b/bloc_library/lib/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; diff --git a/bloc_library/test/blocs/filtered_todos_bloc_test.dart b/bloc_library/test/blocs/filtered_todos_bloc_test.dart index 42f44d78..b93ed75d 100644 --- a/bloc_library/test/blocs/filtered_todos_bloc_test.dart +++ b/bloc_library/test/blocs/filtered_todos_bloc_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -21,9 +17,9 @@ void main() { 'adds TodosUpdated when TodosBloc.state emits TodosLoaded', build: () { final todosBloc = MockTodosBloc(); - when(todosBloc.state).thenReturn( - TodosLoaded([Todo('Wash Dishes', id: '0')]), - ); + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); whenListen( todosBloc, Stream.fromIterable([ @@ -33,10 +29,9 @@ void main() { return FilteredTodosBloc(todosBloc: todosBloc); }, expect: [ - FilteredTodosLoaded( - [Todo('Wash Dishes', id: '0')], - VisibilityFilter.all, - ), + FilteredTodosLoaded([ + Todo('Wash Dishes', id: '0'), + ], VisibilityFilter.all), ], ); @@ -44,21 +39,20 @@ void main() { 'should update the VisibilityFilter when filter is active', build: () { final todosBloc = MockTodosBloc(); - when(todosBloc.state) - .thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); return FilteredTodosBloc(todosBloc: todosBloc); }, act: (FilteredTodosBloc bloc) async => bloc.add(UpdateFilter(VisibilityFilter.active)), expect: [ - FilteredTodosLoaded( - [Todo('Wash Dishes', id: '0')], - VisibilityFilter.all, - ), - FilteredTodosLoaded( - [Todo('Wash Dishes', id: '0')], - VisibilityFilter.active, - ), + FilteredTodosLoaded([ + Todo('Wash Dishes', id: '0'), + ], VisibilityFilter.all), + FilteredTodosLoaded([ + Todo('Wash Dishes', id: '0'), + ], VisibilityFilter.active), ], ); @@ -66,17 +60,17 @@ void main() { 'should update the VisibilityFilter when filter is completed', build: () { final todosBloc = MockTodosBloc(); - when(todosBloc.state) - .thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); return FilteredTodosBloc(todosBloc: todosBloc); }, act: (FilteredTodosBloc bloc) async => bloc.add(UpdateFilter(VisibilityFilter.completed)), expect: [ - FilteredTodosLoaded( - [Todo('Wash Dishes', id: '0')], - VisibilityFilter.all, - ), + FilteredTodosLoaded([ + Todo('Wash Dishes', id: '0'), + ], VisibilityFilter.all), FilteredTodosLoaded([], VisibilityFilter.completed), ], ); diff --git a/bloc_library/test/blocs/filtered_todos_event_test.dart b/bloc_library/test/blocs/filtered_todos_event_test.dart index 0fcfc72c..1dc61d75 100644 --- a/bloc_library/test/blocs/filtered_todos_event_test.dart +++ b/bloc_library/test/blocs/filtered_todos_event_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; diff --git a/bloc_library/test/blocs/simple_bloc_delegate_test.dart b/bloc_library/test/blocs/simple_bloc_delegate_test.dart index 3a248422..9192e4ba 100644 --- a/bloc_library/test/blocs/simple_bloc_delegate_test.dart +++ b/bloc_library/test/blocs/simple_bloc_delegate_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/simple_bloc_delegate.dart'; import 'package:bloc/bloc.dart'; @@ -18,43 +14,48 @@ void main() { printLog = []; }); - test('onTransition prints Transition', overridePrint(() { - delegate.onTransition( - null, - Transition( - currentState: 'A', - event: 'E', - nextState: 'B', - ), - ); - expect( - printLog[0], - 'Transition { currentState: A, event: E, nextState: B }', - ); - })); - - test('onError prints Error', overridePrint(() { - delegate.onError(null, 'whoops', null); - expect( - printLog[0], - 'whoops', - ); - })); - - test('onEvent prints Event', overridePrint(() { - delegate.onEvent(null, 'event'); - expect( - printLog[0], - 'event', - ); - })); + test( + 'onTransition prints Transition', + overridePrint(() { + delegate.onTransition( + null, + Transition( + currentState: 'A', + event: 'E', + nextState: 'B', + ), + ); + expect( + printLog[0], + 'Transition { currentState: A, event: E, nextState: B }', + ); + }), + ); + + test( + 'onError prints Error', + overridePrint(() { + delegate.onError(null, 'whoops', null); + expect(printLog[0], 'whoops'); + }), + ); + + test( + 'onEvent prints Event', + overridePrint(() { + delegate.onEvent(null, 'event'); + expect(printLog[0], 'event'); + }), + ); }); } dynamic overridePrint(dynamic Function() testFn) => () { - var spec = ZoneSpecification(print: (_, __, ___, String msg) { - // Add to log instead of printing to stdout - printLog.add(msg); - }); - return Zone.current.fork(specification: spec).run(testFn); - }; + var spec = ZoneSpecification( + print: (_, __, ___, String msg) { + // Add to log instead of printing to stdout + printLog.add(msg); + }, + ); + return Zone.current.fork(specification: spec).run(testFn); +}; diff --git a/bloc_library/test/blocs/stats_bloc_test.dart b/bloc_library/test/blocs/stats_bloc_test.dart index 87a985a0..6fdec270 100644 --- a/bloc_library/test/blocs/stats_bloc_test.dart +++ b/bloc_library/test/blocs/stats_bloc_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:bloc_test/bloc_test.dart'; @@ -36,40 +32,28 @@ void main() { return StatsBloc(todosBloc: todosBloc); }, act: (StatsBloc bloc) async => bloc.add(UpdateStats([])), - expect: [ - StatsLoading(), - StatsLoaded(0, 0), - ], + expect: [StatsLoading(), StatsLoaded(0, 0)], ); blocTest( 'should update the stats properly when Todos are empty', build: () => statsBloc, act: (StatsBloc bloc) async => bloc.add(UpdateStats([])), - expect: [ - StatsLoading(), - StatsLoaded(0, 0), - ], + expect: [StatsLoading(), StatsLoaded(0, 0)], ); blocTest( 'should update the stats properly when Todos contains one active todo', build: () => statsBloc, act: (StatsBloc bloc) async => bloc.add(UpdateStats([todo1])), - expect: [ - StatsLoading(), - StatsLoaded(1, 0), - ], + expect: [StatsLoading(), StatsLoaded(1, 0)], ); blocTest( 'should update the stats properly when Todos contains one active todo and one completed todo', build: () => statsBloc, act: (StatsBloc bloc) async => bloc.add(UpdateStats([todo1, todo2])), - expect: [ - StatsLoading(), - StatsLoaded(1, 1), - ], + expect: [StatsLoading(), StatsLoaded(1, 1)], ); }); } diff --git a/bloc_library/test/blocs/stats_event_test.dart b/bloc_library/test/blocs/stats_event_test.dart index f1ccf4a8..4c7ef0b0 100644 --- a/bloc_library/test/blocs/stats_event_test.dart +++ b/bloc_library/test/blocs/stats_event_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/blocs.dart'; @@ -9,10 +5,7 @@ void main() { group('StatsEvent', () { group('UpdateStats', () { test('toString returns correct value', () { - expect( - UpdateStats([]).toString(), - 'UpdateStats { todos: [] }', - ); + expect(UpdateStats([]).toString(), 'UpdateStats { todos: [] }'); }); }); }); diff --git a/bloc_library/test/blocs/tab_bloc_test.dart b/bloc_library/test/blocs/tab_bloc_test.dart index 47cf1cf0..4c5bac38 100644 --- a/bloc_library/test/blocs/tab_bloc_test.dart +++ b/bloc_library/test/blocs/tab_bloc_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/tab/tab.dart'; @@ -13,10 +9,7 @@ void main() { 'should update the AppTab', build: () => TabBloc(), act: (TabBloc bloc) async => bloc.add(UpdateTab(AppTab.stats)), - expect: [ - AppTab.todos, - AppTab.stats, - ], + expect: [AppTab.todos, AppTab.stats], ); }); } diff --git a/bloc_library/test/blocs/tab_event_test.dart b/bloc_library/test/blocs/tab_event_test.dart index 50b88fe5..032cf0db 100644 --- a/bloc_library/test/blocs/tab_event_test.dart +++ b/bloc_library/test/blocs/tab_event_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; diff --git a/bloc_library/test/blocs/todos_bloc_test.dart b/bloc_library/test/blocs/todos_bloc_test.dart index fb9beaf4..0624471f 100644 --- a/bloc_library/test/blocs/todos_bloc_test.dart +++ b/bloc_library/test/blocs/todos_bloc_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; @@ -29,17 +25,15 @@ void main() { return todosBloc; }, act: (TodosBloc bloc) async => bloc.add(LoadTodos()), - expect: [ - TodosLoading(), - TodosNotLoaded(), - ], + expect: [TodosLoading(), TodosNotLoaded()], ); blocTest( 'should add a todo to the list in response to an AddTodo Event', build: () => todosBloc, - act: (TodosBloc bloc) async => - bloc..add(LoadTodos())..add(AddTodo(Todo('Hallo', id: '0'))), + act: (TodosBloc bloc) async => bloc + ..add(LoadTodos()) + ..add(AddTodo(Todo('Hallo', id: '0'))), expect: [ TodosLoading(), TodosLoaded([]), @@ -55,7 +49,10 @@ void main() { }, act: (TodosBloc bloc) async { final todo = Todo('Hallo', id: '0'); - bloc..add(LoadTodos())..add(AddTodo(todo))..add(DeleteTodo(todo)); + bloc + ..add(LoadTodos()) + ..add(AddTodo(todo)) + ..add(DeleteTodo(todo)); }, expect: [ TodosLoading(), @@ -157,10 +154,7 @@ void main() { Todo('Hallo', id: '0', complete: true), Todo('Tschüss', id: '1', complete: true), ]), - TodosLoaded([ - Todo('Hallo', id: '0'), - Todo('Tschüss', id: '1'), - ]), + TodosLoaded([Todo('Hallo', id: '0'), Todo('Tschüss', id: '1')]), ], ); }); diff --git a/bloc_library/test/blocs/todos_event_test.dart b/bloc_library/test/blocs/todos_event_test.dart index 6a478c15..c7471f77 100644 --- a/bloc_library/test/blocs/todos_event_test.dart +++ b/bloc_library/test/blocs/todos_event_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; @@ -10,10 +6,7 @@ void main() { group('TodosEvent', () { group('LoadTodos', () { test('toString returns correct value', () { - expect( - LoadTodos().toString(), - 'LoadTodos', - ); + expect(LoadTodos().toString(), 'LoadTodos'); }); }); @@ -46,19 +39,13 @@ void main() { group('ClearCompleted', () { test('toString returns correct value', () { - expect( - ClearCompleted().toString(), - 'ClearCompleted', - ); + expect(ClearCompleted().toString(), 'ClearCompleted'); }); }); group('ToggleAll', () { test('toString returns correct value', () { - expect( - ToggleAll().toString(), - 'ToggleAll', - ); + expect(ToggleAll().toString(), 'ToggleAll'); }); }); }); diff --git a/bloc_library/test/blocs/todos_state_test.dart b/bloc_library/test/blocs/todos_state_test.dart index 878cfd3f..f99b3a86 100644 --- a/bloc_library/test/blocs/todos_state_test.dart +++ b/bloc_library/test/blocs/todos_state_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; @@ -10,10 +6,7 @@ void main() { group('TodosState', () { group('TodosLoading', () { test('toString returns correct value', () { - expect( - TodosLoading().toString(), - 'TodosLoading', - ); + expect(TodosLoading().toString(), 'TodosLoading'); }); }); @@ -28,10 +21,7 @@ void main() { group('TodosNotLoaded', () { test('toString returns correct value', () { - expect( - TodosNotLoaded().toString(), - 'TodosNotLoaded', - ); + expect(TodosNotLoaded().toString(), 'TodosNotLoaded'); }); }); }); diff --git a/bloc_library/test/localization_test.dart b/bloc_library/test/localization_test.dart index 73c8e1ba..9069879f 100644 --- a/bloc_library/test/localization_test.dart +++ b/bloc_library/test/localization_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/localization.dart'; import 'package:flutter/material.dart'; diff --git a/bloc_library/test/models/todo_test.dart b/bloc_library/test/models/todo_test.dart index 8e2eb5b0..85da9a2d 100644 --- a/bloc_library/test/models/todo_test.dart +++ b/bloc_library/test/models/todo_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/models/models.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/bloc_library/test/screens/add_edit_screen_test.dart b/bloc_library/test/screens/add_edit_screen_test.dart index 6a753343..2e5c62d1 100644 --- a/bloc_library/test/screens/add_edit_screen_test.dart +++ b/bloc_library/test/screens/add_edit_screen_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/screens/add_edit_screen.dart'; @@ -11,8 +7,9 @@ import 'package:todos_app_core/todos_app_core.dart'; void main() { group('AddEditScreen', () { - testWidgets('should render properly when isEditing: true', - (WidgetTester tester) async { + testWidgets('should render properly when isEditing: true', ( + WidgetTester tester, + ) async { await tester.pumpWidget( MaterialApp( home: Scaffold( @@ -34,15 +31,13 @@ void main() { expect(find.byKey(ArchSampleKeys.saveTodoFab), findsOneWidget); }); - testWidgets('should render properly when isEditing: false', - (WidgetTester tester) async { + testWidgets('should render properly when isEditing: false', ( + WidgetTester tester, + ) async { await tester.pumpWidget( MaterialApp( home: Scaffold( - body: AddEditScreen( - isEditing: false, - onSave: (_, __) {}, - ), + body: AddEditScreen(isEditing: false, onSave: (_, __) {}), ), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), @@ -55,8 +50,9 @@ void main() { expect(find.byKey(ArchSampleKeys.saveNewTodo), findsOneWidget); }); - testWidgets('should call onSave when Floating Action Button is tapped', - (WidgetTester tester) async { + testWidgets('should call onSave when Floating Action Button is tapped', ( + WidgetTester tester, + ) async { var onSavePressed = false; await tester.pumpWidget( MaterialApp( @@ -80,8 +76,9 @@ void main() { expect(onSavePressed, true); }); - testWidgets('should call show error if task name is empty', - (WidgetTester tester) async { + testWidgets('should call show error if task name is empty', ( + WidgetTester tester, + ) async { await tester.pumpWidget( MaterialApp( home: Scaffold( diff --git a/bloc_library/test/screens/details_screen_test.dart b/bloc_library/test/screens/details_screen_test.dart index a8c5a282..4e0d267b 100644 --- a/bloc_library/test/screens/details_screen_test.dart +++ b/bloc_library/test/screens/details_screen_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -35,9 +31,7 @@ void main() { BlocProvider.value( value: todosBloc, child: MaterialApp( - home: Scaffold( - body: DetailsScreen(id: '0'), - ), + home: Scaffold(body: DetailsScreen(id: '0')), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -50,16 +44,14 @@ void main() { }); testWidgets('renders properly with todos', (WidgetTester tester) async { - when(todosBloc.state).thenReturn( - TodosLoaded([Todo('wash car', id: '0')]), - ); + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); await tester.pumpWidget( BlocProvider.value( value: todosBloc, child: MaterialApp( - home: Scaffold( - body: DetailsScreen(id: '0'), - ), + home: Scaffold(body: DetailsScreen(id: '0')), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -72,21 +64,20 @@ void main() { expect(find.text('wash car'), findsOneWidget); }); - testWidgets('adds UpdateTodo when checkbox tapped', - (WidgetTester tester) async { - when(todosBloc.state).thenReturn( - TodosLoaded([Todo('wash car', id: '0')]), - ); - when(todosBloc.add( - UpdateTodo(Todo('wash car', id: '0', complete: true)), - )).thenReturn(null); + testWidgets('adds UpdateTodo when checkbox tapped', ( + WidgetTester tester, + ) async { + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); + when( + todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), + ).thenReturn(null); await tester.pumpWidget( BlocProvider.value( value: todosBloc, child: MaterialApp( - home: Scaffold( - body: DetailsScreen(id: '0'), - ), + home: Scaffold(body: DetailsScreen(id: '0')), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -96,23 +87,22 @@ void main() { ); await tester.pumpAndSettle(); await tester.tap(find.byKey(BlocLibraryKeys.detailsScreenCheckBox)); - verify(todosBloc.add( - UpdateTodo(Todo('wash car', id: '0', complete: true)), - )).called(1); + verify( + todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), + ).called(1); }); - testWidgets('Navigates to Edit Todo Screen when Edit Tapped', - (WidgetTester tester) async { - when(todosBloc.state).thenReturn( - TodosLoaded([Todo('wash car', id: '0')]), - ); + testWidgets('Navigates to Edit Todo Screen when Edit Tapped', ( + WidgetTester tester, + ) async { + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); await tester.pumpWidget( BlocProvider.value( value: todosBloc, child: MaterialApp( - home: Scaffold( - body: DetailsScreen(id: '0'), - ), + home: Scaffold(body: DetailsScreen(id: '0')), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -126,21 +116,20 @@ void main() { expect(find.byKey(ArchSampleKeys.editTodoScreen), findsOneWidget); }); - testWidgets('adds UpdateTodo when onSave called', - (WidgetTester tester) async { - when(todosBloc.add( - UpdateTodo(Todo('new todo', id: '0', complete: true)), - )).thenReturn(null); - when(todosBloc.state).thenReturn( - TodosLoaded([Todo('wash car', id: '0')]), - ); + testWidgets('adds UpdateTodo when onSave called', ( + WidgetTester tester, + ) async { + when( + todosBloc.add(UpdateTodo(Todo('new todo', id: '0', complete: true))), + ).thenReturn(null); + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); await tester.pumpWidget( BlocProvider.value( value: todosBloc, child: MaterialApp( - home: Scaffold( - body: DetailsScreen(id: '0'), - ), + home: Scaffold(body: DetailsScreen(id: '0')), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -156,9 +145,9 @@ void main() { await tester.enterText(find.byKey(ArchSampleKeys.taskField), 'new todo'); await tester.tap(find.byKey(ArchSampleKeys.saveTodoFab)); await tester.pumpAndSettle(); - verify(todosBloc.add( - UpdateTodo(Todo('new todo', id: '0', complete: false)), - )).called(1); + verify( + todosBloc.add(UpdateTodo(Todo('new todo', id: '0', complete: false))), + ).called(1); }); }); } diff --git a/bloc_library/test/screens/home_screen_test.dart b/bloc_library/test/screens/home_screen_test.dart index 7e1c0df1..ce4741b0 100644 --- a/bloc_library/test/screens/home_screen_test.dart +++ b/bloc_library/test/screens/home_screen_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/blocs/tab/tab_bloc.dart'; import 'package:bloc_library/models/app_tab.dart'; @@ -48,23 +44,13 @@ void main() { await tester.pumpWidget( MultiBlocProvider( providers: [ - BlocProvider.value( - value: todosBloc, - ), - BlocProvider.value( - value: filteredTodosBloc, - ), - BlocProvider.value( - value: tabBloc, - ), - BlocProvider.value( - value: statsBloc, - ), + BlocProvider.value(value: todosBloc), + BlocProvider.value(value: filteredTodosBloc), + BlocProvider.value(value: tabBloc), + BlocProvider.value(value: statsBloc), ], child: MaterialApp( - home: Scaffold( - body: HomeScreen(), - ), + home: Scaffold(body: HomeScreen()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -77,30 +63,21 @@ void main() { expect(find.text('Bloc Library Example'), findsOneWidget); }); - testWidgets('Navigates to /addTodo when Floating Action Button is tapped', - (WidgetTester tester) async { + testWidgets('Navigates to /addTodo when Floating Action Button is tapped', ( + WidgetTester tester, + ) async { when(todosBloc.state).thenAnswer((_) => TodosLoaded([])); when(tabBloc.state).thenAnswer((_) => AppTab.todos); await tester.pumpWidget( MultiBlocProvider( providers: [ - BlocProvider.value( - value: todosBloc, - ), - BlocProvider.value( - value: filteredTodosBloc, - ), - BlocProvider.value( - value: tabBloc, - ), - BlocProvider.value( - value: statsBloc, - ), + BlocProvider.value(value: todosBloc), + BlocProvider.value(value: filteredTodosBloc), + BlocProvider.value(value: tabBloc), + BlocProvider.value(value: statsBloc), ], child: MaterialApp( - home: Scaffold( - body: HomeScreen(), - ), + home: Scaffold(body: HomeScreen()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), diff --git a/bloc_library/test/widgets/delete_todo_snack_bar_test.dart b/bloc_library/test/widgets/delete_todo_snack_bar_test.dart index ebfd057b..40ee2218 100644 --- a/bloc_library/test/widgets/delete_todo_snack_bar_test.dart +++ b/bloc_library/test/widgets/delete_todo_snack_bar_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -13,28 +9,30 @@ void main() { testWidgets('should render properly', (WidgetTester tester) async { var snackBarKey = Key('snack_bar_key'); var tapTarget = Key('tap_target_key'); - await tester.pumpWidget(MaterialApp( - home: Scaffold( - body: Builder(builder: (BuildContext context) { - return GestureDetector( - onTap: () { - Scaffold.of(context).showSnackBar(DeleteTodoSnackBar( - key: snackBarKey, - onUndo: () {}, - localizations: ArchSampleLocalizations(Locale('en')), - todo: Todo('take out trash'), - )); + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: Builder( + builder: (BuildContext context) { + return GestureDetector( + onTap: () { + Scaffold.of(context).showSnackBar( + DeleteTodoSnackBar( + key: snackBarKey, + onUndo: () {}, + localizations: ArchSampleLocalizations(Locale('en')), + todo: Todo('take out trash'), + ), + ); + }, + behavior: HitTestBehavior.opaque, + child: Container(height: 100.0, width: 100.0, key: tapTarget), + ); }, - behavior: HitTestBehavior.opaque, - child: Container( - height: 100.0, - width: 100.0, - key: tapTarget, - ), - ); - }), + ), + ), ), - )); + ); await tester.tap(find.byKey(tapTarget)); await tester.pump(); @@ -49,27 +47,34 @@ void main() { expect(find.text('Undo'), findsOneWidget); }); - testWidgets('should call onUndo when undo tapped', - (WidgetTester tester) async { + testWidgets('should call onUndo when undo tapped', ( + WidgetTester tester, + ) async { var tapCount = 0; - await tester.pumpWidget(MaterialApp( - home: Scaffold( - body: Builder(builder: (BuildContext context) { - return GestureDetector( - onTap: () { - Scaffold.of(context).showSnackBar(DeleteTodoSnackBar( - onUndo: () { - ++tapCount; + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: Builder( + builder: (BuildContext context) { + return GestureDetector( + onTap: () { + Scaffold.of(context).showSnackBar( + DeleteTodoSnackBar( + onUndo: () { + ++tapCount; + }, + localizations: ArchSampleLocalizations(Locale('en')), + todo: Todo('take out trash'), + ), + ); }, - localizations: ArchSampleLocalizations(Locale('en')), - todo: Todo('take out trash'), - )); + child: const Text('X'), + ); }, - child: const Text('X'), - ); - }), + ), + ), ), - )); + ); await tester.tap(find.text('X')); await tester.pump(); // start animation await tester.pump(const Duration(milliseconds: 750)); diff --git a/bloc_library/test/widgets/extra_actions_test.dart b/bloc_library/test/widgets/extra_actions_test.dart index 804d53e2..050d2244 100644 --- a/bloc_library/test/widgets/extra_actions_test.dart +++ b/bloc_library/test/widgets/extra_actions_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -25,100 +21,102 @@ void main() { todosBloc = MockTodosBloc(); }); - testWidgets('renders an empty Container if state is not TodosLoaded', - (WidgetTester tester) async { + testWidgets('renders an empty Container if state is not TodosLoaded', ( + WidgetTester tester, + ) async { when(todosBloc.state).thenReturn(TodosLoading()); await tester.pumpWidget( BlocProvider.value( value: todosBloc, child: MaterialApp( home: Scaffold( - appBar: AppBar( - actions: [ExtraActions()], - ), + appBar: AppBar(actions: [ExtraActions()]), body: Container(), ), ), ), ); - expect(find.byKey((BlocLibraryKeys.extraActionsEmptyContainer)), - findsOneWidget); + expect( + find.byKey((BlocLibraryKeys.extraActionsEmptyContainer)), + findsOneWidget, + ); }); testWidgets( - 'renders PopupMenuButton with mark all done if state is TodosLoaded with incomplete todos', - (WidgetTester tester) async { - when(todosBloc.state).thenReturn(TodosLoaded([Todo('walk dog')])); - await tester.pumpWidget( - BlocProvider.value( - value: todosBloc, - child: MaterialApp( - home: Scaffold( - appBar: AppBar( - actions: [ExtraActions()], + 'renders PopupMenuButton with mark all done if state is TodosLoaded with incomplete todos', + (WidgetTester tester) async { + when(todosBloc.state).thenReturn(TodosLoaded([Todo('walk dog')])); + await tester.pumpWidget( + BlocProvider.value( + value: todosBloc, + child: MaterialApp( + home: Scaffold( + appBar: AppBar(actions: [ExtraActions()]), + body: Container(), ), - body: Container(), + localizationsDelegates: [ + ArchSampleLocalizationsDelegate(), + FlutterBlocLocalizationsDelegate(), + ], ), - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), - ], ), - ), - ); - await tester.pumpAndSettle(); - await tester.tap(find.byKey(BlocLibraryKeys.extraActionsPopupMenuButton)); - await tester.pump(); - expect(find.byKey(ArchSampleKeys.toggleAll), findsOneWidget); - expect(find.text('Clear completed'), findsOneWidget); - expect(find.text('Mark all complete'), findsOneWidget); - }); + ); + await tester.pumpAndSettle(); + await tester.tap( + find.byKey(BlocLibraryKeys.extraActionsPopupMenuButton), + ); + await tester.pump(); + expect(find.byKey(ArchSampleKeys.toggleAll), findsOneWidget); + expect(find.text('Clear completed'), findsOneWidget); + expect(find.text('Mark all complete'), findsOneWidget); + }, + ); testWidgets( - 'renders PopupMenuButton with mark all incomplete if state is TodosLoaded with complete todos', - (WidgetTester tester) async { - when(todosBloc.state) - .thenReturn(TodosLoaded([Todo('walk dog', complete: true)])); - await tester.pumpWidget( - BlocProvider.value( - value: todosBloc, - child: MaterialApp( - home: Scaffold( - appBar: AppBar( - actions: [ExtraActions()], + 'renders PopupMenuButton with mark all incomplete if state is TodosLoaded with complete todos', + (WidgetTester tester) async { + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('walk dog', complete: true)])); + await tester.pumpWidget( + BlocProvider.value( + value: todosBloc, + child: MaterialApp( + home: Scaffold( + appBar: AppBar(actions: [ExtraActions()]), + body: Container(), ), - body: Container(), + localizationsDelegates: [ + ArchSampleLocalizationsDelegate(), + FlutterBlocLocalizationsDelegate(), + ], ), - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), - ], ), - ), - ); - await tester.pumpAndSettle(); - await tester.tap(find.byKey(BlocLibraryKeys.extraActionsPopupMenuButton)); - await tester.pump(); - expect(find.byKey(ArchSampleKeys.toggleAll), findsOneWidget); - expect(find.text('Clear completed'), findsOneWidget); - expect(find.text('Mark all incomplete'), findsOneWidget); - }); + ); + await tester.pumpAndSettle(); + await tester.tap( + find.byKey(BlocLibraryKeys.extraActionsPopupMenuButton), + ); + await tester.pump(); + expect(find.byKey(ArchSampleKeys.toggleAll), findsOneWidget); + expect(find.text('Clear completed'), findsOneWidget); + expect(find.text('Mark all incomplete'), findsOneWidget); + }, + ); - testWidgets('tapping clear completed adds ClearCompleted', - (WidgetTester tester) async { - when(todosBloc.state).thenReturn(TodosLoaded([ - Todo('walk dog'), - Todo('take out trash', complete: true), - ])); + testWidgets('tapping clear completed adds ClearCompleted', ( + WidgetTester tester, + ) async { + when(todosBloc.state).thenReturn( + TodosLoaded([Todo('walk dog'), Todo('take out trash', complete: true)]), + ); when(todosBloc.add(ClearCompleted())).thenReturn(null); await tester.pumpWidget( BlocProvider.value( value: todosBloc, child: MaterialApp( home: Scaffold( - appBar: AppBar( - actions: [ExtraActions()], - ), + appBar: AppBar(actions: [ExtraActions()]), body: Container(), ), localizationsDelegates: [ @@ -137,21 +135,19 @@ void main() { verify(todosBloc.add(ClearCompleted())).called(1); }); - testWidgets('tapping toggle all adds ToggleAll', - (WidgetTester tester) async { - when(todosBloc.state).thenReturn(TodosLoaded([ - Todo('walk dog'), - Todo('take out trash'), - ])); + testWidgets('tapping toggle all adds ToggleAll', ( + WidgetTester tester, + ) async { + when( + todosBloc.state, + ).thenReturn(TodosLoaded([Todo('walk dog'), Todo('take out trash')])); when(todosBloc.add(ToggleAll())).thenReturn(null); await tester.pumpWidget( BlocProvider.value( value: todosBloc, child: MaterialApp( home: Scaffold( - appBar: AppBar( - actions: [ExtraActions()], - ), + appBar: AppBar(actions: [ExtraActions()]), body: Container(), ), localizationsDelegates: [ diff --git a/bloc_library/test/widgets/filter_button_test.dart b/bloc_library/test/widgets/filter_button_test.dart index 46a85340..5e5e9af6 100644 --- a/bloc_library/test/widgets/filter_button_test.dart +++ b/bloc_library/test/widgets/filter_button_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -25,19 +21,18 @@ void main() { filteredTodosBloc = MockFilteredTodosBloc(); }); - testWidgets('should render properly with VisibilityFilter.all', - (WidgetTester tester) async { - when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded([], VisibilityFilter.all), - ); + testWidgets('should render properly with VisibilityFilter.all', ( + WidgetTester tester, + ) async { + when( + filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.all)); await tester.pumpWidget( BlocProvider.value( value: filteredTodosBloc, child: MaterialApp( home: Scaffold( - appBar: AppBar( - actions: [FilterButton(visible: true)], - ), + appBar: AppBar(actions: [FilterButton(visible: true)]), body: Container(), ), localizationsDelegates: [ @@ -56,19 +51,18 @@ void main() { expect(find.byKey(ArchSampleKeys.activeFilter), findsOneWidget); }); - testWidgets('should render properly VisibilityFilter.active', - (WidgetTester tester) async { - when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded([], VisibilityFilter.active), - ); + testWidgets('should render properly VisibilityFilter.active', ( + WidgetTester tester, + ) async { + when( + filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.active)); await tester.pumpWidget( BlocProvider.value( value: filteredTodosBloc, child: MaterialApp( home: Scaffold( - appBar: AppBar( - actions: [FilterButton(visible: true)], - ), + appBar: AppBar(actions: [FilterButton(visible: true)]), body: Container(), ), localizationsDelegates: [ @@ -87,19 +81,18 @@ void main() { expect(find.byKey(ArchSampleKeys.activeFilter), findsOneWidget); }); - testWidgets('should render properly VisibilityFilter.completed', - (WidgetTester tester) async { - when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded([], VisibilityFilter.completed), - ); + testWidgets('should render properly VisibilityFilter.completed', ( + WidgetTester tester, + ) async { + when( + filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.completed)); await tester.pumpWidget( BlocProvider.value( value: filteredTodosBloc, child: MaterialApp( home: Scaffold( - appBar: AppBar( - actions: [FilterButton(visible: true)], - ), + appBar: AppBar(actions: [FilterButton(visible: true)]), body: Container(), ), localizationsDelegates: [ @@ -118,21 +111,21 @@ void main() { expect(find.byKey(ArchSampleKeys.activeFilter), findsOneWidget); }); - testWidgets('should add UpdateFilter when filter selected', - (WidgetTester tester) async { - when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded([], VisibilityFilter.active), - ); - when(filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all))) - .thenReturn(null); + testWidgets('should add UpdateFilter when filter selected', ( + WidgetTester tester, + ) async { + when( + filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.active)); + when( + filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all)), + ).thenReturn(null); await tester.pumpWidget( BlocProvider.value( value: filteredTodosBloc, child: MaterialApp( home: Scaffold( - appBar: AppBar( - actions: [FilterButton(visible: true)], - ), + appBar: AppBar(actions: [FilterButton(visible: true)]), body: Container(), ), localizationsDelegates: [ @@ -152,8 +145,9 @@ void main() { expect(allFilterFinder, findsOneWidget); await tester.tap(allFilterFinder); - verify(filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all))) - .called(1); + verify( + filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all)), + ).called(1); }); }); } diff --git a/bloc_library/test/widgets/filtered_todos_test.dart b/bloc_library/test/widgets/filtered_todos_test.dart index 07be0cde..70e98e85 100644 --- a/bloc_library/test/widgets/filtered_todos_test.dart +++ b/bloc_library/test/widgets/filtered_todos_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -31,11 +27,10 @@ void main() { filteredTodosBloc = MockFilteredTodosBloc(); }); - testWidgets('should show loading indicator when state is TodosLoading', - (WidgetTester tester) async { - when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoading(), - ); + testWidgets('should show loading indicator when state is TodosLoading', ( + WidgetTester tester, + ) async { + when(filteredTodosBloc.state).thenAnswer((_) => FilteredTodosLoading()); await tester.pumpWidget( MultiBlocProvider( providers: [ @@ -43,9 +38,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -57,11 +50,10 @@ void main() { expect(find.byKey(ArchSampleKeys.todosLoading), findsOneWidget); }); - testWidgets('should show empty container when state is null', - (WidgetTester tester) async { - when(filteredTodosBloc.state).thenAnswer( - (_) => null, - ); + testWidgets('should show empty container when state is null', ( + WidgetTester tester, + ) async { + when(filteredTodosBloc.state).thenAnswer((_) => null); await tester.pumpWidget( MultiBlocProvider( providers: [ @@ -69,9 +61,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -80,45 +70,48 @@ void main() { ), ); await tester.pumpAndSettle(); - expect(find.byKey(BlocLibraryKeys.filteredTodosEmptyContainer), - findsOneWidget); + expect( + find.byKey(BlocLibraryKeys.filteredTodosEmptyContainer), + findsOneWidget, + ); }); testWidgets( - 'should show empty list when state is TodosLoaded with no todos', - (WidgetTester tester) async { - when(todosBloc.state).thenAnswer((_) => TodosLoaded([])); - when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded([], VisibilityFilter.all), - ); - await tester.pumpWidget( - MultiBlocProvider( - providers: [ - BlocProvider.value(value: todosBloc), - BlocProvider.value(value: filteredTodosBloc), - ], - child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), + 'should show empty list when state is TodosLoaded with no todos', + (WidgetTester tester) async { + when(todosBloc.state).thenAnswer((_) => TodosLoaded([])); + when( + filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.all)); + await tester.pumpWidget( + MultiBlocProvider( + providers: [ + BlocProvider.value(value: todosBloc), + BlocProvider.value(value: filteredTodosBloc), ], + child: MaterialApp( + home: Scaffold(body: FilteredTodos()), + localizationsDelegates: [ + ArchSampleLocalizationsDelegate(), + FlutterBlocLocalizationsDelegate(), + ], + ), ), - ), - ); - await tester.pumpAndSettle(); - final todoListFinder = find.byKey(ArchSampleKeys.todoList); - expect(todoListFinder, findsOneWidget); - expect( + ); + await tester.pumpAndSettle(); + final todoListFinder = find.byKey(ArchSampleKeys.todoList); + expect(todoListFinder, findsOneWidget); + expect( (todoListFinder.evaluate().first.widget as ListView) .semanticChildCount, - 0); - }); + 0, + ); + }, + ); - testWidgets('should show todos when state is TodosLoaded with todos', - (WidgetTester tester) async { + testWidgets('should show todos when state is TodosLoaded with todos', ( + WidgetTester tester, + ) async { when(todosBloc.state).thenAnswer((_) => TodosLoaded([Todo('wash car')])); when(filteredTodosBloc.state).thenAnswer( (_) => FilteredTodosLoaded([Todo('wash car')], VisibilityFilter.all), @@ -130,9 +123,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -144,21 +135,25 @@ void main() { final todoListFinder = find.byKey(ArchSampleKeys.todoList); expect(todoListFinder, findsOneWidget); expect( - (todoListFinder.evaluate().first.widget as ListView) - .semanticChildCount, - 1); + (todoListFinder.evaluate().first.widget as ListView).semanticChildCount, + 1, + ); }); - testWidgets('should add OnCheckboxChanged when checkbox tapped', - (WidgetTester tester) async { - when(todosBloc.state) - .thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); + testWidgets('should add OnCheckboxChanged when checkbox tapped', ( + WidgetTester tester, + ) async { + when( + todosBloc.state, + ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded( - [Todo('wash car', id: '0')], VisibilityFilter.all), + (_) => FilteredTodosLoaded([ + Todo('wash car', id: '0'), + ], VisibilityFilter.all), ); - when(todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true)))) - .thenReturn(null); + when( + todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), + ).thenReturn(null); await tester.pumpWidget( MultiBlocProvider( providers: [ @@ -166,9 +161,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -183,16 +176,13 @@ void main() { expect(checkboxFinder, findsOneWidget); await tester.tap(checkboxFinder); verify( - todosBloc.add( - UpdateTodo( - Todo('wash car', id: '0', complete: true), - ), - ), + todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), ).called(1); }); - testWidgets('should add DeleteTodo when dismissed', - (WidgetTester tester) async { + testWidgets('should add DeleteTodo when dismissed', ( + WidgetTester tester, + ) async { when(filteredTodosBloc.state).thenReturn( FilteredTodosLoaded([Todo('wash car', id: '0')], VisibilityFilter.all), ); @@ -203,9 +193,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -218,17 +206,12 @@ void main() { expect(todoFinder, findsOneWidget); (tester.widget(find.byKey(ArchSampleKeys.todoItem('0'))) as Dismissible) .onDismissed(null); - verify( - todosBloc.add( - DeleteTodo( - Todo('wash car', id: '0'), - ), - ), - ).called(1); + verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); }); - testWidgets('should add AddTodo when dismissed and Undo Tapped', - (WidgetTester tester) async { + testWidgets('should add AddTodo when dismissed and Undo Tapped', ( + WidgetTester tester, + ) async { when(filteredTodosBloc.state).thenReturn( FilteredTodosLoaded([Todo('wash car', id: '0')], VisibilityFilter.all), ); @@ -239,9 +222,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -255,31 +236,22 @@ void main() { (tester.widget(find.byKey(ArchSampleKeys.todoItem('0'))) as Dismissible) .onDismissed(null); await tester.pumpAndSettle(); - verify( - todosBloc.add( - DeleteTodo( - Todo('wash car', id: '0'), - ), - ), - ).called(1); + verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); expect(find.text('Undo'), findsOneWidget); await tester.tap(find.text('Undo')); - verify( - todosBloc.add( - AddTodo( - Todo('wash car', id: '0'), - ), - ), - ).called(1); + verify(todosBloc.add(AddTodo(Todo('wash car', id: '0')))).called(1); }); - testWidgets('should Navigate to DetailsScreen when todo tapped', - (WidgetTester tester) async { - when(todosBloc.state) - .thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); + testWidgets('should Navigate to DetailsScreen when todo tapped', ( + WidgetTester tester, + ) async { + when( + todosBloc.state, + ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded( - [Todo('wash car', id: '0')], VisibilityFilter.all), + (_) => FilteredTodosLoaded([ + Todo('wash car', id: '0'), + ], VisibilityFilter.all), ); await tester.pumpWidget( MultiBlocProvider( @@ -288,9 +260,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -306,16 +276,20 @@ void main() { expect(find.byKey(ArchSampleKeys.todoDetailsScreen), findsOneWidget); }); - testWidgets('should add DeleteTodo when todo deleted from DetailsScreen', - (WidgetTester tester) async { - when(todosBloc.state) - .thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); + testWidgets('should add DeleteTodo when todo deleted from DetailsScreen', ( + WidgetTester tester, + ) async { + when( + todosBloc.state, + ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded( - [Todo('wash car', id: '0')], VisibilityFilter.all), + (_) => FilteredTodosLoaded([ + Todo('wash car', id: '0'), + ], VisibilityFilter.all), ); - when(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))) - .thenReturn(null); + when( + todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + ).thenReturn(null); await tester.pumpWidget( MultiBlocProvider( providers: [ @@ -323,9 +297,7 @@ void main() { BlocProvider.value(value: filteredTodosBloc), ], child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), + home: Scaffold(body: FilteredTodos()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -341,67 +313,53 @@ void main() { expect(find.byKey(ArchSampleKeys.todoDetailsScreen), findsOneWidget); await tester.tap(find.byKey(ArchSampleKeys.deleteTodoButton)); await tester.pumpAndSettle(); - verify( - todosBloc.add( - DeleteTodo( - Todo('wash car', id: '0'), - ), - ), - ).called(1); + verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); }); testWidgets( - 'should add AddTodo when todo deleted from DetailsScreen and Undo Tapped', - (WidgetTester tester) async { - when(todosBloc.state) - .thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); - when(filteredTodosBloc.state).thenAnswer( - (_) => FilteredTodosLoaded( - [Todo('wash car', id: '0')], VisibilityFilter.all), - ); - when(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))) - .thenReturn(null); - when(todosBloc.add(AddTodo(Todo('wash car', id: '0')))).thenReturn(null); - await tester.pumpWidget( - MultiBlocProvider( - providers: [ - BlocProvider.value(value: todosBloc), - BlocProvider.value(value: filteredTodosBloc), - ], - child: MaterialApp( - home: Scaffold( - body: FilteredTodos(), - ), - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), - ], - ), - ), - ); - await tester.pumpAndSettle(); - final todoFinder = find.byKey(ArchSampleKeys.todoItem('0')); - expect(todoFinder, findsOneWidget); - await tester.tap(todoFinder); - await tester.pumpAndSettle(); - expect(find.byKey(ArchSampleKeys.todoDetailsScreen), findsOneWidget); - await tester.tap(find.byKey(ArchSampleKeys.deleteTodoButton)); - await tester.pumpAndSettle(); - verify( - todosBloc.add( - DeleteTodo( - Todo('wash car', id: '0'), - ), - ), - ).called(1); - await tester.tap(find.text('Undo')); - verify( - todosBloc.add( - AddTodo( + 'should add AddTodo when todo deleted from DetailsScreen and Undo Tapped', + (WidgetTester tester) async { + when( + todosBloc.state, + ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); + when(filteredTodosBloc.state).thenAnswer( + (_) => FilteredTodosLoaded([ Todo('wash car', id: '0'), + ], VisibilityFilter.all), + ); + when( + todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + ).thenReturn(null); + when( + todosBloc.add(AddTodo(Todo('wash car', id: '0'))), + ).thenReturn(null); + await tester.pumpWidget( + MultiBlocProvider( + providers: [ + BlocProvider.value(value: todosBloc), + BlocProvider.value(value: filteredTodosBloc), + ], + child: MaterialApp( + home: Scaffold(body: FilteredTodos()), + localizationsDelegates: [ + ArchSampleLocalizationsDelegate(), + FlutterBlocLocalizationsDelegate(), + ], + ), ), - ), - ).called(1); - }); + ); + await tester.pumpAndSettle(); + final todoFinder = find.byKey(ArchSampleKeys.todoItem('0')); + expect(todoFinder, findsOneWidget); + await tester.tap(todoFinder); + await tester.pumpAndSettle(); + expect(find.byKey(ArchSampleKeys.todoDetailsScreen), findsOneWidget); + await tester.tap(find.byKey(ArchSampleKeys.deleteTodoButton)); + await tester.pumpAndSettle(); + verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); + await tester.tap(find.text('Undo')); + verify(todosBloc.add(AddTodo(Todo('wash car', id: '0')))).called(1); + }, + ); }); } diff --git a/bloc_library/test/widgets/loading_indicator_test.dart b/bloc_library/test/widgets/loading_indicator_test.dart index 54c8713f..0bbfb755 100644 --- a/bloc_library/test/widgets/loading_indicator_test.dart +++ b/bloc_library/test/widgets/loading_indicator_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/widgets/loading_indicator.dart'; @@ -12,9 +8,7 @@ void main() { final loadingIndicatorKey = Key('loading_indicator_key'); await tester.pumpWidget( MaterialApp( - home: Scaffold( - body: LoadingIndicator(key: loadingIndicatorKey), - ), + home: Scaffold(body: LoadingIndicator(key: loadingIndicatorKey)), ), ); expect(find.byKey(loadingIndicatorKey), findsOneWidget); diff --git a/bloc_library/test/widgets/stats_tab_test.dart b/bloc_library/test/widgets/stats_tab_test.dart index 94182073..9b6cf7cd 100644 --- a/bloc_library/test/widgets/stats_tab_test.dart +++ b/bloc_library/test/widgets/stats_tab_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -24,16 +20,15 @@ void main() { statsBloc = MockStatsBloc(); }); - testWidgets('should render LoadingIndicator when state is StatsLoading', - (WidgetTester tester) async { + testWidgets('should render LoadingIndicator when state is StatsLoading', ( + WidgetTester tester, + ) async { when(statsBloc.state).thenAnswer((_) => StatsLoading()); await tester.pumpWidget( BlocProvider.value( value: statsBloc, child: MaterialApp( - home: Scaffold( - body: Stats(), - ), + home: Scaffold(body: Stats()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -45,16 +40,15 @@ void main() { expect(find.byKey(BlocLibraryKeys.statsLoadingIndicator), findsOneWidget); }); - testWidgets('should render empty stats container when state is null', - (WidgetTester tester) async { + testWidgets('should render empty stats container when state is null', ( + WidgetTester tester, + ) async { when(statsBloc.state).thenAnswer((_) => null); await tester.pumpWidget( BlocProvider.value( value: statsBloc, child: MaterialApp( - home: Scaffold( - body: Stats(), - ), + home: Scaffold(body: Stats()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -66,16 +60,15 @@ void main() { expect(find.byKey(BlocLibraryKeys.emptyStatsContainer), findsOneWidget); }); - testWidgets('should render correct stats when state is StatsLoaded(0, 0)', - (WidgetTester tester) async { + testWidgets('should render correct stats when state is StatsLoaded(0, 0)', ( + WidgetTester tester, + ) async { when(statsBloc.state).thenAnswer((_) => StatsLoaded(0, 0)); await tester.pumpWidget( BlocProvider.value( value: statsBloc, child: MaterialApp( - home: Scaffold( - body: Stats(), - ), + home: Scaffold(body: Stats()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), @@ -93,16 +86,15 @@ void main() { expect((numCompletedFinder.evaluate().first.widget as Text).data, '0'); }); - testWidgets('should render correct stats when state is StatsLoaded(2, 1)', - (WidgetTester tester) async { + testWidgets('should render correct stats when state is StatsLoaded(2, 1)', ( + WidgetTester tester, + ) async { when(statsBloc.state).thenAnswer((_) => StatsLoaded(2, 1)); await tester.pumpWidget( BlocProvider.value( value: statsBloc, child: MaterialApp( - home: Scaffold( - body: Stats(), - ), + home: Scaffold(body: Stats()), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), diff --git a/bloc_library/test/widgets/tab_selector_test.dart b/bloc_library/test/widgets/tab_selector_test.dart index 98a3e7c3..5e087cbd 100644 --- a/bloc_library/test/widgets/tab_selector_test.dart +++ b/bloc_library/test/widgets/tab_selector_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/localization.dart'; @@ -32,36 +28,38 @@ void main() { expect(find.byKey(ArchSampleKeys.statsTab), findsOneWidget); }); - testWidgets('should call onTabSelected with correct index when tab tapped', - (WidgetTester tester) async { - AppTab selectedTab; + testWidgets( + 'should call onTabSelected with correct index when tab tapped', + (WidgetTester tester) async { + AppTab selectedTab; - await tester.pumpWidget( - MaterialApp( - home: Scaffold( - body: Container(), - bottomNavigationBar: TabSelector( - onTabSelected: (appTab) { - selectedTab = appTab; - }, - activeTab: AppTab.todos, + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: Container(), + bottomNavigationBar: TabSelector( + onTabSelected: (appTab) { + selectedTab = appTab; + }, + activeTab: AppTab.todos, + ), ), + localizationsDelegates: [ + ArchSampleLocalizationsDelegate(), + FlutterBlocLocalizationsDelegate(), + ], ), - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), - ], - ), - ); - await tester.pumpAndSettle(); - final todoTabFinder = find.byKey(ArchSampleKeys.todoTab); - final statsTabFinder = find.byKey(ArchSampleKeys.statsTab); - expect(todoTabFinder, findsOneWidget); - expect(statsTabFinder, findsOneWidget); - await tester.tap(todoTabFinder); - expect(selectedTab, AppTab.todos); - await tester.tap(statsTabFinder); - expect(selectedTab, AppTab.stats); - }); + ); + await tester.pumpAndSettle(); + final todoTabFinder = find.byKey(ArchSampleKeys.todoTab); + final statsTabFinder = find.byKey(ArchSampleKeys.statsTab); + expect(todoTabFinder, findsOneWidget); + expect(statsTabFinder, findsOneWidget); + await tester.tap(todoTabFinder); + expect(selectedTab, AppTab.todos); + await tester.tap(statsTabFinder); + expect(selectedTab, AppTab.stats); + }, + ); }); } diff --git a/bloc_library/test/widgets/todo_item_test.dart b/bloc_library/test/widgets/todo_item_test.dart index 31089776..5b561f7b 100644 --- a/bloc_library/test/widgets/todo_item_test.dart +++ b/bloc_library/test/widgets/todo_item_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/localization.dart'; @@ -11,8 +7,9 @@ import 'package:bloc_library/models/models.dart'; void main() { group('TodoItem', () { - testWidgets('should render properly with no note', - (WidgetTester tester) async { + testWidgets('should render properly with no note', ( + WidgetTester tester, + ) async { await tester.pumpWidget( MaterialApp( home: Scaffold( @@ -35,8 +32,9 @@ void main() { expect(find.byKey(ArchSampleKeys.todoItemNote('0')), findsNothing); }); - testWidgets('should render properly with note', - (WidgetTester tester) async { + testWidgets('should render properly with note', ( + WidgetTester tester, + ) async { await tester.pumpWidget( MaterialApp( home: Scaffold( diff --git a/bloc_library/test_driver/todo_app.dart b/bloc_library/test_driver/todo_app.dart index 02d7642d..3808a4b5 100644 --- a/bloc_library/test_driver/todo_app.dart +++ b/bloc_library/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_driver/driver_extension.dart'; import 'package:bloc_library/main.dart' as app; diff --git a/bloc_library/test_driver/todo_app_test.dart b/bloc_library/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/bloc_library/test_driver/todo_app_test.dart +++ b/bloc_library/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/blocs/lib/blocs.dart b/blocs/lib/blocs.dart index eac5029b..0bb621ae 100644 --- a/blocs/lib/blocs.dart +++ b/blocs/lib/blocs.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library blocs; export 'src/models/models.dart'; diff --git a/blocs/lib/src/models/models.dart b/blocs/lib/src/models/models.dart index 43a66686..19918b8b 100644 --- a/blocs/lib/src/models/models.dart +++ b/blocs/lib/src/models/models.dart @@ -1,6 +1,2 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'package:blocs/src/models/todo.dart'; export 'package:blocs/src/models/visibility_filter.dart'; diff --git a/blocs/lib/src/models/todo.dart b/blocs/lib/src/models/todo.dart index 222d4111..2fb74732 100644 --- a/blocs/lib/src/models/todo.dart +++ b/blocs/lib/src/models/todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:blocs/src/uuid.dart'; import 'package:meta/meta.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -14,8 +10,8 @@ class Todo { final String task; Todo(this.task, {this.complete = false, String note = '', String id}) - : this.note = note ?? '', - this.id = id ?? Uuid().generateV4(); + : this.note = note ?? '', + this.id = id ?? Uuid().generateV4(); Todo copyWith({bool complete, String id, String note, String task}) { return Todo( diff --git a/blocs/lib/src/models/visibility_filter.dart b/blocs/lib/src/models/visibility_filter.dart index 11f11982..a47beca1 100644 --- a/blocs/lib/src/models/visibility_filter.dart +++ b/blocs/lib/src/models/visibility_filter.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum VisibilityFilter { all, active, completed } diff --git a/blocs/lib/src/stats_bloc.dart b/blocs/lib/src/stats_bloc.dart index ed5e19bf..8cc2c975 100644 --- a/blocs/lib/src/stats_bloc.dart +++ b/blocs/lib/src/stats_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:blocs/src/models/models.dart'; @@ -11,10 +7,7 @@ class StatsBloc { final Stream numActive; final Stream numComplete; - StatsBloc._( - this.numActive, - this.numComplete, - ); + StatsBloc._(this.numActive, this.numComplete); factory StatsBloc(TodosInteractor interactor) { return StatsBloc._( diff --git a/blocs/lib/src/todo_bloc.dart b/blocs/lib/src/todo_bloc.dart index 0304ae3c..0dfbd44a 100644 --- a/blocs/lib/src/todo_bloc.dart +++ b/blocs/lib/src/todo_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:blocs/src/models/models.dart'; diff --git a/blocs/lib/src/todos_interactor.dart b/blocs/lib/src/todos_interactor.dart index 54526512..12bd2bdb 100644 --- a/blocs/lib/src/todos_interactor.dart +++ b/blocs/lib/src/todos_interactor.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:blocs/blocs.dart'; @@ -19,12 +15,11 @@ class TodosInteractor { } Stream todo(String id) { - return todos.map((todos) { - return todos.firstWhere( - (todo) => todo.id == id, - orElse: () => null, - ); - }).where((todo) => todo != null); + return todos + .map((todos) { + return todos.firstWhere((todo) => todo.id == id, orElse: () => null); + }) + .where((todo) => todo != null); } Stream get allComplete => todos.map(_allComplete); @@ -44,7 +39,8 @@ class TodosInteractor { final updates = await todos.map(_todosToUpdate).first; return Future.wait( - updates.map((update) => repository.updateTodo(update.toEntity()))); + updates.map((update) => repository.updateTodo(update.toEntity())), + ); } static bool _hasCompletedTodos(List todos) { diff --git a/blocs/lib/src/todos_list_bloc.dart b/blocs/lib/src/todos_list_bloc.dart index c9d27fd3..10e3eccb 100644 --- a/blocs/lib/src/todos_list_bloc.dart +++ b/blocs/lib/src/todos_list_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:blocs/src/models/models.dart'; diff --git a/blocs/lib/src/user_bloc.dart b/blocs/lib/src/user_bloc.dart index c121d731..61cda371 100644 --- a/blocs/lib/src/user_bloc.dart +++ b/blocs/lib/src/user_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/blocs/lib/src/uuid.dart b/blocs/lib/src/uuid.dart index 1b6b26da..73d193cb 100644 --- a/blocs/lib/src/uuid.dart +++ b/blocs/lib/src/uuid.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:math'; /// A UUID generator, useful for generating unique IDs for your Todos. diff --git a/blocs/test/stats_bloc_test.dart b/blocs/test/stats_bloc_test.dart index d91973b1..dd51fe00 100644 --- a/blocs/test/stats_bloc_test.dart +++ b/blocs/test/stats_bloc_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:blocs/blocs.dart'; import 'package:mockito/mockito.dart'; import 'package:rxdart/rxdart.dart'; @@ -13,10 +9,7 @@ void main() { group('StatsBloc', () { test('should stream the number of active todos', () { final interactor = MockTodosInteractor(); - final todos = [ - Todo('Hallo', complete: true), - Todo('Friend'), - ]; + final todos = [Todo('Hallo', complete: true), Todo('Friend')]; final source = BehaviorSubject>.seeded(todos); when(interactor.todos).thenAnswer((_) => source.stream); diff --git a/blocs/test/todos_interactor_test.dart b/blocs/test/todos_interactor_test.dart index 66eef7c7..8c8a7cea 100644 --- a/blocs/test/todos_interactor_test.dart +++ b/blocs/test/todos_interactor_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:blocs/blocs.dart'; @@ -95,8 +91,9 @@ void main() { final todo = Todo("AddMe"); when(repository.todos()).thenAnswer((_) => Stream.empty()); - when(repository.addNewTodo(todo.toEntity())) - .thenAnswer((_) => Future.value()); + when( + repository.addNewTodo(todo.toEntity()), + ).thenAnswer((_) => Future.value()); interactor.addNewTodo(todo); @@ -144,8 +141,9 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); @@ -166,10 +164,12 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); - when(repository.updateTodo(e2Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e2Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); @@ -191,10 +191,12 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); - when(repository.updateTodo(e2Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e2Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); diff --git a/built_redux/lib/actions/actions.dart b/built_redux/lib/actions/actions.dart index c9592c98..e42f4bad 100644 --- a/built_redux/lib/actions/actions.dart +++ b/built_redux/lib/actions/actions.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library actions; import 'package:built_redux/built_redux.dart'; @@ -40,8 +36,5 @@ abstract class UpdateTodoActionPayload UpdateTodoActionPayload._(); factory UpdateTodoActionPayload(String id, Todo updatedTodo) => - _$UpdateTodoActionPayload._( - id: id, - updatedTodo: updatedTodo, - ); + _$UpdateTodoActionPayload._(id: id, updatedTodo: updatedTodo); } diff --git a/built_redux/lib/containers/action_selector.dart b/built_redux/lib/containers/action_selector.dart index e0b50dc1..b124adb1 100644 --- a/built_redux/lib/containers/action_selector.dart +++ b/built_redux/lib/containers/action_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; import 'package:built_redux_sample/presentation/extra_actions_button.dart'; diff --git a/built_redux/lib/containers/active_tab.dart b/built_redux/lib/containers/active_tab.dart index 94d3fd00..711e2d6f 100644 --- a/built_redux/lib/containers/active_tab.dart +++ b/built_redux/lib/containers/active_tab.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/containers/typedefs.dart'; import 'package:built_redux_sample/models/models.dart'; diff --git a/built_redux/lib/containers/add_todo.dart b/built_redux/lib/containers/add_todo.dart index 4433de41..5484c357 100644 --- a/built_redux/lib/containers/add_todo.dart +++ b/built_redux/lib/containers/add_todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; import 'package:built_redux_sample/presentation/add_edit_screen.dart'; @@ -14,14 +10,17 @@ class AddTodo extends StoreConnector { @override Widget build(BuildContext context, Null ignored, AppActions actions) { return AddEditScreen( - isEditing: false, - onSave: (String task, String note) { - actions.addTodoAction(Todo.builder((b) { + isEditing: false, + onSave: (String task, String note) { + actions.addTodoAction( + Todo.builder((b) { return b ..task = task ..note = note; - })); - }); + }), + ); + }, + ); } @override diff --git a/built_redux/lib/containers/app_loading.dart b/built_redux/lib/containers/app_loading.dart index a9acd400..8182e210 100644 --- a/built_redux/lib/containers/app_loading.dart +++ b/built_redux/lib/containers/app_loading.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/containers/typedefs.dart'; import 'package:built_redux_sample/models/models.dart'; diff --git a/built_redux/lib/containers/edit_todo.dart b/built_redux/lib/containers/edit_todo.dart index 0e7db71b..6421b1ce 100644 --- a/built_redux/lib/containers/edit_todo.dart +++ b/built_redux/lib/containers/edit_todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; import 'package:built_redux_sample/presentation/add_edit_screen.dart'; @@ -20,11 +16,16 @@ class EditTodo extends StoreConnector { key: ArchSampleKeys.editTodoScreen, isEditing: true, onSave: (task, note) { - actions.updateTodoAction(UpdateTodoActionPayload( + actions.updateTodoAction( + UpdateTodoActionPayload( todo.id, - todo.rebuild((b) => b - ..task = task - ..note = note))); + todo.rebuild( + (b) => b + ..task = task + ..note = note, + ), + ), + ); }, todo: todo, ); diff --git a/built_redux/lib/containers/filter_selector.dart b/built_redux/lib/containers/filter_selector.dart index 20c3ddd4..48ff5283 100644 --- a/built_redux/lib/containers/filter_selector.dart +++ b/built_redux/lib/containers/filter_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library filter_selector; import 'package:built_redux_sample/actions/actions.dart'; @@ -24,19 +20,21 @@ abstract class FilterSelectorViewModel VisibilityFilter get activeFilter; - factory FilterSelectorViewModel( - [void Function(FilterSelectorViewModelBuilder b) updates]) = - _$FilterSelectorViewModel; + factory FilterSelectorViewModel([ + void Function(FilterSelectorViewModelBuilder b) updates, + ]) = _$FilterSelectorViewModel; factory FilterSelectorViewModel.from( AppActions actions, VisibilityFilter activeFilter, ) { - return FilterSelectorViewModel((b) => b - ..onFilterSelected = (filter) { - actions.updateFilterAction(filter); - } - ..activeFilter = activeFilter); + return FilterSelectorViewModel( + (b) => b + ..onFilterSelected = (filter) { + actions.updateFilterAction(filter); + } + ..activeFilter = activeFilter, + ); } } @@ -57,10 +55,7 @@ class FilterSelector ) { return builder( context, - FilterSelectorViewModel.from( - actions, - activeFilter, - ), + FilterSelectorViewModel.from(actions, activeFilter), ); } } diff --git a/built_redux/lib/containers/filtered_todos.dart b/built_redux/lib/containers/filtered_todos.dart index 94806378..4d0711c5 100644 --- a/built_redux/lib/containers/filtered_todos.dart +++ b/built_redux/lib/containers/filtered_todos.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; import 'package:built_redux_sample/presentation/todo_list.dart'; @@ -16,8 +12,12 @@ class FilteredTodos extends StoreConnector> { return TodoList( todos: state, onCheckboxChanged: (todo, complete) { - actions.updateTodoAction(UpdateTodoActionPayload( - todo.id, todo.rebuild((b) => b..complete = complete))); + actions.updateTodoAction( + UpdateTodoActionPayload( + todo.id, + todo.rebuild((b) => b..complete = complete), + ), + ); }, onRemove: (todo) { actions.deleteTodoAction(todo.id); diff --git a/built_redux/lib/containers/stats.dart b/built_redux/lib/containers/stats.dart index 3f417a1e..95d3ab86 100644 --- a/built_redux/lib/containers/stats.dart +++ b/built_redux/lib/containers/stats.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library stats; import 'package:built_redux_sample/actions/actions.dart'; @@ -28,9 +24,11 @@ class Stats extends StoreConnector { @override StatsProps connect(AppState state) { - return StatsProps((b) => b - ..numCompleted = state.numCompletedSelector - ..numActive = state.numActiveSelector); + return StatsProps( + (b) => b + ..numCompleted = state.numCompletedSelector + ..numActive = state.numActiveSelector, + ); } @override diff --git a/built_redux/lib/containers/tab_selector.dart b/built_redux/lib/containers/tab_selector.dart index 03bcb684..cd9661ee 100644 --- a/built_redux/lib/containers/tab_selector.dart +++ b/built_redux/lib/containers/tab_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; import 'package:flutter/material.dart'; @@ -33,9 +29,11 @@ class TabSelector extends StoreConnector { ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab, ), - title: Text(tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos), + title: Text( + tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, + ), ); }).toList(), ); diff --git a/built_redux/lib/containers/todo_details.dart b/built_redux/lib/containers/todo_details.dart index 2b46373a..4d57a40b 100644 --- a/built_redux/lib/containers/todo_details.dart +++ b/built_redux/lib/containers/todo_details.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; import 'package:built_redux_sample/presentation/details_screen.dart'; @@ -20,10 +16,12 @@ class TodoDetails extends StoreConnector { todo: todo, onDelete: () => actions.deleteTodoAction(todo.id), toggleCompleted: (isComplete) { - actions.updateTodoAction(UpdateTodoActionPayload( - id, - todo.rebuild((b) => b..complete = isComplete), - )); + actions.updateTodoAction( + UpdateTodoActionPayload( + id, + todo.rebuild((b) => b..complete = isComplete), + ), + ); }, ); } diff --git a/built_redux/lib/containers/typedefs.dart b/built_redux/lib/containers/typedefs.dart index 77ec69c8..e6088528 100644 --- a/built_redux/lib/containers/typedefs.dart +++ b/built_redux/lib/containers/typedefs.dart @@ -1,8 +1,4 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/src/widgets/framework.dart'; -typedef ViewModelBuilder = Widget Function( - BuildContext context, ViewModel vm); +typedef ViewModelBuilder = + Widget Function(BuildContext context, ViewModel vm); diff --git a/built_redux/lib/data/file_storage.dart b/built_redux/lib/data/file_storage.dart index cfe8f0aa..201fb859 100644 --- a/built_redux/lib/data/file_storage.dart +++ b/built_redux/lib/data/file_storage.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:convert'; import 'dart:io'; @@ -14,10 +10,7 @@ class FileStorage { final String tag; final Future Function() getDirectory; - const FileStorage( - this.tag, - this.getDirectory, - ); + const FileStorage(this.tag, this.getDirectory); /// LoadTodos Future> loadTodos() async { diff --git a/built_redux/lib/data/todos_repository.dart b/built_redux/lib/data/todos_repository.dart index a40c2877..1b618b0d 100644 --- a/built_redux/lib/data/todos_repository.dart +++ b/built_redux/lib/data/todos_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:core'; diff --git a/built_redux/lib/data/web_client.dart b/built_redux/lib/data/web_client.dart index 85eab7d0..47337ba0 100644 --- a/built_redux/lib/data/web_client.dart +++ b/built_redux/lib/data/web_client.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:built_redux_sample/models/models.dart'; @@ -19,39 +15,40 @@ class WebClient { /// Mock that "fetches" some Todos from a "web service" after a short delay Future> fetchTodos() async { return Future.delayed( - delay, - () => [ - Todo.builder( - (b) => b - ..task = 'Buy food for da kitty' - ..note = 'With the chickeny bits!' - ..id = '1', - ), - Todo.builder( - (b) => b - ..task = 'Find a Red Sea dive trip' - ..note = 'Echo vs MY Dream' - ..id = '2', - ), - Todo.builder( - (b) => b - ..task = 'Book flights to Egypt' - ..complete = true - ..id = '3', - ), - Todo.builder( - (b) => b - ..task = 'Decide on accommodation' - ..id = '4', - ), - Todo.builder( - (b) => b - ..task = 'Sip Margaritas' - ..note = 'on the beach' - ..complete = true - ..id = '5', - ), - ]); + delay, + () => [ + Todo.builder( + (b) => b + ..task = 'Buy food for da kitty' + ..note = 'With the chickeny bits!' + ..id = '1', + ), + Todo.builder( + (b) => b + ..task = 'Find a Red Sea dive trip' + ..note = 'Echo vs MY Dream' + ..id = '2', + ), + Todo.builder( + (b) => b + ..task = 'Book flights to Egypt' + ..complete = true + ..id = '3', + ), + Todo.builder( + (b) => b + ..task = 'Decide on accommodation' + ..id = '4', + ), + Todo.builder( + (b) => b + ..task = 'Sip Margaritas' + ..note = 'on the beach' + ..complete = true + ..id = '5', + ), + ], + ); } /// Mock that returns true or false for success or failure. In this case, diff --git a/built_redux/lib/localization.dart b/built_redux/lib/localization.dart index eb48df86..786230b1 100644 --- a/built_redux/lib/localization.dart +++ b/built_redux/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/built_redux/lib/main.dart b/built_redux/lib/main.dart index bbf0e2b0..010bf39d 100644 --- a/built_redux/lib/main.dart +++ b/built_redux/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library built_redux_sample; import 'package:built_redux/built_redux.dart'; @@ -25,9 +21,7 @@ class BuiltReduxApp extends StatefulWidget { reducerBuilder.build(), AppState.loading(), AppActions(), - middleware: [ - createStoreTodosMiddleware(), - ], + middleware: [createStoreTodosMiddleware()], ); @override diff --git a/built_redux/lib/middleware/store_todos_middleware.dart b/built_redux/lib/middleware/store_todos_middleware.dart index cac929ee..9889cfba 100644 --- a/built_redux/lib/middleware/store_todos_middleware.dart +++ b/built_redux/lib/middleware/store_todos_middleware.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux/built_redux.dart'; import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/data/todos_repository.dart'; @@ -13,27 +9,44 @@ Middleware createStoreTodosMiddleware([ return (MiddlewareBuilder() ..add(AppActionsNames.fetchTodosAction, createFetchTodos(repository)) ..add(AppActionsNames.addTodoAction, createSaveTodos(repository)) - ..add(AppActionsNames.clearCompletedAction, - createSaveTodos(repository)) - ..add(AppActionsNames.loadTodosSuccess, - createSaveTodos>(repository)) - ..add(AppActionsNames.deleteTodoAction, - createSaveTodos(repository)) ..add( - AppActionsNames.toggleAllAction, createSaveTodos(repository)) - ..add(AppActionsNames.updateTodoAction, - createSaveTodos(repository))) + AppActionsNames.clearCompletedAction, + createSaveTodos(repository), + ) + ..add( + AppActionsNames.loadTodosSuccess, + createSaveTodos>(repository), + ) + ..add( + AppActionsNames.deleteTodoAction, + createSaveTodos(repository), + ) + ..add( + AppActionsNames.toggleAllAction, + createSaveTodos(repository), + ) + ..add( + AppActionsNames.updateTodoAction, + createSaveTodos(repository), + )) .build(); } MiddlewareHandler createFetchTodos( - TodosRepository repository) { - return (MiddlewareApi api, - ActionHandler next, Action action) { + TodosRepository repository, +) { + return ( + MiddlewareApi api, + ActionHandler next, + Action action, + ) { if (api.state.isLoading) { - repository.loadTodos().then((todos) { - return api.actions.loadTodosSuccess(todos); - }).catchError(api.actions.loadTodosFailure); + repository + .loadTodos() + .then((todos) { + return api.actions.loadTodosSuccess(todos); + }) + .catchError(api.actions.loadTodosFailure); } next(action); @@ -41,9 +54,13 @@ MiddlewareHandler createFetchTodos( } MiddlewareHandler createSaveTodos( - TodosRepository repository) { - return (MiddlewareApi api, - ActionHandler next, Action action) { + TodosRepository repository, +) { + return ( + MiddlewareApi api, + ActionHandler next, + Action action, + ) { next(action); repository.saveTodos(api.state.todos.toList()); diff --git a/built_redux/lib/models/app_state.dart b/built_redux/lib/models/app_state.dart index 09caa3dc..38be86ba 100644 --- a/built_redux/lib/models/app_state.dart +++ b/built_redux/lib/models/app_state.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library app_state; import 'package:built_collection/built_collection.dart'; @@ -27,13 +23,14 @@ abstract class AppState implements Built { AppState._(); - factory AppState([void Function(AppStateBuilder b) updates]) => - _$AppState((b) => b - ..isLoading = false - ..todos = ListBuilder([]) - ..activeTab = AppTab.todos - ..activeFilter = VisibilityFilter.all - ..update(updates)); + factory AppState([void Function(AppStateBuilder b) updates]) => _$AppState( + (b) => b + ..isLoading = false + ..todos = ListBuilder([]) + ..activeTab = AppTab.todos + ..activeFilter = VisibilityFilter.all + ..update(updates), + ); factory AppState.loading() => AppState((b) => b..isLoading = true); @@ -59,16 +56,16 @@ abstract class AppState implements Built { @memoized List get filteredTodosSelector => todos.where((todo) { - switch (activeFilter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); + switch (activeFilter) { + case VisibilityFilter.active: + return !todo.complete; + case VisibilityFilter.completed: + return todo.complete; + case VisibilityFilter.all: + default: + return true; + } + }).toList(); Optional todoSelector(String id) { try { diff --git a/built_redux/lib/models/app_tab.dart b/built_redux/lib/models/app_tab.dart index 4d680237..20c7690a 100644 --- a/built_redux/lib/models/app_tab.dart +++ b/built_redux/lib/models/app_tab.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library app_tab; import 'package:built_collection/built_collection.dart'; diff --git a/built_redux/lib/models/extra_actions.dart b/built_redux/lib/models/extra_actions.dart index 5da0bbbd..b257ba24 100644 --- a/built_redux/lib/models/extra_actions.dart +++ b/built_redux/lib/models/extra_actions.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library extra_actions; import 'package:built_collection/built_collection.dart'; diff --git a/built_redux/lib/models/models.dart b/built_redux/lib/models/models.dart index 5541a539..a4725035 100644 --- a/built_redux/lib/models/models.dart +++ b/built_redux/lib/models/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library models; export 'app_state.dart'; diff --git a/built_redux/lib/models/serializers.dart b/built_redux/lib/models/serializers.dart index 242371fc..6462ef1f 100644 --- a/built_redux/lib/models/serializers.dart +++ b/built_redux/lib/models/serializers.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library serializers; import 'package:built_collection/built_collection.dart'; @@ -10,11 +6,5 @@ import 'package:built_value/serializer.dart'; part 'serializers.g.dart'; -@SerializersFor([ - AppTab, - ExtraAction, - VisibilityFilter, - AppState, - Todo, -]) +@SerializersFor([AppTab, ExtraAction, VisibilityFilter, AppState, Todo]) final Serializers serializers = _$serializers; diff --git a/built_redux/lib/models/todo.dart b/built_redux/lib/models/todo.dart index 750582cf..6b779648 100644 --- a/built_redux/lib/models/todo.dart +++ b/built_redux/lib/models/todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library todo; import 'package:built_value/built_value.dart'; diff --git a/built_redux/lib/models/visibility_filter.dart b/built_redux/lib/models/visibility_filter.dart index 8aa22376..04ea5508 100644 --- a/built_redux/lib/models/visibility_filter.dart +++ b/built_redux/lib/models/visibility_filter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library visibility_filter; import 'package:built_collection/built_collection.dart'; diff --git a/built_redux/lib/presentation/add_edit_screen.dart b/built_redux/lib/presentation/add_edit_screen.dart index 0f5b9b87..2a1f29f5 100644 --- a/built_redux/lib/presentation/add_edit_screen.dart +++ b/built_redux/lib/presentation/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/models/models.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -14,9 +10,12 @@ class AddEditScreen extends StatefulWidget { final Function(String task, String note) onSave; final Todo todo; - AddEditScreen( - {Key key, @required this.onSave, @required this.isEditing, this.todo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({ + Key key, + @required this.onSave, + @required this.isEditing, + this.todo, + }) : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); } @@ -36,9 +35,7 @@ class _AddEditScreenState extends State { return Scaffold( appBar: AppBar( - title: Text( - isEditing ? localizations.editTodo : localizations.addTodo, - ), + title: Text(isEditing ? localizations.editTodo : localizations.addTodo), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -66,18 +63,17 @@ class _AddEditScreenState extends State { key: ArchSampleKeys.noteField, maxLines: 10, style: textTheme.subhead, - decoration: InputDecoration( - hintText: localizations.notesHint, - ), + decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { diff --git a/built_redux/lib/presentation/details_screen.dart b/built_redux/lib/presentation/details_screen.dart index e2bc3143..d0529352 100644 --- a/built_redux/lib/presentation/details_screen.dart +++ b/built_redux/lib/presentation/details_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/containers/edit_todo.dart'; import 'package:built_redux_sample/models/models.dart'; import 'package:flutter/foundation.dart'; @@ -36,7 +32,7 @@ class DetailsScreen extends StatelessWidget { onDelete(); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -59,10 +55,7 @@ class DetailsScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -73,7 +66,7 @@ class DetailsScreen extends StatelessWidget { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), @@ -90,9 +83,7 @@ class DetailsScreen extends StatelessWidget { Navigator.of(context).push( MaterialPageRoute( builder: (context) { - return EditTodo( - todo: todo, - ); + return EditTodo(todo: todo); }, ), ); diff --git a/built_redux/lib/presentation/extra_actions_button.dart b/built_redux/lib/presentation/extra_actions_button.dart index ee08fc23..a33fb53b 100644 --- a/built_redux/lib/presentation/extra_actions_button.dart +++ b/built_redux/lib/presentation/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/models/models.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -10,11 +6,8 @@ class ExtraActionsButton extends StatelessWidget { final PopupMenuItemSelected onSelected; final bool allComplete; - ExtraActionsButton({ - this.onSelected, - this.allComplete = false, - Key key, - }) : super(key: key); + ExtraActionsButton({this.onSelected, this.allComplete = false, Key key}) + : super(key: key); @override Widget build(BuildContext context) { @@ -25,9 +18,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete), + child: Text( + allComplete + ? ArchSampleLocalizations.of(context).markAllIncomplete + : ArchSampleLocalizations.of(context).markAllComplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/built_redux/lib/presentation/filter_button.dart b/built_redux/lib/presentation/filter_button.dart index dc2b5e59..6474f4ca 100644 --- a/built_redux/lib/presentation/filter_button.dart +++ b/built_redux/lib/presentation/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/models/models.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -12,15 +8,14 @@ class FilterButton extends StatelessWidget { final bool visible; FilterButton({this.onSelected, this.activeFilter, this.visible, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { final defaultStyle = Theme.of(context).textTheme.body1; - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); return AnimatedOpacity( opacity: visible ? 1.0 : 0.0, @@ -31,37 +26,37 @@ class FilterButton extends StatelessWidget { onSelected: onSelected, itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - value: VisibilityFilter.all, - child: Text( - ArchSampleLocalizations.of(context).showAll, - key: ArchSampleKeys.allFilter, - style: activeFilter == VisibilityFilter.all - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - value: VisibilityFilter.active, - child: Text( - ArchSampleLocalizations.of(context).showActive, - key: ArchSampleKeys.activeFilter, - style: activeFilter == VisibilityFilter.active - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - value: VisibilityFilter.completed, - child: Text( - ArchSampleLocalizations.of(context).showCompleted, - key: ArchSampleKeys.completedFilter, - style: activeFilter == VisibilityFilter.completed - ? activeStyle - : defaultStyle, - ), - ), - ], + PopupMenuItem( + value: VisibilityFilter.all, + child: Text( + ArchSampleLocalizations.of(context).showAll, + key: ArchSampleKeys.allFilter, + style: activeFilter == VisibilityFilter.all + ? activeStyle + : defaultStyle, + ), + ), + PopupMenuItem( + value: VisibilityFilter.active, + child: Text( + ArchSampleLocalizations.of(context).showActive, + key: ArchSampleKeys.activeFilter, + style: activeFilter == VisibilityFilter.active + ? activeStyle + : defaultStyle, + ), + ), + PopupMenuItem( + value: VisibilityFilter.completed, + child: Text( + ArchSampleLocalizations.of(context).showCompleted, + key: ArchSampleKeys.completedFilter, + style: activeFilter == VisibilityFilter.completed + ? activeStyle + : defaultStyle, + ), + ), + ], icon: Icon(Icons.filter_list), ), ); diff --git a/built_redux/lib/presentation/home_screen.dart b/built_redux/lib/presentation/home_screen.dart index 032e1ed9..201ce4bf 100644 --- a/built_redux/lib/presentation/home_screen.dart +++ b/built_redux/lib/presentation/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/containers/action_selector.dart'; import 'package:built_redux_sample/containers/active_tab.dart'; import 'package:built_redux_sample/containers/filter_selector.dart'; @@ -34,7 +30,7 @@ class HomeScreen extends StatelessWidget { ); }, ), - ExtraActionSelector() + ExtraActionSelector(), ], ), body: activeTab == AppTab.todos ? FilteredTodos() : Stats(), diff --git a/built_redux/lib/presentation/stats_counter.dart b/built_redux/lib/presentation/stats_counter.dart index 4218058b..0371f850 100644 --- a/built_redux/lib/presentation/stats_counter.dart +++ b/built_redux/lib/presentation/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/containers/app_loading.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; @@ -12,57 +8,57 @@ class StatsCounter extends StatelessWidget { final int numActive; final int numCompleted; - StatsCounter({ - @required this.numActive, - @required this.numCompleted, - }); + StatsCounter({@required this.numActive, @required this.numCompleted}); @override Widget build(BuildContext context) { - return AppLoading(builder: (context, loading) { - return loading - ? Center( - key: ArchSampleKeys.statsLoading, - child: CircularProgressIndicator( + return AppLoading( + builder: (context, loading) { + return loading + ? Center( key: ArchSampleKeys.statsLoading, - )) - : Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + child: CircularProgressIndicator( + key: ArchSampleKeys.statsLoading, + ), + ) + : Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).completedTodos, + style: Theme.of(context).textTheme.title, + ), ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numCompleted', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + Padding( + padding: EdgeInsets.only(bottom: 24.0), + child: Text( + '$numCompleted', + key: ArchSampleKeys.statsNumCompleted, + style: Theme.of(context).textTheme.subhead, + ), ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + Padding( + padding: EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).activeTodos, + style: Theme.of(context).textTheme.title, + ), ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numActive', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + Padding( + padding: EdgeInsets.only(bottom: 24.0), + child: Text( + '$numActive', + key: ArchSampleKeys.statsNumActive, + style: Theme.of(context).textTheme.subhead, + ), ), - ) - ], - ), - ); - }); + ], + ), + ); + }, + ); } } diff --git a/built_redux/lib/presentation/todo_item.dart b/built_redux/lib/presentation/todo_item.dart index a1d9c07c..8543f38c 100644 --- a/built_redux/lib/presentation/todo_item.dart +++ b/built_redux/lib/presentation/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/models/models.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; diff --git a/built_redux/lib/presentation/todo_list.dart b/built_redux/lib/presentation/todo_list.dart index a833ef1e..90bef287 100644 --- a/built_redux/lib/presentation/todo_list.dart +++ b/built_redux/lib/presentation/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/containers/app_loading.dart'; import 'package:built_redux_sample/containers/todo_details.dart'; import 'package:built_redux_sample/models/models.dart'; @@ -25,40 +21,44 @@ class TodoList extends StatelessWidget { @override Widget build(BuildContext context) { - return AppLoading(builder: (context, loading) { - return loading - ? Center( - key: ArchSampleKeys.todosLoading, - child: CircularProgressIndicator( - key: ArchSampleKeys.statsLoading, - )) - : Container( - child: ListView.builder( - key: ArchSampleKeys.todoList, - itemCount: todos.length, - itemBuilder: (BuildContext context, int index) { - final todo = todos[index]; + return AppLoading( + builder: (context, loading) { + return loading + ? Center( + key: ArchSampleKeys.todosLoading, + child: CircularProgressIndicator( + key: ArchSampleKeys.statsLoading, + ), + ) + : Container( + child: ListView.builder( + key: ArchSampleKeys.todoList, + itemCount: todos.length, + itemBuilder: (BuildContext context, int index) { + final todo = todos[index]; - return TodoItem( - todo: todo, - onDismissed: (direction) { - _removeTodo(context, todo); - }, - onTap: () => _onTodoTap(context, todo), - onCheckboxChanged: (complete) { - onCheckboxChanged(todo, complete); - }, - ); - }, - ), - ); - }); + return TodoItem( + todo: todo, + onDismissed: (direction) { + _removeTodo(context, todo); + }, + onTap: () => _onTodoTap(context, todo), + onCheckboxChanged: (complete) { + onCheckboxChanged(todo, complete); + }, + ); + }, + ), + ); + }, + ); } void _removeTodo(BuildContext context, Todo todo) { onRemove(todo); - Scaffold.of(context).showSnackBar(SnackBar( + Scaffold.of(context).showSnackBar( + SnackBar( key: ArchSampleKeys.snackbar, duration: Duration(seconds: 2), content: Text( @@ -69,38 +69,40 @@ class TodoList extends StatelessWidget { action: SnackBarAction( label: ArchSampleLocalizations.of(context).undo, onPressed: () => onUndoRemove(todo), - ))); + ), + ), + ); } void _onTodoTap(BuildContext context, Todo todo) { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return TodoDetails( - id: todo.id, - ); - }, - ), - ).then((removedTodo) { - if (removedTodo != null) { - Scaffold.of(context).showSnackBar( - SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - onUndoRemove(todo); - }, - ), + Navigator.of(context) + .push( + MaterialPageRoute( + builder: (_) { + return TodoDetails(id: todo.id); + }, ), - ); - } - }); + ) + .then((removedTodo) { + if (removedTodo != null) { + Scaffold.of(context).showSnackBar( + SnackBar( + key: ArchSampleKeys.snackbar, + duration: Duration(seconds: 2), + content: Text( + ArchSampleLocalizations.of(context).todoDeleted(todo.task), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + action: SnackBarAction( + label: ArchSampleLocalizations.of(context).undo, + onPressed: () { + onUndoRemove(todo); + }, + ), + ), + ); + } + }); } } diff --git a/built_redux/lib/reducers/reducers.dart b/built_redux/lib/reducers/reducers.dart index e2e04662..20e78c2e 100644 --- a/built_redux/lib/reducers/reducers.dart +++ b/built_redux/lib/reducers/reducers.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux/built_redux.dart'; import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; @@ -22,12 +18,18 @@ void addTodo(AppState state, Action action, AppStateBuilder builder) { } void clearCompleted( - AppState state, Action action, AppStateBuilder builder) { + AppState state, + Action action, + AppStateBuilder builder, +) { builder.todos.where((todo) => !todo.complete); } void deleteTodo( - AppState state, Action action, AppStateBuilder builder) { + AppState state, + Action action, + AppStateBuilder builder, +) { builder.todos.where((todo) => todo.id != action.payload); } @@ -37,7 +39,10 @@ void toggleAll(AppState state, Action action, AppStateBuilder builder) { } void updateFilter( - AppState state, Action action, AppStateBuilder builder) { + AppState state, + Action action, + AppStateBuilder builder, +) { builder.activeFilter = action.payload; } @@ -46,21 +51,31 @@ void updateTab(AppState state, Action action, AppStateBuilder builder) { } void todosLoaded( - AppState state, Action> action, AppStateBuilder builder) { + AppState state, + Action> action, + AppStateBuilder builder, +) { builder ..isLoading = false ..todos.addAll(action.payload); } void todosLoadFailed( - AppState state, Action action, AppStateBuilder builder) { + AppState state, + Action action, + AppStateBuilder builder, +) { builder ..isLoading = false ..todos.clear(); } -void updateTodo(AppState state, Action action, - AppStateBuilder builder) { - builder.todos.map((todo) => - todo.id == action.payload.id ? action.payload.updatedTodo : todo); +void updateTodo( + AppState state, + Action action, + AppStateBuilder builder, +) { + builder.todos.map( + (todo) => todo.id == action.payload.id ? action.payload.updatedTodo : todo, + ); } diff --git a/built_redux/test/app_state_test.dart b/built_redux/test/app_state_test.dart index 52b9d095..d15ec93d 100644 --- a/built_redux/test/app_state_test.dart +++ b/built_redux/test/app_state_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux_sample/models/models.dart'; import 'package:test/test.dart'; @@ -58,35 +54,31 @@ void main() { ..task = 'c' ..complete = true, ); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState.fromTodos(todos) - .rebuild((b) => b.activeFilter = VisibilityFilter.active); + final todos = [todo1, todo2, todo3]; + final state = AppState.fromTodos( + todos, + ).rebuild((b) => b.activeFilter = VisibilityFilter.active); expect(state.filteredTodosSelector, [todo1, todo2]); }); - test('should return completed todos if the VisibilityFilter is completed', - () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo.builder( - (b) => b - ..task = 'c' - ..complete = true, - ); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState.fromTodos(todos) - .rebuild((b) => b.activeFilter = VisibilityFilter.completed); + test( + 'should return completed todos if the VisibilityFilter is completed', + () { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo.builder( + (b) => b + ..task = 'c' + ..complete = true, + ); + final todos = [todo1, todo2, todo3]; + final state = AppState.fromTodos( + todos, + ).rebuild((b) => b.activeFilter = VisibilityFilter.completed); - expect(state.filteredTodosSelector, [todo3]); - }); + expect(state.filteredTodosSelector, [todo3]); + }, + ); }); } diff --git a/built_redux/test/file_storage_test.dart b/built_redux/test/file_storage_test.dart index 48328e22..5f88733c 100644 --- a/built_redux/test/file_storage_test.dart +++ b/built_redux/test/file_storage_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:io'; import 'package:built_redux_sample/data/file_storage.dart'; @@ -12,10 +8,7 @@ void main() { group('FileStorage', () { final todos = [Todo('Yep')]; final directory = Directory.systemTemp.createTemp('__storage_test__'); - final storage = FileStorage( - '_test_tag_', - () => directory, - ); + final storage = FileStorage('_test_tag_', () => directory); tearDownAll(() async { final tempDirectory = await directory; diff --git a/built_redux/test/middleware_test.dart b/built_redux/test/middleware_test.dart index 687acacc..f934669e 100644 --- a/built_redux/test/middleware_test.dart +++ b/built_redux/test/middleware_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:built_redux/built_redux.dart'; @@ -20,50 +16,52 @@ class MockTodosService extends Mock implements TodosRepository {} void main() { group('TodosMiddleware', () { test( - 'should load todos when the app dispatches a fetch action and the app is loading', - () { - final service = MockTodosService(); - final middleware = createStoreTodosMiddleware(service); - final store = Store( - reducerBuilder.build(), - AppState.loading(), - AppActions(), - middleware: [middleware], - ); - final todos = [Todo('Task')]; + 'should load todos when the app dispatches a fetch action and the app is loading', + () { + final service = MockTodosService(); + final middleware = createStoreTodosMiddleware(service); + final store = Store( + reducerBuilder.build(), + AppState.loading(), + AppActions(), + middleware: [middleware], + ); + final todos = [Todo('Task')]; - // We'll use our mock throughout the tests to set certain conditions. In - // this first test, we want to mock out our file storage to return a - // list of Todos that we define here in our test! - when(service.loadTodos()).thenAnswer((_) => Future.value(todos)); + // We'll use our mock throughout the tests to set certain conditions. In + // this first test, we want to mock out our file storage to return a + // list of Todos that we define here in our test! + when(service.loadTodos()).thenAnswer((_) => Future.value(todos)); - store.actions.fetchTodosAction(); + store.actions.fetchTodosAction(); - verify(service.loadTodos()); - }); + verify(service.loadTodos()); + }, + ); test( - 'should not load todos when the app dispatches a fetch action and the app is not loading', - () { - final service = MockTodosService(); - final middleware = createStoreTodosMiddleware(service); - final store = Store( - reducerBuilder.build(), - AppState(), - AppActions(), - middleware: [middleware], - ); - final todos = [Todo('Task')]; + 'should not load todos when the app dispatches a fetch action and the app is not loading', + () { + final service = MockTodosService(); + final middleware = createStoreTodosMiddleware(service); + final store = Store( + reducerBuilder.build(), + AppState(), + AppActions(), + middleware: [middleware], + ); + final todos = [Todo('Task')]; - // We'll use our mock throughout the tests to set certain conditions. In - // this first test, we want to mock out our file storage to return a - // list of Todos that we define here in our test! - when(service.loadTodos()).thenAnswer((_) => Future.value(todos)); + // We'll use our mock throughout the tests to set certain conditions. In + // this first test, we want to mock out our file storage to return a + // list of Todos that we define here in our test! + when(service.loadTodos()).thenAnswer((_) => Future.value(todos)); - store.actions.fetchTodosAction(); + store.actions.fetchTodosAction(); - verifyNever(service.loadTodos()); - }); + verifyNever(service.loadTodos()); + }, + ); test('should save todos on all action that update the todo', () { final service = MockTodosService(); @@ -84,10 +82,9 @@ void main() { store.actions.clearCompletedAction(); store.actions.deleteTodoAction(''); store.actions.toggleAllAction(); - store.actions.updateTodoAction(UpdateTodoActionPayload( - '', - Todo('Update'), - )); + store.actions.updateTodoAction( + UpdateTodoActionPayload('', Todo('Update')), + ); verify(service.saveTodos(any)).called(5); }); diff --git a/built_redux/test/reducer_test.dart b/built_redux/test/reducer_test.dart index 668d5498..71038cd9 100644 --- a/built_redux/test/reducer_test.dart +++ b/built_redux/test/reducer_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:built_redux/built_redux.dart'; import 'package:built_redux_sample/actions/actions.dart'; import 'package:built_redux_sample/models/models.dart'; @@ -47,8 +43,9 @@ void main() { AppActions(), ); - store.actions - .updateTodoAction(UpdateTodoActionPayload(todo.id, updatedTodo)); + store.actions.updateTodoAction( + UpdateTodoActionPayload(todo.id, updatedTodo), + ); expect(store.state.todos, [updatedTodo]); }); diff --git a/built_redux/test/todos_repository_test.dart b/built_redux/test/todos_repository_test.dart index 518dca45..bf12368e 100644 --- a/built_redux/test/todos_repository_test.dart +++ b/built_redux/test/todos_repository_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:built_redux_sample/data/file_storage.dart'; @@ -20,66 +16,71 @@ class MockWebService extends Mock implements WebClient {} void main() { group('TodosRepository', () { test( - 'should load todos from File Storage if they exist without calling the web service', - () { - final fileStorage = MockFileStorage(); - final webService = MockWebService(); - final todosService = TodosRepository( - fileStorage: fileStorage, - webClient: webService, - ); - final todos = [Todo('Task')]; - - // We'll use our mock throughout the tests to set certain conditions. In - // this first test, we want to mock out our file storage to return a - // list of Todos that we define here in our test! - when(fileStorage.loadTodos()).thenAnswer((_) => Future.value(todos)); - - expect(todosService.loadTodos(), completion(todos)); - verifyNever(webService.fetchTodos()); - }); + 'should load todos from File Storage if they exist without calling the web service', + () { + final fileStorage = MockFileStorage(); + final webService = MockWebService(); + final todosService = TodosRepository( + fileStorage: fileStorage, + webClient: webService, + ); + final todos = [Todo('Task')]; + + // We'll use our mock throughout the tests to set certain conditions. In + // this first test, we want to mock out our file storage to return a + // list of Todos that we define here in our test! + when(fileStorage.loadTodos()).thenAnswer((_) => Future.value(todos)); + + expect(todosService.loadTodos(), completion(todos)); + verifyNever(webService.fetchTodos()); + }, + ); test( - 'should fetch todos from the Web Service if the file storage throws a synchronous error', - () async { - final fileStorage = MockFileStorage(); - final webService = MockWebService(); - final todosService = TodosRepository( - fileStorage: fileStorage, - webClient: webService, - ); - final todos = [Todo('Task')]; - - // In this instance, we'll ask our Mock to throw an error. When it does, - // we expect the web service to be called instead. - when(fileStorage.loadTodos()) - .thenAnswer((_) => Future>.error('Oh no')); - when(webService.fetchTodos()).thenAnswer((_) => Future.value(todos)); - - // We check that the correct todos were returned, and that the - // webService.fetchTodos method was in fact called! - expect(await todosService.loadTodos(), todos); - verify(webService.fetchTodos()); - }); + 'should fetch todos from the Web Service if the file storage throws a synchronous error', + () async { + final fileStorage = MockFileStorage(); + final webService = MockWebService(); + final todosService = TodosRepository( + fileStorage: fileStorage, + webClient: webService, + ); + final todos = [Todo('Task')]; + + // In this instance, we'll ask our Mock to throw an error. When it does, + // we expect the web service to be called instead. + when( + fileStorage.loadTodos(), + ).thenAnswer((_) => Future>.error('Oh no')); + when(webService.fetchTodos()).thenAnswer((_) => Future.value(todos)); + + // We check that the correct todos were returned, and that the + // webService.fetchTodos method was in fact called! + expect(await todosService.loadTodos(), todos); + verify(webService.fetchTodos()); + }, + ); test( - 'should fetch todos from the Web Service if the File storage returns an async error', - () async { - final fileStorage = MockFileStorage(); - final webService = MockWebService(); - final todosService = TodosRepository( - fileStorage: fileStorage, - webClient: webService, - ); - final todos = [Todo('Task')]; - - when(fileStorage.loadTodos()) - .thenAnswer((_) => Future>.error('Oh no')); - when(webService.fetchTodos()).thenAnswer((_) => Future.value(todos)); - - expect(await todosService.loadTodos(), todos); - verify(webService.fetchTodos()); - }); + 'should fetch todos from the Web Service if the File storage returns an async error', + () async { + final fileStorage = MockFileStorage(); + final webService = MockWebService(); + final todosService = TodosRepository( + fileStorage: fileStorage, + webClient: webService, + ); + final todos = [Todo('Task')]; + + when( + fileStorage.loadTodos(), + ).thenAnswer((_) => Future>.error('Oh no')); + when(webService.fetchTodos()).thenAnswer((_) => Future.value(todos)); + + expect(await todosService.loadTodos(), todos); + verify(webService.fetchTodos()); + }, + ); test('should persist the todos to local disk and the web service', () { final fileStorage = MockFileStorage(); diff --git a/built_redux/test_driver/todo_app.dart b/built_redux/test_driver/todo_app.dart index 2a446786..6b4e27cb 100644 --- a/built_redux/test_driver/todo_app.dart +++ b/built_redux/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:built_redux_sample/main.dart' as app; import 'package:flutter_driver/driver_extension.dart'; diff --git a/built_redux/test_driver/todo_app_test.dart b/built_redux/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/built_redux/test_driver/todo_app_test.dart +++ b/built_redux/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/change_notifier_provider/lib/app.dart b/change_notifier_provider/lib/app.dart index 3bfe8b61..515343e8 100644 --- a/change_notifier_provider/lib/app.dart +++ b/change_notifier_provider/lib/app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:meta/meta.dart'; import 'package:provider/provider.dart'; @@ -16,9 +12,7 @@ import 'home/home_screen.dart'; class ProviderApp extends StatelessWidget { final TodosRepository repository; - ProviderApp({ - @required this.repository, - }); + ProviderApp({@required this.repository}); @override Widget build(BuildContext context) { diff --git a/change_notifier_provider/lib/home/extra_actions_button.dart b/change_notifier_provider/lib/home/extra_actions_button.dart index 81ac1b9f..7d0a6ac3 100644 --- a/change_notifier_provider/lib/home/extra_actions_button.dart +++ b/change_notifier_provider/lib/home/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -9,9 +5,7 @@ import 'package:todos_app_core/todos_app_core.dart'; import '../todo_list_model.dart'; class ExtraActionsButton extends StatelessWidget { - const ExtraActionsButton({ - Key key, - }) : super(key: key); + const ExtraActionsButton({Key key}) : super(key: key); @override Widget build(BuildContext context) { @@ -34,9 +28,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(model.hasActiveTodos - ? ArchSampleLocalizations.of(context).markAllComplete - : ArchSampleLocalizations.of(context).markAllIncomplete), + child: Text( + model.hasActiveTodos + ? ArchSampleLocalizations.of(context).markAllComplete + : ArchSampleLocalizations.of(context).markAllIncomplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/change_notifier_provider/lib/home/filter_button.dart b/change_notifier_provider/lib/home/filter_button.dart index 229c13dd..eb8dde19 100644 --- a/change_notifier_provider/lib/home/filter_button.dart +++ b/change_notifier_provider/lib/home/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:change_notifier_provider_sample/todo_list_model.dart'; @@ -36,11 +32,12 @@ class FilterButton extends StatelessWidget { } List> _items( - BuildContext context, TodoListModel store) { - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + BuildContext context, + TodoListModel store, + ) { + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final defaultStyle = Theme.of(context).textTheme.body1; return [ @@ -49,8 +46,9 @@ class FilterButton extends StatelessWidget { value: VisibilityFilter.all, child: Text( ArchSampleLocalizations.of(context).showAll, - style: - store.filter == VisibilityFilter.all ? activeStyle : defaultStyle, + style: store.filter == VisibilityFilter.all + ? activeStyle + : defaultStyle, ), ), PopupMenuItem( diff --git a/change_notifier_provider/lib/localization.dart b/change_notifier_provider/lib/localization.dart index 9ca0b67d..eada9032 100644 --- a/change_notifier_provider/lib/localization.dart +++ b/change_notifier_provider/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -9,7 +5,9 @@ import 'package:flutter/material.dart'; class ProviderLocalizations { static ProviderLocalizations of(BuildContext context) { return Localizations.of( - context, ProviderLocalizations); + context, + ProviderLocalizations, + ); } String get appTitle => 'Provider Example'; diff --git a/change_notifier_provider/lib/main.dart b/change_notifier_provider/lib/main.dart index 4140e7de..e23e77e7 100644 --- a/change_notifier_provider/lib/main.dart +++ b/change_notifier_provider/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:change_notifier_provider_sample/app.dart'; import 'package:flutter/material.dart'; import 'package:key_value_store_flutter/key_value_store_flutter.dart'; @@ -11,12 +7,14 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(ProviderApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'change_notifier_provider_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + runApp( + ProviderApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'change_notifier_provider_todos', + FlutterKeyValueStore(await SharedPreferences.getInstance()), + ), ), ), - )); + ); } diff --git a/change_notifier_provider/lib/main_web.dart b/change_notifier_provider/lib/main_web.dart index 4adbf574..ec9f8e8b 100644 --- a/change_notifier_provider/lib/main_web.dart +++ b/change_notifier_provider/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:html'; import 'package:change_notifier_provider_sample/app.dart'; @@ -12,12 +8,14 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(ProviderApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'change_notifier_provider', - WebKeyValueStore(window.localStorage), + runApp( + ProviderApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'change_notifier_provider', + WebKeyValueStore(window.localStorage), + ), ), ), - )); + ); } diff --git a/change_notifier_provider/lib/models.dart b/change_notifier_provider/lib/models.dart index 699321cb..b4ab4a49 100644 --- a/change_notifier_provider/lib/models.dart +++ b/change_notifier_provider/lib/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -16,7 +12,7 @@ class Todo { final String task; Todo(this.task, {this.complete = false, this.note = '', String id}) - : id = id ?? Uuid().generateV4(); + : id = id ?? Uuid().generateV4(); @override int get hashCode => diff --git a/change_notifier_provider/lib/todo_list_model.dart b/change_notifier_provider/lib/todo_list_model.dart index 4a725ee8..2080f2d2 100644 --- a/change_notifier_provider/lib/todo_list_model.dart +++ b/change_notifier_provider/lib/todo_list_model.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:collection'; @@ -36,8 +32,8 @@ class TodoListModel extends ChangeNotifier { @required this.repository, VisibilityFilter filter, List todos, - }) : _todos = todos ?? [], - _filter = filter ?? VisibilityFilter.all; + }) : _todos = todos ?? [], + _filter = filter ?? VisibilityFilter.all; /// Loads remote data /// @@ -46,14 +42,17 @@ class TodoListModel extends ChangeNotifier { _isLoading = true; notifyListeners(); - return repository.loadTodos().then((loadedTodos) { - _todos.addAll(loadedTodos.map(Todo.fromEntity)); - _isLoading = false; - notifyListeners(); - }).catchError((err) { - _isLoading = false; - notifyListeners(); - }); + return repository + .loadTodos() + .then((loadedTodos) { + _todos.addAll(loadedTodos.map(Todo.fromEntity)); + _isLoading = false; + notifyListeners(); + }) + .catchError((err) { + _isLoading = false; + notifyListeners(); + }); } List get filteredTodos { diff --git a/change_notifier_provider/test/todo_list_model_test.dart b/change_notifier_provider/test/todo_list_model_test.dart index 9162ee02..2c125bd2 100644 --- a/change_notifier_provider/test/todo_list_model_test.dart +++ b/change_notifier_provider/test/todo_list_model_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:change_notifier_provider_sample/models.dart'; import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:test/test.dart'; @@ -41,33 +37,37 @@ void main() { expect(model.filteredTodos, todos); }); - test('should return active todos if the VisibilityFilter is active', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final model = TodoListModel( - filter: VisibilityFilter.active, - repository: MockRepository(), - todos: [todo1, todo2, todo3], - ); - - expect(model.filteredTodos, [todo1, todo2]); - }); - - test('should return completed todos if the VisibilityFilter is completed', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final model = TodoListModel( - filter: VisibilityFilter.completed, - repository: MockRepository(), - todos: [todo1, todo2, todo3], - ); - - expect(model.filteredTodos, [todo3]); - }); + test( + 'should return active todos if the VisibilityFilter is active', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final model = TodoListModel( + filter: VisibilityFilter.active, + repository: MockRepository(), + todos: [todo1, todo2, todo3], + ); + + expect(model.filteredTodos, [todo1, todo2]); + }, + ); + + test( + 'should return completed todos if the VisibilityFilter is completed', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final model = TodoListModel( + filter: VisibilityFilter.completed, + repository: MockRepository(), + todos: [todo1, todo2, todo3], + ); + + expect(model.filteredTodos, [todo3]); + }, + ); test('should clear the completed todos', () async { final repository = MockRepository(); diff --git a/change_notifier_provider/test_driver/todo_app.dart b/change_notifier_provider/test_driver/todo_app.dart index 6436159b..3dfed839 100644 --- a/change_notifier_provider/test_driver/todo_app.dart +++ b/change_notifier_provider/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:flutter_driver/driver_extension.dart'; import 'package:change_notifier_provider_sample/main.dart' as app; diff --git a/firebase_flutter_repository/lib/reactive_todos_repository.dart b/firebase_flutter_repository/lib/reactive_todos_repository.dart index 6936f5f0..f527661e 100644 --- a/firebase_flutter_repository/lib/reactive_todos_repository.dart +++ b/firebase_flutter_repository/lib/reactive_todos_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; @@ -21,9 +17,11 @@ class FirestoreReactiveTodosRepository implements ReactiveTodosRepository { @override Future deleteTodo(List idList) async { - await Future.wait(idList.map((id) { - return firestore.collection(path).document(id).delete(); - })); + await Future.wait( + idList.map((id) { + return firestore.collection(path).document(id).delete(); + }), + ); } @override diff --git a/firebase_flutter_repository/lib/user_repository.dart b/firebase_flutter_repository/lib/user_repository.dart index cbf0d932..eb1bc37a 100644 --- a/firebase_flutter_repository/lib/user_repository.dart +++ b/firebase_flutter_repository/lib/user_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:firebase_auth/firebase_auth.dart'; diff --git a/firebase_flutter_repository/test/firebase_flutter_repository_test.dart b/firebase_flutter_repository/test/firebase_flutter_repository_test.dart index 2023577e..e1c7f26f 100644 --- a/firebase_flutter_repository/test/firebase_flutter_repository_test.dart +++ b/firebase_flutter_repository/test/firebase_flutter_repository_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; @@ -18,8 +14,9 @@ void main() { final auth = MockFirebaseAuth(); final repository = FirebaseUserRepository(auth); - when(auth.signInAnonymously()) - .thenAnswer((_) => Future.value(MockAuthResult())); + when( + auth.signInAnonymously(), + ).thenAnswer((_) => Future.value(MockAuthResult())); final entity = await repository.login(); @@ -35,8 +32,9 @@ void main() { final repository = FirestoreReactiveTodosRepository(firestore); final todo = TodoEntity('A', '1', '', true); - when(firestore.collection(FirestoreReactiveTodosRepository.path)) - .thenReturn(collection); + when( + firestore.collection(FirestoreReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.document(todo.id)).thenReturn(document); repository.addNewTodo(todo); @@ -51,8 +49,9 @@ void main() { final repository = FirestoreReactiveTodosRepository(firestore); final todo = TodoEntity('A', '1', '', true); - when(firestore.collection(FirestoreReactiveTodosRepository.path)) - .thenReturn(collection); + when( + firestore.collection(FirestoreReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.document(todo.id)).thenReturn(document); repository.updateTodo(todo); @@ -69,8 +68,9 @@ void main() { final document = MockDocumentSnapshot(todo.toJson()); final repository = FirestoreReactiveTodosRepository(firestore); - when(firestore.collection(FirestoreReactiveTodosRepository.path)) - .thenReturn(collection); + when( + firestore.collection(FirestoreReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.snapshots()).thenAnswer((_) => snapshots); when(snapshot.documents).thenReturn([document]); when(document.documentID).thenReturn(todo.id); @@ -87,8 +87,9 @@ void main() { final documentB = MockDocumentReference(); final repository = FirestoreReactiveTodosRepository(firestore); - when(firestore.collection(FirestoreReactiveTodosRepository.path)) - .thenReturn(collection); + when( + firestore.collection(FirestoreReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.document(todoA)).thenReturn(documentA); when(collection.document(todoB)).thenReturn(documentB); when(documentA.delete()).thenAnswer((_) => Future.value()); diff --git a/firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart b/firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart index 8b779050..dd8bee7c 100644 --- a/firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart +++ b/firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:firebase_database/firebase_database.dart'; @@ -21,9 +17,11 @@ class FirebaseReactiveTodosRepository implements ReactiveTodosRepository { @override Future deleteTodo(List idList) async { - await Future.wait(idList.map((id) { - return firebase.reference().child(path).child(id).set(null); - })); + await Future.wait( + idList.map((id) { + return firebase.reference().child(path).child(id).set(null); + }), + ); } @override @@ -33,13 +31,14 @@ class FirebaseReactiveTodosRepository implements ReactiveTodosRepository { final Map value = event.snapshot.value; final todoMap = value.map((key, doc) { return MapEntry( + key, + TodoEntity( + doc['task'], key, - TodoEntity( - doc['task'], - key, - doc['note'] ?? '', - doc['complete'] ?? false, - )); + doc['note'] ?? '', + doc['complete'] ?? false, + ), + ); }); return todoMap.values.toList(); }); diff --git a/firebase_rtdb_flutter_repository/lib/user_repository.dart b/firebase_rtdb_flutter_repository/lib/user_repository.dart index caafe548..f38fdbb6 100644 --- a/firebase_rtdb_flutter_repository/lib/user_repository.dart +++ b/firebase_rtdb_flutter_repository/lib/user_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:firebase_auth/firebase_auth.dart'; diff --git a/firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart b/firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart index 66f8eae1..b4776733 100644 --- a/firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart +++ b/firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:firebase_auth/firebase_auth.dart'; @@ -18,8 +14,9 @@ void main() { final auth = MockFirebaseAuth(); final repository = FirebaseUserRepository(auth); - when(auth.signInAnonymously()) - .thenAnswer((_) => Future.value(MockFirebaseUser())); + when( + auth.signInAnonymously(), + ).thenAnswer((_) => Future.value(MockFirebaseUser())); final entity = await repository.login(); @@ -37,8 +34,9 @@ void main() { final todo = TodoEntity('A', '1', '', true); when(firebaseDatabase.reference()).thenReturn(reference); - when(reference.child(FirebaseReactiveTodosRepository.path)) - .thenReturn(collection); + when( + reference.child(FirebaseReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.child(todo.id)).thenReturn(document); repository.addNewTodo(todo); @@ -55,8 +53,9 @@ void main() { final todo = TodoEntity('A', '1', '', true); when(firebaseDatabase.reference()).thenReturn(reference); - when(reference.child(FirebaseReactiveTodosRepository.path)) - .thenReturn(collection); + when( + reference.child(FirebaseReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.child(todo.id)).thenReturn(document); repository.updateTodo(todo); @@ -78,8 +77,9 @@ void main() { final repository = FirebaseReactiveTodosRepository(firebaseDatabase); when(firebaseDatabase.reference()).thenReturn(reference); - when(reference.child(FirebaseReactiveTodosRepository.path)) - .thenReturn(collection); + when( + reference.child(FirebaseReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.onValue).thenAnswer((_) => eventIterator); when(event.snapshot).thenReturn(snapshot); when(snapshot.key).thenReturn(todo.id); // not used @@ -99,8 +99,9 @@ void main() { final repository = FirebaseReactiveTodosRepository(firebaseDatabase); when(firebaseDatabase.reference()).thenReturn(reference); - when(reference.child(FirebaseReactiveTodosRepository.path)) - .thenReturn(collection); + when( + reference.child(FirebaseReactiveTodosRepository.path), + ).thenReturn(collection); when(collection.child(todoA)).thenReturn(documentA); when(collection.child(todoB)).thenReturn(documentB); when(documentA.set(null)).thenAnswer((_) => Future.value()); diff --git a/firestore_redux/lib/actions/actions.dart b/firestore_redux/lib/actions/actions.dart index d39373b5..617c6865 100644 --- a/firestore_redux/lib/actions/actions.dart +++ b/firestore_redux/lib/actions/actions.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/models/visibility_filter.dart'; diff --git a/firestore_redux/lib/containers/active_tab.dart b/firestore_redux/lib/containers/active_tab.dart index 5baa1670..a9ef33b7 100644 --- a/firestore_redux/lib/containers/active_tab.dart +++ b/firestore_redux/lib/containers/active_tab.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; diff --git a/firestore_redux/lib/containers/add_todo.dart b/firestore_redux/lib/containers/add_todo.dart index c9734717..63d5bc79 100644 --- a/firestore_redux/lib/containers/add_todo.dart +++ b/firestore_redux/lib/containers/add_todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/presentation/add_edit_screen.dart'; @@ -18,10 +14,7 @@ class AddTodo extends StatelessWidget { return StoreConnector( converter: (Store store) { return (task, note) { - store.dispatch(AddTodoAction(Todo( - task, - note: note, - ))); + store.dispatch(AddTodoAction(Todo(task, note: note))); }; }, builder: (BuildContext context, OnSaveCallback onSave) { diff --git a/firestore_redux/lib/containers/app_loading.dart b/firestore_redux/lib/containers/app_loading.dart index 1bedc179..5303811c 100644 --- a/firestore_redux/lib/containers/app_loading.dart +++ b/firestore_redux/lib/containers/app_loading.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/selectors/selectors.dart'; import 'package:flutter/foundation.dart'; diff --git a/firestore_redux/lib/containers/edit_todo.dart b/firestore_redux/lib/containers/edit_todo.dart index 315ec633..8f69788d 100644 --- a/firestore_redux/lib/containers/edit_todo.dart +++ b/firestore_redux/lib/containers/edit_todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/presentation/add_edit_screen.dart'; @@ -20,13 +16,9 @@ class EditTodo extends StatelessWidget { return StoreConnector( converter: (Store store) { return (task, note) { - store.dispatch(UpdateTodoAction( - todo.id, - todo.copyWith( - task: task, - note: note, - ), - )); + store.dispatch( + UpdateTodoAction(todo.id, todo.copyWith(task: task, note: note)), + ); }; }, builder: (BuildContext context, OnSaveCallback onSave) { diff --git a/firestore_redux/lib/containers/extra_actions_container.dart b/firestore_redux/lib/containers/extra_actions_container.dart index 057a6132..01b05cb5 100644 --- a/firestore_redux/lib/containers/extra_actions_container.dart +++ b/firestore_redux/lib/containers/extra_actions_container.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/presentation/extra_actions_button.dart'; @@ -33,10 +29,7 @@ class _ViewModel { final Function(ExtraAction) onActionSelected; final bool allComplete; - _ViewModel({ - @required this.onActionSelected, - @required this.allComplete, - }); + _ViewModel({@required this.onActionSelected, @required this.allComplete}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/firestore_redux/lib/containers/filter_selector.dart b/firestore_redux/lib/containers/filter_selector.dart index 839842f9..87b30e45 100644 --- a/firestore_redux/lib/containers/filter_selector.dart +++ b/firestore_redux/lib/containers/filter_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/presentation/filter_button.dart'; @@ -35,10 +31,7 @@ class _ViewModel { final Function(VisibilityFilter) onFilterSelected; final VisibilityFilter activeFilter; - _ViewModel({ - @required this.onFilterSelected, - @required this.activeFilter, - }); + _ViewModel({@required this.onFilterSelected, @required this.activeFilter}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/firestore_redux/lib/containers/filtered_todos.dart b/firestore_redux/lib/containers/filtered_todos.dart index 1c72ed78..ce83c849 100644 --- a/firestore_redux/lib/containers/filtered_todos.dart +++ b/firestore_redux/lib/containers/filtered_todos.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/presentation/todo_list.dart'; @@ -53,10 +49,9 @@ class _ViewModel { ), loading: store.state.isLoading, onCheckboxChanged: (todo, complete) { - store.dispatch(UpdateTodoAction( - todo.id, - todo.copyWith(complete: !todo.complete), - )); + store.dispatch( + UpdateTodoAction(todo.id, todo.copyWith(complete: !todo.complete)), + ); }, onRemove: (todo) { store.dispatch(DeleteTodoAction(todo.id)); diff --git a/firestore_redux/lib/containers/stats.dart b/firestore_redux/lib/containers/stats.dart index 3e1f73c4..c039e7ed 100644 --- a/firestore_redux/lib/containers/stats.dart +++ b/firestore_redux/lib/containers/stats.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/presentation/stats_counter.dart'; import 'package:fire_redux_sample/selectors/selectors.dart'; diff --git a/firestore_redux/lib/containers/tab_selector.dart b/firestore_redux/lib/containers/tab_selector.dart index c6bd25a2..430b83f9 100644 --- a/firestore_redux/lib/containers/tab_selector.dart +++ b/firestore_redux/lib/containers/tab_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:flutter/cupertino.dart'; @@ -32,9 +28,11 @@ class TabSelector extends StatelessWidget { ? ArchSampleKeys.todoTab : ArchSampleKeys.statsTab, ), - title: Text(tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos), + title: Text( + tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, + ), ); }).toList(), ); @@ -47,10 +45,7 @@ class _ViewModel { final AppTab activeTab; final Function(int) onTabSelected; - _ViewModel({ - @required this.activeTab, - @required this.onTabSelected, - }); + _ViewModel({@required this.activeTab, @required this.onTabSelected}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/firestore_redux/lib/containers/todo_details.dart b/firestore_redux/lib/containers/todo_details.dart index 6f7ad5a6..eb89b80d 100644 --- a/firestore_redux/lib/containers/todo_details.dart +++ b/firestore_redux/lib/containers/todo_details.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/presentation/details_screen.dart'; @@ -52,10 +48,9 @@ class _ViewModel { todo: todo, onDelete: () => store.dispatch(DeleteTodoAction(todo.id)), toggleCompleted: (isComplete) { - store.dispatch(UpdateTodoAction( - todo.id, - todo.copyWith(complete: isComplete), - )); + store.dispatch( + UpdateTodoAction(todo.id, todo.copyWith(complete: isComplete)), + ); }, ); } diff --git a/firestore_redux/lib/localization.dart b/firestore_redux/lib/localization.dart index c2715fb6..3091a041 100644 --- a/firestore_redux/lib/localization.dart +++ b/firestore_redux/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/firestore_redux/lib/main.dart b/firestore_redux/lib/main.dart index 2482ffbe..7aa16de6 100644 --- a/firestore_redux/lib/main.dart +++ b/firestore_redux/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/containers/add_todo.dart'; @@ -32,16 +28,16 @@ class ReduxApp extends StatelessWidget { Key key, ReactiveTodosRepository todosRepository, UserRepository userRepository, - }) : store = Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware( - todosRepository ?? - FirestoreReactiveTodosRepository(Firestore.instance), - userRepository ?? FirebaseUserRepository(FirebaseAuth.instance), - ), - ), - super(key: key) { + }) : store = Store( + appReducer, + initialState: AppState.loading(), + middleware: createStoreTodosMiddleware( + todosRepository ?? + FirestoreReactiveTodosRepository(Firestore.instance), + userRepository ?? FirebaseUserRepository(FirebaseAuth.instance), + ), + ), + super(key: key) { store.dispatch(InitAppAction()); } diff --git a/firestore_redux/lib/middleware/store_todos_middleware.dart b/firestore_redux/lib/middleware/store_todos_middleware.dart index 01f95629..b2054039 100644 --- a/firestore_redux/lib/middleware/store_todos_middleware.dart +++ b/firestore_redux/lib/middleware/store_todos_middleware.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/selectors/selectors.dart'; @@ -13,9 +9,7 @@ List> createStoreTodosMiddleware( UserRepository userRepository, ) { return [ - TypedMiddleware( - _firestoreSignIn(userRepository), - ), + TypedMiddleware(_firestoreSignIn(userRepository)), TypedMiddleware( _firestoreConnect(todosRepository), ), @@ -37,13 +31,8 @@ List> createStoreTodosMiddleware( ]; } -void Function( - Store store, - InitAppAction action, - NextDispatcher next, -) _firestoreSignIn( - UserRepository repository, -) { +void Function(Store store, InitAppAction action, NextDispatcher next) +_firestoreSignIn(UserRepository repository) { return (store, action, next) { next(action); @@ -57,9 +46,8 @@ void Function( Store store, ConnectToDataSourceAction action, NextDispatcher next, -) _firestoreConnect( - ReactiveTodosRepository repository, -) { +) +_firestoreConnect(ReactiveTodosRepository repository) { return (store, action, next) { next(action); @@ -69,13 +57,8 @@ void Function( }; } -void Function( - Store store, - AddTodoAction action, - NextDispatcher next, -) _firestoreSaveNewTodo( - ReactiveTodosRepository repository, -) { +void Function(Store store, AddTodoAction action, NextDispatcher next) +_firestoreSaveNewTodo(ReactiveTodosRepository repository) { return (store, action, next) { next(action); repository.addNewTodo(action.todo.toEntity()); @@ -86,9 +69,8 @@ void Function( Store store, DeleteTodoAction action, NextDispatcher next, -) _firestoreDeleteTodo( - ReactiveTodosRepository repository, -) { +) +_firestoreDeleteTodo(ReactiveTodosRepository repository) { return (store, action, next) { next(action); repository.deleteTodo([action.id]); @@ -99,9 +81,8 @@ void Function( Store store, UpdateTodoAction action, NextDispatcher next, -) _firestoreUpdateTodo( - ReactiveTodosRepository repository, -) { +) +_firestoreUpdateTodo(ReactiveTodosRepository repository) { return (store, action, next) { next(action); repository.updateTodo(action.updatedTodo.toEntity()); @@ -112,9 +93,8 @@ void Function( Store store, ToggleAllAction action, NextDispatcher next, -) _firestoreToggleAll( - ReactiveTodosRepository repository, -) { +) +_firestoreToggleAll(ReactiveTodosRepository repository) { return (store, action, next) { next(action); var todos = todosSelector(store.state); @@ -137,16 +117,15 @@ void Function( Store store, ClearCompletedAction action, NextDispatcher next, -) _firestoreClearCompleted( - ReactiveTodosRepository repository, -) { +) +_firestoreClearCompleted(ReactiveTodosRepository repository) { return (store, action, next) { next(action); repository.deleteTodo( - completeTodosSelector(todosSelector(store.state)) - .map((todo) => todo.id) - .toList(), + completeTodosSelector( + todosSelector(store.state), + ).map((todo) => todo.id).toList(), ); }; } diff --git a/firestore_redux/lib/models/app_state.dart b/firestore_redux/lib/models/app_state.dart index b53a31dc..4b5c7490 100644 --- a/firestore_redux/lib/models/app_state.dart +++ b/firestore_redux/lib/models/app_state.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:meta/meta.dart'; diff --git a/firestore_redux/lib/models/app_tab.dart b/firestore_redux/lib/models/app_tab.dart index 096b6f56..8348dfcf 100644 --- a/firestore_redux/lib/models/app_tab.dart +++ b/firestore_redux/lib/models/app_tab.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum AppTab { todos, stats } diff --git a/firestore_redux/lib/models/extra_action.dart b/firestore_redux/lib/models/extra_action.dart index 236a7d0b..4ca0c02b 100644 --- a/firestore_redux/lib/models/extra_action.dart +++ b/firestore_redux/lib/models/extra_action.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum ExtraAction { toggleAllComplete, clearCompleted } diff --git a/firestore_redux/lib/models/models.dart b/firestore_redux/lib/models/models.dart index 6951f5b7..e2e948c9 100644 --- a/firestore_redux/lib/models/models.dart +++ b/firestore_redux/lib/models/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'app_state.dart'; export 'app_tab.dart'; export 'extra_action.dart'; diff --git a/firestore_redux/lib/models/todo.dart b/firestore_redux/lib/models/todo.dart index 25ca0bd6..84dadd81 100644 --- a/firestore_redux/lib/models/todo.dart +++ b/firestore_redux/lib/models/todo.dart @@ -2,10 +2,6 @@ import 'package:todos_app_core/todos_app_core.dart'; import 'package:meta/meta.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - @immutable class Todo { final bool complete; @@ -14,8 +10,8 @@ class Todo { final String task; Todo(this.task, {this.complete = false, String note = '', String id}) - : note = note ?? '', - id = id ?? Uuid().generateV4(); + : note = note ?? '', + id = id ?? Uuid().generateV4(); Todo copyWith({bool complete, String id, String note, String task}) { return Todo( diff --git a/firestore_redux/lib/models/visibility_filter.dart b/firestore_redux/lib/models/visibility_filter.dart index 11f11982..a47beca1 100644 --- a/firestore_redux/lib/models/visibility_filter.dart +++ b/firestore_redux/lib/models/visibility_filter.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum VisibilityFilter { all, active, completed } diff --git a/firestore_redux/lib/presentation/add_edit_screen.dart b/firestore_redux/lib/presentation/add_edit_screen.dart index fa15f4b7..5095d035 100644 --- a/firestore_redux/lib/presentation/add_edit_screen.dart +++ b/firestore_redux/lib/presentation/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -14,9 +10,12 @@ class AddEditScreen extends StatefulWidget { final OnSaveCallback onSave; final Todo todo; - AddEditScreen( - {Key key, @required this.onSave, @required this.isEditing, this.todo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({ + Key key, + @required this.onSave, + @required this.isEditing, + this.todo, + }) : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); } @@ -36,9 +35,7 @@ class _AddEditScreenState extends State { return Scaffold( appBar: AppBar( - title: Text( - isEditing ? localizations.editTodo : localizations.addTodo, - ), + title: Text(isEditing ? localizations.editTodo : localizations.addTodo), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -66,18 +63,17 @@ class _AddEditScreenState extends State { key: ArchSampleKeys.noteField, maxLines: 10, style: textTheme.subhead, - decoration: InputDecoration( - hintText: localizations.notesHint, - ), + decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { diff --git a/firestore_redux/lib/presentation/details_screen.dart b/firestore_redux/lib/presentation/details_screen.dart index af689d83..21dbb6bc 100644 --- a/firestore_redux/lib/presentation/details_screen.dart +++ b/firestore_redux/lib/presentation/details_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/containers/edit_todo.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:flutter/foundation.dart'; @@ -36,7 +32,7 @@ class DetailsScreen extends StatelessWidget { onDelete(); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -61,10 +57,7 @@ class DetailsScreen extends StatelessWidget { tag: '${todo.id}__heroTag', child: Container( width: MediaQuery.of(context).size.width, - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -93,9 +86,7 @@ class DetailsScreen extends StatelessWidget { Navigator.of(context).push( MaterialPageRoute( builder: (context) { - return EditTodo( - todo: todo, - ); + return EditTodo(todo: todo); }, ), ); diff --git a/firestore_redux/lib/presentation/extra_actions_button.dart b/firestore_redux/lib/presentation/extra_actions_button.dart index 0a629ee9..10c28e8d 100644 --- a/firestore_redux/lib/presentation/extra_actions_button.dart +++ b/firestore_redux/lib/presentation/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -10,11 +6,8 @@ class ExtraActionsButton extends StatelessWidget { final PopupMenuItemSelected onSelected; final bool allComplete; - ExtraActionsButton({ - this.onSelected, - this.allComplete = false, - Key key, - }) : super(key: ArchSampleKeys.extraActionsButton); + ExtraActionsButton({this.onSelected, this.allComplete = false, Key key}) + : super(key: ArchSampleKeys.extraActionsButton); @override Widget build(BuildContext context) { @@ -24,9 +17,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete), + child: Text( + allComplete + ? ArchSampleLocalizations.of(context).markAllIncomplete + : ArchSampleLocalizations.of(context).markAllComplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/firestore_redux/lib/presentation/filter_button.dart b/firestore_redux/lib/presentation/filter_button.dart index bee83068..75b53b3c 100644 --- a/firestore_redux/lib/presentation/filter_button.dart +++ b/firestore_redux/lib/presentation/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -12,15 +8,14 @@ class FilterButton extends StatelessWidget { final bool visible; FilterButton({this.onSelected, this.activeFilter, this.visible, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { final defaultStyle = Theme.of(context).textTheme.body1; - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final button = _Button( onSelected: onSelected, activeFilter: activeFilter, diff --git a/firestore_redux/lib/presentation/home_screen.dart b/firestore_redux/lib/presentation/home_screen.dart index 80f9a777..8b06f2c0 100644 --- a/firestore_redux/lib/presentation/home_screen.dart +++ b/firestore_redux/lib/presentation/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/containers/active_tab.dart'; import 'package:fire_redux_sample/containers/extra_actions_container.dart'; import 'package:fire_redux_sample/containers/filter_selector.dart'; diff --git a/firestore_redux/lib/presentation/loading_indicator.dart b/firestore_redux/lib/presentation/loading_indicator.dart index 822a4c32..e9884bb8 100644 --- a/firestore_redux/lib/presentation/loading_indicator.dart +++ b/firestore_redux/lib/presentation/loading_indicator.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; class LoadingIndicator extends StatelessWidget { @@ -9,8 +5,6 @@ class LoadingIndicator extends StatelessWidget { @override Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); + return Center(child: CircularProgressIndicator()); } } diff --git a/firestore_redux/lib/presentation/stats_counter.dart b/firestore_redux/lib/presentation/stats_counter.dart index 95346166..3fbb23f2 100644 --- a/firestore_redux/lib/presentation/stats_counter.dart +++ b/firestore_redux/lib/presentation/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/containers/app_loading.dart'; import 'package:fire_redux_sample/presentation/loading_indicator.dart'; import 'package:flutter/cupertino.dart'; @@ -13,18 +9,17 @@ class StatsCounter extends StatelessWidget { final int numActive; final int numCompleted; - StatsCounter({ - @required this.numActive, - @required this.numCompleted, - }); + StatsCounter({@required this.numActive, @required this.numCompleted}); @override Widget build(BuildContext context) { - return AppLoading(builder: (context, loading) { - return loading - ? LoadingIndicator(key: Key('__statsLoading__')) - : _buildStats(context); - }); + return AppLoading( + builder: (context, loading) { + return loading + ? LoadingIndicator(key: Key('__statsLoading__')) + : _buildStats(context); + }, + ); } Widget _buildStats(BuildContext context) { @@ -61,7 +56,7 @@ class StatsCounter extends StatelessWidget { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.subhead, ), - ) + ), ], ), ); diff --git a/firestore_redux/lib/presentation/todo_item.dart b/firestore_redux/lib/presentation/todo_item.dart index c46b271b..9e8b058f 100644 --- a/firestore_redux/lib/presentation/todo_item.dart +++ b/firestore_redux/lib/presentation/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; diff --git a/firestore_redux/lib/presentation/todo_list.dart b/firestore_redux/lib/presentation/todo_list.dart index 9d9990a7..7a81bf27 100644 --- a/firestore_redux/lib/presentation/todo_list.dart +++ b/firestore_redux/lib/presentation/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/containers/app_loading.dart'; import 'package:fire_redux_sample/containers/todo_details.dart'; import 'package:fire_redux_sample/models/models.dart'; @@ -27,11 +23,13 @@ class TodoList extends StatelessWidget { @override Widget build(BuildContext context) { - return AppLoading(builder: (context, loading) { - return loading - ? LoadingIndicator(key: ArchSampleKeys.todosLoading) - : _buildListView(); - }); + return AppLoading( + builder: (context, loading) { + return loading + ? LoadingIndicator(key: ArchSampleKeys.todosLoading) + : _buildListView(); + }, + ); } ListView _buildListView() { @@ -58,7 +56,8 @@ class TodoList extends StatelessWidget { void _removeTodo(BuildContext context, Todo todo) { onRemove(todo); - Scaffold.of(context).showSnackBar(SnackBar( + Scaffold.of(context).showSnackBar( + SnackBar( duration: Duration(seconds: 2), content: Text( ArchSampleLocalizations.of(context).todoDeleted(todo.task), @@ -68,31 +67,34 @@ class TodoList extends StatelessWidget { action: SnackBarAction( label: ArchSampleLocalizations.of(context).undo, onPressed: () => onUndoRemove(todo), - ))); + ), + ), + ); } void _onTodoTap(BuildContext context, Todo todo) { Navigator.of(context) - .push(MaterialPageRoute( - builder: (_) => TodoDetails(id: todo.id), - )) + .push(MaterialPageRoute(builder: (_) => TodoDetails(id: todo.id))) .then((removedTodo) { - if (removedTodo != null) { - Scaffold.of(context).showSnackBar(SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - onUndoRemove(todo); - }, - ))); - } - }); + if (removedTodo != null) { + Scaffold.of(context).showSnackBar( + SnackBar( + key: ArchSampleKeys.snackbar, + duration: Duration(seconds: 2), + content: Text( + ArchSampleLocalizations.of(context).todoDeleted(todo.task), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + action: SnackBarAction( + label: ArchSampleLocalizations.of(context).undo, + onPressed: () { + onUndoRemove(todo); + }, + ), + ), + ); + } + }); } } diff --git a/firestore_redux/lib/presentation/typedefs.dart b/firestore_redux/lib/presentation/typedefs.dart index 1ac56175..04a5529e 100644 --- a/firestore_redux/lib/presentation/typedefs.dart +++ b/firestore_redux/lib/presentation/typedefs.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; typedef TodoAdder = void Function(Todo todo); diff --git a/firestore_redux/lib/reducers/app_state_reducer.dart b/firestore_redux/lib/reducers/app_state_reducer.dart index 883a49c9..9c94f4c2 100644 --- a/firestore_redux/lib/reducers/app_state_reducer.dart +++ b/firestore_redux/lib/reducers/app_state_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/reducers/loading_reducer.dart'; import 'package:fire_redux_sample/reducers/tabs_reducer.dart'; diff --git a/firestore_redux/lib/reducers/loading_reducer.dart b/firestore_redux/lib/reducers/loading_reducer.dart index b97aa3a4..ef6b7295 100644 --- a/firestore_redux/lib/reducers/loading_reducer.dart +++ b/firestore_redux/lib/reducers/loading_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:redux/redux.dart'; diff --git a/firestore_redux/lib/reducers/tabs_reducer.dart b/firestore_redux/lib/reducers/tabs_reducer.dart index b6c2cb22..7b572f5f 100644 --- a/firestore_redux/lib/reducers/tabs_reducer.dart +++ b/firestore_redux/lib/reducers/tabs_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:redux/redux.dart'; diff --git a/firestore_redux/lib/reducers/todos_reducer.dart b/firestore_redux/lib/reducers/todos_reducer.dart index 8994afa0..df0b06d0 100644 --- a/firestore_redux/lib/reducers/todos_reducer.dart +++ b/firestore_redux/lib/reducers/todos_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:redux/redux.dart'; diff --git a/firestore_redux/lib/reducers/visibility_reducer.dart b/firestore_redux/lib/reducers/visibility_reducer.dart index 2df66d19..fececea2 100644 --- a/firestore_redux/lib/reducers/visibility_reducer.dart +++ b/firestore_redux/lib/reducers/visibility_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:redux/redux.dart'; @@ -11,6 +7,8 @@ final visibilityReducer = combineReducers([ ]); VisibilityFilter _activeFilterReducer( - VisibilityFilter activeFilter, UpdateFilterAction action) { + VisibilityFilter activeFilter, + UpdateFilterAction action, +) { return action.newFilter; } diff --git a/firestore_redux/lib/selectors/selectors.dart b/firestore_redux/lib/selectors/selectors.dart index 989172e0..f7e782ff 100644 --- a/firestore_redux/lib/selectors/selectors.dart +++ b/firestore_redux/lib/selectors/selectors.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/firestore_redux/test/middleware_test.dart b/firestore_redux/test/middleware_test.dart index f2d37ed8..b2ee01fc 100644 --- a/firestore_redux/test/middleware_test.dart +++ b/firestore_redux/test/middleware_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:fire_redux_sample/actions/actions.dart'; @@ -35,18 +31,18 @@ void main() { ); when(userRepository.login()).thenAnswer((_) => SynchronousFuture(null)); - when(todosRepository.todos()) - .thenAnswer((_) => StreamController>().stream); + when( + todosRepository.todos(), + ).thenAnswer((_) => StreamController>().stream); store.dispatch(InitAppAction()); verify(userRepository.login()); verify(todosRepository.todos()); - verify(captor.call( - any, - TypeMatcher(), - any, - ) as dynamic); + verify( + captor.call(any, TypeMatcher(), any) + as dynamic, + ); }); test('should convert entities to todos', () async { @@ -68,11 +64,7 @@ void main() { store.dispatch(ConnectToDataSourceAction()); controller.add([todo.toEntity()]); - verify(captor.call( - any, - TypeMatcher(), - any, - ) as dynamic); + verify(captor.call(any, TypeMatcher(), any) as dynamic); }); test('should send todos to the repository', () { @@ -97,11 +89,7 @@ void main() { final userRepository = MockUserRepository(); final store = Store( appReducer, - initialState: AppState(todos: [ - todoA, - todoB, - todoC, - ]), + initialState: AppState(todos: [todoA, todoB, todoC]), middleware: createStoreTodosMiddleware(todosRepository, userRepository), ); @@ -117,19 +105,18 @@ void main() { final userRepository = MockUserRepository(); final store = Store( appReducer, - initialState: AppState(todos: [ - todoA, - todoB, - ]), + initialState: AppState(todos: [todoA, todoB]), middleware: createStoreTodosMiddleware(todosRepository, userRepository), ); store.dispatch(ToggleAllAction()); - verify(todosRepository - .updateTodo(todoA.copyWith(complete: false).toEntity())); - verify(todosRepository - .updateTodo(todoB.copyWith(complete: false).toEntity())); + verify( + todosRepository.updateTodo(todoA.copyWith(complete: false).toEntity()), + ); + verify( + todosRepository.updateTodo(todoB.copyWith(complete: false).toEntity()), + ); }); test('should inform the repository to toggle all todos complete', () { @@ -139,17 +126,15 @@ void main() { final userRepository = MockUserRepository(); final store = Store( appReducer, - initialState: AppState(todos: [ - todoA, - todoB, - ]), + initialState: AppState(todos: [todoA, todoB]), middleware: createStoreTodosMiddleware(todosRepository, userRepository), ); store.dispatch(ToggleAllAction()); - verify(todosRepository - .updateTodo(todoA.copyWith(complete: true).toEntity())); + verify( + todosRepository.updateTodo(todoA.copyWith(complete: true).toEntity()), + ); }); test('should update a todo on firestore', () { diff --git a/firestore_redux/test/reducer_test.dart b/firestore_redux/test/reducer_test.dart index 2fee7a79..8d71f762 100644 --- a/firestore_redux/test/reducer_test.dart +++ b/firestore_redux/test/reducer_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/actions/actions.dart'; import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/reducers/app_state_reducer.dart'; @@ -15,11 +11,7 @@ void main() { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; final store = Store( appReducer, initialState: AppState.loading(), diff --git a/firestore_redux/test/selectors_test.dart b/firestore_redux/test/selectors_test.dart index 46011cfb..4c79541b 100644 --- a/firestore_redux/test/selectors_test.dart +++ b/firestore_redux/test/selectors_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/models/models.dart'; import 'package:fire_redux_sample/selectors/selectors.dart'; import 'package:quiver/core.dart'; @@ -12,52 +8,32 @@ void main() { test('should list the active todos', () { final todoA = Todo('a'); final todoB = Todo('b'); - final todos = [ - todoA, - todoB, - Todo('c', complete: true), - ]; + final todos = [todoA, todoB, Todo('c', complete: true)]; expect(activeTodosSelector(todos), [todoA, todoB]); }); test('should calculate the number of active todos', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; expect(numActiveSelector(todos), 2); }); test('should list the completed todos', () { final todo = Todo('c', complete: true); - final todos = [ - Todo('a'), - Todo('b'), - todo, - ]; + final todos = [Todo('a'), Todo('b'), todo]; expect(completeTodosSelector(todos), [todo]); }); test('should calculate the number of completed todos', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; expect(numCompletedSelector(todos), 1); }); test('should return all todos if the VisibilityFilter is all', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; expect(filteredTodosSelector(todos, VisibilityFilter.all), todos); }); @@ -66,11 +42,7 @@ void main() { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; expect(filteredTodosSelector(todos, VisibilityFilter.active), [ todo1, @@ -78,29 +50,25 @@ void main() { ]); }); - test('should return completed todos if the VisibilityFilter is completed', - () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + test( + 'should return completed todos if the VisibilityFilter is completed', + () { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; - expect(filteredTodosSelector(todos, VisibilityFilter.completed), [todo3]); - }); + expect(filteredTodosSelector(todos, VisibilityFilter.completed), [ + todo3, + ]); + }, + ); test('should return an Optional todo based on id', () { final todo1 = Todo('a', id: '1'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; expect(todoSelector(todos, '1'), Optional.of(todo1)); }); @@ -109,11 +77,7 @@ void main() { final todo1 = Todo('a', id: '1'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; expect(todoSelector(todos, '2'), Optional.absent()); }); diff --git a/firestore_redux/test_driver/mock_reactive_repository.dart b/firestore_redux/test_driver/mock_reactive_repository.dart index 60901d6a..92b61c8c 100644 --- a/firestore_redux/test_driver/mock_reactive_repository.dart +++ b/firestore_redux/test_driver/mock_reactive_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -9,9 +5,7 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da class MockUserRepository implements UserRepository { @override - Future login([ - delayAuth = const Duration(milliseconds: 200), - ]) { + Future login([delayAuth = const Duration(milliseconds: 200)]) { return Future.delayed(delayAuth); } } diff --git a/firestore_redux/test_driver/todo_app.dart b/firestore_redux/test_driver/todo_app.dart index 03d803ab..11ba816e 100644 --- a/firestore_redux/test_driver/todo_app.dart +++ b/firestore_redux/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:fire_redux_sample/main.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_driver/driver_extension.dart'; @@ -11,8 +7,10 @@ import 'mock_reactive_repository.dart'; void main() { enableFlutterDriverExtension(); - runApp(ReduxApp( - todosRepository: MockReactiveTodosRepository(), - userRepository: MockUserRepository(), - )); + runApp( + ReduxApp( + todosRepository: MockReactiveTodosRepository(), + userRepository: MockUserRepository(), + ), + ); } diff --git a/firestore_redux/test_driver/todo_app_test.dart b/firestore_redux/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/firestore_redux/test_driver/todo_app_test.dart +++ b/firestore_redux/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/freezed_provider_value_notifier/lib/app.dart b/freezed_provider_value_notifier/lib/app.dart index 3b4bb063..91469b73 100644 --- a/freezed_provider_value_notifier/lib/app.dart +++ b/freezed_provider_value_notifier/lib/app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:freezed_provider_value_notifier/value_notifier_provider.dart'; import 'package:meta/meta.dart'; @@ -16,9 +12,7 @@ import 'home/home_screen.dart'; class ProviderApp extends StatelessWidget { final TodosRepository repository; - ProviderApp({ - @required this.repository, - }); + ProviderApp({@required this.repository}); @override Widget build(BuildContext context) { diff --git a/freezed_provider_value_notifier/lib/home/extra_actions_button.dart b/freezed_provider_value_notifier/lib/home/extra_actions_button.dart index 5975c7f0..df7ab9cf 100644 --- a/freezed_provider_value_notifier/lib/home/extra_actions_button.dart +++ b/freezed_provider_value_notifier/lib/home/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -9,9 +5,7 @@ import 'package:todos_app_core/todos_app_core.dart'; import '../todo_list_model.dart'; class ExtraActionsButton extends StatelessWidget { - const ExtraActionsButton({ - Key key, - }) : super(key: key); + const ExtraActionsButton({Key key}) : super(key: key); @override Widget build(BuildContext context) { @@ -34,9 +28,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(model.hasActiveTodos - ? ArchSampleLocalizations.of(context).markAllComplete - : ArchSampleLocalizations.of(context).markAllIncomplete), + child: Text( + model.hasActiveTodos + ? ArchSampleLocalizations.of(context).markAllComplete + : ArchSampleLocalizations.of(context).markAllIncomplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/freezed_provider_value_notifier/lib/home/filter_button.dart b/freezed_provider_value_notifier/lib/home/filter_button.dart index 701f4382..0e221733 100644 --- a/freezed_provider_value_notifier/lib/home/filter_button.dart +++ b/freezed_provider_value_notifier/lib/home/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; @@ -37,11 +33,12 @@ class FilterButton extends StatelessWidget { } List> _items( - BuildContext context, TodoList store) { - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + BuildContext context, + TodoList store, + ) { + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final defaultStyle = Theme.of(context).textTheme.body1; return [ PopupMenuItem( @@ -49,8 +46,9 @@ class FilterButton extends StatelessWidget { value: VisibilityFilter.all, child: Text( ArchSampleLocalizations.of(context).showAll, - style: - store.filter == VisibilityFilter.all ? activeStyle : defaultStyle, + style: store.filter == VisibilityFilter.all + ? activeStyle + : defaultStyle, ), ), PopupMenuItem( diff --git a/freezed_provider_value_notifier/lib/localization.dart b/freezed_provider_value_notifier/lib/localization.dart index 9ca0b67d..eada9032 100644 --- a/freezed_provider_value_notifier/lib/localization.dart +++ b/freezed_provider_value_notifier/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -9,7 +5,9 @@ import 'package:flutter/material.dart'; class ProviderLocalizations { static ProviderLocalizations of(BuildContext context) { return Localizations.of( - context, ProviderLocalizations); + context, + ProviderLocalizations, + ); } String get appTitle => 'Provider Example'; diff --git a/freezed_provider_value_notifier/lib/main.dart b/freezed_provider_value_notifier/lib/main.dart index 503a7da5..357400bb 100644 --- a/freezed_provider_value_notifier/lib/main.dart +++ b/freezed_provider_value_notifier/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:freezed_provider_value_notifier/app.dart'; import 'package:flutter/material.dart'; import 'package:key_value_store_flutter/key_value_store_flutter.dart'; @@ -11,12 +7,14 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(ProviderApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'change_notifier_provider_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + runApp( + ProviderApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'change_notifier_provider_todos', + FlutterKeyValueStore(await SharedPreferences.getInstance()), + ), ), ), - )); + ); } diff --git a/freezed_provider_value_notifier/lib/main_web.dart b/freezed_provider_value_notifier/lib/main_web.dart index cd6490a2..4119f879 100644 --- a/freezed_provider_value_notifier/lib/main_web.dart +++ b/freezed_provider_value_notifier/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:html'; import 'package:freezed_provider_value_notifier/app.dart'; @@ -12,12 +8,14 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(ProviderApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'change_notifier_provider', - WebKeyValueStore(window.localStorage), + runApp( + ProviderApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'change_notifier_provider', + WebKeyValueStore(window.localStorage), + ), ), ), - )); + ); } diff --git a/freezed_provider_value_notifier/lib/models.dart b/freezed_provider_value_notifier/lib/models.dart index e6b5b627..5bdc7fe3 100644 --- a/freezed_provider_value_notifier/lib/models.dart +++ b/freezed_provider_value_notifier/lib/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -12,7 +8,7 @@ class Todo { final String task; Todo(this.task, {this.complete = false, this.note = '', String id}) - : id = id ?? Uuid().generateV4(); + : id = id ?? Uuid().generateV4(); @override int get hashCode => diff --git a/freezed_provider_value_notifier/lib/todo_list_model.dart b/freezed_provider_value_notifier/lib/todo_list_model.dart index 8f3da9dc..bdd87361 100644 --- a/freezed_provider_value_notifier/lib/todo_list_model.dart +++ b/freezed_provider_value_notifier/lib/todo_list_model.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/widgets.dart'; import 'package:flutter/foundation.dart'; import 'package:collection/collection.dart'; @@ -37,16 +33,16 @@ abstract class TodoList with _$TodoList { @late List get filteredTodos => todos.where((todo) { - switch (filter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); + switch (filter) { + case VisibilityFilter.active: + return !todo.complete; + case VisibilityFilter.completed: + return todo.complete; + case VisibilityFilter.all: + default: + return true; + } + }).toList(); } extension TodoById on TodoList { @@ -59,8 +55,8 @@ class TodoListController extends ValueNotifier { VisibilityFilter filter = VisibilityFilter.all, @required this.todosRepository, List todos = const [], - }) : assert(todosRepository != null), - super(TodoList(todos, filter: filter, loading: false)) { + }) : assert(todosRepository != null), + super(TodoList(todos, filter: filter, loading: false)) { _loadTodos(); } @@ -74,8 +70,9 @@ class TodoListController extends ValueNotifier { @protected set value(TodoList state) { if (!const DeepCollectionEquality().equals(state.todos, value.todos)) { - todosRepository - .saveTodos(state.todos.map((it) => it.toEntity()).toList()); + todosRepository.saveTodos( + state.todos.map((it) => it.toEntity()).toList(), + ); } super.value = state; } @@ -86,7 +83,9 @@ class TodoListController extends ValueNotifier { try { final todos = await todosRepository.loadTodos(); value = (value.copyWith( - todos: todos.map(Todo.fromEntity).toList(), loading: false)); + todos: todos.map(Todo.fromEntity).toList(), + loading: false, + )); } catch (_) { value = (value.copyWith(loading: false)); } @@ -97,23 +96,30 @@ class TodoListController extends ValueNotifier { } void updateTodo(Todo updatedTodo) { - value = value.copyWith(todos: [ - for (final todo in value.todos) - if (todo.id == updatedTodo.id) updatedTodo else todo, - ]); + value = value.copyWith( + todos: [ + for (final todo in value.todos) + if (todo.id == updatedTodo.id) updatedTodo else todo, + ], + ); } void removeTodoWithId(String id) { - value = value.copyWith(todos: [ - for (final todo in value.todos) if (todo.id != id) todo, - ]); + value = value.copyWith( + todos: [ + for (final todo in value.todos) + if (todo.id != id) todo, + ], + ); } void toggleAll() { final allComplete = value.todos.every((todo) => todo.complete); - value = value.copyWith(todos: [ - for (final todo in value.todos) todo.copy(complete: !allComplete), - ]); + value = value.copyWith( + todos: [ + for (final todo in value.todos) todo.copy(complete: !allComplete), + ], + ); } void clearCompleted() { diff --git a/freezed_provider_value_notifier/test/app_state_test.dart b/freezed_provider_value_notifier/test/app_state_test.dart index ef8089b4..6a79466c 100644 --- a/freezed_provider_value_notifier/test/app_state_test.dart +++ b/freezed_provider_value_notifier/test/app_state_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:freezed_provider_value_notifier/models.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; import 'package:test/test.dart'; @@ -42,33 +38,37 @@ void main() { expect(model.filteredTodos, todos); }); - test('should return active todos if the VisibilityFilter is active', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final model = TodoList( - [todo1, todo2, todo3], - loading: false, - filter: VisibilityFilter.active, - ); - - expect(model.filteredTodos, [todo1, todo2]); - }); - - test('should return completed todos if the VisibilityFilter is completed', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final model = TodoList( - [todo1, todo2, todo3], - filter: VisibilityFilter.completed, - loading: false, - ); - - expect(model.filteredTodos, [todo3]); - }); + test( + 'should return active todos if the VisibilityFilter is active', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final model = TodoList( + [todo1, todo2, todo3], + loading: false, + filter: VisibilityFilter.active, + ); + + expect(model.filteredTodos, [todo1, todo2]); + }, + ); + + test( + 'should return completed todos if the VisibilityFilter is completed', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final model = TodoList( + [todo1, todo2, todo3], + filter: VisibilityFilter.completed, + loading: false, + ); + + expect(model.filteredTodos, [todo3]); + }, + ); }); group('TodoListController', () { test('should load todos from the repository', () async { @@ -83,7 +83,6 @@ void main() { expect(model.value.todos, todos); expect(model.value.loading, isFalse); - }); test('should clear the completed todos', () async { final repository = MockRepository(); @@ -97,10 +96,7 @@ void main() { model.clearCompleted(); - expect( - model.value.todos, - [todo1, todo2], - ); + expect(model.value.todos, [todo1, todo2]); expect(repository.saveCount, 1); }); @@ -129,10 +125,7 @@ void main() { model.addTodo(todo); - expect( - model.value.todos, - [todo], - ); + expect(model.value.todos, [todo]); expect(repository.saveCount, 1); }); @@ -140,15 +133,14 @@ void main() { test('should remove a todo', () async { final repository = MockRepository(); final todo = Todo('A'); - final model = - TodoListController(todosRepository: repository, todos: [todo]); + final model = TodoListController( + todosRepository: repository, + todos: [todo], + ); model.removeTodoWithId(todo.id); - expect( - model.value.todos, - [], - ); + expect(model.value.todos, []); expect(repository.saveCount, 1); }); @@ -165,10 +157,7 @@ void main() { model.updateTodo(update); - expect( - model.value.todos, - [todo1, update, todo3], - ); + expect(model.value.todos, [todo1, update, todo3]); expect(repository.saveCount, 1); }); }); diff --git a/freezed_provider_value_notifier/test_driver/todo_app.dart b/freezed_provider_value_notifier/test_driver/todo_app.dart index f8b2ddb8..a18fa2e7 100644 --- a/freezed_provider_value_notifier/test_driver/todo_app.dart +++ b/freezed_provider_value_notifier/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:flutter_driver/driver_extension.dart'; import 'package:freezed_provider_value_notifier/main.dart' as app; diff --git a/inherited_widget/lib/app.dart b/inherited_widget/lib/app.dart index 6d7eb57b..8dc42610 100644 --- a/inherited_widget/lib/app.dart +++ b/inherited_widget/lib/app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:inherited_widget_sample/localization.dart'; import 'package:inherited_widget_sample/screens/add_edit_screen.dart'; diff --git a/inherited_widget/lib/localization.dart b/inherited_widget/lib/localization.dart index e28c3f10..8ede9bfd 100644 --- a/inherited_widget/lib/localization.dart +++ b/inherited_widget/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -9,7 +5,9 @@ import 'package:flutter/material.dart'; class InheritedWidgetLocalizations { static InheritedWidgetLocalizations of(BuildContext context) { return Localizations.of( - context, InheritedWidgetLocalizations); + context, + InheritedWidgetLocalizations, + ); } String get appTitle => 'InheritedWidget Example'; diff --git a/inherited_widget/lib/main.dart b/inherited_widget/lib/main.dart index 4b63c922..eb30a44a 100644 --- a/inherited_widget/lib/main.dart +++ b/inherited_widget/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:inherited_widget_sample/app.dart'; import 'package:inherited_widget_sample/state_container.dart'; @@ -12,13 +8,15 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(StateContainer( - child: const InheritedWidgetApp(), - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'inherited_widget_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + runApp( + StateContainer( + child: const InheritedWidgetApp(), + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'inherited_widget_todos', + FlutterKeyValueStore(await SharedPreferences.getInstance()), + ), ), ), - )); + ); } diff --git a/inherited_widget/lib/main_web.dart b/inherited_widget/lib/main_web.dart index edd3eab8..f40b6012 100644 --- a/inherited_widget/lib/main_web.dart +++ b/inherited_widget/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:html'; import 'package:flutter/material.dart'; @@ -13,13 +9,15 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(StateContainer( - child: const InheritedWidgetApp(), - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'inherited_widget_todos', - WebKeyValueStore(window.localStorage), + runApp( + StateContainer( + child: const InheritedWidgetApp(), + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'inherited_widget_todos', + WebKeyValueStore(window.localStorage), + ), ), ), - )); + ); } diff --git a/inherited_widget/lib/models.dart b/inherited_widget/lib/models.dart index 3fedbd05..e182d885 100644 --- a/inherited_widget/lib/models.dart +++ b/inherited_widget/lib/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -21,16 +17,16 @@ class AppState { bool get allComplete => todos.every((todo) => todo.complete); List get filteredTodos => todos.where((todo) { - switch (activeFilter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); + switch (activeFilter) { + case VisibilityFilter.active: + return !todo.complete; + case VisibilityFilter.completed: + return todo.complete; + case VisibilityFilter.all: + default: + return true; + } + }).toList(); bool get hasCompletedTodos => todos.any((todo) => todo.complete); @@ -78,7 +74,7 @@ class Todo { String task; Todo(this.task, {this.complete = false, this.note = '', String id}) - : id = id ?? Uuid().generateV4(); + : id = id ?? Uuid().generateV4(); @override int get hashCode => diff --git a/inherited_widget/lib/screens/add_edit_screen.dart b/inherited_widget/lib/screens/add_edit_screen.dart index 2fe51e63..af02c767 100644 --- a/inherited_widget/lib/screens/add_edit_screen.dart +++ b/inherited_widget/lib/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -12,10 +8,8 @@ import 'package:inherited_widget_sample/state_container.dart'; class AddEditScreen extends StatefulWidget { final Todo todo; - AddEditScreen({ - Key key, - this.todo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({Key key, this.todo}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); } @@ -34,9 +28,7 @@ class _AddEditScreenState extends State { return Scaffold( appBar: AppBar( - title: Text( - isEditing ? localizations.editTodo : localizations.addTodo, - ), + title: Text(isEditing ? localizations.editTodo : localizations.addTodo), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -68,18 +60,17 @@ class _AddEditScreenState extends State { key: ArchSampleKeys.noteField, maxLines: 10, style: textTheme.subhead, - decoration: InputDecoration( - hintText: localizations.notesHint, - ), + decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { @@ -89,10 +80,7 @@ class _AddEditScreenState extends State { if (isEditing) { container.updateTodo(widget.todo, task: _task, note: _note); } else { - container.addTodo(Todo( - _task, - note: _note, - )); + container.addTodo(Todo(_task, note: _note)); } Navigator.pop(context); diff --git a/inherited_widget/lib/screens/detail_screen.dart b/inherited_widget/lib/screens/detail_screen.dart index 9f05db5a..752ac1b7 100644 --- a/inherited_widget/lib/screens/detail_screen.dart +++ b/inherited_widget/lib/screens/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -12,9 +8,8 @@ import 'package:inherited_widget_sample/state_container.dart'; class DetailScreen extends StatelessWidget { final Todo todo; - DetailScreen({ - @required this.todo, - }) : super(key: ArchSampleKeys.todoDetailsScreen); + DetailScreen({@required this.todo}) + : super(key: ArchSampleKeys.todoDetailsScreen); @override Widget build(BuildContext context) { @@ -32,7 +27,7 @@ class DetailScreen extends StatelessWidget { container.removeTodo(todo); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -57,10 +52,7 @@ class DetailScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -71,7 +63,7 @@ class DetailScreen extends StatelessWidget { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), diff --git a/inherited_widget/lib/screens/home_screen.dart b/inherited_widget/lib/screens/home_screen.dart index ab19a8ba..3488ad87 100644 --- a/inherited_widget/lib/screens/home_screen.dart +++ b/inherited_widget/lib/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/localization.dart'; @@ -48,7 +44,7 @@ class HomeScreenState extends State { container.clearCompleted(); } }, - ) + ), ], ), body: activeTab == AppTab.todos ? TodoList() : StatsCounter(), diff --git a/inherited_widget/lib/state_container.dart b/inherited_widget/lib/state_container.dart index 77d7a51e..936b6866 100644 --- a/inherited_widget/lib/state_container.dart +++ b/inherited_widget/lib/state_container.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:inherited_widget_sample/models.dart'; @@ -12,11 +8,7 @@ class StateContainer extends StatefulWidget { final TodosRepository repository; final Widget child; - StateContainer({ - @required this.child, - this.repository, - this.state, - }); + StateContainer({@required this.child, this.repository, this.state}); static StateContainerState of(BuildContext context) { return context @@ -41,17 +33,18 @@ class StateContainerState extends State { state = AppState.loading(); } - widget.repository.loadTodos().then((loadedTodos) { - setState(() { - state = AppState( - todos: loadedTodos.map(Todo.fromEntity).toList(), - ); - }); - }).catchError((err) { - setState(() { - state.isLoading = false; - }); - }); + widget.repository + .loadTodos() + .then((loadedTodos) { + setState(() { + state = AppState(todos: loadedTodos.map(Todo.fromEntity).toList()); + }); + }) + .catchError((err) { + setState(() { + state.isLoading = false; + }); + }); super.initState(); } @@ -105,16 +98,14 @@ class StateContainerState extends State { void setState(VoidCallback fn) { super.setState(fn); - widget.repository - .saveTodos(state.todos.map((todo) => todo.toEntity()).toList()); + widget.repository.saveTodos( + state.todos.map((todo) => todo.toEntity()).toList(), + ); } @override Widget build(BuildContext context) { - return _InheritedStateContainer( - data: this, - child: widget.child, - ); + return _InheritedStateContainer(data: this, child: widget.child); } } @@ -135,10 +126,11 @@ class _InheritedStateContainer extends InheritedWidget { bool updateShouldNotify(_InheritedStateContainer old) => true; } -typedef TodoUpdater = void Function( - Todo todo, { - bool complete, - String id, - String note, - String task, -}); +typedef TodoUpdater = + void Function( + Todo todo, { + bool complete, + String id, + String note, + String task, + }); diff --git a/inherited_widget/lib/widgets/extra_actions_button.dart b/inherited_widget/lib/widgets/extra_actions_button.dart index cc95e3c8..3cc24138 100644 --- a/inherited_widget/lib/widgets/extra_actions_button.dart +++ b/inherited_widget/lib/widgets/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; @@ -37,9 +33,7 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.clearCompleted, value: ExtraAction.clearCompleted, - child: Text( - ArchSampleLocalizations.of(context).clearCompleted, - ), + child: Text(ArchSampleLocalizations.of(context).clearCompleted), ), ]; }, diff --git a/inherited_widget/lib/widgets/filter_button.dart b/inherited_widget/lib/widgets/filter_button.dart index c6fc9bcc..f45984b7 100644 --- a/inherited_widget/lib/widgets/filter_button.dart +++ b/inherited_widget/lib/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; @@ -12,7 +8,7 @@ class FilterButton extends StatelessWidget { final bool isActive; FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { diff --git a/inherited_widget/lib/widgets/stats_counter.dart b/inherited_widget/lib/widgets/stats_counter.dart index b73add39..bbb2ae3f 100644 --- a/inherited_widget/lib/widgets/stats_counter.dart +++ b/inherited_widget/lib/widgets/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -49,7 +45,7 @@ class StatsCounter extends StatelessWidget { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.subhead, ), - ) + ), ], ), ); diff --git a/inherited_widget/lib/widgets/todo_item.dart b/inherited_widget/lib/widgets/todo_item.dart index 7e071c9c..f8447f33 100644 --- a/inherited_widget/lib/widgets/todo_item.dart +++ b/inherited_widget/lib/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/inherited_widget/lib/widgets/todo_list.dart b/inherited_widget/lib/widgets/todo_list.dart index 6d6075be..4d1ee615 100644 --- a/inherited_widget/lib/widgets/todo_list.dart +++ b/inherited_widget/lib/widgets/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; @@ -23,9 +19,7 @@ class TodoList extends StatelessWidget { Center get _buildLoading { return Center( - child: CircularProgressIndicator( - key: ArchSampleKeys.todosLoading, - ), + child: CircularProgressIndicator(key: ArchSampleKeys.todosLoading), ); } @@ -44,19 +38,19 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return DetailScreen( - todo: todo, - ); - }, - ), - ).then((todo) { - if (todo is Todo) { - _showUndoSnackbar(context, todo); - } - }); + Navigator.of(context) + .push( + MaterialPageRoute( + builder: (_) { + return DetailScreen(todo: todo); + }, + ), + ) + .then((todo) { + if (todo is Todo) { + _showUndoSnackbar(context, todo); + } + }); }, onCheckboxChanged: (complete) { container.updateTodo(todo, complete: !todo.complete); diff --git a/inherited_widget/test/app_state_test.dart b/inherited_widget/test/app_state_test.dart index ba99318c..69f2a6bf 100644 --- a/inherited_widget/test/app_state_test.dart +++ b/inherited_widget/test/app_state_test.dart @@ -1,48 +1,34 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:inherited_widget_sample/models.dart'; import 'package:test/test.dart'; void main() { group('AppState', () { test('should check if there are completed todos', () { - final state = AppState(todos: [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]); + final state = AppState( + todos: [Todo('a'), Todo('b'), Todo('c', complete: true)], + ); expect(state.hasCompletedTodos, true); }); test('should calculate the number of active todos', () { - final state = AppState(todos: [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]); + final state = AppState( + todos: [Todo('a'), Todo('b'), Todo('c', complete: true)], + ); expect(state.numActive, 2); }); test('should calculate the number of completed todos', () { - final state = AppState(todos: [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]); + final state = AppState( + todos: [Todo('a'), Todo('b'), Todo('c', complete: true)], + ); expect(state.numCompleted, 1); }); test('should return all todos if the VisibilityFilter is all', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; final state = AppState(todos: todos, activeFilter: VisibilityFilter.all); expect(state.filteredTodos, todos); @@ -52,73 +38,49 @@ void main() { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; final state = AppState( todos: todos, activeFilter: VisibilityFilter.active, ); - expect(state.filteredTodos, [ - todo1, - todo2, - ]); + expect(state.filteredTodos, [todo1, todo2]); }); - test('should return completed todos if the VisibilityFilter is completed', - () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState( - todos: todos, - activeFilter: VisibilityFilter.completed, - ); - - expect(state.filteredTodos, [todo3]); - }); + test( + 'should return completed todos if the VisibilityFilter is completed', + () { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; + final state = AppState( + todos: todos, + activeFilter: VisibilityFilter.completed, + ); + + expect(state.filteredTodos, [todo3]); + }, + ); test('should clear the completed todos', () { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState( - todos: todos, - ); + final todos = [todo1, todo2, todo3]; + final state = AppState(todos: todos); state.clearCompleted(); - expect(state.todos, [ - todo1, - todo2, - ]); + expect(state.todos, [todo1, todo2]); }); test('toggle all as complete or incomplete', () { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState( - todos: todos, - ); + final todos = [todo1, todo2, todo3]; + final state = AppState(todos: todos); // Toggle all complete state.toggleAll(); diff --git a/inherited_widget/test_driver/todo_app.dart b/inherited_widget/test_driver/todo_app.dart index 4e1c0af8..5a885326 100644 --- a/inherited_widget/test_driver/todo_app.dart +++ b/inherited_widget/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:flutter_driver/driver_extension.dart'; import 'package:inherited_widget_sample/main.dart' as app; diff --git a/inherited_widget/test_driver/todo_app_test.dart b/inherited_widget/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/inherited_widget/test_driver/todo_app_test.dart +++ b/inherited_widget/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/integration_tests/lib/integration_tests.dart b/integration_tests/lib/integration_tests.dart index e1089242..f11b16a7 100644 --- a/integration_tests/lib/integration_tests.dart +++ b/integration_tests/lib/integration_tests.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library integration_tests; import 'package:flutter/widgets.dart'; diff --git a/integration_tests/lib/page_objects/elements/extra_actions_element.dart b/integration_tests/lib/page_objects/elements/extra_actions_element.dart index 7d3be268..6a85ebde 100644 --- a/integration_tests/lib/page_objects/elements/extra_actions_element.dart +++ b/integration_tests/lib/page_objects/elements/extra_actions_element.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/elements/filters_element.dart b/integration_tests/lib/page_objects/elements/filters_element.dart index d3be6ae5..e01e3582 100644 --- a/integration_tests/lib/page_objects/elements/filters_element.dart +++ b/integration_tests/lib/page_objects/elements/filters_element.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/elements/stats_element.dart b/integration_tests/lib/page_objects/elements/stats_element.dart index 20921d85..c1b90020 100644 --- a/integration_tests/lib/page_objects/elements/stats_element.dart +++ b/integration_tests/lib/page_objects/elements/stats_element.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/elements/test_element.dart b/integration_tests/lib/page_objects/elements/test_element.dart index f117a49b..91a861bc 100644 --- a/integration_tests/lib/page_objects/elements/test_element.dart +++ b/integration_tests/lib/page_objects/elements/test_element.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; abstract class TestElement { diff --git a/integration_tests/lib/page_objects/elements/todo_item_element.dart b/integration_tests/lib/page_objects/elements/todo_item_element.dart index 8eaa661f..abb992d1 100644 --- a/integration_tests/lib/page_objects/elements/todo_item_element.dart +++ b/integration_tests/lib/page_objects/elements/todo_item_element.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/elements/todo_list_element.dart b/integration_tests/lib/page_objects/elements/todo_list_element.dart index 3e5376d9..1c44fbb3 100644 --- a/integration_tests/lib/page_objects/elements/todo_list_element.dart +++ b/integration_tests/lib/page_objects/elements/todo_list_element.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/page_objects.dart b/integration_tests/lib/page_objects/page_objects.dart index 8d59758e..d26dac6a 100644 --- a/integration_tests/lib/page_objects/page_objects.dart +++ b/integration_tests/lib/page_objects/page_objects.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'screens/add_test_screen.dart'; export 'screens/details_test_screen.dart'; export 'screens/home_test_screen.dart'; diff --git a/integration_tests/lib/page_objects/screens/add_test_screen.dart b/integration_tests/lib/page_objects/screens/add_test_screen.dart index a722287e..cf5ef5dd 100644 --- a/integration_tests/lib/page_objects/screens/add_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/add_test_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/screens/details_test_screen.dart b/integration_tests/lib/page_objects/screens/details_test_screen.dart index f04f5747..768cd89c 100644 --- a/integration_tests/lib/page_objects/screens/details_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/details_test_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/screens/edit_test_screen.dart b/integration_tests/lib/page_objects/screens/edit_test_screen.dart index 8d138d70..08f8d98d 100644 --- a/integration_tests/lib/page_objects/screens/edit_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/edit_test_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/integration_tests/lib/page_objects/screens/home_test_screen.dart b/integration_tests/lib/page_objects/screens/home_test_screen.dart index 096966bc..e45bbb50 100644 --- a/integration_tests/lib/page_objects/screens/home_test_screen.dart +++ b/integration_tests/lib/page_objects/screens/home_test_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_tests/page_objects/page_objects.dart'; diff --git a/integration_tests/lib/page_objects/screens/test_screen.dart b/integration_tests/lib/page_objects/screens/test_screen.dart index 35023041..03bcad57 100644 --- a/integration_tests/lib/page_objects/screens/test_screen.dart +++ b/integration_tests/lib/page_objects/screens/test_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; abstract class TestScreen { diff --git a/integration_tests/lib/page_objects/utils.dart b/integration_tests/lib/page_objects/utils.dart index 246fdc43..905c1bdc 100644 --- a/integration_tests/lib/page_objects/utils.dart +++ b/integration_tests/lib/page_objects/utils.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; Future widgetExists( diff --git a/mobx/lib/home/extra_actions_button.dart b/mobx/lib/home/extra_actions_button.dart index 249f45a4..8ecc4ea5 100644 --- a/mobx/lib/home/extra_actions_button.dart +++ b/mobx/lib/home/extra_actions_button.dart @@ -1,16 +1,10 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:mobx_sample/stores/todo_store.dart'; import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class ExtraActionsButton extends StatelessWidget { - const ExtraActionsButton({ - Key key, - }) : super(key: key); + const ExtraActionsButton({Key key}) : super(key: key); @override Widget build(BuildContext context) { @@ -30,9 +24,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(store.hasPendingTodos - ? ArchSampleLocalizations.of(context).markAllComplete - : ArchSampleLocalizations.of(context).markAllIncomplete), + child: Text( + store.hasPendingTodos + ? ArchSampleLocalizations.of(context).markAllComplete + : ArchSampleLocalizations.of(context).markAllIncomplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/mobx/lib/home/filter_button.dart b/mobx/lib/home/filter_button.dart index d06d1e56..b7dccb7f 100644 --- a/mobx/lib/home/filter_button.dart +++ b/mobx/lib/home/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:mobx_sample/stores/todo_store.dart'; @@ -39,11 +35,12 @@ class FilterButton extends StatelessWidget { } List> _items( - BuildContext context, TodoStore store) { - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + BuildContext context, + TodoStore store, + ) { + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final defaultStyle = Theme.of(context).textTheme.body1; return [ @@ -52,8 +49,9 @@ class FilterButton extends StatelessWidget { value: VisibilityFilter.all, child: Text( ArchSampleLocalizations.of(context).showAll, - style: - store.filter == VisibilityFilter.all ? activeStyle : defaultStyle, + style: store.filter == VisibilityFilter.all + ? activeStyle + : defaultStyle, ), ), PopupMenuItem( diff --git a/mobx/lib/localization.dart b/mobx/lib/localization.dart index a83b2f36..79370389 100644 --- a/mobx/lib/localization.dart +++ b/mobx/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/mobx/test/todo_store_test.dart b/mobx/test/todo_store_test.dart index 069c968b..4a1cf6ea 100644 --- a/mobx/test/todo_store_test.dart +++ b/mobx/test/todo_store_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:mobx/mobx.dart'; import 'package:mobx_sample/models/todo.dart'; import 'package:mobx_sample/stores/todo_store.dart'; @@ -26,9 +22,7 @@ void main() { ); final noPendingStore = TodoStore( MockRepository(), - todos: ObservableList.of([ - Todo(task: 'a', complete: true), - ]), + todos: ObservableList.of([Todo(task: 'a', complete: true)]), ); expect(hasPendingStore.hasPendingTodos, isTrue); @@ -45,9 +39,7 @@ void main() { ); final noCompletedStore = TodoStore( MockRepository(), - todos: ObservableList.of([ - Todo(task: 'a'), - ]), + todos: ObservableList.of([Todo(task: 'a')]), ); expect(hasCompletedStore.hasCompletedTodos, isTrue); diff --git a/mobx/test_driver/todo_app.dart b/mobx/test_driver/todo_app.dart index 09e1f4e4..363e0d34 100644 --- a/mobx/test_driver/todo_app.dart +++ b/mobx/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:flutter_driver/driver_extension.dart'; import 'package:mobx_sample/main.dart' as app; diff --git a/mobx/test_driver/todo_app_test.dart b/mobx/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/mobx/test_driver/todo_app_test.dart +++ b/mobx/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/mvc/lib/main.dart b/mvc/lib/main.dart index 59f0710d..a138cd0d 100644 --- a/mvc/lib/main.dart +++ b/mvc/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:mvc/src/App.dart'; diff --git a/mvc/lib/src/App.dart b/mvc/lib/src/App.dart index 9d7d32b2..66e44225 100644 --- a/mvc/lib/src/App.dart +++ b/mvc/lib/src/App.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/mvc/lib/src/Controller.dart b/mvc/lib/src/Controller.dart index 31e3ce44..65a2c58f 100644 --- a/mvc/lib/src/Controller.dart +++ b/mvc/lib/src/Controller.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async' show Future; import 'package:mvc_pattern/mvc_pattern.dart' show ControllerMVC; diff --git a/mvc/lib/src/Model.dart b/mvc/lib/src/Model.dart index 4867f016..26b465fa 100644 --- a/mvc/lib/src/Model.dart +++ b/mvc/lib/src/Model.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async' show Future; /// It is this Model that 'knows of' this class. diff --git a/mvc/lib/src/models.dart b/mvc/lib/src/models.dart index e7b2e243..c4315a15 100644 --- a/mvc/lib/src/models.dart +++ b/mvc/lib/src/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart' show Uuid; import 'package:todos_repository_core/todos_repository_core.dart' show TodoEntity; @@ -17,7 +13,7 @@ class Todo { final String task; Todo(this.task, {this.complete = false, this.note = '', String id}) - : id = id ?? Uuid().generateV4(); + : id = id ?? Uuid().generateV4(); @override int get hashCode => diff --git a/mvc/lib/src/screens/add_edit_screen.dart b/mvc/lib/src/screens/add_edit_screen.dart index a63eb74c..b9f0efab 100644 --- a/mvc/lib/src/screens/add_edit_screen.dart +++ b/mvc/lib/src/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async' show Future; import 'package:flutter/material.dart'; @@ -15,10 +11,8 @@ import 'package:mvc/src/Controller.dart' show Con; class AddEditScreen extends StatefulWidget { final String todoId; - AddEditScreen({ - Key key, - this.todoId, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({Key key, this.todoId}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); @@ -39,9 +33,11 @@ class _AddEditScreenState extends State { return Scaffold( appBar: AppBar( - title: Text(isEditing - ? ArchSampleLocalizations.of(context).editTodo - : ArchSampleLocalizations.of(context).addTodo), + title: Text( + isEditing + ? ArchSampleLocalizations.of(context).editTodo + : ArchSampleLocalizations.of(context).addTodo, + ), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -59,7 +55,8 @@ class _AddEditScreenState extends State { autofocus: isEditing ? false : true, style: Theme.of(context).textTheme.headline, decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).newTodoHint), + hintText: ArchSampleLocalizations.of(context).newTodoHint, + ), validator: (val) => val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null, @@ -74,14 +71,15 @@ class _AddEditScreenState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? ArchSampleLocalizations.of(context).saveChanges : ArchSampleLocalizations.of(context).addTodo, diff --git a/mvc/lib/src/screens/detail_screen.dart b/mvc/lib/src/screens/detail_screen.dart index 231889d2..1a1d647a 100644 --- a/mvc/lib/src/screens/detail_screen.dart +++ b/mvc/lib/src/screens/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart' show required; import 'package:flutter/material.dart'; @@ -17,9 +13,8 @@ class DetailScreen extends StatelessWidget { final Con con = Con.con; - DetailScreen({ - @required this.todoId, - }) : super(key: ArchSampleKeys.todoDetailsScreen); + DetailScreen({@required this.todoId}) + : super(key: ArchSampleKeys.todoDetailsScreen); @override Widget build(BuildContext context) { @@ -36,7 +31,7 @@ class DetailScreen extends StatelessWidget { con.remove(todo); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -61,10 +56,7 @@ class DetailScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo['task'], key: ArchSampleKeys.detailsTodoItemTask, @@ -75,7 +67,7 @@ class DetailScreen extends StatelessWidget { todo['note'], key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), diff --git a/mvc/lib/src/screens/home_screen.dart b/mvc/lib/src/screens/home_screen.dart index 96f31926..e16a32e0 100644 --- a/mvc/lib/src/screens/home_screen.dart +++ b/mvc/lib/src/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart' show ArchSampleKeys, ArchSampleLocalizations, ArchSampleRoutes; @@ -45,7 +41,7 @@ class HomeView extends State { title: Text(_con.title), actions: [ FilterButton(isActive: _activeTab == AppTab.todos), - ExtraActionsButton() + ExtraActionsButton(), ], ), body: _activeTab == AppTab.todos ? TodoList() : StatsCounter(), diff --git a/mvc/lib/src/todo_list_model.dart b/mvc/lib/src/todo_list_model.dart index 3863533b..b7a6da92 100644 --- a/mvc/lib/src/todo_list_model.dart +++ b/mvc/lib/src/todo_list_model.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:path_provider/path_provider.dart'; @@ -11,9 +7,10 @@ import 'package:mvc/src/models.dart'; class TodoListModel { TodoListModel({TodosRepository repo, VisibilityFilter activeFilter}) - : _activeFilter = activeFilter ?? VisibilityFilter.all { + : _activeFilter = activeFilter ?? VisibilityFilter.all { /// The rest of the app need not know of its existence. - repository = repo ?? + repository = + repo ?? LocalStorageRepository( localStorage: const FileStorage( 'mvc_app', @@ -36,26 +33,29 @@ class TodoListModel { /// Loads remote data Future loadTodos() { _isLoading = true; - return repository.loadTodos().then((loadedTodos) { - _todos = loadedTodos.map(Todo.fromEntity).toList(); - _isLoading = false; - }).catchError((err) { - _isLoading = false; - _todos = []; - }); + return repository + .loadTodos() + .then((loadedTodos) { + _todos = loadedTodos.map(Todo.fromEntity).toList(); + _isLoading = false; + }) + .catchError((err) { + _isLoading = false; + _todos = []; + }); } List get filteredTodos => _todos.where((todo) { - switch (activeFilter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); + switch (activeFilter) { + case VisibilityFilter.active: + return !todo.complete; + case VisibilityFilter.completed: + return todo.complete; + case VisibilityFilter.all: + default: + return true; + } + }).toList(); void clearCompleted() { _todos.removeWhere((todo) => todo.complete); @@ -102,15 +102,19 @@ enum VisibilityFilter { all, active, completed } class To { /// Convert from a Map object static Todo todo(Map data) { - return Todo(data['task'], - complete: data['complete'], note: data['note'], id: data['id']); + return Todo( + data['task'], + complete: data['complete'], + note: data['note'], + id: data['id'], + ); } /// Used to 'interface' with the View in the MVC design pattern. static Map map(Todo obj) => { - 'task': obj == null ? '' : obj.task, - 'note': obj == null ? '' : obj.note, - 'complete': obj == null ? false : obj.complete, - 'id': obj == null ? null : obj.id, - }; + 'task': obj == null ? '' : obj.task, + 'note': obj == null ? '' : obj.note, + 'complete': obj == null ? false : obj.complete, + 'id': obj == null ? null : obj.id, + }; } diff --git a/mvc/lib/src/widgets/extra_actions_button.dart b/mvc/lib/src/widgets/extra_actions_button.dart index e4487374..81f7a6c7 100644 --- a/mvc/lib/src/widgets/extra_actions_button.dart +++ b/mvc/lib/src/widgets/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model_sample/models.dart'; @@ -9,9 +5,7 @@ import 'package:scoped_model_sample/models.dart'; import 'package:mvc/src/Controller.dart'; class ExtraActionsButton extends StatelessWidget { - ExtraActionsButton({ - Key key, - }) : super(key: key); + ExtraActionsButton({Key key}) : super(key: key); final con = Con.con; @@ -31,9 +25,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(Con.todos.any((it) => !it['complete']) - ? ArchSampleLocalizations.of(context).markAllComplete - : ArchSampleLocalizations.of(context).markAllIncomplete), + child: Text( + Con.todos.any((it) => !it['complete']) + ? ArchSampleLocalizations.of(context).markAllComplete + : ArchSampleLocalizations.of(context).markAllIncomplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/mvc/lib/src/widgets/filter_button.dart b/mvc/lib/src/widgets/filter_button.dart index 25a504b1..ec4aaf75 100644 --- a/mvc/lib/src/widgets/filter_button.dart +++ b/mvc/lib/src/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -17,7 +13,7 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { -// var model = TodoListModel.of(context, rebuildOnChange: true); + // var model = TodoListModel.of(context, rebuildOnChange: true); return AnimatedOpacity( opacity: isActive ? 1.0 : 0.0, duration: Duration(milliseconds: 150), @@ -35,10 +31,9 @@ class FilterButton extends StatelessWidget { } List> _items(BuildContext context) { - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final defaultStyle = Theme.of(context).textTheme.body1; return [ diff --git a/mvc/lib/src/widgets/stats_counter.dart b/mvc/lib/src/widgets/stats_counter.dart index 5dab115b..4c32de7c 100644 --- a/mvc/lib/src/widgets/stats_counter.dart +++ b/mvc/lib/src/widgets/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -53,7 +49,7 @@ class StatsCounter extends StatelessWidget { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.subhead, ), - ) + ), ], ), ); diff --git a/mvc/lib/src/widgets/todo_item.dart b/mvc/lib/src/widgets/todo_item.dart index e44b8e1c..f537c863 100644 --- a/mvc/lib/src/widgets/todo_item.dart +++ b/mvc/lib/src/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/mvc/lib/src/widgets/todo_list.dart b/mvc/lib/src/widgets/todo_list.dart index 77afa557..83a03d45 100644 --- a/mvc/lib/src/widgets/todo_list.dart +++ b/mvc/lib/src/widgets/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvc/src/screens/detail_screen.dart'; @@ -16,16 +12,12 @@ class TodoList extends StatelessWidget { @override Widget build(BuildContext context) { - return Container( - child: Con.isLoading ? _buildLoading : _buildList(), - ); + return Container(child: Con.isLoading ? _buildLoading : _buildList()); } Center get _buildLoading { return Center( - child: CircularProgressIndicator( - key: ArchSampleKeys.todosLoading, - ), + child: CircularProgressIndicator(key: ArchSampleKeys.todosLoading), ); } @@ -42,19 +34,19 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return DetailScreen( - todoId: todo['id'], - ); - }, - ), - ).then((todo) { - if (todo is Map && todo.isNotEmpty) { - _showUndoSnackbar(context, todo); - } - }); + Navigator.of(context) + .push( + MaterialPageRoute( + builder: (_) { + return DetailScreen(todoId: todo['id']); + }, + ), + ) + .then((todo) { + if (todo is Map && todo.isNotEmpty) { + _showUndoSnackbar(context, todo); + } + }); }, onCheckboxChanged: (complete) { _con.checked(todo); diff --git a/mvc/test/todo_list_model_test.dart b/mvc/test/todo_list_model_test.dart index 560c0326..25f5985e 100644 --- a/mvc/test/todo_list_model_test.dart +++ b/mvc/test/todo_list_model_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:mvc/src/models.dart'; import 'package:mvc/src/todo_list_model.dart'; @@ -11,11 +7,8 @@ void main() { group('TodoListModel', () { test('should check if there are completed todos', () async { final model = TodoListModel( - repo: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); + repo: MockRepository([Todo('a'), Todo('b'), Todo('c', complete: true)]), + ); await model.loadTodos(); expect(model.todos.any((it) => it.complete), true); @@ -23,11 +16,8 @@ void main() { test('should calculate the number of active todos', () async { final model = TodoListModel( - repo: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); + repo: MockRepository([Todo('a'), Todo('b'), Todo('c', complete: true)]), + ); await model.loadTodos(); expect(model.todos.where((it) => !it.complete).toList().length, 2); @@ -35,104 +25,77 @@ void main() { test('should calculate the number of completed todos', () async { final model = TodoListModel( - repo: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); + repo: MockRepository([Todo('a'), Todo('b'), Todo('c', complete: true)]), + ); await model.loadTodos(); expect(model.todos.where((it) => it.complete).toList().length, 1); }); test('should return all todos if the VisibilityFilter is all', () async { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; - final model = TodoListModel( - repo: MockRepository(todos), activeFilter: VisibilityFilter.all); - await model.loadTodos(); - - expect(model.filteredTodos, todos); - }); - - test('should return active todos if the VisibilityFilter is active', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; final model = TodoListModel( repo: MockRepository(todos), - activeFilter: VisibilityFilter.active, + activeFilter: VisibilityFilter.all, ); await model.loadTodos(); - expect(model.filteredTodos, [ - todo1, - todo2, - ]); + expect(model.filteredTodos, todos); }); - test('should return completed todos if the VisibilityFilter is completed', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final model = TodoListModel( - repo: MockRepository(todos), - activeFilter: VisibilityFilter.completed, - ); - await model.loadTodos(); - - expect(model.filteredTodos, [todo3]); - }); + test( + 'should return active todos if the VisibilityFilter is active', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel( + repo: MockRepository(todos), + activeFilter: VisibilityFilter.active, + ); + await model.loadTodos(); + + expect(model.filteredTodos, [todo1, todo2]); + }, + ); + + test( + 'should return completed todos if the VisibilityFilter is completed', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel( + repo: MockRepository(todos), + activeFilter: VisibilityFilter.completed, + ); + await model.loadTodos(); + + expect(model.filteredTodos, [todo3]); + }, + ); test('should clear the completed todos', () async { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final model = TodoListModel( - repo: MockRepository(todos), - ); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel(repo: MockRepository(todos)); await model.loadTodos(); model.clearCompleted(); - expect(model.todos, [ - todo1, - todo2, - ]); + expect(model.todos, [todo1, todo2]); }); test('toggle all as complete or incomplete', () async { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final model = TodoListModel( - repo: MockRepository(todos), - ); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel(repo: MockRepository(todos)); await model.loadTodos(); // Toggle all complete @@ -150,7 +113,7 @@ class MockRepository extends TodosRepository { List entities; MockRepository(List todos) - : entities = todos.map((it) => it.toEntity()).toList(); + : entities = todos.map((it) => it.toEntity()).toList(); @override Future> loadTodos() { diff --git a/mvc/test_driver/todo_app.dart b/mvc/test_driver/todo_app.dart index f7db8943..0ea65b60 100644 --- a/mvc/test_driver/todo_app.dart +++ b/mvc/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:flutter_driver/driver_extension.dart'; import 'package:mvc/main.dart' as app; diff --git a/mvc/test_driver/todo_app_test.dart b/mvc/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/mvc/test_driver/todo_app_test.dart +++ b/mvc/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/mvi_base/lib/mvi_base.dart b/mvi_base/lib/mvi_base.dart index cf8b548d..ce27faad 100644 --- a/mvi_base/lib/mvi_base.dart +++ b/mvi_base/lib/mvi_base.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library blocs; export 'src/models/models.dart'; diff --git a/mvi_base/lib/src/models/models.dart b/mvi_base/lib/src/models/models.dart index f2ba373e..1a60eaa3 100644 --- a/mvi_base/lib/src/models/models.dart +++ b/mvi_base/lib/src/models/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'package:mvi_base/src/models/todo.dart'; export 'package:mvi_base/src/models/user.dart'; export 'package:mvi_base/src/models/visibility_filter.dart'; diff --git a/mvi_base/lib/src/models/todo.dart b/mvi_base/lib/src/models/todo.dart index 8864dbfc..c7ee622a 100644 --- a/mvi_base/lib/src/models/todo.dart +++ b/mvi_base/lib/src/models/todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:meta/meta.dart'; import 'package:mvi_base/src/uuid.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -14,8 +10,8 @@ class Todo { final String task; Todo(this.task, {this.complete = false, String note = '', String id}) - : this.note = note ?? '', - this.id = id ?? Uuid().generateV4(); + : this.note = note ?? '', + this.id = id ?? Uuid().generateV4(); Todo copyWith({bool complete, String id, String note, String task}) { return Todo( diff --git a/mvi_base/lib/src/models/user.dart b/mvi_base/lib/src/models/user.dart index a1fa7b22..b691c873 100644 --- a/mvi_base/lib/src/models/user.dart +++ b/mvi_base/lib/src/models/user.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:meta/meta.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/mvi_base/lib/src/models/visibility_filter.dart b/mvi_base/lib/src/models/visibility_filter.dart index 11f11982..a47beca1 100644 --- a/mvi_base/lib/src/models/visibility_filter.dart +++ b/mvi_base/lib/src/models/visibility_filter.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum VisibilityFilter { all, active, completed } diff --git a/mvi_base/lib/src/mvi_core.dart b/mvi_base/lib/src/mvi_core.dart index 15234356..491e6f3b 100644 --- a/mvi_base/lib/src/mvi_core.dart +++ b/mvi_base/lib/src/mvi_core.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:meta/meta.dart'; @@ -25,10 +21,8 @@ class MviPresenter extends Stream final BehaviorSubject _subject; final List> subscriptions = []; - MviPresenter({ - @required Stream stream, - ViewModel initialModel, - }) : _subject = _createSubject(stream, initialModel); + MviPresenter({@required Stream stream, ViewModel initialModel}) + : _subject = _createSubject(stream, initialModel); // Get the current state. Useful for initial renders or re-renders when we // have already fetched the data @@ -38,7 +32,8 @@ class MviPresenter extends Stream @mustCallSuper Future tearDown() => Future.wait( - [_subject.close()]..addAll(subscriptions.map((s) => s.cancel()))); + [_subject.close()]..addAll(subscriptions.map((s) => s.cancel())), + ); static _createSubject( Stream model, @@ -78,11 +73,10 @@ class MviPresenter extends Stream Function onError, void Function() onDone, bool cancelOnError, - }) => - _subject.stream.listen( - onData, - onError: onError, - onDone: onDone, - cancelOnError: cancelOnError, - ); + }) => _subject.stream.listen( + onData, + onError: onError, + onDone: onDone, + cancelOnError: cancelOnError, + ); } diff --git a/mvi_base/lib/src/mvi_stats.dart b/mvi_base/lib/src/mvi_stats.dart index 39de8ee7..45405ed9 100644 --- a/mvi_base/lib/src/mvi_stats.dart +++ b/mvi_base/lib/src/mvi_stats.dart @@ -1,20 +1,16 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_base/src/mvi_core.dart'; import 'package:rxdart/rxdart.dart'; class StatsPresenter extends MviPresenter { StatsPresenter(TodosInteractor interactor) - : super( - stream: Rx.combineLatest2( - interactor.todos.map(_numActive), - interactor.todos.map(_numComplete), - (numActive, numComplete) => StatsModel(numActive, numComplete), - ), - ); + : super( + stream: Rx.combineLatest2( + interactor.todos.map(_numActive), + interactor.todos.map(_numComplete), + (numActive, numComplete) => StatsModel(numActive, numComplete), + ), + ); static int _numActive(List todos) { return todos.fold(0, (sum, todo) => !todo.complete ? ++sum : sum); diff --git a/mvi_base/lib/src/mvi_todo.dart b/mvi_base/lib/src/mvi_todo.dart index 83544c2c..0703a477 100644 --- a/mvi_base/lib/src/mvi_todo.dart +++ b/mvi_base/lib/src/mvi_todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:meta/meta.dart'; @@ -16,10 +12,7 @@ mixin DetailView implements MviView { @override Future tearDown() { - return Future.wait([ - deleteTodo.close(), - updateTodo.close(), - ]); + return Future.wait([deleteTodo.close(), updateTodo.close()]); } } @@ -31,9 +24,9 @@ class DetailPresenter extends MviPresenter { @required String id, @required DetailView view, @required TodosInteractor interactor, - }) : _view = view, - _interactor = interactor, - super(stream: interactor.todo(id)); + }) : _view = view, + _interactor = interactor, + super(stream: interactor.todo(id)); @override void setUp() { diff --git a/mvi_base/lib/src/mvi_todos_list.dart b/mvi_base/lib/src/mvi_todos_list.dart index c4fc2179..1b1ac4e9 100644 --- a/mvi_base/lib/src/mvi_todos_list.dart +++ b/mvi_base/lib/src/mvi_todos_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:meta/meta.dart'; @@ -93,12 +89,12 @@ class TodosListPresenter extends MviPresenter { @required TodosListView view, @required TodosInteractor todosInteractor, @required UserInteractor userInteractor, - }) : _view = view, - _interactor = todosInteractor, - super( - initialModel: TodosListModel.initial(), - stream: _buildStream(view, todosInteractor, userInteractor), - ); + }) : _view = view, + _interactor = todosInteractor, + super( + initialModel: TodosListModel.initial(), + stream: _buildStream(view, todosInteractor, userInteractor), + ); @override void setUp() { diff --git a/mvi_base/lib/src/todos_interactor.dart b/mvi_base/lib/src/todos_interactor.dart index 9abcb080..207dda38 100644 --- a/mvi_base/lib/src/todos_interactor.dart +++ b/mvi_base/lib/src/todos_interactor.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mvi_base/mvi_base.dart'; @@ -13,18 +9,17 @@ class TodosInteractor { TodosInteractor(this.repository); Stream> get todos { - return repository - .todos() - .map((entities) => entities.map(Todo.fromEntity).toList()); + return repository.todos().map( + (entities) => entities.map(Todo.fromEntity).toList(), + ); } Stream todo(String id) { - return todos.map((todos) { - return todos.firstWhere( - (todo) => todo.id == id, - orElse: () => null, - ); - }).where((todo) => todo != null); + return todos + .map((todos) { + return todos.firstWhere((todo) => todo.id == id, orElse: () => null); + }) + .where((todo) => todo != null); } Stream get allComplete => todos.map(_allComplete); @@ -44,7 +39,8 @@ class TodosInteractor { final updates = await todos.map(_todosToUpdate).first; return Future.wait( - updates.map((update) => repository.updateTodo(update.toEntity()))); + updates.map((update) => repository.updateTodo(update.toEntity())), + ); } static bool _hasCompletedTodos(List todos) { diff --git a/mvi_base/lib/src/user_interactor.dart b/mvi_base/lib/src/user_interactor.dart index 7dbef8e2..96129df0 100644 --- a/mvi_base/lib/src/user_interactor.dart +++ b/mvi_base/lib/src/user_interactor.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mvi_base/src/models/user.dart'; diff --git a/mvi_base/lib/src/uuid.dart b/mvi_base/lib/src/uuid.dart index 1b6b26da..73d193cb 100644 --- a/mvi_base/lib/src/uuid.dart +++ b/mvi_base/lib/src/uuid.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:math'; /// A UUID generator, useful for generating unique IDs for your Todos. diff --git a/mvi_base/test/mvi_stats_test.dart b/mvi_base/test/mvi_stats_test.dart index a030e8b1..097e9696 100644 --- a/mvi_base/test/mvi_stats_test.dart +++ b/mvi_base/test/mvi_stats_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mockito/mockito.dart'; @@ -24,10 +20,7 @@ void main() { final presenter = StatsPresenter(interactor); - expect( - presenter, - emitsThrough(StatsModel(1, 2)), - ); + expect(presenter, emitsThrough(StatsModel(1, 2))); }); }); } diff --git a/mvi_base/test/mvi_todo_test.dart b/mvi_base/test/mvi_todo_test.dart index d4a158c0..e61ad083 100644 --- a/mvi_base/test/mvi_todo_test.dart +++ b/mvi_base/test/mvi_todo_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mockito/mockito.dart'; @@ -20,8 +16,9 @@ void main() { final interactor = MockTodosInteractor(); final todo = Todo('Hallo'); - when(interactor.todo(todo.id)) - .thenAnswer((_) => Stream.fromIterable([todo])); + when( + interactor.todo(todo.id), + ).thenAnswer((_) => Stream.fromIterable([todo])); final presenter = DetailPresenter( id: todo.id, @@ -37,8 +34,9 @@ void main() { final todo = Todo('Hallo'); final view = MockView(); - when(interactor.todo(todo.id)) - .thenAnswer((_) => Stream.fromIterable([todo])); + when( + interactor.todo(todo.id), + ).thenAnswer((_) => Stream.fromIterable([todo])); final presenter = DetailPresenter( id: todo.id, @@ -56,8 +54,9 @@ void main() { final todo = Todo('Hallo'); final view = MockView(); - when(interactor.todo(todo.id)) - .thenAnswer((_) => Stream.fromIterable([todo])); + when( + interactor.todo(todo.id), + ).thenAnswer((_) => Stream.fromIterable([todo])); final presenter = DetailPresenter( id: todo.id, diff --git a/mvi_base/test/mvi_todos_list_test.dart b/mvi_base/test/mvi_todos_list_test.dart index 2d983858..edd0b435 100644 --- a/mvi_base/test/mvi_todos_list_test.dart +++ b/mvi_base/test/mvi_todos_list_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mockito/mockito.dart'; @@ -53,10 +49,12 @@ void main() { final todos = [Todo('Hi')]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([false])); final presenter = TodosListPresenter( view: view, @@ -66,10 +64,9 @@ void main() { expect( presenter, - emitsThrough(ModelWith( - activeFilter: VisibilityFilter.all, - visibleTodos: todos, - )), + emitsThrough( + ModelWith(activeFilter: VisibilityFilter.all, visibleTodos: todos), + ), ); }); @@ -82,10 +79,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([false])); final presenter = TodosListPresenter( view: view, @@ -94,10 +93,7 @@ void main() { ); view.updateFilter.add(VisibilityFilter.completed); - expect( - presenter, - emitsThrough(ModelWith(visibleTodos: [todos.last])), - ); + expect(presenter, emitsThrough(ModelWith(visibleTodos: [todos.last]))); }); test('should display active todos', () { @@ -109,10 +105,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([false])); final presenter = TodosListPresenter( view: view, @@ -121,10 +119,7 @@ void main() { ); view.updateFilter.add(VisibilityFilter.active); - expect( - presenter, - emitsThrough(ModelWith(visibleTodos: [todos.first])), - ); + expect(presenter, emitsThrough(ModelWith(visibleTodos: [todos.first]))); }); test('allComplete should stream state of interactor', () { @@ -136,10 +131,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([false])); final presenter = TodosListPresenter( view: view, @@ -147,10 +144,7 @@ void main() { userInteractor: MockUserInteractor(), ); - expect( - presenter, - emitsThrough(ModelWith(allComplete: false)), - ); + expect(presenter, emitsThrough(ModelWith(allComplete: false))); }); test('hasCompletedTodos should reflect the interactor', () { @@ -162,10 +156,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([true])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([true])); final presenter = TodosListPresenter( view: view, @@ -173,10 +169,7 @@ void main() { userInteractor: MockUserInteractor(), ); - expect( - presenter, - emitsThrough(ModelWith(hasCompletedTodos: true)), - ); + expect(presenter, emitsThrough(ModelWith(hasCompletedTodos: true))); }); test('should add todos to the interactor', () async { @@ -188,10 +181,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([true])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([true])); final presenter = TodosListPresenter( view: view, @@ -213,10 +208,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([true])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([true])); final presenter = TodosListPresenter( view: view, @@ -238,10 +235,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([true])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([true])); final presenter = TodosListPresenter( view: view, @@ -263,10 +262,12 @@ void main() { ]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([true])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([true])); final presenter = TodosListPresenter( view: view, diff --git a/mvi_base/test/todos_interactor_test.dart b/mvi_base/test/todos_interactor_test.dart index 51b891c3..64c94935 100644 --- a/mvi_base/test/todos_interactor_test.dart +++ b/mvi_base/test/todos_interactor_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mockito/mockito.dart'; @@ -95,8 +91,9 @@ void main() { final todo = Todo("AddMe"); when(repository.todos()).thenAnswer((_) => Stream.empty()); - when(repository.addNewTodo(todo.toEntity())) - .thenAnswer((_) => Future.value()); + when( + repository.addNewTodo(todo.toEntity()), + ).thenAnswer((_) => Future.value()); interactor.addNewTodo(todo); @@ -144,8 +141,9 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); @@ -166,10 +164,12 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); - when(repository.updateTodo(e2Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e2Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); @@ -191,10 +191,12 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); - when(repository.updateTodo(e2Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e2Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); diff --git a/mvi_base/test/user_interactor_test.dart b/mvi_base/test/user_interactor_test.dart index 37ea1a19..c71b3e8e 100644 --- a/mvi_base/test/user_interactor_test.dart +++ b/mvi_base/test/user_interactor_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mockito/mockito.dart'; @@ -17,8 +13,9 @@ void main() { final repository = MockUserRepository(); final interactor = UserInteractor(repository); - when(repository.login()) - .thenAnswer((_) => Future.value(UserEntity(displayName: 'Frida'))); + when( + repository.login(), + ).thenAnswer((_) => Future.value(UserEntity(displayName: 'Frida'))); expect(await interactor.login(), User('Frida')); }); diff --git a/mvi_flutter/lib/dependency_injection.dart b/mvi_flutter/lib/dependency_injection.dart index a2977dd3..2dade1d6 100644 --- a/mvi_flutter/lib/dependency_injection.dart +++ b/mvi_flutter/lib/dependency_injection.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // A poor man's DI. This should be replaced by a proper solution once they // are more stable. library dependency_injector; diff --git a/mvi_flutter/lib/localization.dart b/mvi_flutter/lib/localization.dart index 30b45c3c..8c9f2b98 100644 --- a/mvi_flutter/lib/localization.dart +++ b/mvi_flutter/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/mvi_flutter/lib/main.dart b/mvi_flutter/lib/main.dart index cfd941e7..b3ca0c47 100644 --- a/mvi_flutter/lib/main.dart +++ b/mvi_flutter/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/widgets.dart'; @@ -15,19 +11,21 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(MviApp( - todosRepository: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'mvi_flutter', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + runApp( + MviApp( + todosRepository: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'mvi_flutter', + FlutterKeyValueStore(await SharedPreferences.getInstance()), + ), ), ), ), + userInteractor: UserInteractor(AnonymousUserRepository()), ), - userInteractor: UserInteractor(AnonymousUserRepository()), - )); + ); } class AnonymousUserRepository implements UserRepository { diff --git a/mvi_flutter/lib/main_firebase.dart b/mvi_flutter/lib/main_firebase.dart index 9fb15b32..6547ae49 100644 --- a/mvi_flutter/lib/main_firebase.dart +++ b/mvi_flutter/lib/main_firebase.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; @@ -13,12 +9,14 @@ import 'package:mvi_flutter_sample/mvi_app.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(MviApp( - todosRepository: TodosInteractor( - FirestoreReactiveTodosRepository(Firestore.instance), - ), - userInteractor: UserInteractor( - FirebaseUserRepository(FirebaseAuth.instance), + runApp( + MviApp( + todosRepository: TodosInteractor( + FirestoreReactiveTodosRepository(Firestore.instance), + ), + userInteractor: UserInteractor( + FirebaseUserRepository(FirebaseAuth.instance), + ), ), - )); + ); } diff --git a/mvi_flutter/lib/main_web.dart b/mvi_flutter/lib/main_web.dart index 1e80f1dd..932e0af0 100644 --- a/mvi_flutter/lib/main_web.dart +++ b/mvi_flutter/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:html'; @@ -15,19 +11,21 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(MviApp( - todosRepository: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'mvi_flutter', - WebKeyValueStore(window.localStorage), + runApp( + MviApp( + todosRepository: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'mvi_flutter', + WebKeyValueStore(window.localStorage), + ), ), ), ), + userInteractor: UserInteractor(AnonymousUserRepository()), ), - userInteractor: UserInteractor(AnonymousUserRepository()), - )); + ); } class AnonymousUserRepository implements UserRepository { diff --git a/mvi_flutter/lib/mvi_app.dart b/mvi_flutter/lib/mvi_app.dart index aea74421..66e114d6 100644 --- a/mvi_flutter/lib/mvi_app.dart +++ b/mvi_flutter/lib/mvi_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/dependency_injection.dart'; @@ -15,7 +11,7 @@ class MviApp extends StatelessWidget { final UserInteractor userInteractor; const MviApp({Key key, this.todosRepository, this.userInteractor}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { diff --git a/mvi_flutter/lib/screens/add_edit_screen.dart b/mvi_flutter/lib/screens/add_edit_screen.dart index 589487fa..c64ea07d 100644 --- a/mvi_flutter/lib/screens/add_edit_screen.dart +++ b/mvi_flutter/lib/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -13,12 +9,8 @@ class AddEditScreen extends StatefulWidget { final Function(Todo) addTodo; final Function(Todo) updateTodo; - AddEditScreen({ - Key key, - this.todo, - this.addTodo, - this.updateTodo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({Key key, this.todo, this.addTodo, this.updateTodo}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); @@ -72,14 +64,15 @@ class _AddEditScreenState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? ArchSampleLocalizations.of(context).saveChanges : ArchSampleLocalizations.of(context).addTodo, @@ -92,10 +85,7 @@ class _AddEditScreenState extends State { if (isEditing) { widget.updateTodo(widget.todo.copyWith(task: _task, note: _note)); } else { - widget.addTodo(Todo( - _task, - note: _note, - )); + widget.addTodo(Todo(_task, note: _note)); } Navigator.pop(context); diff --git a/mvi_flutter/lib/screens/detail_screen.dart b/mvi_flutter/lib/screens/detail_screen.dart index 535f1165..c8d5fd5a 100644 --- a/mvi_flutter/lib/screens/detail_screen.dart +++ b/mvi_flutter/lib/screens/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -14,11 +10,8 @@ class DetailScreen extends StatefulWidget { final String todoId; final MviPresenter Function(DetailView) initPresenter; - DetailScreen({ - Key key, - @required this.todoId, - this.initPresenter, - }) : super(key: key ?? ArchSampleKeys.todoDetailsScreen); + DetailScreen({Key key, @required this.todoId, this.initPresenter}) + : super(key: key ?? ArchSampleKeys.todoDetailsScreen); @override DetailScreenState createState() { @@ -72,7 +65,7 @@ class DetailScreenState extends State with DetailView { deleteTodo.add(todo.id); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -88,8 +81,9 @@ class DetailScreenState extends State with DetailView { value: todo.complete, key: ArchSampleKeys.detailsTodoItemCheckbox, onChanged: (complete) { - updateTodo - .add(todo.copyWith(complete: !todo.complete)); + updateTodo.add( + todo.copyWith(complete: !todo.complete), + ); }, ), ), @@ -98,10 +92,7 @@ class DetailScreenState extends State with DetailView { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -112,7 +103,7 @@ class DetailScreenState extends State with DetailView { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), diff --git a/mvi_flutter/lib/screens/home_screen.dart b/mvi_flutter/lib/screens/home_screen.dart index acfd63ca..0cc81dd5 100644 --- a/mvi_flutter/lib/screens/home_screen.dart +++ b/mvi_flutter/lib/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; @@ -19,7 +15,7 @@ class HomeScreen extends StatefulWidget { final MviPresenter Function(TodosListView) initPresenter; HomeScreen({Key key, this.initPresenter}) - : super(key: key ?? ArchSampleKeys.homeScreen); + : super(key: key ?? ArchSampleKeys.homeScreen); @override State createState() { @@ -84,18 +80,16 @@ class HomeScreenState extends State with TodosListView { ], ), body: modelSnapshot.data.loading - ? LoadingSpinner( - key: ArchSampleKeys.todosLoading, - ) + ? LoadingSpinner(key: ArchSampleKeys.todosLoading) : activeTab == AppTab.todos - ? TodoList( - loading: modelSnapshot.data.loading, - addTodo: addTodo.add, - updateTodo: updateTodo.add, - deleteTodo: deleteTodo.add, - todos: modelSnapshot.data?.visibleTodos ?? [], - ) - : StatsCounter(), + ? TodoList( + loading: modelSnapshot.data.loading, + addTodo: addTodo.add, + updateTodo: updateTodo.add, + deleteTodo: deleteTodo.add, + todos: modelSnapshot.data?.visibleTodos ?? [], + ) + : StatsCounter(), floatingActionButton: FloatingActionButton( key: ArchSampleKeys.addTodoFab, onPressed: () { diff --git a/mvi_flutter/lib/widgets/extra_actions_button.dart b/mvi_flutter/lib/widgets/extra_actions_button.dart index 1f6955b7..1701e8e0 100644 --- a/mvi_flutter/lib/widgets/extra_actions_button.dart +++ b/mvi_flutter/lib/widgets/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -36,9 +32,7 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.clearCompleted, value: ExtraAction.clearCompleted, - child: Text( - ArchSampleLocalizations.of(context).clearCompleted, - ), + child: Text(ArchSampleLocalizations.of(context).clearCompleted), ), ]; }, diff --git a/mvi_flutter/lib/widgets/filter_button.dart b/mvi_flutter/lib/widgets/filter_button.dart index dab3f906..aff332e8 100644 --- a/mvi_flutter/lib/widgets/filter_button.dart +++ b/mvi_flutter/lib/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; @@ -12,7 +8,7 @@ class FilterButton extends StatelessWidget { final bool isActive; FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { diff --git a/mvi_flutter/lib/widgets/loading.dart b/mvi_flutter/lib/widgets/loading.dart index 0fa4416a..440fc4f3 100644 --- a/mvi_flutter/lib/widgets/loading.dart +++ b/mvi_flutter/lib/widgets/loading.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; class LoadingSpinner extends StatelessWidget { @@ -9,8 +5,6 @@ class LoadingSpinner extends StatelessWidget { @override Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); + return Center(child: CircularProgressIndicator()); } } diff --git a/mvi_flutter/lib/widgets/stats_counter.dart b/mvi_flutter/lib/widgets/stats_counter.dart index 1804c569..e46952de 100644 --- a/mvi_flutter/lib/widgets/stats_counter.dart +++ b/mvi_flutter/lib/widgets/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -13,7 +9,7 @@ class StatsCounter extends StatefulWidget { final MviPresenter Function() initPresenter; StatsCounter({Key key, this.initPresenter}) - : super(key: key ?? ArchSampleKeys.statsCounter); + : super(key: key ?? ArchSampleKeys.statsCounter); @override StatsCounterState createState() { @@ -80,7 +76,7 @@ class StatsCounterState extends State { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.subhead, ), - ) + ), ], ), ); diff --git a/mvi_flutter/lib/widgets/todo_item.dart b/mvi_flutter/lib/widgets/todo_item.dart index 91490780..ac986536 100644 --- a/mvi_flutter/lib/widgets/todo_item.dart +++ b/mvi_flutter/lib/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/mvi_flutter/lib/widgets/todo_list.dart b/mvi_flutter/lib/widgets/todo_list.dart index eb447886..f630e633 100644 --- a/mvi_flutter/lib/widgets/todo_list.dart +++ b/mvi_flutter/lib/widgets/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -46,17 +42,19 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return DetailScreen(todoId: todo.id); - }, - ), - ).then((todo) { - if (todo is Todo) { - _showUndoSnackbar(context, todo); - } - }); + Navigator.of(context) + .push( + MaterialPageRoute( + builder: (_) { + return DetailScreen(todoId: todo.id); + }, + ), + ) + .then((todo) { + if (todo is Todo) { + _showUndoSnackbar(context, todo); + } + }); }, onCheckboxChanged: (complete) { updateTodo(todo.copyWith(complete: !todo.complete)); diff --git a/mvi_flutter/test/detail_screen_test.dart b/mvi_flutter/test/detail_screen_test.dart index f0fdf077..dbb45749 100644 --- a/mvi_flutter/test/detail_screen_test.dart +++ b/mvi_flutter/test/detail_screen_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -17,13 +13,8 @@ void main() { final todo = Todo('Hallo', note: 'Hello'); final presenter = MockDetailPresenter(todo); final screen = MaterialApp( - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - ], - home: DetailScreen( - todoId: todo.id, - initPresenter: (view) => presenter, - ), + localizationsDelegates: [ArchSampleLocalizationsDelegate()], + home: DetailScreen(todoId: todo.id, initPresenter: (view) => presenter), ); await tester.pumpWidget(screen); @@ -37,13 +28,8 @@ void main() { final todo = Todo('Hallo', note: 'Hello', complete: true); final presenter = MockDetailPresenter(todo); final screen = MaterialApp( - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - ], - home: DetailScreen( - todoId: todo.id, - initPresenter: (view) => presenter, - ), + localizationsDelegates: [ArchSampleLocalizationsDelegate()], + home: DetailScreen(todoId: todo.id, initPresenter: (view) => presenter), ); await tester.pumpWidget(screen); @@ -59,13 +45,8 @@ void main() { final todo = Todo('Hallo', note: 'Hello', complete: false); final presenter = MockDetailPresenter(todo); final screen = MaterialApp( - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - ], - home: DetailScreen( - todoId: todo.id, - initPresenter: (view) => presenter, - ), + localizationsDelegates: [ArchSampleLocalizationsDelegate()], + home: DetailScreen(todoId: todo.id, initPresenter: (view) => presenter), ); await tester.pumpWidget(screen); @@ -82,9 +63,7 @@ void main() { final presenter = MockDetailPresenter(todo); final key = GlobalKey(); final screen = MaterialApp( - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - ], + localizationsDelegates: [ArchSampleLocalizationsDelegate()], home: DetailScreen( key: key, todoId: todo.id, @@ -110,9 +89,7 @@ void main() { final presenter = MockDetailPresenter(todo); final key = GlobalKey(); final screen = MaterialApp( - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - ], + localizationsDelegates: [ArchSampleLocalizationsDelegate()], home: DetailScreen( key: key, todoId: todo.id, @@ -140,10 +117,7 @@ void main() { class MockDetailPresenter extends MviPresenter { MockDetailPresenter(Todo todo) - : super( - stream: Stream.fromIterable([todo]), - initialModel: todo, - ); + : super(stream: Stream.fromIterable([todo]), initialModel: todo); } test.Matcher get isChecked => CheckedMatcher(true); @@ -159,8 +133,9 @@ class CheckedMatcher extends test.Matcher { if (!wasCheckbox) { return description.replace('The item was not a checkbox'); } else { - return description - .replace('Checkbox was ${!checked} rather than $checked'); + return description.replace( + 'Checkbox was ${!checked} rather than $checked', + ); } } diff --git a/mvi_flutter/test_driver/todo_app.dart b/mvi_flutter/test_driver/todo_app.dart index 12a7577d..869b9a39 100644 --- a/mvi_flutter/test_driver/todo_app.dart +++ b/mvi_flutter/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_driver/driver_extension.dart'; import 'package:mvi_flutter_sample/main.dart' as app; diff --git a/mvi_flutter/test_driver/todo_app_test.dart b/mvi_flutter/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/mvi_flutter/test_driver/todo_app_test.dart +++ b/mvi_flutter/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/redux/lib/actions/actions.dart b/redux/lib/actions/actions.dart index b2161ec6..1b8b0efa 100644 --- a/redux/lib/actions/actions.dart +++ b/redux/lib/actions/actions.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux_sample/models/models.dart'; class ClearCompletedAction {} diff --git a/redux/lib/containers/active_tab.dart b/redux/lib/containers/active_tab.dart index 2a41419e..e9a8a03c 100644 --- a/redux/lib/containers/active_tab.dart +++ b/redux/lib/containers/active_tab.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_redux/flutter_redux.dart'; diff --git a/redux/lib/containers/add_todo.dart b/redux/lib/containers/add_todo.dart index ce53a7d8..f56a9088 100644 --- a/redux/lib/containers/add_todo.dart +++ b/redux/lib/containers/add_todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:flutter_redux/flutter_redux.dart'; @@ -18,10 +14,7 @@ class AddTodo extends StatelessWidget { return StoreConnector( converter: (Store store) { return (task, note) { - store.dispatch(AddTodoAction(Todo( - task, - note: note, - ))); + store.dispatch(AddTodoAction(Todo(task, note: note))); }; }, builder: (BuildContext context, OnSaveCallback onSave) { diff --git a/redux/lib/containers/app_loading.dart b/redux/lib/containers/app_loading.dart index ed6889ac..97c487b9 100644 --- a/redux/lib/containers/app_loading.dart +++ b/redux/lib/containers/app_loading.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; diff --git a/redux/lib/containers/edit_todo.dart b/redux/lib/containers/edit_todo.dart index b47ce68a..b9e93023 100644 --- a/redux/lib/containers/edit_todo.dart +++ b/redux/lib/containers/edit_todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/widgets.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:flutter_redux/flutter_redux.dart'; @@ -20,13 +16,9 @@ class EditTodo extends StatelessWidget { return StoreConnector( converter: (Store store) { return (task, note) { - store.dispatch(UpdateTodoAction( - todo.id, - todo.copyWith( - task: task, - note: note, - ), - )); + store.dispatch( + UpdateTodoAction(todo.id, todo.copyWith(task: task, note: note)), + ); }; }, builder: (BuildContext context, OnSaveCallback onSave) { diff --git a/redux/lib/containers/extra_actions_container.dart b/redux/lib/containers/extra_actions_container.dart index 9f47b18a..a85d762a 100644 --- a/redux/lib/containers/extra_actions_container.dart +++ b/redux/lib/containers/extra_actions_container.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; @@ -33,10 +29,7 @@ class _ViewModel { final Function(ExtraAction) onActionSelected; final bool allComplete; - _ViewModel({ - @required this.onActionSelected, - @required this.allComplete, - }); + _ViewModel({@required this.onActionSelected, @required this.allComplete}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/redux/lib/containers/filter_selector.dart b/redux/lib/containers/filter_selector.dart index c93eafab..74ce9a33 100644 --- a/redux/lib/containers/filter_selector.dart +++ b/redux/lib/containers/filter_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_redux/flutter_redux.dart'; @@ -35,10 +31,7 @@ class _ViewModel { final Function(VisibilityFilter) onFilterSelected; final VisibilityFilter activeFilter; - _ViewModel({ - @required this.onFilterSelected, - @required this.activeFilter, - }); + _ViewModel({@required this.onFilterSelected, @required this.activeFilter}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/redux/lib/containers/filtered_todos.dart b/redux/lib/containers/filtered_todos.dart index 5c5baf1e..106711d3 100644 --- a/redux/lib/containers/filtered_todos.dart +++ b/redux/lib/containers/filtered_todos.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; @@ -53,10 +49,9 @@ class _ViewModel { ), loading: store.state.isLoading, onCheckboxChanged: (todo, complete) { - store.dispatch(UpdateTodoAction( - todo.id, - todo.copyWith(complete: !todo.complete), - )); + store.dispatch( + UpdateTodoAction(todo.id, todo.copyWith(complete: !todo.complete)), + ); }, onRemove: (todo) { store.dispatch(DeleteTodoAction(todo.id)); diff --git a/redux/lib/containers/stats.dart b/redux/lib/containers/stats.dart index ec12c753..5fc25fa9 100644 --- a/redux/lib/containers/stats.dart +++ b/redux/lib/containers/stats.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; diff --git a/redux/lib/containers/tab_selector.dart b/redux/lib/containers/tab_selector.dart index d3feffb1..470b01e5 100644 --- a/redux/lib/containers/tab_selector.dart +++ b/redux/lib/containers/tab_selector.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -32,9 +28,11 @@ class TabSelector extends StatelessWidget { ? ArchSampleKeys.todoTab : ArchSampleKeys.statsTab, ), - title: Text(tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos), + title: Text( + tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, + ), ); }).toList(), ); @@ -47,10 +45,7 @@ class _ViewModel { final AppTab activeTab; final Function(int) onTabSelected; - _ViewModel({ - @required this.activeTab, - @required this.onTabSelected, - }); + _ViewModel({@required this.activeTab, @required this.onTabSelected}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/redux/lib/containers/todo_details.dart b/redux/lib/containers/todo_details.dart index 9804cb9f..c6bae809 100644 --- a/redux/lib/containers/todo_details.dart +++ b/redux/lib/containers/todo_details.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; @@ -52,10 +48,9 @@ class _ViewModel { todo: todo, onDelete: () => store.dispatch(DeleteTodoAction(todo.id)), toggleCompleted: (isComplete) { - store.dispatch(UpdateTodoAction( - todo.id, - todo.copyWith(complete: isComplete), - )); + store.dispatch( + UpdateTodoAction(todo.id, todo.copyWith(complete: isComplete)), + ); }, ); } diff --git a/redux/lib/localization.dart b/redux/lib/localization.dart index e0335b55..172fb647 100644 --- a/redux/lib/localization.dart +++ b/redux/lib/localization.dart @@ -1,17 +1,10 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; class ReduxLocalizations { static ReduxLocalizations of(BuildContext context) { - return Localizations.of( - context, - ReduxLocalizations, - ); + return Localizations.of(context, ReduxLocalizations); } String get appTitle => 'Redux Example'; diff --git a/redux/lib/main.dart b/redux/lib/main.dart index 71e9857c..2a4a7f43 100644 --- a/redux/lib/main.dart +++ b/redux/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:redux/redux.dart'; @@ -16,16 +12,20 @@ import 'models/app_state.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(ReduxApp( - store: Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware(LocalStorageRepository( - localStorage: KeyValueStorage( - 'redux', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + runApp( + ReduxApp( + store: Store( + appReducer, + initialState: AppState.loading(), + middleware: createStoreTodosMiddleware( + LocalStorageRepository( + localStorage: KeyValueStorage( + 'redux', + FlutterKeyValueStore(await SharedPreferences.getInstance()), + ), + ), ), - )), + ), ), - )); + ); } diff --git a/redux/lib/main_web.dart b/redux/lib/main_web.dart index ed0f9a4b..cc6e1ace 100644 --- a/redux/lib/main_web.dart +++ b/redux/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:html'; import 'package:flutter/material.dart'; @@ -16,16 +12,20 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(ReduxApp( - store: Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware(LocalStorageRepository( - localStorage: KeyValueStorage( - 'redux', - WebKeyValueStore(window.localStorage), + runApp( + ReduxApp( + store: Store( + appReducer, + initialState: AppState.loading(), + middleware: createStoreTodosMiddleware( + LocalStorageRepository( + localStorage: KeyValueStorage( + 'redux', + WebKeyValueStore(window.localStorage), + ), + ), ), - )), + ), ), - )); + ); } diff --git a/redux/lib/middleware/store_todos_middleware.dart b/redux/lib/middleware/store_todos_middleware.dart index 1b24e12f..f596c118 100644 --- a/redux/lib/middleware/store_todos_middleware.dart +++ b/redux/lib/middleware/store_todos_middleware.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; @@ -37,15 +33,14 @@ Middleware _createSaveTodos(TodosRepository repository) { Middleware _createLoadTodos(TodosRepository repository) { return (Store store, action, NextDispatcher next) { - repository.loadTodos().then( - (todos) { - store.dispatch( - TodosLoadedAction( - todos.map(Todo.fromEntity).toList(), - ), - ); - }, - ).catchError((_) => store.dispatch(TodosNotLoadedAction())); + repository + .loadTodos() + .then((todos) { + store.dispatch( + TodosLoadedAction(todos.map(Todo.fromEntity).toList()), + ); + }) + .catchError((_) => store.dispatch(TodosNotLoadedAction())); next(action); }; diff --git a/redux/lib/models/app_state.dart b/redux/lib/models/app_state.dart index 8374d226..062b9dff 100644 --- a/redux/lib/models/app_state.dart +++ b/redux/lib/models/app_state.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:meta/meta.dart'; import 'package:redux_sample/models/models.dart'; @@ -12,11 +8,12 @@ class AppState { final AppTab activeTab; final VisibilityFilter activeFilter; - AppState( - {this.isLoading = false, - this.todos = const [], - this.activeTab = AppTab.todos, - this.activeFilter = VisibilityFilter.all}); + AppState({ + this.isLoading = false, + this.todos = const [], + this.activeTab = AppTab.todos, + this.activeFilter = VisibilityFilter.all, + }); factory AppState.loading() => AppState(isLoading: true); diff --git a/redux/lib/models/app_tab.dart b/redux/lib/models/app_tab.dart index 096b6f56..8348dfcf 100644 --- a/redux/lib/models/app_tab.dart +++ b/redux/lib/models/app_tab.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum AppTab { todos, stats } diff --git a/redux/lib/models/extra_action.dart b/redux/lib/models/extra_action.dart index 236a7d0b..4ca0c02b 100644 --- a/redux/lib/models/extra_action.dart +++ b/redux/lib/models/extra_action.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum ExtraAction { toggleAllComplete, clearCompleted } diff --git a/redux/lib/models/models.dart b/redux/lib/models/models.dart index 6951f5b7..e2e948c9 100644 --- a/redux/lib/models/models.dart +++ b/redux/lib/models/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'app_state.dart'; export 'app_tab.dart'; export 'extra_action.dart'; diff --git a/redux/lib/models/todo.dart b/redux/lib/models/todo.dart index 025120dc..84dadd81 100644 --- a/redux/lib/models/todo.dart +++ b/redux/lib/models/todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:meta/meta.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -14,8 +10,8 @@ class Todo { final String task; Todo(this.task, {this.complete = false, String note = '', String id}) - : note = note ?? '', - id = id ?? Uuid().generateV4(); + : note = note ?? '', + id = id ?? Uuid().generateV4(); Todo copyWith({bool complete, String id, String note, String task}) { return Todo( diff --git a/redux/lib/models/visibility_filter.dart b/redux/lib/models/visibility_filter.dart index 11f11982..a47beca1 100644 --- a/redux/lib/models/visibility_filter.dart +++ b/redux/lib/models/visibility_filter.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum VisibilityFilter { all, active, completed } diff --git a/redux/lib/presentation/add_edit_screen.dart b/redux/lib/presentation/add_edit_screen.dart index a53fd98b..45ec2975 100644 --- a/redux/lib/presentation/add_edit_screen.dart +++ b/redux/lib/presentation/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -14,9 +10,12 @@ class AddEditScreen extends StatefulWidget { final OnSaveCallback onSave; final Todo todo; - AddEditScreen( - {Key key, @required this.onSave, @required this.isEditing, this.todo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({ + Key key, + @required this.onSave, + @required this.isEditing, + this.todo, + }) : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); } @@ -36,9 +35,7 @@ class _AddEditScreenState extends State { return Scaffold( appBar: AppBar( - title: Text( - isEditing ? localizations.editTodo : localizations.addTodo, - ), + title: Text(isEditing ? localizations.editTodo : localizations.addTodo), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -66,18 +63,17 @@ class _AddEditScreenState extends State { key: ArchSampleKeys.noteField, maxLines: 10, style: textTheme.subhead, - decoration: InputDecoration( - hintText: localizations.notesHint, - ), + decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { diff --git a/redux/lib/presentation/details_screen.dart b/redux/lib/presentation/details_screen.dart index 34162960..0b70e0d8 100644 --- a/redux/lib/presentation/details_screen.dart +++ b/redux/lib/presentation/details_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -36,7 +32,7 @@ class DetailsScreen extends StatelessWidget { onDelete(); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -61,10 +57,7 @@ class DetailsScreen extends StatelessWidget { tag: '${todo.id}__heroTag', child: Container( width: MediaQuery.of(context).size.width, - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -93,9 +86,7 @@ class DetailsScreen extends StatelessWidget { Navigator.of(context).push( MaterialPageRoute( builder: (context) { - return EditTodo( - todo: todo, - ); + return EditTodo(todo: todo); }, ), ); diff --git a/redux/lib/presentation/extra_actions_button.dart b/redux/lib/presentation/extra_actions_button.dart index 5170a554..8da29726 100644 --- a/redux/lib/presentation/extra_actions_button.dart +++ b/redux/lib/presentation/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; @@ -10,11 +6,8 @@ class ExtraActionsButton extends StatelessWidget { final PopupMenuItemSelected onSelected; final bool allComplete; - ExtraActionsButton({ - this.onSelected, - this.allComplete = false, - Key key, - }) : super(key: ArchSampleKeys.extraActionsButton); + ExtraActionsButton({this.onSelected, this.allComplete = false, Key key}) + : super(key: ArchSampleKeys.extraActionsButton); @override Widget build(BuildContext context) { @@ -24,9 +17,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete), + child: Text( + allComplete + ? ArchSampleLocalizations.of(context).markAllIncomplete + : ArchSampleLocalizations.of(context).markAllComplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/redux/lib/presentation/filter_button.dart b/redux/lib/presentation/filter_button.dart index 03345913..953b3b9a 100644 --- a/redux/lib/presentation/filter_button.dart +++ b/redux/lib/presentation/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; @@ -12,15 +8,14 @@ class FilterButton extends StatelessWidget { final bool visible; FilterButton({this.onSelected, this.activeFilter, this.visible, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { final defaultStyle = Theme.of(context).textTheme.body1; - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final button = _Button( onSelected: onSelected, activeFilter: activeFilter, diff --git a/redux/lib/presentation/home_screen.dart b/redux/lib/presentation/home_screen.dart index 22f8db27..5efcbac8 100644 --- a/redux/lib/presentation/home_screen.dart +++ b/redux/lib/presentation/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/containers/active_tab.dart'; diff --git a/redux/lib/presentation/loading_indicator.dart b/redux/lib/presentation/loading_indicator.dart index 822a4c32..e9884bb8 100644 --- a/redux/lib/presentation/loading_indicator.dart +++ b/redux/lib/presentation/loading_indicator.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; class LoadingIndicator extends StatelessWidget { @@ -9,8 +5,6 @@ class LoadingIndicator extends StatelessWidget { @override Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); + return Center(child: CircularProgressIndicator()); } } diff --git a/redux/lib/presentation/stats_counter.dart b/redux/lib/presentation/stats_counter.dart index 55fe82e5..1ce0f2b4 100644 --- a/redux/lib/presentation/stats_counter.dart +++ b/redux/lib/presentation/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -13,18 +9,17 @@ class StatsCounter extends StatelessWidget { final int numActive; final int numCompleted; - StatsCounter({ - @required this.numActive, - @required this.numCompleted, - }); + StatsCounter({@required this.numActive, @required this.numCompleted}); @override Widget build(BuildContext context) { - return AppLoading(builder: (context, loading) { - return loading - ? LoadingIndicator(key: Key('__statsLoading__')) - : _buildStats(context); - }); + return AppLoading( + builder: (context, loading) { + return loading + ? LoadingIndicator(key: Key('__statsLoading__')) + : _buildStats(context); + }, + ); } Widget _buildStats(BuildContext context) { @@ -61,7 +56,7 @@ class StatsCounter extends StatelessWidget { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.subhead, ), - ) + ), ], ), ); diff --git a/redux/lib/presentation/todo_item.dart b/redux/lib/presentation/todo_item.dart index b8d16386..6d4b2f2c 100644 --- a/redux/lib/presentation/todo_item.dart +++ b/redux/lib/presentation/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/redux/lib/presentation/todo_list.dart b/redux/lib/presentation/todo_list.dart index 75b76fb1..4cd9934a 100644 --- a/redux/lib/presentation/todo_list.dart +++ b/redux/lib/presentation/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -27,11 +23,13 @@ class TodoList extends StatelessWidget { @override Widget build(BuildContext context) { - return AppLoading(builder: (context, loading) { - return loading - ? LoadingIndicator(key: ArchSampleKeys.todosLoading) - : _buildListView(); - }); + return AppLoading( + builder: (context, loading) { + return loading + ? LoadingIndicator(key: ArchSampleKeys.todosLoading) + : _buildListView(); + }, + ); } ListView _buildListView() { @@ -58,7 +56,8 @@ class TodoList extends StatelessWidget { void _removeTodo(BuildContext context, Todo todo) { onRemove(todo); - Scaffold.of(context).showSnackBar(SnackBar( + Scaffold.of(context).showSnackBar( + SnackBar( duration: Duration(seconds: 2), content: Text( ArchSampleLocalizations.of(context).todoDeleted(todo.task), @@ -68,31 +67,34 @@ class TodoList extends StatelessWidget { action: SnackBarAction( label: ArchSampleLocalizations.of(context).undo, onPressed: () => onUndoRemove(todo), - ))); + ), + ), + ); } void _onTodoTap(BuildContext context, Todo todo) { Navigator.of(context) - .push(MaterialPageRoute( - builder: (_) => TodoDetails(id: todo.id), - )) + .push(MaterialPageRoute(builder: (_) => TodoDetails(id: todo.id))) .then((removedTodo) { - if (removedTodo != null) { - Scaffold.of(context).showSnackBar(SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - onUndoRemove(todo); - }, - ))); - } - }); + if (removedTodo != null) { + Scaffold.of(context).showSnackBar( + SnackBar( + key: ArchSampleKeys.snackbar, + duration: Duration(seconds: 2), + content: Text( + ArchSampleLocalizations.of(context).todoDeleted(todo.task), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + action: SnackBarAction( + label: ArchSampleLocalizations.of(context).undo, + onPressed: () { + onUndoRemove(todo); + }, + ), + ), + ); + } + }); } } diff --git a/redux/lib/presentation/typedefs.dart b/redux/lib/presentation/typedefs.dart index ace7d67f..95c20281 100644 --- a/redux/lib/presentation/typedefs.dart +++ b/redux/lib/presentation/typedefs.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux_sample/models/models.dart'; typedef TodoAdder = void Function(Todo todo); diff --git a/redux/lib/reducers/app_state_reducer.dart b/redux/lib/reducers/app_state_reducer.dart index d02e7347..ad6f1cc7 100644 --- a/redux/lib/reducers/app_state_reducer.dart +++ b/redux/lib/reducers/app_state_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux_sample/models/models.dart'; import 'package:redux_sample/reducers/loading_reducer.dart'; import 'package:redux_sample/reducers/tabs_reducer.dart'; diff --git a/redux/lib/reducers/loading_reducer.dart b/redux/lib/reducers/loading_reducer.dart index 10659117..d0ce9533 100644 --- a/redux/lib/reducers/loading_reducer.dart +++ b/redux/lib/reducers/loading_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; diff --git a/redux/lib/reducers/tabs_reducer.dart b/redux/lib/reducers/tabs_reducer.dart index 19a61051..86a6ec25 100644 --- a/redux/lib/reducers/tabs_reducer.dart +++ b/redux/lib/reducers/tabs_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; diff --git a/redux/lib/reducers/todos_reducer.dart b/redux/lib/reducers/todos_reducer.dart index c767e25b..d74e8daa 100644 --- a/redux/lib/reducers/todos_reducer.dart +++ b/redux/lib/reducers/todos_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; diff --git a/redux/lib/reducers/visibility_reducer.dart b/redux/lib/reducers/visibility_reducer.dart index 43853a7c..974f3e25 100644 --- a/redux/lib/reducers/visibility_reducer.dart +++ b/redux/lib/reducers/visibility_reducer.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; @@ -11,6 +7,8 @@ final visibilityReducer = combineReducers([ ]); VisibilityFilter _activeFilterReducer( - VisibilityFilter activeFilter, UpdateFilterAction action) { + VisibilityFilter activeFilter, + UpdateFilterAction action, +) { return action.newFilter; } diff --git a/redux/lib/selectors/selectors.dart b/redux/lib/selectors/selectors.dart index b904dad7..9d7b3874 100644 --- a/redux/lib/selectors/selectors.dart +++ b/redux/lib/selectors/selectors.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; diff --git a/redux/test/middleware_test.dart b/redux/test/middleware_test.dart index a5460d4e..0391f06b 100644 --- a/redux/test/middleware_test.dart +++ b/redux/test/middleware_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:redux/redux.dart'; @@ -22,9 +18,7 @@ void main() { initialState: AppState.loading(), middleware: createStoreTodosMiddleware(repository), ); - final todos = [ - TodoEntity('Moin', '1', 'Note', false), - ]; + final todos = [TodoEntity('Moin', '1', 'Note', false)]; when(repository.loadTodos()).thenAnswer((_) => Future.value(todos)); diff --git a/redux/test/reducer_test.dart b/redux/test/reducer_test.dart index d22cfa55..a3bc5130 100644 --- a/redux/test/reducer_test.dart +++ b/redux/test/reducer_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; diff --git a/redux/test/selectors_test.dart b/redux/test/selectors_test.dart index 0e14a591..9c287417 100644 --- a/redux/test/selectors_test.dart +++ b/redux/test/selectors_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_test/flutter_test.dart'; import 'package:quiver/core.dart'; import 'package:redux_sample/models/models.dart'; @@ -10,31 +6,19 @@ import 'package:redux_sample/selectors/selectors.dart'; void main() { group('Selectors', () { test('should calculate the number of active todos', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; expect(numActiveSelector(todos), 2); }); test('should calculate the number of completed todos', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; expect(numCompletedSelector(todos), 1); }); test('should return all todos if the VisibilityFilter is all', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; expect(filteredTodosSelector(todos, VisibilityFilter.all), todos); }); @@ -43,11 +27,7 @@ void main() { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; expect(filteredTodosSelector(todos, VisibilityFilter.active), [ todo1, @@ -55,29 +35,25 @@ void main() { ]); }); - test('should return completed todos if the VisibilityFilter is completed', - () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + test( + 'should return completed todos if the VisibilityFilter is completed', + () { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; - expect(filteredTodosSelector(todos, VisibilityFilter.completed), [todo3]); - }); + expect(filteredTodosSelector(todos, VisibilityFilter.completed), [ + todo3, + ]); + }, + ); test('should return an Optional todo based on id', () { final todo1 = Todo('a', id: '1'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; expect(todoSelector(todos, '1'), Optional.of(todo1)); }); @@ -86,11 +62,7 @@ void main() { final todo1 = Todo('a', id: '1'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [todo1, todo2, todo3]; expect(todoSelector(todos, '2'), Optional.absent()); }); diff --git a/redux/test_driver/todo_app.dart b/redux/test_driver/todo_app.dart index 8f0a0f45..2d0e71be 100644 --- a/redux/test_driver/todo_app.dart +++ b/redux/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_driver/driver_extension.dart'; import 'package:redux_sample/main.dart' as app; diff --git a/redux/test_driver/todo_app_test.dart b/redux/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/redux/test_driver/todo_app_test.dart +++ b/redux/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/scoped_model/lib/app.dart b/scoped_model/lib/app.dart index 1828cf85..cace6e4a 100644 --- a/scoped_model/lib/app.dart +++ b/scoped_model/lib/app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:meta/meta.dart'; import 'package:scoped_model/scoped_model.dart'; @@ -15,9 +11,7 @@ import 'package:todos_repository_core/todos_repository_core.dart'; class ScopedModelApp extends StatelessWidget { final TodosRepository repository; - ScopedModelApp({ - @required this.repository, - }); + ScopedModelApp({@required this.repository}); @override Widget build(BuildContext context) { @@ -36,9 +30,7 @@ class ScopedModelApp extends StatelessWidget { ); return ScopedModel( - model: TodoListModel( - repository: repository, - ), + model: TodoListModel(repository: repository), child: app, ); } diff --git a/scoped_model/lib/localization.dart b/scoped_model/lib/localization.dart index e2b43d69..27c9382c 100644 --- a/scoped_model/lib/localization.dart +++ b/scoped_model/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -9,7 +5,9 @@ import 'package:flutter/material.dart'; class ScopedModelLocalizations { static ScopedModelLocalizations of(BuildContext context) { return Localizations.of( - context, ScopedModelLocalizations); + context, + ScopedModelLocalizations, + ); } String get appTitle => 'scoped_model example'; diff --git a/scoped_model/lib/main.dart b/scoped_model/lib/main.dart index d224962e..103a017c 100644 --- a/scoped_model/lib/main.dart +++ b/scoped_model/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:scoped_model_sample/app.dart'; @@ -17,7 +13,5 @@ void main() { ), ); - runApp(ScopedModelApp( - repository: todoRepo, - )); + runApp(ScopedModelApp(repository: todoRepo)); } diff --git a/scoped_model/lib/models.dart b/scoped_model/lib/models.dart index 699321cb..b4ab4a49 100644 --- a/scoped_model/lib/models.dart +++ b/scoped_model/lib/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -16,7 +12,7 @@ class Todo { final String task; Todo(this.task, {this.complete = false, this.note = '', String id}) - : id = id ?? Uuid().generateV4(); + : id = id ?? Uuid().generateV4(); @override int get hashCode => diff --git a/scoped_model/lib/screens/add_edit_screen.dart b/scoped_model/lib/screens/add_edit_screen.dart index d50679b0..ac994d7e 100644 --- a/scoped_model/lib/screens/add_edit_screen.dart +++ b/scoped_model/lib/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -13,10 +9,8 @@ import 'package:scoped_model_sample/todo_list_model.dart'; class AddEditScreen extends StatefulWidget { final String todoId; - AddEditScreen({ - Key key, - this.todoId, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({Key key, this.todoId}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); } @@ -36,9 +30,7 @@ class _AddEditScreenState extends State { return Scaffold( appBar: AppBar( - title: Text( - isEditing ? localizations.editTodo : localizations.addTodo, - ), + title: Text(isEditing ? localizations.editTodo : localizations.addTodo), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -77,7 +69,7 @@ class _AddEditScreenState extends State { hintText: localizations.notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ); }, @@ -85,8 +77,9 @@ class _AddEditScreenState extends State { ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { diff --git a/scoped_model/lib/screens/detail_screen.dart b/scoped_model/lib/screens/detail_screen.dart index 3949ec68..fec07db3 100644 --- a/scoped_model/lib/screens/detail_screen.dart +++ b/scoped_model/lib/screens/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -13,9 +9,8 @@ import 'package:scoped_model_sample/todo_list_model.dart'; class DetailScreen extends StatelessWidget { final String todoId; - DetailScreen({ - @required this.todoId, - }) : super(key: ArchSampleKeys.todoDetailsScreen); + DetailScreen({@required this.todoId}) + : super(key: ArchSampleKeys.todoDetailsScreen); @override Widget build(BuildContext context) { @@ -35,7 +30,7 @@ class DetailScreen extends StatelessWidget { model.removeTodo(todo); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -60,10 +55,7 @@ class DetailScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -74,7 +66,7 @@ class DetailScreen extends StatelessWidget { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), diff --git a/scoped_model/lib/screens/home_screen.dart b/scoped_model/lib/screens/home_screen.dart index 60fa8e2f..ed333ba5 100644 --- a/scoped_model/lib/screens/home_screen.dart +++ b/scoped_model/lib/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model_sample/localization.dart'; @@ -30,7 +26,7 @@ class HomeScreenState extends State { title: Text(ScopedModelLocalizations.of(context).appTitle), actions: [ FilterButton(isActive: _activeTab == AppTab.todos), - ExtraActionsButton() + ExtraActionsButton(), ], ), body: _activeTab == AppTab.todos ? TodoList() : StatsCounter(), diff --git a/scoped_model/lib/todo_list_model.dart b/scoped_model/lib/todo_list_model.dart index a4ec9860..da5d8ace 100644 --- a/scoped_model/lib/todo_list_model.dart +++ b/scoped_model/lib/todo_list_model.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/widgets.dart'; @@ -31,7 +27,7 @@ class TodoListModel extends Model { bool get isLoading => _isLoading; TodoListModel({@required this.repository, VisibilityFilter activeFilter}) - : _activeFilter = activeFilter ?? VisibilityFilter.all; + : _activeFilter = activeFilter ?? VisibilityFilter.all; /// Wraps [ScopedModel.of] for this [Model]. See [ScopedModel.of] for more static TodoListModel of(BuildContext context) => @@ -51,28 +47,31 @@ class TodoListModel extends Model { _isLoading = true; notifyListeners(); - return repository.loadTodos().then((loadedTodos) { - _todos = loadedTodos.map(Todo.fromEntity).toList(); - _isLoading = false; - notifyListeners(); - }).catchError((err) { - _isLoading = false; - _todos = []; - notifyListeners(); - }); + return repository + .loadTodos() + .then((loadedTodos) { + _todos = loadedTodos.map(Todo.fromEntity).toList(); + _isLoading = false; + notifyListeners(); + }) + .catchError((err) { + _isLoading = false; + _todos = []; + notifyListeners(); + }); } List get filteredTodos => _todos.where((todo) { - switch (activeFilter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); + switch (activeFilter) { + case VisibilityFilter.active: + return !todo.complete; + case VisibilityFilter.completed: + return todo.complete; + case VisibilityFilter.all: + default: + return true; + } + }).toList(); void clearCompleted() { _todos.removeWhere((todo) => todo.complete); diff --git a/scoped_model/lib/widgets/extra_actions_button.dart b/scoped_model/lib/widgets/extra_actions_button.dart index 4a024228..5c975454 100644 --- a/scoped_model/lib/widgets/extra_actions_button.dart +++ b/scoped_model/lib/widgets/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; @@ -9,38 +5,39 @@ import 'package:scoped_model_sample/models.dart'; import 'package:scoped_model_sample/todo_list_model.dart'; class ExtraActionsButton extends StatelessWidget { - ExtraActionsButton({ - Key key, - }) : super(key: key); + ExtraActionsButton({Key key}) : super(key: key); @override Widget build(BuildContext context) { return ScopedModelDescendant( - builder: (BuildContext context, Widget child, TodoListModel model) { - return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, - onSelected: (action) { - if (action == ExtraAction.toggleAllComplete) { - model.toggleAll(); - } else if (action == ExtraAction.clearCompleted) { - model.clearCompleted(); - } - }, - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.toggleAll, - value: ExtraAction.toggleAllComplete, - child: Text(model.todos.any((it) => !it.complete) - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete), - ), - PopupMenuItem( - key: ArchSampleKeys.clearCompleted, - value: ExtraAction.clearCompleted, - child: Text(ArchSampleLocalizations.of(context).clearCompleted), - ), - ], - ); - }); + builder: (BuildContext context, Widget child, TodoListModel model) { + return PopupMenuButton( + key: ArchSampleKeys.extraActionsButton, + onSelected: (action) { + if (action == ExtraAction.toggleAllComplete) { + model.toggleAll(); + } else if (action == ExtraAction.clearCompleted) { + model.clearCompleted(); + } + }, + itemBuilder: (BuildContext context) => >[ + PopupMenuItem( + key: ArchSampleKeys.toggleAll, + value: ExtraAction.toggleAllComplete, + child: Text( + model.todos.any((it) => !it.complete) + ? ArchSampleLocalizations.of(context).markAllIncomplete + : ArchSampleLocalizations.of(context).markAllComplete, + ), + ), + PopupMenuItem( + key: ArchSampleKeys.clearCompleted, + value: ExtraAction.clearCompleted, + child: Text(ArchSampleLocalizations.of(context).clearCompleted), + ), + ], + ); + }, + ); } } diff --git a/scoped_model/lib/widgets/filter_button.dart b/scoped_model/lib/widgets/filter_button.dart index 690ee73b..bd81773d 100644 --- a/scoped_model/lib/widgets/filter_button.dart +++ b/scoped_model/lib/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; @@ -34,11 +30,12 @@ class FilterButton extends StatelessWidget { } List> _items( - BuildContext context, TodoListModel model) { - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + BuildContext context, + TodoListModel model, + ) { + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final defaultStyle = Theme.of(context).textTheme.body1; return [ diff --git a/scoped_model/lib/widgets/stats_counter.dart b/scoped_model/lib/widgets/stats_counter.dart index 9a9df978..f9e6c865 100644 --- a/scoped_model/lib/widgets/stats_counter.dart +++ b/scoped_model/lib/widgets/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -20,46 +16,47 @@ class StatsCounter extends StatelessWidget { Widget build(BuildContext context) { return Center( child: ScopedModelDescendant( - builder: (context, child, model) { - var numCompleted = model.todos.where(isCompleted).toList().length; - var numActive = model.todos.where(isActive).toList().length; + builder: (context, child, model) { + var numCompleted = model.todos.where(isCompleted).toList().length; + var numActive = model.todos.where(isActive).toList().length; - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).completedTodos, + style: Theme.of(context).textTheme.title, + ), ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numCompleted', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + Padding( + padding: EdgeInsets.only(bottom: 24.0), + child: Text( + '$numCompleted', + key: ArchSampleKeys.statsNumCompleted, + style: Theme.of(context).textTheme.subhead, + ), ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + Padding( + padding: EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).activeTodos, + style: Theme.of(context).textTheme.title, + ), ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numActive', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + Padding( + padding: EdgeInsets.only(bottom: 24.0), + child: Text( + '$numActive', + key: ArchSampleKeys.statsNumActive, + style: Theme.of(context).textTheme.subhead, + ), ), - ) - ], - ); - }), + ], + ); + }, + ), ); } } diff --git a/scoped_model/lib/widgets/todo_item.dart b/scoped_model/lib/widgets/todo_item.dart index c4985e50..6cd3cd95 100644 --- a/scoped_model/lib/widgets/todo_item.dart +++ b/scoped_model/lib/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/scoped_model/lib/widgets/todo_list.dart b/scoped_model/lib/widgets/todo_list.dart index 2e07afea..172355f2 100644 --- a/scoped_model/lib/widgets/todo_list.dart +++ b/scoped_model/lib/widgets/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; @@ -26,9 +22,7 @@ class TodoList extends StatelessWidget { Center get _buildLoading { return Center( - child: CircularProgressIndicator( - key: ArchSampleKeys.todosLoading, - ), + child: CircularProgressIndicator(key: ArchSampleKeys.todosLoading), ); } @@ -47,19 +41,19 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return DetailScreen( - todoId: todo.id, - ); - }, - ), - ).then((todo) { - if (todo is Todo) { - _showUndoSnackbar(context, todo); - } - }); + Navigator.of(context) + .push( + MaterialPageRoute( + builder: (_) { + return DetailScreen(todoId: todo.id); + }, + ), + ) + .then((todo) { + if (todo is Todo) { + _showUndoSnackbar(context, todo); + } + }); }, onCheckboxChanged: (complete) { var toggled = todo.copy(complete: !todo.complete); diff --git a/scoped_model/lib/widgets/typedefs.dart b/scoped_model/lib/widgets/typedefs.dart index 838fa8af..a4ad305b 100644 --- a/scoped_model/lib/widgets/typedefs.dart +++ b/scoped_model/lib/widgets/typedefs.dart @@ -1,17 +1,14 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:scoped_model_sample/models.dart'; typedef TodoAdder = void Function(Todo todo); typedef TodoRemover = void Function(Todo todo); -typedef TodoUpdater = void Function( - Todo todo, { - bool complete, - String id, - String note, - String task, -}); +typedef TodoUpdater = + void Function( + Todo todo, { + bool complete, + String id, + String note, + String task, + }); diff --git a/scoped_model/test/app_state_test.dart b/scoped_model/test/app_state_test.dart index 53c6fb51..3c4c184a 100644 --- a/scoped_model/test/app_state_test.dart +++ b/scoped_model/test/app_state_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:scoped_model_sample/models.dart'; @@ -13,11 +9,12 @@ void main() { group('TodoListModel', () { test('should check if there are completed todos', () async { final model = TodoListModel( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); + repository: MockRepository([ + Todo('a'), + Todo('b'), + Todo('c', complete: true), + ]), + ); await model.loadTodos(); expect(model.todos.any((it) => it.complete), true); @@ -25,11 +22,12 @@ void main() { test('should calculate the number of active todos', () async { final model = TodoListModel( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); + repository: MockRepository([ + Todo('a'), + Todo('b'), + Todo('c', complete: true), + ]), + ); await model.loadTodos(); expect(model.todos.where((it) => !it.complete).toList().length, 2); @@ -37,105 +35,81 @@ void main() { test('should calculate the number of completed todos', () async { final model = TodoListModel( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); + repository: MockRepository([ + Todo('a'), + Todo('b'), + Todo('c', complete: true), + ]), + ); await model.loadTodos(); expect(model.todos.where((it) => it.complete).toList().length, 1); }); test('should return all todos if the VisibilityFilter is all', () async { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; - final model = TodoListModel( - repository: MockRepository(todos), - activeFilter: VisibilityFilter.all); - await model.loadTodos(); - - expect(model.filteredTodos, todos); - }); - - test('should return active todos if the VisibilityFilter is active', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; final model = TodoListModel( repository: MockRepository(todos), - activeFilter: VisibilityFilter.active, + activeFilter: VisibilityFilter.all, ); await model.loadTodos(); - expect(model.filteredTodos, [ - todo1, - todo2, - ]); + expect(model.filteredTodos, todos); }); - test('should return completed todos if the VisibilityFilter is completed', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final model = TodoListModel( - repository: MockRepository(todos), - activeFilter: VisibilityFilter.completed, - ); - await model.loadTodos(); + test( + 'should return active todos if the VisibilityFilter is active', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel( + repository: MockRepository(todos), + activeFilter: VisibilityFilter.active, + ); + await model.loadTodos(); + + expect(model.filteredTodos, [todo1, todo2]); + }, + ); + + test( + 'should return completed todos if the VisibilityFilter is completed', + () async { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel( + repository: MockRepository(todos), + activeFilter: VisibilityFilter.completed, + ); + await model.loadTodos(); - expect(model.filteredTodos, [todo3]); - }); + expect(model.filteredTodos, [todo3]); + }, + ); test('should clear the completed todos', () async { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final model = TodoListModel( - repository: MockRepository(todos), - ); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel(repository: MockRepository(todos)); await model.loadTodos(); model.clearCompleted(); - expect(model.todos, [ - todo1, - todo2, - ]); + expect(model.todos, [todo1, todo2]); }); test('toggle all as complete or incomplete', () async { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final model = TodoListModel( - repository: MockRepository(todos), - ); + final todos = [todo1, todo2, todo3]; + final model = TodoListModel(repository: MockRepository(todos)); await model.loadTodos(); // Toggle all complete @@ -153,7 +127,7 @@ class MockRepository extends TodosRepository { List entities; MockRepository(List todos) - : entities = todos.map((it) => it.toEntity()).toList(); + : entities = todos.map((it) => it.toEntity()).toList(); @override Future> loadTodos() { diff --git a/scoped_model/test_driver/todo_app.dart b/scoped_model/test_driver/todo_app.dart index c1ac2d2e..4dd62e57 100644 --- a/scoped_model/test_driver/todo_app.dart +++ b/scoped_model/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:flutter_driver/driver_extension.dart'; import 'package:scoped_model_sample/main.dart' as app; diff --git a/scoped_model/test_driver/todo_app_test.dart b/scoped_model/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/scoped_model/test_driver/todo_app_test.dart +++ b/scoped_model/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/simple_bloc_flutter/lib/app.dart b/simple_bloc_flutter/lib/app.dart index 127bfba9..b05ecbed 100644 --- a/simple_bloc_flutter/lib/app.dart +++ b/simple_bloc_flutter/lib/app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:simple_bloc_flutter_sample/dependency_injection.dart'; import 'package:simple_bloc_flutter_sample/localization.dart'; @@ -16,11 +12,8 @@ class SimpleBlocApp extends StatelessWidget { final TodosInteractor todosInteractor; final UserRepository userRepository; - const SimpleBlocApp({ - Key key, - this.todosInteractor, - this.userRepository, - }) : super(key: key); + const SimpleBlocApp({Key key, this.todosInteractor, this.userRepository}) + : super(key: key); @override Widget build(BuildContext context) { diff --git a/simple_bloc_flutter/lib/dependency_injection.dart b/simple_bloc_flutter/lib/dependency_injection.dart index efb8f974..9b6e4604 100644 --- a/simple_bloc_flutter/lib/dependency_injection.dart +++ b/simple_bloc_flutter/lib/dependency_injection.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // A poor man's DI. This should be replaced by a proper solution once they // are more stable. library dependency_injector; diff --git a/simple_bloc_flutter/lib/localization.dart b/simple_bloc_flutter/lib/localization.dart index 855211d0..23605d69 100644 --- a/simple_bloc_flutter/lib/localization.dart +++ b/simple_bloc_flutter/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/simple_bloc_flutter/lib/main.dart b/simple_bloc_flutter/lib/main.dart index 722f66da..260f97d1 100644 --- a/simple_bloc_flutter/lib/main.dart +++ b/simple_bloc_flutter/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/widgets.dart'; @@ -15,19 +11,21 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(SimpleBlocApp( - todosInteractor: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'simple_bloc', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + runApp( + SimpleBlocApp( + todosInteractor: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'simple_bloc', + FlutterKeyValueStore(await SharedPreferences.getInstance()), + ), ), ), ), + userRepository: AnonymousUserRepository(), ), - userRepository: AnonymousUserRepository(), - )); + ); } class AnonymousUserRepository implements UserRepository { diff --git a/simple_bloc_flutter/lib/main_firebase.dart b/simple_bloc_flutter/lib/main_firebase.dart index 76562476..72f24926 100644 --- a/simple_bloc_flutter/lib/main_firebase.dart +++ b/simple_bloc_flutter/lib/main_firebase.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; @@ -13,10 +9,12 @@ import 'package:simple_blocs/simple_blocs.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - runApp(SimpleBlocApp( - todosInteractor: TodosInteractor( - FirestoreReactiveTodosRepository(Firestore.instance), + runApp( + SimpleBlocApp( + todosInteractor: TodosInteractor( + FirestoreReactiveTodosRepository(Firestore.instance), + ), + userRepository: FirebaseUserRepository(FirebaseAuth.instance), ), - userRepository: FirebaseUserRepository(FirebaseAuth.instance), - )); + ); } diff --git a/simple_bloc_flutter/lib/main_web.dart b/simple_bloc_flutter/lib/main_web.dart index 079f68f6..64ab02b3 100644 --- a/simple_bloc_flutter/lib/main_web.dart +++ b/simple_bloc_flutter/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:html'; @@ -15,19 +11,21 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runApp(SimpleBlocApp( - todosInteractor: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'simple_bloc', - WebKeyValueStore(window.localStorage), + runApp( + SimpleBlocApp( + todosInteractor: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'simple_bloc', + WebKeyValueStore(window.localStorage), + ), ), ), ), + userRepository: AnonymousUserRepository(), ), - userRepository: AnonymousUserRepository(), - )); + ); } class AnonymousUserRepository implements UserRepository { diff --git a/simple_bloc_flutter/lib/screens/add_edit_screen.dart b/simple_bloc_flutter/lib/screens/add_edit_screen.dart index c73ddaae..9f95eecb 100644 --- a/simple_bloc_flutter/lib/screens/add_edit_screen.dart +++ b/simple_bloc_flutter/lib/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -13,12 +9,8 @@ class AddEditScreen extends StatefulWidget { final Function(Todo) addTodo; final Function(Todo) updateTodo; - AddEditScreen({ - Key key, - this.todo, - this.addTodo, - this.updateTodo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({Key key, this.todo, this.addTodo, this.updateTodo}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); @@ -72,14 +64,15 @@ class _AddEditScreenState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? ArchSampleLocalizations.of(context).saveChanges : ArchSampleLocalizations.of(context).addTodo, @@ -92,10 +85,7 @@ class _AddEditScreenState extends State { if (isEditing) { widget.updateTodo(widget.todo.copyWith(task: _task, note: _note)); } else { - widget.addTodo(Todo( - _task, - note: _note, - )); + widget.addTodo(Todo(_task, note: _note)); } Navigator.pop(context); diff --git a/simple_bloc_flutter/lib/screens/detail_screen.dart b/simple_bloc_flutter/lib/screens/detail_screen.dart index 75b23238..dacfebf7 100644 --- a/simple_bloc_flutter/lib/screens/detail_screen.dart +++ b/simple_bloc_flutter/lib/screens/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -13,10 +9,8 @@ class DetailScreen extends StatefulWidget { final String todoId; final TodoBloc Function() initBloc; - DetailScreen({ - @required this.todoId, - @required this.initBloc, - }) : super(key: ArchSampleKeys.todoDetailsScreen); + DetailScreen({@required this.todoId, @required this.initBloc}) + : super(key: ArchSampleKeys.todoDetailsScreen); @override DetailScreenState createState() { @@ -59,7 +53,7 @@ class DetailScreenState extends State { todoBloc.deleteTodo(todo.id); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -76,7 +70,8 @@ class DetailScreenState extends State { key: ArchSampleKeys.detailsTodoItemCheckbox, onChanged: (complete) { todoBloc.updateTodo( - todo.copyWith(complete: !todo.complete)); + todo.copyWith(complete: !todo.complete), + ); }, ), ), @@ -85,10 +80,7 @@ class DetailScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -99,7 +91,7 @@ class DetailScreenState extends State { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), diff --git a/simple_bloc_flutter/lib/screens/home_screen.dart b/simple_bloc_flutter/lib/screens/home_screen.dart index 76329d09..bea767df 100644 --- a/simple_bloc_flutter/lib/screens/home_screen.dart +++ b/simple_bloc_flutter/lib/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; @@ -25,7 +21,7 @@ class HomeScreen extends StatefulWidget { final UserRepository repository; HomeScreen({@required this.repository}) - : super(key: ArchSampleKeys.homeScreen); + : super(key: ArchSampleKeys.homeScreen); @override State createState() { @@ -73,14 +69,12 @@ class HomeScreenState extends State { ), body: userSnapshot.hasData ? activeTabSnapshot.data == AppTab.todos - ? TodoList() - : StatsCounter( - buildBloc: () => - StatsBloc(Injector.of(context).todosInteractor), - ) - : LoadingSpinner( - key: ArchSampleKeys.todosLoading, - ), + ? TodoList() + : StatsCounter( + buildBloc: () => + StatsBloc(Injector.of(context).todosInteractor), + ) + : LoadingSpinner(key: ArchSampleKeys.todosLoading), floatingActionButton: FloatingActionButton( key: ArchSampleKeys.addTodoFab, onPressed: () { @@ -141,10 +135,7 @@ class HomeScreenState extends State { todosBloc.allComplete, todosBloc.hasCompletedTodos, (allComplete, hasCompletedTodos) { - return ExtraActionsButtonViewModel( - allComplete, - hasCompletedTodos, - ); + return ExtraActionsButtonViewModel(allComplete, hasCompletedTodos); }, ), builder: (context, snapshot) { @@ -160,7 +151,7 @@ class HomeScreenState extends State { }, ); }, - ) + ), ]; } } diff --git a/simple_bloc_flutter/lib/widgets/extra_actions_button.dart b/simple_bloc_flutter/lib/widgets/extra_actions_button.dart index 1f6955b7..1701e8e0 100644 --- a/simple_bloc_flutter/lib/widgets/extra_actions_button.dart +++ b/simple_bloc_flutter/lib/widgets/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -36,9 +32,7 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.clearCompleted, value: ExtraAction.clearCompleted, - child: Text( - ArchSampleLocalizations.of(context).clearCompleted, - ), + child: Text(ArchSampleLocalizations.of(context).clearCompleted), ), ]; }, diff --git a/simple_bloc_flutter/lib/widgets/filter_button.dart b/simple_bloc_flutter/lib/widgets/filter_button.dart index a0bf6120..6aa4f8d2 100644 --- a/simple_bloc_flutter/lib/widgets/filter_button.dart +++ b/simple_bloc_flutter/lib/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:simple_blocs/simple_blocs.dart'; @@ -12,7 +8,7 @@ class FilterButton extends StatelessWidget { final bool isActive; FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { diff --git a/simple_bloc_flutter/lib/widgets/loading.dart b/simple_bloc_flutter/lib/widgets/loading.dart index 0fa4416a..440fc4f3 100644 --- a/simple_bloc_flutter/lib/widgets/loading.dart +++ b/simple_bloc_flutter/lib/widgets/loading.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; class LoadingSpinner extends StatelessWidget { @@ -9,8 +5,6 @@ class LoadingSpinner extends StatelessWidget { @override Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); + return Center(child: CircularProgressIndicator()); } } diff --git a/simple_bloc_flutter/lib/widgets/stats_counter.dart b/simple_bloc_flutter/lib/widgets/stats_counter.dart index 17d2d98d..00e703f7 100644 --- a/simple_bloc_flutter/lib/widgets/stats_counter.dart +++ b/simple_bloc_flutter/lib/widgets/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -12,7 +8,7 @@ class StatsCounter extends StatefulWidget { final StatsBloc Function() buildBloc; StatsCounter({Key key, @required this.buildBloc}) - : super(key: key ?? ArchSampleKeys.statsCounter); + : super(key: key ?? ArchSampleKeys.statsCounter); @override StatsCounterState createState() { @@ -72,7 +68,7 @@ class StatsCounterState extends State { ); }, ), - ) + ), ], ), ); diff --git a/simple_bloc_flutter/lib/widgets/todo_item.dart b/simple_bloc_flutter/lib/widgets/todo_item.dart index da9b7069..dc0a712e 100644 --- a/simple_bloc_flutter/lib/widgets/todo_item.dart +++ b/simple_bloc_flutter/lib/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/simple_bloc_flutter/lib/widgets/todo_list.dart b/simple_bloc_flutter/lib/widgets/todo_list.dart index c6665825..80fb16f5 100644 --- a/simple_bloc_flutter/lib/widgets/todo_list.dart +++ b/simple_bloc_flutter/lib/widgets/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:simple_bloc_flutter_sample/dependency_injection.dart'; @@ -37,25 +33,28 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return DetailScreen( - todoId: todo.id, - initBloc: () => - TodoBloc(Injector.of(context).todosInteractor), - ); - }, - ), - ).then((todo) { - if (todo is Todo) { - _showUndoSnackbar(context, todo); - } - }); + Navigator.of(context) + .push( + MaterialPageRoute( + builder: (_) { + return DetailScreen( + todoId: todo.id, + initBloc: () => + TodoBloc(Injector.of(context).todosInteractor), + ); + }, + ), + ) + .then((todo) { + if (todo is Todo) { + _showUndoSnackbar(context, todo); + } + }); }, onCheckboxChanged: (complete) { - TodosBlocProvider.of(context) - .updateTodo(todo.copyWith(complete: !todo.complete)); + TodosBlocProvider.of( + context, + ).updateTodo(todo.copyWith(complete: !todo.complete)); }, ); }, diff --git a/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart b/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart index c0319bfa..7c1d8db7 100644 --- a/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart +++ b/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:simple_blocs/simple_blocs.dart'; @@ -11,7 +7,7 @@ class TodosBlocProvider extends StatefulWidget { final TodosListBloc bloc; TodosBlocProvider({Key key, @required this.child, @required this.bloc}) - : super(key: key); + : super(key: key); @override _TodosBlocProviderState createState() => _TodosBlocProviderState(); @@ -39,11 +35,8 @@ class _TodosBlocProviderState extends State { class _TodosBlocProvider extends InheritedWidget { final TodosListBloc bloc; - _TodosBlocProvider({ - Key key, - @required this.bloc, - @required Widget child, - }) : super(key: key, child: child); + _TodosBlocProvider({Key key, @required this.bloc, @required Widget child}) + : super(key: key, child: child); @override bool updateShouldNotify(_TodosBlocProvider old) => bloc != old.bloc; diff --git a/simple_bloc_flutter/test_driver/todo_app.dart b/simple_bloc_flutter/test_driver/todo_app.dart index fd474953..00bbd158 100644 --- a/simple_bloc_flutter/test_driver/todo_app.dart +++ b/simple_bloc_flutter/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter_driver/driver_extension.dart'; import 'package:simple_bloc_flutter_sample/main.dart' as app; diff --git a/simple_bloc_flutter/test_driver/todo_app_test.dart b/simple_bloc_flutter/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/simple_bloc_flutter/test_driver/todo_app_test.dart +++ b/simple_bloc_flutter/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/simple_blocs/lib/simple_blocs.dart b/simple_blocs/lib/simple_blocs.dart index eac5029b..0bb621ae 100644 --- a/simple_blocs/lib/simple_blocs.dart +++ b/simple_blocs/lib/simple_blocs.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library blocs; export 'src/models/models.dart'; diff --git a/simple_blocs/lib/src/models/models.dart b/simple_blocs/lib/src/models/models.dart index 3d53fea1..977d8087 100644 --- a/simple_blocs/lib/src/models/models.dart +++ b/simple_blocs/lib/src/models/models.dart @@ -1,6 +1,2 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - export 'package:simple_blocs/src/models/todo.dart'; export 'package:simple_blocs/src/models/visibility_filter.dart'; diff --git a/simple_blocs/lib/src/models/todo.dart b/simple_blocs/lib/src/models/todo.dart index f99d773a..b6825225 100644 --- a/simple_blocs/lib/src/models/todo.dart +++ b/simple_blocs/lib/src/models/todo.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:meta/meta.dart'; import 'package:simple_blocs/src/uuid.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -14,8 +10,8 @@ class Todo { final String task; Todo(this.task, {this.complete = false, String note = '', String id}) - : this.note = note ?? '', - this.id = id ?? Uuid().generateV4(); + : this.note = note ?? '', + this.id = id ?? Uuid().generateV4(); Todo copyWith({bool complete, String id, String note, String task}) { return Todo( diff --git a/simple_blocs/lib/src/models/visibility_filter.dart b/simple_blocs/lib/src/models/visibility_filter.dart index 11f11982..a47beca1 100644 --- a/simple_blocs/lib/src/models/visibility_filter.dart +++ b/simple_blocs/lib/src/models/visibility_filter.dart @@ -1,5 +1 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - enum VisibilityFilter { all, active, completed } diff --git a/simple_blocs/lib/src/stats_bloc.dart b/simple_blocs/lib/src/stats_bloc.dart index 07f54923..8b8edf98 100644 --- a/simple_blocs/lib/src/stats_bloc.dart +++ b/simple_blocs/lib/src/stats_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:simple_blocs/src/models/models.dart'; @@ -13,9 +9,13 @@ class StatsBloc { StatsBloc(TodosInteractor interactor) : _interactor = interactor; // Outputs - Stream get numActive => _interactor.todos.map((List todos) => - todos.fold(0, (sum, todo) => !todo.complete ? ++sum : sum)); + Stream get numActive => _interactor.todos.map( + (List todos) => + todos.fold(0, (sum, todo) => !todo.complete ? ++sum : sum), + ); - Stream get numComplete => _interactor.todos.map((List todos) => - todos.fold(0, (sum, todo) => todo.complete ? ++sum : sum)); + Stream get numComplete => _interactor.todos.map( + (List todos) => + todos.fold(0, (sum, todo) => todo.complete ? ++sum : sum), + ); } diff --git a/simple_blocs/lib/src/todo_bloc.dart b/simple_blocs/lib/src/todo_bloc.dart index e532fcc3..f13eaf21 100644 --- a/simple_blocs/lib/src/todo_bloc.dart +++ b/simple_blocs/lib/src/todo_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:simple_blocs/src/models/models.dart'; diff --git a/simple_blocs/lib/src/todos_interactor.dart b/simple_blocs/lib/src/todos_interactor.dart index bbe2d1d3..d55fb5e4 100644 --- a/simple_blocs/lib/src/todos_interactor.dart +++ b/simple_blocs/lib/src/todos_interactor.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:simple_blocs/simple_blocs.dart'; @@ -18,18 +14,17 @@ class TodosInteractor { TodosInteractor(this.repository); Stream> get todos { - return repository - .todos() - .map((entities) => entities.map(Todo.fromEntity).toList()); + return repository.todos().map( + (entities) => entities.map(Todo.fromEntity).toList(), + ); } Stream todo(String id) { - return todos.map((todos) { - return todos.firstWhere( - (todo) => todo.id == id, - orElse: () => null, - ); - }).where((todo) => todo != null); + return todos + .map((todos) { + return todos.firstWhere((todo) => todo.id == id, orElse: () => null); + }) + .where((todo) => todo != null); } Stream get allComplete => todos.map(_allComplete); @@ -49,7 +44,8 @@ class TodosInteractor { final updates = await todos.map(_todosToUpdate).first; return Future.wait( - updates.map((update) => repository.updateTodo(update.toEntity()))); + updates.map((update) => repository.updateTodo(update.toEntity())), + ); } static bool _hasCompletedTodos(List todos) { diff --git a/simple_blocs/lib/src/todos_list_bloc.dart b/simple_blocs/lib/src/todos_list_bloc.dart index 4eeefbc0..cde09e59 100644 --- a/simple_blocs/lib/src/todos_list_bloc.dart +++ b/simple_blocs/lib/src/todos_list_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:rxdart/rxdart.dart'; diff --git a/simple_blocs/lib/src/user_bloc.dart b/simple_blocs/lib/src/user_bloc.dart index c121d731..61cda371 100644 --- a/simple_blocs/lib/src/user_bloc.dart +++ b/simple_blocs/lib/src/user_bloc.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/simple_blocs/lib/src/uuid.dart b/simple_blocs/lib/src/uuid.dart index 1b6b26da..73d193cb 100644 --- a/simple_blocs/lib/src/uuid.dart +++ b/simple_blocs/lib/src/uuid.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:math'; /// A UUID generator, useful for generating unique IDs for your Todos. diff --git a/simple_blocs/test/all_tests.dart b/simple_blocs/test/all_tests.dart index 1e2f2f2d..38be15df 100644 --- a/simple_blocs/test/all_tests.dart +++ b/simple_blocs/test/all_tests.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'stats_bloc_test.dart' as stats_bloc_test; import 'todo_bloc_test.dart' as todo_bloc_test; import 'todos_bloc_test.dart' as todos_bloc_test; diff --git a/simple_blocs/test/stats_bloc_test.dart b/simple_blocs/test/stats_bloc_test.dart index 765a4e5d..90416cae 100644 --- a/simple_blocs/test/stats_bloc_test.dart +++ b/simple_blocs/test/stats_bloc_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:mockito/mockito.dart'; import 'package:rxdart/rxdart.dart'; import 'package:simple_blocs/simple_blocs.dart'; @@ -14,10 +10,7 @@ void main() { test('should stream the number of active todos', () { final interactor = MockTodosInteractor(); final bloc = StatsBloc(interactor); - final todos = [ - Todo('Hallo', complete: true), - Todo('Friend'), - ]; + final todos = [Todo('Hallo', complete: true), Todo('Friend')]; final source = BehaviorSubject>.seeded(todos); when(interactor.todos).thenAnswer((_) => source.stream); diff --git a/simple_blocs/test/todos_interactor_test.dart b/simple_blocs/test/todos_interactor_test.dart index 9e372f1c..eb2307c8 100644 --- a/simple_blocs/test/todos_interactor_test.dart +++ b/simple_blocs/test/todos_interactor_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mockito/mockito.dart'; @@ -95,8 +91,9 @@ void main() { final todo = Todo("AddMe"); when(repository.todos()).thenAnswer((_) => Stream.empty()); - when(repository.addNewTodo(todo.toEntity())) - .thenAnswer((_) => Future.value()); + when( + repository.addNewTodo(todo.toEntity()), + ).thenAnswer((_) => Future.value()); interactor.addNewTodo(todo); @@ -144,8 +141,9 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); @@ -166,10 +164,12 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); - when(repository.updateTodo(e2Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e2Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); @@ -191,10 +191,12 @@ void main() { ); when(repository.todos()).thenAnswer((_) => source.stream); - when(repository.updateTodo(e1Update)) - .thenAnswer((_) => Future.sync(() {})); - when(repository.updateTodo(e2Update)) - .thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e1Update), + ).thenAnswer((_) => Future.sync(() {})); + when( + repository.updateTodo(e2Update), + ).thenAnswer((_) => Future.sync(() {})); await interactor.toggleAll(null); diff --git a/states_rebuilder/lib/localization.dart b/states_rebuilder/lib/localization.dart index e39cd72b..94596802 100644 --- a/states_rebuilder/lib/localization.dart +++ b/states_rebuilder/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/states_rebuilder/lib/main.dart b/states_rebuilder/lib/main.dart index 63784241..a5d2b66c 100644 --- a/states_rebuilder/lib/main.dart +++ b/states_rebuilder/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/states_rebuilder/lib/main_web.dart b/states_rebuilder/lib/main_web.dart index 97eae9a0..fa9bdf39 100644 --- a/states_rebuilder/lib/main_web.dart +++ b/states_rebuilder/lib/main_web.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:html'; import 'package:flutter/material.dart'; diff --git a/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart b/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart index c3089261..91338386 100644 --- a/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart +++ b/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/foundation.dart'; @@ -14,10 +10,8 @@ import 'package:todos_app_core/todos_app_core.dart'; class AddEditPage extends StatefulWidget { final Todo todo; - AddEditPage({ - Key key, - this.todo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditPage({Key key, this.todo}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditPageState createState() => _AddEditPageState(); @@ -34,9 +28,11 @@ class _AddEditPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(isEditing - ? ArchSampleLocalizations.of(context).editTodo - : ArchSampleLocalizations.of(context).addTodo), + title: Text( + isEditing + ? ArchSampleLocalizations.of(context).editTodo + : ArchSampleLocalizations.of(context).addTodo, + ), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -54,7 +50,8 @@ class _AddEditPageState extends State { autofocus: isEditing ? false : true, style: Theme.of(context).textTheme.headline, decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).newTodoHint), + hintText: ArchSampleLocalizations.of(context).newTodoHint, + ), validator: (val) => val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null, @@ -69,14 +66,15 @@ class _AddEditPageState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: - isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, tooltip: isEditing ? ArchSampleLocalizations.of(context).saveChanges : ArchSampleLocalizations.of(context).addTodo, @@ -92,12 +90,7 @@ class _AddEditPageState extends State { ..note = _note; todosService.updateTodo(widget.todo); } else { - todosService.addTodo( - Todo( - _task, - note: _note, - ), - ); + todosService.addTodo(Todo(_task, note: _note)); } Navigator.pop(context); diff --git a/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart b/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart index ea3f244b..9e4ab86d 100644 --- a/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart +++ b/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:states_rebuilder/states_rebuilder.dart'; import 'package:states_rebuilder_sample/domain/entities/todo.dart'; @@ -35,7 +31,7 @@ class DetailScreen extends StatelessWidget { //delegate to the static method HelperMethods.removeTodo to remove todo HelperMethods.removeTodo(todo); }, - ) + ), ], ), body: Padding( @@ -67,10 +63,7 @@ class DetailScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -81,7 +74,7 @@ class DetailScreen extends StatelessWidget { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.subhead, - ) + ), ], ), ), diff --git a/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart b/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart index 0687f5af..3b3d30bd 100644 --- a/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart +++ b/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:states_rebuilder/states_rebuilder.dart'; @@ -16,14 +12,14 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { //context is used to register FilterButton as observer in todosServiceRM - final todosServiceRM = - Injector.getAsReactive(context: context); + final todosServiceRM = Injector.getAsReactive( + context: context, + ); final defaultStyle = Theme.of(context).textTheme.body1; - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of( + context, + ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); final button = _Button( onSelected: (filter) { todosServiceRM.setState((s) => s.activeFilter = filter); diff --git a/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart b/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart index 1b134031..89ade9a6 100644 --- a/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart +++ b/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:states_rebuilder/states_rebuilder.dart'; @@ -49,7 +45,7 @@ class StatsCounter extends StatelessWidget { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.subhead, ), - ) + ), ], ), ); diff --git a/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart b/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart index 4091623d..c428852f 100644 --- a/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart +++ b/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:states_rebuilder/states_rebuilder.dart'; @@ -14,10 +10,7 @@ import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final Todo todo; - TodoItem({ - Key key, - @required this.todo, - }) : super(key: key); + TodoItem({Key key, @required this.todo}) : super(key: key); final todosServiceRM = Injector.getAsReactive(); diff --git a/states_rebuilder/lib/ui/pages/home_screen/todo_list.dart b/states_rebuilder/lib/ui/pages/home_screen/todo_list.dart index 449b1ef1..7577a09c 100644 --- a/states_rebuilder/lib/ui/pages/home_screen/todo_list.dart +++ b/states_rebuilder/lib/ui/pages/home_screen/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:states_rebuilder/states_rebuilder.dart'; import 'package:states_rebuilder_sample/service/todos_service.dart'; @@ -19,9 +15,7 @@ class TodoList extends StatelessWidget { return todosServiceRM.whenConnectionState( onIdle: () => Container(), onWaiting: () => Center( - child: CircularProgressIndicator( - key: ArchSampleKeys.todosLoading, - ), + child: CircularProgressIndicator(key: ArchSampleKeys.todosLoading), ), onData: (todosService) { return ListView.builder( diff --git a/states_rebuilder/test_driver/todo_app.dart b/states_rebuilder/test_driver/todo_app.dart index e3d02f0b..d7e29fe0 100644 --- a/states_rebuilder/test_driver/todo_app.dart +++ b/states_rebuilder/test_driver/todo_app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // This line imports the extension import 'package:flutter_driver/driver_extension.dart'; import 'package:states_rebuilder_sample/main.dart' as app; diff --git a/states_rebuilder/test_driver/todo_app_test.dart b/states_rebuilder/test_driver/todo_app_test.dart index ad93f5a5..1c5a586c 100644 --- a/states_rebuilder/test_driver/todo_app_test.dart +++ b/states_rebuilder/test_driver/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; void main() { diff --git a/todos_app_core/lib/src/keys.dart b/todos_app_core/lib/src/keys.dart index 7c088f95..c0319dd0 100644 --- a/todos_app_core/lib/src/keys.dart +++ b/todos_app_core/lib/src/keys.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/widgets.dart'; class ArchSampleKeys { diff --git a/todos_app_core/lib/src/localization.dart b/todos_app_core/lib/src/localization.dart index fd83b871..624c232c 100644 --- a/todos_app_core/lib/src/localization.dart +++ b/todos_app_core/lib/src/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/widgets.dart'; diff --git a/todos_app_core/lib/src/localizations/messages_all.dart b/todos_app_core/lib/src/localizations/messages_all.dart index 12e1112d..974f8ff2 100644 --- a/todos_app_core/lib/src/localizations/messages_all.dart +++ b/todos_app_core/lib/src/localizations/messages_all.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart // This is a library that looks up messages for specific locales by // delegating to the appropriate library. diff --git a/todos_app_core/lib/src/localizations/messages_en.dart b/todos_app_core/lib/src/localizations/messages_en.dart index 572069b7..f9e3974d 100644 --- a/todos_app_core/lib/src/localizations/messages_en.dart +++ b/todos_app_core/lib/src/localizations/messages_en.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart // This is a library that provides messages for a en locale. All the // messages from the main program should be duplicated here with the same diff --git a/todos_app_core/lib/src/optional.dart b/todos_app_core/lib/src/optional.dart index 6342a128..6b2cdbc7 100644 --- a/todos_app_core/lib/src/optional.dart +++ b/todos_app_core/lib/src/optional.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:collection'; /// A value that might be absent. diff --git a/todos_app_core/lib/src/routes.dart b/todos_app_core/lib/src/routes.dart index 1be9f34d..02478c85 100644 --- a/todos_app_core/lib/src/routes.dart +++ b/todos_app_core/lib/src/routes.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - class ArchSampleRoutes { static final home = '/'; static final addTodo = '/addTodo'; diff --git a/todos_app_core/lib/src/theme.dart b/todos_app_core/lib/src/theme.dart index 703e9304..3357aa63 100644 --- a/todos_app_core/lib/src/theme.dart +++ b/todos_app_core/lib/src/theme.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; class ArchSampleTheme { diff --git a/todos_app_core/lib/src/uuid.dart b/todos_app_core/lib/src/uuid.dart index 765daa7a..f7c0836d 100644 --- a/todos_app_core/lib/src/uuid.dart +++ b/todos_app_core/lib/src/uuid.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:math'; /// A UUID generator, useful for generating unique IDs for your Todos. diff --git a/todos_repository_core/lib/src/reactive_repository.dart b/todos_repository_core/lib/src/reactive_repository.dart index cec6d101..88ebbf99 100644 --- a/todos_repository_core/lib/src/reactive_repository.dart +++ b/todos_repository_core/lib/src/reactive_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:core'; diff --git a/todos_repository_core/lib/src/todo_entity.dart b/todos_repository_core/lib/src/todo_entity.dart index 9cdb6f26..bf6d3706 100644 --- a/todos_repository_core/lib/src/todo_entity.dart +++ b/todos_repository_core/lib/src/todo_entity.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - class TodoEntity { final bool complete; final String id; diff --git a/todos_repository_core/lib/src/todos_repository.dart b/todos_repository_core/lib/src/todos_repository.dart index 1e777283..5926223f 100644 --- a/todos_repository_core/lib/src/todos_repository.dart +++ b/todos_repository_core/lib/src/todos_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:core'; import 'todo_entity.dart'; diff --git a/todos_repository_core/lib/src/user_entity.dart b/todos_repository_core/lib/src/user_entity.dart index ba66a7b4..8ef35bf6 100644 --- a/todos_repository_core/lib/src/user_entity.dart +++ b/todos_repository_core/lib/src/user_entity.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - class UserEntity { final String id; final String displayName; diff --git a/todos_repository_core/lib/src/user_repository.dart b/todos_repository_core/lib/src/user_repository.dart index ddac19cc..e5ffd129 100644 --- a/todos_repository_core/lib/src/user_repository.dart +++ b/todos_repository_core/lib/src/user_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'user_entity.dart'; diff --git a/todos_repository_core/lib/todos_repository_core.dart b/todos_repository_core/lib/todos_repository_core.dart index 2fe5da25..466e9bc1 100644 --- a/todos_repository_core/lib/todos_repository_core.dart +++ b/todos_repository_core/lib/todos_repository_core.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library todos_repository; export 'src/reactive_repository.dart'; diff --git a/todos_repository_local_storage/lib/src/file_storage.dart b/todos_repository_local_storage/lib/src/file_storage.dart index f49ff4ef..0e010a87 100644 --- a/todos_repository_local_storage/lib/src/file_storage.dart +++ b/todos_repository_local_storage/lib/src/file_storage.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:convert'; import 'dart:io'; diff --git a/todos_repository_local_storage/lib/src/key_value_storage.dart b/todos_repository_local_storage/lib/src/key_value_storage.dart index 734e757f..ad3d4832 100644 --- a/todos_repository_local_storage/lib/src/key_value_storage.dart +++ b/todos_repository_local_storage/lib/src/key_value_storage.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/todos_repository_local_storage/lib/src/reactive_repository.dart b/todos_repository_local_storage/lib/src/reactive_repository.dart index f26f1c9a..545c271f 100644 --- a/todos_repository_local_storage/lib/src/reactive_repository.dart +++ b/todos_repository_local_storage/lib/src/reactive_repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:core'; import 'package:rxdart/subjects.dart'; diff --git a/todos_repository_local_storage/lib/src/repository.dart b/todos_repository_local_storage/lib/src/repository.dart index 9280ecef..b009e277 100644 --- a/todos_repository_local_storage/lib/src/repository.dart +++ b/todos_repository_local_storage/lib/src/repository.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:core'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/todos_repository_local_storage/lib/src/web_client.dart b/todos_repository_local_storage/lib/src/web_client.dart index 45138691..f4b1314c 100644 --- a/todos_repository_local_storage/lib/src/web_client.dart +++ b/todos_repository_local_storage/lib/src/web_client.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/todos_repository_local_storage/lib/todos_repository_local_storage.dart b/todos_repository_local_storage/lib/todos_repository_local_storage.dart index 21fdf1c6..f404dc4a 100644 --- a/todos_repository_local_storage/lib/todos_repository_local_storage.dart +++ b/todos_repository_local_storage/lib/todos_repository_local_storage.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - library todos_repository_simple; export 'src/file_storage.dart'; diff --git a/todos_repository_local_storage/test/file_storage_test.dart b/todos_repository_local_storage/test/file_storage_test.dart index e45a8897..2e8d81f9 100644 --- a/todos_repository_local_storage/test/file_storage_test.dart +++ b/todos_repository_local_storage/test/file_storage_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:io'; import 'package:test/test.dart'; diff --git a/todos_repository_local_storage/test/key_value_storage_test.dart b/todos_repository_local_storage/test/key_value_storage_test.dart index 0509e462..97ab6400 100644 --- a/todos_repository_local_storage/test/key_value_storage_test.dart +++ b/todos_repository_local_storage/test/key_value_storage_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/todos_repository_local_storage/test/reactive_repository_test.dart b/todos_repository_local_storage/test/reactive_repository_test.dart index bbebb41d..056ec214 100644 --- a/todos_repository_local_storage/test/reactive_repository_test.dart +++ b/todos_repository_local_storage/test/reactive_repository_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:mockito/annotations.dart'; diff --git a/todos_repository_local_storage/test/repository_test.dart b/todos_repository_local_storage/test/repository_test.dart index d0febe82..c44d1028 100644 --- a/todos_repository_local_storage/test/repository_test.dart +++ b/todos_repository_local_storage/test/repository_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'dart:io'; diff --git a/vanilla/integration_test/todo_app_test.dart b/vanilla/integration_test/todo_app_test.dart index eeb867f1..719c8d07 100644 --- a/vanilla/integration_test/todo_app_test.dart +++ b/vanilla/integration_test/todo_app_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:integration_tests/integration_tests.dart' as integration_tests; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; diff --git a/vanilla/lib/app.dart b/vanilla/lib/app.dart index 8612b2eb..2304a82d 100644 --- a/vanilla/lib/app.dart +++ b/vanilla/lib/app.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/vanilla/lib/localization.dart b/vanilla/lib/localization.dart index 7e4c92c4..edbb413c 100644 --- a/vanilla/lib/localization.dart +++ b/vanilla/lib/localization.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'dart:async'; import 'package:flutter/material.dart'; diff --git a/vanilla/lib/main.dart b/vanilla/lib/main.dart index e755d98f..58407c6a 100644 --- a/vanilla/lib/main.dart +++ b/vanilla/lib/main.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; diff --git a/vanilla/lib/models.dart b/vanilla/lib/models.dart index f70189e2..8dd2589e 100644 --- a/vanilla/lib/models.dart +++ b/vanilla/lib/models.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; diff --git a/vanilla/lib/screens/add_edit_screen.dart b/vanilla/lib/screens/add_edit_screen.dart index 47dfa848..1b81ef0d 100644 --- a/vanilla/lib/screens/add_edit_screen.dart +++ b/vanilla/lib/screens/add_edit_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; diff --git a/vanilla/lib/screens/detail_screen.dart b/vanilla/lib/screens/detail_screen.dart index 051ca512..62490763 100644 --- a/vanilla/lib/screens/detail_screen.dart +++ b/vanilla/lib/screens/detail_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; diff --git a/vanilla/lib/screens/home_screen.dart b/vanilla/lib/screens/home_screen.dart index 97b2a7f1..c666ee26 100644 --- a/vanilla/lib/screens/home_screen.dart +++ b/vanilla/lib/screens/home_screen.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/localization.dart'; diff --git a/vanilla/lib/widgets/extra_actions_button.dart b/vanilla/lib/widgets/extra_actions_button.dart index f4f89d57..14c8b144 100644 --- a/vanilla/lib/widgets/extra_actions_button.dart +++ b/vanilla/lib/widgets/extra_actions_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; diff --git a/vanilla/lib/widgets/filter_button.dart b/vanilla/lib/widgets/filter_button.dart index 570dc607..eed2ad24 100644 --- a/vanilla/lib/widgets/filter_button.dart +++ b/vanilla/lib/widgets/filter_button.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; diff --git a/vanilla/lib/widgets/stats_counter.dart b/vanilla/lib/widgets/stats_counter.dart index f3f41dbc..95ed9559 100644 --- a/vanilla/lib/widgets/stats_counter.dart +++ b/vanilla/lib/widgets/stats_counter.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; diff --git a/vanilla/lib/widgets/todo_item.dart b/vanilla/lib/widgets/todo_item.dart index 8bdf2056..8c821208 100644 --- a/vanilla/lib/widgets/todo_item.dart +++ b/vanilla/lib/widgets/todo_item.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; diff --git a/vanilla/lib/widgets/todo_list.dart b/vanilla/lib/widgets/todo_list.dart index f454f376..80831ab0 100644 --- a/vanilla/lib/widgets/todo_list.dart +++ b/vanilla/lib/widgets/todo_list.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:vanilla/models.dart'; diff --git a/vanilla/lib/widgets/typedefs.dart b/vanilla/lib/widgets/typedefs.dart index 841d0414..416d9c53 100644 --- a/vanilla/lib/widgets/typedefs.dart +++ b/vanilla/lib/widgets/typedefs.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:vanilla/models.dart'; typedef TodoAdder = void Function(Todo todo); diff --git a/vanilla/test/app_state_test.dart b/vanilla/test/app_state_test.dart index f9cb59cb..9a5a9fb1 100644 --- a/vanilla/test/app_state_test.dart +++ b/vanilla/test/app_state_test.dart @@ -1,7 +1,3 @@ -// Copyright 2018 The Flutter Architecture Sample Authors. All rights reserved. -// Use of this source code is governed by the MIT license that can be found -// in the LICENSE file. - import 'package:test/test.dart'; import 'package:vanilla/models.dart'; From 8698493a665d60ba914b76c8b990306cc19ebb33 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 14:58:17 +0100 Subject: [PATCH 09/89] Remove deprecated samples --- mvc/.flutter-plugins-dependencies | 1 - mvc/.gitignore | 73 --- mvc/.metadata | 10 - mvc/README.md | 73 --- mvc/android/.gitignore | 7 - mvc/android/app/build.gradle | 67 --- mvc/android/app/src/debug/AndroidManifest.xml | 7 - mvc/android/app/src/main/AndroidManifest.xml | 30 - .../kotlin/com/example/mvc/MainActivity.kt | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 0 bytes .../app/src/main/res/values/styles.xml | 8 - .../app/src/profile/AndroidManifest.xml | 7 - mvc/android/build.gradle | 31 -- mvc/android/gradle.properties | 4 - .../gradle/wrapper/gradle-wrapper.properties | 6 - mvc/android/settings.gradle | 15 - mvc/ios/.gitignore | 32 -- mvc/ios/Flutter/AppFrameworkInfo.plist | 26 - mvc/ios/Flutter/Debug.xcconfig | 2 - mvc/ios/Flutter/Release.xcconfig | 2 - mvc/ios/Podfile | 90 --- mvc/ios/Runner.xcodeproj/project.pbxproj | 518 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/Runner.xcscheme | 91 --- .../contents.xcworkspacedata | 7 - mvc/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 116 ---- .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 0 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- mvc/ios/Runner/Base.lproj/Main.storyboard | 26 - mvc/ios/Runner/Info.plist | 45 -- mvc/ios/Runner/Runner-Bridging-Header.h | 1 - mvc/lib/main.dart | 7 - mvc/lib/src/App.dart | 38 -- mvc/lib/src/Controller.dart | 100 ---- mvc/lib/src/Model.dart | 69 --- mvc/lib/src/models.dart | 58 -- mvc/lib/src/screens/add_edit_screen.dart | 106 ---- mvc/lib/src/screens/detail_screen.dart | 98 ---- mvc/lib/src/screens/home_screen.dart | 82 --- mvc/lib/src/todo_list_model.dart | 120 ---- mvc/lib/src/widgets/extra_actions_button.dart | 42 -- mvc/lib/src/widgets/filter_button.dart | 72 --- mvc/lib/src/widgets/stats_counter.dart | 57 -- mvc/lib/src/widgets/todo_item.dart | 45 -- mvc/lib/src/widgets/todo_list.dart | 84 --- mvc/pubspec.yaml | 80 --- mvc/test/todo_list_model_test.dart | 127 ----- mvc/test_driver/todo_app.dart | 9 - mvc/test_driver/todo_app_test.dart | 5 - mvu/.flutter-plugins-dependencies | 1 - mvu/.gitignore | 73 --- mvu/.metadata | 10 - mvu/README.md | 57 -- mvu/android/.gitignore | 7 - mvu/android/app/build.gradle | 67 --- mvu/android/app/src/debug/AndroidManifest.xml | 7 - mvu/android/app/src/main/AndroidManifest.xml | 30 - .../kotlin/com/example/mvu/MainActivity.kt | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 0 bytes .../app/src/main/res/values/styles.xml | 8 - .../app/src/profile/AndroidManifest.xml | 7 - mvu/android/build.gradle | 31 -- mvu/android/gradle.properties | 4 - .../gradle/wrapper/gradle-wrapper.properties | 6 - mvu/android/settings.gradle | 15 - mvu/ios/.gitignore | 32 -- mvu/ios/Flutter/AppFrameworkInfo.plist | 26 - mvu/ios/Flutter/Debug.xcconfig | 2 - mvu/ios/Flutter/Release.xcconfig | 2 - mvu/ios/Podfile | 90 --- mvu/ios/Runner.xcodeproj/project.pbxproj | 518 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/Runner.xcscheme | 91 --- .../contents.xcworkspacedata | 7 - mvu/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 116 ---- .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 0 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- mvu/ios/Runner/Base.lproj/Main.storyboard | 26 - mvu/ios/Runner/Info.plist | 45 -- mvu/ios/Runner/Runner-Bridging-Header.h | 1 - mvu/lib/common/extra_actions_menu.dart | 26 - mvu/lib/common/repository_commands.dart | 121 ---- mvu/lib/common/router.dart | 27 - mvu/lib/common/snackbar.dart | 29 - mvu/lib/common/todo_model.dart | 29 - mvu/lib/common/todo_model.g.dart | 137 ----- mvu/lib/details/details.dart | 39 -- mvu/lib/details/state.dart | 40 -- mvu/lib/details/types.dart | 33 -- mvu/lib/details/types.g.dart | 110 ---- mvu/lib/details/view.dart | 70 --- mvu/lib/edit/edit.dart | 18 - mvu/lib/edit/state.dart | 25 - mvu/lib/edit/types.dart | 29 - mvu/lib/edit/types.g.dart | 124 ----- mvu/lib/edit/view.dart | 54 -- mvu/lib/home/home.dart | 46 -- mvu/lib/home/state.dart | 65 --- mvu/lib/home/types.dart | 70 --- mvu/lib/home/types.g.dart | 96 ---- mvu/lib/home/view.dart | 71 --- mvu/lib/localization.dart | 27 - mvu/lib/main.dart | 36 -- mvu/lib/stats/state.dart | 72 --- mvu/lib/stats/stats.dart | 15 - mvu/lib/stats/types.dart | 36 -- mvu/lib/stats/types.g.dart | 159 ------ mvu/lib/stats/view.dart | 65 --- mvu/lib/todos/state.dart | 125 ----- mvu/lib/todos/todos.dart | 17 - mvu/lib/todos/types.dart | 71 --- mvu/lib/todos/types.g.dart | 153 ------ mvu/lib/todos/view.dart | 130 ----- mvu/mvu_todo.png | Bin 23028 -> 0 bytes mvu/pubspec.yaml | 81 --- mvu/test/all_tests.dart | 15 - mvu/test/cmd_runner.dart | 14 - mvu/test/data.dart | 136 ----- mvu/test/details_screen_test.dart | 73 --- mvu/test/edit_screen_test.dart | 79 --- mvu/test/home_screen_test.dart | 38 -- mvu/test/repository_commads_test.dart | 120 ---- mvu/test/stats_screen_test.dart | 121 ---- mvu/test/todos_screen_test.dart | 234 -------- mvu/test/widget_test.dart | 30 - mvu/test_driver/todo_app.dart | 8 - mvu/test_driver/todo_app_test.dart | 5 - 183 files changed, 7110 deletions(-) delete mode 100644 mvc/.flutter-plugins-dependencies delete mode 100644 mvc/.gitignore delete mode 100644 mvc/.metadata delete mode 100644 mvc/README.md delete mode 100644 mvc/android/.gitignore delete mode 100644 mvc/android/app/build.gradle delete mode 100644 mvc/android/app/src/debug/AndroidManifest.xml delete mode 100644 mvc/android/app/src/main/AndroidManifest.xml delete mode 100644 mvc/android/app/src/main/kotlin/com/example/mvc/MainActivity.kt delete mode 100644 mvc/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 mvc/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 mvc/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 mvc/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 mvc/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 mvc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 mvc/android/app/src/main/res/values/styles.xml delete mode 100644 mvc/android/app/src/profile/AndroidManifest.xml delete mode 100644 mvc/android/build.gradle delete mode 100644 mvc/android/gradle.properties delete mode 100644 mvc/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 mvc/android/settings.gradle delete mode 100644 mvc/ios/.gitignore delete mode 100644 mvc/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 mvc/ios/Flutter/Debug.xcconfig delete mode 100644 mvc/ios/Flutter/Release.xcconfig delete mode 100644 mvc/ios/Podfile delete mode 100644 mvc/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 mvc/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 mvc/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 mvc/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 mvc/ios/Runner/AppDelegate.swift delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 mvc/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 mvc/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 mvc/ios/Runner/Info.plist delete mode 100644 mvc/ios/Runner/Runner-Bridging-Header.h delete mode 100644 mvc/lib/main.dart delete mode 100644 mvc/lib/src/App.dart delete mode 100644 mvc/lib/src/Controller.dart delete mode 100644 mvc/lib/src/Model.dart delete mode 100644 mvc/lib/src/models.dart delete mode 100644 mvc/lib/src/screens/add_edit_screen.dart delete mode 100644 mvc/lib/src/screens/detail_screen.dart delete mode 100644 mvc/lib/src/screens/home_screen.dart delete mode 100644 mvc/lib/src/todo_list_model.dart delete mode 100644 mvc/lib/src/widgets/extra_actions_button.dart delete mode 100644 mvc/lib/src/widgets/filter_button.dart delete mode 100644 mvc/lib/src/widgets/stats_counter.dart delete mode 100644 mvc/lib/src/widgets/todo_item.dart delete mode 100644 mvc/lib/src/widgets/todo_list.dart delete mode 100644 mvc/pubspec.yaml delete mode 100644 mvc/test/todo_list_model_test.dart delete mode 100644 mvc/test_driver/todo_app.dart delete mode 100644 mvc/test_driver/todo_app_test.dart delete mode 100644 mvu/.flutter-plugins-dependencies delete mode 100644 mvu/.gitignore delete mode 100644 mvu/.metadata delete mode 100644 mvu/README.md delete mode 100644 mvu/android/.gitignore delete mode 100644 mvu/android/app/build.gradle delete mode 100644 mvu/android/app/src/debug/AndroidManifest.xml delete mode 100644 mvu/android/app/src/main/AndroidManifest.xml delete mode 100644 mvu/android/app/src/main/kotlin/com/example/mvu/MainActivity.kt delete mode 100644 mvu/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 mvu/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 mvu/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 mvu/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 mvu/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 mvu/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 mvu/android/app/src/main/res/values/styles.xml delete mode 100644 mvu/android/app/src/profile/AndroidManifest.xml delete mode 100644 mvu/android/build.gradle delete mode 100644 mvu/android/gradle.properties delete mode 100644 mvu/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 mvu/android/settings.gradle delete mode 100644 mvu/ios/.gitignore delete mode 100644 mvu/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 mvu/ios/Flutter/Debug.xcconfig delete mode 100644 mvu/ios/Flutter/Release.xcconfig delete mode 100644 mvu/ios/Podfile delete mode 100644 mvu/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 mvu/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 mvu/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 mvu/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 mvu/ios/Runner/AppDelegate.swift delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 mvu/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 mvu/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 mvu/ios/Runner/Info.plist delete mode 100644 mvu/ios/Runner/Runner-Bridging-Header.h delete mode 100644 mvu/lib/common/extra_actions_menu.dart delete mode 100644 mvu/lib/common/repository_commands.dart delete mode 100644 mvu/lib/common/router.dart delete mode 100644 mvu/lib/common/snackbar.dart delete mode 100644 mvu/lib/common/todo_model.dart delete mode 100644 mvu/lib/common/todo_model.g.dart delete mode 100644 mvu/lib/details/details.dart delete mode 100644 mvu/lib/details/state.dart delete mode 100644 mvu/lib/details/types.dart delete mode 100644 mvu/lib/details/types.g.dart delete mode 100644 mvu/lib/details/view.dart delete mode 100644 mvu/lib/edit/edit.dart delete mode 100644 mvu/lib/edit/state.dart delete mode 100644 mvu/lib/edit/types.dart delete mode 100644 mvu/lib/edit/types.g.dart delete mode 100644 mvu/lib/edit/view.dart delete mode 100644 mvu/lib/home/home.dart delete mode 100644 mvu/lib/home/state.dart delete mode 100644 mvu/lib/home/types.dart delete mode 100644 mvu/lib/home/types.g.dart delete mode 100644 mvu/lib/home/view.dart delete mode 100644 mvu/lib/localization.dart delete mode 100644 mvu/lib/main.dart delete mode 100644 mvu/lib/stats/state.dart delete mode 100644 mvu/lib/stats/stats.dart delete mode 100644 mvu/lib/stats/types.dart delete mode 100644 mvu/lib/stats/types.g.dart delete mode 100644 mvu/lib/stats/view.dart delete mode 100644 mvu/lib/todos/state.dart delete mode 100644 mvu/lib/todos/todos.dart delete mode 100644 mvu/lib/todos/types.dart delete mode 100644 mvu/lib/todos/types.g.dart delete mode 100644 mvu/lib/todos/view.dart delete mode 100644 mvu/mvu_todo.png delete mode 100644 mvu/pubspec.yaml delete mode 100644 mvu/test/all_tests.dart delete mode 100644 mvu/test/cmd_runner.dart delete mode 100644 mvu/test/data.dart delete mode 100644 mvu/test/details_screen_test.dart delete mode 100644 mvu/test/edit_screen_test.dart delete mode 100644 mvu/test/home_screen_test.dart delete mode 100644 mvu/test/repository_commads_test.dart delete mode 100644 mvu/test/stats_screen_test.dart delete mode 100644 mvu/test/todos_screen_test.dart delete mode 100644 mvu/test/widget_test.dart delete mode 100644 mvu/test_driver/todo_app.dart delete mode 100644 mvu/test_driver/todo_app_test.dart diff --git a/mvc/.flutter-plugins-dependencies b/mvc/.flutter-plugins-dependencies deleted file mode 100644 index b728d6fd..00000000 --- a/mvc/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"android":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":[]}],"date_created":"2020-02-10 11:24:16.829310","version":"1.14.7-pre.38"} \ No newline at end of file diff --git a/mvc/.gitignore b/mvc/.gitignore deleted file mode 100644 index 2ddde2a5..00000000 --- a/mvc/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.packages -.pub-cache/ -.pub/ -/build/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/mvc/.metadata b/mvc/.metadata deleted file mode 100644 index 1b5cec02..00000000 --- a/mvc/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable - -project_type: app diff --git a/mvc/README.md b/mvc/README.md deleted file mode 100644 index a71634b1..00000000 --- a/mvc/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# MVC -MVC was first conceived some forty years ago by a visiting scientist at Xerox Palo Alto Research Laboratory (PARC) in California by the name of, Trygve Reenskaug. Most of the more recent design patterns are reflections of this original. It is hoped, this sample app will successfully convey how one might implement MVC when developing software. - -Note, the publicly available package, [mvc_pattern](https://pub.dartlang.org/packages/mvc_pattern), is used to demonstrate the Model-View-Controller design pattern in this particular architecture pattern sample. - -##### The MVC Design Pattern and Other Architectures -Like other design patterns, MVC aims to decouple major aspects generally found in software applications. In the case of MVC, it is three particular features: the Interface, the Event Handling, and the Data. This will generally allow for more efficient and modular code, more code reuse and parallel development. Like most things, it ‘makes life easier’ if you break things down into its separate working parts. The bigger the software application; the bigger the importance to implement such design patterns. - -## MVC in a nutshell: -* Controller responses to system and user events--controlling what's displayed. -* View is concerned primarily with 'how' it's displayed. -* Model is the Controller’s data source for what's displayed or not. - -In many MVC arrangements, the View knows how to ‘talk to’ the Controller, and the Controller knows how to ‘talk to’ the Model. However, the View and the Model each have no idea of the other’s existence. -![pac pattern](https://camo.githubusercontent.com/a5b152ecc2f2b96b8019941a7382f47f4ac4c2b6/68747470733a2f2f692e696d6775722e636f6d2f723443317932382e706e67) - -(View calls Controller functions; Controller calls Model functions.) - -Such a characteristic allows one, for example, to switch out and put in a different Model with little consequence. The 'new' Model need only conform to the API requirements so the Controller can ‘talk to’ it correctly. Conceivably, in turn, a 'new' View could be introduced aligned with the same functions names (same api) so it too correctly 'talks to' the Controller. Each is decoupled from the other two to such a degree that modification of any one component should not adversely effect the other two. - -However, the 'lines of communication' can be changed depending on the application's particular needs, but the 'separation of responsibilities' generally remain the same. - -![mvc pattern](https://user-images.githubusercontent.com/32497443/47087587-6614ed00-d1ea-11e8-8fc3-ced0ac6af12a.jpg) -![controllermodels](https://user-images.githubusercontent.com/32497443/47764873-a457e500-dc9d-11e8-8d89-2f1b8521335e.jpeg) -## Flutter and MVC -With the understanding that ‘the Interface’, 'the event handling' and ‘the data’ are now to be separated when using this design pattern, it's currently concluded in this MVC package that the **build()** function found in a typical **Stateful** or **Stateless** Widget will represent 'the View', while anything 'called' inside that function or any 'events' occurring within that function will execute code typically found in 'the Controller.' - -In this sample app, for example, the add_edit_screen.dart file involved in adding or editing a 'ToDo' item, is highlighted below where the 'Controller' is referenced. Most references are found within the **build()** function. If, for example, the user presses a button to add or save a 'ToDo' item, the Controller is called upon (see last arrow) to repsond to the event. -![add_edit_screen](https://user-images.githubusercontent.com/32497443/47756814-fedf4a00-dc79-11e8-95b5-13f3b864ce1c.jpg) -## Begin Your MVC App -In the screenshot below, you see the implementation of the MVC library package. The class, MVCApp, extends the class, AppMVC, found in the MVC library package. In this one screenshot, you can also see both the Controller and the View. The class, MVCApp, instantiates the Controller as a parameter to its superclass's constructor while the View is essentially the Widget returned from the **build()** function. -![02mvcapp](https://user-images.githubusercontent.com/32497443/47758418-559c5200-dc81-11e8-961e-1a18548216c4.jpg) -In the main.dart file, you see the usual **runApp()** function: -![01main dart](https://user-images.githubusercontent.com/32497443/47758766-db6ccd00-dc82-11e8-9f83-29c57ad73aa2.jpg) -## The Controller -Looking at just the first few lines of the Controller, you can see a lot is happening here. For example, you can see the [dependency injection](https://en.wikipedia.org/wiki/Dependency_injection) in the form of a list of import statements taking in only what the Controller depends on to fulfill its function. And so, it's here where the Model is instantiated as it is only here where it is readily used. The View has no knowledge of the Model nor does it need to at this point. -![controller](https://user-images.githubusercontent.com/32497443/48212521-c5799f00-e349-11e8-9280-e25bb49086a7.png) -However, note the variable, model, is static and is not 'library-private' (no leading underscore). This allows the developer, if they wish, to externally reference the Model so to access its public functions and properties. Depending on the circumstances, this may be desired. At this point, the developer has that option. Of course, adding an underscore would then change those 'lines of communication'. - -The 'VisibiltyFilter' is concerned with 'what' type of 'ToDo' items are displayed (what is displayed) at any one time in this 'ToDo' app. As it happens, this concern is also one of the responsibilities of the Controller, and so this 'filter' is implemented only in the Controller. - -Finally, note the Controller uses a factory constructor. This allows for the Controller to be instantiated once, but referenced everywhere if need be. However, the developer has the option to use a getter instead to access the Controller. Again, doing so allows for easy access to the Controller throughout the rest of the application: -![concon](https://user-images.githubusercontent.com/32497443/47794282-8a96bc00-dcf6-11e8-8a7e-3a602649e753.jpg) -## The Controller and its Model -The Controller is fully listed below, and you can see highlighted where the Model is called to retrieve, save and update the data source (whatever that data source may be). The View nor the Controller 'knows' what type of data source it is, or what type of database the data resides in. They don't need to. The Model takes care of that. -![controller](https://user-images.githubusercontent.com/32497443/48216483-d5e24780-e352-11e8-8e2c-47e12fac8ba6.png) -##### What's in a name? (or API?) -Looking closely at the code, you can see the Controller's public functions have names that don't always match the Model functions they, in turn, call. This is part of the decoupling that's possible with this design pattern. For instanct, the View need only know the names of the Controller's public functions and public fields (the Controller's API). Retain the Controller's API (In other words, keep those public function names consistant over time), and the Model is able to be changed more freely. Only the Controller would then have to address any Model changes. It's no concern to any other part of the application thus encouraging modular coding. -##### How about the Model? -Looking at the Model in this sample (see below), and you can see that it itself has its own Model to work with---unbeknownst to the rest of the application. For this app, this Model serves to 'convert' the data format from its own data source to a format eventually used by the View. -##### I Scooped the Scoped Model! -For full disclosure, I may have taken liberties as I chose to abscond the 'Model' and 'localization' code from Brian Egan's own 'Scoped Model' contribution to possibly accentuate my own. Again, to demonstrate how a MVC's Model, at times, may be used 'to convert' a data source to a format suitable to own its application. -![model](https://user-images.githubusercontent.com/32497443/47763415-0234fe80-dc97-11e8-9967-c7a5cef11e32.jpg) -##### Map the Data - We're just using a Map for the View instead of a Middle man class, like a TodoViewModel. In this 'ToDo' app sample, the data is displayed using Dart's own [Map](https://www.dartlang.org/guides/language/language-tour#maps) built-in type (see below). However, the 'repository' offered by all of us contributing to this [Flutter Architecture Samples](http://fluttersamples.com/) project does not. Instead, it uses the class, [TodoEntity](https://github.com/brianegan/flutter_architecture_samples/blob/master/todos_repository/lib/src/todo_entity.dart). I decided to demonstrate this 'conduit' role sometimes play by a Model. Of course, the rest of the sample app is unaware of the conversion therefore required. -![add_edit_screen2](https://user-images.githubusercontent.com/32497443/47791412-08a39480-dcf0-11e8-864c-69c0725e625d.jpg) -##### The Model is the Conduit -Again, in this particular 'ToDo' app sample, the MVC implementation has the Model play the role of 'conduit.' It lies between the data repository supplied by the makers of this project and the rest of this application. -![conroller2models](https://user-images.githubusercontent.com/32497443/47765618-30b7d700-dca1-11e8-98b0-2d1ee2c5a112.jpeg) -Looking at the class, TodoListModel, which is called by our Model class, you can see it is concerned with that data repository. It imports only that which it depends on, and changes the 'format' of the data where appropriate. -![todo_list_model](https://user-images.githubusercontent.com/32497443/47764056-d7987500-dc99-11e8-90d0-e62b60546993.jpg) -In turn, the class, Todo, is called by the class, TodoListModel. It mirrors the project's class, TodoEntity, and is used 'to bridge' information between those two classes. Again, this modular approach hides this fact from the rest of the application. -![models](https://user-images.githubusercontent.com/32497443/47764337-10851980-dc9b-11e8-8e89-61d009f5cd0d.jpg) -```dart -``` - - -Further information on the MVC package can be found in the article, [‘Flutter + MVC at Last!’](https://medium.com/p/275a0dc1e730/) -[![online article](https://user-images.githubusercontent.com/32497443/47087365-c9524f80-d1e9-11e8-85e5-6c8bbabb18cc.png)](https://medium.com/flutter-community/flutter-mvc-at-last-275a0dc1e730) - -[Repository (GitHub)](https://github.com/AndriousSolutions/mvc_pattern) - -[API Docs](https://pub.dartlang.org/documentation/mvc_pattern/latest/mvc_pattern/mvc_pattern-library.html) diff --git a/mvc/android/.gitignore b/mvc/android/.gitignore deleted file mode 100644 index bc2100d8..00000000 --- a/mvc/android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java diff --git a/mvc/android/app/build.gradle b/mvc/android/app/build.gradle deleted file mode 100644 index 7b8ed369..00000000 --- a/mvc/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.mvc" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/mvc/android/app/src/debug/AndroidManifest.xml b/mvc/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index eb9a5f75..00000000 --- a/mvc/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/mvc/android/app/src/main/AndroidManifest.xml b/mvc/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 9d2c10b9..00000000 --- a/mvc/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - diff --git a/mvc/android/app/src/main/kotlin/com/example/mvc/MainActivity.kt b/mvc/android/app/src/main/kotlin/com/example/mvc/MainActivity.kt deleted file mode 100644 index b40a40c6..00000000 --- a/mvc/android/app/src/main/kotlin/com/example/mvc/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.mvc - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/mvc/android/app/src/main/res/drawable/launch_background.xml b/mvc/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f8..00000000 --- a/mvc/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/mvc/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mvc/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1345 zcmV-H1-|-;P)uTd_0!V%xTj^~RVz+qQkNle+bG&pJ+~-@fF1He>(R5VVes7IOD>*8pj zqheUWHU<|V7e)gem4GGsJ2+v4(LhI>IrhY(VKk7Fi2z<|iTM&34b&ar1j_BVBq$oF zT^5{XaPhSSL<7+saIV4Zza$tMh~~j%l#2}#2o2PNi5m@Wr%DhsPz$TzUdrtp34jJ_ znQ1?5aIsS|cnuV=f=vu2gk<0vD8TK`l#6|mL2IA@7ekLTU=2jMm@OHo2BH8yg9lB? zAT>}wfRiW}AIb-*2s!8_Z`J0aS1@qoHy_}lPQz#RkE4~2! z=(Z>XqZkO0{yAgr%jc0Yq~kU?n{xX%#oOwWjsPbUd6WU+HDJRj(Jz;3Pq)p5ODGd- zRpPkY*4@5D9@RitX39y?ua@Yk&>~x0XE2eZ_RJA;@u^#pK)8}JPmFl^&f?(|+~wXw zlx{1_o=Py400@z``6J9n3hk?`&=Zu2?MiW&7)&sg2ncJBf3{icIA1y&P$u@O?8x0O z8w6ANfUwMLs0l^6(Xzk}43I58|S(7_2STsgb3Bd;<* zSWm4;S)us6*-BXm&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPV zl> zWXCr#aj@#Fvz(Q*M}0@G_VI6yJOZd~Pq;2> zG2)cDYOmwaEd5xdfMri1N}~YDGjb-}H20OVqDYXKgR~o0O;}k+t{Ul{4}K_j9IRSv zxx3v|cI4{w)Uu@Ys(@Ztn-O+?{~M&L=c#`Z%N?oK8Ww*1pQL%Dy5z}!lGc^q%5iX( zB~2vNEl(~>T3hyWhlL+ome`jZ8I6QEPyDr|C8@qaq{OwQz}f%Uvg8*?P03TslUJAE zK;HNC-|6?0nwBS)Cl!sfCZpi#6&bP@T^i~6H5v9p>yj@bH8^;1uQ~>2b^5MaYqCxw zI(Sbyg!J61w0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjf DcgJkH diff --git a/mvc/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mvc/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmV;Q17Q4#P)D0gcVJI$m~tEjv=UM0#+Kd63T)IDVl(l zvY&{|q6jFO0HMLQ#b81S0Dyr|HVC0a6X*nBRzW5d1L+np_qFwC#87rFp==?-)R%y< zj}1(H>?1n?7#kA)tAlU}k(G^l;H@(IuS$Va5|bYvz0=YlGw+9MB+BA>!SR-IE8k(W zss)NAY>RFfF#X*6g#X0HZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBj zZgsP_v6)r@tiJZ$7xW!}mA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RJk``vY$`OxQ*%)P`Z0=`!sm4&|R=Oet|5ds3V>euZ%{TI`LDr?o5zeocvw?J`)O?{o8l!*psNt8|JhsSNR;46T0IM8_na3x~KezsqT zA1)v=Tdr^0D3gl99S1hI0M-S=rog)?z5}}8-E0I${?adS$(Wh&R(v76xwin`PYdu0 zbg#FpqHc-yTEGq6N5U1uCc~TY1qhFY5`Nu@Qolq$Te~WudyfS}=OJKd)eEj2I=&db zQoWbz*OVxUtbEH)$su9rG#CuOwSk+4xXJ=oEs^2_sj&J)NjyPGI}P`CaMH$ab=~d2G%a1mdZ8P~vz1 z6J=A4mv>~R@d~_|Kw~d$&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2iJAov!lV07GM*+YPcV?WX<0QCSHeyl2P0#=U002ovPDHLkV1k9w Bv-l9 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 diff --git a/mvc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mvc/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d5614ac831d924f5e49e16a3d4391be8964fcdf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4067 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 - - - diff --git a/mvc/android/app/src/profile/AndroidManifest.xml b/mvc/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index eb9a5f75..00000000 --- a/mvc/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/mvc/android/build.gradle b/mvc/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/mvc/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/mvc/android/gradle.properties b/mvc/android/gradle.properties deleted file mode 100644 index 38c8d454..00000000 --- a/mvc/android/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true -android.useAndroidX=true -android.enableJetifier=true diff --git a/mvc/android/gradle/wrapper/gradle-wrapper.properties b/mvc/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 296b146b..00000000 --- a/mvc/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/mvc/android/settings.gradle b/mvc/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/mvc/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/mvc/ios/.gitignore b/mvc/ios/.gitignore deleted file mode 100644 index e96ef602..00000000 --- a/mvc/ios/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/mvc/ios/Flutter/AppFrameworkInfo.plist b/mvc/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 6b4c0f78..00000000 --- a/mvc/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/mvc/ios/Flutter/Debug.xcconfig b/mvc/ios/Flutter/Debug.xcconfig deleted file mode 100644 index e8efba11..00000000 --- a/mvc/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/mvc/ios/Flutter/Release.xcconfig b/mvc/ios/Flutter/Release.xcconfig deleted file mode 100644 index 399e9340..00000000 --- a/mvc/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/mvc/ios/Podfile b/mvc/ios/Podfile deleted file mode 100644 index b30a428b..00000000 --- a/mvc/ios/Podfile +++ /dev/null @@ -1,90 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '9.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; - end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end - end - generated_key_values -end - -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; - - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' - - # Plugin Pods - - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') - end -end - -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end - end -end diff --git a/mvc/ios/Runner.xcodeproj/project.pbxproj b/mvc/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index f4be4884..00000000 --- a/mvc/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,518 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B80C3931E831B6300D905FE /* App.framework */, - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mvc; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mvc; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mvc; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/mvc/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mvc/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/mvc/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/mvc/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mvc/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a28140cf..00000000 --- a/mvc/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvc/ios/Runner.xcworkspace/contents.xcworkspacedata b/mvc/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/mvc/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/mvc/ios/Runner/AppDelegate.swift b/mvc/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a..00000000 --- a/mvc/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d22f10b2..00000000 --- a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 980e5ad64bb0fd4a9c2c6506e9b811ffea9dd64b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)5QXpJpN(w?YkRkYwc_j#m|(3>!PrLIwlTJ6&Ufo}SH`I1$#eR?RVOWIzMsU) zrK2WI$*4hFGG^Q^9@T@8zu5)!Yz6I>${V_+j`Ok!^L)v;38fNcW`cbs^X>&xhbk?f zvS`XCEg(wS59HzvL0zJ3#-=Tswu302VRN>z3)sQt+#O8gBeP#+>JsI%uI=(!2l6=C zdFI%h9c;z_@g>lFVht7cT-%~z-i?ZdJmoU8IkPWPB^k`Ff#(xjg!dpSwLVm8y$Z@~ zqGHj@W>6!4&#i3X;(Y3is=Eq_sMPsUsrRE%>p_jmL_k5`*hG^t2U&6%yTe|1|lg*UW~p>+@q!E^s3OEa=e6Ud^0-fp0g z&B!j%6y4G^MmBL1O_42jA+woHwxTJ#r4io)FE___=bK_XXo_uveG`pQHs>9%se`%% x4TYA}o~Ajur)^2@Z#O6Q@F3(a-Ow$UJqP2R#rz($lm7q!002ovPDHLkV1fcFS>pfz diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index fd870289028b0d1ba6565d9f29fd42fab6bad5f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1591 zcmV-72FUq|P)Ffwcl%S_9_!a48Hv5l6Yg}=#nG6Dbu zla|r7Yb`^I)3=8fNzyX31gi{#!9`fl5R44#X&qjkmK_)Y1VY=0(Q$itxzaMci~?7J zyKH1wcMh7|XLASHg%J|-qf@pXF{&*iD^$-ij0`JyIjqHchvApQ$T03AS7awf2>H=E zVoaL{qYTWnjvBB;p1}%aY1}c541*Qen)UNz#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv; z?q3&e<7axnT(Y$hS>ykYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU9?SY zl0CLylXe)H&){aXGcRRIWPSb@&S>s!or|_aBlZ8FP zV=ahX*88G;#zXBh+X`g1q>VF-4C5|rhyFP)t?X1u_xvxC)$SMVvtD`w4~z_(bj-oX za4o|cKD-zpU*!;ev<20?M;dTJ^JP9;w8MaBVeEme`4cNaiXR?Rv*-WOoSK_wEc2pc z-cOwi3S{=X1Mm9MT7(KGr|8k7U|zR_3oZl*bk_W}NrOHzyJh_`l^26BGOXp>TXEVu zJ10BOU&GnjzWP3*b16ifOF@&4MdhE2FVJHzy+WUu;gYJ19-f7f;h*_ZbaZ}UtK1Xm za>H)G1;cm&;DU?v!V53ZQ!l+tpPk*LuH~=>H3wVyQz%QP7niom-IFL{&bkws3(7B6 zB8po6>4YjMdFI8J=u0!}B=1?l9E|yY#fx-td38B?=O3{Gc1U%R7f}wNr1@>T z^;xf;(1*M^?6XM*M&^PZUgF7`^l^qI?pn#Go_dO&d+s?D(o!rI2_@(EkI5y=dFttd z6|w-V;0y!N=gm`Z6WshW8CqCGkt<71?HrJU=lV4C!WwV}1JUa(P@k_k-woy|o6B8U z(4S0`!;{Ax^;)bl42m!^3`q0`O6UFl5=r{}MYw_QG$|?nTy7;&P*D93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+j ztOL979@$MeqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^ z$nd*OllQ^Xj1cnUL-EQrXRKOvMl0lCoFE2E)EO*kykCWpVe8!{^UAJxr6M~qLY6c6 zVB)yL6+fslctIn41|!2N!`5tX9`O4sA50u{FhXK}fDdI)uDOzj)2_rJNq896!Dlcs zjC=@Nvu<9IJermr7y%IK_+awrx+`_~H!f?qlZSa8Ja_V9{+g7*5v<@dSY_CnmEFA4 pojS_%e#4bI{@VvLN7oqv!0V&tCp*)&!{Pt{002ovPDHLkV1k)(4H5tV diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2506 zcmV;*2{rbKP)Z*FU!m{%*@P8VRsLNIdO-bn8LBcq}8jNvvE!9=H589 zS1q{F% z25_7w7rzc6_W!D9OuwF9IP!hcRh72%UTx5Ve2G1JF&R7ItnWOsxG;yFhdp@D-v_7k z&fdOmnO#2ee(9>pVtq010kWwNld+dE83*wHn9tfxBT2o#zpv%fYznjAHBY*l!u|2m zSf4hSMNGyg$1xwm-`9dY9-PW*J`_Ic{nAyH#QK&>FZOFo43jar5Bt!M3$uIOIUl>v zb9b5X3#kSD-cQS%Eqv6xMP zE1Yp6YpT=?fig_Kh{=PPj6E)4GIp-ZS?ri68GBT|J*YdD^7L~SW~Sf$s_d;n?I9a6 z86O}SlW`cF=fmCqsn)n2%B|DQU3h+l{eDQ{AqgImvG6u_z#8VP?>ut&`^aBtAJJ25 zoAf%WFtdD7GVuJ{!xnPrg0dHT=P{^0c=^-k#J?H&4rDa;IKAL**R;Bg+qyI7Dl?6?0iCgVW32mf*?q1Sfz z=n}fHUmsBNpsPIOBJ3dV4(?VgItv@Fu4~cXjdeNJ4Q-=X zkTvW(53?5w_f601lYAaaEi%u8TyU>q(bA3&^YwMj`h}NX(m!eGVBcXuOvdhcvL<%! ze>SspqOvb!mSs*L%6rh56AHih;)|A_H@E4+{TDD9A2AP;%Z=;jb0;eMNOFOB*o`eL zkL(y1%$N88ldrF9p|It5P46;5*0JRRCYv=(#zJ-Hgl=74E4rxsvheoAymLMogSucY z<-wA%;3_Qqt>G;*$gX227ciKa_|rX8dLX}1blF`~_UegQ<_E&Pw(wC<7~tyqm@cY8;W|KtwlU@|6uqkmeb zH@Ax}D?b_e=>MVDRK+0{Qa zGY;R24>BfWFnyGF7!ufW!Q|`fW4>kK-q-7OZRfb`_vPm!8NIr@S9IC=?H&Eyp`=&P zL*9tV*omA~}ZeJWoy5HD~$=HdkNnt5A zV=2cVg&Qu0Dhp4(@~Zx7`-nY%PkLGJpP=mE>Zblof3o0x)7Z;>GuWdSyY~yq+njVF zYd0LDFg*Y2YdV&i)hGFMdBe;2{~qZ!dO)F8jg@FX&V%1x1y9 zZDCDUN(sv10C;;)A5}S!)_zo&&EmhbwEC8O`st_jLk~TqpM3I3ie6EAZEY=7*{A37 z@3|k7aoF{g#$;tTvvCj~X8hM!8zsS(y!F;w^}`Q8OhG>aOW&W(9o&}@lW}2o7i1r{ zkPmw(`^6AsF&SI_5^J|b;kxUt(+@oGKww!|U0uDRsQm86&8Zc6nB0ZQ*v$|oW5GR7 zNeD}o;V+juY+3o&_`wGslz(MIm4$phuleklvj3V{4u3x;8O;oh`a>Hk*|{ z*FAE+h3xweWDa|nj5&)z5khf!UgL;iGIRXWnM_9C7*F`zF^}D_R>XVBN(NM4_Nc;S z?6V$;hcC@P*}n}=1i8bDSr6nA{Jx=_VVZ=F3f?YGp6iMhm%|?7UV2u9_DTw{2qZ!K}_qW+HdAyG7cc*d6O|2^A=3T($S!#tom$9pNdZ9^Kv*c znLivji9I5iJb?>y@#}7ipAXTgT>i7E+$n=n@)sdGx%LeyTSyJ|A%X*8Zw`~Odp{;m zVKR2Vhb-L;N>BtLl32UN8@4LQ0Zhg|2dW zA%Z~$U>6B&k+WEkHSFAPXJhuAV83+vgVrB5C?J3(I=%6Y==6G?K@gqBu#N>;!=Z>` zGKPTr$*hCCT{;*P00F@JA6atqAGI?Zc?v}^8M}Gk_sd)5&GL4GazXG#e(b7EZI(u6 zHm|NtZp0!p8}aDO=2CQK!(M`250o_w;5bhXyML)RxoO_A5i{?*THYvcHK?QbFVbTr U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 03ab8a84f141a4464654d46362eb539fffd7d067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 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 diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index f47613ee46814496f40d58ae909b756976d765e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcmV+}2GRM6P)oxL5Jl&M-bdt-nJLW7%*;tqD$LBxWM;P4BxYtABr|k+c6=+frM0{PRUMscPfyPc zN0@yoyQfc{?VNnEqH9uPrz*Op_Rn@r5@&*uVG9`URCG@6@%|KBtLUD5QNGCt01$L4 z`sPnmbWe?(?Vch@MfWs}3@f@|Q*dT^zM^MlM0Q{V5C~PhTFu#>nF0^-l4(m|mW>RX zor5y-Z0;btFhZh#)ymerTCt*cmW<56$gqN!!zLJK7=9c^hB1p=kewJI|_8U}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@Df?W z2J2MA$b1Huqni0OkwZ6C(4R1wv+aqh5neuGS0GCx!whEGD#I4$k?TfnG?ZCIFJnRM zWH2wPM;%l>YF8jjGgX{nWEius6`IGLG`n0Rv(KA>r0IT9J?5mpalpv1PR%%s3?F9L zg!866?Nf+=-x!ezKGY9`!N zJE=fs|3C1qYv%)$+1@Er4F%JtJ4DT-hd}M2ZyeI-{4ty1cY2=k!pN{Gx7ot9y1PeK zJ}>x_hx?3uMD4VXYNx$AHB-v>4@}aRzy3}akJ{Alj)L#P$nb-%7;WzDTPpW;Jb&aH zT+ojP02iF1pMUSp|=@GNZLSznTN_75zTdq0xJJ;P39Q7eC#4JZ!t z1B0rdSlvfrx|%*Xc`4| ze)#zpx_M+?KQqkp0$B2KJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^ z|CC;{RBm&BpC0kbav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA z0W0_q6h`KP3lRbhhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_UL9;QoS{=;0%|5GcFh< z(6Ffd;0OvH&D-NMOV_v(hBs7>!N@RXNi;0+;Zoed10!15asvYclt?5f zpU)p#F1)ovmpPMaH$M)m41+j~OhON~gbs51LWJJy>?tYs%{SjrXJ@BgE*_8T5RG;|v?ojGSc-AUUX-H`Km3q>`Q;as11Kr~x7|=~p}0-w zIezzr zXq;LcY233w7Dk2viDpl3ui2d=Ns~JZmvDQTlJf6MTO>v;YL<6^99(`s?!kb&i55>j z&4CnoSf`0IEV;v%F)cYAimF)#Mutnk?lSMScylSy>R-{Cz00J?!^ki)-Qmv}N)862 zI4_~a2P5a%W%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QG zL`$%6vL&!eI(`_e!0Ivsx2ZGE%BBQhQ`BALVleaE}Uo$6^pIG0<|!$AOtJ;4Av=~FT%!boGo)-xh-5M$WDxq<#akCTQzOr z^&*1@O2HW$8CDrKW-IprzhCHxtk*C?qJM#NliMfSq8lS^kqu(xW!My)nao=}hYyKv zj>ry-00;&;qMIk%VjC}VS*<;~k>-ngt-P3jCRnivEBFjn88&9=cHY?@+f4I*tu40o gVn<^0BqIR$3#s8JH79+r6951J07*qoM6N<$f+ET2fdBvi diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 42315c6dc1260f60b9de72e58f1fd4789c1f488a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�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 diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 45537513df37c45e8074c7c131c61cec2eac66ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 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 diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 6360ea17a408801185f000acaded313519da49b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9605 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7082 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 diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/mvc/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2f..00000000 --- a/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b..00000000 --- a/mvc/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -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. \ No newline at end of file diff --git a/mvc/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mvc/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7..00000000 --- a/mvc/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvc/ios/Runner/Base.lproj/Main.storyboard b/mvc/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516..00000000 --- a/mvc/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvc/ios/Runner/Info.plist b/mvc/ios/Runner/Info.plist deleted file mode 100644 index cbd0405a..00000000 --- a/mvc/ios/Runner/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - mvc - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/mvc/ios/Runner/Runner-Bridging-Header.h b/mvc/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 7335fdf9..00000000 --- a/mvc/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/mvc/lib/main.dart b/mvc/lib/main.dart deleted file mode 100644 index a138cd0d..00000000 --- a/mvc/lib/main.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:mvc/src/App.dart'; - -void main() { - runApp(MVCApp()); -} diff --git a/mvc/lib/src/App.dart b/mvc/lib/src/App.dart deleted file mode 100644 index 66e44225..00000000 --- a/mvc/lib/src/App.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:scoped_model_sample/localization.dart'; - -import 'package:mvc/src/screens/add_edit_screen.dart'; -import 'package:mvc/src/screens/home_screen.dart'; - -import 'package:mvc_pattern/mvc_pattern.dart'; -import 'package:mvc/src/Controller.dart'; - -class MVCApp extends AppMVC { - MVCApp({Key key}) : super(con: _controller, key: key); - - /// An external reference to the Controller if you wish. -gp - static final Con _controller = Con(); - - static MaterialApp _app; - - static String get title => _app.title.toString(); - - @override - Widget build(BuildContext context) { - _app = MaterialApp( - title: 'mvc example', - theme: ArchSampleTheme.theme, - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - ScopedModelLocalizationsDelegate(), - ], - routes: { - ArchSampleRoutes.home: (context) => HomeScreen(), - ArchSampleRoutes.addTodo: (context) => AddEditScreen(), - }, - ); - return _app; - } -} diff --git a/mvc/lib/src/Controller.dart b/mvc/lib/src/Controller.dart deleted file mode 100644 index 65a2c58f..00000000 --- a/mvc/lib/src/Controller.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'dart:async' show Future; -import 'package:mvc_pattern/mvc_pattern.dart' show ControllerMVC; - -import 'package:mvc/src/todo_list_model.dart' show VisibilityFilter; -import 'package:mvc/src/Model.dart' show Model; - -import 'package:mvc/src/App.dart' show MVCApp; - -/// The Controller answers & responses to 'the events' while the Model execute 'the rules' and manipulates data. -class Con extends ControllerMVC { - factory Con() { - return _this ??= Con._(); - } - static Con _this; - - Con._(); - - /// Allow for easy access to 'the Controller' throughout the application. - static Con get con => _this; - - static final model = Model(); - - static VisibilityFilter get activeFilter => model.activeFilter; - static set activeFilter(VisibilityFilter filter) => - model.activeFilter = filter; - - static List> get todos => model.todos; - - static bool get isLoading => model.isLoading; - - String get title => MVCApp.title; - - /// Called by the View. - void init() => loadData(); - - Future loadData() async { - var load = await model.loadTodos(); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - return load; - } - - static List get filteredTodos => model.filteredTodos; - - void clear() { - /// Only the Model 'knows' what it done when there's a 'clear' message issued. - model.clearCompleted(); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - void toggle() { - model.toggleAll(); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - void checked(Map data) { - /// The Model has the 'business rules' that fire when an item is checked. - model.checkCompleted(data); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - void updateTodo(Map data) { - model.updateTodo(data); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - void remove(Map dataItem) { - model.removeTodo(dataItem); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - void undo(Map dataItem) { - /// The Model 'knows' how to undo a remove of an item. - model.undoRemove(dataItem); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - void update(Map dataItem) { - /// Updates the database. Either add a new data item or updating an existing one. - model.update(dataItem); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - void addTodo(Map data) { - model.addTodo(data); - // In this case, it is the Controller that decides to 'refresh' the View. - refresh(); - } - - Map todoById(String id) { - return model.todoById(id); - } -} diff --git a/mvc/lib/src/Model.dart b/mvc/lib/src/Model.dart deleted file mode 100644 index 26b465fa..00000000 --- a/mvc/lib/src/Model.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'dart:async' show Future; - -/// It is this Model that 'knows of' this class. -/// This is to demonstrate the modular approach and 'separation of responsibilities' -import 'package:mvc/src/todo_list_model.dart' - show To, TodoListModel, VisibilityFilter; - -class Model { - final todoModel = TodoListModel(); - - VisibilityFilter get activeFilter => todoModel.activeFilter; - - set activeFilter(VisibilityFilter filter) { - todoModel.activeFilter = filter; - } - - List get todos => todoModel.todos.map(To.map).toList(); - - bool get isLoading => todoModel.isLoading; - - Future loadTodos() { - return todoModel.loadTodos(); - } - - List get filteredTodos => todoModel.filteredTodos.map(To.map).toList(); - - void clearCompleted() { - todoModel.clearCompleted(); - } - - void toggleAll() { - todoModel.toggleAll(); - } - - void removeTodo(Map data) { - todoModel.removeTodo(To.todo(data)); - } - - void undoRemove(Map data) { - data['id'] = null; - update(data); - } - - void update(Map data) { - if (data['id'] == null) { - todoModel.addTodo(To.todo(data)); - } else { - todoModel.updateTodo(To.todo(data)); - } - } - - void checkCompleted(Map data) { - /// The model 'knows' which field is involved when an item is checked. - data['complete'] = !data['complete']; - updateTodo(data); - } - - void updateTodo(Map data) { - todoModel.updateTodo(To.todo(data)); - } - - void addTodo(Map data) { - todoModel.addTodo(To.todo(data)); - } - - Map todoById(String id) { - return To.map(todoModel.todoById(id)).cast(); - } -} diff --git a/mvc/lib/src/models.dart b/mvc/lib/src/models.dart deleted file mode 100644 index c4315a15..00000000 --- a/mvc/lib/src/models.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:todos_app_core/todos_app_core.dart' show Uuid; -import 'package:todos_repository_core/todos_repository_core.dart' - show TodoEntity; - -enum AppTab { todos, stats } - -enum ExtraAction { toggleAllComplete, clearCompleted } - -class Todo { - final bool complete; - final String id; - final String note; - final String task; - - Todo(this.task, {this.complete = false, this.note = '', String id}) - : id = id ?? Uuid().generateV4(); - - @override - int get hashCode => - complete.hashCode ^ task.hashCode ^ note.hashCode ^ id.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is Todo && - runtimeType == other.runtimeType && - complete == other.complete && - task == other.task && - note == other.note && - id == other.id; - - @override - String toString() { - return 'Todo{complete: $complete, task: $task, note: $note, id: $id}'; - } - - TodoEntity toEntity() { - return TodoEntity(task, id, note, complete); - } - - static Todo fromEntity(TodoEntity entity) { - return Todo( - entity.task, - complete: entity.complete ?? false, - note: entity.note, - id: entity.id, - ); - } - - Todo copy({String task, bool complete, String note, String id}) { - return Todo( - task ?? this.task, - complete: complete ?? this.complete, - note: note ?? this.note, - id: id ?? this.id, - ); - } -} diff --git a/mvc/lib/src/screens/add_edit_screen.dart b/mvc/lib/src/screens/add_edit_screen.dart deleted file mode 100644 index b9f0efab..00000000 --- a/mvc/lib/src/screens/add_edit_screen.dart +++ /dev/null @@ -1,106 +0,0 @@ -import 'dart:async' show Future; -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart' - show ArchSampleKeys, ArchSampleLocalizations; - -/// The 'View' should know nothing of the 'Model.' -/// The 'View' only knows how to 'talk to' the Controller. -import 'package:mvc/src/Controller.dart' show Con; - -class AddEditScreen extends StatefulWidget { - final String todoId; - - AddEditScreen({Key key, this.todoId}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); - - @override - _AddEditScreenState createState() => _AddEditScreenState(); -} - -class _AddEditScreenState extends State { - static final GlobalKey formKey = GlobalKey(); - - final Con _con = Con.con; - String _task; - String _note; - - @override - Widget build(BuildContext context) { - /// Return the 'universally recognized' Map object. - /// The data will only be known through the use of Map objects. - final todo = _con.todoById(widget.todoId); - - return Scaffold( - appBar: AppBar( - title: Text( - isEditing - ? ArchSampleLocalizations.of(context).editTodo - : ArchSampleLocalizations.of(context).addTodo, - ), - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: Form( - key: formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, - child: ListView( - children: [ - TextFormField( - initialValue: todo['task'] ?? '', - key: ArchSampleKeys.taskField, - autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headline, - decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).newTodoHint, - ), - validator: (val) => val.trim().isEmpty - ? ArchSampleLocalizations.of(context).emptyTodoError - : null, - onSaved: (value) => _task = value, - ), - TextFormField( - initialValue: todo['note'] ?? '', - key: ArchSampleKeys.noteField, - maxLines: 10, - style: Theme.of(context).textTheme.subhead, - decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).notesHint, - ), - onSaved: (value) => _note = value, - ), - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - key: isEditing - ? ArchSampleKeys.saveTodoFab - : ArchSampleKeys.saveNewTodo, - tooltip: isEditing - ? ArchSampleLocalizations.of(context).saveChanges - : ArchSampleLocalizations.of(context).addTodo, - child: Icon(isEditing ? Icons.check : Icons.add), - onPressed: () { - final form = formKey.currentState; - if (form.validate()) { - form.save(); - todo['task'] = _task; - todo['note'] = _note; - if (isEditing) { - _con.update(todo); - } else { - _con.addTodo(todo); - } - Navigator.pop(context, todo); - } - }, - ), - ); - } - - bool get isEditing => widget.todoId != null; -} diff --git a/mvc/lib/src/screens/detail_screen.dart b/mvc/lib/src/screens/detail_screen.dart deleted file mode 100644 index 1a1d647a..00000000 --- a/mvc/lib/src/screens/detail_screen.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:flutter/foundation.dart' show required; -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart' - show ArchSampleKeys, ArchSampleLocalizations; - -import 'package:mvc/src/screens/add_edit_screen.dart' show AddEditScreen; - -import 'package:mvc/src/Controller.dart' show Con; - -class DetailScreen extends StatelessWidget { - final String todoId; - - final Con con = Con.con; - - DetailScreen({@required this.todoId}) - : super(key: ArchSampleKeys.todoDetailsScreen); - - @override - Widget build(BuildContext context) { - Map todo = con.todoById(todoId); - return Scaffold( - appBar: AppBar( - title: Text(ArchSampleLocalizations.of(context).todoDetails), - actions: [ - IconButton( - key: ArchSampleKeys.deleteTodoButton, - tooltip: ArchSampleLocalizations.of(context).deleteTodo, - icon: Icon(Icons.delete), - onPressed: () { - con.remove(todo); - Navigator.pop(context, todo); - }, - ), - ], - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: ListView( - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(right: 8.0), - child: Checkbox( - value: todo['complete'], - key: ArchSampleKeys.detailsTodoItemCheckbox, - onChanged: (complete) { - con.checked(todo); - }, - ), - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(top: 8.0, bottom: 16.0), - child: Text( - todo['task'], - key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, - ), - ), - Text( - todo['note'], - key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, - ), - ], - ), - ), - ], - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), - key: ArchSampleKeys.editTodoFab, - onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return AddEditScreen( - todoId: todoId, - key: ArchSampleKeys.editTodoScreen, - ); - }, - ), - ); - }, - ), - ); - } -} diff --git a/mvc/lib/src/screens/home_screen.dart b/mvc/lib/src/screens/home_screen.dart deleted file mode 100644 index e16a32e0..00000000 --- a/mvc/lib/src/screens/home_screen.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart' - show ArchSampleKeys, ArchSampleLocalizations, ArchSampleRoutes; - -import 'package:mvc/src/models.dart' show AppTab; -import 'package:mvc/src/widgets/extra_actions_button.dart' - show ExtraActionsButton; -import 'package:mvc/src/widgets/filter_button.dart' show FilterButton; -import 'package:mvc/src/widgets/stats_counter.dart' show StatsCounter; -import 'package:mvc/src/widgets/todo_list.dart' show TodoList; - -import 'package:mvc/src/Controller.dart' show Con; - -class HomeScreen extends StatefulWidget { - @protected - @override - State createState() => HomeView(); -} - -class HomeView extends State { - AppTab _activeTab = AppTab.todos; - - final Con _con = Con.con; - - @protected - @override - void initState() { - super.initState(); - - /// Calls the Controller when this one-time 'init' event occurs. - /// Not revealing the 'business logic' that then fires inside. - _con.init(); - } - - @protected - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - /// The View need not know nor care what the title is. The Controller does. - title: Text(_con.title), - actions: [ - FilterButton(isActive: _activeTab == AppTab.todos), - ExtraActionsButton(), - ], - ), - body: _activeTab == AppTab.todos ? TodoList() : StatsCounter(), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.addTodoFab, - onPressed: () { - Navigator.pushNamed(context, ArchSampleRoutes.addTodo); - }, - child: Icon(Icons.add), - tooltip: ArchSampleLocalizations.of(context).addTodo, - ), - bottomNavigationBar: BottomNavigationBar( - key: ArchSampleKeys.tabs, - currentIndex: AppTab.values.indexOf(_activeTab), - onTap: (index) { - setState(() { - _activeTab = AppTab.values[index]; - }); - }, - items: AppTab.values.map((tab) { - return BottomNavigationBarItem( - icon: Icon( - tab == AppTab.todos ? Icons.list : Icons.show_chart, - key: tab == AppTab.stats - ? ArchSampleKeys.statsTab - : ArchSampleKeys.todoTab, - ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), - ); - }).toList(), - ), - ); - } -} diff --git a/mvc/lib/src/todo_list_model.dart b/mvc/lib/src/todo_list_model.dart deleted file mode 100644 index b7a6da92..00000000 --- a/mvc/lib/src/todo_list_model.dart +++ /dev/null @@ -1,120 +0,0 @@ -import 'dart:async'; - -import 'package:path_provider/path_provider.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -import 'package:mvc/src/models.dart'; - -class TodoListModel { - TodoListModel({TodosRepository repo, VisibilityFilter activeFilter}) - : _activeFilter = activeFilter ?? VisibilityFilter.all { - /// The rest of the app need not know of its existence. - repository = - repo ?? - LocalStorageRepository( - localStorage: const FileStorage( - 'mvc_app', - getApplicationDocumentsDirectory, - ), - ); - } - TodosRepository repository; - - VisibilityFilter get activeFilter => _activeFilter; - set activeFilter(VisibilityFilter filter) => _activeFilter = filter; - VisibilityFilter _activeFilter; - - List get todos => _todos.toList(); - List _todos = []; - - bool get isLoading => _isLoading; - bool _isLoading = false; - - /// Loads remote data - Future loadTodos() { - _isLoading = true; - return repository - .loadTodos() - .then((loadedTodos) { - _todos = loadedTodos.map(Todo.fromEntity).toList(); - _isLoading = false; - }) - .catchError((err) { - _isLoading = false; - _todos = []; - }); - } - - List get filteredTodos => _todos.where((todo) { - switch (activeFilter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); - - void clearCompleted() { - _todos.removeWhere((todo) => todo.complete); - _uploadItems(); - } - - void toggleAll() { - var allComplete = todos.every((todo) => todo.complete); - _todos = _todos.map((todo) => todo.copy(complete: !allComplete)).toList(); - _uploadItems(); - } - - /// updates by replacing the item with the same id by the parameter - void updateTodo(Todo todo) { - assert(todo != null); - assert(todo.id != null); - var oldTodo = _todos.firstWhere((it) => it.id == todo.id); - var replaceIndex = _todos.indexOf(oldTodo); - _todos.replaceRange(replaceIndex, replaceIndex + 1, [todo]); - _uploadItems(); - } - - void removeTodo(Todo todo) { - _todos.removeWhere((it) => it.id == todo.id); - _uploadItems(); - } - - void addTodo(Todo todo) { - _todos.add(todo); - _uploadItems(); - } - - void _uploadItems() { - repository.saveTodos(_todos.map((it) => it.toEntity()).toList()); - } - - Todo todoById(String id) { - return _todos.firstWhere((it) => it.id == id, orElse: () => null); - } -} - -enum VisibilityFilter { all, active, completed } - -class To { - /// Convert from a Map object - static Todo todo(Map data) { - return Todo( - data['task'], - complete: data['complete'], - note: data['note'], - id: data['id'], - ); - } - - /// Used to 'interface' with the View in the MVC design pattern. - static Map map(Todo obj) => { - 'task': obj == null ? '' : obj.task, - 'note': obj == null ? '' : obj.note, - 'complete': obj == null ? false : obj.complete, - 'id': obj == null ? null : obj.id, - }; -} diff --git a/mvc/lib/src/widgets/extra_actions_button.dart b/mvc/lib/src/widgets/extra_actions_button.dart deleted file mode 100644 index 81f7a6c7..00000000 --- a/mvc/lib/src/widgets/extra_actions_button.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:scoped_model_sample/models.dart'; - -import 'package:mvc/src/Controller.dart'; - -class ExtraActionsButton extends StatelessWidget { - ExtraActionsButton({Key key}) : super(key: key); - - final con = Con.con; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, - onSelected: (action) { - if (action == ExtraAction.toggleAllComplete) { - con.toggle(); - } else if (action == ExtraAction.clearCompleted) { - /// The View nor the Conttoller need not know what's involved. - con.clear(); - } - }, - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.toggleAll, - value: ExtraAction.toggleAllComplete, - child: Text( - Con.todos.any((it) => !it['complete']) - ? ArchSampleLocalizations.of(context).markAllComplete - : ArchSampleLocalizations.of(context).markAllIncomplete, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.clearCompleted, - value: ExtraAction.clearCompleted, - child: Text(ArchSampleLocalizations.of(context).clearCompleted), - ), - ], - ); - } -} diff --git a/mvc/lib/src/widgets/filter_button.dart b/mvc/lib/src/widgets/filter_button.dart deleted file mode 100644 index ec4aaf75..00000000 --- a/mvc/lib/src/widgets/filter_button.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:mvc/src/todo_list_model.dart'; -import 'package:mvc/src/Controller.dart'; - -class FilterButton extends StatelessWidget { - final bool isActive; - - FilterButton({this.isActive, Key key}) : super(key: key); - - final con = Con.con; - - @override - Widget build(BuildContext context) { - // var model = TodoListModel.of(context, rebuildOnChange: true); - return AnimatedOpacity( - opacity: isActive ? 1.0 : 0.0, - duration: Duration(milliseconds: 150), - child: PopupMenuButton( - key: ArchSampleKeys.filterButton, - tooltip: ArchSampleLocalizations.of(context).filterTodos, - onSelected: (filter) { - Con.activeFilter = filter; - con.refresh(); - }, - itemBuilder: (BuildContext context) => _items(context), - icon: Icon(Icons.filter_list), - ), - ); - } - - List> _items(BuildContext context) { - final activeStyle = Theme.of( - context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); - final defaultStyle = Theme.of(context).textTheme.body1; - - return [ - PopupMenuItem( - key: ArchSampleKeys.allFilter, - value: VisibilityFilter.all, - child: Text( - ArchSampleLocalizations.of(context).showAll, - style: Con.activeFilter == VisibilityFilter.all - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.activeFilter, - value: VisibilityFilter.active, - child: Text( - ArchSampleLocalizations.of(context).showActive, - style: Con.activeFilter == VisibilityFilter.active - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.completedFilter, - value: VisibilityFilter.completed, - child: Text( - ArchSampleLocalizations.of(context).showCompleted, - style: Con.activeFilter == VisibilityFilter.completed - ? activeStyle - : defaultStyle, - ), - ), - ]; - } -} diff --git a/mvc/lib/src/widgets/stats_counter.dart b/mvc/lib/src/widgets/stats_counter.dart deleted file mode 100644 index 4c32de7c..00000000 --- a/mvc/lib/src/widgets/stats_counter.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:mvc/src/Controller.dart'; - -class StatsCounter extends StatelessWidget { - StatsCounter() : super(key: ArchSampleKeys.statsCounter); - - bool isActive(Map todo) => !todo['complete']; - - bool isCompleted(Map todo) => todo['complete']; - - @override - Widget build(BuildContext context) { - var numCompleted = Con.model.todos.where(isCompleted).toList().length; - var numActive = Con.todos.where(isActive).toList().length; - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numCompleted', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numActive', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, - ), - ), - ], - ), - ); - } -} diff --git a/mvc/lib/src/widgets/todo_item.dart b/mvc/lib/src/widgets/todo_item.dart deleted file mode 100644 index f537c863..00000000 --- a/mvc/lib/src/widgets/todo_item.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class TodoItem extends StatelessWidget { - final DismissDirectionCallback onDismissed; - final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; - final Map todo; - - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, - }); - - @override - Widget build(BuildContext context) { - return Dismissible( - key: ArchSampleKeys.todoItem(todo['id']), - onDismissed: onDismissed, - child: ListTile( - onTap: onTap, - leading: Checkbox( - key: ArchSampleKeys.todoItemCheckbox(todo['id']), - value: todo['complete'], - onChanged: onCheckboxChanged, - ), - title: Text( - todo['task'], - key: ArchSampleKeys.todoItemTask(todo['id']), - style: Theme.of(context).textTheme.title, - ), - subtitle: Text( - todo['note'], - key: ArchSampleKeys.todoItemNote(todo['id']), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, - ), - ), - ); - } -} diff --git a/mvc/lib/src/widgets/todo_list.dart b/mvc/lib/src/widgets/todo_list.dart deleted file mode 100644 index 83a03d45..00000000 --- a/mvc/lib/src/widgets/todo_list.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:mvc/src/screens/detail_screen.dart'; -import 'package:mvc/src/widgets/todo_item.dart'; - -import 'package:mvc/src/Controller.dart'; - -class TodoList extends StatelessWidget { - TodoList({Key key}) : super(key: key); - - static final _con = Con.con; - - @override - Widget build(BuildContext context) { - return Container(child: Con.isLoading ? _buildLoading : _buildList()); - } - - Center get _buildLoading { - return Center( - child: CircularProgressIndicator(key: ArchSampleKeys.todosLoading), - ); - } - - ListView _buildList() { - final todos = Con.filteredTodos; - return ListView.builder( - key: ArchSampleKeys.todoList, - itemCount: todos.length, - itemBuilder: (BuildContext context, int index) { - final Map todo = todos.elementAt(index).cast(); - return TodoItem( - todo: todo, - onDismissed: (direction) { - _removeTodo(context, todo); - }, - onTap: () { - Navigator.of(context) - .push( - MaterialPageRoute( - builder: (_) { - return DetailScreen(todoId: todo['id']); - }, - ), - ) - .then((todo) { - if (todo is Map && todo.isNotEmpty) { - _showUndoSnackbar(context, todo); - } - }); - }, - onCheckboxChanged: (complete) { - _con.checked(todo); - }, - ); - }, - ); - } - - void _removeTodo(BuildContext context, Map todo) { - _con.remove(todo); - _showUndoSnackbar(context, todo); - } - - void _showUndoSnackbar(BuildContext context, Map todo) { - Scaffold.of(context).showSnackBar( - SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo['task']), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - key: ArchSampleKeys.snackbarAction(todo['id']), - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - _con.undo(todo); - }, - ), - ), - ); - } -} diff --git a/mvc/pubspec.yaml b/mvc/pubspec.yaml deleted file mode 100644 index f1ca5380..00000000 --- a/mvc/pubspec.yaml +++ /dev/null @@ -1,80 +0,0 @@ -name: mvc -description: A new Flutter project. - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.1.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - scoped_model_sample: - path: ../scoped_model - todos_app_core: - path: ../todos_app_core - todos_repository_local_storage: - path: ../todos_repository_local_storage - mvc_pattern: - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_driver: - sdk: flutter - test: - mockito: - integration_tests: - path: ../integration_tests - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/mvc/test/todo_list_model_test.dart b/mvc/test/todo_list_model_test.dart deleted file mode 100644 index 25f5985e..00000000 --- a/mvc/test/todo_list_model_test.dart +++ /dev/null @@ -1,127 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mvc/src/models.dart'; -import 'package:mvc/src/todo_list_model.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -void main() { - group('TodoListModel', () { - test('should check if there are completed todos', () async { - final model = TodoListModel( - repo: MockRepository([Todo('a'), Todo('b'), Todo('c', complete: true)]), - ); - await model.loadTodos(); - - expect(model.todos.any((it) => it.complete), true); - }); - - test('should calculate the number of active todos', () async { - final model = TodoListModel( - repo: MockRepository([Todo('a'), Todo('b'), Todo('c', complete: true)]), - ); - await model.loadTodos(); - - expect(model.todos.where((it) => !it.complete).toList().length, 2); - }); - - test('should calculate the number of completed todos', () async { - final model = TodoListModel( - repo: MockRepository([Todo('a'), Todo('b'), Todo('c', complete: true)]), - ); - await model.loadTodos(); - - expect(model.todos.where((it) => it.complete).toList().length, 1); - }); - - test('should return all todos if the VisibilityFilter is all', () async { - final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; - final model = TodoListModel( - repo: MockRepository(todos), - activeFilter: VisibilityFilter.all, - ); - await model.loadTodos(); - - expect(model.filteredTodos, todos); - }); - - test( - 'should return active todos if the VisibilityFilter is active', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - final model = TodoListModel( - repo: MockRepository(todos), - activeFilter: VisibilityFilter.active, - ); - await model.loadTodos(); - - expect(model.filteredTodos, [todo1, todo2]); - }, - ); - - test( - 'should return completed todos if the VisibilityFilter is completed', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - final model = TodoListModel( - repo: MockRepository(todos), - activeFilter: VisibilityFilter.completed, - ); - await model.loadTodos(); - - expect(model.filteredTodos, [todo3]); - }, - ); - - test('should clear the completed todos', () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - final model = TodoListModel(repo: MockRepository(todos)); - await model.loadTodos(); - - model.clearCompleted(); - - expect(model.todos, [todo1, todo2]); - }); - - test('toggle all as complete or incomplete', () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - final model = TodoListModel(repo: MockRepository(todos)); - await model.loadTodos(); - - // Toggle all complete - model.toggleAll(); - expect(model.todos.every((t) => t.complete), isTrue); - - // Toggle all incomplete - model.toggleAll(); - expect(model.todos.every((t) => !t.complete), isTrue); - }); - }); -} - -class MockRepository extends TodosRepository { - List entities; - - MockRepository(List todos) - : entities = todos.map((it) => it.toEntity()).toList(); - - @override - Future> loadTodos() { - return Future.value(entities); - } - - @override - Future saveTodos(List todos) { - return Future.sync(() => entities = todos); - } -} diff --git a/mvc/test_driver/todo_app.dart b/mvc/test_driver/todo_app.dart deleted file mode 100644 index 0ea65b60..00000000 --- a/mvc/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:mvc/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/mvc/test_driver/todo_app_test.dart b/mvc/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/mvc/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/mvu/.flutter-plugins-dependencies b/mvu/.flutter-plugins-dependencies deleted file mode 100644 index 30693179..00000000 --- a/mvu/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"android":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":[]}],"date_created":"2020-02-10 11:24:26.886816","version":"1.14.7-pre.38"} \ No newline at end of file diff --git a/mvu/.gitignore b/mvu/.gitignore deleted file mode 100644 index 2ddde2a5..00000000 --- a/mvu/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.packages -.pub-cache/ -.pub/ -/build/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/mvu/.metadata b/mvu/.metadata deleted file mode 100644 index 1b5cec02..00000000 --- a/mvu/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable - -project_type: app diff --git a/mvu/README.md b/mvu/README.md deleted file mode 100644 index d935158e..00000000 --- a/mvu/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# MVU (Model-View-Update) - -This sample makes use of the [dartea](https://pub.dartlang.org/packages/dartea) and [built_value](https://pub.dartlang.org/packages/built_value) libraries to manage state. - - -[dartea](https://pub.dartlang.org/packages/dartea) is implementation of enginge for MVU pattern inspired by [TEA (The Elm Architecture)](https://guide.elm-lang.org/architecture/) and [Elmish (F# TEA implemetation)](https://fable-elmish.github.io/elmish/) - -![Simple MVU app](mvu_todo.png "Simple MVU app") - -## Components -* #### Model - This is a snapshot of your application's state, defined as an immutable data structure using the [built_value](https://pub.dartlang.org/packages/built_value) library. -* #### Update - This is a pure function that produces a new state of your application given the previous state and, optionally, new commands to process. - ```dart - Upd update(TMsg msg, TModel model) - ``` - `Upd` is simple data-container, it contains properties `model → TModel` and `effects → Cmd` (side-effects) -* #### View - This is a pure function that produces a new UI (Widget's tree) given the current state. - ```dart - Widget view(BuildContext ctx, Dispatch dispatch, TModel model) - ``` - Dispatch is simple function `void dispatch(TMsg msg)` which is dispatched `messages` into program loop. -* #### Message - This an event representing a change (delta) in the state of your application, originally defined as [Union type in Elm](https://guide.elm-lang.org/types/union_types.html) or [Discriminated union in F#](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/discriminated-unions). Dart doesn't have built-in support for [Algebraic data types](https://en.wikipedia.org/wiki/Algebraic_data_type), so we can use simple inheritance instead. -* #### Command - This is a carrier of instructions, that when evaluated may produce one or more messages. It's used for controlled side-effects. -* #### Subscriptions - The events from the outside world, which are translated into messages. For example data from Websockets, timers and etc. - -## Key concepts -The heart of the MVU application are three yellow boxes on the diagram. First, the state of the app (Model) is mapped to the widgets tree (View). Second, events from the UI are translated into Messages and goes to the Update function (together with current app state). Update function is the brain of the app. It contains all the presentation logic, and it MUST be [pure](https://en.wikipedia.org/wiki/Pure_function). All the side-effects (such as database queries, http requests and etc) must be isolated using Commands and Subscriptions. - -### Code structure conventions -Every screen or component consists of `Model` and two main functions `update` and `view`. Optionally it may have `init` function, which creates initial state of a `Model`, and `subscription` function, which is subscribed to the events from the outside world and translates them to the `messages`. -For every screen we have thise files: -* ##### `state.dart` - `update`, `init` and `subscribe` functions. -* ##### `types.dart` and `types.g.dart` (generated with `built_value`) - `model`, `messages` and all the other classes which is required by `model`. -* ##### `view.dart` - `view` function. -* ##### `xxx.dart` - where `xxx` is screen or component name. It's composition (library) of all three parts above. - - -## Build -To enforcing `Model` immutability it need to be created with `built_value`. `built_value` library uses code generation. `built_value_generator` and `build_runner` are added as dev dependencies. -Whenever you update your Value Classes you need to run this command in console: -``` -flutter packages pub run build_runner build -``` -or run it in `watch` mode: -``` -flutter packages pub run build_runner watch -``` \ No newline at end of file diff --git a/mvu/android/.gitignore b/mvu/android/.gitignore deleted file mode 100644 index bc2100d8..00000000 --- a/mvu/android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java diff --git a/mvu/android/app/build.gradle b/mvu/android/app/build.gradle deleted file mode 100644 index b109d5c8..00000000 --- a/mvu/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.mvu" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/mvu/android/app/src/debug/AndroidManifest.xml b/mvu/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 7d73ad0a..00000000 --- a/mvu/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/mvu/android/app/src/main/AndroidManifest.xml b/mvu/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index f52686b9..00000000 --- a/mvu/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - diff --git a/mvu/android/app/src/main/kotlin/com/example/mvu/MainActivity.kt b/mvu/android/app/src/main/kotlin/com/example/mvu/MainActivity.kt deleted file mode 100644 index e4e5b156..00000000 --- a/mvu/android/app/src/main/kotlin/com/example/mvu/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.mvu - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/mvu/android/app/src/main/res/drawable/launch_background.xml b/mvu/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f8..00000000 --- a/mvu/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/mvu/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mvu/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1345 zcmV-H1-|-;P)uTd_0!V%xTj^~RVz+qQkNle+bG&pJ+~-@fF1He>(R5VVes7IOD>*8pj zqheUWHU<|V7e)gem4GGsJ2+v4(LhI>IrhY(VKk7Fi2z<|iTM&34b&ar1j_BVBq$oF zT^5{XaPhSSL<7+saIV4Zza$tMh~~j%l#2}#2o2PNi5m@Wr%DhsPz$TzUdrtp34jJ_ znQ1?5aIsS|cnuV=f=vu2gk<0vD8TK`l#6|mL2IA@7ekLTU=2jMm@OHo2BH8yg9lB? zAT>}wfRiW}AIb-*2s!8_Z`J0aS1@qoHy_}lPQz#RkE4~2! z=(Z>XqZkO0{yAgr%jc0Yq~kU?n{xX%#oOwWjsPbUd6WU+HDJRj(Jz;3Pq)p5ODGd- zRpPkY*4@5D9@RitX39y?ua@Yk&>~x0XE2eZ_RJA;@u^#pK)8}JPmFl^&f?(|+~wXw zlx{1_o=Py400@z``6J9n3hk?`&=Zu2?MiW&7)&sg2ncJBf3{icIA1y&P$u@O?8x0O z8w6ANfUwMLs0l^6(Xzk}43I58|S(7_2STsgb3Bd;<* zSWm4;S)us6*-BXm&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPV zl> zWXCr#aj@#Fvz(Q*M}0@G_VI6yJOZd~Pq;2> zG2)cDYOmwaEd5xdfMri1N}~YDGjb-}H20OVqDYXKgR~o0O;}k+t{Ul{4}K_j9IRSv zxx3v|cI4{w)Uu@Ys(@Ztn-O+?{~M&L=c#`Z%N?oK8Ww*1pQL%Dy5z}!lGc^q%5iX( zB~2vNEl(~>T3hyWhlL+ome`jZ8I6QEPyDr|C8@qaq{OwQz}f%Uvg8*?P03TslUJAE zK;HNC-|6?0nwBS)Cl!sfCZpi#6&bP@T^i~6H5v9p>yj@bH8^;1uQ~>2b^5MaYqCxw zI(Sbyg!J61w0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjf DcgJkH diff --git a/mvu/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mvu/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmV;Q17Q4#P)D0gcVJI$m~tEjv=UM0#+Kd63T)IDVl(l zvY&{|q6jFO0HMLQ#b81S0Dyr|HVC0a6X*nBRzW5d1L+np_qFwC#87rFp==?-)R%y< zj}1(H>?1n?7#kA)tAlU}k(G^l;H@(IuS$Va5|bYvz0=YlGw+9MB+BA>!SR-IE8k(W zss)NAY>RFfF#X*6g#X0HZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBj zZgsP_v6)r@tiJZ$7xW!}mA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RJk``vY$`OxQ*%)P`Z0=`!sm4&|R=Oet|5ds3V>euZ%{TI`LDr?o5zeocvw?J`)O?{o8l!*psNt8|JhsSNR;46T0IM8_na3x~KezsqT zA1)v=Tdr^0D3gl99S1hI0M-S=rog)?z5}}8-E0I${?adS$(Wh&R(v76xwin`PYdu0 zbg#FpqHc-yTEGq6N5U1uCc~TY1qhFY5`Nu@Qolq$Te~WudyfS}=OJKd)eEj2I=&db zQoWbz*OVxUtbEH)$su9rG#CuOwSk+4xXJ=oEs^2_sj&J)NjyPGI}P`CaMH$ab=~d2G%a1mdZ8P~vz1 z6J=A4mv>~R@d~_|Kw~d$&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2iJAov!lV07GM*+YPcV?WX<0QCSHeyl2P0#=U002ovPDHLkV1k9w Bv-l9 zt9+wUT%OBq!KVV0gzw^#a9nQ>J{6$U0gLtOaJS>_2tE~{1bjEQ5NG}^A@HdH+2MOL zg@UI7WGnz+QdurvEPN_JhFS*@t7AR8LV-^ONZsiGbjL*VK&bGk00}ksD)iC0Jby}o zPX&ZJ^K0QjOf>CM;Zp%2)XW<03EbnC$pN1V5Lq*7yw79Xsgesm6(FKgT@CTrcCN|^ zp9&D#^Q*Wi*mmmWhED|unfY$-EZk}~C;^`e=xFAx8~5QlHDzE=xA70{w)S3^(C@qbYhJ{1t0`Ts&+gmFx5_<{t)=9zLL z8UEW>U=YsyGbG>(5)hqN2r&lZ7yL_yNP|C}<%Z&Jr-BrG!2>2?7>`v}hb8~hKpL|t@i0{la7 zJlnls_aN=S=h8_owm9?u(XkD$h`#VP1q4P#*UeuK4R`q1@AX9C<4YV}wfDJ@F1`Z+ z{F6}ACC@w}Orr(-6v%5L3!l34wK}=AS3rc7EjBpKLc3f`F!B%uo~lj4JOieC%10@Ns;@ z|5jAi8w*`PA;jv9d8&kJ)xMVz{uRPAf2$&ar4#{y=%R2Z|C&#+T*u8#241vE+6J8bXXIQb7)-ZWhBd?XW1oB$sw`gqGBAdnv!4-VXMpofg7+YiKi3Zz7$ ziSLi+Dc)b@63`^!XrFv@AIWWp^{yto&Gh2;zsaiXF60!@bXKtU+_GmtDA(fu6v)LD z5MFG>Cz@d;ARwW%TfTX)nCo~CpbLgt-;z!=`5l+4hZ{u%1fmNz&R}|05PUcEzysD# znoTsrQb6FacDake{8GE8+iP$?E_O!=x19@;63y@x;FnMryV;o7+P^*P5X4ne|j0Sw+KgSQB^^L%uTOBcprbYzt z3v=V}gGENX`D+oCXlg~kQ~Q61B)b!)oU0|-c6Q00Xlg;g@SiORzY>y81jb|n68J-2 z*!=`kY4A+$S1|HWNi+DCWAfP=^#r&**`M`Xvhxk8Ew+lZwCY`B*X>7eBi6-{^xlvlEP$e)M zcL4M0Hel9nLFfixGIAj%V*?}{Ju3))aJ<1waMo)x(UfmJFlLBuHLEuRler0)^!30j z&4Re}97wd3ih|!P;WSF9td}Lx#07VJlom^j1ZFL^nq}F*ELj80qD<(qJR8Q@93jEK zEx`@RmH%lg(Ig?kKl>Md0?hj>fO&Tr^je++-;5|F?>$&Q!dF7xo=eAASo7 zZ(XblzeH2b8e=IvK}-OSaVMP4Nc^Z=6B1r8sW=}+D^Lj*M~Ry7#~!b+QtBim*qx29 zSslMp+HJKX>xE(^;U`!xd`BsFxF(dzFTu_>CfFR?C|%(aj>~xZZA>V-xQ9lb&SqY`b5{t`eoJ@-rEn2iXW&ICk*P-_82Zx0K0000YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/mvu/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mvu/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d5614ac831d924f5e49e16a3d4391be8964fcdf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4067 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 - - - diff --git a/mvu/android/app/src/profile/AndroidManifest.xml b/mvu/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 7d73ad0a..00000000 --- a/mvu/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/mvu/android/build.gradle b/mvu/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/mvu/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/mvu/android/gradle.properties b/mvu/android/gradle.properties deleted file mode 100644 index 38c8d454..00000000 --- a/mvu/android/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true -android.useAndroidX=true -android.enableJetifier=true diff --git a/mvu/android/gradle/wrapper/gradle-wrapper.properties b/mvu/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 296b146b..00000000 --- a/mvu/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/mvu/android/settings.gradle b/mvu/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/mvu/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/mvu/ios/.gitignore b/mvu/ios/.gitignore deleted file mode 100644 index e96ef602..00000000 --- a/mvu/ios/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/mvu/ios/Flutter/AppFrameworkInfo.plist b/mvu/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 6b4c0f78..00000000 --- a/mvu/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/mvu/ios/Flutter/Debug.xcconfig b/mvu/ios/Flutter/Debug.xcconfig deleted file mode 100644 index e8efba11..00000000 --- a/mvu/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/mvu/ios/Flutter/Release.xcconfig b/mvu/ios/Flutter/Release.xcconfig deleted file mode 100644 index 399e9340..00000000 --- a/mvu/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/mvu/ios/Podfile b/mvu/ios/Podfile deleted file mode 100644 index b30a428b..00000000 --- a/mvu/ios/Podfile +++ /dev/null @@ -1,90 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '9.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; - end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end - end - generated_key_values -end - -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; - - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' - - # Plugin Pods - - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') - end -end - -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end - end -end diff --git a/mvu/ios/Runner.xcodeproj/project.pbxproj b/mvu/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 57e30aec..00000000 --- a/mvu/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,518 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B80C3931E831B6300D905FE /* App.framework */, - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mvu; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mvu; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mvu; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/mvu/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mvu/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/mvu/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/mvu/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mvu/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a28140cf..00000000 --- a/mvu/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvu/ios/Runner.xcworkspace/contents.xcworkspacedata b/mvu/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/mvu/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/mvu/ios/Runner/AppDelegate.swift b/mvu/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a..00000000 --- a/mvu/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d22f10b2..00000000 --- a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 980e5ad64bb0fd4a9c2c6506e9b811ffea9dd64b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)5QXpJpN(w?YkRkYwc_j#m|(3>!PrLIwlTJ6&Ufo}SH`I1$#eR?RVOWIzMsU) zrK2WI$*4hFGG^Q^9@T@8zu5)!Yz6I>${V_+j`Ok!^L)v;38fNcW`cbs^X>&xhbk?f zvS`XCEg(wS59HzvL0zJ3#-=Tswu302VRN>z3)sQt+#O8gBeP#+>JsI%uI=(!2l6=C zdFI%h9c;z_@g>lFVht7cT-%~z-i?ZdJmoU8IkPWPB^k`Ff#(xjg!dpSwLVm8y$Z@~ zqGHj@W>6!4&#i3X;(Y3is=Eq_sMPsUsrRE%>p_jmL_k5`*hG^t2U&6%yTe|1|lg*UW~p>+@q!E^s3OEa=e6Ud^0-fp0g z&B!j%6y4G^MmBL1O_42jA+woHwxTJ#r4io)FE___=bK_XXo_uveG`pQHs>9%se`%% x4TYA}o~Ajur)^2@Z#O6Q@F3(a-Ow$UJqP2R#rz($lm7q!002ovPDHLkV1fcFS>pfz diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index fd870289028b0d1ba6565d9f29fd42fab6bad5f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1591 zcmV-72FUq|P)Ffwcl%S_9_!a48Hv5l6Yg}=#nG6Dbu zla|r7Yb`^I)3=8fNzyX31gi{#!9`fl5R44#X&qjkmK_)Y1VY=0(Q$itxzaMci~?7J zyKH1wcMh7|XLASHg%J|-qf@pXF{&*iD^$-ij0`JyIjqHchvApQ$T03AS7awf2>H=E zVoaL{qYTWnjvBB;p1}%aY1}c541*Qen)UNz#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv; z?q3&e<7axnT(Y$hS>ykYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU9?SY zl0CLylXe)H&){aXGcRRIWPSb@&S>s!or|_aBlZ8FP zV=ahX*88G;#zXBh+X`g1q>VF-4C5|rhyFP)t?X1u_xvxC)$SMVvtD`w4~z_(bj-oX za4o|cKD-zpU*!;ev<20?M;dTJ^JP9;w8MaBVeEme`4cNaiXR?Rv*-WOoSK_wEc2pc z-cOwi3S{=X1Mm9MT7(KGr|8k7U|zR_3oZl*bk_W}NrOHzyJh_`l^26BGOXp>TXEVu zJ10BOU&GnjzWP3*b16ifOF@&4MdhE2FVJHzy+WUu;gYJ19-f7f;h*_ZbaZ}UtK1Xm za>H)G1;cm&;DU?v!V53ZQ!l+tpPk*LuH~=>H3wVyQz%QP7niom-IFL{&bkws3(7B6 zB8po6>4YjMdFI8J=u0!}B=1?l9E|yY#fx-td38B?=O3{Gc1U%R7f}wNr1@>T z^;xf;(1*M^?6XM*M&^PZUgF7`^l^qI?pn#Go_dO&d+s?D(o!rI2_@(EkI5y=dFttd z6|w-V;0y!N=gm`Z6WshW8CqCGkt<71?HrJU=lV4C!WwV}1JUa(P@k_k-woy|o6B8U z(4S0`!;{Ax^;)bl42m!^3`q0`O6UFl5=r{}MYw_QG$|?nTy7;&P*D93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+j ztOL979@$MeqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^ z$nd*OllQ^Xj1cnUL-EQrXRKOvMl0lCoFE2E)EO*kykCWpVe8!{^UAJxr6M~qLY6c6 zVB)yL6+fslctIn41|!2N!`5tX9`O4sA50u{FhXK}fDdI)uDOzj)2_rJNq896!Dlcs zjC=@Nvu<9IJermr7y%IK_+awrx+`_~H!f?qlZSa8Ja_V9{+g7*5v<@dSY_CnmEFA4 pojS_%e#4bI{@VvLN7oqv!0V&tCp*)&!{Pt{002ovPDHLkV1k)(4H5tV diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2506 zcmV;*2{rbKP)Z*FU!m{%*@P8VRsLNIdO-bn8LBcq}8jNvvE!9=H589 zS1q{F% z25_7w7rzc6_W!D9OuwF9IP!hcRh72%UTx5Ve2G1JF&R7ItnWOsxG;yFhdp@D-v_7k z&fdOmnO#2ee(9>pVtq010kWwNld+dE83*wHn9tfxBT2o#zpv%fYznjAHBY*l!u|2m zSf4hSMNGyg$1xwm-`9dY9-PW*J`_Ic{nAyH#QK&>FZOFo43jar5Bt!M3$uIOIUl>v zb9b5X3#kSD-cQS%Eqv6xMP zE1Yp6YpT=?fig_Kh{=PPj6E)4GIp-ZS?ri68GBT|J*YdD^7L~SW~Sf$s_d;n?I9a6 z86O}SlW`cF=fmCqsn)n2%B|DQU3h+l{eDQ{AqgImvG6u_z#8VP?>ut&`^aBtAJJ25 zoAf%WFtdD7GVuJ{!xnPrg0dHT=P{^0c=^-k#J?H&4rDa;IKAL**R;Bg+qyI7Dl?6?0iCgVW32mf*?q1Sfz z=n}fHUmsBNpsPIOBJ3dV4(?VgItv@Fu4~cXjdeNJ4Q-=X zkTvW(53?5w_f601lYAaaEi%u8TyU>q(bA3&^YwMj`h}NX(m!eGVBcXuOvdhcvL<%! ze>SspqOvb!mSs*L%6rh56AHih;)|A_H@E4+{TDD9A2AP;%Z=;jb0;eMNOFOB*o`eL zkL(y1%$N88ldrF9p|It5P46;5*0JRRCYv=(#zJ-Hgl=74E4rxsvheoAymLMogSucY z<-wA%;3_Qqt>G;*$gX227ciKa_|rX8dLX}1blF`~_UegQ<_E&Pw(wC<7~tyqm@cY8;W|KtwlU@|6uqkmeb zH@Ax}D?b_e=>MVDRK+0{Qa zGY;R24>BfWFnyGF7!ufW!Q|`fW4>kK-q-7OZRfb`_vPm!8NIr@S9IC=?H&Eyp`=&P zL*9tV*omA~}ZeJWoy5HD~$=HdkNnt5A zV=2cVg&Qu0Dhp4(@~Zx7`-nY%PkLGJpP=mE>Zblof3o0x)7Z;>GuWdSyY~yq+njVF zYd0LDFg*Y2YdV&i)hGFMdBe;2{~qZ!dO)F8jg@FX&V%1x1y9 zZDCDUN(sv10C;;)A5}S!)_zo&&EmhbwEC8O`st_jLk~TqpM3I3ie6EAZEY=7*{A37 z@3|k7aoF{g#$;tTvvCj~X8hM!8zsS(y!F;w^}`Q8OhG>aOW&W(9o&}@lW}2o7i1r{ zkPmw(`^6AsF&SI_5^J|b;kxUt(+@oGKww!|U0uDRsQm86&8Zc6nB0ZQ*v$|oW5GR7 zNeD}o;V+juY+3o&_`wGslz(MIm4$phuleklvj3V{4u3x;8O;oh`a>Hk*|{ z*FAE+h3xweWDa|nj5&)z5khf!UgL;iGIRXWnM_9C7*F`zF^}D_R>XVBN(NM4_Nc;S z?6V$;hcC@P*}n}=1i8bDSr6nA{Jx=_VVZ=F3f?YGp6iMhm%|?7UV2u9_DTw{2qZ!K}_qW+HdAyG7cc*d6O|2^A=3T($S!#tom$9pNdZ9^Kv*c znLivji9I5iJb?>y@#}7ipAXTgT>i7E+$n=n@)sdGx%LeyTSyJ|A%X*8Zw`~Odp{;m zVKR2Vhb-L;N>BtLl32UN8@4LQ0Zhg|2dW zA%Z~$U>6B&k+WEkHSFAPXJhuAV83+vgVrB5C?J3(I=%6Y==6G?K@gqBu#N>;!=Z>` zGKPTr$*hCCT{;*P00F@JA6atqAGI?Zc?v}^8M}Gk_sd)5&GL4GazXG#e(b7EZI(u6 zHm|NtZp0!p8}aDO=2CQK!(M`250o_w;5bhXyML)RxoO_A5i{?*THYvcHK?QbFVbTr U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 03ab8a84f141a4464654d46362eb539fffd7d067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 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 diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index f47613ee46814496f40d58ae909b756976d765e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcmV+}2GRM6P)oxL5Jl&M-bdt-nJLW7%*;tqD$LBxWM;P4BxYtABr|k+c6=+frM0{PRUMscPfyPc zN0@yoyQfc{?VNnEqH9uPrz*Op_Rn@r5@&*uVG9`URCG@6@%|KBtLUD5QNGCt01$L4 z`sPnmbWe?(?Vch@MfWs}3@f@|Q*dT^zM^MlM0Q{V5C~PhTFu#>nF0^-l4(m|mW>RX zor5y-Z0;btFhZh#)ymerTCt*cmW<56$gqN!!zLJK7=9c^hB1p=kewJI|_8U}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@Df?W z2J2MA$b1Huqni0OkwZ6C(4R1wv+aqh5neuGS0GCx!whEGD#I4$k?TfnG?ZCIFJnRM zWH2wPM;%l>YF8jjGgX{nWEius6`IGLG`n0Rv(KA>r0IT9J?5mpalpv1PR%%s3?F9L zg!866?Nf+=-x!ezKGY9`!N zJE=fs|3C1qYv%)$+1@Er4F%JtJ4DT-hd}M2ZyeI-{4ty1cY2=k!pN{Gx7ot9y1PeK zJ}>x_hx?3uMD4VXYNx$AHB-v>4@}aRzy3}akJ{Alj)L#P$nb-%7;WzDTPpW;Jb&aH zT+ojP02iF1pMUSp|=@GNZLSznTN_75zTdq0xJJ;P39Q7eC#4JZ!t z1B0rdSlvfrx|%*Xc`4| ze)#zpx_M+?KQqkp0$B2KJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^ z|CC;{RBm&BpC0kbav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA z0W0_q6h`KP3lRbhhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_UL9;QoS{=;0%|5GcFh< z(6Ffd;0OvH&D-NMOV_v(hBs7>!N@RXNi;0+;Zoed10!15asvYclt?5f zpU)p#F1)ovmpPMaH$M)m41+j~OhON~gbs51LWJJy>?tYs%{SjrXJ@BgE*_8T5RG;|v?ojGSc-AUUX-H`Km3q>`Q;as11Kr~x7|=~p}0-w zIezzr zXq;LcY233w7Dk2viDpl3ui2d=Ns~JZmvDQTlJf6MTO>v;YL<6^99(`s?!kb&i55>j z&4CnoSf`0IEV;v%F)cYAimF)#Mutnk?lSMScylSy>R-{Cz00J?!^ki)-Qmv}N)862 zI4_~a2P5a%W%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QG zL`$%6vL&!eI(`_e!0Ivsx2ZGE%BBQhQ`BALVleaE}Uo$6^pIG0<|!$AOtJ;4Av=~FT%!boGo)-xh-5M$WDxq<#akCTQzOr z^&*1@O2HW$8CDrKW-IprzhCHxtk*C?qJM#NliMfSq8lS^kqu(xW!My)nao=}hYyKv zj>ry-00;&;qMIk%VjC}VS*<;~k>-ngt-P3jCRnivEBFjn88&9=cHY?@+f4I*tu40o gVn<^0BqIR$3#s8JH79+r6951J07*qoM6N<$f+ET2fdBvi diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 42315c6dc1260f60b9de72e58f1fd4789c1f488a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�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 diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 45537513df37c45e8074c7c131c61cec2eac66ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 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 diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 6360ea17a408801185f000acaded313519da49b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9605 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7082 zcmX9@c{~&T8=rF+rqdi575bKA___+qUF0Yg6}F*L)X05p<}NGxDrbxoGQL;MjBf_>tYzr>Xq$_6N=o0Du2rHD{xom>(Px;hTf3Q3L1}6$u2=ii z;hGaoSNcB3W%`CLa~nH7=kKhp|IvqP5nqQFzon&}+>6pL#}*8%JSqM&&ojOTKdwEn zly9-E*};tA`HFeL0`pTKN|@`Sz#?vbc! zzov1o2U11u(Fj`uG|2aa_!M;MuD0#J4`r209`+mAz^Ev!dQqh;7einE~+r-2lz;V&kO-a zOROfTuX;6Fp!LnwN6&{ZMJtZ)Ri4yNF`SOP{rgfk`v7zW8L>5+^6%# zm&!YdE6eOD2zw=IR3G)?#-7QlsuD`zx+uAggTTTkbcEsq zbEM*0$yc5$9uarcA8T0u7QIadj+E1gFLaF|V%mW66T)|@BFx_d|s%X9HPc4n#AaixZ)BjhJtC`ZmFrCe!0dT4u&Uovy- za`up<{5p%Oabc%n^!qrNlJ|QEvC=7{fCq2jp4gpy^6*Q%nGxGf@;}p=vMI)>R=EBcUl$2%-c-y&zn4>meYdb;Iq9F7SGm%yu)heuD-dmPEr5V zro!kZLJ#@+;S&n@`S$qUsTxKdSDVV~Vf;=X*s-R?nt0`Mtgz^>@ik@;q~^oY zOQEC(&jCB`V5`RAWFz^du${D@XeRSKJJ>pgN6GJY*xc0#8A=qg4lMKP{AJ4x^^z&E zAud$kktFNb$4^H$V~^UtbARyvwRkCh4yK+y=H;yAw-{Endo$p2&XC2%?XAy60}ggO z7LRQRS9eQaJU&S83LT)hzCc0_?A9%hF`vK`4B}N=tHl%}6>f|7=uo^sb5pcX7LMyk zPkW=da(P&(cZ&YZdoroM`7W23$9>UsOW$Ary<*z!$g(s)H}_pA#&O|5^hR??Tt7{PZh=@ z)WPG+_IY-!$!o#5(P4XJ!YMH%0*doXyv0?2V)#J}_J6&ND%lls-*r$RJx3=v(n#e& zH;;)bgC)_hq^`rhQ1j8#p_&k^2l>yk+a6zTLX}Y(Y+~>@4&Wt2OD2YAZH9}M$N_p( zmDpZEZw8v1QO~43VFXr98Y6RI{D<;cg}}Y1k($s)$H=46sW3XBx%i*+f|gy6a!CfO z_t6=#DL-%u)h8xg)&2uZ-w`sEGz3dD=Z1t8eG)FiG(vi!G4A>jOMH=|DA!S!NLMI| zf)Hh?k2{)X&!zaE&d(A%8I5Vfi8&odA|xPgUWU)<^f|a62)VMNnl}HilJP=ol>Z1s(K)= zdr8j)v2R3hWL=|J)#)E6auQ>Y%&a1$P%eRy$aYT{ktJqiPpX@eZtpESN*=u$X;i+Z z?88=UDDrgNkRT;ckQ&Rn=aQkYaT$97(Te*R0T?-?8C)?X!Hxh7g6?o1g%$lJ;0Ujf zQ4wUv@$KU-^XX6BQp8sz37W2T_?)~fb~%AXnRGOzp9!WPBa&u+qTlle8|#&Gd1p=u zQg}?gKdV>NH@kvSpUdUXveRTg6$Y}YoelpHu0=@=wR9drK^MFyS^)~ioI)jJXpFc* zox0-nRM;a*GM|HP5LwULkiN^hr$rMN#$e7LByw@ER~Mi>elyF&{Ki;|O=_Xgp*N;w zw~#e3vN%vsv_f;k`|`(}tQ>n9+H*_AZz%q-S z1hd|~FelE)W0u9lv4-4zW>;`!ET zmqYh7lP2i-q*~#L<4F8{*Jn>a+wYp>{+@7yeK0jWq8Bt)ZR*rrX$*_(u=g}kgbw>^=yl4`FYN29YK|y0vV?p7b5xz+ zT6T1M2v_oDWSu(qAnWO5C75vHHhA|!tZ2ShM$sJtC_~+hv{s@2`o)l5jUPnASZn)%NmRVT*sz6;-x>ID8rb@J||u0 zvO18dac)PH6G#y7lV6|FR}hp$1qn}`Y1WaE51D?@Qzmks^E56-U|m#LFRgJWT0}99 z5ZxF-cY|+vDnGh=K}!O`K=)P5*+AV-2=+f%YjcnoX~-_YJ%}q*I_bFK0H5!+gt^M| zDuYZbqTo>quFk}_x3^~H$x_>DT4W9`;e4CG%JBMMrAf);TNaKnhv*!+M`k?@T_lyGoSmDsd{X%pw9^QdSymt zXKOQSB_p%I>xWhjeU&YlIyx%pk4}CH>+m@8bTUx>ZuH1&L%og8Xt^-X+ZE9O0StY> zNW(nsqZWs@$~g!LA5BQ&WrpgV7I3)*+53W?OcEBOnvJlz)fidT)Lr&<9 zm_ejD(l^YwI|>N{2m6{zmFoZeBt!!waz^fjdg^Qz6P_H%9EmqrW(;CKbqRX)Vfo@S zV>RN$o{0+X#ORKo^Blx~OG{9+$h&M2kRGLsJ6CNa5^*q~Wu_=c+h2v#&O}u_0l0aQ z+<%WD6N0#7mkUpMei8CFv^V4~l^GwB{?z_$OyqLrLIpv{>oEbw$OIA+v$X|ZUBUCw zsjMEMKLFq6v$JANXO6S>zBWy#V7Tl~?U#zA8@c8X_Xhy!9(eO!!<)V-$1E;JmX@9B znP(X7eti3PIdJ+rEp%{$$Q7!(*zXp`L*M}j|0liTcNURT0NNeu`J;*&S6}bq{jPs0 zBah}Y>IffrU6(ns)1T;9!{#&R<{4#>STswZ(mFsGh9je25ZXps5W2M^>_du)Lib90#hehghp zQ_DJNC?L-WZ+8VN%kE@nFk5(m#ud`n>dsETjcb}OUm{a&saYcX)Iw}%+|#1x_j|*G%C9YT+yFnfHySC=mBjxH#Kw zcN+Uncav8V7&od(R8my&jgu0)ecYfbMEPyYlm`*|l>y``-~aqt_@dTi(cktP!1h!O zufc!ur{shjgYhnnBDu#qoD$M>p5}jhePwKfF{U6Au?Y^b`|BE9El5Y*F_hJT&L+xc=Ctb6A-uW z!d=Mw_wNr5PuV&+I2_;JYkFt~pXOy%TznDhrvaM}TZc!9rN#jt{T6DJLQRyIN46V7 zyqEg22jwyn`^UzlO1hf6#P3ifaekpjt^XntA{fvSv*?v8H6Tj94P@@UjQ7S=lUo_m zhCJ=vIBoRh3(qEgYwbkaGP^bWFjhnO)X&-L2>Dis?yi;-Z=8O8+5MDzWmi|1JO|HR z7{;8>xa7FVthI5{6(#q@{hy@`cT4_cK+8jH`M#qKeZUUhA2c0dx#Iupv6``^B`~w( z9G1-W@GIZR(6ssytMMREM~L$b%z3{T?V0na+}iSG)sXEy%Eo2t7s5A7zV0wym$zWKiaML}CO{wB zQCQ1uiJ4xHgTIn(ItaXDHxc1m0ukF?%Cwny=)av%>@_-_j(i8R8P?J^9T^Is=z?Uv zSI`@`q-f-)_G#e>YzCB?;fxazR2DfSBKiHBnny}@%g_;-L>u}_Az@LJ&e`7>xU|t| z3Ju@n(bm?+p+t1YMn@qX+P{c4t1tv7ZF@K8jf3V0bS%aRJ>_8yTbS(YG=UjNjTli0PFKT=%YY^B~r zJ8H<7@T1WN>~=<6kS~H^n$Kn#sla&U4vkQLW<9jv!%?~0fx_NkY(6%j`0 zl&wMwouL#vqpL|qtaDft*g|N;V;tDI^7lfxbKgJ{T#g#HM%2#}llQS5+Z2dDox-M5 zqNepL>*PY073#U1eP&`f*Ww1uz~EY0{#PvCwx7PA1sCzk*GCC5Uft0ME@A7Ye>n+p zw=^AFB`G*3dsb)S;ddv)Hk$kylR-N{uO~L&BRxG6wok!#@wLkjmzgchJO@bc$HBxJ zt|u&}naASR?R1h~YsgHLN4M{WD$`+BwPvCf+Lb#qlet#4mhgU>uMuJ&&E-^))`V}h zK*n_d+VZYGoYtG5hz_Ob4cT%cC-l6k>VhB;M8`2;n5|%&Qc2K*IwptUQ@%;q}H2!$1>A-<5-#aupX#SqH`SUP8bxZr4$1rl|X&Y<+3IC>%^ykQ#q?4%fvhP2KdYkO&@Ey z_mm)A9wJ~$-4=_XRQrH67CRr9&H%{HVeE-B0#Aes&4gR)AP^l$mcmHDiD{29?^HR1 zoA>zH68l}2ZN{=_u9&xki#X_#klF8o?O*ck$@lK^r_4Z~PxyW+6Jn`uID*_uh8=gI zXzt54TyRXYoQRq#xv=|{ZM{)HBnI;U-!#ZbE{_(wJ+6g9d~t-h?+bc`#cK4~B{x0{ z;ZAExmA`)ERd^xA#(2e%x*s3Usj9g~GeNsX0j!$a8oxyDc=OKcN{u}I?y)?3Q|StO zubGQsmUm8R77p(|SQCg@x(-s&PYwDODlxu;Q+(C!;apW;@m%ebC)g4G#b~2BXX8*} z&#(Ha^FcgOMkqmwuoqo^gv}1fW>49q7J23RUAV+MywObH)}YB>Y)+wMiGf9f5vZh5 zfwlegcToBFR+F8YFkF2=;$ZA&H_(~$AnVtVi-D(4oaUG9tj?~^mA*u-m|LJ5G1xH? zp`FUpJEnReZR%WNXwdW|cfI)79bV{N@W&?Ns%jOpfPok8%V&N+eUk_y=HT;K;aIr( z&!Wt0j}Nw}0io{PKcVvoHzT8J*R6vMLRa~BAQY6#Gsu@)AsHFRNm|Y`nL(sg?lRJV zkDhHlRoyAx$2DXBV%AVMpy{Q$8yoeu)&f#yL{UBK&G7!|z3$9u*R{gioO3P%2S37% z%v;6YkEqAcQpZZb)o;Zd1LRjc{ih_G?J+KDI|9`5Fm(s(m-HV{tSg~%XC!P~N#CHZ zhgYml)PD-tc|F;t-vF{R9JiaIL0f@`rt~|52}Eb7hD9cuH4|r%H-GT&Jtdog@--AO z%@1HG&(D|7(F@pLZX6i~c79VzS!CTuBhU%jz2&-kcQKsOHV*OMd;cQI!$7-dd{Gz$ zPVK8^qsImtXwA&krKNJ3fmaUvyqz%fW1%ehds43jw@)c?TRpPOY|GOE+L143WvG~3 zJ%!eMR7Ti!-Cx?#2Q&Kt1a%_qO&f%X8b2I4lq)5Y9t>VLD9SG%VZ=8^2Gbr5d$dl% zS6O3ycQDz{cC796@vot+izqDmwhw9+&}+W}g1Dh9#dQfVAVtbbO5n?LzTK*NsWLRK864 zE1m{+ezy#If&D2+W$rO=VFbd0HQ%~EgOHH?6e5fngc&ce&zMk$u}-rxSXsqit`6W)v6VF2tzyhf8k(Sa}XiI@Kn3cyFU3H7Fn zow=@NMv}`*G~$@_e-|v;-ZuzL4}l@Q!zxiSZ7U*to#k*7LuiTaq4WN_$%H@tCwSELovi?#);DO=eab--=ZH7HKd2gMR(2QC9&7Xts6k@9V~7djo1OeN~c> zWEnwYN%SEWB%PD4l+Gi-jGzC;b{auoZjRFv%_y;!h7in zZ80tU6{R!mcYGGPP^WT=lc$kUSxyw9{KvHPWKg;tPI%ir6XW9bQf|T3$uFUgsmNPn zPf7F1`w^1%;fK1RLemV4V1oG+PAHhZVoW!=dk$|;xv&~NcjkB!bv1$(`g^E+d*oNX z<-f=JJ%xgMRTel2eH zpzNJ~u=9aIp{HPupG)#V_LlK8gQi(nchnterdzM}*eib>a7&&En16W zB+nMV41!(hsb;g6JjZ%VcRkv)f4OJ5h)eGPDo?69s{<2f`>)V;%Fvwlrq7L~ZO3^W z(q*tV<%*MAPydy(b7}ji_3P8gpINJ=Nf@6-BBDLElYoub?j9f84Q4EE(TdticzdY9 zX|7iF4;laTd7w|`YT24^EsKWF^Nsc_jYw|dfGHaOPfKfvn(%jMm+kI*U0Ge@`aS1K zZ(2)hQeLi34qW=yH~$>ef9B>gDf|tyqw_=~T@D`$JxUlb5BC}LO}6M*#lq%`;kdZBZ7GN2M4%nZfjO%f{gkfr9@=g diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/mvu/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2f..00000000 --- a/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b..00000000 --- a/mvu/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -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. \ No newline at end of file diff --git a/mvu/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mvu/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7..00000000 --- a/mvu/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvu/ios/Runner/Base.lproj/Main.storyboard b/mvu/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516..00000000 --- a/mvu/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvu/ios/Runner/Info.plist b/mvu/ios/Runner/Info.plist deleted file mode 100644 index f49048bd..00000000 --- a/mvu/ios/Runner/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - mvu - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/mvu/ios/Runner/Runner-Bridging-Header.h b/mvu/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 7335fdf9..00000000 --- a/mvu/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/mvu/lib/common/extra_actions_menu.dart b/mvu/lib/common/extra_actions_menu.dart deleted file mode 100644 index 2b0cef7f..00000000 --- a/mvu/lib/common/extra_actions_menu.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -enum ExtraAction { toggleAll, clearCompleted } - -Widget buildExtraActionsMenu( - void Function(ExtraAction action) onSelected, bool allComplete) { - return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, - onSelected: onSelected, - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.toggleAll, - value: ExtraAction.toggleAll, - child: Text(allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete), - ), - PopupMenuItem( - key: ArchSampleKeys.clearCompleted, - value: ExtraAction.clearCompleted, - child: Text(ArchSampleLocalizations.of(context).clearCompleted), - ), - ], - ); -} diff --git a/mvu/lib/common/repository_commands.dart b/mvu/lib/common/repository_commands.dart deleted file mode 100644 index 1c2a6e79..00000000 --- a/mvu/lib/common/repository_commands.dart +++ /dev/null @@ -1,121 +0,0 @@ -import 'dart:async'; - -import 'package:dartea/dartea.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -abstract class RepositoryEvent {} - -class RepoOnTodoAdded implements RepositoryEvent { - final TodoEntity entity; - - RepoOnTodoAdded(this.entity); -} - -class RepoOnTodoRemoved implements RepositoryEvent { - final TodoEntity entity; - - RepoOnTodoRemoved(this.entity); -} - -class RepoOnTodoChanged implements RepositoryEvent { - final TodoEntity entity; - - RepoOnTodoChanged(this.entity); -} - -abstract class CmdRepository { - Cmd loadTodosCmd(T Function(List items) onSuccess, - {T Function(Exception exc) onError}); - - Cmd saveAllCmd(List entities, {T Function() onSuccess}); - - Cmd removeCmd(TodoEntity todo, {T Function() onSuccess}); - - Cmd saveCmd(TodoEntity todo, {T Function() onSuccess}); - - Cmd createCmd( - T Function(TodoEntity todo) onSuccess, String task, String note); - - Cmd updateDetailsCmd(T Function(TodoEntity todo) onSuccess, String id, - String task, String note); - - Stream get events; -} - -class TodosCmdRepository implements CmdRepository { - final TodosRepository _repo; - - TodosCmdRepository(this._repo); - - final StreamController _changesStreamController = - StreamController.broadcast(); - - @override - Stream get events => _changesStreamController.stream; - - @override - Cmd loadTodosCmd(T Function(List items) onSuccess, - {T Function(Exception exc) onError}) => - Cmd.ofAsyncFunc(_repo.loadTodos, onSuccess: onSuccess, onError: onError); - - @override - Cmd saveAllCmd(List entities, {T Function() onSuccess}) => - Cmd.ofAsyncAction(() => _repo.saveTodos(entities), - onSuccess: onSuccess); - - @override - Cmd removeCmd(TodoEntity todo, {T Function() onSuccess}) => - Cmd.ofAsyncAction(() async { - var todos = await _repo.loadTodos(); - await _repo.saveTodos(todos.where((x) => x.id != todo.id).toList()); - _changesStreamController.add(RepoOnTodoRemoved(todo)); - }, onSuccess: onSuccess); - - @override - Cmd saveCmd(TodoEntity todo, {T Function() onSuccess}) => - Cmd.ofAsyncAction(() async { - var todos = await _repo.loadTodos(); - await _repo - .saveTodos(todos.map((x) => x.id == todo.id ? todo : x).toList()); - _changesStreamController.add(RepoOnTodoChanged(todo)); - }, onSuccess: onSuccess); - - @override - Cmd createCmd( - T Function(TodoEntity todo) onSuccess, String task, String note) => - Cmd.ofAsyncFunc(() async { - var todo = TodoEntity(task, Uuid().generateV4(), note, false); - var todos = await _repo.loadTodos() - ..add(todo); - await _repo.saveTodos(todos); - _changesStreamController.add(RepoOnTodoAdded(todo)); - return todo; - }, onSuccess: onSuccess); - - @override - Cmd updateDetailsCmd(T Function(TodoEntity todo) onSuccess, String id, - String task, String note) => - Cmd.ofAsyncFunc(() async { - var todos = await _repo.loadTodos(); - var updated = todos - .map((x) => x.id == id ? TodoEntity(task, id, note, x.complete) : x) - .toList(); - await _repo.saveTodos(updated); - var updatedTodo = updated.firstWhere((x) => x.id == id); - _changesStreamController.add(RepoOnTodoChanged(updatedTodo)); - return updatedTodo; - }, onSuccess: onSuccess); -} - -const _internalRepository = LocalStorageRepository( - localStorage: FileStorage( - 'mvu_app', - getApplicationDocumentsDirectory, - ), - webClient: WebClient(), -); - -final CmdRepository repoCmds = TodosCmdRepository(_internalRepository); diff --git a/mvu/lib/common/router.dart b/mvu/lib/common/router.dart deleted file mode 100644 index 5c2e1434..00000000 --- a/mvu/lib/common/router.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:dartea/dartea.dart'; -import 'package:mvu/common/todo_model.dart'; -import 'package:mvu/details/details.dart' as details; -import 'package:mvu/edit/edit.dart' as edit; -import 'package:mvu/common/repository_commands.dart'; - -NavigatorState _navigator; - -void init(BuildContext context) { - _navigator = Navigator.of(context); -} - -Cmd goToDetailsScreen(TodoModel todo) => - Cmd.ofAction(() => _navigator.push(MaterialPageRoute( - builder: (_) => details.createProgram(repoCmds, todo).build()))); - -Cmd goToEditTodoScreen(TodoModel todo) => - Cmd.ofAction(() => _navigator.push(MaterialPageRoute( - builder: (_) => - edit.createProgram(repoCmds, todo: todo.toEntity()).build()))); - -Cmd goToCreateNewScreen() => Cmd.ofAction(() => _navigator.push( - MaterialPageRoute(builder: (_) => edit.createProgram(repoCmds).build()))); - -Cmd goBack() => Cmd.ofAction(() => _navigator.pop()); diff --git a/mvu/lib/common/snackbar.dart b/mvu/lib/common/snackbar.dart deleted file mode 100644 index 9caf4363..00000000 --- a/mvu/lib/common/snackbar.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:dartea/dartea.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -ScaffoldState _scaffoldState; - -void init(BuildContext context) { - _scaffoldState = Scaffold.of(context); -} - -Cmd showUndoCmd(String task, TMsg Function() onUndo) { - return Cmd.ofEffect((Dispatch dispatch) { - _scaffoldState.showSnackBar( - SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(_scaffoldState.context).todoDeleted(task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(_scaffoldState.context).undo, - onPressed: () => dispatch(onUndo()), - ), - ), - ); - }); -} diff --git a/mvu/lib/common/todo_model.dart b/mvu/lib/common/todo_model.dart deleted file mode 100644 index 81ad3892..00000000 --- a/mvu/lib/common/todo_model.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:built_value/built_value.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -part 'todo_model.g.dart'; - -abstract class TodoModel implements Built { - String get id; - bool get complete; - String get note; - String get task; - - TodoModel._(); - factory TodoModel([void Function(TodoModelBuilder b) updates]) = _$TodoModel; - - TodoEntity toEntity() { - return TodoEntity(task, id, note, complete); - } - - static TodoModel fromEntity(TodoEntity entity) { - var model = TodoModel((b) => b - ..task = entity.task - ..complete = entity.complete - ..note = entity.note - ..id = entity.id ?? Uuid().generateV4()); - return model; - } -} diff --git a/mvu/lib/common/todo_model.g.dart b/mvu/lib/common/todo_model.g.dart deleted file mode 100644 index de62d78e..00000000 --- a/mvu/lib/common/todo_model.g.dart +++ /dev/null @@ -1,137 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'todo_model.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -// ignore_for_file: always_put_control_body_on_new_line -// ignore_for_file: annotate_overrides -// ignore_for_file: avoid_annotating_with_dynamic -// ignore_for_file: avoid_catches_without_on_clauses -// ignore_for_file: avoid_returning_this -// ignore_for_file: lines_longer_than_80_chars -// ignore_for_file: omit_local_variable_types -// ignore_for_file: prefer_expression_function_bodies -// ignore_for_file: sort_constructors_first -// ignore_for_file: unnecessary_const -// ignore_for_file: unnecessary_new -// ignore_for_file: test_types_in_equals - -class _$TodoModel extends TodoModel { - @override - final String id; - @override - final bool complete; - @override - final String note; - @override - final String task; - - factory _$TodoModel([void Function(TodoModelBuilder b) updates]) => - (new TodoModelBuilder()..update(updates)).build(); - - _$TodoModel._({this.id, this.complete, this.note, this.task}) : super._() { - if (id == null) { - throw new BuiltValueNullFieldError('TodoModel', 'id'); - } - if (complete == null) { - throw new BuiltValueNullFieldError('TodoModel', 'complete'); - } - if (note == null) { - throw new BuiltValueNullFieldError('TodoModel', 'note'); - } - if (task == null) { - throw new BuiltValueNullFieldError('TodoModel', 'task'); - } - } - - @override - TodoModel rebuild(void Function(TodoModelBuilder b) updates) => - (toBuilder()..update(updates)).build(); - - @override - TodoModelBuilder toBuilder() => new TodoModelBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is TodoModel && - id == other.id && - complete == other.complete && - note == other.note && - task == other.task; - } - - @override - int get hashCode { - return $jf($jc( - $jc($jc($jc(0, id.hashCode), complete.hashCode), note.hashCode), - task.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('TodoModel') - ..add('id', id) - ..add('complete', complete) - ..add('note', note) - ..add('task', task)) - .toString(); - } -} - -class TodoModelBuilder implements Builder { - _$TodoModel _$v; - - String _id; - String get id => _$this._id; - set id(String id) => _$this._id = id; - - bool _complete; - bool get complete => _$this._complete; - set complete(bool complete) => _$this._complete = complete; - - String _note; - String get note => _$this._note; - set note(String note) => _$this._note = note; - - String _task; - String get task => _$this._task; - set task(String task) => _$this._task = task; - - TodoModelBuilder(); - - TodoModelBuilder get _$this { - if (_$v != null) { - _id = _$v.id; - _complete = _$v.complete; - _note = _$v.note; - _task = _$v.task; - _$v = null; - } - return this; - } - - @override - void replace(TodoModel other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$TodoModel; - } - - @override - void update(void Function(TodoModelBuilder b) updates) { - if (updates != null) updates(this); - } - - @override - _$TodoModel build() { - final _$result = _$v ?? - new _$TodoModel._(id: id, complete: complete, note: note, task: task); - replace(_$result); - return _$result; - } -} diff --git a/mvu/lib/details/details.dart b/mvu/lib/details/details.dart deleted file mode 100644 index 06774a10..00000000 --- a/mvu/lib/details/details.dart +++ /dev/null @@ -1,39 +0,0 @@ -library details; - -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:dartea/dartea.dart'; -import 'package:mvu/details/types.dart'; -import 'package:mvu/common/todo_model.dart'; -import 'package:mvu/common/repository_commands.dart'; -import 'package:mvu/common/router.dart' as router; - -part 'state.dart'; -part 'view.dart'; - -Program> - createProgram(CmdRepository repo, TodoModel todo) => Program( - () => init(todo), (msg, model) => update(repo, msg, model), view, - subscription: (s, d, m) => _repoSubscription(repo, s, d, m)); - -StreamSubscription _repoSubscription( - CmdRepository repo, - StreamSubscription currentSub, - Dispatch dispatch, - DetailsModel model) { - if (currentSub != null) { - return currentSub; - } - final sub = repo.events.listen((event) { - if (event is RepoOnTodoChanged) { - dispatch(OnTodoChanged(event.entity)); - } - if (event is RepoOnTodoRemoved) { - dispatch(OnTodoRemoved(event.entity)); - } - }); - return sub; -} diff --git a/mvu/lib/details/state.dart b/mvu/lib/details/state.dart deleted file mode 100644 index f2a080ef..00000000 --- a/mvu/lib/details/state.dart +++ /dev/null @@ -1,40 +0,0 @@ -part of details; - -Upd init(TodoModel todo) { - var model = DetailsModel((b) => b..todo = todo.toBuilder()); - return Upd(model); -} - -Upd update( - CmdRepository repo, DetailsMessage msg, DetailsModel model) { - if (msg is Remove) { - var removeCmd = repo.removeCmd(model.todo.toEntity()); - return Upd(model, effects: removeCmd); - } - if (msg is ToggleCompleted) { - var updatedModel = - model.rebuild((b) => b.todo.update((t) => t.complete = !t.complete)); - return Upd(updatedModel, - effects: repo.saveCmd(updatedModel.todo.toEntity())); - } - if (msg is Edit) { - var navigateCmd = router.goToEditTodoScreen(model.todo); - return Upd(model, effects: navigateCmd); - } - if (msg is OnTodoChanged && - msg.entity != null && - msg.entity.id == model.todo.id) { - var updatedModel = model.rebuild((b) => b.todo - ..complete = msg.entity.complete - ..note = msg.entity.note - ..task = msg.entity.task); - return Upd(updatedModel); - } - if (msg is OnTodoRemoved && - msg.entity != null && - msg.entity.id == model.todo.id) { - var navigateCmd = router.goBack(); - return Upd(model, effects: navigateCmd); - } - return Upd(model); -} diff --git a/mvu/lib/details/types.dart b/mvu/lib/details/types.dart deleted file mode 100644 index b8ac0e53..00000000 --- a/mvu/lib/details/types.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:built_value/built_value.dart'; - -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:mvu/common/todo_model.dart'; - -part 'types.g.dart'; - -abstract class DetailsModel - implements Built { - TodoModel get todo; - - DetailsModel._(); - factory DetailsModel([void Function(DetailsModelBuilder b) updates]) = - _$DetailsModel; -} - -abstract class DetailsMessage {} - -class Remove implements DetailsMessage {} - -class ToggleCompleted implements DetailsMessage {} - -class Edit implements DetailsMessage {} - -class OnTodoChanged implements DetailsMessage { - final TodoEntity entity; - OnTodoChanged(this.entity); -} - -class OnTodoRemoved implements DetailsMessage { - final TodoEntity entity; - OnTodoRemoved(this.entity); -} diff --git a/mvu/lib/details/types.g.dart b/mvu/lib/details/types.g.dart deleted file mode 100644 index 05b6b54a..00000000 --- a/mvu/lib/details/types.g.dart +++ /dev/null @@ -1,110 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'types.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -// ignore_for_file: always_put_control_body_on_new_line -// ignore_for_file: annotate_overrides -// ignore_for_file: avoid_annotating_with_dynamic -// ignore_for_file: avoid_catches_without_on_clauses -// ignore_for_file: avoid_returning_this -// ignore_for_file: lines_longer_than_80_chars -// ignore_for_file: omit_local_variable_types -// ignore_for_file: prefer_expression_function_bodies -// ignore_for_file: sort_constructors_first -// ignore_for_file: unnecessary_const -// ignore_for_file: unnecessary_new -// ignore_for_file: test_types_in_equals - -class _$DetailsModel extends DetailsModel { - @override - final TodoModel todo; - - factory _$DetailsModel([void Function(DetailsModelBuilder b) updates]) => - (new DetailsModelBuilder()..update(updates)).build(); - - _$DetailsModel._({this.todo}) : super._() { - if (todo == null) { - throw new BuiltValueNullFieldError('DetailsModel', 'todo'); - } - } - - @override - DetailsModel rebuild(void Function(DetailsModelBuilder b) updates) => - (toBuilder()..update(updates)).build(); - - @override - DetailsModelBuilder toBuilder() => new DetailsModelBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is DetailsModel && todo == other.todo; - } - - @override - int get hashCode { - return $jf($jc(0, todo.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('DetailsModel')..add('todo', todo)) - .toString(); - } -} - -class DetailsModelBuilder - implements Builder { - _$DetailsModel _$v; - - TodoModelBuilder _todo; - TodoModelBuilder get todo => _$this._todo ??= new TodoModelBuilder(); - set todo(TodoModelBuilder todo) => _$this._todo = todo; - - DetailsModelBuilder(); - - DetailsModelBuilder get _$this { - if (_$v != null) { - _todo = _$v.todo?.toBuilder(); - _$v = null; - } - return this; - } - - @override - void replace(DetailsModel other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$DetailsModel; - } - - @override - void update(void Function(DetailsModelBuilder b) updates) { - if (updates != null) updates(this); - } - - @override - _$DetailsModel build() { - _$DetailsModel _$result; - try { - _$result = _$v ?? new _$DetailsModel._(todo: todo.build()); - } catch (_) { - String _$failedField; - try { - _$failedField = 'todo'; - todo.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - 'DetailsModel', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} diff --git a/mvu/lib/details/view.dart b/mvu/lib/details/view.dart deleted file mode 100644 index 11c4bf9c..00000000 --- a/mvu/lib/details/view.dart +++ /dev/null @@ -1,70 +0,0 @@ -part of details; - -Widget view(BuildContext context, Dispatch dispatch, - DetailsModel model) { - final localizations = ArchSampleLocalizations.of(context); - - return Scaffold( - key: ArchSampleKeys.todoDetailsScreen, - appBar: AppBar( - title: Text(localizations.todoDetails), - actions: [ - IconButton( - tooltip: localizations.deleteTodo, - icon: Icon(Icons.delete), - key: ArchSampleKeys.deleteTodoButton, - onPressed: () => dispatch(Remove()), - ) - ], - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: ListView( - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(right: 8.0), - child: Checkbox( - key: ArchSampleKeys.detailsTodoItemCheckbox, - value: model.todo.complete, - onChanged: (_) => dispatch(ToggleCompleted()), - ), - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), - child: Text( - model.todo.task, - key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, - ), - ), - Text( - model.todo.note, - key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, - ) - ], - ), - ), - ], - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.editTodoFab, - tooltip: localizations.editTodo, - child: Icon(Icons.edit), - onPressed: () => dispatch(Edit()), - ), - ); -} diff --git a/mvu/lib/edit/edit.dart b/mvu/lib/edit/edit.dart deleted file mode 100644 index 33f8cf2c..00000000 --- a/mvu/lib/edit/edit.dart +++ /dev/null @@ -1,18 +0,0 @@ -library edit; - -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:dartea/dartea.dart'; -import 'package:mvu/edit/types.dart'; -import 'package:mvu/common/repository_commands.dart' show CmdRepository; -import 'package:mvu/common/router.dart' as router; - -part 'state.dart'; -part 'view.dart'; - -Program createProgram( - CmdRepository repo, - {TodoEntity todo}) => - Program(() => init(todo), (msg, model) => update(repo, msg, model), view); diff --git a/mvu/lib/edit/state.dart b/mvu/lib/edit/state.dart deleted file mode 100644 index 1ecc52a4..00000000 --- a/mvu/lib/edit/state.dart +++ /dev/null @@ -1,25 +0,0 @@ -part of edit; - -Upd init(TodoEntity todo) { - var model = EditTodoModel((b) => b - ..id = todo != null ? todo.id : '' - ..note = TextEditingController(text: todo != null ? todo.note : '') - ..task = TextEditingController(text: todo != null ? todo.task : '')); - return Upd(model); -} - -Upd update( - CmdRepository repo, EditTodoMessage msg, EditTodoModel model) { - if (msg is Save && model.task.text.isNotEmpty) { - var updateCmd = model.id.isEmpty - ? repo.createCmd((t) => OnSaved(t), model.task.text, model.note.text) - : repo.updateDetailsCmd( - (t) => OnSaved(t), model.id, model.task.text, model.note.text); - return Upd(model, effects: updateCmd); - } - if (msg is OnSaved && msg.todo != null) { - var navCmd = router.goBack(); - return Upd(model, effects: navCmd); - } - return Upd(model); -} diff --git a/mvu/lib/edit/types.dart b/mvu/lib/edit/types.dart deleted file mode 100644 index ff8ee109..00000000 --- a/mvu/lib/edit/types.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:built_value/built_value.dart'; -import 'package:flutter/widgets.dart' as widgets; -import 'package:todos_repository_core/todos_repository_core.dart'; - -part 'types.g.dart'; - -abstract class EditTodoModel - implements Built { - widgets.TextEditingController get task; - - widgets.TextEditingController get note; - - String get id; - - EditTodoModel._(); - - factory EditTodoModel([void Function(EditTodoModelBuilder b) update]) = - _$EditTodoModel; -} - -abstract class EditTodoMessage {} - -class Save implements EditTodoMessage {} - -class OnSaved implements EditTodoMessage { - final TodoEntity todo; - - OnSaved(this.todo); -} diff --git a/mvu/lib/edit/types.g.dart b/mvu/lib/edit/types.g.dart deleted file mode 100644 index 311ee29e..00000000 --- a/mvu/lib/edit/types.g.dart +++ /dev/null @@ -1,124 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'types.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -// ignore_for_file: always_put_control_body_on_new_line -// ignore_for_file: annotate_overrides -// ignore_for_file: avoid_annotating_with_dynamic -// ignore_for_file: avoid_catches_without_on_clauses -// ignore_for_file: avoid_returning_this -// ignore_for_file: lines_longer_than_80_chars -// ignore_for_file: omit_local_variable_types -// ignore_for_file: prefer_expression_function_bodies -// ignore_for_file: sort_constructors_first -// ignore_for_file: unnecessary_const -// ignore_for_file: unnecessary_new -// ignore_for_file: test_types_in_equals - -class _$EditTodoModel extends EditTodoModel { - @override - final widgets.TextEditingController task; - @override - final widgets.TextEditingController note; - @override - final String id; - - factory _$EditTodoModel([void Function(EditTodoModelBuilder b) updates]) => - (new EditTodoModelBuilder()..update(updates)).build(); - - _$EditTodoModel._({this.task, this.note, this.id}) : super._() { - if (task == null) { - throw new BuiltValueNullFieldError('EditTodoModel', 'task'); - } - if (note == null) { - throw new BuiltValueNullFieldError('EditTodoModel', 'note'); - } - if (id == null) { - throw new BuiltValueNullFieldError('EditTodoModel', 'id'); - } - } - - @override - EditTodoModel rebuild(void Function(EditTodoModelBuilder b) updates) => - (toBuilder()..update(updates)).build(); - - @override - EditTodoModelBuilder toBuilder() => new EditTodoModelBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is EditTodoModel && - task == other.task && - note == other.note && - id == other.id; - } - - @override - int get hashCode { - return $jf($jc($jc($jc(0, task.hashCode), note.hashCode), id.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('EditTodoModel') - ..add('task', task) - ..add('note', note) - ..add('id', id)) - .toString(); - } -} - -class EditTodoModelBuilder - implements Builder { - _$EditTodoModel _$v; - - widgets.TextEditingController _task; - widgets.TextEditingController get task => _$this._task; - set task(widgets.TextEditingController task) => _$this._task = task; - - widgets.TextEditingController _note; - widgets.TextEditingController get note => _$this._note; - set note(widgets.TextEditingController note) => _$this._note = note; - - String _id; - String get id => _$this._id; - set id(String id) => _$this._id = id; - - EditTodoModelBuilder(); - - EditTodoModelBuilder get _$this { - if (_$v != null) { - _task = _$v.task; - _note = _$v.note; - _id = _$v.id; - _$v = null; - } - return this; - } - - @override - void replace(EditTodoModel other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$EditTodoModel; - } - - @override - void update(void Function(EditTodoModelBuilder b) updates) { - if (updates != null) updates(this); - } - - @override - _$EditTodoModel build() { - final _$result = - _$v ?? new _$EditTodoModel._(task: task, note: note, id: id); - replace(_$result); - return _$result; - } -} diff --git a/mvu/lib/edit/view.dart b/mvu/lib/edit/view.dart deleted file mode 100644 index e8af30c4..00000000 --- a/mvu/lib/edit/view.dart +++ /dev/null @@ -1,54 +0,0 @@ -part of edit; - -Widget view(BuildContext context, Dispatch dispatch, - EditTodoModel model) { - final localizations = ArchSampleLocalizations.of(context); - final textTheme = Theme.of(context).textTheme; - final isEditing = model.id.isNotEmpty; - - return Scaffold( - key: ArchSampleKeys.editTodoScreen, - appBar: AppBar( - title: Text( - isEditing ? localizations.editTodo : localizations.addTodo, - ), - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: Form( - autovalidate: true, - child: ListView( - children: [ - TextFormField( - key: ArchSampleKeys.taskField, - controller: model.task, - autofocus: !isEditing, - style: textTheme.headline, - decoration: InputDecoration( - hintText: localizations.newTodoHint, - ), - validator: (val) { - return val.trim().isEmpty ? localizations.emptyTodoError : null; - }, - ), - TextFormField( - key: ArchSampleKeys.noteField, - controller: model.note, - maxLines: 10, - style: textTheme.subhead, - decoration: InputDecoration( - hintText: localizations.notesHint, - ), - ) - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - key: isEditing ? ArchSampleKeys.saveTodoFab : ArchSampleKeys.saveNewTodo, - tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, - child: Icon(isEditing ? Icons.check : Icons.add), - onPressed: () => dispatch(Save()), - ), - ); -} diff --git a/mvu/lib/home/home.dart b/mvu/lib/home/home.dart deleted file mode 100644 index 410e9a15..00000000 --- a/mvu/lib/home/home.dart +++ /dev/null @@ -1,46 +0,0 @@ -library home; - -import 'dart:async'; - -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:dartea/dartea.dart'; -import 'package:mvu/localization.dart'; -import 'package:mvu/home/types.dart'; -import 'package:mvu/stats/types.dart'; -import 'package:mvu/todos/types.dart'; -import 'package:mvu/common/repository_commands.dart'; -import 'package:mvu/todos/todos.dart' as todos; -import 'package:mvu/stats/stats.dart' as stats; -import 'package:mvu/common/router.dart' as router; -import 'package:mvu/common/snackbar.dart' as snackbar; - -part 'state.dart'; -part 'view.dart'; - -Program> - createProgram(AppTab initTab) => Program(() => init(initTab), update, view, - subscription: _repoSubscription); - -StreamSubscription _repoSubscription( - StreamSubscription currentSub, - Dispatch dispatch, - HomeModel model) { - if (currentSub != null) { - return currentSub; - } - final sub = repoCmds.events.listen((event) { - if (event is RepoOnTodoAdded) { - dispatch(OnNewTodoCreated(event.entity)); - } - if (event is RepoOnTodoChanged) { - dispatch(TodosMsg(OnTodoItemChanged(updated: event.entity))); - } - if (event is RepoOnTodoRemoved) { - dispatch(TodosMsg(OnTodoItemChanged(removed: event.entity))); - } - }); - return sub; -} diff --git a/mvu/lib/home/state.dart b/mvu/lib/home/state.dart deleted file mode 100644 index 2cde1ac0..00000000 --- a/mvu/lib/home/state.dart +++ /dev/null @@ -1,65 +0,0 @@ -part of home; - -Upd init(AppTab currentTab) { - var body = _initBody(currentTab); - var model = HomeModel((b) => b..body = body.model); - return Upd(model, effects: body.effects); -} - -Upd update(HomeMessage msg, HomeModel model) { - if (msg is TabChangedMessage) { - if (msg.value == model.body.tag) { - return Upd(model); - } - - var body = _initBody(msg.value); - var updated = model.rebuild((b) => b..body = body.model); - return Upd(updated, effects: body.effects); - } - - if (msg is CreateNewTodo) { - var navCmd = router.goToCreateNewScreen(); - return Upd(model, effects: navCmd); - } - - if (msg is OnNewTodoCreated) { - if (model.body.tag == AppTab.todos) { - return Upd(model, - effects: Cmd.ofMsg(TodosMsg(OnTodoItemChanged(created: msg.entity)))); - } else if (model.body.tag == AppTab.stats) { - return Upd(model, - effects: Cmd.ofMsg(StatsMsg(OnNewTaskCreated(msg.entity)))); - } - } - - if (msg is TodosMsg && model.body.tag == AppTab.todos) { - var updatedTodos = todos.update(repoCmds, msg.message, model.body.model); - var updatedModel = - model.rebuild((b) => b..body = TodosBody(updatedTodos.model)); - var effects = Cmd.fmap((m) => TodosMsg(m), updatedTodos.effects); - return Upd(updatedModel, effects: effects); - } - - if (msg is StatsMsg && model.body.tag == AppTab.stats) { - var updatedStats = stats.update(repoCmds, msg.message, model.body.model); - var updatedModel = - model.rebuild((b) => b..body = StatsBody(updatedStats.model)); - return Upd(updatedModel, - effects: Cmd.fmap((m) => StatsMsg(m), updatedStats.effects)); - } - return Upd(model); -} - -Upd _initBody(AppTab tag) { - switch (tag) { - case AppTab.todos: - var initedTodos = todos.init(VisibilityFilter.all); - return Upd(TodosBody(initedTodos.model), - effects: Cmd.fmap((m) => TodosMsg(m), initedTodos.effects)); - case AppTab.stats: - var initedStats = stats.init(); - return Upd(StatsBody(initedStats.model), - effects: Cmd.fmap((m) => StatsMsg(m), initedStats.effects)); - } - throw ArgumentError.value(tag); -} diff --git a/mvu/lib/home/types.dart b/mvu/lib/home/types.dart deleted file mode 100644 index a32e9ed9..00000000 --- a/mvu/lib/home/types.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'package:built_value/built_value.dart'; - -import 'package:mvu/todos/types.dart'; -import 'package:mvu/stats/types.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -part 'types.g.dart'; - -enum AppTab { todos, stats } -enum VisibilityFilter { all, active, completed } - -abstract class HomeMessage {} - -class TabChangedMessage implements HomeMessage { - final AppTab value; - TabChangedMessage(this.value); -} - -class CreateNewTodo implements HomeMessage {} - -class OnNewTodoCreated implements HomeMessage { - final TodoEntity entity; - OnNewTodoCreated(this.entity); -} - -class TodosMsg implements HomeMessage { - final TodosMessage message; - TodosMsg(this.message); -} - -class StatsMsg implements HomeMessage { - final StatsMessage message; - StatsMsg(this.message); -} - -abstract class HomeModel implements Built { - BodyModel get body; - - HomeModel._(); - factory HomeModel([void Function(HomeModelBuilder b) updates]) = _$HomeModel; -} - -abstract class BodyModel { - AppTab get tag; - TModel get model; -} - -class TodosBody implements BodyModel { - final TodosModel _model; - - TodosBody(this._model); - - @override - AppTab get tag => AppTab.todos; - - @override - TodosModel get model => _model; -} - -class StatsBody implements BodyModel { - final StatsModel _model; - - StatsBody(this._model); - - @override - AppTab get tag => AppTab.stats; - - @override - StatsModel get model => _model; -} diff --git a/mvu/lib/home/types.g.dart b/mvu/lib/home/types.g.dart deleted file mode 100644 index feda38e6..00000000 --- a/mvu/lib/home/types.g.dart +++ /dev/null @@ -1,96 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'types.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -// ignore_for_file: always_put_control_body_on_new_line -// ignore_for_file: annotate_overrides -// ignore_for_file: avoid_annotating_with_dynamic -// ignore_for_file: avoid_catches_without_on_clauses -// ignore_for_file: avoid_returning_this -// ignore_for_file: lines_longer_than_80_chars -// ignore_for_file: omit_local_variable_types -// ignore_for_file: prefer_expression_function_bodies -// ignore_for_file: sort_constructors_first -// ignore_for_file: unnecessary_const -// ignore_for_file: unnecessary_new -// ignore_for_file: test_types_in_equals - -class _$HomeModel extends HomeModel { - @override - final BodyModel body; - - factory _$HomeModel([void Function(HomeModelBuilder b) updates]) => - (new HomeModelBuilder()..update(updates)).build(); - - _$HomeModel._({this.body}) : super._() { - if (body == null) { - throw new BuiltValueNullFieldError('HomeModel', 'body'); - } - } - - @override - HomeModel rebuild(void Function(HomeModelBuilder b) updates) => - (toBuilder()..update(updates)).build(); - - @override - HomeModelBuilder toBuilder() => new HomeModelBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is HomeModel && body == other.body; - } - - @override - int get hashCode { - return $jf($jc(0, body.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('HomeModel')..add('body', body)) - .toString(); - } -} - -class HomeModelBuilder implements Builder { - _$HomeModel _$v; - - BodyModel _body; - BodyModel get body => _$this._body; - set body(BodyModel body) => _$this._body = body; - - HomeModelBuilder(); - - HomeModelBuilder get _$this { - if (_$v != null) { - _body = _$v.body; - _$v = null; - } - return this; - } - - @override - void replace(HomeModel other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$HomeModel; - } - - @override - void update(void Function(HomeModelBuilder b) updates) { - if (updates != null) updates(this); - } - - @override - _$HomeModel build() { - final _$result = _$v ?? new _$HomeModel._(body: body); - replace(_$result); - return _$result; - } -} diff --git a/mvu/lib/home/view.dart b/mvu/lib/home/view.dart deleted file mode 100644 index 71b748bc..00000000 --- a/mvu/lib/home/view.dart +++ /dev/null @@ -1,71 +0,0 @@ -part of home; - -Widget view( - BuildContext context, Dispatch dispatch, HomeModel model) { - return Scaffold( - key: ArchSampleKeys.homeScreen, - appBar: AppBar( - title: Text(MvuLocalizations().appTitle), - actions: _getAppBarActions(context, dispatch, model.body), - ), - body: Builder(builder: (ctx) => _body(ctx, dispatch, model.body)), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.addTodoFab, - onPressed: () => dispatch(CreateNewTodo()), - child: Icon(Icons.add), - tooltip: ArchSampleLocalizations.of(context).addTodo, - ), - bottomNavigationBar: _bottomNavigation(context, dispatch, model.body.tag), - ); -} - -List _getAppBarActions( - BuildContext context, Dispatch dispatch, BodyModel body) { - if (body.tag == AppTab.todos) { - var extraActions = - todos.buildExtraActionsMenu((m) => dispatch(TodosMsg(m)), body.model); - var filterMenu = todos.buildFilterMenu( - context, (m) => dispatch(TodosMsg(m)), body.model); - return [filterMenu, extraActions]; - } - if (body.tag == AppTab.stats) { - var extraActions = - stats.buildExtraActionsMenu((m) => dispatch(StatsMsg(m)), body.model); - return [extraActions]; - } - return [Container()]; -} - -Widget _bottomNavigation( - BuildContext context, Dispatch dispatch, AppTab current) { - return BottomNavigationBar( - key: ArchSampleKeys.tabs, - currentIndex: AppTab.values.indexOf(current), - onTap: ((i) => dispatch(TabChangedMessage(AppTab.values[i]))), - items: AppTab.values.map((tab) { - return BottomNavigationBarItem( - icon: Icon( - tab == AppTab.todos ? Icons.list : Icons.show_chart, - key: tab == AppTab.todos - ? ArchSampleKeys.todoTab - : ArchSampleKeys.statsTab, - ), - title: Text(tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos), - ); - }).toList(), - ); -} - -Widget _body( - BuildContext context, Dispatch dispatch, BodyModel body) { - snackbar.init(context); - switch (body.tag) { - case AppTab.todos: - return todos.view(context, (m) => dispatch(TodosMsg(m)), body.model); - case AppTab.stats: - return stats.view(context, (m) => dispatch(StatsMsg(m)), body.model); - } - return Text('Unknown tag: ${body.tag}'); -} diff --git a/mvu/lib/localization.dart b/mvu/lib/localization.dart deleted file mode 100644 index 6ab2920e..00000000 --- a/mvu/lib/localization.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -class MvuLocalizations { - static MvuLocalizations of(BuildContext context) { - return Localizations.of( - context, - MvuLocalizations, - ); - } - - String get appTitle => 'MVU Example'; -} - -class MvuLocalizationsDelegate extends LocalizationsDelegate { - @override - Future load(Locale locale) => - Future(() => MvuLocalizations()); - - @override - bool shouldReload(MvuLocalizationsDelegate old) => false; - - @override - bool isSupported(Locale locale) => - locale.languageCode.toLowerCase().contains('en'); -} diff --git a/mvu/lib/main.dart b/mvu/lib/main.dart deleted file mode 100644 index 8b924e5a..00000000 --- a/mvu/lib/main.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:mvu/common/router.dart' as router; -import 'package:mvu/home/home.dart' as home; -import 'package:mvu/home/types.dart'; -import 'package:mvu/edit/edit.dart' as edit; -import 'localization.dart'; -import 'package:mvu/common/repository_commands.dart' show repoCmds; - -void main() { - runApp(MyApp()); -} - -class MyApp extends StatelessWidget { - @override - Widget build(BuildContext context) { - return MaterialApp( - theme: ArchSampleTheme.theme, - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - MvuLocalizationsDelegate() - ], - home: Builder( - builder: (c) { - router.init(c); - return home.createProgram(AppTab.todos).build(); - }, - ), - routes: { - ArchSampleRoutes.addTodo: (_) => edit.createProgram(repoCmds).build() - }, - ); - } -} diff --git a/mvu/lib/stats/state.dart b/mvu/lib/stats/state.dart deleted file mode 100644 index 64bd992e..00000000 --- a/mvu/lib/stats/state.dart +++ /dev/null @@ -1,72 +0,0 @@ -part of stats; - -Upd init() { - var model = StatsModel((b) => b - ..items = BuiltList().toBuilder() - ..activeCount = 0 - ..completedCount = 0 - ..loading = false); - return Upd(model, effects: Cmd.ofMsg(LoadStats())); -} - -Upd update( - CmdRepository repo, StatsMessage msg, StatsModel model) { - if (msg is LoadStats) { - var updatedModel = model.rebuild((b) => b..loading = true); - var loadCmd = repo.loadTodosCmd((items) => OnStatsLoaded(items)); - return Upd(updatedModel, effects: loadCmd); - } - if (msg is OnStatsLoaded) { - var updatedModel = _onItemsChanged(model, msg.todos); - updatedModel = _calculateStats(updatedModel); - updatedModel = updatedModel.rebuild((b) => b..loading = false); - return Upd(updatedModel); - } - if (msg is ToggleAllMessage) { - return _toggleAll(repo, model, msg); - } - if (msg is CleareCompletedMessage) { - var updatedModel = model.rebuild((b) => b.items.where((t) => !t.complete)); - updatedModel = _calculateStats(updatedModel); - return Upd(updatedModel, effects: _saveItems(repo, updatedModel)); - } - if (msg is OnNewTaskCreated) { - var updatedModel = - model.rebuild((b) => b.items.add(TodoModel.fromEntity(msg.entity))); - updatedModel = _calculateStats(updatedModel); - return Upd(updatedModel); - } - return Upd(model); -} - -StatsModel _onItemsChanged(StatsModel model, List newItems) { - return model.rebuild((b) => b - ..items.clear() - ..items.addAll(newItems.map((x) => TodoModel.fromEntity(x)))); -} - -StatsModel _calculateStats(StatsModel model) { - var completedCount = - model.items.fold(0, (acc, t) => t.complete ? acc + 1 : acc); - var activeCount = model.items.length - completedCount; - var updatedModel = model.rebuild((b) => b - ..activeCount = activeCount - ..completedCount = completedCount); - return updatedModel; -} - -Upd _toggleAll( - CmdRepository repo, StatsModel model, ToggleAllMessage msg) { - var setComplete = model.items.any((x) => !x.complete); - var activeCount = setComplete ? 0 : model.items.length; - var completedCount = setComplete ? model.items.length : 0; - - var updatedModel = model.rebuild((b) => b - ..items.map((t) => t.rebuild((x) => x..complete = setComplete)) - ..activeCount = activeCount - ..completedCount = completedCount); - return Upd(updatedModel, effects: _saveItems(repo, updatedModel)); -} - -Cmd _saveItems(CmdRepository repo, StatsModel model) => - repo.saveAllCmd(model.items.map((x) => x.toEntity()).toList()); diff --git a/mvu/lib/stats/stats.dart b/mvu/lib/stats/stats.dart deleted file mode 100644 index 9d1a544e..00000000 --- a/mvu/lib/stats/stats.dart +++ /dev/null @@ -1,15 +0,0 @@ -library stats; - -import 'package:flutter/material.dart'; -import 'package:built_collection/built_collection.dart'; - -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:mvu/common/repository_commands.dart' show CmdRepository; -import 'package:mvu/common/todo_model.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:dartea/dartea.dart'; -import 'package:mvu/stats/types.dart'; -import 'package:mvu/common/extra_actions_menu.dart' as menu; - -part 'state.dart'; -part 'view.dart'; diff --git a/mvu/lib/stats/types.dart b/mvu/lib/stats/types.dart deleted file mode 100644 index e2a75faa..00000000 --- a/mvu/lib/stats/types.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; - -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:mvu/common/todo_model.dart'; - -part 'types.g.dart'; - -abstract class StatsMessage {} - -class LoadStats implements StatsMessage {} - -class OnStatsLoaded implements StatsMessage { - final List todos; - OnStatsLoaded(this.todos); -} - -class ToggleAllMessage implements StatsMessage {} - -class CleareCompletedMessage implements StatsMessage {} - -class OnNewTaskCreated implements StatsMessage { - final TodoEntity entity; - OnNewTaskCreated(this.entity); -} - -abstract class StatsModel implements Built { - BuiltList get items; - bool get loading; - int get activeCount; - int get completedCount; - - StatsModel._(); - factory StatsModel([void Function(StatsModelBuilder b) updates]) = - _$StatsModel; -} diff --git a/mvu/lib/stats/types.g.dart b/mvu/lib/stats/types.g.dart deleted file mode 100644 index 3c37ed48..00000000 --- a/mvu/lib/stats/types.g.dart +++ /dev/null @@ -1,159 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'types.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -// ignore_for_file: always_put_control_body_on_new_line -// ignore_for_file: annotate_overrides -// ignore_for_file: avoid_annotating_with_dynamic -// ignore_for_file: avoid_catches_without_on_clauses -// ignore_for_file: avoid_returning_this -// ignore_for_file: lines_longer_than_80_chars -// ignore_for_file: omit_local_variable_types -// ignore_for_file: prefer_expression_function_bodies -// ignore_for_file: sort_constructors_first -// ignore_for_file: unnecessary_const -// ignore_for_file: unnecessary_new -// ignore_for_file: test_types_in_equals - -class _$StatsModel extends StatsModel { - @override - final BuiltList items; - @override - final bool loading; - @override - final int activeCount; - @override - final int completedCount; - - factory _$StatsModel([void Function(StatsModelBuilder b) updates]) => - (new StatsModelBuilder()..update(updates)).build(); - - _$StatsModel._( - {this.items, this.loading, this.activeCount, this.completedCount}) - : super._() { - if (items == null) { - throw new BuiltValueNullFieldError('StatsModel', 'items'); - } - if (loading == null) { - throw new BuiltValueNullFieldError('StatsModel', 'loading'); - } - if (activeCount == null) { - throw new BuiltValueNullFieldError('StatsModel', 'activeCount'); - } - if (completedCount == null) { - throw new BuiltValueNullFieldError('StatsModel', 'completedCount'); - } - } - - @override - StatsModel rebuild(void Function(StatsModelBuilder b) updates) => - (toBuilder()..update(updates)).build(); - - @override - StatsModelBuilder toBuilder() => new StatsModelBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is StatsModel && - items == other.items && - loading == other.loading && - activeCount == other.activeCount && - completedCount == other.completedCount; - } - - @override - int get hashCode { - return $jf($jc( - $jc($jc($jc(0, items.hashCode), loading.hashCode), - activeCount.hashCode), - completedCount.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('StatsModel') - ..add('items', items) - ..add('loading', loading) - ..add('activeCount', activeCount) - ..add('completedCount', completedCount)) - .toString(); - } -} - -class StatsModelBuilder implements Builder { - _$StatsModel _$v; - - ListBuilder _items; - ListBuilder get items => - _$this._items ??= new ListBuilder(); - set items(ListBuilder items) => _$this._items = items; - - bool _loading; - bool get loading => _$this._loading; - set loading(bool loading) => _$this._loading = loading; - - int _activeCount; - int get activeCount => _$this._activeCount; - set activeCount(int activeCount) => _$this._activeCount = activeCount; - - int _completedCount; - int get completedCount => _$this._completedCount; - set completedCount(int completedCount) => - _$this._completedCount = completedCount; - - StatsModelBuilder(); - - StatsModelBuilder get _$this { - if (_$v != null) { - _items = _$v.items?.toBuilder(); - _loading = _$v.loading; - _activeCount = _$v.activeCount; - _completedCount = _$v.completedCount; - _$v = null; - } - return this; - } - - @override - void replace(StatsModel other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$StatsModel; - } - - @override - void update(void Function(StatsModelBuilder b) updates) { - if (updates != null) updates(this); - } - - @override - _$StatsModel build() { - _$StatsModel _$result; - try { - _$result = _$v ?? - new _$StatsModel._( - items: items.build(), - loading: loading, - activeCount: activeCount, - completedCount: completedCount); - } catch (_) { - String _$failedField; - try { - _$failedField = 'items'; - items.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - 'StatsModel', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} diff --git a/mvu/lib/stats/view.dart b/mvu/lib/stats/view.dart deleted file mode 100644 index 09a40318..00000000 --- a/mvu/lib/stats/view.dart +++ /dev/null @@ -1,65 +0,0 @@ -part of stats; - -Widget buildExtraActionsMenu( - Dispatch dispatch, StatsModel model) { - var allComplete = !model.items.any((x) => !x.complete); - return menu.buildExtraActionsMenu( - (act) => dispatch(_toMessage(act)), allComplete); -} - -Widget view( - BuildContext context, Dispatch dispatch, StatsModel model) { - return model.loading - ? Center( - key: ArchSampleKeys.statsLoading, - child: CircularProgressIndicator( - key: ArchSampleKeys.statsLoading, - )) - : Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '${model.completedCount}', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '${model.activeCount}', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, - ), - ) - ], - ), - ); -} - -StatsMessage _toMessage(menu.ExtraAction action) { - switch (action) { - case menu.ExtraAction.toggleAll: - return ToggleAllMessage(); - case menu.ExtraAction.clearCompleted: - default: - return CleareCompletedMessage(); - } -} diff --git a/mvu/lib/todos/state.dart b/mvu/lib/todos/state.dart deleted file mode 100644 index 392fdde5..00000000 --- a/mvu/lib/todos/state.dart +++ /dev/null @@ -1,125 +0,0 @@ -part of todos; - -Upd init(VisibilityFilter filter) { - var model = TodosModel((b) => b - ..isLoading = false - ..filter = filter - ..items = BuiltList().toBuilder()); - return Upd(model, effects: Cmd.ofMsg(LoadTodos())); -} - -Upd update( - CmdRepository repo, TodosMessage msg, TodosModel model) { - if (msg is LoadTodos) { - return _loadTodos(repo, model); - } - if (msg is OnTodosLoaded) { - return _onTodosLoaded(model, msg); - } - if (msg is OnTodosLoadError) { - return _onLoadingError(model, msg); - } - if (msg is UpdateTodo) { - return _toggleTodo(repo, model, msg); - } - if (msg is RemoveTodo) { - var updatedModel = _removeTodo(model, msg.todo.id); - return Upd(updatedModel, effects: repo.removeCmd(msg.todo.toEntity())); - } - if (msg is UndoRemoveItem) { - var updatedModel = model.rebuild((b) => b.items.add(msg.item)); - return Upd(updatedModel, effects: _saveTodosCmd(repo, updatedModel)); - } - if (msg is FilterChanged) { - var updatedModel = model.rebuild((b) => b..filter = msg.value); - return Upd(updatedModel); - } - if (msg is ToggleAllMessage) { - return _toggleAll(repo, model, msg); - } - if (msg is CleareCompletedMessage) { - var updatedModel = model.rebuild((b) => b.items.where((t) => !t.complete)); - return Upd(updatedModel, effects: _saveTodosCmd(repo, updatedModel)); - } - if (msg is ShowDetailsMessage) { - var navigateCmd = router.goToDetailsScreen(msg.todo); - return Upd(model, effects: navigateCmd); - } - if (msg is OnTodoItemChanged) { - return _onRepoEvent(model, msg); - } - return Upd(model); -} - -Upd _loadTodos(CmdRepository repo, TodosModel model) { - var loadCmd = repo.loadTodosCmd((items) => OnTodosLoaded(items), - onError: (exc) => OnTodosLoadError(exc)); - var updatedModel = model.rebuild((b) => b - ..isLoading = true - ..loadingError = null); - return Upd(updatedModel, effects: loadCmd); -} - -Upd _onTodosLoaded( - TodosModel model, OnTodosLoaded msg) { - var updatedModel = model.rebuild((b) => b - ..isLoading = false - ..loadingError = null - ..items.clear() - ..items.addAll(msg.items.map(TodoModel.fromEntity))); - return Upd(updatedModel); -} - -Upd _onLoadingError( - TodosModel model, OnTodosLoadError msg) { - var updatedModel = model.rebuild((b) => b - ..isLoading = false - ..loadingError = msg.cause.toString()); - return Upd(updatedModel); -} - -Upd _toggleTodo( - CmdRepository repo, TodosModel model, UpdateTodo msg) { - var updatedTodo = msg.todo.rebuild((b) => b..complete = msg.value); - var updatedModel = _updateTodoItem(model, updatedTodo); - return Upd(updatedModel, effects: _saveTodosCmd(repo, updatedModel)); -} - -Upd _toggleAll( - CmdRepository repo, TodosModel model, ToggleAllMessage msg) { - var setComplete = model.items.any((x) => !x.complete); - var updatedModel = model.rebuild( - (b) => b.items.map((t) => t.rebuild((x) => x..complete = setComplete))); - return Upd(updatedModel, effects: _saveTodosCmd(repo, updatedModel)); -} - -TodosModel _removeTodo(TodosModel model, String id) => - model.rebuild((b) => b.items.where((x) => x.id != id)); - -Upd _onRepoEvent( - TodosModel model, OnTodoItemChanged msg) { - if (msg.updated != null) { - var updatedTodo = TodoModel.fromEntity(msg.updated); - return Upd(_updateTodoItem(model, updatedTodo)); - } - if (msg.created != null) { - var newItem = TodoModel.fromEntity(msg.created); - var updatedModel = model.rebuild((b) => b.items.add(newItem)); - return Upd(updatedModel); - } - if (msg.removed != null) { - var updatedModel = _removeTodo(model, msg.removed.id); - return Upd(updatedModel, - effects: snackbar.showUndoCmd(msg.removed.task, - () => UndoRemoveItem(TodoModel.fromEntity(msg.removed)))); - } - return Upd(model); -} - -TodosModel _updateTodoItem(TodosModel model, TodoModel updatedTodo) { - return model.rebuild( - (b) => b.items.map((x) => x.id == updatedTodo.id ? updatedTodo : x)); -} - -Cmd _saveTodosCmd(CmdRepository repo, TodosModel model) => - repo.saveAllCmd(model.items.map((t) => t.toEntity()).toList()); diff --git a/mvu/lib/todos/todos.dart b/mvu/lib/todos/todos.dart deleted file mode 100644 index 903fc6b2..00000000 --- a/mvu/lib/todos/todos.dart +++ /dev/null @@ -1,17 +0,0 @@ -library todos; - -import 'package:flutter/material.dart'; -import 'package:built_collection/built_collection.dart'; - -import 'package:mvu/common/repository_commands.dart' show CmdRepository; -import 'package:mvu/common/router.dart' as router; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:dartea/dartea.dart'; -import 'package:mvu/home/types.dart'; -import 'package:mvu/todos/types.dart'; -import 'package:mvu/common/todo_model.dart'; -import 'package:mvu/common/extra_actions_menu.dart' as menu; -import 'package:mvu/common/snackbar.dart' as snackbar; - -part 'state.dart'; -part 'view.dart'; diff --git a/mvu/lib/todos/types.dart b/mvu/lib/todos/types.dart deleted file mode 100644 index de511b23..00000000 --- a/mvu/lib/todos/types.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:built_value/built_value.dart'; -import 'package:built_collection/built_collection.dart'; - -import 'package:mvu/home/types.dart'; -import 'package:mvu/common/todo_model.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -part 'types.g.dart'; - -abstract class TodosModel implements Built { - bool get isLoading; - BuiltList get items; - VisibilityFilter get filter; - @nullable - String get loadingError; - - TodosModel._(); - factory TodosModel([void Function(TodosModelBuilder b) updates]) = - _$TodosModel; -} - -abstract class TodosMessage {} - -class LoadTodos implements TodosMessage {} - -class OnTodosLoaded implements TodosMessage { - final List items; - OnTodosLoaded(this.items); -} - -class OnTodosLoadError implements TodosMessage { - final Exception cause; - OnTodosLoadError(this.cause); -} - -class UpdateTodo implements TodosMessage { - final bool value; - final TodoModel todo; - UpdateTodo(this.value, this.todo); -} - -class RemoveTodo implements TodosMessage { - final TodoModel todo; - RemoveTodo(this.todo); -} - -class UndoRemoveItem implements TodosMessage { - final TodoModel item; - UndoRemoveItem(this.item); -} - -class FilterChanged implements TodosMessage { - final VisibilityFilter value; - FilterChanged(this.value); -} - -class ToggleAllMessage implements TodosMessage {} - -class CleareCompletedMessage implements TodosMessage {} - -class ShowDetailsMessage implements TodosMessage { - final TodoModel todo; - ShowDetailsMessage(this.todo); -} - -class OnTodoItemChanged implements TodosMessage { - final TodoEntity updated; - final TodoEntity removed; - final TodoEntity created; - OnTodoItemChanged({this.updated, this.removed, this.created}); -} diff --git a/mvu/lib/todos/types.g.dart b/mvu/lib/todos/types.g.dart deleted file mode 100644 index a47403fb..00000000 --- a/mvu/lib/todos/types.g.dart +++ /dev/null @@ -1,153 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'types.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -// ignore_for_file: always_put_control_body_on_new_line -// ignore_for_file: annotate_overrides -// ignore_for_file: avoid_annotating_with_dynamic -// ignore_for_file: avoid_catches_without_on_clauses -// ignore_for_file: avoid_returning_this -// ignore_for_file: lines_longer_than_80_chars -// ignore_for_file: omit_local_variable_types -// ignore_for_file: prefer_expression_function_bodies -// ignore_for_file: sort_constructors_first -// ignore_for_file: unnecessary_const -// ignore_for_file: unnecessary_new -// ignore_for_file: test_types_in_equals - -class _$TodosModel extends TodosModel { - @override - final bool isLoading; - @override - final BuiltList items; - @override - final VisibilityFilter filter; - @override - final String loadingError; - - factory _$TodosModel([void Function(TodosModelBuilder b) updates]) => - (new TodosModelBuilder()..update(updates)).build(); - - _$TodosModel._({this.isLoading, this.items, this.filter, this.loadingError}) - : super._() { - if (isLoading == null) { - throw new BuiltValueNullFieldError('TodosModel', 'isLoading'); - } - if (items == null) { - throw new BuiltValueNullFieldError('TodosModel', 'items'); - } - if (filter == null) { - throw new BuiltValueNullFieldError('TodosModel', 'filter'); - } - } - - @override - TodosModel rebuild(void Function(TodosModelBuilder b) updates) => - (toBuilder()..update(updates)).build(); - - @override - TodosModelBuilder toBuilder() => new TodosModelBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is TodosModel && - isLoading == other.isLoading && - items == other.items && - filter == other.filter && - loadingError == other.loadingError; - } - - @override - int get hashCode { - return $jf($jc( - $jc($jc($jc(0, isLoading.hashCode), items.hashCode), filter.hashCode), - loadingError.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('TodosModel') - ..add('isLoading', isLoading) - ..add('items', items) - ..add('filter', filter) - ..add('loadingError', loadingError)) - .toString(); - } -} - -class TodosModelBuilder implements Builder { - _$TodosModel _$v; - - bool _isLoading; - bool get isLoading => _$this._isLoading; - set isLoading(bool isLoading) => _$this._isLoading = isLoading; - - ListBuilder _items; - ListBuilder get items => - _$this._items ??= new ListBuilder(); - set items(ListBuilder items) => _$this._items = items; - - VisibilityFilter _filter; - VisibilityFilter get filter => _$this._filter; - set filter(VisibilityFilter filter) => _$this._filter = filter; - - String _loadingError; - String get loadingError => _$this._loadingError; - set loadingError(String loadingError) => _$this._loadingError = loadingError; - - TodosModelBuilder(); - - TodosModelBuilder get _$this { - if (_$v != null) { - _isLoading = _$v.isLoading; - _items = _$v.items?.toBuilder(); - _filter = _$v.filter; - _loadingError = _$v.loadingError; - _$v = null; - } - return this; - } - - @override - void replace(TodosModel other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$TodosModel; - } - - @override - void update(void Function(TodosModelBuilder b) updates) { - if (updates != null) updates(this); - } - - @override - _$TodosModel build() { - _$TodosModel _$result; - try { - _$result = _$v ?? - new _$TodosModel._( - isLoading: isLoading, - items: items.build(), - filter: filter, - loadingError: loadingError); - } catch (_) { - String _$failedField; - try { - _$failedField = 'items'; - items.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - 'TodosModel', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} diff --git a/mvu/lib/todos/view.dart b/mvu/lib/todos/view.dart deleted file mode 100644 index 40707793..00000000 --- a/mvu/lib/todos/view.dart +++ /dev/null @@ -1,130 +0,0 @@ -part of todos; - -Widget view( - BuildContext context, Dispatch dispatch, TodosModel model) { - return Container( - child: model.loadingError != null - ? _error(model.loadingError) - : model.isLoading ? _loading() : _list(dispatch, model), - ); -} - -Widget buildExtraActionsMenu( - Dispatch dispatch, TodosModel model) { - var allComplete = !model.items.any((x) => !x.complete); - return menu.buildExtraActionsMenu( - (act) => dispatch(_toMessage(act)), allComplete); -} - -Widget buildFilterMenu( - BuildContext context, Dispatch dispatch, TodosModel model) { - final defaultStyle = Theme.of(context).textTheme.body1; - final activeStyle = Theme.of(context) - .textTheme - .body1 - .copyWith(color: Theme.of(context).accentColor); - - return PopupMenuButton( - key: ArchSampleKeys.filterButton, - tooltip: ArchSampleLocalizations.of(context).filterTodos, - onSelected: (val) => dispatch(FilterChanged(val)), - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.allFilter, - value: VisibilityFilter.all, - child: Text( - ArchSampleLocalizations.of(context).showAll, - style: - model.filter == VisibilityFilter.all ? activeStyle : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.activeFilter, - value: VisibilityFilter.active, - child: Text( - ArchSampleLocalizations.of(context).showActive, - style: model.filter == VisibilityFilter.active - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.completedFilter, - value: VisibilityFilter.completed, - child: Text( - ArchSampleLocalizations.of(context).showCompleted, - style: model.filter == VisibilityFilter.completed - ? activeStyle - : defaultStyle, - ), - ), - ], - icon: Icon(Icons.filter_list), - ); -} - -Widget _error(String error) { - return Center(child: Text(error)); -} - -Widget _loading() { - return Center( - child: CircularProgressIndicator( - key: ArchSampleKeys.todosLoading, - )); -} - -Widget _list(Dispatch dispatch, TodosModel model) { - var filteredList = model.items - .where((x) => - model.filter == VisibilityFilter.all || - (model.filter == VisibilityFilter.completed - ? x.complete - : !x.complete)) - .toList(); - - return ListView.builder( - key: ArchSampleKeys.todoList, - itemCount: filteredList.length, - itemBuilder: (BuildContext context, int index) => - _item(context, dispatch, filteredList[index], model), - ); -} - -Widget _item(BuildContext context, Dispatch dispatch, - TodoModel model, TodosModel todos) { - return Dismissible( - key: ArchSampleKeys.todoItem(model.id), - onDismissed: (_) => dispatch(RemoveTodo(model)), - child: ListTile( - onTap: () => dispatch(ShowDetailsMessage(model)), - leading: Checkbox( - key: ArchSampleKeys.todoItemCheckbox(model.id), - value: model.complete, - onChanged: (val) => dispatch(UpdateTodo(val, model)), - ), - title: Text( - model.task, - key: ArchSampleKeys.todoItemTask(model.id), - style: Theme.of(context).textTheme.title, - ), - subtitle: Text( - model.note, - key: ArchSampleKeys.todoItemNote(model.id), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, - ), - ), - ); -} - -TodosMessage _toMessage(menu.ExtraAction action) { - switch (action) { - case menu.ExtraAction.toggleAll: - return ToggleAllMessage(); - case menu.ExtraAction.clearCompleted: - default: - return CleareCompletedMessage(); - } -} diff --git a/mvu/mvu_todo.png b/mvu/mvu_todo.png deleted file mode 100644 index 4674dff92e71ab3944054d83dc09b1a43735d1f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23028 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 R0Nm!xW@BLwX)yD<_aAM_b8-Lx diff --git a/mvu/pubspec.yaml b/mvu/pubspec.yaml deleted file mode 100644 index df6c4155..00000000 --- a/mvu/pubspec.yaml +++ /dev/null @@ -1,81 +0,0 @@ -name: mvu -description: A new Flutter project. - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.1.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - built_value: ^6.3.1 - built_collection: ^4.1.0 - dartea: "^0.5.5" - todos_app_core: - path: ../todos_app_core - todos_repository_local_storage: - path: ../todos_repository_local_storage - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_driver: - sdk: flutter - test: - build_runner: ^1.2.8 - built_value_generator: ^6.1.0 - integration_tests: - path: ../integration_tests - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/mvu/test/all_tests.dart b/mvu/test/all_tests.dart deleted file mode 100644 index 45a4ddeb..00000000 --- a/mvu/test/all_tests.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'details_screen_test.dart' as details_screen; -import 'edit_screen_test.dart' as edit_screen; -import 'home_screen_test.dart' as home_screen; -import 'repository_commads_test.dart' as repository_commands; -import 'stats_screen_test.dart' as stats_screen; -import 'todos_screen_test.dart' as todos_screen; - -void main() { - details_screen.main(); - edit_screen.main(); - home_screen.main(); - repository_commands.main(); - stats_screen.main(); - todos_screen.main(); -} diff --git a/mvu/test/cmd_runner.dart b/mvu/test/cmd_runner.dart deleted file mode 100644 index 98fcf4d9..00000000 --- a/mvu/test/cmd_runner.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:dartea/dartea.dart'; - -///run side-effects and save produced messages to the [producedMessages] list -class CmdRunner { - final producedMessages = []; - - void run(Cmd cmd) { - for (var effect in cmd) { - effect((m) => producedMessages.add(m)); - } - } - - void invalidate() => producedMessages.clear(); -} diff --git a/mvu/test/data.dart b/mvu/test/data.dart deleted file mode 100644 index 3ae483c6..00000000 --- a/mvu/test/data.dart +++ /dev/null @@ -1,136 +0,0 @@ -import 'dart:async'; - -import 'package:mvu/common/repository_commands.dart'; -import 'package:dartea/dartea.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -List createTodos({bool complete}) => [ - TodoEntity('Buy milk', '1', 'soy', complete ?? false), - TodoEntity('Buy bread', '2', 'italian one', complete ?? true), - TodoEntity('Buy meat', '3', 'or chicken', complete ?? false), - TodoEntity('Buy water', '4', 'carbonated and still', complete ?? true), - TodoEntity('Read book', '5', 'interesting one', complete ?? false), - TodoEntity('Watch football', '6', '', complete ?? true), - TodoEntity('Sleep', '7', 'well', complete ?? false), - ]; - -List createTodosForStats(int activeCount, int completedCount) { - final result = []; - for (var i = 0; i < activeCount; i++) { - var todo = TodoEntity('todo $i', '$i', 'note for todo #$i', false); - result.add(todo); - } - var totalLength = result.length + completedCount; - for (var i = result.length; i < totalLength; i++) { - var todo = TodoEntity('todo $i', '$i', 'note for todo #$i', true); - result.add(todo); - } - return result; -} - -class InMemoryTodosRepository implements TodosRepository { - final items = []; - final bool isBrokern; - InMemoryTodosRepository( - {Iterable initialItems, this.isBrokern = false}) { - if (initialItems != null) { - items.addAll(initialItems); - } - } - @override - Future> loadTodos() { - if (isBrokern) { - throw Exception('repo is broken'); - } - return Future.value(items.toList()); - } - - @override - Future saveTodos(List todos) => Future.sync(() { - items.clear(); - items.addAll(todos); - }); -} - -class TestTodosCmdRepository implements CmdRepository { - final createdEffects = []; - - @override - Cmd createCmd( - T Function(TodoEntity todo) onSuccess, String task, String note) { - final entity = TodoEntity(task, 'new_id', note, false); - createdEffects.add(CreateTodoEffect(task, note)); - return Cmd.ofFunc(() => entity, onSuccess: onSuccess); - } - - @override - Cmd loadTodosCmd(T Function(List items) onSuccess, - {T Function(Exception exc) onError}) { - final todos = createTodos(); - createdEffects.add(LoadTodosEffect()); - return Cmd.ofFunc(() => todos, onSuccess: onSuccess); - } - - @override - Cmd removeCmd(TodoEntity todo, {T Function() onSuccess}) { - createdEffects.add(RemoveTodoEffect(todo)); - return Cmd.ofAction(() {}, onSuccess: onSuccess); - } - - @override - Cmd saveAllCmd(List entities, {T Function() onSuccess}) { - createdEffects.add(SaveAllTodosEffect(entities)); - return Cmd.ofAction(() {}, onSuccess: onSuccess); - } - - @override - Cmd saveCmd(TodoEntity todo, {T Function() onSuccess}) { - createdEffects.add(SaveTodoEffect(todo)); - return Cmd.ofAction(() {}, onSuccess: onSuccess); - } - - @override - Cmd updateDetailsCmd(T Function(TodoEntity todo) onSuccess, String id, - String task, String note) { - createdEffects.add(UpdateDetailsEffect(id, task, note)); - final updatedTodo = TodoEntity(task, id, note, false); - return Cmd.ofFunc(() => updatedTodo, onSuccess: onSuccess); - } - - void invalidate() => createdEffects.clear(); - - @override - Stream get events => events.asBroadcastStream(); -} - -abstract class RepoEffect {} - -class LoadTodosEffect implements RepoEffect {} - -class CreateTodoEffect implements RepoEffect { - final String task; - final String note; - CreateTodoEffect(this.task, this.note); -} - -class RemoveTodoEffect implements RepoEffect { - final TodoEntity entity; - RemoveTodoEffect(this.entity); -} - -class SaveAllTodosEffect implements RepoEffect { - final List entities; - SaveAllTodosEffect(this.entities); -} - -class SaveTodoEffect implements RepoEffect { - final TodoEntity entity; - SaveTodoEffect(this.entity); -} - -class UpdateDetailsEffect implements RepoEffect { - final String id; - final String task; - final String note; - UpdateDetailsEffect(this.id, this.task, this.note); -} diff --git a/mvu/test/details_screen_test.dart b/mvu/test/details_screen_test.dart deleted file mode 100644 index 05ff9bc4..00000000 --- a/mvu/test/details_screen_test.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:test/test.dart'; - -import 'package:mvu/details/details.dart'; -import 'package:mvu/details/types.dart'; -import 'package:mvu/common/todo_model.dart'; -import 'data.dart'; -import 'cmd_runner.dart'; - -void main() { - group('Details screen ->', () { - CmdRunner _cmdRunner; - TestTodosCmdRepository _cmdRepo; - - setUp(() { - _cmdRunner = CmdRunner(); - _cmdRepo = TestTodosCmdRepository(); - }); - - test('init', () { - var todo = createTodos().map((x) => TodoModel.fromEntity(x)).first; - var model = init(todo).model; - - expect(model.todo, equals(todo)); - }); - - test('ToggleCompleted: todo state is changed', () { - var todo = createTodos().map((x) => TodoModel.fromEntity(x)).first; - var model = init(todo).model; - - final updResult = update(_cmdRepo, ToggleCompleted(), model); - final updatedModel = updResult.model; - _cmdRunner.run(updResult.effects); - - expect(updatedModel.todo.complete, isNot(todo.complete)); - expect( - _cmdRepo.createdEffects, - orderedEquals([ - predicate((x) => - x is SaveTodoEffect && x.entity == updatedModel.todo.toEntity()) - ])); - expect(_cmdRunner.producedMessages, isEmpty); - }); - - test('Remove: model is not changed', () { - var todo = createTodos().map((x) => TodoModel.fromEntity(x)).first; - var model = init(todo).model; - - final updateResult = update(_cmdRepo, Remove(), model); - final updatedModel = updateResult.model; - _cmdRunner.run(updateResult.effects); - - expect(updatedModel, equals(model)); - expect( - _cmdRepo.createdEffects, - orderedEquals([ - predicate((x) => - x is RemoveTodoEffect && - x.entity == updatedModel.todo.toEntity()) - ])); - expect(_cmdRunner.producedMessages, isEmpty); - }); - - test('Edit: model is not changed', () { - var todo = createTodos().map((x) => TodoModel.fromEntity(x)).first; - var model = init(todo).model; - - var updateResult = update(_cmdRepo, Edit(), model); - - expect(updateResult.model, equals(model)); - expect(updateResult.effects, isNotEmpty); - }); - }); -} diff --git a/mvu/test/edit_screen_test.dart b/mvu/test/edit_screen_test.dart deleted file mode 100644 index fc8d8b8e..00000000 --- a/mvu/test/edit_screen_test.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:test/test.dart'; - -import 'package:mvu/edit/edit.dart'; -import 'package:mvu/edit/types.dart'; -import 'cmd_runner.dart'; -import 'data.dart'; - -void main() { - group('Edit screen ->', () { - CmdRunner _cmdRunner; - TestTodosCmdRepository _cmdRepo; - - setUp(() { - _cmdRunner = CmdRunner(); - _cmdRepo = TestTodosCmdRepository(); - }); - - test('init', () { - var todo = createTodos().first; - var model = init(todo).model; - - expect(model.id, equals(todo.id)); - expect(model.note.text, equals(todo.note)); - expect(model.task.text, equals(todo.task)); - }); - - test('OnSaved: model is not changed, has effects', () { - var todo = createTodos().first; - var model = init(todo).model; - - var upd = update(_cmdRepo, OnSaved(todo), model); - - expect(upd.model, equals(model)); - expect(upd.effects, isNotEmpty); - }); - - test('Save: if task is empty no side effects', () { - var model = init(null).model; - - var updateResult = update(_cmdRepo, Save(), model); - - expect(updateResult.model, equals(model)); - expect(updateResult.effects, isEmpty); - }); - - test('Save: if task is not empty has side effects', () { - var todo = createTodos().first; - var model = init(todo).model; - final updatedNote = todo.note + '_changed'; - final updatedTask = todo.task + '_changed'; - model.note.text = updatedNote; - model.task.text = updatedTask; - - var updateResult = update(_cmdRepo, Save(), model); - _cmdRunner.run(updateResult.effects); - - expect(updateResult.model, equals(model)); - expect(updateResult.effects, isNotEmpty); - expect( - _cmdRepo.createdEffects, - orderedEquals([ - predicate((x) => - x is UpdateDetailsEffect && - x.id == model.id && - x.note == updatedNote && - x.task == updatedTask) - ])); - expect( - _cmdRunner.producedMessages, - orderedEquals([ - predicate((x) => - x is OnSaved && - x.todo.id == model.id && - x.todo.note == updatedNote && - x.todo.task == updatedTask) - ])); - }); - }); -} diff --git a/mvu/test/home_screen_test.dart b/mvu/test/home_screen_test.dart deleted file mode 100644 index ccf959e8..00000000 --- a/mvu/test/home_screen_test.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:test/test.dart'; - -import 'package:mvu/home/home.dart'; -import 'package:mvu/home/types.dart'; - -void main() { - group('Home screen ->', () { - test('init', () { - for (var tab in AppTab.values) { - var initResult = init(tab); - expect(initResult.model.body.tag, equals(tab)); - } - }); - - test('TabChangedMessage: tab is changed', () { - var currentTab = AppTab.todos; - var model = init(currentTab).model; - expect(model.body.tag, equals(currentTab)); - - currentTab = AppTab.stats; - var updatedModel = update(TabChangedMessage(currentTab), model).model; - expect(updatedModel.body.tag, equals(currentTab)); - - currentTab = AppTab.todos; - updatedModel = update(TabChangedMessage(currentTab), model).model; - expect(updatedModel.body.tag, equals(currentTab)); - }); - - test('TabChangedMessage: model is not changed if current and tab are same', - () { - var currentTab = AppTab.todos; - var model = init(currentTab).model; - expect(model.body.tag, equals(currentTab)); - var updatedModel = update(TabChangedMessage(currentTab), model).model; - expect(updatedModel, equals(model)); - }); - }); -} diff --git a/mvu/test/repository_commads_test.dart b/mvu/test/repository_commads_test.dart deleted file mode 100644 index b76c73fa..00000000 --- a/mvu/test/repository_commads_test.dart +++ /dev/null @@ -1,120 +0,0 @@ -import 'package:test/test.dart'; - -import 'package:mvu/common/repository_commands.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'cmd_runner.dart'; -import 'data.dart'; - -void main() { - InMemoryTodosRepository todosRepository; - CmdRepository brokenCmdRepository; - CmdRepository cmdRepository; - CmdRunner runner; - setUp(() { - todosRepository = InMemoryTodosRepository(initialItems: createTodos()); - brokenCmdRepository = - TodosCmdRepository(InMemoryTodosRepository(isBrokern: true)); - cmdRepository = TodosCmdRepository(todosRepository); - runner = CmdRunner(); - }); - - group('repository commands', () { - test('load todos (success)', () { - final loadCmd = cmdRepository.loadTodosCmd(expectAsync1((items) { - expect(items, orderedEquals(todosRepository.items)); - return OnLoadSuccess(items); - }), onError: expectAsync1((e) => OnLoadError(e), count: 0)); - - runner.run(loadCmd); - }); - - test('load todos (error)', () { - final loadCmd = brokenCmdRepository.loadTodosCmd( - expectAsync1((items) => OnLoadSuccess(items), count: 0), - onError: expectAsync1((e) => OnLoadError(e), count: 1)); - - runner.run(loadCmd); - }); - - test('save todos', () { - final items = todosRepository.items.take(3).toList(); - final saveCmd = - cmdRepository.saveAllCmd(items, onSuccess: expectAsync0(() { - expect(todosRepository.items, orderedEquals(items)); - return null; - })); - - runner.run(saveCmd); - }); - - test('remove todo', () { - final itemToRemove = todosRepository.items.first; - final cmd = cmdRepository.removeCmd(itemToRemove, - onSuccess: expectAsync0(() { - expect(todosRepository.items, isNot(contains(itemToRemove))); - return null; - })); - - runner.run(cmd); - }); - - test('save todo', () { - final firstItem = todosRepository.items.first; - final updated = TodoEntity( - firstItem.task, firstItem.id, firstItem.note, !firstItem.complete); - - final cmd = - cmdRepository.saveCmd(updated, onSuccess: expectAsync0(() { - expect(todosRepository.items, contains(updated)); - return null; - })); - - runner.run(cmd); - }); - - test('create todo', () { - final task = 'Write unit tests'; - final note = 'and integration'; - - final cmd = cmdRepository.createCmd(expectAsync1((x) { - expect( - todosRepository.items, - anyElement(predicate( - (x) => x.note == note && x.task == task && !x.complete))); - return null; - }), task, note); - - runner.run(cmd); - }); - - test('update details', () { - final idToUpdate = todosRepository.items.first.id; - final task = 'Write unit tests'; - final note = 'and integration'; - - final cmd = cmdRepository.updateDetailsCmd(expectAsync1((x) { - expect( - todosRepository.items, - anyElement(predicate((x) => - x.id == idToUpdate && x.note == note && x.task == task))); - return null; - }), idToUpdate, task, note); - - runner.run(cmd); - }); - }); -} - -abstract class Message {} - -class OnLoadSuccess implements Message { - final List items; - OnLoadSuccess(this.items); -} - -class OnLoadError implements Message { - final Exception error; - OnLoadError(this.error); -} - -class OnSaveSuccess implements Message {} diff --git a/mvu/test/stats_screen_test.dart b/mvu/test/stats_screen_test.dart deleted file mode 100644 index b64bffde..00000000 --- a/mvu/test/stats_screen_test.dart +++ /dev/null @@ -1,121 +0,0 @@ -import 'package:mvu/common/todo_model.dart'; -import 'package:mvu/stats/stats.dart'; -import 'package:mvu/stats/types.dart'; -import 'package:test/test.dart'; - -import 'cmd_runner.dart'; -import 'data.dart'; - -void main() { - group('Home screen "Stats" ->', () { - CmdRunner _cmdRunner; - TestTodosCmdRepository _cmdRepo; - - setUp(() { - _cmdRunner = CmdRunner(); - _cmdRepo = TestTodosCmdRepository(); - }); - - test('init', () { - final initResult = init(); - final model = initResult.model; - final initEffects = initResult.effects; - _cmdRunner.run(initEffects); - - expect(model.activeCount, 0); - expect(model.completedCount, 0); - expect(model.loading, isFalse); - expect(initEffects, isNotEmpty); - expect(_cmdRunner.producedMessages, - orderedEquals([TypeMatcher()])); - }); - - test('LoadStats: model is in loading state', () { - var model = init().model; - - final upd = update(_cmdRepo, LoadStats(), model); - final updatedModel = upd.model; - final effects = upd.effects; - _cmdRunner.run(effects); - - expect(updatedModel.loading, isTrue); - expect(effects, isNotEmpty); - expect(_cmdRunner.producedMessages, - orderedEquals([TypeMatcher()])); - expect(_cmdRepo.createdEffects, - orderedEquals([TypeMatcher()])); - }); - - test('OnStatsLoaded: stats is displayed', () { - var model = init().model; - var activeCount = 5, completedCount = 8; - var items = createTodosForStats(activeCount, completedCount); - - var updatedModel = update(_cmdRepo, OnStatsLoaded(items), model).model; - - expect(updatedModel.loading, isFalse); - expect(updatedModel.activeCount, activeCount); - expect(updatedModel.completedCount, completedCount); - }); - - test('ToggleAllMessage(false->true): stats is updated', () { - var model = init().model; - var items = createTodos(complete: false); - var upd = update(_cmdRepo, OnStatsLoaded(items), model); - var updatedModel = upd.model; - upd = update(_cmdRepo, ToggleAllMessage(), updatedModel); - updatedModel = upd.model; - _cmdRunner.run(upd.effects); - - expect(updatedModel.activeCount, 0); - expect(updatedModel.completedCount, items.length); - expect(upd.effects, isNotEmpty); - expect(_cmdRepo.createdEffects, - orderedEquals([TypeMatcher()])); - }); - - test('ToggleAllMessage(true->false): stats is updated', () { - var model = init().model; - var items = createTodos(complete: true); - var updatedModel = update(_cmdRepo, OnStatsLoaded(items), model).model; - - updatedModel = update(_cmdRepo, ToggleAllMessage(), updatedModel).model; - - expect(updatedModel.activeCount, items.length); - expect(updatedModel.completedCount, 0); - }); - - test('ToggleAllMessage(partially): stats is updated', () { - var model = init().model; - var activeCount = 3, completedCount = 6; - var items = createTodosForStats(activeCount, completedCount); - var updatedModel = update(_cmdRepo, OnStatsLoaded(items), model).model; - - updatedModel = update(_cmdRepo, ToggleAllMessage(), updatedModel).model; - - expect(updatedModel.activeCount, 0); - expect(updatedModel.completedCount, items.length); - expect(updatedModel.items, - everyElement(predicate((x) => x.complete))); - }); - - test('CleareCompletedMessage: stats is updated', () { - var model = init().model; - var activeCount = 3, completedCount = 6; - var items = createTodosForStats(activeCount, completedCount); - var updatedModel = update(_cmdRepo, OnStatsLoaded(items), model).model; - - final upd = update(_cmdRepo, CleareCompletedMessage(), updatedModel); - updatedModel = upd.model; - _cmdRunner.run(upd.effects); - - expect(updatedModel.activeCount, activeCount); - expect(updatedModel.completedCount, 0); - expect(updatedModel.items, - everyElement(predicate((x) => !x.complete))); - expect(upd.effects, isNotEmpty); - expect(_cmdRepo.createdEffects, - orderedEquals([TypeMatcher()])); - }); - }); -} diff --git a/mvu/test/todos_screen_test.dart b/mvu/test/todos_screen_test.dart deleted file mode 100644 index 712d41de..00000000 --- a/mvu/test/todos_screen_test.dart +++ /dev/null @@ -1,234 +0,0 @@ -import 'package:built_collection/built_collection.dart'; -import 'package:mvu/common/todo_model.dart'; -import 'package:mvu/home/types.dart' show VisibilityFilter; -import 'package:mvu/todos/todos.dart'; -import 'package:mvu/todos/types.dart'; -import 'package:test/test.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -import 'cmd_runner.dart'; -import 'data.dart'; - -CmdRunner _cmdRunner; -TestTodosCmdRepository _cmdRepo; - -void main() { - group('Home screen "Todos" ->', () { - setUp(() { - _cmdRunner = CmdRunner(); - _cmdRepo = TestTodosCmdRepository(); - }); - - test('init', () { - for (var filter in VisibilityFilter.values) { - var initResult = init(filter); - final model = initResult.model; - _cmdRunner.run(initResult.effects); - - expect(model.filter, equals(filter)); - expect(model.isLoading, isFalse); - expect(model.loadingError, anyOf(isNull, isEmpty)); - expect(model.items, isEmpty); - expect(initResult.effects, isNotEmpty); - expect(_cmdRunner.producedMessages, - orderedEquals([TypeMatcher()])); - - _cmdRunner.invalidate(); - } - }); - - test('LoadTodos: model is in loading state', () { - var model = init(VisibilityFilter.all).model; - var upd = update(_cmdRepo, LoadTodos(), model); - final updatedModel = upd.model; - _cmdRunner.run(upd.effects); - - expect(updatedModel.isLoading, isTrue); - expect(upd.effects, isNotEmpty); - expect(_cmdRepo.createdEffects, - orderedEquals([TypeMatcher()])); - expect(_cmdRunner.producedMessages, - orderedEquals([TypeMatcher()])); - }); - - test('OnTodosLoaded: todos are loaded', () { - var model = init(VisibilityFilter.all).model; - var items = createTodos(); - var upd = update(_cmdRepo, OnTodosLoaded(items), model); - final updatedModel = upd.model; - - expect(updatedModel.isLoading, isFalse); - expect(updatedModel.items.map((x) => x.toEntity()), orderedEquals(items)); - expect(upd.effects, isEmpty); - }); - - test('OnTodosLoadError: model is in error state', () { - var model = init(VisibilityFilter.all).model; - var cause = Exception('No connection'); - var upd = update(_cmdRepo, OnTodosLoadError(cause), model); - final updatedModel = upd.model; - - expect(updatedModel.isLoading, isFalse); - expect(updatedModel.loadingError, equals(cause.toString())); - expect(upd.effects, isEmpty); - }); - - test('UpdateTodo: toggle todo state', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - var repoEffectsMatchers = []; - for (var item in items) { - var upd = update(_cmdRepo, UpdateTodo(!item.complete, item), model); - final updatedModel = upd.model; - var updatedTodo = updatedModel.items.firstWhere( - (x) => x.id == item.id, - orElse: () => null, - ); - _cmdRunner.run(upd.effects); - - expect(updatedModel.items.length, items.length); - expect(updatedTodo, isNotNull); - expect(updatedTodo.complete, equals(!item.complete)); - expect(upd.effects, isNotEmpty); - repoEffectsMatchers.add(TypeMatcher()); - } - expect(_cmdRepo.createdEffects, orderedEquals(repoEffectsMatchers)); - }); - - test('RemoveTodo: item is removed', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - final repoEffectsMatchers = []; - for (var item in items) { - var upd = update(_cmdRepo, RemoveTodo(item), model); - final updatedModel = upd.model; - _cmdRunner.run(upd.effects); - - expect(updatedModel.items, isNot(contains(item))); - repoEffectsMatchers.add(TypeMatcher()); - } - expect(_cmdRepo.createdEffects, orderedEquals(repoEffectsMatchers)); - }); - - test('UndoRemoveItem: undo removing', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - for (var itemToRemove in items) { - var upd = update(_cmdRepo, RemoveTodo(itemToRemove), model); - final updatedModel = upd.model; - expect(updatedModel.items, isNot(contains(itemToRemove))); - final undoUpd = - update(_cmdRepo, UndoRemoveItem(itemToRemove), updatedModel); - final undoModel = undoUpd.model; - expect(undoModel.items, contains(itemToRemove)); - } - }); - - test('FilterChanged: model with provided filter', () { - var currentFilter = VisibilityFilter.all; - var model = init(currentFilter).model; - expect(model.filter, equals(currentFilter)); - - for (var filter in VisibilityFilter.values) { - var upd = update(_cmdRepo, FilterChanged(filter), model); - expect(upd.model.filter, equals(filter)); - } - }); - - test('ToggleAllMessage: mark all as complete', () { - var items = - createTodos(complete: false).map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - var upd = update(_cmdRepo, ToggleAllMessage(), model); - _cmdRunner.run(upd.effects); - - expect(upd.model.items, - everyElement(predicate((x) => x.complete))); - expect(_cmdRepo.createdEffects, - orderedEquals([TypeMatcher()])); - }); - - test('ToggleAllMessage: mark all as incomplete', () { - var items = - createTodos(complete: true).map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - var upd = update(_cmdRepo, ToggleAllMessage(), model); - - expect(upd.model.items, - everyElement(predicate((x) => !x.complete))); - }); - - test('CleareCompletedMessage: remove all completed todos', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - expect(model.items, anyElement(predicate((x) => x.complete))); - - var upd = update(_cmdRepo, CleareCompletedMessage(), model); - _cmdRunner.run(upd.effects); - - expect(upd.model.items, - everyElement(predicate((x) => !x.complete))); - expect(_cmdRepo.createdEffects, - orderedEquals([TypeMatcher()])); - }); - - test('ShowDetailsMessage: model is not changed', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - var upd = update(_cmdRepo, ShowDetailsMessage(items.first), model); - - expect(upd.model, equals(model)); - }); - - test('OnTodoItemChanged: item is updated', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - var itemToUpdate = items.first.rebuild((b) => b - ..complete = !b.complete - ..note = b.note + 'v1' - ..task = b.task + 'v1'); - - var upd = update( - _cmdRepo, OnTodoItemChanged(updated: itemToUpdate.toEntity()), model); - var updatedItem = - upd.model.items.firstWhere((x) => x.id == itemToUpdate.id); - - expect(itemToUpdate, equals(updatedItem)); - }); - - test('OnTodoItemChanged: item is removed', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - var itemToRemove = items.first; - - var upd = update( - _cmdRepo, OnTodoItemChanged(removed: itemToRemove.toEntity()), model); - - expect(upd.model.items, isNot(contains(itemToRemove))); - }); - - test('OnTodoItemChanged: item is created', () { - var items = createTodos().map((x) => TodoModel.fromEntity(x)); - var model = _createWith(items); - - var newItem = TodoEntity('New one', '11234', 'some note', false); - - var upd = update(_cmdRepo, OnTodoItemChanged(created: newItem), model); - - expect(upd.model.items, contains(TodoModel.fromEntity(newItem))); - }); - }); -} - -TodosModel _createWith(Iterable items) => TodosModel((b) => b - ..filter = VisibilityFilter.all - ..isLoading = false - ..items = BuiltList(items).toBuilder()); diff --git a/mvu/test/widget_test.dart b/mvu/test/widget_test.dart deleted file mode 100644 index f2142212..00000000 --- a/mvu/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:mvu/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -} diff --git a/mvu/test_driver/todo_app.dart b/mvu/test_driver/todo_app.dart deleted file mode 100644 index 070a0c85..00000000 --- a/mvu/test_driver/todo_app.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:mvu/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/mvu/test_driver/todo_app_test.dart b/mvu/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/mvu/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} From 67f5407cb5a9d010531717e742c46274c16c24b8 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 16:51:14 +0100 Subject: [PATCH 10/89] Fix line counter --- line_count.md | 28 +++++++++++++--------------- scripts/line_counter.dart | 34 +++++++++++++++++----------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/line_count.md b/line_count.md index 06c94c66..782dc0c2 100644 --- a/line_count.md +++ b/line_count.md @@ -15,21 +15,19 @@ samples to make them smaller, unless doing so improves the application overall. | *Sample* | *LOC (no comments)* | |--------|-------------------| -| scoped_model | 778 | -| mobx | 815 | -| change_notifier_provider | 830 | -| inherited_widget | 832 | -| mvc | 842 | -| vanilla | 842 | +| scoped_model | 774 | +| inherited_widget | 821 | +| mobx | 826 | +| change_notifier_provider | 832 | +| vanilla | 834 | | frideos_library | 878 | -| simple blocs | 1076 | -| built_redux | 1172 | -| mvu | 1191 | -| bloc | 1194 | -| bloc library | 1214 | -| mvi | 1244 | -| redux | 1362 | -| firestore_redux | 1429 | +| simple blocs | 1055 | +| bloc | 1160 | +| bloc library | 1211 | +| mvi | 1214 | +| built_redux | 1219 | +| redux | 1354 | +| firestore_redux | 1395 | -Note: This file was generated on 2020-01-10 14:59:25.151846Z using `scripts/line_counter.dart`. +Note: This file was generated on 2025-07-06 15:50:59.345520Z using `scripts/line_counter.dart`. diff --git a/scripts/line_counter.dart b/scripts/line_counter.dart index 99b7bac0..687295f7 100644 --- a/scripts/line_counter.dart +++ b/scripts/line_counter.dart @@ -5,7 +5,7 @@ class Sample { final List directories; Sample(this.name, List paths) - : directories = paths.map((path) => Directory('$path/lib')).toList(); + : directories = paths.map((path) => Directory('$path/lib')).toList(); } class Output { @@ -30,21 +30,19 @@ void main() { Sample('frideos_library', ['frideos_library']), Sample('inherited_widget', ['inherited_widget']), Sample('mobx', ['mobx']), - Sample('mvc', ['mvc']), Sample('mvi', ['mvi_flutter', 'mvi_base']), - Sample('mvu', ['mvu']), Sample('redux', ['redux']), Sample('scoped_model', ['scoped_model']), Sample('simple blocs', ['simple_bloc_flutter', 'simple_blocs']), Sample('vanilla', ['vanilla']), ]; - final outputs = samples.map((sample) { - return Output( - sample.name, - _countLines(sample.directories), - ); - }).toList(growable: false) - ..sort((a, b) => a.lineCount - b.lineCount); + final outputs = + samples + .map((sample) { + return Output(sample.name, _countLines(sample.directories)); + }) + .toList(growable: false) + ..sort((a, b) => a.lineCount - b.lineCount); final strings = outputs .map((output) => '| ${output.name} | ${output.lineCount} |') @@ -93,13 +91,15 @@ List _findDartFiles(List directories) { .listSync(recursive: true) .whereType() .map((file) => file.path) - .where((path) => - path.endsWith('.dart') && - !path.endsWith('.g.dart') && - !path.contains('todos_repository') && - !path.contains('file_storage') && - !path.contains('web_client') && - !path.contains('main_')) + .where( + (path) => + path.endsWith('.dart') && + !path.endsWith('.g.dart') && + !path.contains('todos_repository') && + !path.contains('file_storage') && + !path.contains('web_client') && + !path.contains('main_'), + ) .toSet(); return {...files, ...currentDirectoryDartFiles}; From 47dab5931de53168d9c51ea7a339ddb4062319df Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 17:03:04 +0100 Subject: [PATCH 11/89] Fix line counter --- line_count.md | 22 +++++++++++----------- scripts/line_counter.dart | 4 +++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/line_count.md b/line_count.md index 782dc0c2..fef56475 100644 --- a/line_count.md +++ b/line_count.md @@ -15,19 +15,19 @@ samples to make them smaller, unless doing so improves the application overall. | *Sample* | *LOC (no comments)* | |--------|-------------------| -| scoped_model | 774 | -| inherited_widget | 821 | -| mobx | 826 | -| change_notifier_provider | 832 | +| scoped_model | 767 | +| mobx | 812 | +| inherited_widget | 817 | +| change_notifier_provider | 826 | | vanilla | 834 | -| frideos_library | 878 | -| simple blocs | 1055 | -| bloc | 1160 | -| bloc library | 1211 | -| mvi | 1214 | -| built_redux | 1219 | +| frideos_library | 850 | +| simple blocs | 1043 | +| bloc | 1124 | +| bloc library | 1208 | +| mvi | 1209 | +| built_redux | 1212 | | redux | 1354 | | firestore_redux | 1395 | -Note: This file was generated on 2025-07-06 15:50:59.345520Z using `scripts/line_counter.dart`. +Note: This file was generated on 2025-07-06 16:02:37.807817Z using `scripts/line_counter.dart`. diff --git a/scripts/line_counter.dart b/scripts/line_counter.dart index 687295f7..d1871323 100644 --- a/scripts/line_counter.dart +++ b/scripts/line_counter.dart @@ -78,7 +78,9 @@ int _countLines(List directories) { return dartFiles.fold(0, (count, file) { final nonCommentsLineCount = file .readAsLinesSync() - .where((line) => !line.startsWith('//') && line.trim().isNotEmpty) + .where( + (line) => !line.trimLeft().startsWith('//') && line.trim().isNotEmpty, + ) .length; return count + nonCommentsLineCount; From 523216b649ebb5638dc3ca9725e050eb7fe28fd9 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 17:05:31 +0100 Subject: [PATCH 12/89] Convert dart line counter to bash --- line_count.md | 11 ++-- scripts/line_counter.dart | 111 -------------------------------------- scripts/line_counter.sh | 97 +++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 117 deletions(-) delete mode 100644 scripts/line_counter.dart create mode 100755 scripts/line_counter.sh diff --git a/line_count.md b/line_count.md index fef56475..b9d31d6c 100644 --- a/line_count.md +++ b/line_count.md @@ -6,13 +6,13 @@ frameworks. This is an imperfect line count comparison -- some of the samples contain a bit more functionality / are structured a bit differently than others -- and should -be taken with a grain of salt. All generated files, blank lines and comment +be taken with a grain of salt. All generated files, blank lines and comment lines are removed for this comparison. -For authors of frameworks or samples (hey, I'm one of those!): Please do not +For authors of frameworks or samples (hey, I'm one of those!): Please do not take this comparison personally, nor should folks play "Code Golf" with the -samples to make them smaller, unless doing so improves the application overall. - +samples to make them smaller, unless doing so improves the application overall. + | *Sample* | *LOC (no comments)* | |--------|-------------------| | scoped_model | 767 | @@ -29,5 +29,4 @@ samples to make them smaller, unless doing so improves the application overall. | redux | 1354 | | firestore_redux | 1395 | -Note: This file was generated on 2025-07-06 16:02:37.807817Z using `scripts/line_counter.dart`. - +Note: This file was generated on Sun Jul 6 16:04:54 UTC 2025 using `scripts/line_counter.sh`. diff --git a/scripts/line_counter.dart b/scripts/line_counter.dart deleted file mode 100644 index d1871323..00000000 --- a/scripts/line_counter.dart +++ /dev/null @@ -1,111 +0,0 @@ -import 'dart:io'; - -class Sample { - final String name; - final List directories; - - Sample(this.name, List paths) - : directories = paths.map((path) => Directory('$path/lib')).toList(); -} - -class Output { - final String name; - final int lineCount; - - Output(this.name, this.lineCount); - - @override - String toString() { - return 'Output{name: $name, lineCount: $lineCount}'; - } -} - -void main() { - final samples = [ - Sample('change_notifier_provider', ['change_notifier_provider']), - Sample('bloc', ['bloc_flutter', 'blocs']), - Sample('bloc library', ['bloc_library']), - Sample('built_redux', ['built_redux']), - Sample('firestore_redux', ['firestore_redux']), - Sample('frideos_library', ['frideos_library']), - Sample('inherited_widget', ['inherited_widget']), - Sample('mobx', ['mobx']), - Sample('mvi', ['mvi_flutter', 'mvi_base']), - Sample('redux', ['redux']), - Sample('scoped_model', ['scoped_model']), - Sample('simple blocs', ['simple_bloc_flutter', 'simple_blocs']), - Sample('vanilla', ['vanilla']), - ]; - final outputs = - samples - .map((sample) { - return Output(sample.name, _countLines(sample.directories)); - }) - .toList(growable: false) - ..sort((a, b) => a.lineCount - b.lineCount); - - final strings = outputs - .map((output) => '| ${output.name} | ${output.lineCount} |') - .join('\n'); - - print(''' -# Line Counts - -Though not the only factor or even most important factor, the amount of code it -takes to achieve a working product is an important consideration when comparing -frameworks. - -This is an imperfect line count comparison -- some of the samples contain a bit -more functionality / are structured a bit differently than others -- and should -be taken with a grain of salt. All generated files, blank lines and comment -lines are removed for this comparison. - -For authors of frameworks or samples (hey, I'm one of those!): Please do not -take this comparison personally, nor should folks play "Code Golf" with the -samples to make them smaller, unless doing so improves the application overall. - -| *Sample* | *LOC (no comments)* | -|--------|-------------------| -$strings - -Note: This file was generated on ${DateTime.now().toUtc()} using `scripts/line_counter.dart`. -'''); -} - -int _countLines(List directories) { - final dartFiles = _findDartFiles(directories); - - return dartFiles.fold(0, (count, file) { - final nonCommentsLineCount = file - .readAsLinesSync() - .where( - (line) => !line.trimLeft().startsWith('//') && line.trim().isNotEmpty, - ) - .length; - - return count + nonCommentsLineCount; - }); -} - -List _findDartFiles(List directories) { - final paths = directories.fold({}, (files, directory) { - final currentDirectoryDartFiles = directory - .listSync(recursive: true) - .whereType() - .map((file) => file.path) - .where( - (path) => - path.endsWith('.dart') && - !path.endsWith('.g.dart') && - !path.contains('todos_repository') && - !path.contains('file_storage') && - !path.contains('web_client') && - !path.contains('main_'), - ) - .toSet(); - - return {...files, ...currentDirectoryDartFiles}; - }); - - return List.unmodifiable(paths.map((path) => File(path))); -} diff --git a/scripts/line_counter.sh b/scripts/line_counter.sh new file mode 100755 index 00000000..72cb393f --- /dev/null +++ b/scripts/line_counter.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +# Function to count lines in Dart files for a given directory +count_lines() { + local dir="$1" + local total_lines=0 + + # Find all .dart files recursively, excluding generated files and specific patterns + while IFS= read -r -d '' file; do + # Skip generated files and specific patterns + if [[ "$file" == *.g.dart ]] || \ + [[ "$file" == *todos_repository* ]] || \ + [[ "$file" == *file_storage* ]] || \ + [[ "$file" == *web_client* ]] || \ + [[ "$file" == *main_* ]]; then + continue + fi + + # Count non-comment, non-empty lines + local file_lines=$(grep -v '^[[:space:]]*//' "$file" | grep -v '^[[:space:]]*$' | wc -l) + total_lines=$((total_lines + file_lines)) + done < <(find "$dir/lib" -name "*.dart" -type f -print0 2>/dev/null) + + echo "$total_lines" +} + +# Function to count lines for multiple directories +count_lines_for_dirs() { + local total=0 + for dir in "$@"; do + if [ -d "$dir" ]; then + local lines=$(count_lines "$dir") + total=$((total + lines)) + fi + done + echo "$total" +} + +# Define samples as a single array of objects (name:dirs format) +samples=( + "change_notifier_provider:change_notifier_provider" + "bloc:bloc_flutter blocs" + "bloc library:bloc_library" + "built_redux:built_redux" + "firestore_redux:firestore_redux" + "frideos_library:frideos_library" + "inherited_widget:inherited_widget" + "mobx:mobx" + "mvi:mvi_flutter mvi_base" + "redux:redux" + "scoped_model:scoped_model" + "simple blocs:simple_bloc_flutter simple_blocs" + "vanilla:vanilla" +) + +# Collect results +results=() + +for sample in "${samples[@]}"; do + name=$(echo "$sample" | cut -d: -f1) + dirs=$(echo "$sample" | cut -d: -f2) + line_count=$(count_lines_for_dirs $dirs) + results+=("$line_count $name") +done + +# Sort results by line count +IFS=$'\n' sorted_results=($(sort -n <<<"${results[*]}")) +unset IFS + +# Generate output +echo "# Line Counts" +echo "" +echo "Though not the only factor or even most important factor, the amount of code it" +echo "takes to achieve a working product is an important consideration when comparing" +echo "frameworks." +echo "" +echo "This is an imperfect line count comparison -- some of the samples contain a bit" +echo "more functionality / are structured a bit differently than others -- and should" +echo "be taken with a grain of salt. All generated files, blank lines and comment" +echo "lines are removed for this comparison." +echo "" +echo "For authors of frameworks or samples (hey, I'm one of those!): Please do not" +echo "take this comparison personally, nor should folks play \"Code Golf\" with the" +echo "samples to make them smaller, unless doing so improves the application overall." +echo "" +echo "| *Sample* | *LOC (no comments)* |" +echo "|--------|-------------------|" + +# Output sorted results +for result in "${sorted_results[@]}"; do + line_count=$(echo "$result" | awk '{print $1}') + name=$(echo "$result" | awk '{for(i=2;i<=NF;i++) printf "%s ", $i; print ""}' | sed 's/ $//') + echo "| $name | $line_count |" +done + +echo "" +echo "Note: This file was generated on $(date -u) using \`scripts/line_counter.sh\`." From 5637d1ef9c2b0d610755bcf048778faf5f4826a6 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 18:06:29 +0100 Subject: [PATCH 13/89] Use fvm for flutter version --- .fvmrc | 3 +++ .gitignore | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 .fvmrc diff --git a/.fvmrc b/.fvmrc new file mode 100644 index 00000000..0251c4a7 --- /dev/null +++ b/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.32.5" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3489b024..e7e860dc 100644 --- a/.gitignore +++ b/.gitignore @@ -93,3 +93,6 @@ lcov.info **/*/generated_plugin_registrant.dart .vscode/ + +# FVM Version Cache +.fvm/ \ No newline at end of file From b7a12a64d941dc906b48e60193b6e1afd92497c9 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 18:24:13 +0100 Subject: [PATCH 14/89] Add web integration test file --- vanilla/test_driver/integration_test.dart | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 vanilla/test_driver/integration_test.dart diff --git a/vanilla/test_driver/integration_test.dart b/vanilla/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/vanilla/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); From 098d377f92ad24d7e98d50f1631fdb9912ec9b7a Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 18:44:37 +0100 Subject: [PATCH 15/89] Regenerate vanilla project --- states_rebuilder/pubspec.yaml | 4 - vanilla/.gitignore | 58 +--- vanilla/integration_test/todo_app_test.dart | 20 +- vanilla/ios/Podfile.lock | 36 --- vanilla/ios/Runner.xcodeproj/project.pbxproj | 112 ------- .../contents.xcworkspacedata | 3 - vanilla/lib/app.dart | 25 +- vanilla/lib/models.dart | 7 +- vanilla/lib/screens/add_edit_screen.dart | 59 ++-- vanilla/lib/screens/detail_screen.dart | 9 +- vanilla/lib/screens/home_screen.dart | 2 +- vanilla/lib/widgets/extra_actions_button.dart | 8 +- vanilla/lib/widgets/filter_button.dart | 7 +- vanilla/lib/widgets/stats_counter.dart | 4 +- vanilla/lib/widgets/todo_list.dart | 5 +- vanilla/lib/widgets/typedefs.dart | 15 +- vanilla/linux/.gitignore | 1 + vanilla/linux/CMakeLists.txt | 128 ++++++++ vanilla/linux/flutter/CMakeLists.txt | 88 ++++++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + vanilla/linux/flutter/generated_plugins.cmake | 23 ++ vanilla/linux/runner/CMakeLists.txt | 26 ++ vanilla/linux/runner/main.cc | 6 + vanilla/linux/runner/my_application.cc | 130 ++++++++ vanilla/linux/runner/my_application.h | 18 ++ .../macos/Runner.xcodeproj/project.pbxproj | 62 ++-- vanilla/pubspec.yaml | 31 +- vanilla/test/app_state_test.dart | 100 ++---- vanilla/web/index.html | 30 +- vanilla/windows/.gitignore | 17 ++ vanilla/windows/CMakeLists.txt | 108 +++++++ vanilla/windows/flutter/CMakeLists.txt | 109 +++++++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 ++ vanilla/windows/runner/CMakeLists.txt | 40 +++ vanilla/windows/runner/Runner.rc | 121 ++++++++ vanilla/windows/runner/flutter_window.cpp | 71 +++++ vanilla/windows/runner/flutter_window.h | 33 ++ vanilla/windows/runner/main.cpp | 43 +++ vanilla/windows/runner/resource.h | 16 + vanilla/windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes vanilla/windows/runner/runner.exe.manifest | 14 + vanilla/windows/runner/utils.cpp | 65 ++++ vanilla/windows/runner/utils.h | 19 ++ vanilla/windows/runner/win32_window.cpp | 288 ++++++++++++++++++ vanilla/windows/runner/win32_window.h | 102 +++++++ 48 files changed, 1750 insertions(+), 388 deletions(-) delete mode 100644 vanilla/ios/Podfile.lock create mode 100644 vanilla/linux/.gitignore create mode 100644 vanilla/linux/CMakeLists.txt create mode 100644 vanilla/linux/flutter/CMakeLists.txt create mode 100644 vanilla/linux/flutter/generated_plugin_registrant.cc create mode 100644 vanilla/linux/flutter/generated_plugin_registrant.h create mode 100644 vanilla/linux/flutter/generated_plugins.cmake create mode 100644 vanilla/linux/runner/CMakeLists.txt create mode 100644 vanilla/linux/runner/main.cc create mode 100644 vanilla/linux/runner/my_application.cc create mode 100644 vanilla/linux/runner/my_application.h create mode 100644 vanilla/windows/.gitignore create mode 100644 vanilla/windows/CMakeLists.txt create mode 100644 vanilla/windows/flutter/CMakeLists.txt create mode 100644 vanilla/windows/flutter/generated_plugin_registrant.cc create mode 100644 vanilla/windows/flutter/generated_plugin_registrant.h create mode 100644 vanilla/windows/flutter/generated_plugins.cmake create mode 100644 vanilla/windows/runner/CMakeLists.txt create mode 100644 vanilla/windows/runner/Runner.rc create mode 100644 vanilla/windows/runner/flutter_window.cpp create mode 100644 vanilla/windows/runner/flutter_window.h create mode 100644 vanilla/windows/runner/main.cpp create mode 100644 vanilla/windows/runner/resource.h create mode 100644 vanilla/windows/runner/resources/app_icon.ico create mode 100644 vanilla/windows/runner/runner.exe.manifest create mode 100644 vanilla/windows/runner/utils.cpp create mode 100644 vanilla/windows/runner/utils.h create mode 100644 vanilla/windows/runner/win32_window.cpp create mode 100644 vanilla/windows/runner/win32_window.h diff --git a/states_rebuilder/pubspec.yaml b/states_rebuilder/pubspec.yaml index 10e92960..56a789be 100644 --- a/states_rebuilder/pubspec.yaml +++ b/states_rebuilder/pubspec.yaml @@ -28,10 +28,6 @@ dependencies: todos_app_core: path: ../todos_app_core - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.2 - dev_dependencies: flutter_test: sdk: flutter diff --git a/vanilla/.gitignore b/vanilla/.gitignore index 2ddde2a5..e378fe70 100644 --- a/vanilla/.gitignore +++ b/vanilla/.gitignore @@ -5,9 +5,12 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ +migrate_working_dir/ # IntelliJ related *.iml @@ -18,56 +21,27 @@ # The .vscode folder contains launch configuration and tasks you configure in # VS Code which you may wish to be included in version control, so this line # is commented out by default. -#.vscode/ +.vscode/ # Flutter/Dart/Pub related **/doc/api/ +**/ios/Flutter/.last_build_id .dart_tool/ .flutter-plugins -.packages +.flutter-plugins-dependencies .pub-cache/ .pub/ /build/ -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java +# Symbolication related +app.*.symbols -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* +# Obfuscation related +app.*.map.json -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +.fvm diff --git a/vanilla/integration_test/todo_app_test.dart b/vanilla/integration_test/todo_app_test.dart index 719c8d07..75cd7bb3 100644 --- a/vanilla/integration_test/todo_app_test.dart +++ b/vanilla/integration_test/todo_app_test.dart @@ -4,14 +4,16 @@ import 'package:todos_repository_local_storage/todos_repository_local_storage.da import 'package:vanilla/app.dart'; void main() { - integration_tests.run(appBuilder: () async { - return VanillaApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'vanilla_test_${DateTime.now().toIso8601String()}', - await SharedPreferences.getInstance(), + integration_tests.run( + appBuilder: () async { + return VanillaApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'vanilla_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), ), - ), - ); - }); + ); + }, + ); } diff --git a/vanilla/ios/Podfile.lock b/vanilla/ios/Podfile.lock deleted file mode 100644 index 08687c4f..00000000 --- a/vanilla/ios/Podfile.lock +++ /dev/null @@ -1,36 +0,0 @@ -PODS: - - Flutter (1.0.0) - - integration_test (0.0.1): - - Flutter - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - -DEPENDENCIES: - - Flutter (from `Flutter`) - - integration_test (from `.symlinks/plugins/integration_test/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - -EXTERNAL SOURCES: - Flutter: - :path: Flutter - integration_test: - :path: ".symlinks/plugins/integration_test/ios" - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/darwin" - shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - -SPEC CHECKSUMS: - Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - -PODFILE CHECKSUM: 4305caec6b40dde0ae97be1573c53de1882a07e5 - -COCOAPODS: 1.16.2 diff --git a/vanilla/ios/Runner.xcodeproj/project.pbxproj b/vanilla/ios/Runner.xcodeproj/project.pbxproj index 218a547e..7ce1ef68 100644 --- a/vanilla/ios/Runner.xcodeproj/project.pbxproj +++ b/vanilla/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,10 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3EE858315859C3F799362DF0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68FA29C02BF6C898B8034DB9 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - F7E1E4A039FDA7D15008B47F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A287D5B3E024352388909AE /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -44,17 +42,12 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A287D5B3E024352388909AE /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 493E106468F002FDC8F73575 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 68FA29C02BF6C898B8034DB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 76691252ADE67572F257F332 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 80A78C71B49A0EE44CB5D3D8 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -62,25 +55,13 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AE49379C8A5AA3D0B0930A80 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D0963B7D6937E611A31743CE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - E39B9DE5900D2908FAAD2A2F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2039A6A022C038EA54B964F9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F7E1E4A039FDA7D15008B47F /* Pods_RunnerTests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3EE858315859C3F799362DF0 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,29 +76,6 @@ path = RunnerTests; sourceTree = ""; }; - 63435DBB790665929F2FF8F8 /* Pods */ = { - isa = PBXGroup; - children = ( - D0963B7D6937E611A31743CE /* Pods-Runner.debug.xcconfig */, - 493E106468F002FDC8F73575 /* Pods-Runner.release.xcconfig */, - 76691252ADE67572F257F332 /* Pods-Runner.profile.xcconfig */, - E39B9DE5900D2908FAAD2A2F /* Pods-RunnerTests.debug.xcconfig */, - 80A78C71B49A0EE44CB5D3D8 /* Pods-RunnerTests.release.xcconfig */, - AE49379C8A5AA3D0B0930A80 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 8F3AB7ADAB9FA900B3D1D69E /* Frameworks */ = { - isa = PBXGroup; - children = ( - 68FA29C02BF6C898B8034DB9 /* Pods_Runner.framework */, - 2A287D5B3E024352388909AE /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -136,8 +94,6 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - 63435DBB790665929F2FF8F8 /* Pods */, - 8F3AB7ADAB9FA900B3D1D69E /* Frameworks */, ); sourceTree = ""; }; @@ -172,10 +128,8 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 9F55E1C6C164756FD3E96A39 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 2039A6A022C038EA54B964F9 /* Frameworks */, ); buildRules = ( ); @@ -191,14 +145,12 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2306CB171E37EE9CB52B4C41 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - FB859F161608BA3C84908FA8 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,28 +222,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2306CB171E37EE9CB52B4C41 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -323,45 +253,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9F55E1C6C164756FD3E96A39 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - FB859F161608BA3C84908FA8 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -488,7 +379,6 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E39B9DE5900D2908FAAD2A2F /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -506,7 +396,6 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 80A78C71B49A0EE44CB5D3D8 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -522,7 +411,6 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AE49379C8A5AA3D0B0930A80 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata b/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata index 21a3cc14..1d526a16 100644 --- a/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/vanilla/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,7 +4,4 @@ - - diff --git a/vanilla/lib/app.dart b/vanilla/lib/app.dart index 2304a82d..68166196 100644 --- a/vanilla/lib/app.dart +++ b/vanilla/lib/app.dart @@ -25,17 +25,20 @@ class VanillaAppState extends State { void initState() { super.initState(); - widget.repository.loadTodos().then((loadedTodos) { - setState(() { - appState = AppState( - todos: loadedTodos.map(Todo.fromEntity).toList(), - ); - }); - }).catchError((err) { - setState(() { - appState.isLoading = false; - }); - }); + widget.repository + .loadTodos() + .then((loadedTodos) { + setState(() { + appState = AppState( + todos: loadedTodos.map(Todo.fromEntity).toList(), + ); + }); + }) + .catchError((err) { + setState(() { + appState.isLoading = false; + }); + }); } @override diff --git a/vanilla/lib/models.dart b/vanilla/lib/models.dart index 8dd2589e..3d616754 100644 --- a/vanilla/lib/models.dart +++ b/vanilla/lib/models.dart @@ -5,10 +5,7 @@ class AppState { bool isLoading; List todos; - AppState({ - this.isLoading = false, - this.todos = const [], - }); + AppState({this.isLoading = false, this.todos = const []}); factory AppState.loading() => AppState(isLoading: true); @@ -74,7 +71,7 @@ class Todo { String task; Todo(this.task, {this.complete = false, this.note = '', String? id}) - : id = id ?? Uuid().generateV4(); + : id = id ?? Uuid().generateV4(); @override int get hashCode => diff --git a/vanilla/lib/screens/add_edit_screen.dart b/vanilla/lib/screens/add_edit_screen.dart index 1b81ef0d..e4e8bfd0 100644 --- a/vanilla/lib/screens/add_edit_screen.dart +++ b/vanilla/lib/screens/add_edit_screen.dart @@ -29,9 +29,11 @@ class _AddEditScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(isEditing - ? ArchSampleLocalizations.of(context).editTodo - : ArchSampleLocalizations.of(context).addTodo), + title: Text( + isEditing + ? ArchSampleLocalizations.of(context).editTodo + : ArchSampleLocalizations.of(context).addTodo, + ), ), body: Padding( padding: EdgeInsets.all(16.0), @@ -46,7 +48,8 @@ class _AddEditScreenState extends State { autofocus: isEditing ? false : true, style: Theme.of(context).textTheme.titleLarge, decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).newTodoHint), + hintText: ArchSampleLocalizations.of(context).newTodoHint, + ), validator: (val) => val?.trim().isEmpty ?? true ? ArchSampleLocalizations.of(context).emptyTodoError : null, @@ -61,40 +64,38 @@ class _AddEditScreenState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ), ), ), floatingActionButton: FloatingActionButton( - key: isEditing - ? ArchSampleKeys.saveTodoFab - : ArchSampleKeys.saveNewTodo, - tooltip: isEditing - ? ArchSampleLocalizations.of(context).saveChanges - : ArchSampleLocalizations.of(context).addTodo, - child: Icon(Icons.check), - onPressed: () { - final form = _formKey.currentState!; - - if (form.validate()) { - form.save(); + key: isEditing + ? ArchSampleKeys.saveTodoFab + : ArchSampleKeys.saveNewTodo, + tooltip: isEditing + ? ArchSampleLocalizations.of(context).saveChanges + : ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.check), + onPressed: () { + final form = _formKey.currentState!; - final task = _task!; - final note = _note!; + if (form.validate()) { + form.save(); - if (isEditing) { - widget.updateTodo(widget.todo!, task: task, note: note); - } else { - widget.addTodo(Todo( - task, - note: note, - )); - } + final task = _task!; + final note = _note!; - Navigator.pop(context); + if (isEditing) { + widget.updateTodo(widget.todo!, task: task, note: note); + } else { + widget.addTodo(Todo(task, note: note)); } - }), + + Navigator.pop(context); + } + }, + ), ); } diff --git a/vanilla/lib/screens/detail_screen.dart b/vanilla/lib/screens/detail_screen.dart index 62490763..c96f1488 100644 --- a/vanilla/lib/screens/detail_screen.dart +++ b/vanilla/lib/screens/detail_screen.dart @@ -32,7 +32,7 @@ class DetailScreen extends StatelessWidget { onDelete(); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -57,10 +57,7 @@ class DetailScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, @@ -71,7 +68,7 @@ class DetailScreen extends StatelessWidget { todo.note, key: ArchSampleKeys.detailsTodoItemNote, style: Theme.of(context).textTheme.titleMedium, - ) + ), ], ), ), diff --git a/vanilla/lib/screens/home_screen.dart b/vanilla/lib/screens/home_screen.dart index c666ee26..71ce7876 100644 --- a/vanilla/lib/screens/home_screen.dart +++ b/vanilla/lib/screens/home_screen.dart @@ -69,7 +69,7 @@ class HomeScreenState extends State { widget.clearCompleted(); } }, - ) + ), ], ), body: activeTab == AppTab.todos diff --git a/vanilla/lib/widgets/extra_actions_button.dart b/vanilla/lib/widgets/extra_actions_button.dart index 14c8b144..5c349708 100644 --- a/vanilla/lib/widgets/extra_actions_button.dart +++ b/vanilla/lib/widgets/extra_actions_button.dart @@ -22,9 +22,11 @@ class ExtraActionsButton extends StatelessWidget { PopupMenuItem( key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, - child: Text(allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete), + child: Text( + allComplete + ? ArchSampleLocalizations.of(context).markAllIncomplete + : ArchSampleLocalizations.of(context).markAllComplete, + ), ), PopupMenuItem( key: ArchSampleKeys.clearCompleted, diff --git a/vanilla/lib/widgets/filter_button.dart b/vanilla/lib/widgets/filter_button.dart index eed2ad24..60198ba5 100644 --- a/vanilla/lib/widgets/filter_button.dart +++ b/vanilla/lib/widgets/filter_button.dart @@ -17,10 +17,9 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { final defaultStyle = Theme.of(context).textTheme.bodyMedium; - final activeStyle = Theme.of(context) - .textTheme - .bodyMedium - ?.copyWith(color: Theme.of(context).colorScheme.secondary); + final activeStyle = Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); final button = _Button( onSelected: onSelected, activeFilter: activeFilter, diff --git a/vanilla/lib/widgets/stats_counter.dart b/vanilla/lib/widgets/stats_counter.dart index 95ed9559..d8d24682 100644 --- a/vanilla/lib/widgets/stats_counter.dart +++ b/vanilla/lib/widgets/stats_counter.dart @@ -6,7 +6,7 @@ class StatsCounter extends StatelessWidget { final int numCompleted; const StatsCounter({required this.numActive, required this.numCompleted}) - : super(key: ArchSampleKeys.statsCounter); + : super(key: ArchSampleKeys.statsCounter); @override Widget build(BuildContext context) { @@ -43,7 +43,7 @@ class StatsCounter extends StatelessWidget { key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.titleMedium, ), - ) + ), ], ), ); diff --git a/vanilla/lib/widgets/todo_list.dart b/vanilla/lib/widgets/todo_list.dart index 80831ab0..ae8451b8 100644 --- a/vanilla/lib/widgets/todo_list.dart +++ b/vanilla/lib/widgets/todo_list.dart @@ -27,8 +27,9 @@ class TodoList extends StatelessWidget { child: loading ? Center( child: CircularProgressIndicator( - key: ArchSampleKeys.todosLoading, - )) + key: ArchSampleKeys.todosLoading, + ), + ) : ListView.builder( key: ArchSampleKeys.todoList, itemCount: filteredTodos.length, diff --git a/vanilla/lib/widgets/typedefs.dart b/vanilla/lib/widgets/typedefs.dart index 416d9c53..5bd12aac 100644 --- a/vanilla/lib/widgets/typedefs.dart +++ b/vanilla/lib/widgets/typedefs.dart @@ -4,10 +4,11 @@ typedef TodoAdder = void Function(Todo todo); typedef TodoRemover = void Function(Todo todo); -typedef TodoUpdater = void Function( - Todo todo, { - bool complete, - String id, - String note, - String task, -}); +typedef TodoUpdater = + void Function( + Todo todo, { + bool complete, + String id, + String note, + String task, + }); diff --git a/vanilla/linux/.gitignore b/vanilla/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/vanilla/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/vanilla/linux/CMakeLists.txt b/vanilla/linux/CMakeLists.txt new file mode 100644 index 00000000..07bda46f --- /dev/null +++ b/vanilla/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "vanilla") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.vanilla") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/vanilla/linux/flutter/CMakeLists.txt b/vanilla/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/vanilla/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/vanilla/linux/flutter/generated_plugin_registrant.cc b/vanilla/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/vanilla/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/vanilla/linux/flutter/generated_plugin_registrant.h b/vanilla/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/vanilla/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/vanilla/linux/flutter/generated_plugins.cmake b/vanilla/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/vanilla/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/vanilla/linux/runner/CMakeLists.txt b/vanilla/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/vanilla/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/vanilla/linux/runner/main.cc b/vanilla/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/vanilla/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/vanilla/linux/runner/my_application.cc b/vanilla/linux/runner/my_application.cc new file mode 100644 index 00000000..563166c6 --- /dev/null +++ b/vanilla/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "vanilla"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "vanilla"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/vanilla/linux/runner/my_application.h b/vanilla/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/vanilla/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/vanilla/macos/Runner.xcodeproj/project.pbxproj b/vanilla/macos/Runner.xcodeproj/project.pbxproj index 8fe44347..68fbbaec 100644 --- a/vanilla/macos/Runner.xcodeproj/project.pbxproj +++ b/vanilla/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 34697CEC16A1759F06EB6061 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 579AA55793A0F14ADE0D341B /* Pods_Runner.framework */; }; - FFF670F5B788828982642A61 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A182194720070DC79CF1B8D9 /* Pods_RunnerTests.framework */; }; + 94FA0F4787E5FB9819D65440 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4A735CD08E7611CB7B7C8E4 /* Pods_Runner.framework */; }; + C5806345F4B8C8CBD26EC999 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1ED0734AB4899D7F662F1BAD /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,6 +62,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 134A8317AE0D56A9FA5CA10D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1ED0734AB4899D7F662F1BAD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -78,16 +80,14 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 42096AC9028D97CC9490E504 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 579AA55793A0F14ADE0D341B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BADAC203C80713E56957AA3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 678B62E02B78627621BF0AB5 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 3A159F64CEBAB3B0863CBD59 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8F421DCE5FEBEBAC01B6B6AF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A182194720070DC79CF1B8D9 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D84D97F02455DC3C974F9D24 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - E1786C732E6E280909A0D251 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A4A735CD08E7611CB7B7C8E4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ABED7C32DADA4475CB8D9F57 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + DC48E3A48ECE8F4D9F3CB232 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EC717A0419A7371AFEA94911 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + F199D976A342316FC3F8FDEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FFF670F5B788828982642A61 /* Pods_RunnerTests.framework in Frameworks */, + C5806345F4B8C8CBD26EC999 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 34697CEC16A1759F06EB6061 /* Pods_Runner.framework in Frameworks */, + 94FA0F4787E5FB9819D65440 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 7795C5975CBFEACF6D5C9868 /* Pods */, + C76E6EDE126C2B9D79F13C9D /* Pods */, ); sourceTree = ""; }; @@ -185,15 +185,15 @@ path = Runner; sourceTree = ""; }; - 7795C5975CBFEACF6D5C9868 /* Pods */ = { + C76E6EDE126C2B9D79F13C9D /* Pods */ = { isa = PBXGroup; children = ( - 8F421DCE5FEBEBAC01B6B6AF /* Pods-Runner.debug.xcconfig */, - D84D97F02455DC3C974F9D24 /* Pods-Runner.release.xcconfig */, - 42096AC9028D97CC9490E504 /* Pods-Runner.profile.xcconfig */, - E1786C732E6E280909A0D251 /* Pods-RunnerTests.debug.xcconfig */, - 5BADAC203C80713E56957AA3 /* Pods-RunnerTests.release.xcconfig */, - 678B62E02B78627621BF0AB5 /* Pods-RunnerTests.profile.xcconfig */, + EC717A0419A7371AFEA94911 /* Pods-Runner.debug.xcconfig */, + DC48E3A48ECE8F4D9F3CB232 /* Pods-Runner.release.xcconfig */, + 134A8317AE0D56A9FA5CA10D /* Pods-Runner.profile.xcconfig */, + F199D976A342316FC3F8FDEC /* Pods-RunnerTests.debug.xcconfig */, + 3A159F64CEBAB3B0863CBD59 /* Pods-RunnerTests.release.xcconfig */, + ABED7C32DADA4475CB8D9F57 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; @@ -202,8 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 579AA55793A0F14ADE0D341B /* Pods_Runner.framework */, - A182194720070DC79CF1B8D9 /* Pods_RunnerTests.framework */, + A4A735CD08E7611CB7B7C8E4 /* Pods_Runner.framework */, + 1ED0734AB4899D7F662F1BAD /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 23E78861A1030B20FE20E087 /* [CP] Check Pods Manifest.lock */, + 285D0FA9836D163AAF91E7EE /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - F072ED29184E48A9C5AB0AD4 /* [CP] Check Pods Manifest.lock */, + B9B9C422F2F1C7E3CB880C88 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - DD87BBF009895E636E84AD11 /* [CP] Embed Pods Frameworks */, + 5AAB6782DCB603FE9E7FC4F2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,7 +323,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 23E78861A1030B20FE20E087 /* [CP] Check Pods Manifest.lock */ = { + 285D0FA9836D163AAF91E7EE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -383,7 +383,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - DD87BBF009895E636E84AD11 /* [CP] Embed Pods Frameworks */ = { + 5AAB6782DCB603FE9E7FC4F2 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F072ED29184E48A9C5AB0AD4 /* [CP] Check Pods Manifest.lock */ = { + B9B9C422F2F1C7E3CB880C88 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1786C732E6E280909A0D251 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F199D976A342316FC3F8FDEC /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5BADAC203C80713E56957AA3 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 3A159F64CEBAB3B0863CBD59 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 678B62E02B78627621BF0AB5 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = ABED7C32DADA4475CB8D9F57 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/vanilla/pubspec.yaml b/vanilla/pubspec.yaml index d9661b7f..e3e96d28 100644 --- a/vanilla/pubspec.yaml +++ b/vanilla/pubspec.yaml @@ -1,5 +1,8 @@ name: vanilla -description: A new Flutter project. +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -8,15 +11,22 @@ description: A new Flutter project. # build by specifying --build-name and --build-number, respectively. # In Android, build-name is used as versionName while build-number used as versionCode. # Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. version: 1.0.0+1 -publish_to: none environment: - sdk: ">=3.0.0 <4.0.0" + sdk: ^3.8.1 +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter @@ -27,6 +37,7 @@ dependencies: todos_repository_local_storage: path: ../todos_repository_local_storage shared_preferences: + dev_dependencies: flutter_lints: flutter_test: @@ -41,7 +52,7 @@ dev_dependencies: # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec -# The following section is specific to Flutter. +# The following section is specific to Flutter packages. flutter: # The following line ensures that the Material Icons font is @@ -51,14 +62,14 @@ flutter: # To add assets to your application, add an assets section, like this: # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. + # https://flutter.dev/to/resolution-aware-images # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages + # https://flutter.dev/to/asset-from-package # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a @@ -78,4 +89,4 @@ flutter: # weight: 700 # # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages + # see https://flutter.dev/to/font-from-package diff --git a/vanilla/test/app_state_test.dart b/vanilla/test/app_state_test.dart index 9a5a9fb1..3ea46731 100644 --- a/vanilla/test/app_state_test.dart +++ b/vanilla/test/app_state_test.dart @@ -4,44 +4,32 @@ import 'package:vanilla/models.dart'; void main() { group('AppState', () { test('should check if there are completed todos', () { - final state = AppState(todos: [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]); + final state = AppState( + todos: [Todo('a'), Todo('b'), Todo('c', complete: true)], + ); expect(state.hasCompletedTodos, true); }); test('should calculate the number of active todos', () { - final state = AppState(todos: [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]); + final state = AppState( + todos: [Todo('a'), Todo('b'), Todo('c', complete: true)], + ); expect(state.numActive, 2); }); test('should calculate the number of completed todos', () { - final state = AppState(todos: [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]); + final state = AppState( + todos: [Todo('a'), Todo('b'), Todo('c', complete: true)], + ); expect(state.numCompleted, 1); }); test('should return all todos if the VisibilityFilter is all', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; - final state = AppState( - todos: todos, - ); + final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; + final state = AppState(todos: todos); expect(state.filteredTodos(VisibilityFilter.all), todos); }); @@ -50,71 +38,43 @@ void main() { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState( - todos: todos, - ); + final todos = [todo1, todo2, todo3]; + final state = AppState(todos: todos); - expect(state.filteredTodos(VisibilityFilter.active), [ - todo1, - todo2, - ]); + expect(state.filteredTodos(VisibilityFilter.active), [todo1, todo2]); }); - test('should return completed todos if the VisibilityFilter is completed', - () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState( - todos: todos, - ); + test( + 'should return completed todos if the VisibilityFilter is completed', + () { + final todo1 = Todo('a'); + final todo2 = Todo('b'); + final todo3 = Todo('c', complete: true); + final todos = [todo1, todo2, todo3]; + final state = AppState(todos: todos); - expect(state.filteredTodos(VisibilityFilter.completed), [todo3]); - }); + expect(state.filteredTodos(VisibilityFilter.completed), [todo3]); + }, + ); test('should clear the completed todos', () { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState( - todos: todos, - ); + final todos = [todo1, todo2, todo3]; + final state = AppState(todos: todos); state.clearCompleted(); - expect(state.todos, [ - todo1, - todo2, - ]); + expect(state.todos, [todo1, todo2]); }); test('toggle all as complete or incomplete', () { final todo1 = Todo('a'); final todo2 = Todo('b'); final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final state = AppState( - todos: todos, - ); + final todos = [todo1, todo2, todo3]; + final state = AppState(todos: todos); // Toggle all complete state.toggleAll(); diff --git a/vanilla/web/index.html b/vanilla/web/index.html index 6215e093..2bd5d10d 100644 --- a/vanilla/web/index.html +++ b/vanilla/web/index.html @@ -1,10 +1,38 @@ + + + + + + + + + + + + + + + vanilla + - + diff --git a/vanilla/windows/.gitignore b/vanilla/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/vanilla/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/vanilla/windows/CMakeLists.txt b/vanilla/windows/CMakeLists.txt new file mode 100644 index 00000000..5b958da5 --- /dev/null +++ b/vanilla/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(vanilla LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "vanilla") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/vanilla/windows/flutter/CMakeLists.txt b/vanilla/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/vanilla/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/vanilla/windows/flutter/generated_plugin_registrant.cc b/vanilla/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/vanilla/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/vanilla/windows/flutter/generated_plugin_registrant.h b/vanilla/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/vanilla/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/vanilla/windows/flutter/generated_plugins.cmake b/vanilla/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/vanilla/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/vanilla/windows/runner/CMakeLists.txt b/vanilla/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/vanilla/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/vanilla/windows/runner/Runner.rc b/vanilla/windows/runner/Runner.rc new file mode 100644 index 00000000..f726acb7 --- /dev/null +++ b/vanilla/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "vanilla" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "vanilla" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "vanilla.exe" "\0" + VALUE "ProductName", "vanilla" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/vanilla/windows/runner/flutter_window.cpp b/vanilla/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/vanilla/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/vanilla/windows/runner/flutter_window.h b/vanilla/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/vanilla/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/vanilla/windows/runner/main.cpp b/vanilla/windows/runner/main.cpp new file mode 100644 index 00000000..c06a5fe3 --- /dev/null +++ b/vanilla/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"vanilla", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/vanilla/windows/runner/resource.h b/vanilla/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/vanilla/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/vanilla/windows/runner/resources/app_icon.ico b/vanilla/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/vanilla/windows/runner/runner.exe.manifest b/vanilla/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/vanilla/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/vanilla/windows/runner/utils.cpp b/vanilla/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/vanilla/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/vanilla/windows/runner/utils.h b/vanilla/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/vanilla/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/vanilla/windows/runner/win32_window.cpp b/vanilla/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/vanilla/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/vanilla/windows/runner/win32_window.h b/vanilla/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/vanilla/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From e8f5a847ff0c755d5c4ce3ff802e58ef149a0679 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 18:57:29 +0100 Subject: [PATCH 16/89] Rename test file --- vanilla/integration_test/{todo_app_test.dart => app_test.dart} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename vanilla/integration_test/{todo_app_test.dart => app_test.dart} (100%) diff --git a/vanilla/integration_test/todo_app_test.dart b/vanilla/integration_test/app_test.dart similarity index 100% rename from vanilla/integration_test/todo_app_test.dart rename to vanilla/integration_test/app_test.dart From 97f396b4970905b0a050771cb4b5b8dab4a03bce Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 6 Jul 2025 23:06:13 +0100 Subject: [PATCH 17/89] Make inherited_widget example work --- app_spec.md | 5 +- bloc_flutter/lib/screens/add_edit_screen.dart | 4 +- bloc_flutter/lib/screens/detail_screen.dart | 4 +- bloc_flutter/lib/widgets/filter_button.dart | 4 +- bloc_flutter/lib/widgets/stats_counter.dart | 8 +- bloc_flutter/lib/widgets/todo_item.dart | 4 +- bloc_library/lib/screens/add_edit_screen.dart | 4 +- bloc_library/lib/screens/details_screen.dart | 10 +- bloc_library/lib/widgets/filter_button.dart | 8 +- bloc_library/lib/widgets/stats.dart | 16 +- bloc_library/lib/widgets/todo_item.dart | 6 +- .../lib/presentation/add_edit_screen.dart | 2 +- .../lib/presentation/details_screen.dart | 6 +- .../lib/presentation/filter_button.dart | 4 +- .../lib/presentation/stats_counter.dart | 8 +- built_redux/lib/presentation/todo_item.dart | 4 +- .../lib/add_todo_screen.dart | 18 +- .../lib/details_screen.dart | 24 +- .../lib/edit_todo_screen.dart | 18 +- .../lib/home/filter_button.dart | 6 +- .../lib/home/stats_view.dart | 12 +- .../lib/home/todo_list_view.dart | 12 +- .../lib/presentation/add_edit_screen.dart | 2 +- .../lib/presentation/details_screen.dart | 6 +- .../lib/presentation/filter_button.dart | 4 +- .../lib/presentation/stats_counter.dart | 8 +- .../lib/presentation/todo_item.dart | 4 +- .../lib/add_todo_screen.dart | 18 +- .../lib/details_screen.dart | 28 +- .../lib/edit_todo_screen.dart | 10 +- .../lib/home/filter_button.dart | 6 +- .../lib/home/stats_view.dart | 12 +- .../lib/home/todo_list_view.dart | 12 +- .../lib/screens/add_edit_screen.dart | 17 +- .../lib/screens/detail_screen.dart | 18 +- .../lib/widgets/filter_button.dart | 10 +- .../lib/widgets/stats_counter.dart | 15 +- frideos_library/lib/widgets/todo_item.dart | 8 +- inherited_widget/.gitignore | 54 +- inherited_widget/.metadata | 39 +- inherited_widget/analysis_options.yaml | 34 + inherited_widget/android/.gitignore | 7 + inherited_widget/android/app/build.gradle | 67 -- inherited_widget/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 33 +- .../example/inherited_widget/MainActivity.kt | 12 - .../inherited_widget_sample/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- inherited_widget/android/build.gradle | 31 - inherited_widget/android/build.gradle.kts | 21 + inherited_widget/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- inherited_widget/android/settings.gradle | 15 - inherited_widget/android/settings.gradle.kts | 25 + .../integration_test/app_test.dart | 21 + inherited_widget/ios/.gitignore | 2 + .../ios/Flutter/AppFrameworkInfo.plist | 4 +- inherited_widget/ios/Flutter/Debug.xcconfig | 2 +- inherited_widget/ios/Flutter/Release.xcconfig | 2 +- inherited_widget/ios/Podfile | 83 +- .../ios/Runner.xcodeproj/project.pbxproj | 269 +++--- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../contents.xcworkspacedata | 3 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + inherited_widget/ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes inherited_widget/ios/Runner/Info.plist | 10 +- .../ios/Runner/Runner-Bridging-Header.h | 2 +- .../ios/RunnerTests/RunnerTests.swift | 12 + inherited_widget/lib/app.dart | 5 +- inherited_widget/lib/localization.dart | 2 +- inherited_widget/lib/main.dart | 5 +- inherited_widget/lib/main_web.dart | 23 - inherited_widget/lib/models.dart | 30 +- .../lib/screens/add_edit_screen.dart | 40 +- .../lib/screens/detail_screen.dart | 26 +- inherited_widget/lib/screens/home_screen.dart | 14 +- inherited_widget/lib/state_container.dart | 36 +- .../lib/widgets/extra_actions_button.dart | 10 +- .../lib/widgets/filter_button.dart | 35 +- .../lib/widgets/stats_counter.dart | 13 +- inherited_widget/lib/widgets/todo_item.dart | 20 +- inherited_widget/lib/widgets/todo_list.dart | 29 +- inherited_widget/linux/.gitignore | 1 + inherited_widget/linux/CMakeLists.txt | 128 +++ inherited_widget/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + inherited_widget/linux/runner/CMakeLists.txt | 26 + inherited_widget/linux/runner/main.cc | 6 + .../linux/runner/my_application.cc | 130 +++ .../linux/runner/my_application.h | 18 + inherited_widget/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + inherited_widget/macos/Podfile | 42 + inherited_widget/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + inherited_widget/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + inherited_widget/pubspec.yaml | 26 +- .../test_driver/integration_test.dart | 3 + inherited_widget/test_driver/todo_app.dart | 9 - .../test_driver/todo_app_test.dart | 5 - inherited_widget/web/favicon.png | Bin 0 -> 917 bytes inherited_widget/web/icons/Icon-192.png | Bin 0 -> 5292 bytes inherited_widget/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes inherited_widget/web/index.html | 32 +- inherited_widget/web/manifest.json | 35 + inherited_widget/windows/.gitignore | 17 + inherited_widget/windows/CMakeLists.txt | 108 +++ .../windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../windows/runner/CMakeLists.txt | 40 + inherited_widget/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../windows/runner/flutter_window.h | 33 + inherited_widget/windows/runner/main.cpp | 43 + inherited_widget/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + inherited_widget/windows/runner/utils.cpp | 65 ++ inherited_widget/windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 288 +++++++ .../windows/runner/win32_window.h | 102 +++ mobx/lib/add_todo_screen.dart | 20 +- mobx/lib/details_screen.dart | 15 +- mobx/lib/edit_todo_screen.dart | 10 +- mobx/lib/home/filter_button.dart | 4 +- mobx/lib/home/stats_view.dart | 10 +- mobx/lib/home/todo_list_view.dart | 4 +- mvi_flutter/lib/screens/add_edit_screen.dart | 6 +- mvi_flutter/lib/screens/detail_screen.dart | 6 +- mvi_flutter/lib/widgets/filter_button.dart | 6 +- mvi_flutter/lib/widgets/stats_counter.dart | 10 +- mvi_flutter/lib/widgets/todo_item.dart | 6 +- redux/lib/presentation/add_edit_screen.dart | 4 +- redux/lib/presentation/details_screen.dart | 8 +- redux/lib/presentation/filter_button.dart | 6 +- redux/lib/presentation/stats_counter.dart | 10 +- redux/lib/presentation/todo_item.dart | 6 +- scoped_model/lib/screens/add_edit_screen.dart | 4 +- scoped_model/lib/screens/detail_screen.dart | 6 +- scoped_model/lib/widgets/filter_button.dart | 6 +- scoped_model/lib/widgets/stats_counter.dart | 10 +- scoped_model/lib/widgets/todo_item.dart | 6 +- .../lib/screens/add_edit_screen.dart | 6 +- .../lib/screens/detail_screen.dart | 6 +- .../lib/widgets/filter_button.dart | 6 +- .../lib/widgets/stats_counter.dart | 10 +- .../lib/widgets/todo_item.dart | 6 +- .../add_edit_screen.dart/add_edit_screen.dart | 4 +- .../ui/pages/detail_screen/detail_screen.dart | 6 +- .../ui/pages/home_screen/filter_button.dart | 4 +- .../ui/pages/home_screen/stats_counter.dart | 8 +- .../lib/ui/pages/home_screen/todo_item.dart | 6 +- todos_app_core/.flutter-plugins-dependencies | 2 +- todos_app_core/lib/src/theme.dart | 4 + 217 files changed, 4145 insertions(+), 874 deletions(-) create mode 100644 inherited_widget/analysis_options.yaml delete mode 100644 inherited_widget/android/app/build.gradle create mode 100644 inherited_widget/android/app/build.gradle.kts delete mode 100644 inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget/MainActivity.kt create mode 100644 inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget_sample/MainActivity.kt create mode 100644 inherited_widget/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 inherited_widget/android/app/src/main/res/values-night/styles.xml delete mode 100644 inherited_widget/android/build.gradle create mode 100644 inherited_widget/android/build.gradle.kts delete mode 100644 inherited_widget/android/settings.gradle create mode 100644 inherited_widget/android/settings.gradle.kts create mode 100644 inherited_widget/integration_test/app_test.dart create mode 100644 inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 inherited_widget/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 inherited_widget/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png create mode 100644 inherited_widget/ios/RunnerTests/RunnerTests.swift delete mode 100644 inherited_widget/lib/main_web.dart create mode 100644 inherited_widget/linux/.gitignore create mode 100644 inherited_widget/linux/CMakeLists.txt create mode 100644 inherited_widget/linux/flutter/CMakeLists.txt create mode 100644 inherited_widget/linux/flutter/generated_plugin_registrant.cc create mode 100644 inherited_widget/linux/flutter/generated_plugin_registrant.h create mode 100644 inherited_widget/linux/flutter/generated_plugins.cmake create mode 100644 inherited_widget/linux/runner/CMakeLists.txt create mode 100644 inherited_widget/linux/runner/main.cc create mode 100644 inherited_widget/linux/runner/my_application.cc create mode 100644 inherited_widget/linux/runner/my_application.h create mode 100644 inherited_widget/macos/.gitignore create mode 100644 inherited_widget/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 inherited_widget/macos/Flutter/Flutter-Release.xcconfig create mode 100644 inherited_widget/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 inherited_widget/macos/Podfile create mode 100644 inherited_widget/macos/Podfile.lock create mode 100644 inherited_widget/macos/Runner.xcodeproj/project.pbxproj create mode 100644 inherited_widget/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 inherited_widget/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 inherited_widget/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 inherited_widget/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 inherited_widget/macos/Runner/AppDelegate.swift create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 inherited_widget/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 inherited_widget/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 inherited_widget/macos/Runner/Configs/Debug.xcconfig create mode 100644 inherited_widget/macos/Runner/Configs/Release.xcconfig create mode 100644 inherited_widget/macos/Runner/Configs/Warnings.xcconfig create mode 100644 inherited_widget/macos/Runner/DebugProfile.entitlements create mode 100644 inherited_widget/macos/Runner/Info.plist create mode 100644 inherited_widget/macos/Runner/MainFlutterWindow.swift create mode 100644 inherited_widget/macos/Runner/Release.entitlements create mode 100644 inherited_widget/macos/RunnerTests/RunnerTests.swift create mode 100644 inherited_widget/test_driver/integration_test.dart delete mode 100644 inherited_widget/test_driver/todo_app.dart delete mode 100644 inherited_widget/test_driver/todo_app_test.dart create mode 100644 inherited_widget/web/favicon.png create mode 100644 inherited_widget/web/icons/Icon-192.png create mode 100644 inherited_widget/web/icons/Icon-512.png create mode 100644 inherited_widget/web/icons/Icon-maskable-192.png create mode 100644 inherited_widget/web/icons/Icon-maskable-512.png create mode 100644 inherited_widget/web/manifest.json create mode 100644 inherited_widget/windows/.gitignore create mode 100644 inherited_widget/windows/CMakeLists.txt create mode 100644 inherited_widget/windows/flutter/CMakeLists.txt create mode 100644 inherited_widget/windows/flutter/generated_plugin_registrant.cc create mode 100644 inherited_widget/windows/flutter/generated_plugin_registrant.h create mode 100644 inherited_widget/windows/flutter/generated_plugins.cmake create mode 100644 inherited_widget/windows/runner/CMakeLists.txt create mode 100644 inherited_widget/windows/runner/Runner.rc create mode 100644 inherited_widget/windows/runner/flutter_window.cpp create mode 100644 inherited_widget/windows/runner/flutter_window.h create mode 100644 inherited_widget/windows/runner/main.cpp create mode 100644 inherited_widget/windows/runner/resource.h create mode 100644 inherited_widget/windows/runner/resources/app_icon.ico create mode 100644 inherited_widget/windows/runner/runner.exe.manifest create mode 100644 inherited_widget/windows/runner/utils.cpp create mode 100644 inherited_widget/windows/runner/utils.h create mode 100644 inherited_widget/windows/runner/win32_window.cpp create mode 100644 inherited_widget/windows/runner/win32_window.h diff --git a/app_spec.md b/app_spec.md index 751da2c2..3351d1cc 100644 --- a/app_spec.md +++ b/app_spec.md @@ -1,6 +1,6 @@ # Application Specification -We have created this short spec to help you create awesome and consistent todo apps. Make sure to not only read it but to understand it as well. +We have created this short spec to help you create consistent todo apps. Consistency is key to form an "apples to apples" comparison between different approaches. ## Reference Application @@ -17,8 +17,9 @@ All examples must include a README describing the general implementation, any fr - Format your code with `dartfmt` - Use the `.analysis_options.yaml` from the vanilla implementation and ensure there are no analysis errors - Use the Theme and Widgets provided by the base package for the visual look, unless it makes sense to demonstrate an alternative practice. -- Your app should work on both Android and iOS +- Your app should work on all platforms - Your app should contain tests +- Your app must pass the integration tests ## User Interface diff --git a/bloc_flutter/lib/screens/add_edit_screen.dart b/bloc_flutter/lib/screens/add_edit_screen.dart index 10d4d766..5d0cd379 100644 --- a/bloc_flutter/lib/screens/add_edit_screen.dart +++ b/bloc_flutter/lib/screens/add_edit_screen.dart @@ -46,7 +46,7 @@ class _AddEditScreenState extends State { initialValue: widget.todo != null ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -59,7 +59,7 @@ class _AddEditScreenState extends State { initialValue: widget.todo != null ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), diff --git a/bloc_flutter/lib/screens/detail_screen.dart b/bloc_flutter/lib/screens/detail_screen.dart index 52764923..c9845840 100644 --- a/bloc_flutter/lib/screens/detail_screen.dart +++ b/bloc_flutter/lib/screens/detail_screen.dart @@ -85,13 +85,13 @@ class DetailScreenState extends State { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), diff --git a/bloc_flutter/lib/widgets/filter_button.dart b/bloc_flutter/lib/widgets/filter_button.dart index 38254072..1e10f126 100644 --- a/bloc_flutter/lib/widgets/filter_button.dart +++ b/bloc_flutter/lib/widgets/filter_button.dart @@ -13,8 +13,8 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final defaultStyle = theme.textTheme.body1; - final activeStyle = theme.textTheme.body1.copyWith( + final defaultStyle = theme.textTheme.bodyMedium; + final activeStyle = theme.textTheme.bodyMedium.copyWith( color: theme.accentColor, ); final button = _Button( diff --git a/bloc_flutter/lib/widgets/stats_counter.dart b/bloc_flutter/lib/widgets/stats_counter.dart index 4fc68554..5b62f4e5 100644 --- a/bloc_flutter/lib/widgets/stats_counter.dart +++ b/bloc_flutter/lib/widgets/stats_counter.dart @@ -35,7 +35,7 @@ class StatsCounterState extends State { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -45,7 +45,7 @@ class StatsCounterState extends State { builder: (context, snapshot) => Text( '${snapshot.data ?? 0}', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ), @@ -53,7 +53,7 @@ class StatsCounterState extends State { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -64,7 +64,7 @@ class StatsCounterState extends State { return Text( '${snapshot.data ?? 0}', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ); }, ), diff --git a/bloc_flutter/lib/widgets/todo_item.dart b/bloc_flutter/lib/widgets/todo_item.dart index 23972ffa..1e31f8c1 100644 --- a/bloc_flutter/lib/widgets/todo_item.dart +++ b/bloc_flutter/lib/widgets/todo_item.dart @@ -31,14 +31,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/bloc_library/lib/screens/add_edit_screen.dart b/bloc_library/lib/screens/add_edit_screen.dart index c33a68b8..77477e48 100644 --- a/bloc_library/lib/screens/add_edit_screen.dart +++ b/bloc_library/lib/screens/add_edit_screen.dart @@ -1,7 +1,7 @@ +import 'package:bloc_library/models/models.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/models/models.dart'; typedef OnSaveCallback = void Function(String task, String note); @@ -63,7 +63,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, ), diff --git a/bloc_library/lib/screens/details_screen.dart b/bloc_library/lib/screens/details_screen.dart index eb62b77c..734f3ebe 100644 --- a/bloc_library/lib/screens/details_screen.dart +++ b/bloc_library/lib/screens/details_screen.dart @@ -1,10 +1,10 @@ +import 'package:bloc_library/bloc_library_keys.dart'; +import 'package:bloc_library/blocs/todos/todos.dart'; +import 'package:bloc_library/screens/screens.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/blocs/todos/todos.dart'; -import 'package:bloc_library/screens/screens.dart'; -import 'package:bloc_library/bloc_library_keys.dart'; class DetailsScreen extends StatelessWidget { final String id; @@ -85,7 +85,9 @@ class DetailsScreen extends StatelessWidget { Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of( + context, + ).textTheme.titleMedium, ), ], ), diff --git a/bloc_library/lib/widgets/filter_button.dart b/bloc_library/lib/widgets/filter_button.dart index be4289ed..4d1ff106 100644 --- a/bloc_library/lib/widgets/filter_button.dart +++ b/bloc_library/lib/widgets/filter_button.dart @@ -1,8 +1,8 @@ +import 'package:bloc_library/blocs/filtered_todos/filtered_todos.dart'; +import 'package:bloc_library/models/models.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/blocs/filtered_todos/filtered_todos.dart'; -import 'package:bloc_library/models/models.dart'; class FilterButton extends StatelessWidget { final bool visible; @@ -11,10 +11,10 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.body1; + final defaultStyle = Theme.of(context).textTheme.bodyMedium; final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); final filteredTodosBloc = BlocProvider.of(context); return BlocBuilder( bloc: filteredTodosBloc, diff --git a/bloc_library/lib/widgets/stats.dart b/bloc_library/lib/widgets/stats.dart index 1ccf3d14..bb6c8ace 100644 --- a/bloc_library/lib/widgets/stats.dart +++ b/bloc_library/lib/widgets/stats.dart @@ -1,11 +1,11 @@ -import 'package:flutter/material.dart'; +import 'package:bloc_library/bloc_library_keys.dart'; +import 'package:bloc_library/blocs/stats/stats.dart'; +import 'package:bloc_library/widgets/widgets.dart'; import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/blocs/stats/stats.dart'; -import 'package:bloc_library/widgets/widgets.dart'; -import 'package:bloc_library/bloc_library_keys.dart'; class Stats extends StatelessWidget { Stats({Key key}) : super(key: key); @@ -27,7 +27,7 @@ class Stats extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -35,14 +35,14 @@ class Stats extends StatelessWidget { child: Text( '${state.numCompleted}', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -50,7 +50,7 @@ class Stats extends StatelessWidget { child: Text( '${state.numActive}', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/bloc_library/lib/widgets/todo_item.dart b/bloc_library/lib/widgets/todo_item.dart index 2c0ed037..82c1b203 100644 --- a/bloc_library/lib/widgets/todo_item.dart +++ b/bloc_library/lib/widgets/todo_item.dart @@ -1,8 +1,8 @@ +import 'package:bloc_library/models/models.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/models/models.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; @@ -37,7 +37,7 @@ class TodoItem extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), ), @@ -47,7 +47,7 @@ class TodoItem extends StatelessWidget { key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ) : null, ), diff --git a/built_redux/lib/presentation/add_edit_screen.dart b/built_redux/lib/presentation/add_edit_screen.dart index 2a1f29f5..fbd9f558 100644 --- a/built_redux/lib/presentation/add_edit_screen.dart +++ b/built_redux/lib/presentation/add_edit_screen.dart @@ -62,7 +62,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, ), diff --git a/built_redux/lib/presentation/details_screen.dart b/built_redux/lib/presentation/details_screen.dart index d0529352..4f6bf41d 100644 --- a/built_redux/lib/presentation/details_screen.dart +++ b/built_redux/lib/presentation/details_screen.dart @@ -59,13 +59,13 @@ class DetailsScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), @@ -80,7 +80,7 @@ class DetailsScreen extends StatelessWidget { tooltip: localizations.editTodo, child: Icon(Icons.edit), onPressed: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) { return EditTodo(todo: todo); diff --git a/built_redux/lib/presentation/filter_button.dart b/built_redux/lib/presentation/filter_button.dart index 6474f4ca..e9673ab5 100644 --- a/built_redux/lib/presentation/filter_button.dart +++ b/built_redux/lib/presentation/filter_button.dart @@ -12,10 +12,10 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.body1; + final defaultStyle = Theme.of(context).textTheme.bodyMedium; final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); return AnimatedOpacity( opacity: visible ? 1.0 : 0.0, diff --git a/built_redux/lib/presentation/stats_counter.dart b/built_redux/lib/presentation/stats_counter.dart index 0371f850..1992b5c3 100644 --- a/built_redux/lib/presentation/stats_counter.dart +++ b/built_redux/lib/presentation/stats_counter.dart @@ -29,7 +29,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -37,14 +37,14 @@ class StatsCounter extends StatelessWidget { child: Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -52,7 +52,7 @@ class StatsCounter extends StatelessWidget { child: Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/built_redux/lib/presentation/todo_item.dart b/built_redux/lib/presentation/todo_item.dart index 8543f38c..94bbc852 100644 --- a/built_redux/lib/presentation/todo_item.dart +++ b/built_redux/lib/presentation/todo_item.dart @@ -31,14 +31,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/change_notifier_provider/lib/add_todo_screen.dart b/change_notifier_provider/lib/add_todo_screen.dart index d12e1b0f..18b4c8ff 100644 --- a/change_notifier_provider/lib/add_todo_screen.dart +++ b/change_notifier_provider/lib/add_todo_screen.dart @@ -30,9 +30,7 @@ class _AddTodoScreenState extends State { final textTheme = Theme.of(context).textTheme; return Scaffold( - appBar: AppBar( - title: Text(localizations.addTodo), - ), + appBar: AppBar(title: Text(localizations.addTodo)), body: Form( key: _formKey, autovalidate: false, @@ -57,10 +55,10 @@ class _AddTodoScreenState extends State { TextFormField( key: ArchSampleKeys.noteField, controller: _notesEditingController, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), maxLines: 10, - ) + ), ], ), ), @@ -70,10 +68,12 @@ class _AddTodoScreenState extends State { tooltip: localizations.addTodo, onPressed: () { if (_formKey.currentState.validate()) { - Provider.of(context, listen: false).addTodo(Todo( - _titleEditingController.text, - note: _notesEditingController.text, - )); + Provider.of(context, listen: false).addTodo( + Todo( + _titleEditingController.text, + note: _notesEditingController.text, + ), + ); Navigator.pop(context); } }, diff --git a/change_notifier_provider/lib/details_screen.dart b/change_notifier_provider/lib/details_screen.dart index d6e96a36..2d330084 100644 --- a/change_notifier_provider/lib/details_screen.dart +++ b/change_notifier_provider/lib/details_screen.dart @@ -1,6 +1,6 @@ +import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'edit_todo_screen.dart'; @@ -12,7 +12,7 @@ class DetailsScreen extends StatelessWidget { final VoidCallback onRemove; const DetailsScreen({@required this.id, @required this.onRemove}) - : super(key: ArchSampleKeys.todoDetailsScreen); + : super(key: ArchSampleKeys.todoDetailsScreen); @override Widget build(BuildContext context) { @@ -25,7 +25,7 @@ class DetailsScreen extends StatelessWidget { tooltip: ArchSampleLocalizations.of(context).deleteTodo, icon: const Icon(Icons.delete), onPressed: onRemove, - ) + ), ], ), body: Selector( @@ -45,8 +45,10 @@ class DetailsScreen extends StatelessWidget { key: ArchSampleKeys.detailsTodoItemCheckbox, value: todo.complete, onChanged: (complete) { - Provider.of(context, listen: false) - .updateTodo(todo.copy(complete: !todo.complete)); + Provider.of( + context, + listen: false, + ).updateTodo(todo.copy(complete: !todo.complete)); }, ), ), @@ -62,14 +64,14 @@ class DetailsScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, - ) + style: Theme.of(context).textTheme.titleMedium, + ), ], ), ), @@ -89,8 +91,10 @@ class DetailsScreen extends StatelessWidget { builder: (context) => EditTodoScreen( id: id, onEdit: (task, note) { - final model = - Provider.of(context, listen: false); + final model = Provider.of( + context, + listen: false, + ); final todo = model.todoById(id); model.updateTodo(todo.copy(task: task, note: note)); diff --git a/change_notifier_provider/lib/edit_todo_screen.dart b/change_notifier_provider/lib/edit_todo_screen.dart index b50ef9dc..81644e51 100644 --- a/change_notifier_provider/lib/edit_todo_screen.dart +++ b/change_notifier_provider/lib/edit_todo_screen.dart @@ -1,16 +1,14 @@ +import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:todos_app_core/todos_app_core.dart'; class EditTodoScreen extends StatefulWidget { final void Function(String task, String note) onEdit; final String id; - const EditTodoScreen({ - @required this.id, - @required this.onEdit, - }) : super(key: ArchSampleKeys.editTodoScreen); + const EditTodoScreen({@required this.id, @required this.onEdit}) + : super(key: ArchSampleKeys.editTodoScreen); @override _EditTodoScreenState createState() => _EditTodoScreenState(); @@ -23,8 +21,10 @@ class _EditTodoScreenState extends State { @override void initState() { - final todo = - Provider.of(context, listen: false).todoById(widget.id); + final todo = Provider.of( + context, + listen: false, + ).todoById(widget.id); _taskController = TextEditingController(text: todo?.task); _noteController = TextEditingController(text: todo?.note); super.initState(); @@ -50,7 +50,7 @@ class _EditTodoScreenState extends State { TextFormField( controller: _taskController, key: ArchSampleKeys.taskField, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -67,7 +67,7 @@ class _EditTodoScreenState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), maxLines: 10, - ) + ), ], ), ), diff --git a/change_notifier_provider/lib/home/filter_button.dart b/change_notifier_provider/lib/home/filter_button.dart index eb8dde19..b36ee549 100644 --- a/change_notifier_provider/lib/home/filter_button.dart +++ b/change_notifier_provider/lib/home/filter_button.dart @@ -1,6 +1,6 @@ +import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { @@ -37,8 +37,8 @@ class FilterButton extends StatelessWidget { ) { final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); - final defaultStyle = Theme.of(context).textTheme.body1; + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final defaultStyle = Theme.of(context).textTheme.bodyMedium; return [ PopupMenuItem( diff --git a/change_notifier_provider/lib/home/stats_view.dart b/change_notifier_provider/lib/home/stats_view.dart index f6566284..e52497c5 100644 --- a/change_notifier_provider/lib/home/stats_view.dart +++ b/change_notifier_provider/lib/home/stats_view.dart @@ -1,7 +1,7 @@ +import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsView extends StatelessWidget { @@ -17,7 +17,7 @@ class StatsView extends StatelessWidget { padding: const EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -27,7 +27,7 @@ class StatsView extends StatelessWidget { builder: (context, numCompleted, _) => Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ), @@ -35,7 +35,7 @@ class StatsView extends StatelessWidget { padding: const EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -45,10 +45,10 @@ class StatsView extends StatelessWidget { builder: (context, numActive, _) => Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), - ) + ), ], ), ); diff --git a/change_notifier_provider/lib/home/todo_list_view.dart b/change_notifier_provider/lib/home/todo_list_view.dart index ef34d820..0655c6b8 100644 --- a/change_notifier_provider/lib/home/todo_list_view.dart +++ b/change_notifier_provider/lib/home/todo_list_view.dart @@ -1,6 +1,6 @@ +import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:change_notifier_provider_sample/todo_list_model.dart'; import 'package:todos_app_core/todos_app_core.dart'; import '../details_screen.dart'; @@ -46,21 +46,23 @@ class TodoListView extends StatelessWidget { key: ArchSampleKeys.todoItemCheckbox(todo.id), value: todo.complete, onChanged: (complete) { - Provider.of(context, listen: false) - .updateTodo(todo.copy(complete: complete)); + Provider.of( + context, + listen: false, + ).updateTodo(todo.copy(complete: complete)); }, ), title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/firestore_redux/lib/presentation/add_edit_screen.dart b/firestore_redux/lib/presentation/add_edit_screen.dart index 5095d035..3c449694 100644 --- a/firestore_redux/lib/presentation/add_edit_screen.dart +++ b/firestore_redux/lib/presentation/add_edit_screen.dart @@ -62,7 +62,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, ), diff --git a/firestore_redux/lib/presentation/details_screen.dart b/firestore_redux/lib/presentation/details_screen.dart index 21dbb6bc..cfb3a2bf 100644 --- a/firestore_redux/lib/presentation/details_screen.dart +++ b/firestore_redux/lib/presentation/details_screen.dart @@ -61,14 +61,14 @@ class DetailsScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), @@ -83,7 +83,7 @@ class DetailsScreen extends StatelessWidget { tooltip: localizations.editTodo, child: Icon(Icons.edit), onPressed: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) { return EditTodo(todo: todo); diff --git a/firestore_redux/lib/presentation/filter_button.dart b/firestore_redux/lib/presentation/filter_button.dart index 75b53b3c..1ac040fe 100644 --- a/firestore_redux/lib/presentation/filter_button.dart +++ b/firestore_redux/lib/presentation/filter_button.dart @@ -12,10 +12,10 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.body1; + final defaultStyle = Theme.of(context).textTheme.bodyMedium; final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); final button = _Button( onSelected: onSelected, activeFilter: activeFilter, diff --git a/firestore_redux/lib/presentation/stats_counter.dart b/firestore_redux/lib/presentation/stats_counter.dart index 3fbb23f2..7c8d93db 100644 --- a/firestore_redux/lib/presentation/stats_counter.dart +++ b/firestore_redux/lib/presentation/stats_counter.dart @@ -31,7 +31,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -39,14 +39,14 @@ class StatsCounter extends StatelessWidget { child: Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -54,7 +54,7 @@ class StatsCounter extends StatelessWidget { child: Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/firestore_redux/lib/presentation/todo_item.dart b/firestore_redux/lib/presentation/todo_item.dart index 9e8b058f..55e3b845 100644 --- a/firestore_redux/lib/presentation/todo_item.dart +++ b/firestore_redux/lib/presentation/todo_item.dart @@ -35,7 +35,7 @@ class TodoItem extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), ), @@ -44,7 +44,7 @@ class TodoItem extends StatelessWidget { key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/freezed_provider_value_notifier/lib/add_todo_screen.dart b/freezed_provider_value_notifier/lib/add_todo_screen.dart index cf887a07..483fcc63 100644 --- a/freezed_provider_value_notifier/lib/add_todo_screen.dart +++ b/freezed_provider_value_notifier/lib/add_todo_screen.dart @@ -30,9 +30,7 @@ class _AddTodoScreenState extends State { final textTheme = Theme.of(context).textTheme; return Scaffold( - appBar: AppBar( - title: Text(localizations.addTodo), - ), + appBar: AppBar(title: Text(localizations.addTodo)), body: Form( key: _formKey, autovalidate: false, @@ -57,10 +55,10 @@ class _AddTodoScreenState extends State { TextFormField( key: ArchSampleKeys.noteField, controller: _notesEditingController, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), maxLines: 10, - ) + ), ], ), ), @@ -70,10 +68,12 @@ class _AddTodoScreenState extends State { tooltip: localizations.addTodo, onPressed: () { if (_formKey.currentState.validate()) { - context.read().addTodo(Todo( - _titleEditingController.text, - note: _notesEditingController.text, - )); + context.read().addTodo( + Todo( + _titleEditingController.text, + note: _notesEditingController.text, + ), + ); Navigator.pop(context); } }, diff --git a/freezed_provider_value_notifier/lib/details_screen.dart b/freezed_provider_value_notifier/lib/details_screen.dart index 7841a375..8ecd77bf 100644 --- a/freezed_provider_value_notifier/lib/details_screen.dart +++ b/freezed_provider_value_notifier/lib/details_screen.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'edit_todo_screen.dart'; @@ -12,7 +12,7 @@ class DetailsScreen extends StatelessWidget { final VoidCallback onRemove; const DetailsScreen({@required this.id, @required this.onRemove}) - : super(key: ArchSampleKeys.todoDetailsScreen); + : super(key: ArchSampleKeys.todoDetailsScreen); @override Widget build(BuildContext context) { @@ -25,7 +25,7 @@ class DetailsScreen extends StatelessWidget { tooltip: ArchSampleLocalizations.of(context).deleteTodo, icon: const Icon(Icons.delete), onPressed: onRemove, - ) + ), ], ), body: Selector( @@ -45,9 +45,9 @@ class DetailsScreen extends StatelessWidget { key: ArchSampleKeys.detailsTodoItemCheckbox, value: todo.complete, onChanged: (complete) { - context - .read() - .updateTodo(todo.copy(complete: !todo.complete)); + context.read().updateTodo( + todo.copy(complete: !todo.complete), + ); }, ), ), @@ -63,14 +63,14 @@ class DetailsScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, - ) + style: Theme.of(context).textTheme.titleMedium, + ), ], ), ), @@ -90,10 +90,12 @@ class DetailsScreen extends StatelessWidget { builder: (context) => EditTodoScreen( id: id, onEdit: (task, note) { - context.read().updateTodo(context - .read() - .todoById(id) - ?.copy(task: task, note: note)); + context.read().updateTodo( + context + .read() + .todoById(id) + ?.copy(task: task, note: note), + ); return Navigator.pop(context); }, diff --git a/freezed_provider_value_notifier/lib/edit_todo_screen.dart b/freezed_provider_value_notifier/lib/edit_todo_screen.dart index ad7b32fa..57f373cf 100644 --- a/freezed_provider_value_notifier/lib/edit_todo_screen.dart +++ b/freezed_provider_value_notifier/lib/edit_todo_screen.dart @@ -7,10 +7,8 @@ class EditTodoScreen extends StatefulWidget { final void Function(String task, String note) onEdit; final String id; - const EditTodoScreen({ - @required this.id, - @required this.onEdit, - }) : super(key: ArchSampleKeys.editTodoScreen); + const EditTodoScreen({@required this.id, @required this.onEdit}) + : super(key: ArchSampleKeys.editTodoScreen); @override _EditTodoScreenState createState() => _EditTodoScreenState(); @@ -49,7 +47,7 @@ class _EditTodoScreenState extends State { TextFormField( controller: _taskController, key: ArchSampleKeys.taskField, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -66,7 +64,7 @@ class _EditTodoScreenState extends State { hintText: ArchSampleLocalizations.of(context).notesHint, ), maxLines: 10, - ) + ), ], ), ), diff --git a/freezed_provider_value_notifier/lib/home/filter_button.dart b/freezed_provider_value_notifier/lib/home/filter_button.dart index 0e221733..952c46f4 100644 --- a/freezed_provider_value_notifier/lib/home/filter_button.dart +++ b/freezed_provider_value_notifier/lib/home/filter_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { @@ -38,8 +38,8 @@ class FilterButton extends StatelessWidget { ) { final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); - final defaultStyle = Theme.of(context).textTheme.body1; + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final defaultStyle = Theme.of(context).textTheme.bodyMedium; return [ PopupMenuItem( key: ArchSampleKeys.allFilter, diff --git a/freezed_provider_value_notifier/lib/home/stats_view.dart b/freezed_provider_value_notifier/lib/home/stats_view.dart index 868b7b10..362ae196 100644 --- a/freezed_provider_value_notifier/lib/home/stats_view.dart +++ b/freezed_provider_value_notifier/lib/home/stats_view.dart @@ -1,7 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsView extends StatelessWidget { @@ -17,7 +17,7 @@ class StatsView extends StatelessWidget { padding: const EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -27,7 +27,7 @@ class StatsView extends StatelessWidget { builder: (context, numCompleted, _) => Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ), @@ -35,7 +35,7 @@ class StatsView extends StatelessWidget { padding: const EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -45,10 +45,10 @@ class StatsView extends StatelessWidget { builder: (context, numActive, _) => Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), - ) + ), ], ), ); diff --git a/freezed_provider_value_notifier/lib/home/todo_list_view.dart b/freezed_provider_value_notifier/lib/home/todo_list_view.dart index 806e926e..d38a03c6 100644 --- a/freezed_provider_value_notifier/lib/home/todo_list_view.dart +++ b/freezed_provider_value_notifier/lib/home/todo_list_view.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; import '../details_screen.dart'; @@ -46,22 +46,22 @@ class TodoListView extends StatelessWidget { key: ArchSampleKeys.todoItemCheckbox(todo.id), value: todo.complete, onChanged: (complete) { - context - .read() - .updateTodo(todo.copy(complete: complete)); + context.read().updateTodo( + todo.copy(complete: complete), + ); }, ), title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/frideos_library/lib/screens/add_edit_screen.dart b/frideos_library/lib/screens/add_edit_screen.dart index 872a18f9..bb4718d3 100644 --- a/frideos_library/lib/screens/add_edit_screen.dart +++ b/frideos_library/lib/screens/add_edit_screen.dart @@ -1,13 +1,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - import 'package:frideos/frideos.dart'; - import 'package:frideos_library/app_state.dart'; import 'package:frideos_library/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { // Set to false by default to show the 'add todo'. @@ -15,10 +12,8 @@ class AddEditScreen extends StatefulWidget { // to 'true', so that the fab will be used to edit an existing todo. final bool isEditing; - AddEditScreen({ - Key key, - this.isEditing = false, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + AddEditScreen({Key key, this.isEditing = false}) + : super(key: key ?? ArchSampleKeys.addTodoScreen); @override _AddEditScreenState createState() => _AddEditScreenState(); @@ -59,7 +54,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? snapshot.data.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -72,12 +67,12 @@ class _AddEditScreenState extends State { initialValue: isEditing ? snapshot.data.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), onSaved: (value) => _note = value, - ) + ), ], ), ), diff --git a/frideos_library/lib/screens/detail_screen.dart b/frideos_library/lib/screens/detail_screen.dart index 3d5c7929..8c96cc07 100644 --- a/frideos_library/lib/screens/detail_screen.dart +++ b/frideos_library/lib/screens/detail_screen.dart @@ -1,13 +1,10 @@ import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - import 'package:frideos/frideos.dart'; - import 'package:frideos_library/app_state.dart'; import 'package:frideos_library/models/models.dart'; import 'package:frideos_library/screens/add_edit_screen.dart'; import 'package:frideos_library/widgets/loading.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatelessWidget { DetailScreen() : super(key: ArchSampleKeys.todoDetailsScreen); @@ -34,7 +31,7 @@ class DetailScreen extends StatelessWidget { bloc.deleteTodo(todo); Navigator.pop(context, todo); }, - ) + ), ], ), body: Padding( @@ -57,21 +54,18 @@ class DetailScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: EdgeInsets.only(top: 8.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, - ) + style: Theme.of(context).textTheme.titleMedium, + ), ], ), ), diff --git a/frideos_library/lib/widgets/filter_button.dart b/frideos_library/lib/widgets/filter_button.dart index ae2f4597..067cebeb 100644 --- a/frideos_library/lib/widgets/filter_button.dart +++ b/frideos_library/lib/widgets/filter_button.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - import 'package:frideos_library/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final PopupMenuItemSelected onSelected; @@ -10,13 +8,13 @@ class FilterButton extends StatelessWidget { final bool isActive; FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + : super(key: key); @override Widget build(BuildContext context) { final theme = Theme.of(context); - final defaultStyle = theme.textTheme.body1; - final activeStyle = theme.textTheme.body1.copyWith( + final defaultStyle = theme.textTheme.bodyMedium; + final activeStyle = theme.textTheme.bodyMedium.copyWith( color: theme.accentColor, ); final button = _Button( diff --git a/frideos_library/lib/widgets/stats_counter.dart b/frideos_library/lib/widgets/stats_counter.dart index 6014fd4b..bda7035a 100644 --- a/frideos_library/lib/widgets/stats_counter.dart +++ b/frideos_library/lib/widgets/stats_counter.dart @@ -1,11 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - import 'package:frideos/frideos.dart'; - import 'package:frideos_library/app_state.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatelessWidget { @override @@ -20,7 +17,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -30,7 +27,7 @@ class StatsCounter extends StatelessWidget { builder: (context, snapshot) => Text( '${snapshot.data ?? 0}', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ), @@ -38,7 +35,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -49,11 +46,11 @@ class StatsCounter extends StatelessWidget { return Text( '${snapshot.data ?? 0}', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ); }, ), - ) + ), ], ), ); diff --git a/frideos_library/lib/widgets/todo_item.dart b/frideos_library/lib/widgets/todo_item.dart index 5181dc25..9b603b5e 100644 --- a/frideos_library/lib/widgets/todo_item.dart +++ b/frideos_library/lib/widgets/todo_item.dart @@ -1,9 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - import 'package:frideos_library/models/todo.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; @@ -33,14 +31,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/inherited_widget/.gitignore b/inherited_widget/.gitignore index 2ddde2a5..79c113f9 100644 --- a/inherited_widget/.gitignore +++ b/inherited_widget/.gitignore @@ -5,9 +5,12 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ +migrate_working_dir/ # IntelliJ related *.iml @@ -22,52 +25,21 @@ # Flutter/Dart/Pub related **/doc/api/ +**/ios/Flutter/.last_build_id .dart_tool/ .flutter-plugins -.packages +.flutter-plugins-dependencies .pub-cache/ .pub/ /build/ -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java +# Symbolication related +app.*.symbols -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* +# Obfuscation related +app.*.map.json -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/inherited_widget/.metadata b/inherited_widget/.metadata index 1b5cec02..fdb4416b 100644 --- a/inherited_widget/.metadata +++ b/inherited_widget/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "fcf2c11572af6f390246c056bc905eca609533a0" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: android + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: ios + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: linux + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: macos + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: web + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: windows + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/inherited_widget/analysis_options.yaml b/inherited_widget/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/inherited_widget/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/inherited_widget/android/.gitignore b/inherited_widget/android/.gitignore index bc2100d8..be3943c9 100644 --- a/inherited_widget/android/.gitignore +++ b/inherited_widget/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/inherited_widget/android/app/build.gradle b/inherited_widget/android/app/build.gradle deleted file mode 100644 index 700ed91f..00000000 --- a/inherited_widget/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.inherited_widget" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/inherited_widget/android/app/build.gradle.kts b/inherited_widget/android/app/build.gradle.kts new file mode 100644 index 00000000..0c6e77e2 --- /dev/null +++ b/inherited_widget/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.inherited_widget_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.inherited_widget_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/inherited_widget/android/app/src/debug/AndroidManifest.xml b/inherited_widget/android/app/src/debug/AndroidManifest.xml index b12cba58..399f6981 100644 --- a/inherited_widget/android/app/src/debug/AndroidManifest.xml +++ b/inherited_widget/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/inherited_widget/android/app/src/main/AndroidManifest.xml b/inherited_widget/android/app/src/main/AndroidManifest.xml index 78a642e2..acd5b0b7 100644 --- a/inherited_widget/android/app/src/main/AndroidManifest.xml +++ b/inherited_widget/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget/MainActivity.kt b/inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget/MainActivity.kt deleted file mode 100644 index cb440fad..00000000 --- a/inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.inherited_widget - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget_sample/MainActivity.kt b/inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget_sample/MainActivity.kt new file mode 100644 index 00000000..100197be --- /dev/null +++ b/inherited_widget/android/app/src/main/kotlin/com/example/inherited_widget_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.inherited_widget_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/inherited_widget/android/app/src/main/res/drawable-v21/launch_background.xml b/inherited_widget/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/inherited_widget/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/inherited_widget/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/inherited_widget/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/inherited_widget/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/inherited_widget/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 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 literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/inherited_widget/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/inherited_widget/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/inherited_widget/android/app/src/main/res/values/styles.xml b/inherited_widget/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/inherited_widget/android/app/src/main/res/values/styles.xml +++ b/inherited_widget/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/inherited_widget/android/app/src/profile/AndroidManifest.xml b/inherited_widget/android/app/src/profile/AndroidManifest.xml index b12cba58..399f6981 100644 --- a/inherited_widget/android/app/src/profile/AndroidManifest.xml +++ b/inherited_widget/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/inherited_widget/android/build.gradle b/inherited_widget/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/inherited_widget/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/inherited_widget/android/build.gradle.kts b/inherited_widget/android/build.gradle.kts new file mode 100644 index 00000000..89176ef4 --- /dev/null +++ b/inherited_widget/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/inherited_widget/android/gradle.properties b/inherited_widget/android/gradle.properties index 38c8d454..f018a618 100644 --- a/inherited_widget/android/gradle.properties +++ b/inherited_widget/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/inherited_widget/android/gradle/wrapper/gradle-wrapper.properties b/inherited_widget/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/inherited_widget/android/gradle/wrapper/gradle-wrapper.properties +++ b/inherited_widget/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/inherited_widget/android/settings.gradle b/inherited_widget/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/inherited_widget/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/inherited_widget/android/settings.gradle.kts b/inherited_widget/android/settings.gradle.kts new file mode 100644 index 00000000..ab39a10a --- /dev/null +++ b/inherited_widget/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.3" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/inherited_widget/integration_test/app_test.dart b/inherited_widget/integration_test/app_test.dart new file mode 100644 index 00000000..c0efe3af --- /dev/null +++ b/inherited_widget/integration_test/app_test.dart @@ -0,0 +1,21 @@ +import 'package:inherited_widget_sample/app.dart'; +import 'package:inherited_widget_sample/state_container.dart'; +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return StateContainer( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'inherited_widget_todos_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + child: const InheritedWidgetApp(), + ); + }, + ); +} diff --git a/inherited_widget/ios/.gitignore b/inherited_widget/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/inherited_widget/ios/.gitignore +++ b/inherited_widget/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/inherited_widget/ios/Flutter/AppFrameworkInfo.plist b/inherited_widget/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..7c569640 100644 --- a/inherited_widget/ios/Flutter/AppFrameworkInfo.plist +++ b/inherited_widget/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 12.0 diff --git a/inherited_widget/ios/Flutter/Debug.xcconfig b/inherited_widget/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/inherited_widget/ios/Flutter/Debug.xcconfig +++ b/inherited_widget/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/inherited_widget/ios/Flutter/Release.xcconfig b/inherited_widget/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/inherited_widget/ios/Flutter/Release.xcconfig +++ b/inherited_widget/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/inherited_widget/ios/Podfile b/inherited_widget/ios/Podfile index b30a428b..e549ee22 100644 --- a/inherited_widget/ios/Podfile +++ b/inherited_widget/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/inherited_widget/ios/Runner.xcodeproj/project.pbxproj b/inherited_widget/ios/Runner.xcodeproj/project.pbxproj index c1b070d9..743a969d 100644 --- a/inherited_widget/ios/Runner.xcodeproj/project.pbxproj +++ b/inherited_widget/ios/Runner.xcodeproj/project.pbxproj @@ -3,23 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3348E430D7129BB18BC78B4B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE925AD22BC8A868F53BE025 /* Pods_Runner.framework */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -27,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -38,23 +42,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1E69637449B29CC0AB13D272 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 4A35D354374ABDAA8E56C08A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 722B0CDB9A6F3DED6856BA0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DE925AD22BC8A868F53BE025 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,32 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - 3348E430D7129BB18BC78B4B /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 66C4DAC000F715814BBD3787 /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 4A35D354374ABDAA8E56C08A /* Pods-Runner.debug.xcconfig */, - 1E69637449B29CC0AB13D272 /* Pods-Runner.release.xcconfig */, - 722B0CDB9A6F3DED6856BA0F /* Pods-Runner.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -101,8 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 66C4DAC000F715814BBD3787 /* Pods */, - F4E297C3C4563E091C160C6A /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -110,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -121,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -130,36 +121,36 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; - F4E297C3C4563E091C160C6A /* Frameworks */ = { - isa = PBXGroup; - children = ( - DE925AD22BC8A868F53BE025 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 8BAEDFE2B03121E235B57BBB /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 632B8B8C0062E80365A4A3D9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -176,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -186,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -199,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -220,57 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 632B8B8C0062E80365A4A3D9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 8BAEDFE2B03121E235B57BBB /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -286,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -297,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -319,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -351,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -359,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -375,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = H54QW28H73; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidget; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -394,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -428,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -442,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -452,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -484,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -492,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -509,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = H54QW28H73; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidget; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -536,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = H54QW28H73; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidget; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -558,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/inherited_widget/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/inherited_widget/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/inherited_widget/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/inherited_widget/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/inherited_widget/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - - - diff --git a/inherited_widget/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/inherited_widget/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/inherited_widget/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/inherited_widget/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/inherited_widget/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/inherited_widget/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/inherited_widget/ios/Runner/AppDelegate.swift b/inherited_widget/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/inherited_widget/ios/Runner/AppDelegate.swift +++ b/inherited_widget/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 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 U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 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 diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi zA@-E)YoD;%XJn4fw1Ukt3Lw2%TC{n z4B)3yCxa9OBB-aMuKMIPwB_@=$a|_6HH>DY)y_`}@@bwiqm?m)W){q>u5y?}71WGR zJqR_44Aj=|@@J>uW9=I%?(=*x{km$DK9|b%?X8M>(hY-J`EB`H*g#FU^H(eK>w6(z{^e z?(~0cd^L(J@|ifil5TN{p2O>~FH3uy#$u`03kSe99 zj+|pO7cNoPG|pgX5sFUklGL%!@Om`#p7^n!Ph8=*x$eiRcej&mjmpbyZ`Kk}}Wchlr16YX!T2M^29kQbU) z+nP45yDelyja0%E>uc(j{+J24#kOa-V`}wLndshlAD2w`+vq!9R?&nm^$GQtjMjw0 zC(pcD1&TGcvAi~wfIv3)$`?l!OO=&)&T#3KAXx<#kc)j&VXKq}7fP|0C)E`efF zXBE6Jr9dNm!)afDKZnj`FoL44CIvM4`}hnLx1R)DH)vpO>zj|7(05@Nx3}K29IV71 zvF&(7|5Q^)lIvhWI!=$cqQ$&S#SbIe_3edj$SrB|#}YCuRea*W-vj5oQgSadI^)=J zc1V)Cri0-<@hs)z1%f?;o}h=WT}pHnC0$3*n=>)a+rbizbNBerG{J_m+a5vdd7{D#s#6i2sS1zfM5UN4ya;-?sbewi`bYvX zCH&=BJTA9g0R0%53EYTZw9_P)hzmtzqe4Pvj6%G5UeS$fSnnYNlxr_dUl%L75~_~e zF}QGBvqrp9UwWgfpuV=uhSzf<{)jKEO0^U)vpJE5o=E(5WVjH7+k*kqWMQr)qRAu(WsMIvw_ndmghn)ypt`DOW*cHVtqof z^JYw8()(m1W~A5_?faGIqd^%+hI7`Qd1+C~pH0yGZg;$>w8eUYQs{igi|>`#D~*KK z%w;|$=BnRO8nH36A%!evcghJ@hOC-do3tt7hAMZIA4+Q58P>72E941U223Pn036iy zGfN$DRr>RqQo@SuQL`lzL_4kN!RVwK^aeYl{O1t1E77rCg;%um=abrQh5D8*m`#7~ z&=#paL-khG%Mi*f5>4}-7-zJOT0IiNjche%_S98`YrVKyx38B4bN zcHdiXM)Q@hh+z*D{w1$FkemzqI$s|_&_S@_iygm)x0BDCIyii>_tM;ymJ&HXLeIPN}1VyBD z_C;Wll`%JzJB!;3uTXrvh2D!v^?9a8w<}Vc?Nlj%% zy~Gwwi!qGv@r%;@dj~_SL_bKyD}v9x8pr-c^Q@as)!tJ)wr?@)O7mC4v%@tw4-9mY z$C8$F0c?w&&iL-P2Pg)ANJX!S1uSt) z6%%3~i&g{rcnmA&N^kEG}{HlA*rDSiI2=4!o|$ zs$Ei>Ct&*TBZV%dQ~0ESupQwys;I;1L-euS_^H3(#kwC!&`gq~vf@a6@ZxrR;aK(& z8?F2JqYd&*b87zL;fH;&A{~}ET49Hbo9!xf9~IG0jt~nmk1HcQ zWzR3|Z)j-Oj;-$^2huM1A?JbYSzzWH3__4YKAe0(vBT`KeyYCziJo}46EG(piWsZT z>^a%_%4U9eh&xfur{a=HicEM|)78>|`NZWpb6vUh-|TGevF@eY8m?7KJD*J%4q_XP zSS@A#*1c>=B2oOvItN6EiQk^c%^#}D9-ADjm~AJHPd(9|2@m~K!<}q*Vm%HkFSkCd z`ZvM+7*Tqv`Ofkp_T=A?`?@B7-~Y@X8vBT8 zFxXu5xMI3DA*ywb4zfIe#XUAvz?9p5IQd(N`u}o@HB$G)zTXvuCw!5#OkHvZ+Rj1l zSRJF{$#O4h)u@NHzcRr1Kn%t63$s^u*&@AW6ZjO$t}~T9cN5>L*}N`(f1Rh6zW=}f zNxiD-RXI{qlWt>r?Ud4*Ott;o7SBuyEo_ z^3?D)82leR&+}hpGhJWpKoi-XA0BGw^u)^K@LTSNThF=#1X?cs9|e{GU<@zq{qVL{ zy$FG>!2x2UPd8v->En@!8ai_8I9*M@71bsFLv^xj$1qQLm+(CDn&hlQTAlK8AkS2G zO$_s<$vmKd_xXyTCSQLY=&{vj$13kp$XYTH`w&j^(!-u-sbnhAh*K%QR{TwC7w8&Q z-H-f6*D>dZH%7>3_OkNI9V8MeH3l%&ynLuFSOD%q0um*BY5Wxrd6#dt^_aqz#;gdA$>5>0TYQ&!J|w-_FjzOTecv z(j-7jE*EaO&7EQuMF!StC-lCjnMu=Yg_t~99~6BqC}DT#O**!M(EuAc@Y z*+vvc^TRytoLEiXsf(h^oRAf1)^*lNiIO5Xm1vFp1w#WF9b3#{0}=`Yt_SewY=t ziL*D-q#uJ^8HaJ37J;nlBcLXHzrANzf9w?+l@!0F0AalXbVth+mq#~)cYmP}uS;

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 zcmX9@c{~&T8=rF+rqdi575bKA___+qUF0Yg6}F*L)X05p<}NGxDrbxoGQL;MjBf_>tYzr>Xq$_6N=o0Du2rHD{xom>(Px;hTf3Q3L1}6$u2=ii z;hGaoSNcB3W%`CLa~nH7=kKhp|IvqP5nqQFzon&}+>6pL#}*8%JSqM&&ojOTKdwEn zly9-E*};tA`HFeL0`pTKN|@`Sz#?vbc! zzov1o2U11u(Fj`uG|2aa_!M;MuD0#J4`r209`+mAz^Ev!dQqh;7einE~+r-2lz;V&kO-a zOROfTuX;6Fp!LnwN6&{ZMJtZ)Ri4yNF`SOP{rgfk`v7zW8L>5+^6%# zm&!YdE6eOD2zw=IR3G)?#-7QlsuD`zx+uAggTTTkbcEsq zbEM*0$yc5$9uarcA8T0u7QIadj+E1gFLaF|V%mW66T)|@BFx_d|s%X9HPc4n#AaixZ)BjhJtC`ZmFrCe!0dT4u&Uovy- za`up<{5p%Oabc%n^!qrNlJ|QEvC=7{fCq2jp4gpy^6*Q%nGxGf@;}p=vMI)>R=EBcUl$2%-c-y&zn4>meYdb;Iq9F7SGm%yu)heuD-dmPEr5V zro!kZLJ#@+;S&n@`S$qUsTxKdSDVV~Vf;=X*s-R?nt0`Mtgz^>@ik@;q~^oY zOQEC(&jCB`V5`RAWFz^du${D@XeRSKJJ>pgN6GJY*xc0#8A=qg4lMKP{AJ4x^^z&E zAud$kktFNb$4^H$V~^UtbARyvwRkCh4yK+y=H;yAw-{Endo$p2&XC2%?XAy60}ggO z7LRQRS9eQaJU&S83LT)hzCc0_?A9%hF`vK`4B}N=tHl%}6>f|7=uo^sb5pcX7LMyk zPkW=da(P&(cZ&YZdoroM`7W23$9>UsOW$Ary<*z!$g(s)H}_pA#&O|5^hR??Tt7{PZh=@ z)WPG+_IY-!$!o#5(P4XJ!YMH%0*doXyv0?2V)#J}_J6&ND%lls-*r$RJx3=v(n#e& zH;;)bgC)_hq^`rhQ1j8#p_&k^2l>yk+a6zTLX}Y(Y+~>@4&Wt2OD2YAZH9}M$N_p( zmDpZEZw8v1QO~43VFXr98Y6RI{D<;cg}}Y1k($s)$H=46sW3XBx%i*+f|gy6a!CfO z_t6=#DL-%u)h8xg)&2uZ-w`sEGz3dD=Z1t8eG)FiG(vi!G4A>jOMH=|DA!S!NLMI| zf)Hh?k2{)X&!zaE&d(A%8I5Vfi8&odA|xPgUWU)<^f|a62)VMNnl}HilJP=ol>Z1s(K)= zdr8j)v2R3hWL=|J)#)E6auQ>Y%&a1$P%eRy$aYT{ktJqiPpX@eZtpESN*=u$X;i+Z z?88=UDDrgNkRT;ckQ&Rn=aQkYaT$97(Te*R0T?-?8C)?X!Hxh7g6?o1g%$lJ;0Ujf zQ4wUv@$KU-^XX6BQp8sz37W2T_?)~fb~%AXnRGOzp9!WPBa&u+qTlle8|#&Gd1p=u zQg}?gKdV>NH@kvSpUdUXveRTg6$Y}YoelpHu0=@=wR9drK^MFyS^)~ioI)jJXpFc* zox0-nRM;a*GM|HP5LwULkiN^hr$rMN#$e7LByw@ER~Mi>elyF&{Ki;|O=_Xgp*N;w zw~#e3vN%vsv_f;k`|`(}tQ>n9+H*_AZz%q-S z1hd|~FelE)W0u9lv4-4zW>;`!ET zmqYh7lP2i-q*~#L<4F8{*Jn>a+wYp>{+@7yeK0jWq8Bt)ZR*rrX$*_(u=g}kgbw>^=yl4`FYN29YK|y0vV?p7b5xz+ zT6T1M2v_oDWSu(qAnWO5C75vHHhA|!tZ2ShM$sJtC_~+hv{s@2`o)l5jUPnASZn)%NmRVT*sz6;-x>ID8rb@J||u0 zvO18dac)PH6G#y7lV6|FR}hp$1qn}`Y1WaE51D?@Qzmks^E56-U|m#LFRgJWT0}99 z5ZxF-cY|+vDnGh=K}!O`K=)P5*+AV-2=+f%YjcnoX~-_YJ%}q*I_bFK0H5!+gt^M| zDuYZbqTo>quFk}_x3^~H$x_>DT4W9`;e4CG%JBMMrAf);TNaKnhv*!+M`k?@T_lyGoSmDsd{X%pw9^QdSymt zXKOQSB_p%I>xWhjeU&YlIyx%pk4}CH>+m@8bTUx>ZuH1&L%og8Xt^-X+ZE9O0StY> zNW(nsqZWs@$~g!LA5BQ&WrpgV7I3)*+53W?OcEBOnvJlz)fidT)Lr&<9 zm_ejD(l^YwI|>N{2m6{zmFoZeBt!!waz^fjdg^Qz6P_H%9EmqrW(;CKbqRX)Vfo@S zV>RN$o{0+X#ORKo^Blx~OG{9+$h&M2kRGLsJ6CNa5^*q~Wu_=c+h2v#&O}u_0l0aQ z+<%WD6N0#7mkUpMei8CFv^V4~l^GwB{?z_$OyqLrLIpv{>oEbw$OIA+v$X|ZUBUCw zsjMEMKLFq6v$JANXO6S>zBWy#V7Tl~?U#zA8@c8X_Xhy!9(eO!!<)V-$1E;JmX@9B znP(X7eti3PIdJ+rEp%{$$Q7!(*zXp`L*M}j|0liTcNURT0NNeu`J;*&S6}bq{jPs0 zBah}Y>IffrU6(ns)1T;9!{#&R<{4#>STswZ(mFsGh9je25ZXps5W2M^>_du)Lib90#hehghp zQ_DJNC?L-WZ+8VN%kE@nFk5(m#ud`n>dsETjcb}OUm{a&saYcX)Iw}%+|#1x_j|*G%C9YT+yFnfHySC=mBjxH#Kw zcN+Uncav8V7&od(R8my&jgu0)ecYfbMEPyYlm`*|l>y``-~aqt_@dTi(cktP!1h!O zufc!ur{shjgYhnnBDu#qoD$M>p5}jhePwKfF{U6Au?Y^b`|BE9El5Y*F_hJT&L+xc=Ctb6A-uW z!d=Mw_wNr5PuV&+I2_;JYkFt~pXOy%TznDhrvaM}TZc!9rN#jt{T6DJLQRyIN46V7 zyqEg22jwyn`^UzlO1hf6#P3ifaekpjt^XntA{fvSv*?v8H6Tj94P@@UjQ7S=lUo_m zhCJ=vIBoRh3(qEgYwbkaGP^bWFjhnO)X&-L2>Dis?yi;-Z=8O8+5MDzWmi|1JO|HR z7{;8>xa7FVthI5{6(#q@{hy@`cT4_cK+8jH`M#qKeZUUhA2c0dx#Iupv6``^B`~w( z9G1-W@GIZR(6ssytMMREM~L$b%z3{T?V0na+}iSG)sXEy%Eo2t7s5A7zV0wym$zWKiaML}CO{wB zQCQ1uiJ4xHgTIn(ItaXDHxc1m0ukF?%Cwny=)av%>@_-_j(i8R8P?J^9T^Is=z?Uv zSI`@`q-f-)_G#e>YzCB?;fxazR2DfSBKiHBnny}@%g_;-L>u}_Az@LJ&e`7>xU|t| z3Ju@n(bm?+p+t1YMn@qX+P{c4t1tv7ZF@K8jf3V0bS%aRJ>_8yTbS(YG=UjNjTli0PFKT=%YY^B~r zJ8H<7@T1WN>~=<6kS~H^n$Kn#sla&U4vkQLW<9jv!%?~0fx_NkY(6%j`0 zl&wMwouL#vqpL|qtaDft*g|N;V;tDI^7lfxbKgJ{T#g#HM%2#}llQS5+Z2dDox-M5 zqNepL>*PY073#U1eP&`f*Ww1uz~EY0{#PvCwx7PA1sCzk*GCC5Uft0ME@A7Ye>n+p zw=^AFB`G*3dsb)S;ddv)Hk$kylR-N{uO~L&BRxG6wok!#@wLkjmzgchJO@bc$HBxJ zt|u&}naASR?R1h~YsgHLN4M{WD$`+BwPvCf+Lb#qlet#4mhgU>uMuJ&&E-^))`V}h zK*n_d+VZYGoYtG5hz_Ob4cT%cC-l6k>VhB;M8`2;n5|%&Qc2K*IwptUQ@%;q}H2!$1>A-<5-#aupX#SqH`SUP8bxZr4$1rl|X&Y<+3IC>%^ykQ#q?4%fvhP2KdYkO&@Ey z_mm)A9wJ~$-4=_XRQrH67CRr9&H%{HVeE-B0#Aes&4gR)AP^l$mcmHDiD{29?^HR1 zoA>zH68l}2ZN{=_u9&xki#X_#klF8o?O*ck$@lK^r_4Z~PxyW+6Jn`uID*_uh8=gI zXzt54TyRXYoQRq#xv=|{ZM{)HBnI;U-!#ZbE{_(wJ+6g9d~t-h?+bc`#cK4~B{x0{ z;ZAExmA`)ERd^xA#(2e%x*s3Usj9g~GeNsX0j!$a8oxyDc=OKcN{u}I?y)?3Q|StO zubGQsmUm8R77p(|SQCg@x(-s&PYwDODlxu;Q+(C!;apW;@m%ebC)g4G#b~2BXX8*} z&#(Ha^FcgOMkqmwuoqo^gv}1fW>49q7J23RUAV+MywObH)}YB>Y)+wMiGf9f5vZh5 zfwlegcToBFR+F8YFkF2=;$ZA&H_(~$AnVtVi-D(4oaUG9tj?~^mA*u-m|LJ5G1xH? zp`FUpJEnReZR%WNXwdW|cfI)79bV{N@W&?Ns%jOpfPok8%V&N+eUk_y=HT;K;aIr( z&!Wt0j}Nw}0io{PKcVvoHzT8J*R6vMLRa~BAQY6#Gsu@)AsHFRNm|Y`nL(sg?lRJV zkDhHlRoyAx$2DXBV%AVMpy{Q$8yoeu)&f#yL{UBK&G7!|z3$9u*R{gioO3P%2S37% z%v;6YkEqAcQpZZb)o;Zd1LRjc{ih_G?J+KDI|9`5Fm(s(m-HV{tSg~%XC!P~N#CHZ zhgYml)PD-tc|F;t-vF{R9JiaIL0f@`rt~|52}Eb7hD9cuH4|r%H-GT&Jtdog@--AO z%@1HG&(D|7(F@pLZX6i~c79VzS!CTuBhU%jz2&-kcQKsOHV*OMd;cQI!$7-dd{Gz$ zPVK8^qsImtXwA&krKNJ3fmaUvyqz%fW1%ehds43jw@)c?TRpPOY|GOE+L143WvG~3 zJ%!eMR7Ti!-Cx?#2Q&Kt1a%_qO&f%X8b2I4lq)5Y9t>VLD9SG%VZ=8^2Gbr5d$dl% zS6O3ycQDz{cC796@vot+izqDmwhw9+&}+W}g1Dh9#dQfVAVtbbO5n?LzTK*NsWLRK864 zE1m{+ezy#If&D2+W$rO=VFbd0HQ%~EgOHH?6e5fngc&ce&zMk$u}-rxSXsqit`6W)v6VF2tzyhf8k(Sa}XiI@Kn3cyFU3H7Fn zow=@NMv}`*G~$@_e-|v;-ZuzL4}l@Q!zxiSZ7U*to#k*7LuiTaq4WN_$%H@tCwSELovi?#);DO=eab--=ZH7HKd2gMR(2QC9&7Xts6k@9V~7djo1OeN~c> zWEnwYN%SEWB%PD4l+Gi-jGzC;b{auoZjRFv%_y;!h7in zZ80tU6{R!mcYGGPP^WT=lc$kUSxyw9{KvHPWKg;tPI%ir6XW9bQf|T3$uFUgsmNPn zPf7F1`w^1%;fK1RLemV4V1oG+PAHhZVoW!=dk$|;xv&~NcjkB!bv1$(`g^E+d*oNX z<-f=JJ%xgMRTel2eH zpzNJ~u=9aIp{HPupG)#V_LlK8gQi(nchnterdzM}*eib>a7&&En16W zB+nMV41!(hsb;g6JjZ%VcRkv)f4OJ5h)eGPDo?69s{<2f`>)V;%Fvwlrq7L~ZO3^W z(q*tV<%*MAPydy(b7}ji_3P8gpINJ=Nf@6-BBDLElYoub?j9f84Q4EE(TdticzdY9 zX|7iF4;laTd7w|`YT24^EsKWF^Nsc_jYw|dfGHaOPfKfvn(%jMm+kI*U0Ge@`aS1K zZ(2)hQeLi34qW=yH~$>ef9B>gDf|tyqw_=~T@D`$JxUlb5BC}LO}6M*#lq%`;kdZBZ7GN2M4%nZfjO%f{gkfr9@=g diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/inherited_widget/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/inherited_widget/ios/Runner/Info.plist b/inherited_widget/ios/Runner/Info.plist index 57286d07..07a3d197 100644 --- a/inherited_widget/ios/Runner/Info.plist +++ b/inherited_widget/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Inherited Widget Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - inherited_widget + inherited_widget_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/inherited_widget/ios/Runner/Runner-Bridging-Header.h b/inherited_widget/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/inherited_widget/ios/Runner/Runner-Bridging-Header.h +++ b/inherited_widget/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/inherited_widget/ios/RunnerTests/RunnerTests.swift b/inherited_widget/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/inherited_widget/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/inherited_widget/lib/app.dart b/inherited_widget/lib/app.dart index 8dc42610..8c4e9622 100644 --- a/inherited_widget/lib/app.dart +++ b/inherited_widget/lib/app.dart @@ -5,14 +5,15 @@ import 'package:inherited_widget_sample/screens/home_screen.dart'; import 'package:todos_app_core/todos_app_core.dart'; class InheritedWidgetApp extends StatelessWidget { - const InheritedWidgetApp(); + const InheritedWidgetApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( + theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, onGenerateTitle: (context) => InheritedWidgetLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), InheritedWidgetLocalizationsDelegate(), diff --git a/inherited_widget/lib/localization.dart b/inherited_widget/lib/localization.dart index 8ede9bfd..c48eee47 100644 --- a/inherited_widget/lib/localization.dart +++ b/inherited_widget/lib/localization.dart @@ -7,7 +7,7 @@ class InheritedWidgetLocalizations { return Localizations.of( context, InheritedWidgetLocalizations, - ); + )!; } String get appTitle => 'InheritedWidget Example'; diff --git a/inherited_widget/lib/main.dart b/inherited_widget/lib/main.dart index eb30a44a..d5dc322c 100644 --- a/inherited_widget/lib/main.dart +++ b/inherited_widget/lib/main.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:inherited_widget_sample/app.dart'; import 'package:inherited_widget_sample/state_container.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; @@ -10,13 +9,13 @@ Future main() async { runApp( StateContainer( - child: const InheritedWidgetApp(), repository: LocalStorageRepository( localStorage: KeyValueStorage( 'inherited_widget_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + await SharedPreferences.getInstance(), ), ), + child: const InheritedWidgetApp(), ), ); } diff --git a/inherited_widget/lib/main_web.dart b/inherited_widget/lib/main_web.dart deleted file mode 100644 index f40b6012..00000000 --- a/inherited_widget/lib/main_web.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'dart:html'; - -import 'package:flutter/material.dart'; -import 'package:inherited_widget_sample/app.dart'; -import 'package:inherited_widget_sample/state_container.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -void main() { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - StateContainer( - child: const InheritedWidgetApp(), - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'inherited_widget_todos', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ); -} diff --git a/inherited_widget/lib/models.dart b/inherited_widget/lib/models.dart index e182d885..e2fd49c4 100644 --- a/inherited_widget/lib/models.dart +++ b/inherited_widget/lib/models.dart @@ -16,17 +16,15 @@ class AppState { bool get allComplete => todos.every((todo) => todo.complete); - List get filteredTodos => todos.where((todo) { - switch (activeFilter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); + List get filteredTodos => todos + .where((todo) { + return switch (activeFilter) { + VisibilityFilter.active => !todo.complete, + VisibilityFilter.completed => todo.complete, + VisibilityFilter.all => true, + }; + }) + .toList(growable: false); bool get hasCompletedTodos => todos.any((todo) => todo.complete); @@ -54,7 +52,9 @@ class AppState { void toggleAll() { final allCurrentlyComplete = allComplete; - todos.forEach((todo) => todo.complete = !allCurrentlyComplete); + for (var todo in todos) { + todo.complete = !allCurrentlyComplete; + } } @override @@ -73,7 +73,7 @@ class Todo { String note; String task; - Todo(this.task, {this.complete = false, this.note = '', String id}) + Todo(this.task, {this.complete = false, this.note = '', String? id}) : id = id ?? Uuid().generateV4(); @override @@ -102,9 +102,9 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, - id: entity.id ?? Uuid().generateV4(), + id: entity.id, ); } } diff --git a/inherited_widget/lib/screens/add_edit_screen.dart b/inherited_widget/lib/screens/add_edit_screen.dart index af02c767..d9f8b1b1 100644 --- a/inherited_widget/lib/screens/add_edit_screen.dart +++ b/inherited_widget/lib/screens/add_edit_screen.dart @@ -1,24 +1,22 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; import 'package:inherited_widget_sample/state_container.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { - final Todo todo; + final Todo? todo; + + const AddEditScreen({super.key = ArchSampleKeys.addTodoScreen, this.todo}); - AddEditScreen({Key key, this.todo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); @override - _AddEditScreenState createState() => _AddEditScreenState(); + State createState() => _AddEditScreenState(); } class _AddEditScreenState extends State { static final GlobalKey _formKey = GlobalKey(); - String _task; - String _note; + String? _task; + String? _note; @override Widget build(BuildContext context) { @@ -34,32 +32,30 @@ class _AddEditScreenState extends State { padding: EdgeInsets.all(16.0), child: Form( key: _formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, + autovalidateMode: AutovalidateMode.disabled, + canPop: true, child: ListView( children: [ TextFormField( - initialValue: isEditing ? widget.todo.task : '', + initialValue: isEditing ? widget.todo!.task : '', key: ArchSampleKeys.taskField, autofocus: !isEditing, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.titleLarge, decoration: InputDecoration( hintText: localizations.newTodoHint, ), validator: (val) { - return val.trim().isEmpty + return val == null || val.trim().isEmpty ? localizations.emptyTodoError : null; }, onSaved: (value) => _task = value, ), TextFormField( - initialValue: isEditing ? widget.todo.note : '', + initialValue: isEditing ? widget.todo?.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: textTheme.subhead, + style: textTheme.bodyMedium, decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, ), @@ -74,13 +70,13 @@ class _AddEditScreenState extends State { tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); if (isEditing) { - container.updateTodo(widget.todo, task: _task, note: _note); + container.updateTodo(widget.todo!, task: _task!, note: _note!); } else { - container.addTodo(Todo(_task, note: _note)); + container.addTodo(Todo(_task!, note: _note!)); } Navigator.pop(context); diff --git a/inherited_widget/lib/screens/detail_screen.dart b/inherited_widget/lib/screens/detail_screen.dart index 752ac1b7..1bf0c538 100644 --- a/inherited_widget/lib/screens/detail_screen.dart +++ b/inherited_widget/lib/screens/detail_screen.dart @@ -1,15 +1,18 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; import 'package:inherited_widget_sample/screens/add_edit_screen.dart'; import 'package:inherited_widget_sample/state_container.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatelessWidget { final Todo todo; + final VoidCallback onDelete; - DetailScreen({@required this.todo}) - : super(key: ArchSampleKeys.todoDetailsScreen); + const DetailScreen({ + super.key = ArchSampleKeys.todoDetailsScreen, + required this.todo, + required this.onDelete, + }); @override Widget build(BuildContext context) { @@ -24,8 +27,9 @@ class DetailScreen extends StatelessWidget { tooltip: ArchSampleLocalizations.of(context).deleteTodo, icon: Icon(Icons.delete), onPressed: () { - container.removeTodo(todo); - Navigator.pop(context, todo); + onDelete(); + + Navigator.pop(context); }, ), ], @@ -52,17 +56,17 @@ class DetailScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only(top: 8.0, bottom: 16.0), + padding: EdgeInsets.only(top: 5.0, bottom: 16.0), child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.titleLarge, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.bodyMedium, ), ], ), @@ -74,10 +78,9 @@ class DetailScreen extends StatelessWidget { ), floatingActionButton: FloatingActionButton( tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), key: ArchSampleKeys.editTodoFab, onPressed: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) { return AddEditScreen( @@ -88,6 +91,7 @@ class DetailScreen extends StatelessWidget { ), ); }, + child: Icon(Icons.edit), ), ); } diff --git a/inherited_widget/lib/screens/home_screen.dart b/inherited_widget/lib/screens/home_screen.dart index 3488ad87..4ec27865 100644 --- a/inherited_widget/lib/screens/home_screen.dart +++ b/inherited_widget/lib/screens/home_screen.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/localization.dart'; import 'package:inherited_widget_sample/models.dart'; import 'package:inherited_widget_sample/state_container.dart'; @@ -7,9 +6,10 @@ import 'package:inherited_widget_sample/widgets/extra_actions_button.dart'; import 'package:inherited_widget_sample/widgets/filter_button.dart'; import 'package:inherited_widget_sample/widgets/stats_counter.dart'; import 'package:inherited_widget_sample/widgets/todo_list.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class HomeScreen extends StatefulWidget { - HomeScreen() : super(key: ArchSampleKeys.homeScreen); + const HomeScreen({super.key = ArchSampleKeys.homeScreen}); @override State createState() { @@ -53,8 +53,8 @@ class HomeScreenState extends State { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.add), ), bottomNavigationBar: BottomNavigationBar( key: ArchSampleKeys.tabs, @@ -70,11 +70,9 @@ class HomeScreenState extends State { ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ), diff --git a/inherited_widget/lib/state_container.dart b/inherited_widget/lib/state_container.dart index 936b6866..6041ea81 100644 --- a/inherited_widget/lib/state_container.dart +++ b/inherited_widget/lib/state_container.dart @@ -1,18 +1,22 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:inherited_widget_sample/models.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; class StateContainer extends StatefulWidget { - final AppState state; - final TodosRepository repository; + final AppState? state; + final TodosRepository? repository; final Widget child; - StateContainer({@required this.child, this.repository, this.state}); + const StateContainer({ + super.key, + required this.child, + this.repository, + this.state, + }); static StateContainerState of(BuildContext context) { return context - .dependOnInheritedWidgetOfExactType<_InheritedStateContainer>() + .dependOnInheritedWidgetOfExactType<_InheritedStateContainer>()! .data; } @@ -23,18 +27,18 @@ class StateContainer extends StatefulWidget { } class StateContainerState extends State { - AppState state; + late AppState state; @override void initState() { if (widget.state != null) { - state = widget.state; + state = widget.state!; } else { state = AppState.loading(); } widget.repository - .loadTodos() + ?.loadTodos() .then((loadedTodos) { setState(() { state = AppState(todos: loadedTodos.map(Todo.fromEntity).toList()); @@ -81,10 +85,10 @@ class StateContainerState extends State { void updateTodo( Todo todo, { - bool complete, - String id, - String note, - String task, + bool? complete, + String? id, + String? note, + String? task, }) { setState(() { todo.complete = complete ?? todo.complete; @@ -98,7 +102,7 @@ class StateContainerState extends State { void setState(VoidCallback fn) { super.setState(fn); - widget.repository.saveTodos( + widget.repository?.saveTodos( state.todos.map((todo) => todo.toEntity()).toList(), ); } @@ -112,11 +116,7 @@ class StateContainerState extends State { class _InheritedStateContainer extends InheritedWidget { final StateContainerState data; - _InheritedStateContainer({ - Key key, - @required this.data, - @required Widget child, - }) : super(key: key, child: child); + const _InheritedStateContainer({required this.data, required super.child}); // Note: we could get fancy here and compare whether the old AppState is // different than the current AppState. However, since we know this is the diff --git a/inherited_widget/lib/widgets/extra_actions_button.dart b/inherited_widget/lib/widgets/extra_actions_button.dart index 3cc24138..e1f6eda2 100644 --- a/inherited_widget/lib/widgets/extra_actions_button.dart +++ b/inherited_widget/lib/widgets/extra_actions_button.dart @@ -1,18 +1,18 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class ExtraActionsButton extends StatelessWidget { - final PopupMenuItemSelected onSelected; + final PopupMenuItemSelected? onSelected; final bool allComplete; final bool hasCompletedTodos; - ExtraActionsButton({ + const ExtraActionsButton({ + super.key, this.onSelected, this.allComplete = false, this.hasCompletedTodos = true, - Key key, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/inherited_widget/lib/widgets/filter_button.dart b/inherited_widget/lib/widgets/filter_button.dart index f45984b7..d5e52e2b 100644 --- a/inherited_widget/lib/widgets/filter_button.dart +++ b/inherited_widget/lib/widgets/filter_button.dart @@ -1,21 +1,25 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final PopupMenuItemSelected onSelected; final VisibilityFilter activeFilter; final bool isActive; - FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + const FilterButton({ + super.key, + required this.onSelected, + required this.activeFilter, + required this.isActive, + }); @override Widget build(BuildContext context) { final theme = Theme.of(context); - final defaultStyle = theme.textTheme.body1; - final activeStyle = theme.textTheme.body1.copyWith( - color: theme.accentColor, + final defaultStyle = theme.textTheme.bodyMedium; + final activeStyle = theme.textTheme.bodyMedium?.copyWith( + color: theme.colorScheme.primary, ); final button = _Button( onSelected: onSelected, @@ -33,17 +37,16 @@ class FilterButton extends StatelessWidget { class _Button extends StatelessWidget { const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); + required this.onSelected, + required this.activeFilter, + required this.activeStyle, + required this.defaultStyle, + }); - final PopupMenuItemSelected onSelected; - final VisibilityFilter activeFilter; - final TextStyle activeStyle; - final TextStyle defaultStyle; + final PopupMenuItemSelected? onSelected; + final VisibilityFilter? activeFilter; + final TextStyle? activeStyle; + final TextStyle? defaultStyle; @override Widget build(BuildContext context) { diff --git a/inherited_widget/lib/widgets/stats_counter.dart b/inherited_widget/lib/widgets/stats_counter.dart index bbb2ae3f..36177d7c 100644 --- a/inherited_widget/lib/widgets/stats_counter.dart +++ b/inherited_widget/lib/widgets/stats_counter.dart @@ -1,10 +1,9 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/state_container.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatelessWidget { - StatsCounter() : super(key: ArchSampleKeys.statsCounter); + const StatsCounter({super.key = ArchSampleKeys.statsCounter}); @override Widget build(BuildContext context) { @@ -20,7 +19,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -28,14 +27,14 @@ class StatsCounter extends StatelessWidget { child: Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -43,7 +42,7 @@ class StatsCounter extends StatelessWidget { child: Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/inherited_widget/lib/widgets/todo_item.dart b/inherited_widget/lib/widgets/todo_item.dart index f8447f33..e757b514 100644 --- a/inherited_widget/lib/widgets/todo_item.dart +++ b/inherited_widget/lib/widgets/todo_item.dart @@ -1,19 +1,19 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, + const TodoItem({ + super.key, + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, }); @override @@ -31,14 +31,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleMedium, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.bodyMedium, ), ), ); diff --git a/inherited_widget/lib/widgets/todo_list.dart b/inherited_widget/lib/widgets/todo_list.dart index 4d1ee615..f45f2b94 100644 --- a/inherited_widget/lib/widgets/todo_list.dart +++ b/inherited_widget/lib/widgets/todo_list.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:inherited_widget_sample/models.dart'; import 'package:inherited_widget_sample/screens/detail_screen.dart'; import 'package:inherited_widget_sample/state_container.dart'; import 'package:inherited_widget_sample/widgets/todo_item.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoList extends StatelessWidget { - TodoList({Key key}) : super(key: key); + const TodoList({super.key}); @override Widget build(BuildContext context) { @@ -38,19 +38,18 @@ class TodoList extends StatelessWidget { _removeTodo(context, todo); }, onTap: () { - Navigator.of(context) - .push( - MaterialPageRoute( - builder: (_) { - return DetailScreen(todo: todo); + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) { + return DetailScreen( + todo: todo, + onDelete: () { + _removeTodo(context, todo); }, - ), - ) - .then((todo) { - if (todo is Todo) { - _showUndoSnackbar(context, todo); - } - }); + ); + }, + ), + ); }, onCheckboxChanged: (complete) { container.updateTodo(todo, complete: !todo.complete); @@ -84,6 +83,6 @@ class TodoList extends StatelessWidget { ), ); - Scaffold.of(context).showSnackBar(snackBar); + ScaffoldMessenger.of(context).showSnackBar(snackBar); } } diff --git a/inherited_widget/linux/.gitignore b/inherited_widget/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/inherited_widget/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/inherited_widget/linux/CMakeLists.txt b/inherited_widget/linux/CMakeLists.txt new file mode 100644 index 00000000..f1320114 --- /dev/null +++ b/inherited_widget/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "inherited_widget_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.inherited_widget_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/inherited_widget/linux/flutter/CMakeLists.txt b/inherited_widget/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/inherited_widget/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/inherited_widget/linux/flutter/generated_plugin_registrant.cc b/inherited_widget/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/inherited_widget/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/inherited_widget/linux/flutter/generated_plugin_registrant.h b/inherited_widget/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/inherited_widget/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/inherited_widget/linux/flutter/generated_plugins.cmake b/inherited_widget/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/inherited_widget/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/inherited_widget/linux/runner/CMakeLists.txt b/inherited_widget/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/inherited_widget/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/inherited_widget/linux/runner/main.cc b/inherited_widget/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/inherited_widget/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/inherited_widget/linux/runner/my_application.cc b/inherited_widget/linux/runner/my_application.cc new file mode 100644 index 00000000..5d42fa96 --- /dev/null +++ b/inherited_widget/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "inherited_widget_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "inherited_widget_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/inherited_widget/linux/runner/my_application.h b/inherited_widget/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/inherited_widget/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/inherited_widget/macos/.gitignore b/inherited_widget/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/inherited_widget/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/inherited_widget/macos/Flutter/Flutter-Debug.xcconfig b/inherited_widget/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/inherited_widget/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/inherited_widget/macos/Flutter/Flutter-Release.xcconfig b/inherited_widget/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/inherited_widget/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/inherited_widget/macos/Flutter/GeneratedPluginRegistrant.swift b/inherited_widget/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/inherited_widget/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/inherited_widget/macos/Podfile b/inherited_widget/macos/Podfile new file mode 100644 index 00000000..29c8eb32 --- /dev/null +++ b/inherited_widget/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/inherited_widget/macos/Podfile.lock b/inherited_widget/macos/Podfile.lock new file mode 100644 index 00000000..390b5331 --- /dev/null +++ b/inherited_widget/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 7eb978b976557c8c1cd717d8185ec483fd090a82 + +COCOAPODS: 1.16.2 diff --git a/inherited_widget/macos/Runner.xcodeproj/project.pbxproj b/inherited_widget/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..8f8bbdb7 --- /dev/null +++ b/inherited_widget/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 883B1972DDFE332C5D0B8C24 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA2DE18BD70AE05550582356 /* Pods_RunnerTests.framework */; }; + EE111C72514C26D06F01A8E0 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C06C5B30A251961A74B4818 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 03EA09412A798045C17E451D /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 292A9E225992EBE76F5DF6FC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* inherited_widget_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = inherited_widget_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 3E0E486BD0E42092610A70D2 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4C06C5B30A251961A74B4818 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + AA2DE18BD70AE05550582356 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB2D3888C23B6EE928C5FAD0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BDED5AFB76879EC2D3058B88 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FF2D48F9FD69A5986A914DDE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 883B1972DDFE332C5D0B8C24 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EE111C72514C26D06F01A8E0 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 65E07816A42E78C7B4DF7039 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* inherited_widget_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 65E07816A42E78C7B4DF7039 /* Pods */ = { + isa = PBXGroup; + children = ( + BDED5AFB76879EC2D3058B88 /* Pods-Runner.debug.xcconfig */, + FF2D48F9FD69A5986A914DDE /* Pods-Runner.release.xcconfig */, + 292A9E225992EBE76F5DF6FC /* Pods-Runner.profile.xcconfig */, + 03EA09412A798045C17E451D /* Pods-RunnerTests.debug.xcconfig */, + 3E0E486BD0E42092610A70D2 /* Pods-RunnerTests.release.xcconfig */, + AB2D3888C23B6EE928C5FAD0 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4C06C5B30A251961A74B4818 /* Pods_Runner.framework */, + AA2DE18BD70AE05550582356 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 0A301979200D09C918D1B870 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + E96EB500C3D71F703B896061 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 4D478DB628A1396F22E0E7BE /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* inherited_widget_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0A301979200D09C918D1B870 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 4D478DB628A1396F22E0E7BE /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + E96EB500C3D71F703B896061 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 03EA09412A798045C17E451D /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/inherited_widget_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/inherited_widget_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E0E486BD0E42092610A70D2 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/inherited_widget_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/inherited_widget_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AB2D3888C23B6EE928C5FAD0 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/inherited_widget_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/inherited_widget_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/inherited_widget/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/inherited_widget/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/inherited_widget/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/inherited_widget/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/inherited_widget/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..8081f450 --- /dev/null +++ b/inherited_widget/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inherited_widget/macos/Runner.xcworkspace/contents.xcworkspacedata b/inherited_widget/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/inherited_widget/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/inherited_widget/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/inherited_widget/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/inherited_widget/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/inherited_widget/macos/Runner/AppDelegate.swift b/inherited_widget/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/inherited_widget/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K#jR^;j87-Auq zoUlN^K{r-Q+XN;zI ze|?*NFmgt#V#GwrSWaz^2G&@SBmck6ZcIFMww~vE<1E?M2#KUn1CzsB6D2+0SuRV@ zV2kK5HvIGB{HX-hQzs0*AB%5$9RJ@a;)Ahq#p$GSP91^&hi#6sg*;a~dt}4AclK>h z_3MoPRQ{i;==;*1S-mY<(JFzhAxMI&<61&m$J0NDHdJ3tYx~j0%M-uN6Zl8~_0DOkGXc0001@sz3l12C6Xg{AT~( zm6w64BA|AX`Ve)YY-glyudNN>MAfkXz-T7`_`fEolM;0T0BA)(02-OaW z0*cW7Z~ec94o8&g0D$N>b!COu{=m}^%oXZ4?T8ZyPZuGGBPBA7pbQMoV5HYhiT?%! zcae~`(QAN4&}-=#2f5fkn!SWGWmSeCISBcS=1-U|MEoKq=k?_x3apK>9((R zuu$9X?^8?@(a{qMS%J8SJPq))v}Q-ZyDm6Gbie0m92=`YlwnQPQP1kGSm(N2UJ3P6 z^{p-u)SSCTW~c1rw;cM)-uL2{->wCn2{#%;AtCQ!m%AakVs1K#v@(*-6QavyY&v&*wO_rCJXJuq$c$7ZjsW+pJo-$L^@!7X04CvaOpPyfw|FKvu;e(&Iw>Tbg zL}#8e^?X%TReXTt>gsBByt0kSU20oQx*~P=4`&tcZ7N6t-6LiK{LxX*p6}9c<0Pu^ zLx1w_P4P2V>bX=`F%v$#{sUDdF|;rbI{p#ZW`00Bgh(eB(nOIhy8W9T>3aQ=k8Z9% zB+TusFABF~J?N~fAd}1Rme=@4+1=M{^P`~se7}e3;mY0!%#MJf!XSrUC{0uZqMAd7%q zQY#$A>q}noIB4g54Ue)x>ofVm3DKBbUmS4Z-bm7KdKsUixva)1*&z5rgAG2gxG+_x zqT-KNY4g7eM!?>==;uD9Y4iI(Hu$pl8!LrK_Zb}5nv(XKW{9R144E!cFf36p{i|8pRL~p`_^iNo z{mf7y`#hejw#^#7oKPlN_Td{psNpNnM?{7{R-ICBtYxk>?3}OTH_8WkfaTLw)ZRTfxjW+0>gMe zpKg~`Bc$Y>^VX;ks^J0oKhB#6Ukt{oQhN+o2FKGZx}~j`cQB%vVsMFnm~R_1Y&Ml? zwFfb~d|dW~UktY@?zkau>Owe zRroi(<)c4Ux&wJfY=3I=vg)uh;sL(IYY9r$WK1$F;jYqq1>xT{LCkIMb3t2jN8d`9 z=4(v-z7vHucc_fjkpS}mGC{ND+J-hc_0Ix4kT^~{-2n|;Jmn|Xf9wGudDk7bi*?^+ z7fku8z*mbkGm&xf&lmu#=b5mp{X(AwtLTf!N`7FmOmX=4xwbD=fEo8CaB1d1=$|)+ z+Dlf^GzGOdlqTO8EwO?8;r+b;gkaF^$;+#~2_YYVH!hD6r;PaWdm#V=BJ1gH9ZK_9 zrAiIC-)z)hRq6i5+$JVmR!m4P>3yJ%lH)O&wtCyum3A*})*fHODD2nq!1@M>t@Za+ zH6{(Vf>_7!I-APmpsGLYpl7jww@s5hHOj5LCQXh)YAp+y{gG(0UMm(Ur z3o3n36oFwCkn+H*GZ-c6$Y!5r3z*@z0`NrB2C^q#LkOuooUM8Oek2KBk}o1PU8&2L z4iNkb5CqJWs58aR394iCU^ImDqV;q_Pp?pl=RB2372(Io^GA^+oKguO1(x$0<7w3z z)j{vnqEB679Rz4i4t;8|&Zg77UrklxY9@GDq(ZphH6=sW`;@uIt5B?7Oi?A0-BL}(#1&R;>2aFdq+E{jsvpNHjLx2t{@g1}c~DQcPNmVmy| zNMO@ewD^+T!|!DCOf}s9dLJU}(KZy@Jc&2Nq3^;vHTs}Hgcp`cw&gd7#N}nAFe3cM1TF%vKbKSffd&~FG9y$gLyr{#to)nxz5cCASEzQ}gz8O)phtHuKOW6p z@EQF(R>j%~P63Wfosrz8p(F=D|Mff~chUGn(<=CQbSiZ{t!e zeDU-pPsLgtc#d`3PYr$i*AaT!zF#23htIG&?QfcUk+@k$LZI}v+js|yuGmE!PvAV3 ztzh90rK-0L6P}s?1QH`Ot@ilbgMBzWIs zIs6K<_NL$O4lwR%zH4oJ+}JJp-bL6~%k&p)NGDMNZX7)0kni&%^sH|T?A)`z z=adV?!qnWx^B$|LD3BaA(G=ePL1+}8iu^SnnD;VE1@VLHMVdSN9$d)R(Wk{JEOp(P zm3LtAL$b^*JsQ0W&eLaoYag~=fRRdI>#FaELCO7L>zXe6w*nxN$Iy*Q*ftHUX0+N- zU>{D_;RRVPbQ?U+$^%{lhOMKyE5>$?U1aEPist+r)b47_LehJGTu>TcgZe&J{ z{q&D{^Ps~z7|zj~rpoh2I_{gAYNoCIJmio3B}$!5vTF*h$Q*vFj~qbo%bJCCRy509 zHTdDh_HYH8Zb9`}D5;;J9fkWOQi%Y$B1!b9+ESj+B@dtAztlY2O3NE<6HFiqOF&p_ zW-K`KiY@RPSY-p9Q99}Hcd05DT79_pfb{BV7r~?9pWh=;mcKBLTen%THFPo2NN~Nf zriOtFnqx}rtO|A6k!r6 zf-z?y-UD{dT0kT9FJ`-oWuPHbo+3wBS(}?2ql(+e@VTExmfnB*liCb zmeI+v5*+W_L;&kQN^ChW{jE0Mw#0Tfs}`9bk3&7UjxP^Ke(%eJu2{VnW?tu7Iqecm zB5|=-QdzK$=h50~{X3*w4%o1FS_u(dG2s&427$lJ?6bkLet}yYXCy)u_Io1&g^c#( z-$yYmSpxz{>BL;~c+~sxJIe1$7eZI_9t`eB^Pr0)5CuA}w;;7#RvPq|H6!byRzIJG ziQ7a4y_vhj(AL`8PhIm9edCv|%TX#f50lt8+&V+D4<}IA@S@#f4xId80oH$!_!q?@ zFRGGg2mTv&@76P7aTI{)Hu%>3QS_d)pQ%g8BYi58K~m-Ov^7r8BhX7YC1D3vwz&N8{?H*_U7DI?CI)+et?q|eGu>42NJ?K4SY zD?kc>h@%4IqNYuQ8m10+8xr2HYg2qFNdJl=Tmp&ybF>1>pqVfa%SsV*BY$d6<@iJA ziyvKnZ(~F9xQNokBgMci#pnZ}Igh0@S~cYcU_2Jfuf|d3tuH?ZSSYBfM(Y3-JBsC|S9c;# zyIMkPxgrq};0T09pjj#X?W^TFCMf1-9P{)g88;NDI+S4DXe>7d3Mb~i-h&S|Jy{J< zq3736$bH?@{!amD!1Ys-X)9V=#Z={fzsjVYMX5BG6%}tkzwC#1nQLj1y1f#}8**4Y zAvDZHw8)N)8~oWC88CgzbwOrL9HFbk4}h85^ptuu7A+uc#$f^9`EWv1Vr{5+@~@Uv z#B<;-nt;)!k|fRIg;2DZ(A2M2aC65kOIov|?Mhi1Sl7YOU4c$T(DoRQIGY`ycfkn% zViHzL;E*A{`&L?GP06Foa38+QNGA zw3+Wqs(@q+H{XLJbwZzE(omw%9~LPZfYB|NF5%j%E5kr_xE0u;i?IOIchn~VjeDZ) zAqsqhP0vu2&Tbz3IgJvMpKbThC-@=nk)!|?MIPP>MggZg{cUcKsP8|N#cG5 zUXMXxcXBF9`p>09IR?x$Ry3;q@x*%}G#lnB1}r#!WL88I@uvm}X98cZ8KO&cqT1p> z+gT=IxPsq%n4GWgh-Bk8E4!~`r@t>DaQKsjDqYc&h$p~TCh8_Mck5UB84u6Jl@kUZCU9BA-S!*bf>ZotFX9?a_^y%)yH~rsAz0M5#^Di80_tgoKw(egN z`)#(MqAI&A84J#Z<|4`Co8`iY+Cv&iboMJ^f9ROUK0Lm$;-T*c;TCTED_0|qfhlcS zv;BD*$Zko#nWPL}2K8T-?4}p{u)4xon!v_(yVW8VMpxg4Kh^J6WM{IlD{s?%XRT8P|yCU`R&6gwB~ zg}{At!iWCzOH37!ytcPeC`(({ovP7M5Y@bYYMZ}P2Z3=Y_hT)4DRk}wfeIo%q*M9UvXYJq!-@Ly79m5aLD{hf@BzQB>FdQ4mw z6$@vzSKF^Gnzc9vbccii)==~9H#KW<6)Uy1wb~auBn6s`ct!ZEos`WK8e2%<00b%# zY9Nvnmj@V^K(a_38dw-S*;G-(i(ETuIwyirs?$FFW@|66a38k+a%GLmucL%Wc8qk3 z?h_4!?4Y-xt)ry)>J`SuY**fuq2>u+)VZ+_1Egzctb*xJ6+7q`K$^f~r|!i?(07CD zH!)C_uerf-AHNa?6Y61D_MjGu*|wcO+ZMOo4q2bWpvjEWK9yASk%)QhwZS%N2_F4& z16D18>e%Q1mZb`R;vW{+IUoKE`y3(7p zplg5cBB)dtf^SdLd4n60oWie|(ZjgZa6L*VKq02Aij+?Qfr#1z#fwh92aV-HGd^_w zsucG24j8b|pk>BO7k8dS86>f-jBP^Sa}SF{YNn=^NU9mLOdKcAstv&GV>r zLxKHPkFxpvE8^r@MSF6UA}cG`#yFL8;kA7ccH9D=BGBtW2;H>C`FjnF^P}(G{wU;G z!LXLCbPfsGeLCQ{Ep$^~)@?v`q(uI`CxBY44osPcq@(rR-633!qa zsyb>?v%@X+e|Mg`+kRL*(;X>^BNZz{_kw5+K;w?#pReiw7eU8_Z^hhJ&fj80XQkuU z39?-z)6Fy$I`bEiMheS(iB6uLmiMd1i)cbK*9iPpl+h4x9ch7x- z1h4H;W_G?|)i`z??KNJVwgfuAM=7&Apd3vm#AT8uzQZ!NII}}@!j)eIfn53h{NmN7 zAKG6SnKP%^k&R~m5#@_4B@V?hYyHkm>0SQ@PPiw*@Tp@UhP-?w@jW?nxXuCipMW=L zH*5l*d@+jXm0tIMP_ec6Jcy6$w(gKK@xBX8@%oPaSyG;13qkFb*LuVx3{AgIyy&n3 z@R2_DcEn|75_?-v5_o~%xEt~ONB>M~tpL!nOVBLPN&e5bn5>+7o0?Nm|EGJ5 zmUbF{u|Qn?cu5}n4@9}g(G1JxtzkKv(tqwm_?1`?YSVA2IS4WI+*(2D*wh&6MIEhw z+B+2U<&E&|YA=3>?^i6)@n1&&;WGHF-pqi_sN&^C9xoxME5UgorQ_hh1__zzR#zVC zOQt4q6>ME^iPJ37*(kg4^=EFqyKH@6HEHXy79oLj{vFqZGY?sVjk!BX^h$SFJlJnv z5uw~2jLpA)|0=tp>qG*tuLru?-u`khGG2)o{+iDx&nC}eWj3^zx|T`xn5SuR;Aw8U z`p&>dJw`F17@J8YAuW4=;leBE%qagVTG5SZdh&d)(#ZhowZ|cvWvGMMrfVsbg>_~! z19fRz8CSJdrD|Rl)w!uznBF&2-dg{>y4l+6(L(vzbLA0Bk&`=;oQQ>(M8G=3kto_) zP8HD*n4?MySO2YrG6fwSrVmnesW+D&fxjfEmp=tPd?RKLZJcH&K(-S+x)2~QZ$c(> zru?MND7_HPZJVF%wX(49H)+~!7*!I8w72v&{b={#l9yz+S_aVPc_So%iF8>$XD1q1 zFtucO=rBj0Ctmi0{njN8l@}!LX}@dwl>3yMxZ;7 z0Ff2oh8L)YuaAGOuZ5`-p%Z4H@H$;_XRJQ|&(MhO78E|nyFa158gAxG^SP(vGi^+< zChY}o(_=ci3Wta#|K6MVljNe0T$%Q5ylx-v`R)r8;3+VUpp-)7T`-Y&{Zk z*)1*2MW+_eOJtF5tCMDV`}jg-R(_IzeE9|MBKl;a7&(pCLz}5<Zf+)T7bgNUQ_!gZtMlw=8doE}#W+`Xp~1DlE=d5SPT?ymu!r4z%&#A-@x^=QfvDkfx5-jz+h zoZ1OK)2|}_+UI)i9%8sJ9X<7AA?g&_Wd7g#rttHZE;J*7!e5B^zdb%jBj&dUDg4&B zMMYrJ$Z%t!5z6=pMGuO-VF~2dwjoXY+kvR>`N7UYfIBMZGP|C7*O=tU z2Tg_xi#Q3S=1|=WRfZD;HT<1D?GMR%5kI^KWwGrC@P2@R>mDT^3qsmbBiJc21kip~ zZp<7;^w{R;JqZ)C4z-^wL=&dBYj9WJBh&rd^A^n@07qM$c+kGv^f+~mU5_*|eePF| z3wDo-qaoRjmIw<2DjMTG4$HP{z54_te_{W^gu8$r=q0JgowzgQPct2JNtWPUsjF8R zvit&V8$(;7a_m%%9TqPkCXYUp&k*MRcwr*24>hR! z$4c#E=PVE=P4MLTUBM z7#*RDe0}=B)(3cvNpOmWa*eH#2HR?NVqXdJ=hq);MGD07JIQQ7Y0#iD!$C+mk7x&B zMwkS@H%>|fmSu#+ zI!}Sb(%o29Vkp_Th>&&!k7O>Ba#Om~B_J{pT7BHHd8(Ede(l`7O#`_}19hr_?~JP9 z`q(`<)y>%)x;O7)#-wfCP{?llFMoH!)ZomgsOYFvZ1DxrlYhkWRw#E-#Qf*z@Y-EQ z1~?_=c@M4DO@8AzZ2hKvw8CgitzI9yFd&N1-{|vP#4IqYb*#S0e3hrjsEGlnc4xwk z4o!0rxpUt8j&`mJ8?+P8G{m^jbk)bo_UPM+ifW*y-A*et`#_Ja_3nYyRa9fAG1Xr5 z>#AM_@PY|*u)DGRWJihZvgEh#{*joJN28uN7;i5{kJ*Gb-TERfN{ERe_~$Es~NJCpdKLRvdj4658uYYx{ng7I<6j~w@p%F<7a(Ssib|j z51;=Py(Nu*#hnLx@w&8X%=jrADn3TW>kplnb zYbFIWWVQXN7%Cwn6KnR)kYePEBmvM45I)UJb$)ninpdYg3a5N6pm_7Q+9>!_^xy?k za8@tJ@OOs-pRAAfT>Nc2x=>sZUs2!9Dwa%TTmDggH4fq(x^MW>mcRyJINlAqK$YQCMgR8`>6=Sg$ zFnJZsA8xUBXIN3i70Q%8px@yQPMgVP=>xcPI38jNJK<=6hC={a07+n@R|$bnhB)X$ z(Zc%tadp70vBTnW{OUIjTMe38F}JIH$#A}PB&RosPyFZMD}q}5W%$rh>5#U;m`z2K zc(&WRxx7DQLM-+--^w*EWAIS%bi>h587qkwu|H=hma3T^bGD&Z!`u(RKLeNZ&pI=q$|HOcji(0P1QC!YkAp*u z3%S$kumxR}jU<@6`;*-9=5-&LYRA<~uFrwO3U0k*4|xUTp4ZY7;Zbjx|uw&BWU$zK(w55pWa~#=f$c zNDW0O68N!xCy>G}(CX=;8hJLxAKn@Aj(dbZxO8a$+L$jK8$N-h@4$i8)WqD_%Snh4 zR?{O%k}>lr>w$b$g=VP8mckcCrjnp>uQl5F_6dPM8FWRqs}h`DpfCv20uZhyY~tr8 zkAYW4#yM;*je)n=EAb(q@5BWD8b1_--m$Q-3wbh1hM{8ihq7UUQfg@)l06}y+#=$( z$x>oVYJ47zAC^>HLRE-!HitjUixP6!R98WU+h>zct7g4eD;Mj#FL*a!VW!v-@b(Jv zj@@xM5noCp5%Vk3vY{tyI#oyDV7<$`KG`tktVyC&0DqxA#>V;-3oH%NW|Q&=UQ&zU zXNIT67J4D%5R1k#bW0F}TD`hlW7b)-=-%X4;UxQ*u4bK$mTAp%y&-(?{sXF%e_VH6 zTkt(X)SSN|;8q@8XX6qfR;*$r#HbIrvOj*-5ND8RCrcw4u8D$LXm5zlj@E5<3S0R# z??=E$p{tOk96$SloZ~ARe5`J=dB|Nj?u|zy2r(-*(q^@YwZiTF@QzQyPx_l=IDKa) zqD@0?IHJqSqZ_5`)81?4^~`yiGh6>7?|dKa8!e|}5@&qV!Iu9<@G?E}Vx9EzomB3t zEbMEm$TKGwkHDpirp;FZD#6P5qIlQJ8}rf;lHoz#h4TFFPYmS3+8(13_Mx2`?^=8S z|0)0&dQLJTU6{b%*yrpQe#OKKCrL8}YKw+<#|m`SkgeoN69TzIBQOl_Yg)W*w?NW) z*WxhEp$zQBBazJSE6ygu@O^!@Fr46j=|K`Mmb~xbggw7<)BuC@cT@Bwb^k?o-A zKX^9AyqR?zBtW5UA#siILztgOp?r4qgC`9jYJG_fxlsVSugGprremg-W(K0{O!Nw-DN%=FYCyfYA3&p*K>+|Q}s4rx#CQK zNj^U;sLM#q8}#|PeC$p&jAjqMu(lkp-_50Y&n=qF9`a3`Pr9f;b`-~YZ+Bb0r~c+V z*JJ&|^T{}IHkwjNAaM^V*IQ;rk^hnnA@~?YL}7~^St}XfHf6OMMCd9!vhk#gRA*{L zp?&63axj|Si%^NW05#87zpU_>QpFNb+I00v@cHwvdBn+Un)n2Egdt~LcWOeBW4Okm zD$-e~RD+W|UB;KQ;a7GOU&%p*efGu2$@wR74+&iP8|6#_fmnh^WcJLs)rtz{46);F z4v0OL{ZP9550>2%FE(;SbM*#sqMl*UXOb>ch`fJ|(*bOZ9=EB1+V4fkQ)hjsm3-u^Pk-4ji_uDDHdD>84tER!MvbH`*tG zzvbhBR@}Yd`azQGavooV=<WbvWLlO#x`hyO34mKcxrGv=`{ssnP=0Be5#1B;Co9 zh{TR>tjW2Ny$ZxJpYeg57#0`GP#jxDCU0!H15nL@@G*HLQcRdcsUO3sO9xvtmUcc{F*>FQZcZ5bgwaS^k-j5mmt zI7Z{Xnoml|A(&_{imAjK!kf5>g(oDqDI4C{;Bv162k8sFNr;!qPa2LPh>=1n z=^_9)TsLDvTqK7&*Vfm5k;VXjBW^qN3Tl&}K=X5)oXJs$z3gk0_+7`mJvz{pK|FVs zHw!k&7xVjvY;|(Py<;J{)b#Yjj*LZO7x|~pO4^MJ2LqK3X;Irb%nf}L|gck zE#55_BNsy6m+W{e zo!P59DDo*s@VIi+S|v93PwY6d?CE=S&!JLXwE9{i)DMO*_X90;n2*mPDrL%{iqN!?%-_95J^L z=l<*{em(6|h7DR4+4G3Wr;4*}yrBkbe3}=p7sOW1xj!EZVKSMSd;QPw>uhKK z#>MlS@RB@-`ULv|#zI5GytO{=zp*R__uK~R6&p$q{Y{iNkg61yAgB8C^oy&``{~FK z8hE}H&nIihSozKrOONe5Hu?0Zy04U#0$fB7C6y~?8{or}KNvP)an=QP&W80mj&8WL zEZQF&*FhoMMG6tOjeiCIV;T{I>jhi9hiUwz?bkX3NS-k5eWKy)Mo_orMEg4sV6R6X&i-Q%JG;Esl+kLpn@Bsls9O|i9z`tKB^~1D5)RIBB&J<6T@a4$pUvh$IR$%ubH)joi z!7>ON0DPwx=>0DA>Bb^c?L8N0BBrMl#oDB+GOXJh;Y&6I)#GRy$W5xK%a;KS8BrER zX)M>Rdoc*bqP*L9DDA3lF%U8Yzb6RyIsW@}IKq^i7v&{LeIc=*ZHIbO68x=d=+0T( zev=DT9f|x!IWZNTB#N7}V4;9#V$%Wo0%g>*!MdLOEU>My0^gni9ocID{$g9ytD!gy zKRWT`DVN(lcYjR|(}f0?zgBa3SwunLfAhx><%u0uFkrdyqlh8_g zDKt#R6rA2(Vm2LW_>3lBNYKG_F{TEnnKWGGC15y&OebIRhFL4TeMR*v9i0wPoK#H< zu4){s4K&K)K(9~jgGm;H7lS7y_RYfS;&!Oj5*eqbvEcW^a*i67nevzOZxN6F+K~A%TYEtsAVsR z@J=1hc#Dgs7J2^FL|qV&#WBFQyDtEQ2kPO7m2`)WFhqAob)Y>@{crkil6w9VoA?M6 zADGq*#-hyEVhDG5MQj677XmcWY1_-UO40QEP&+D)rZoYv^1B_^w7zAvWGw&pQyCyx zD|ga$w!ODOxxGf_Qq%V9Z7Q2pFiUOIK818AGeZ-~*R zI1O|SSc=3Z?#61Rd|AXx2)K|F@Z1@x!hBBMhAqiU)J=U|Y)T$h3D?ZPPQgkSosnN! zIqw-t$0fqsOlgw3TlHJF*t$Q@bg$9}A3X=cS@-yU3_vNG_!#9}7=q7!LZ?-%U26W4 z$d>_}*s1>Ac%3uFR;tnl*fNlylJ)}r2^Q3&@+is3BIv<}x>-^_ng;jhdaM}6Sg3?p z0jS|b%QyScy3OQ(V*~l~bK>VC{9@FMuW_JUZO?y(V?LKWD6(MXzh}M3r3{7b4eB(#`(q1m{>Be%_<9jw8HO!x#yF6vez$c#kR+}s zZO-_;25Sxngd(}){zv?ccbLqRAlo;yog>4LH&uZUK1n>x?u49C)Y&2evH5Zgt~666 z_2_z|H5AO5Iqxv_Bn~*y1qzRPcob<+Otod5Xd2&z=C;u+F}zBB@b^UdGdUz|s!H}M zXG%KiLzn3G?FZgdY&3pV$nSeY?ZbU^jhLz9!t0K?ep}EFNqR1@E!f*n>x*!uO*~JF zW9UXWrVgbX1n#76_;&0S7z}(5n-bqnII}_iDsNqfmye@)kRk`w~1 z6j4h4BxcPe6}v)xGm%=z2#tB#^KwbgMTl2I*$9eY|EWAHFc3tO48Xo5rW z5oHD!G4kb?MdrOHV=A+8ThlIqL8Uu+7{G@ zb)cGBm|S^Eh5= z^E^SZ=yeC;6nNCdztw&TdnIz}^Of@Ke*@vjt)0g>Y!4AJvWiL~e7+9#Ibhe)> ziNwh>gWZL@FlWc)wzihocz+%+@*euwXhW%Hb>l7tf8aJe5_ZSH1w-uG|B;9qpcBP0 zM`r1Hu#htOl)4Cl1c7oY^t0e4Jh$-I(}M5kzWqh{F=g&IM#JiC`NDSd@BCKX#y<P@Gwl$3a3w z6<(b|K(X5FIR22M)sy$4jY*F4tT{?wZRI+KkZFb<@j@_C316lu1hq2hA|1wCmR+S@ zRN)YNNE{}i_H`_h&VUT5=Y(lN%m?%QX;6$*1P}K-PcPx>*S55v)qZ@r&Vcic-sjkm z! z=nfW&X`}iAqa_H$H%z3Tyz5&P3%+;93_0b;zxLs)t#B|up}JyV$W4~`8E@+BHQ+!y zuIo-jW!~)MN$2eHwyx-{fyGjAWJ(l8TZtUp?wZWBZ%}krT{f*^fqUh+ywHifw)_F> zp76_kj_B&zFmv$FsPm|L7%x-j!WP>_P6dHnUTv!9ZWrrmAUteBa`rT7$2ixO;ga8U z3!91micm}{!Btk+I%pMgcKs?H4`i+=w0@Ws-CS&n^=2hFTQ#QeOmSz6ttIkzmh^`A zYPq)G1l3h(E$mkyr{mvz*MP`x+PULBn%CDhltKkNo6Uqg!vJ#DA@BIYr9TQ`18Un2 zv$}BYzOQuay9}w(?JV63F$H6WmlYPPpH=R|CPb%C@BCv|&Q|&IcW7*LX?Q%epS z`=CPx{1HnJ9_46^=0VmNb>8JvMw-@&+V8SDLRYsa>hZXEeRbtf5eJ>0@Ds47zIY{N z42EOP9J8G@MXXdeiPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$?lu1NER9Fe^SItioK@|V(ZWmgL zZT;XwPgVuWM>O%^|Dc$VK;n&?9!&g5)aVsG8cjs5UbtxVVnQNOV~7Mrg3+jnU;rhE z6fhW6P)R>_eXrXo-RW*y6RQ_qcb^s1wTu$TwriZ`=JUws>vRi}5x}MW1MR#7p|gIWJlaLK;~xaN}b< z<-@=RX-%1mt`^O0o^~2=CD7pJ<<$Rp-oUL-7PuG>do^5W_Mk#unlP}6I@6NPxY`Q} zuXJF}!0l)vwPNAW;@5DjPRj?*rZxl zwn;A(cFV!xe^CUu+6SrN?xe#mz?&%N9QHf~=KyK%DoB8HKC)=w=3E?1Bqj9RMJs3U z5am3Uv`@+{jgqO^f}Lx_Jp~CoP3N4AMZr~4&d)T`R?`(M{W5WWJV^z~2B|-oih@h^ zD#DuzGbl(P5>()u*YGo*Och=oRr~3P1wOlKqI)udc$|)(bacG5>~p(y>?{JD7nQf_ z*`T^YL06-O>T(s$bi5v~_fWMfnE7Vn%2*tqV|?~m;wSJEVGkNMD>+xCu#um(7}0so zSEu7?_=Q64Q5D+fz~T=Rr=G_!L*P|(-iOK*@X8r{-?oBlnxMNNgCVCN9Y~ocu+?XA zjjovJ9F1W$Nf!{AEv%W~8oahwM}4Ruc+SLs>_I_*uBxdcn1gQ^2F8a*vGjgAXYyh? zWCE@c5R=tbD(F4nL9NS?$PN1V_2*WR?gjv3)4MQeizuH`;sqrhgykEzj z593&TGlm3h`sIXy_U<7(dpRXGgp0TB{>s?}D{fwLe>IV~exweOfH!qM@CV5kib!YA z6O0gvJi_0J8IdEvyP#;PtqP*=;$iI2t(xG2YI-e!)~kaUn~b{6(&n zp)?iJ`z2)Xh%sCV@BkU`XL%_|FnCA?cVv@h*-FOZhY5erbGh)%Q!Av#fJM3Csc_g zC2I6x%$)80`Tkz#KRA!h1FzY`?0es3t!rKDT5EjPe6B=BLPr7s0GW!if;Ip^!AmGW zL;$`Vdre+|FA!I4r6)keFvAx3M#1`}ijBHDzy)3t0gwjl|qC2YB`SSxFKHr(oY#H$)x{L$LL zBdLKTlsOrmb>T0wd=&6l3+_Te>1!j0OU8%b%N342^opKmT)gni(wV($s(>V-fUv@0p8!f`=>PxC|9=nu ze{ToBBj8b<{PLfXV$h8YPgA~E!_sF9bl;QOF{o6t&JdsX?}rW!_&d`#wlB6T_h;Xf zl{4Tz5>qjF4kZgjO7ZiLPRz_~U@k5%?=30+nxEh9?s78gZ07YHB`FV`4%hlQlMJe@J`+e(qzy+h(9yY^ckv_* zb_E6o4p)ZaWfraIoB2)U7_@l(J0O%jm+Or>8}zSSTkM$ASG^w3F|I? z$+eHt7T~04(_WfKh27zqS$6* zzyy-ZyqvSIZ0!kkSvHknm_P*{5TKLQs8S6M=ONuKAUJWtpxbL#2(_huvY(v~Y%%#~ zYgsq$JbLLprKkV)32`liIT$KKEqs$iYxjFlHiRNvBhxbDg*3@Qefw4UM$>i${R5uB zhvTgmqQsKA{vrKN;TSJU2$f9q=y{$oH{<)woSeV>fkIz6D8@KB zf4M%v%f5U2?<8B(xn}xV+gWP?t&oiapJhJbfa;agtz-YM7=hrSuxl8lAc3GgFna#7 zNjX7;`d?oD`#AK+fQ=ZXqfIZFEk{ApzjJF0=yO~Yj{7oQfXl+6v!wNnoqwEvrs81a zGC?yXeSD2NV!ejp{LdZGEtd1TJ)3g{P6j#2jLR`cpo;YX}~_gU&Gd<+~SUJVh+$7S%`zLy^QqndN<_9 zrLwnXrLvW+ew9zX2)5qw7)zIYawgMrh`{_|(nx%u-ur1B7YcLp&WFa24gAuw~& zKJD3~^`Vp_SR$WGGBaMnttT)#fCc^+P$@UHIyBu+TRJWbcw4`CYL@SVGh!X&y%!x~ zaO*m-bTadEcEL6V6*{>irB8qT5Tqd54TC4`h`PVcd^AM6^Qf=GS->x%N70SY-u?qr>o2*OV7LQ=j)pQGv%4~z zz?X;qv*l$QSNjOuQZ>&WZs2^@G^Qas`T8iM{b19dS>DaXX~=jd4B2u`P;B}JjRBi# z_a@&Z5ev1-VphmKlZEZZd2-Lsw!+1S60YwW6@>+NQ=E5PZ+OUEXjgUaXL-E0fo(E* zsjQ{s>n33o#VZm0e%H{`KJi@2ghl8g>a~`?mFjw+$zlt|VJhSU@Y%0TWs>cnD&61fW4e0vFSaXZa4-c}U{4QR8U z;GV3^@(?Dk5uc@RT|+5C8-24->1snH6-?(nwXSnPcLn#X_}y3XS)MI_?zQ$ZAuyg+ z-pjqsw}|hg{$~f0FzmmbZzFC0He_*Vx|_uLc!Ffeb8#+@m#Z^AYcWcZF(^Os8&Z4g zG)y{$_pgrv#=_rV^D|Y<_b@ICleUv>c<0HzJDOsgJb#Rd-Vt@+EBDPyq7dUM9O{Yp zuGUrO?ma2wpuJuwl1M=*+tb|qx7Doj?!F-3Z>Dq_ihFP=d@_JO;vF{iu-6MWYn#=2 zRX6W=`Q`q-+q@Db|6_a1#8B|#%hskH82lS|9`im0UOJn?N#S;Y0$%xZw3*jR(1h5s z?-7D1tnIafviko>q6$UyqVDq1o@cwyCb*})l~x<@s$5D6N=-Uo1yc49p)xMzxwnuZ zHt!(hu-Ek;Fv4MyNTgbW%rPF*dB=;@r3YnrlFV{#-*gKS_qA(G-~TAlZ@Ti~Yxw;k za1EYyX_Up|`rpbZ0&Iv#$;eC|c0r4XGaQ-1mw@M_4p3vKIIpKs49a8Ns#ni)G314Z z8$Ei?AhiT5dQGWUYdCS|IC7r z=-8ol>V?u!n%F*J^^PZ(ONT&$Ph;r6X;pj|03HlDY6r~0g~X#zuzVU%a&!fs_f|m?qYvg^Z{y?9Qh7Rn?T*F%7lUtA6U&={HzhYEzA`knx1VH> z{tqv?p@I(&ObD5L4|YJV$QM>Nh-X3cx{I&!$FoPC_2iIEJfPk-$;4wz>adRu@n`_y z_R6aN|MDHdK;+IJmyw(hMoDCFCQ(6?hCAG5&7p{y->0Uckv# zvooVuu04$+pqof777ftk<#42@KQ((5DPcSMQyzGOJ{e9H$a9<2Qi_oHjl{#=FUL9d z+~0^2`tcvmp0hENwfHR`Ce|<1S@p;MNGInXCtHnrDPXCKmMTZQ{HVm_cZ>@?Wa6}O zHsJc7wE)mc@1OR2DWY%ZIPK1J2p6XDO$ar`$RXkbW}=@rFZ(t85AS>>U0!yt9f49^ zA9@pc0P#k;>+o5bJfx0t)Lq#v4`OcQn~av__dZ-RYOYu}F#pdsl31C^+Qgro}$q~5A<*c|kypzd} ziYGZ~?}5o`S5lw^B{O@laad9M_DuJle- z*9C7o=CJh#QL=V^sFlJ0c?BaB#4bV^T(DS6&Ne&DBM_3E$S^S13qC$7_Z?GYXTpR@wqr70wu$7+qvf-SEUa5mdHvFbu^7ew!Z1a^ zo}xKOuT*gtGws-a{Tx}{#(>G~Y_h&5P@Q8&p!{*s37^QX_Ibx<6XU*AtDOIvk|^{~ zPlS}&DM5$Ffyu-T&0|KS;Wnaqw{9DB&B3}vcO14wn;)O_e@2*9B&0I_ zZz{}CMxx`hv-XouY>^$Y@J(_INeM>lIQI@I>dBAqq1)}?Xmx(qRuX^i4IV%=MF306 z9g)i*79pP%_7Ex?m6ag-4Tlm=Z;?DQDyC-NpUIb#_^~V_tsL<~5<&;Gf2N+p?(msn zzUD~g>OoW@O}y0@Z;RN)wjam`CipmT&O7a|YljZqU=U86 zedayEdY)2F#BJ6xvmW8K&ffdS*0!%N<%RB!2~PAT4AD*$W7yzHbX#Eja9%3aD+Ah2 zf#T;XJW-GMxpE=d4Y>}jE=#U`IqgSoWcuvgaWQ9j1CKzG zDkoMDDT)B;Byl3R2PtC`ip=yGybfzmVNEx{xi_1|Cbqj>=FxQc{g`xj6fIfy`D8fA z##!-H_e6o0>6Su&$H2kQTujtbtyNFeKc}2=|4IfLTnye#@$Au7Kv4)dnA;-fz@D_8 z)>irG$)dkBY~zX zC!ZXLy*L3xr6cb70QqfN#Q>lFIc<>}>la4@3%7#>a1$PU&O^&VszpxLC%*!m-cO{B z-Y}rQr4$84(hvy#R69H{H zJ*O#uJh)TF6fbXy;fZkk%X=CjsTK}o5N1a`d7kgYYZLPxsHx%9*_XN8VWXEkVJZ%A z1A+5(B;0^{T4aPYr8%i@i32h)_)|q?9vws)r+=5u)1YNftF5mknwfd*%jXA2TeP}Z zQ!m?xJ3?9LpPM?_A3$hQ1QxNbR&}^m z!F999s?p^ak#C4NM_x2p9FoXWJ$>r?lJ)2bG)sX{gExgLA2s5RwHV!h6!C~d_H||J z>9{E{mEv{Z1z~65Vix@dqM4ZqiU|!)eWX$mwS5mLSufxbpBqqS!jShq1bmwCR6 z4uBri7ezMeS6ycaXPVu(i2up$L; zjpMtB`k~WaNrdgM_R=e#SN?Oa*u%nQy01?()h4A(jyfeNfx;5o+kX?maO4#1A^L}0 zYNyIh@QVXIFiS0*tE}2SWTrWNP3pH}1Vz1;E{@JbbgDFM-_Mky^7gH}LEhl~Ve5PexgbIyZ(IN%PqcaV@*_`ZFb=`EjspSz%5m2E34BVT)d=LGyHVz@-e%9Ova*{5@RD;7=Ebkc2GP%pIP^P7KzKapnh`UpH?@h z$RBpD*{b?vhohOKf-JG3?A|AX|2pQ?(>dwIbWhZ38GbTm4AImRNdv_&<99ySX;kJ| zo|5YgbHZC#HYgjBZrvGAT4NZYbp}qkVSa;C-LGsR26Co+i_HM&{awuO9l)Ml{G8zD zs$M8R`r+>PT#Rg!J(K6T4xHq7+tscU(}N$HY;Yz*cUObX7J7h0#u)S7b~t^Oj}TBF zuzsugnst;F#^1jm>22*AC$heublWtaQyM6RuaquFd8V#hJ60Z3j7@bAs&?dD#*>H0SJaDwp%U~27>zdtn+ z|8sZzklZy$%S|+^ie&P6++>zbrq&?+{Yy11Y>@_ce@vU4ZulS@6yziG6;iu3Iu`M= zf3rcWG<+3F`K|*(`0mE<$89F@jSq;j=W#E>(R}2drCB7D*0-|D;S;(;TwzIJkGs|q z2qH{m_zZ+el`b;Bv-#bQ>}*VPYC|7`rgBFf2oivXS^>v<&HHTypvd4|-zn|=h=TG{ z05TH2+{T%EnADO>3i|CB zCu60#qk`}GW{n4l-E$VrqgZGbI zbQW690KgZt4U3F^5@bdO1!xu~p@7Y~*_FfWg2CdvED5P5#w#V46LH`<&V0{t&Ml~4 zHNi7lIa+#i+^Z6EnxO7KJQw)wD)4~&S-Ki8)3=jpqxmx6c&zU&<&h%*c$I(5{1HZT zc9WE}ijcWJiVa^Q^xC|WX0habl89qycOyeViIbi(LFsEY_8a|+X^+%Qv+W4vzj>`y zpuRnjc-eHNkvXvI_f{=*FX=OKQzT?bck#2*qoKTHmDe>CDb&3AngA1O)1b}QJ1Tun z_<@yVEM>qG7664Pa@dzL@;DEh`#?yM+M|_fQS<7yv|i*pw)|Z8)9IR+QB7N3v3K(wv4OY*TXnH&X0nQB}?|h2XQeGL^q~N7N zDFa@x0E(UyN7k9g%IFq7Sf+EAfE#K%%#`)!90_)Dmy3Bll&e1vHQyPA87TaF(xbqMpDntVp?;8*$87STop$!EAnGhZ?>mqPJ(X zFsr336p3P{PpZCGn&^LP(JjnBbl_3P3Kcq+m}xVFMVr1zdCPJMDIV_ki#c=vvTwbU z*gKtfic&{<5ozL6Vfpx>o2Tts?3fkhWnJD&^$&+Mh5WGGyO7fG@6WDE`tEe(8<;+q z@Ld~g08XDzF8xtmpIj`#q^(Ty{Hq>t*v`pedHnuj(0%L(%sjkwp%s}wMd!a<*L~9T z9MM@s)Km~ogxlqEhIw5(lc46gCPsSosUFsgGDr8H{mj%OzJz{N#;bQ;KkV+ZWA1(9 zu0PXzyh+C<4OBYQ0v3z~Lr;=C@qmt8===Ov2lJ1=DeLfq*#jgT{YQCuwz?j{&3o_6 zsqp2Z_q-YWJg?C6=!Or|b@(zxTlg$ng2eUQzuC<+o)k<6^9ju_Z*#x+oioZ5T8Z_L zz9^A1h2eFS0O5muq8;LuDKwOv4A9pxmOjgb6L*i!-(0`Ie^d5Fsgspon%X|7 zC{RRXEmYn!5zP9XjG*{pLa)!2;PJB2<-tH@R7+E1cRo=Wz_5Ko8h8bB$QU%t9#vol zAoq?C$~~AsYC|AQQ)>>7BJ@{Cal)ZpqE=gjT+Juf!RD-;U0mbV1ED5PbvFD6M=qj1 zZ{QERT5@(&LQ~1X9xSf&@%r|3`S#ZCE=sWD`D4YQZ`MR`G&s>lN{y2+HqCfvgcw3E z-}Kp(dfGG?V|97kAHQX+OcKCZS`Q%}HD6u*e$~Ki&Vx53&FC!x94xJd4F2l^qQeFO z?&JdmgrdVjroKNJx64C!H&Vncr^w zzR#XI}Dn&o8jB~_YlVM^+#0W(G1LZH5K^|uYT@KSR z^Y5>^*Bc45E1({~EJB(t@4n9gb-eT#s@@7)J^^<_VV`Pm!h7av8XH6^5zO zOcQBhTGr;|MbRsgxCW69w{bl4EW#A~);L?d4*y#j8Ne=Z@fmJP0k4{_cQ~KA|Y#_#BuUiYx8y*za3_6Y}c=GSe7(2|KAfhdzud!Zq&}j)=o4 z7R|&&oX7~e@~HmyOOsCCwy`AR+deNjZ3bf6ijI_*tKP*_5JP3;0d;L_p(c>W1b%sG zJ*$wcO$ng^aW0E(5ldckV9unU7}OB7s?Wx(761?1^&8tA5y0_(ieV>(x-e@}1`lWC z-YH~G$D>#ud!SxK2_Iw{K%92=+{4yb-_XC>ji&j7)1ofp(OGa4jjF;Hd*`6YQL+Jf zffg+6CPc8F@EDPN{Kn96yip;?g@)qgkPo^nVKFqY?8!=h$G$V=<>%5J&iVjwR!7H0 z$@QL|_Q81I;Bnq8-5JyNRv$Y>`sWl{qhq>u+X|)@cMlsG!{*lu?*H`Tp|!uv z9oEPU1jUEj@ueBr}%Y)7Luyi)REaJV>eQ{+uy4uh0ep0){t;OU8D*RZ& zE-Z-&=BrWQLAD^A&qut&4{ZfhqK1ZQB0fACP)=zgx(0(o-`U62EzTkBkG@mXqbjXm z>w`HNeQM?Is&4xq@BB(K;wv5nI6EXas)XXAkUuf}5uSrZLYxRCQPefn-1^#OCd4aO zzF=dQ*CREEyWf@n6h7(uXLNgJIwGp#Xrsj6S<^bzQ7N0B0N{XlT;`=m9Olg<>KL}9 zlp>EKTx-h|%d1Ncqa=wnQEuE;sIO-f#%Bs?g4}&xS?$9MG?n$isHky0caj za8W+B^ERK#&h?(x)7LLpOqApV5F>sqB`sntV%SV>Q1;ax67qs+WcssfFeF3Xk=e4^ zjR2^(%K1oBq%0%Rf!y&WT;lu2Co(rHi|r1_uW)n{<7fGc-c=ft7Z0Q}r4W$o$@tQF#i?jDBwZ8h+=SC}3?anUp3mtRVv9l#H?-UD;HjTF zQ*>|}e=6gDrgI9p%c&4iMUkQa4zziS$bO&i#DI$Wu$7dz7-}XLk%!US^XUIFf2obO zFCTjVEtkvYSKWB;<0C;_B{HHs~ax_48^Cml*mjfBC5*7^HJZiLDir(3k&BerVIZF8zF;0q80eX8c zPN4tc+Dc5DqEAq$Y3B3R&XPZ=AQfFMXv#!RQnGecJONe0H;+!f^h5x0wS<+%;D}MpUbTNUBA}S2n&U59-_5HKr{L^jPsV8B^%NaH|tUr)mq=qCBv_- ziZ1xUp(ZzxUYTCF@C}To;u60?RIfTGS?#JnB8S8@j`TKPkAa)$My+6ziGaBcA@){d z91)%+v2_ba7gNecdj^8*I4#<11l!{XKl6s0zkXfJPxhP+@b+5ev{a>p*W-3*25c&} zmCf{g9mPWVQ$?Sp*4V|lT@~>RR)9iNdN^7KT@>*MU3&v^3e?=NTbG9!h6C|9zO097 zN{Qs6YwR-5$)~ z`b~qs`a1Dbx8P>%V=1XGjBptMf%P~sl1qbHVm1HYpY|-Z^Dar8^HqjIw}xaeRlsYa zJ_@Apy-??`gxPmb`m`0`z`#G7*_C}qiSZe~l2z65tE~IwMw$1|-u&t|z-8SxliH00 zlh1#kuqB56s+E&PWQ7Nz17?c}pN+A@-c^xLqh(j;mS|?>(Pf7(?qd z5q@jkc^nA&!K-}-1P=Ry0yyze0W!+h^iW}7jzC1{?|rEFFWbE^Yu7Y}t?jmP-D$f+ zmqFT7nTl0HL|4jwGm7w@a>9 zKD)V~+g~ysmei$OT5}%$&LK8?ib|8aY|>W3;P+0B;=oD=?1rg+PxKcP(d;OEzq1CKA&y#boc51P^ZJPPS)z5 zAZ)dd2$glGQXFj$`XBBJyl2y-aoBA8121JC9&~|_nY>nkmW>TLi%mWdn-^Jks-Jv| zSR*wij;A3Fcy8KsDjQ15?Z9oOj|Qw2;jgJiq>dxG(2I2RE- z$As!#zSFIskebqU2bnoM^N<4VWD2#>!;saPSsY8OaCCQqkCMdje$C?Sp%V}f2~tG5 z0whMYk6tcaABwu*x)ak@n4sMElGPX1_lmv@bgdI2jPdD|2-<~Jf`L`@>Lj7{<-uLQ zE3S_#3e10q-ra=vaDQ42QUY^@edh>tnTtpBiiDVUk5+Po@%RmuTntOlE29I4MeJI?;`7;{3e4Qst#i-RH6s;>e(Sc+ubF2_gwf5Qi%P!aa89fx6^{~A*&B4Q zKTF|Kx^NkiWx=RDhe<{PWXMQ;2)=SC=yZC&mh?T&CvFVz?5cW~ritRjG2?I0Av_cI z)=s!@MXpXbarYm>Kj0wOxl=eFMgSMc?62U#2gM^li@wKPK9^;;0_h7B>F>0>I3P`{ zr^ygPYp~WVm?Qbp6O3*O2)(`y)x>%ZXtztz zMAcwKDr=TCMY!S-MJ8|2MJCVNUBI0BkJV6?(!~W!_dC{TS=eh}t#X+2D>Kp&)ZN~q zvg!ogxUXu^y(P*;Q+y_rDoGeSCYxkaGPldDDx)k;ocJvvGO#1YKoQLHUf2h_pjm&1 zqh&!_KFH03FcJvSdfgUYMp=5EpigZ*8}7N_W%Ms^WSQ4hH`9>3061OEcxmf~TcYn5_oHtscWn zo5!ayj<_fZ)vHu3!A!7M;4y1QIr8YGy$P2qDD_4+T8^=^dB6uNsz|D>p~4pF3Nrb6 zcpRK*($<~JUqOya#M1=#IhOZ zG)W+rJS-x(6EoVz)P zsSo>JtnChdj9^);su%SkFG~_7JPM zEDz3gk2T7Y%x>1tWyia|op(ilEzvAujW?Xwlw>J6d7yEi8E zv30riR|a_MM%ZZX&n!qm0{2agq(s?x9E@=*tyT$nND+{Djpm7Rsy!+c$j+wqMwTOF zZL8BQ|I`<^bGW)5apO{lh(Asqen?_U`$_n0-Ob~Yd%^89oEe%9yGumQ_8Be+l2k+n zCxT%s?bMpv|AdWP7M1LQwLm|x+igA~;+iK-*+tClF&ueX_V}>=4gvZ01xpubQWXD_ zi?Un>&3=$fu)dgk-Z;0Ll}HK5_YM->l^Czrd0^cJ))(DwL2g3aZuza7ga9^|mT_70 z))}A}r1#-(9cxtn<9jGRwOB4hb9kK@YCgjfOM-90I$8@l=H^`K$cyhe2mTM|FY9vW znH~h)I<_aa#V1xmhk?Ng@$Jw-s%a!$BI4Us+Df+?J&gKAF-M`v}j`OWKP3>6`X`tEmhe#y*(Xm$_^Ybbs=%;L7h zp7q^C*qM}Krqsinq|WolR99>_!GL#Z71Hhz|IwQQv<>Ds09B?Je(lhI1(FInO8mc} zl$RyKCUmfku+Cd^8s0|t+e}5g7M{ZPJQH=UB3(~U&(w#Bz#@DTDHy>_UaS~AtN>4O zJ-I#U@R($fgupHebcpuEBX`SZ>kN!rW$#9>s{^3`86ZRQRtYTY)hiFm_9wU3c`SC8 z-5M%g)h}3Pt|wyj#F%}pGC@VL`9&>9P+_UbudCkS%y2w&*o})hBplrB*@Z?gel5q+ z%|*59(sR9GMk3xME}wd%&k?7~J)OL`rK#4d-haC7uaU8-L@?$K6(r<0e<;y83rK&` z3Q!1rD9WkcB8WBQ|WT|$u^lkr0UL4WH4EQTJyk@5gzHb18cOte4w zS`fLv8q;PvAZyY;*Go3Qw1~5#gP0D0ERla6M6#{; zr1l?bR}Nh+OC7)4bfAs(0ZD(axaw6j9v`^jh5>*Eo&$dAnt?c|Y*ckEORIiJXfGcM zEo`bmIq6rJm`XhkXR-^3d8^RTK2;nmVetHfUNugJG(4XLOu>HJA;0EWb~?&|0abr6 zxqVp@p=b3MN^|~?djPe!=eex(u!x>RYFAj|*T$cTi*Sd3Bme7Pri1tkK9N`KtRmXf zZYNBNtik97ct1R^vamQBfo9ZUR@k*LhIg8OR9d_{iv#t)LQV91^5}K5u{eyxwOFoU zHMVq$C>tfa@uNDW^_>EmO~WYQd(@!nKmAvSSIb&hPO|}g-3985t?|R&WZXvxS}Kt2i^eRe>WHb_;-K5cM4=@AN1>E&1c$k!w4O*oscx(f=<1K6l#8Exi)U(ZiZ zdr#YTP6?m1e1dOKysUjQ^>-MR={OuD00g6+(a^cvcmn#A_%Fh3Of%(qP5nvjS1=(> z|Ld8{u%(J}%2SY~+$4pjy{()5HN2MYUjg1X9umxOMFFPdM+IwOVEs4Z(olynvT%G) zt9|#VR}%O2@f6=+6uvbZv{3U)l;C{tuc zZ{K$rut=eS%3_~fQv^@$HV6#9)K9>|0qD$EV2$G^XUNBLM|5-ZmFF!KV)$4l^KVj@ zZ4fI}Knv*K%zPqK77}B-h_V{66VrmoZP2>@^euu8Rc}#qwRwt5uEBWcJJE5*5rT2t zA4Jpx`QQ~1Sh_n_a9x%Il!t1&B~J6p54zxAJx`REov${jeuL8h8x-z=?qwMAmPK5i z_*ES)BW(NZluu#Bmn1-NUKQip_X&_WzJy~J`WYxEJQ&Gu7DD< z&F9urE;}8S{x4{yB zaq~1Zrz%8)<`prSQv$eu5@1RY2WLu=waPTrn`WK%;G5(jt^FeM;gOdvXQjYhax~_> z{bS_`;t#$RYMu-;_Dd&o+LD<5Afg6v{NK?0d8dD5ohAN?QoocETBj?y{MB)jQ%UQ}#t3j&iL!qr@#6JEajR3@^k5wgLfI9S9dT2^f`2wd z%I#Q*@Ctk@w=(u)@QC}yBvUP&fFRR-uYKJ){Wp3&$s(o~W7OzgsUIPx0|ph2L1(r*_Pa@T@mcH^JxBjh09#fgo|W#gG7}|)k&uD1iZxb0 z@|Y)W79SKj9sS&EhmTD;uI#)FE6VwQ*YAr&foK$RI5H8_ripb$^=;U%gWbrrk4!5P zXDcyscEZoSH~n6VJu8$^6LE6)>+=o#Q-~*jmob^@191+Ot1w454e3)WMliLtY6~^w zW|n#R@~{5K#P+(w+XC%(+UcOrk|yzkEes=!qW%imu6>zjdb!B#`efaliKtN}_c!Jp zfyZa`n+Nx8;*AquvMT2;c8fnYszdDA*0(R`bsof1W<#O{v%O!1IO4WZe=>XBu_D%d zOwWDaEtX%@B>4V%f1+dKqcXT>m2!|&?}(GK8e&R=&w?V`*Vj)sCetWp9lr@@{xe6a zE)JL&;p}OnOO}Nw?vFyoccXT*z*?r}E8{uPtd;4<(hmX;d$rqJhEF}I+kD+m(ke;J z7Cm$W*CSdcD=RYEBhedg>tuT{PHqwCdDP*NkHv4rvQTXkzEn*Mb0oJz&+WfWIOS4@ zzpPJ|e%a-PIwOaOC7uQcHQ-q(SE(e@fj+7oC@34wzaBNaP;cw&gm{Z8yYX?V(lIv5 zKbg*zo1m5aGA4^lwJ|bAU=j3*d8S{vp!~fLFcK8s6%Ng55_qW_d*3R%e=34aDZPfD z&Le39j|ahp6E7B0*9OVdeMNrTErFatiE+=Z!XZ^tv0y%zZKXRTBuPyP&C{5(H?t)S zKV24_-TKpOmCPzU&by8R1Q5HY^@IDoeDA9MbgizgQ*F1Er~HVmvSU>vx}pZVQ&tr| zOtZl8vfY2#L<)gZ=ba&wG~EI*Vd?}lRMCf+!b5CDz$8~be-HKMo5omk$w7p4`Mym*IR8WiTz4^kKcUo^8Hkcsu14u z`Pkg`#-Y^A%CqJ0O@UF|caAulf68@(zhqp~YjzInh7qSN7Ov%Aj(Qz%{3zW|xubJ- ztNE_u_MO7Q_585r;xD?e=Er}@U1G@BKW5v$UM((eByhH2p!^g9W}99OD8VV@7d{#H zv)Eam+^K(5>-Ot~U!R$Um3prQmM)7DyK=iM%vy>BRX4#aH7*oCMmz07YB(EL!^%F7?CA#>zXqiYDhS;e?LYPTf(bte6B ztrfvDXYG*T;ExK-w?Knt{jNv)>KMk*sM^ngZ-WiUN;=0Ev^GIDMs=AyLg2V@3R z7ugNc45;4!RPxvzoT}3NCMeK$7j#q3r_xV(@t@OPRyoKBzHJ#IepkDsm$EJRxL)A* zf{_GQYttu^OXr$jHQn}zs$Eh|s|Z!r?Yi+bS-bi+PE*lH zo|6ztu6$r_?|B~S#m>imI!kQP9`6X426uHRri!wGcK;J;`%sFM(D#*Le~W*t2uH`Q z(HEO9-c_`mhA@4QhbW+tgtt9Pzx=_*3Kh~TB$SKmU4yx-Ay&)n%PZPKg#rD4H{%Ke zdMY@rf5EAFfqtrf?Vmk&N(_d-<=bvfOdPrYwY*;5%j@O6@O#Qj7LJTk-x3LN+dEKy+X z>~U8j3Ql`exr1jR>+S4nEy+4c2f{-Q!3_9)yY758tLGg7k^=nt<6h$YE$ltA+13S<}uOg#XHe6 zZHKdNsAnMQ_RIuB;mdoZ%RWpandzLR-BnjN2j@lkBbBd+?i ze*!5mC}!Qj(Q!rTu`KrRRqp22c=hF6<^v&iCDB`n7mHl;vdclcer%;{;=kA(PwdGG zdX#BWoC!leBC4);^J^tPkPbIe<)~nYb6R3u{HvC!NOQa?DC^Q`|_@ zcz;rk`a!4rSLAS>_=b@g?Yab4%=J3Cc7pRv8?_rHMl_aK*HSPU%0pG2Fyhef_biA!aW|-(( z*RIdG&Lmk(=(nk28Q1k1Oa$8Oa-phG%Mc6dT3>JIylcMMIc{&FsBYBD^n@#~>C?HG z*1&FpYVvXOU@~r2(BUa+KZv;tZ15#RewooEM0LFb>guQN;Z0EBFMFMZ=-m$a3;gVD z)2EBD4+*=6ZF?+)P`z@DOT;azK0Q4p4>NfwDR#Pd;no|{q_qB!zk1O8QojE;>zhPu z1Q=1z^0MYHo1*``H3ex|bW-Zy==5J4fE2;g6sq6YcXMYK5i|S^9(OSw#v!3^!EB<% zZF~J~CleS`V-peStyf*I%1^R88D;+8{{qN6-t!@gTARDg^w2`uSzFZbPQ!)q^oC}m zPo8VOQxq2BaIN`pAVFGu8!{p3}(+iZ`f4ck2ygVpEZMQW38nLpj3NQx+&sAkb8`}P3- zc>N*k6AG?r}bfO6_vccTuKX+*- z7W4Q#2``P0jIHYs)F>uG#AM#I6W2)!Nu2nD5{CRV_PmkDS2ditmbd#pggqEgAo%5oC?|CP zGa0CV)wA*ko!xC7pZYkqo{10CN_e00FX5SjWkI3?@XG}}bze!(&+k2$C-C`6temSk z_YyYpB^wh3woo`B zrMSTd4T?(X-jh`FeO76C(3xsOm9s2BP_b%ospg^!#*2*o9N;tf4(X9$qc_d(()yz5 zDk@1}u_Xd+86vy5RBs?LQCuYKCGPS;E4uFOi@V%1JTK&|eRf~lp$AV#;*#O}iRI2=i3rFL8{ zA^ptDZ0l6k-mq=hUJ0x$Y@J>UNfz~I5l63H(`~*v;qX`Z{zwsQQD-!wp0D&hyB8&Z z7$R07gIKGJ^%AvQ{4KM0edM39iFRx=P^6`!<1(s0t|JbB2tXs_B_IH9#ajH0C=-n+ z`nz`fKMBKLlf?2AC+|83M+0rqR%uhNGD;uKA6jOjp7YDe^4%0fRB<^bcjlS2KF~F; zu09wh1x0&4pG&76M;x8$u`b134t=dEPBn6PV|X29<#T4F1mxGF*HOgiWU8tN@cguI z_F@o+XL7FJztR63wC|j4x_DANzcX94r7Iz-O2x$({&qd*mdLG=-Rv)uZ}UlMR+F&q zU}=lkfb0p1>1Ho){o$@}mSKIV;h*$AND7~Dl)QzpFBlSM99Kx+F7GsVK5xcR? z_4Q(Z%cgk8ST}U;;=!LwyZVu^S$>B-Waeik%wzcKTIqeX=0FP(TGQ=nxi=dsS5BYF zl@?}NT!Y!Iyos^@v7XWXA{_bV~1lxz7gC?xuXxy0_?GaN!AhRRM5>)^t%&ODd;@HN5L{MD3 zc>i2keQZVm#?NrDwbfd}_<*5^U&w0zv~n-y8=GGN-!=_`FU^cM8oVCWRFxw?BM^YD zi=Vxz4q|jwPTg+?q7_XI)-S@gQkh>w0ZUB}a{^ z_i;`Y(~fvpI!vmW*A^|P7(6+@C4UeL2WATf{P1?H5rk`5{TL zcf!CgP6Mi{MvjZS)rfo7JLDZK7M7ANd$3`{j9baD*7{#Zu-33fOYUzjvtKzR2)_T1I1s7fe&z|=)QkX;=`zX8!Byw-veM#yr;|wjO^II>!B*B z0+w%;0(=*G3V@88t!}~zx)&do(uF=073Yeh*fEhZb3Vn>t!m(9p~Y_FdV3IgR)9eT z)~e9xpI%2deTWyHlXA(7srrfc_`7ACm!R>SoIgkuF8 z!wkOhrixFy9y@)GdxAntd!!7@=L_tFD2T5OdSUO)I%yj02le`qeQ=yKq$g^h)NG;# za(0J@#VBi^5YI|QI=rq{KlxwGabZJ0dKmfWDROkcM}lUN$@DV`K7fU?8CP2H23QPi zG?YF*=Vn=kTK*#Y_{AQN&oLju|0#E=fx%YVh>S{puu&K$b;BN*jIo@VYhqPiJPzzM>#kxoy0vW9i;ne2_BIG0zyRFp<3M(iY(%*M_>q0ulV2K}Tg zkG{EWKS{i%4DUuHi%DVKy%e+Q!~Uf`>>F6NgD{{I8~nO4!VgOvtFOc7(O)X`|7n*f zxBa4CJ-v9fUUH+`7sPVvpM_C*udZ@OTGTzx56QM5y~OlrZc&w9=)B?nmd@keRn+^= zvm~4sa5987LFDnU{(N|N zJAR8H@}p1fC+H(yTI4n#%~TbImMpuqYn9cQ<0QQ%=PzZItLkC*ef9WJUvfITKWh#D zc#__8`4am9%#NslIUw+<82#SR8AYG|woLfBg#!-&dqq}@P>|I0%lbdy0lSMmNe+}o zj0zZuFr6Wb?Y{Qy-S=|r`bdrDmhnmvkRnkdn`YCleU>Q$=je}LGhh>_QAj6aa_0Oc z%Swsmui;IRx7bN*=AAS@5yW&Y2hy;3&|HAiA8}!HT6!Z!RVn~MZg`RmI6&%#tBZDx zfD+y@Z~NWlk*4l13vmt3AK2wP!fQlnBbECL>?p)F?T)<`w&QN>cP_V>r7UTcsTaaP zTOb$f!P@zf$6>890NVKbIkG8rE?9!Y97sMSZjfF?A zYR8lp`LMoz~O?iaZN;gcX;LC-%Ia*R%A&SLx!YIf29?P+=XAAojK8!^OU*@?R&DK!#G_lsn!#;S375uZ&B0HH1|BO0R90$U>qs zSvHv>H~mAgNCcjo-e+;RjY6B9NCbQrZ|BHjTkehaU<9CSkdd>Vl*ifA2LNOP&R2Qdy3k3-TQ+ zbq=#vI43x`s=%~cGyN&y4Y!FxhwgDe@i6uv8^BLL&3z*SO=D0aLjih?gY4-9uWp5or)H+v~w6n5X#F-I52z=Z_p4JB(;M| zeaVFhuR2|3UD2MzVc~^nSoD2(dD#uL_1PdnIxeA{V5n`#3xf1Zx@4lw(DsQ&H$h zw#%3O<1173hjg2_nhKi!d1ej=h7y`hVjCNB6|HTnx>SWuCE-kgTnfT+YGX4_Lun({ zDv2`>d3vrS)tTf7ps_vvh!Cx^e1BFuWnEAh0(7fkNk|-3oU|iRWdsC6U)?Raft~HN z;^$U}vZK5O8|LV$>6X5T(uYkblv{zwPxnQBh(BQ5tA~J!vGiAMYP^_ki~pkIxDfOZ zUJDwq%O~WueeV6%uN<54&u*c&E4y431cklBNrb06zGOOy4XNT~JS-q(s6@)F@ovbe ze`fial(O4(-su%6@@1+V0MsdLLMyE8;)nou(7}czU(5ASaZYDT(kUZ0L(&g$nF^n9 z9-Pi`ZZLX&)^*M6As4_2Mmc9S7OT)F8KkL2NJ)KJcnCuWU=Wy402A&45#Q9Id~BBH z0cY*xlv!uXzKrXLH!xQu(OtJvEj|0-DmRj1vjFz{c*I4$Pe(+_V|^b~S!0xm{8lq= zZv)@NlcyL3Xdz+*|L137F7y6L-2VsrKw=q^S>F6i%<{Fr8zk06$Ay-(!L$fY@7mcng!2}L0t zgi|KxfB63Xtk_Q8#ZPipQ@!zgjdpEIbK_?q17Hoi4Eiyun$hrc>T(7pOLVLQE=lgGwA+A308p& z7@=09(|$>eLy5gLe{*|3b(M;1n;C^~v?o88jYib48eR4$QGsBFzd}3QuwO^_XE(=B zq+hMi0UFC|dB{LCwch7;zYT=NK})O%sgi0k#yV;My@24^B1+CuZmYOh0^b)5Ba_)) zC%i#_Iev&nsu%I|1N5=MVc#PrlunKAs&hY|3s5;@}`>sB>}gzxuB zB=2vrRyB3uiyW(hkDUNe1@&(b`;>ZvGgw|@s{zVC#_`HXIN_^J@Etb zA7A+F?ot37T{<-vTy8h&b3e+WKHE1oh;pUQrN4yRRrx?mT_9jRa2i4l1fUnLW^Cbl z!I1>VzyFe?VELWWhM?@?t-YPZkD-Qjo@bC2(o#ZtZmr{KZsdFWItV`rs$gp{724@C zL8K5}E0+DHcWcL^{BGei4>@J-3%a#$y6;I}=upc};-NDv-z#kPX26ylOpH)Ov1uU{ zkLj6oiH6l_s+B~_z;|Jc2oi?naS7#3H63~~lWj4rUnd=fCnKdkik<@R&kch9q##G{ z4u!%=rlM~Yp3jk*t8}1B`Sv6<%Z^}~1e@aq zg|JQ`QO2pSjAm-g*?IrNc$^~sIrNBo2$m|Sxanr?Mfs>2@Auu49 zGXlsS<9XS1&8h(dD*Hl&5HBDG!^pJ*lkau_Ur+7`7z;rcs$hT4we?3bT=7Fe<>{5( z2m2(c+hUz2BTHM8dCe*Z3XX&Av;b~a=$6EF>&^E8%nyxO@m_n!q&XD^A{SRjRZQ0L~qDeC=j&0$j6=LNIz@`ni^>ch|sv}^6 zlm>?28yPl@WmDPR?Y-A9X{U9Dv_IsbXJnzKCjkRksLOg#42uG2mE_acbTQ4)J|1V>%U@K(FP3AYhL0U zdeOCPN1qLv!|#c=p!_+%VNV(GHt`RuLRV^vz<5tt-r)yOK**kUWPspVAf|}ZL{LS= z@k(@@!P&W!>wwe`x{+GrFSWhHov7hu?{KuuT%kl#WO@*WX$i_@retlhQBj++SVNCx z5$78LxP>Z=^aJ)D280r_jj=zFfMJFXCIe^B{~V@d1rl_F(qo&AB4bC-vYL>x2jSKX zpuTG-6kgp3e^T&+dtV*i6a~)v@n?n*MffN59y}<0djUX zt27R+SE#hp8bzc#;rk$jw3r4)Q@eI$*`_)=Pvge8@8|8>H3X)<9YX6cXa=ii#Le;(qKm@%0-7$>2ShnYc`j#zJ7gu_FE^?uAkL|H)UIH#gPu^40!6^J=^ zr`}iwa^!4tzW~vOMZAaKF>*8A{^8m$i(VK)>?=#l`xrVe>wseSvM_aF zATNkY>kM_P3?1kE`uIq#mvr-wuTgUH0N<&JhF=(E9%^NS*HLm!4GZ4_XI zL=R5tlG5Mk_1rPfg)sk^llFuKPMPBhuU|L5q#yP_mzxp1o&pAzi-X31sgFpIHn@($ z_>=`AB5(8tP6p2zS5VEvH5J$M` z_much3>S7t3Yo`Yx!>83-hW9LYzDKP?mKdkD#QAK8*M((sx{eBQdrR<^3ZhFP81+& zBnJMUefQyNBji~$5d88Wfw1Lv59aJN9t2!pABLg;ewJ#LXL-10;QcJl+Y4Mtngb)k6JZlCf)3uD_u)J3sYyN;NN5hNbg$%W!i-GK%e&!Us)2IExWSss$YG(hm3kJ-h%yD z>8q^n$+4I(_y_mbT{du4P%h1j3oSpjhY97{+IZ`aA4ug!vNJ6*p?<2H(2w+GD3j$I z1TUXGyNzdf>_yB3grP~FZUs<2Quw;eEi*7s(-MiIkQ%@J^+WGdQvYSUN+TRiD-xto zJ=OUU+kxGYc!HCLNbCvR4lGTp~#L;DFzGd-#gJe*xf(P3hDQz|y)?b9mwU3WUVnpcqXM<@w%r-k*Wr^gzAv)8T^sqA=Ye z!7qy&exJmAcAt~CwS#@yNmjr8*T*!A6w4~E*ibaLRs0CFo(;R3=ODhDt6zWNodmo0 zXx&bT$6&+5c>a|WJ)F4G-^GjY0H#*tY=UNyYr_q5fsrcjk(c^~e*7Lf`!Jd`)p412 zn|^*hV= zFI4UbwA%X@smDd$cQOiMC%jfitTxTb+#`9`G=2rJDfK!E=5ra|So>lc{X1$~w28i+ z4p&cTGwZ#5VueiXS9O8#;RR$yg7tL9!^)Sz&pZYIzlSh}0}V{LxL$Cu%B4U5_}k}- zm~|CsD<076x@<>m=6w6N?WaThIBP`!u{-;WF)xc=2otx*lwf|5+MkdJePjh(B z9SH+%cHGCMAXNxB{_3^otDWdsV7Ob6n{0 z+&!(;iaHOX__5z_$Qk{%xYV%Ig@7iokGBwR`3642ZP#H#v9QGbWl8<|MS*=@qO@Uj z6+SZ_v9`1paUe5tFN~v(b#J3a_Lx0+;r9giZIx-A5TxdbG>xi#AZ5_z1V}B^n)sxT zz49}eK7EWb6wR!6-qQOrHQHkUvshvq%=G2d&@(#XM*Am1;WbnJ{X_!a{ZkphD$^TQ z=Iskb&}=lBm(RHiwJoGg`*NiQ6#RB$T#LF+>#ef;Jne&MxKPX!#r`&TVEFsp2jnNx>dClzpcPy&G&13a_<0qaR3i+k212~hoQ z8nMk{JP-t04I{GW5gUBqcJW-jSMrlw}>p)ptx?WKuCUV77taMiV zHok9V=6yv+Uts@fMY&A}amC=!Yj}eL@=e%XJ#%?agkt1jWF+10{(E9mHLDa>Ll7Vj zG=3cp%ljIB-6pC}6&`xJ*6WCP|IlglLWJ^?yviI8Ve)?V_i4%n;olzny62_`-|IGi z^=}p_O>Z8M;c4|RExu70E7ePW(HWVS&E$+LL6xSQgB`QfMQJ|4pCTFowA39p5P-|$ zUtM_H2HnP8_RoS~Vwk(FhbG zH41licj%=0a;Ln2STFBvU}Ne&O&%8bYKj!h1FA#sNM`232fX|U3QPp#3C?mN2;hE9 z;)!@5ixSPl<89^7gwhHc2YAX1KJK$#*3`KOMIQ253q7-*RJ5k)zp9GBO|Ga~X*^}US5oN@aG&waHV%vi~r{t^`ptTxb zL}q1W8S7*>7oWwvgV4uFLZ(@k`R*=LO_|Gu`prs~!WQXj-NLIa^2(7IHg>BG^N zc|i{-^=&Cek9dkJFQys|sjG9i>LLz|;yCv{^1i%c*h>8zF91kLvS9HBQi~ZU!JL`B zK8N+U0fr1*6??Ium)AF!6tc1eGhXIYL6IRT7rmKp7+>?%5Pa6zC5)KY$ycF0ZJ`G5nEQDG100U-jLkH8^UE4g6wq?sg%pP=-$&G#bcN`^?w3a6 z((s$6eRKcSEIslW-kk5Qi|5Mg-(xdLF}PxxVh$PuO}#aR6pW1kV4Af!Bqh*btXNNZ z>-4(IUl+L4dw+3LcpGut=qB45O+W)Q5?*zZ2A6rJcg`qkSvWA!j^r2mqKuCm6`Py? z@^T#Ux04HemPGd!Hs7NkZdVn1}8_j`o?)*OKZGS!`ff)gF zG?v-lj$wWNWCcw2Mg2o18D~1?3_b0XzdiKBNkYSDpcv@&kp0POmweJE2ZkIQ3B!a! zIgIoE+Xv?;34kyo^QYjZk+tEqZvq^#QG(OzX4~X+KtsoQoddTWUR(yo8R+ObEF1j<-syWOb>)JQ&Zbdu(sctU%Mt zW&YR0{ttY2TTXYZ?~WNU&cES1Z2q(7SrWDh``!J(JM+Nk$!hu&Y;(7E`ZNKTe0w+% zJc?Qnw2B+%UR}0;cB0Rufa(7-3FF}?629@LgTiEC&2uyL6NxexOp?AKT^aAx3gi(W zao>r>MPw0eQ3>IV02uLsC@>yK_epX6GRg4{NEL2wPPF9=*L2RV3yyK8DhuEK>rmmV z`&Q~#c`lgR&93TdOCja|ewOXmPNRh7!&dMT(1ett#iDr8HZW~VqWW@7fe9B6;7S+? zbC`d4@MEau&mKlOPKd>*10q0c{~^baw6!a*w^sY#0Xim{oOsiXiDOhbG&kl3c$$n1 zMRrD83&QucDSEcV*7LIp8VTA@F<%qe+_c`L;6on(>SjAU^}5c9!BCffT>$VQhe=)z z8(=Ej{5>jhmjB3{xDfj2R@VmHQ!CqjlO4KnuOmvHy3K#po$yp_V;p_MKjh1`(rzj6 zHW956k1yvntz{_g?Xbs`avK(IjlTnsu%htO;D7 z?J#x^EzuvVn&NA=!MEj7cwe5A-Z$Zk2LBZH$~%E* zf`((xH0?`}hs|HA%mtwfOEsZJxxrennkTYcwP#FKO5%Lpc^JXhSpV|ZH$Wr;`}`_( zIP==gd3LYyVtwD|*ZJGi{7~x8{=^bGVqu0RJ`n_BZH9+}kz%-4ZRsImi@rx%=ZEKs zcPnUXo6hbJV>fH;@1|bAHIe0ijYI*&kdT|HkDS$9No9 zCHo=*HWb~U+Dtzxr+Esao}6@|;Pf+E$ay0$kQp#s{wlw+7aIKbMdf`OqhoG*;Tco0 zjrP}VQG#Y2cJuqoJg&5({)S(BA}q9T1lGeWRyu=Je|)I!6a+aj!IP^1({)ZYe&x6w zt3a)Dq^TB+A7CdB0-}#z2Ur$W&h3YVw8==!xONy$uQmDWh-@15iEOt!q2m&?ZLA|w z8loSb(0}7y6Xu0?M5Uf4>VZGluB`wMf2oh;m)ghxVda>3m}4%V)r^0nVQ5V6f3>*) z0&VN!N0~GC^P}vj$`EDMZEmVV;N&RISY2C;$0;2(<{Lt&PKzqRByQdiEHGAbwtbS zPj`Da5%U6k1oEtVzI}QNw;!hT6F+~|@=c@$C4NtO@=xgP?|5MyZAyuCzcvq4rdAv@C06%gZ`9%I);R6UGiGJobfux+<0DLS&|MSG4UH z_~o{^^9>ixMg~mY!-@Fai{xaE4^;qy9iZN15Gbn5ZqHWf>Jc5Rv6(#n8`1NcCsdmG zab*dSXVPaE?)wCalD;$ivF%@nB#7D`@YG04p6ed9m}4iJW|pfVMLE<-c{=-8$e?cH zUdU#mCj4gb zZKA^b9p*9S(}8@tw~1RNPHr7tQr;P+-)D8|sq=*o)G%RGqt> zzP5yf`pVxb)I51D_G~Xp^GNK zVI6sAX)a9s)e{8N3?35YA6aQTXuyszK3ah~CemzA&CII#8F&F#KN41~8I^&_%}6MCNb{W87qAF`zj_Y^szhb> z3p3}KbOxotY|(lD=;)`fYE_*{S}x;f^SW#)SU&5X#o|-R|trpa|L5PS5aa0 zTHw8%SDSVtU4?vyrhnq+^@dgFS)|(y{~(4j%3UEiO-rBM9%`)8(dh33pMLiuurNY# z#10AsQ7%*0Cu_DSAU}P;X(JwA64~Q_^R%d_zSm^6Aux?Pn70PM>9EvLeOX z&w9c)pGmcL22;MO3C_B>=NC0RJpMp8?#ZUf=GWRvy z6RHq3B}=MGVg?9@iKFBpsvnkVh3{Vpp=`CcD=u~@ql{my|6?3ssi3mCOPnjI&E}VC zc@X+Yl>;;DNo0W0`0th!X{?luDhOC{E8N=?!w}K1{V=)+1={m(f`Oc|N=07>}3;z{-(A zm{JL=j?Sro5iecmE2-pWlRf(r%|HEQ7kgwQ9+kt=NBhtQI7OwcZ#3%$Uf%^r2nhjY zoQ08MfC%_X{O9~WcirMZMhn#z^ux4Erx-tf-6bHD)9eH&^L>^jvAd^9A^DCDs?0;k zkm7LE*KjP6`2d17MrQaaLqd_Rka}J$csvUec#hw78<=s(hyR>065~YCVCA9+#Q+; za(*L0IEw!r5P|@-;x33L$Lv9 zcuN8YG&g{<(SeJG18~(b!5yywSqQiLAX0;---;}mF5&b4lg|T?LwKREa{9YX_-zL@ZE?Zqi@HxK^2KO1>0LATu{te=T zprmHtY)bDVfxI1S}KBE7V zznP7KQ8HekWU#W6mw`dr-boV}pMQR==&5=Q5T=_q091jfc;R*jX#&=MQ%~@E@9^?`$v48ks<>(fI(F6L(5ppKy|$HWng*bKOb(4|cMUB&z$#ob#XV z5-mg)gmFIybZf=znm3ZPyUO^GJfxt0kmHjaTZ|sthsxXw&}Y)fOUSg=JhRSR^UjZ- zhqqb}Wsyw4zdnj6@#BAJa#-PdI4_dgafFXh85DsEQ_cT+5)XpZq$fZlBA_9UsE9r6 zEFec5?uqN@QhJ^IzwZrwl-5J`CmVPv{(YDTqEqWR^dI;5hXc~cxP%B3v&~s0`Ct89 z@S`i~a^c%V^N81dDT*ItFS*&IN;@O$EgzX0e7x&}TD=!zS}hTpezBLS>mdX(5< z)8DEI(-o_D)c-UX@dA1MuJ*yc>Hf4|`*B2S_O>w*-tbUwtiu`;W(Ud{HTty@(&x(T(F&;M zJ=?H>6`B7nf-90e8V`WSVp|0oEKB-P2M{}4ZDawzvM&a!y>`Y#jCsD%T_l``@ah(I2nJs~Q|%uSKu@k!m~*8B*IoA{*TgtF<(5sHCGG;n@NE%~Xt(G$^&<87u;}Na zx-8cq0g`uA(&RBFo=-4Y1GUZ<``Zw{xL4jfHkZw~%~wvtGueszcXt)_QwH8g!; z%s&3kSa~R$dO$-%L-)c@_hi7&>{6L_M>OZFkUQu;{sL_bUMStNrt{{&O(Wn~*zPOk zB>dnfszb29NSTf2pqIs68k|p-UrSrxgLHqi?3N-UFa!LHy9n1)=s>`yS+J{MEzS@ zNlfGtpma7kG&LR3JE@wB%rFA*h~~KitlO=IP)ZjN6dQLM6qsry zHkB#cyNh#n`)}bCrN1My*;k)^@>e4gJ`LJK?2)Pwp?4Tl4)4FA0(tvY+#1jOUM)xw zlMz4x-f@g^+yKUN`?Vu)|AwujArnM~Pa@y*Q9S8eS(u{-S%(Z5=R~pRl5ZGDjdqH% zC8rW&{##wOpU_oTIG4WXMk4&%2t1;lWcW5&!yxmOT*!hBcKyTqEcNoO+R2;Q?Yj+W z1-Y4?59fijz4(MIDwGe4-baYf08UCs;r|YefD-Md2ST;=cxwpgW=tR76-dQVAhn^= zG9Wk5lQk%jIR@KNU!UMp6@BfU;r+;y4VQ)D2!Il9HX%yW-9nOzV+m$YKzVaO`B8S7t z$!S2Mz`xw>V(RjE`0>bQp<0y&h~Y=M#jpy!#=dE>`=e_AjSZq6u!Dy1xJf~-7|0F! zPR9|n`e_7D2DIV2H(CESQ}hA>U>n|6`%z?YKEA~)BOVY%y=jPV zT=44R!L?J)736X#csn|lfBJ)o8ixaZclguWgrGO<`TN2FMfO}7;5}d+BlK0yTSH3* z4!=;5rOh85&2|x=46hkNaz?)U8&=bcfh=N_#8BNpZ2v$aVBo;sk^*X`v;4-LU;D>! zM*h12MxXIQy)SfAqE4;jY)wgnppazZkdNNVVF;(PLf^qK$FgY9+VFyBKE7UC|f z`R|?&egV11K3s$rJ6!GvoeW=jV*!-e(wA;x(2=d0E_e_%0x--0o8#~m^H1%AH5Z^B zn!TNPn927*bvaf0pt}zhK0o^V@WlGwwKo(*nQ|Q~4_;>~-8y20`HP>@UJa)3nEnGG z5Hwhs|FcmFG16ZVNb5hL`2Gc1{zWIMM{_OiKewV!hCi}U!VuE?s9wU-QbZ!)+Y^tS zGzp5OSi5iq6hmEr$w}&9DFgoB+i*`q`8TBi^MVS{SKEb8Aw%@K7@XCo(De2A`6%mf&a2#~y1N)+kJLD$1HCP!22)(U}xo2|j?WRzt(11j8Z_*v;P$R+Ug*Gy3VxV4K; zGGUGabnW*`Z}~`ydXL-l9e=GC$pY#z|63vy>E*m=$=j}iWP{sRTh0%H54`t>2xYH% zsk+M&u&pNgMCM@3e)Xc?jBWX-TIR_cQ1Z!RW7!B zBjZX=+^3}?SE)B+$EP+0oi1Fp5blDT?*}nsP>filqXH{ms zxU<$hetC`u)Wi+x|EKL-`y^#aQX+sDYIa{M;V%LqLrOk~lR>u0Q!+pyQSU4zY`?E^ z|5@)C)w6G_=i5YYC5SE_u(7hDNYr}uKT|@DSqF%S++lTIbIk^$a>{~0IH8KNFEy%+ zW#$&!ynpgNJh>6uR~?2c)ZMW+h0OKu231(7L_vETPaR+(P)Zy%0~yGm>E9?@@x!Jy z3PYgS}Q@b}x}E#F27@F+j}0=&Ql4gES&f8acMrPAVlVs9$97`FR))R5wI zc&}KFI1UIewh>3PkhnB7u zS3AT8_*|nexznG|Z*DU0c!K@jsI4J)5#DyNi#|e#`l1Vv1`1)*NVcy0LZ``aL0n8B zecupJ(rhq3u8bW0NIRhKYq$v1li+jp*4hfAd&wxYDE8vn1TQ7S@bTM|I2Ob z8vMOIxA7&_j{AKmD+O@EyXT`|dElt0pED^@IV0m)RPBUs*5jW60>>w1!@_G3aBKzG z_f(KfAPBk}-jQtR*Sroq!*3rbQ_m27e+YdzQjUb<_*k8vc_C)y!@cj5E>NxUhPu&g z@Z2<~esU`)ih+4opWe+K7sbN9n*9@n>#@n3*o z?xoROgDuvhq>jJ;Ve{6i<3roQNfgo5^4Q4(|GNExO2Dr7GjgA2zWuKp_K)K0R(6lv z!l$!zW-+T6mb3gQaAFviTQi{|*t%>{(mhTdy+y;Re4qT@kccy#{b z&zWy~kLO@>*WPj2k#H)|7L&gAJ37DmHQAme#@m;(Y8Nu^`D5vf8sZFW#+lA2!HK=( zJ)#hO6JD*`o~&c*&46d}g=Qj@SsoB5ikC z^1V8E+&<-OzuS_C`p5<<(A6fB`LXT(!kV^0_~hL6PpW4={l%|#xgdh?5EIk~lu8{D z2hiyhv3Yxij_#$Wu>P@7SYsl`-~3;}Ktx{34_NL^Kwin&=?!HDv3elQDbcU*qyYpN z(#yw~f1vFGK-t%CC-qa-4FYHbA^h>bag-I&*qaxwn?Qv|idE$<>1H|Gr6JtUu(he2$eg!N z@HTF@dG1)*y;4fxe)4_ZkpaBHH9hXp9p4|gLrRQyuevRd@gSS}JhRnWqrvm|U@>qM z=yl7RQROTKwQtzP3!zUF)_6Ld#NGA6v~2{J9Dd`h6{%+XsU#qGLh%`fB1Hc?wfayK zN`H4BpDp)npVQuu$DVW1qsBS&AJ2eP%6Qw>;k{)Z$8%HL=Q4(a$Ng2_vHw&vA!1L+9zc8vaX2GtqJ{L-;gvF0IR$em zMQ8@{Qp3+3Quk)TJ$?I<8KmwzD*7#(q<@Mc`dchngW}cRG14(Z6K7{T|LhFXwhqUQ;BET;cYqPcAcMgt6M$V9$(?jHo@Sud$an$U&5F zZ1QNh^ztt)E*d#Ij;<43oSKKnd+WNr$_r}+s_O_x6DZSB10*5Q{ourqq>mTl| zx4y^(cy+9;t@R=*j>3_dmm_m)$k$#937V(sllby&5)Xex^UD-|m|q<(jEd#@DV(of zAd7sSdmS*zUDqJ9|K%O2J2OfdUiK{{b{PCy)pi<;hp~7v1CQj&4-10 zgO<3dqhYH1#-Fa}Q{pjql5>>P6gZH21zLfxZ4$SK4T@7b!|`nWF9b*84Bq8&Eht;9 z*P72x&NUCZ7*@B$`FtE=hz5b}S`|c6Ey+j@D1ZibjJaRlR;{cxAWv z?Nqa>QqV*H-*zzaPvpLMHt~nl(x6?vrPpR?zn7~wow?oj*1TKmx4j71>$hvtC$DLD zUrz0^tiP0792U&dxJxNv@r}Elsjn^aSLUu=9#mD{&9n8|ayIL$!H3s>%KEvbchBFW z%cd?VU83mGF#Dar9*s~w&AnmQRQIOvR+uWsuZ?+|a=TzApXO@q^(r%8=}iv#wCnFq z=K9}JbqU@k99Q%j-}NNk+qLCP)jXfmOO|)@?mHcnynd6({mJisP1_}u7k)|eYHXWK z63eQ)E$ufFi!3CWUY2gw%e>omCv}qEX66aH-k&35f9`Q@Us|NPetVqe8=dX*VxJdn ze`q7b=Dn(UA(2sf&g)cOmQFhNJ#<-aMELJZbA#@to>25@kbW<)&!X01 z%NMJt>1ST)tyX)h@?`DxhbgCHr>S4wv}WC&Nw-!{+Z7$2D}74QAcXTvip=M0%Tp_N zor=k`)t|ra^ySr-+(|R9mB(E=`MX#y(wSw)$!iymzB;^c*>%&^*7HxTnRga=soSZT zdDl+9s;r!v8hk6POtzBaig4pRp7eWF(<8gufvNHPu6xs-=e{;mnHzJyGKE+8L0j}; z@%8-e^UCL5HhMiR>sD3Rve&yVZ#{Q1*CO8c+qSr^Z#CN;)(X5>tGG5yUw3<+CfhaL z%bP;hZ?jvgJU67BWyiy74_)6r)_nSxttxn0`0?HE^5(uydHVgP+HE$V?Lv)Leti43 zWA|;f-RqX``95>)^P-fw!Vi{3KNsII-*5f){gdxqd%gVdB1sOBNe=nEW%;i~g_P8J w!5uhoe-Jcg1nPN%MiEAtgE$;km@@t6ukO)1^!cY^83Pb_y85}Sb4q9e0FIsP9{>OV literal 0 HcmV?d00001 diff --git a/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/inherited_widget/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inherited_widget/macos/Runner/Configs/AppInfo.xcconfig b/inherited_widget/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..5287b745 --- /dev/null +++ b/inherited_widget/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = inherited_widget_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.inheritedWidgetSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/inherited_widget/macos/Runner/Configs/Debug.xcconfig b/inherited_widget/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/inherited_widget/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/inherited_widget/macos/Runner/Configs/Release.xcconfig b/inherited_widget/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/inherited_widget/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/inherited_widget/macos/Runner/Configs/Warnings.xcconfig b/inherited_widget/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/inherited_widget/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/inherited_widget/macos/Runner/DebugProfile.entitlements b/inherited_widget/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/inherited_widget/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/inherited_widget/macos/Runner/Info.plist b/inherited_widget/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/inherited_widget/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/inherited_widget/macos/Runner/MainFlutterWindow.swift b/inherited_widget/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/inherited_widget/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/inherited_widget/macos/Runner/Release.entitlements b/inherited_widget/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/inherited_widget/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/inherited_widget/macos/RunnerTests/RunnerTests.swift b/inherited_widget/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/inherited_widget/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/inherited_widget/pubspec.yaml b/inherited_widget/pubspec.yaml index 4a5f5a44..749b1c7e 100644 --- a/inherited_widget/pubspec.yaml +++ b/inherited_widget/pubspec.yaml @@ -1,5 +1,8 @@ name: inherited_widget_sample description: A new Flutter project. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -8,29 +11,38 @@ description: A new Flutter project. # build by specifying --build-name and --build-number, respectively. # In Android, build-name is used as versionName while build-number used as versionCode. # Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. version: 1.0.0+1 environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ^3.8.1 +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. dependencies: flutter: sdk: flutter - todos_repository_local_storage: - path: ../todos_repository_local_storage todos_app_core: path: ../todos_app_core - key_value_store_flutter: - key_value_store_web: + todos_repository_core: + path: ../todos_repository_core + todos_repository_local_storage: + path: ../todos_repository_local_storage shared_preferences: dev_dependencies: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter test: mockito: diff --git a/inherited_widget/test_driver/integration_test.dart b/inherited_widget/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/inherited_widget/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/inherited_widget/test_driver/todo_app.dart b/inherited_widget/test_driver/todo_app.dart deleted file mode 100644 index 5a885326..00000000 --- a/inherited_widget/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:inherited_widget_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/inherited_widget/test_driver/todo_app_test.dart b/inherited_widget/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/inherited_widget/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/inherited_widget/web/favicon.png b/inherited_widget/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/inherited_widget/web/icons/Icon-192.png b/inherited_widget/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/inherited_widget/web/icons/Icon-512.png b/inherited_widget/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/inherited_widget/web/icons/Icon-maskable-192.png b/inherited_widget/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/inherited_widget/web/icons/Icon-maskable-512.png b/inherited_widget/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/inherited_widget/web/index.html b/inherited_widget/web/index.html index 6424b68b..a5971eaf 100644 --- a/inherited_widget/web/index.html +++ b/inherited_widget/web/index.html @@ -1,10 +1,38 @@ + + + - inherited_widget + + + + + + + + + + + + + inherited_widget_sample + - + diff --git a/inherited_widget/web/manifest.json b/inherited_widget/web/manifest.json new file mode 100644 index 00000000..6a86777a --- /dev/null +++ b/inherited_widget/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "inherited_widget_sample", + "short_name": "inherited_widget_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/inherited_widget/windows/.gitignore b/inherited_widget/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/inherited_widget/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/inherited_widget/windows/CMakeLists.txt b/inherited_widget/windows/CMakeLists.txt new file mode 100644 index 00000000..2236aafb --- /dev/null +++ b/inherited_widget/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(inherited_widget_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "inherited_widget_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/inherited_widget/windows/flutter/CMakeLists.txt b/inherited_widget/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/inherited_widget/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/inherited_widget/windows/flutter/generated_plugin_registrant.cc b/inherited_widget/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/inherited_widget/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/inherited_widget/windows/flutter/generated_plugin_registrant.h b/inherited_widget/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/inherited_widget/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/inherited_widget/windows/flutter/generated_plugins.cmake b/inherited_widget/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/inherited_widget/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/inherited_widget/windows/runner/CMakeLists.txt b/inherited_widget/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/inherited_widget/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/inherited_widget/windows/runner/Runner.rc b/inherited_widget/windows/runner/Runner.rc new file mode 100644 index 00000000..659ba9bf --- /dev/null +++ b/inherited_widget/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "inherited_widget_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "inherited_widget_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "inherited_widget_sample.exe" "\0" + VALUE "ProductName", "inherited_widget_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/inherited_widget/windows/runner/flutter_window.cpp b/inherited_widget/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/inherited_widget/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/inherited_widget/windows/runner/flutter_window.h b/inherited_widget/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/inherited_widget/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/inherited_widget/windows/runner/main.cpp b/inherited_widget/windows/runner/main.cpp new file mode 100644 index 00000000..a95edb7e --- /dev/null +++ b/inherited_widget/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"inherited_widget_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/inherited_widget/windows/runner/resource.h b/inherited_widget/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/inherited_widget/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/inherited_widget/windows/runner/resources/app_icon.ico b/inherited_widget/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/inherited_widget/windows/runner/runner.exe.manifest b/inherited_widget/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/inherited_widget/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/inherited_widget/windows/runner/utils.cpp b/inherited_widget/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/inherited_widget/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/inherited_widget/windows/runner/utils.h b/inherited_widget/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/inherited_widget/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/inherited_widget/windows/runner/win32_window.cpp b/inherited_widget/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/inherited_widget/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/inherited_widget/windows/runner/win32_window.h b/inherited_widget/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/inherited_widget/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/mobx/lib/add_todo_screen.dart b/mobx/lib/add_todo_screen.dart index 0234c3d3..b74b6b66 100644 --- a/mobx/lib/add_todo_screen.dart +++ b/mobx/lib/add_todo_screen.dart @@ -6,7 +6,7 @@ class AddTodoScreen extends StatefulWidget { final void Function(Todo) onAdd; const AddTodoScreen({@required this.onAdd}) - : super(key: ArchSampleKeys.addTodoScreen); + : super(key: ArchSampleKeys.addTodoScreen); @override _AddTodoScreenState createState() => _AddTodoScreenState(); @@ -30,9 +30,7 @@ class _AddTodoScreenState extends State { final textTheme = Theme.of(context).textTheme; return Scaffold( - appBar: AppBar( - title: Text(localizations.addTodo), - ), + appBar: AppBar(title: Text(localizations.addTodo)), body: Form( key: _formKey, autovalidate: false, @@ -57,10 +55,10 @@ class _AddTodoScreenState extends State { TextFormField( key: ArchSampleKeys.noteField, controller: _notesEditingController, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), maxLines: 10, - ) + ), ], ), ), @@ -70,10 +68,12 @@ class _AddTodoScreenState extends State { tooltip: localizations.addTodo, onPressed: () { if (_formKey.currentState.validate()) { - widget.onAdd(Todo( - task: _titleEditingController.text, - note: _notesEditingController.text, - )); + widget.onAdd( + Todo( + task: _titleEditingController.text, + note: _notesEditingController.text, + ), + ); } }, child: const Icon(Icons.add), diff --git a/mobx/lib/details_screen.dart b/mobx/lib/details_screen.dart index 65b80462..c9ee3a2c 100644 --- a/mobx/lib/details_screen.dart +++ b/mobx/lib/details_screen.dart @@ -10,7 +10,7 @@ class DetailsScreen extends StatelessWidget { final void Function() onRemove; const DetailsScreen({@required this.todo, @required this.onRemove}) - : super(key: ArchSampleKeys.todoDetailsScreen); + : super(key: ArchSampleKeys.todoDetailsScreen); @override Widget build(BuildContext context) { @@ -23,7 +23,7 @@ class DetailsScreen extends StatelessWidget { tooltip: ArchSampleLocalizations.of(context).deleteTodo, icon: const Icon(Icons.delete), onPressed: onRemove, - ) + ), ], ), floatingActionButton: FloatingActionButton( @@ -63,15 +63,12 @@ class DetailsScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: const EdgeInsets.only( - top: 8.0, - bottom: 16.0, - ), + padding: const EdgeInsets.only(top: 8.0, bottom: 16.0), child: Observer( builder: (context) => Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), ), @@ -79,9 +76,9 @@ class DetailsScreen extends StatelessWidget { builder: (_) => Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), - ) + ), ], ), ), diff --git a/mobx/lib/edit_todo_screen.dart b/mobx/lib/edit_todo_screen.dart index 9ab67e2c..24c96741 100644 --- a/mobx/lib/edit_todo_screen.dart +++ b/mobx/lib/edit_todo_screen.dart @@ -6,10 +6,8 @@ class EditTodoScreen extends StatefulWidget { final void Function() onEdit; final Todo todo; - const EditTodoScreen({ - @required this.todo, - @required this.onEdit, - }) : super(key: ArchSampleKeys.editTodoScreen); + const EditTodoScreen({@required this.todo, @required this.onEdit}) + : super(key: ArchSampleKeys.editTodoScreen); @override _EditTodoScreenState createState() => _EditTodoScreenState(); @@ -31,7 +29,7 @@ class _EditTodoScreenState extends State { TextFormField( key: ArchSampleKeys.taskField, initialValue: widget.todo.task, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -50,7 +48,7 @@ class _EditTodoScreenState extends State { ), maxLines: 10, onSaved: (value) => widget.todo.note = value, - ) + ), ], ), ), diff --git a/mobx/lib/home/filter_button.dart b/mobx/lib/home/filter_button.dart index b7dccb7f..f01c49f8 100644 --- a/mobx/lib/home/filter_button.dart +++ b/mobx/lib/home/filter_button.dart @@ -40,8 +40,8 @@ class FilterButton extends StatelessWidget { ) { final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); - final defaultStyle = Theme.of(context).textTheme.body1; + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final defaultStyle = Theme.of(context).textTheme.bodyMedium; return [ PopupMenuItem( diff --git a/mobx/lib/home/stats_view.dart b/mobx/lib/home/stats_view.dart index fab86e7d..c0282d74 100644 --- a/mobx/lib/home/stats_view.dart +++ b/mobx/lib/home/stats_view.dart @@ -20,7 +20,7 @@ class StatsView extends StatelessWidget { padding: const EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -29,7 +29,7 @@ class StatsView extends StatelessWidget { builder: (context) => Text( '${store.numCompleted}', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ), @@ -37,7 +37,7 @@ class StatsView extends StatelessWidget { padding: const EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -46,10 +46,10 @@ class StatsView extends StatelessWidget { builder: (context) => Text( '${store.numPending}', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), - ) + ), ], ), ); diff --git a/mobx/lib/home/todo_list_view.dart b/mobx/lib/home/todo_list_view.dart index 10ba77a9..e4577664 100644 --- a/mobx/lib/home/todo_list_view.dart +++ b/mobx/lib/home/todo_list_view.dart @@ -55,7 +55,7 @@ class TodoListView extends StatelessWidget { builder: (context) => Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), subtitle: Observer( @@ -64,7 +64,7 @@ class TodoListView extends StatelessWidget { key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ), diff --git a/mvi_flutter/lib/screens/add_edit_screen.dart b/mvi_flutter/lib/screens/add_edit_screen.dart index c64ea07d..78cad922 100644 --- a/mvi_flutter/lib/screens/add_edit_screen.dart +++ b/mvi_flutter/lib/screens/add_edit_screen.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { final Todo todo; @@ -46,7 +46,7 @@ class _AddEditScreenState extends State { initialValue: widget.todo != null ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -59,7 +59,7 @@ class _AddEditScreenState extends State { initialValue: widget.todo != null ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), diff --git a/mvi_flutter/lib/screens/detail_screen.dart b/mvi_flutter/lib/screens/detail_screen.dart index c8d5fd5a..283f3282 100644 --- a/mvi_flutter/lib/screens/detail_screen.dart +++ b/mvi_flutter/lib/screens/detail_screen.dart @@ -1,10 +1,10 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/dependency_injection.dart'; import 'package:mvi_flutter_sample/screens/add_edit_screen.dart'; import 'package:mvi_flutter_sample/widgets/loading.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatefulWidget { final String todoId; @@ -96,13 +96,13 @@ class DetailScreenState extends State with DetailView { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), diff --git a/mvi_flutter/lib/widgets/filter_button.dart b/mvi_flutter/lib/widgets/filter_button.dart index aff332e8..84d7d5ab 100644 --- a/mvi_flutter/lib/widgets/filter_button.dart +++ b/mvi_flutter/lib/widgets/filter_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final PopupMenuItemSelected onSelected; @@ -13,8 +13,8 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final defaultStyle = theme.textTheme.body1; - final activeStyle = theme.textTheme.body1.copyWith( + final defaultStyle = theme.textTheme.bodyMedium; + final activeStyle = theme.textTheme.bodyMedium.copyWith( color: theme.accentColor, ); final button = _Button( diff --git a/mvi_flutter/lib/widgets/stats_counter.dart b/mvi_flutter/lib/widgets/stats_counter.dart index e46952de..cec8492b 100644 --- a/mvi_flutter/lib/widgets/stats_counter.dart +++ b/mvi_flutter/lib/widgets/stats_counter.dart @@ -1,9 +1,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/dependency_injection.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatefulWidget { final MviPresenter Function() initPresenter; @@ -51,7 +51,7 @@ class StatsCounterState extends State { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -59,14 +59,14 @@ class StatsCounterState extends State { child: Text( '${snapshot.data?.numComplete ?? 0}', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -74,7 +74,7 @@ class StatsCounterState extends State { child: Text( '${snapshot.data?.numActive ?? 0}', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/mvi_flutter/lib/widgets/todo_item.dart b/mvi_flutter/lib/widgets/todo_item.dart index ac986536..f660a1ee 100644 --- a/mvi_flutter/lib/widgets/todo_item.dart +++ b/mvi_flutter/lib/widgets/todo_item.dart @@ -1,7 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; @@ -31,14 +31,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/redux/lib/presentation/add_edit_screen.dart b/redux/lib/presentation/add_edit_screen.dart index 45ec2975..961a785e 100644 --- a/redux/lib/presentation/add_edit_screen.dart +++ b/redux/lib/presentation/add_edit_screen.dart @@ -1,7 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; typedef OnSaveCallback = void Function(String task, String note); @@ -62,7 +62,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), onSaved: (value) => _note = value, ), diff --git a/redux/lib/presentation/details_screen.dart b/redux/lib/presentation/details_screen.dart index 0b70e0d8..7644a7d6 100644 --- a/redux/lib/presentation/details_screen.dart +++ b/redux/lib/presentation/details_screen.dart @@ -1,8 +1,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/containers/edit_todo.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class DetailsScreen extends StatelessWidget { final Todo todo; @@ -61,14 +61,14 @@ class DetailsScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), @@ -83,7 +83,7 @@ class DetailsScreen extends StatelessWidget { tooltip: localizations.editTodo, child: Icon(Icons.edit), onPressed: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) { return EditTodo(todo: todo); diff --git a/redux/lib/presentation/filter_button.dart b/redux/lib/presentation/filter_button.dart index 953b3b9a..fec824b3 100644 --- a/redux/lib/presentation/filter_button.dart +++ b/redux/lib/presentation/filter_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final PopupMenuItemSelected onSelected; @@ -12,10 +12,10 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.body1; + final defaultStyle = Theme.of(context).textTheme.bodyMedium; final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); final button = _Button( onSelected: onSelected, activeFilter: activeFilter, diff --git a/redux/lib/presentation/stats_counter.dart b/redux/lib/presentation/stats_counter.dart index 1ce0f2b4..af48fb2f 100644 --- a/redux/lib/presentation/stats_counter.dart +++ b/redux/lib/presentation/stats_counter.dart @@ -1,9 +1,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/containers/app_loading.dart'; import 'package:redux_sample/presentation/loading_indicator.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatelessWidget { final int numActive; @@ -31,7 +31,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -39,14 +39,14 @@ class StatsCounter extends StatelessWidget { child: Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -54,7 +54,7 @@ class StatsCounter extends StatelessWidget { child: Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/redux/lib/presentation/todo_item.dart b/redux/lib/presentation/todo_item.dart index 6d4b2f2c..592ee319 100644 --- a/redux/lib/presentation/todo_item.dart +++ b/redux/lib/presentation/todo_item.dart @@ -1,7 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; @@ -35,7 +35,7 @@ class TodoItem extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), ), @@ -44,7 +44,7 @@ class TodoItem extends StatelessWidget { key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/scoped_model/lib/screens/add_edit_screen.dart b/scoped_model/lib/screens/add_edit_screen.dart index ac994d7e..7912bda9 100644 --- a/scoped_model/lib/screens/add_edit_screen.dart +++ b/scoped_model/lib/screens/add_edit_screen.dart @@ -1,10 +1,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:scoped_model_sample/todo_list_model.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { final String todoId; @@ -64,7 +64,7 @@ class _AddEditScreenState extends State { initialValue: task?.note ?? '', key: ArchSampleKeys.noteField, maxLines: 10, - style: textTheme.subhead, + style: textTheme.titleMedium, decoration: InputDecoration( hintText: localizations.notesHint, ), diff --git a/scoped_model/lib/screens/detail_screen.dart b/scoped_model/lib/screens/detail_screen.dart index fec07db3..5a10afec 100644 --- a/scoped_model/lib/screens/detail_screen.dart +++ b/scoped_model/lib/screens/detail_screen.dart @@ -1,10 +1,10 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:scoped_model_sample/screens/add_edit_screen.dart'; import 'package:scoped_model_sample/todo_list_model.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatelessWidget { final String todoId; @@ -59,13 +59,13 @@ class DetailScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), diff --git a/scoped_model/lib/widgets/filter_button.dart b/scoped_model/lib/widgets/filter_button.dart index bd81773d..5af3702b 100644 --- a/scoped_model/lib/widgets/filter_button.dart +++ b/scoped_model/lib/widgets/filter_button.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/todo_list_model.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final bool isActive; @@ -35,8 +35,8 @@ class FilterButton extends StatelessWidget { ) { final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); - final defaultStyle = Theme.of(context).textTheme.body1; + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final defaultStyle = Theme.of(context).textTheme.bodyMedium; return [ PopupMenuItem( diff --git a/scoped_model/lib/widgets/stats_counter.dart b/scoped_model/lib/widgets/stats_counter.dart index f9e6c865..bb1e1b11 100644 --- a/scoped_model/lib/widgets/stats_counter.dart +++ b/scoped_model/lib/widgets/stats_counter.dart @@ -1,9 +1,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:scoped_model_sample/todo_list_model.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatelessWidget { StatsCounter() : super(key: ArchSampleKeys.statsCounter); @@ -27,7 +27,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -35,14 +35,14 @@ class StatsCounter extends StatelessWidget { child: Text( '$numCompleted', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -50,7 +50,7 @@ class StatsCounter extends StatelessWidget { child: Text( '$numActive', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/scoped_model/lib/widgets/todo_item.dart b/scoped_model/lib/widgets/todo_item.dart index 6cd3cd95..d055d7de 100644 --- a/scoped_model/lib/widgets/todo_item.dart +++ b/scoped_model/lib/widgets/todo_item.dart @@ -1,7 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model_sample/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; @@ -31,14 +31,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/simple_bloc_flutter/lib/screens/add_edit_screen.dart b/simple_bloc_flutter/lib/screens/add_edit_screen.dart index 9f95eecb..6384ff20 100644 --- a/simple_bloc_flutter/lib/screens/add_edit_screen.dart +++ b/simple_bloc_flutter/lib/screens/add_edit_screen.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { final Todo todo; @@ -46,7 +46,7 @@ class _AddEditScreenState extends State { initialValue: widget.todo != null ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -59,7 +59,7 @@ class _AddEditScreenState extends State { initialValue: widget.todo != null ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), diff --git a/simple_bloc_flutter/lib/screens/detail_screen.dart b/simple_bloc_flutter/lib/screens/detail_screen.dart index dacfebf7..0f02eb85 100644 --- a/simple_bloc_flutter/lib/screens/detail_screen.dart +++ b/simple_bloc_flutter/lib/screens/detail_screen.dart @@ -1,9 +1,9 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:simple_bloc_flutter_sample/screens/add_edit_screen.dart'; import 'package:simple_bloc_flutter_sample/widgets/loading.dart'; import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatefulWidget { final String todoId; @@ -84,13 +84,13 @@ class DetailScreenState extends State { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), diff --git a/simple_bloc_flutter/lib/widgets/filter_button.dart b/simple_bloc_flutter/lib/widgets/filter_button.dart index 6aa4f8d2..eff0b79d 100644 --- a/simple_bloc_flutter/lib/widgets/filter_button.dart +++ b/simple_bloc_flutter/lib/widgets/filter_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final PopupMenuItemSelected onSelected; @@ -13,8 +13,8 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final defaultStyle = theme.textTheme.body1; - final activeStyle = theme.textTheme.body1.copyWith( + final defaultStyle = theme.textTheme.bodyMedium; + final activeStyle = theme.textTheme.bodyMedium.copyWith( color: theme.accentColor, ); final button = _Button( diff --git a/simple_bloc_flutter/lib/widgets/stats_counter.dart b/simple_bloc_flutter/lib/widgets/stats_counter.dart index 00e703f7..28897de0 100644 --- a/simple_bloc_flutter/lib/widgets/stats_counter.dart +++ b/simple_bloc_flutter/lib/widgets/stats_counter.dart @@ -1,8 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatefulWidget { final StatsBloc Function() buildBloc; @@ -35,7 +35,7 @@ class StatsCounterState extends State { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -45,7 +45,7 @@ class StatsCounterState extends State { builder: (context, snapshot) => Text( '${snapshot.data ?? 0}', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ), @@ -53,7 +53,7 @@ class StatsCounterState extends State { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -64,7 +64,7 @@ class StatsCounterState extends State { return Text( '${snapshot.data ?? 0}', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ); }, ), diff --git a/simple_bloc_flutter/lib/widgets/todo_item.dart b/simple_bloc_flutter/lib/widgets/todo_item.dart index dc0a712e..46dbecfe 100644 --- a/simple_bloc_flutter/lib/widgets/todo_item.dart +++ b/simple_bloc_flutter/lib/widgets/todo_item.dart @@ -1,7 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; @@ -31,14 +31,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart b/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart index 91338386..0d856cb5 100644 --- a/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart +++ b/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart @@ -48,7 +48,7 @@ class _AddEditPageState extends State { initialValue: widget.todo != null ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), @@ -61,7 +61,7 @@ class _AddEditPageState extends State { initialValue: widget.todo != null ? widget.todo.note : '', key: ArchSampleKeys.noteField, maxLines: 10, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), diff --git a/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart b/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart index 9e4ab86d..e1d72a8f 100644 --- a/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart +++ b/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart @@ -67,13 +67,13 @@ class DetailScreen extends StatelessWidget { child: Text( todo.task, key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headline, + style: Theme.of(context).textTheme.headlineSmall, ), ), Text( todo.note, key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ], ), @@ -88,7 +88,7 @@ class DetailScreen extends StatelessWidget { child: Icon(Icons.edit), key: ArchSampleKeys.editTodoFab, onPressed: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) { return AddEditPage( diff --git a/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart b/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart index 3b3d30bd..398bd866 100644 --- a/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart +++ b/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart @@ -16,10 +16,10 @@ class FilterButton extends StatelessWidget { context: context, ); - final defaultStyle = Theme.of(context).textTheme.body1; + final defaultStyle = Theme.of(context).textTheme.bodyMedium; final activeStyle = Theme.of( context, - ).textTheme.body1.copyWith(color: Theme.of(context).accentColor); + ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); final button = _Button( onSelected: (filter) { todosServiceRM.setState((s) => s.activeFilter = filter); diff --git a/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart b/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart index 89ade9a6..d06db252 100644 --- a/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart +++ b/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart @@ -20,7 +20,7 @@ class StatsCounter extends StatelessWidget { padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -28,14 +28,14 @@ class StatsCounter extends StatelessWidget { child: Text( '${todosService.numCompleted}', key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), Padding( padding: EdgeInsets.only(bottom: 8.0), child: Text( ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), ), Padding( @@ -43,7 +43,7 @@ class StatsCounter extends StatelessWidget { child: Text( '${todosService.numActive}', key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ], diff --git a/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart b/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart index c428852f..340ea3eb 100644 --- a/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart +++ b/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart @@ -24,7 +24,7 @@ class TodoItem extends StatelessWidget { }, child: ListTile( onTap: () { - Navigator.of(context).push( + Navigator.of(context).push( MaterialPageRoute( builder: (_) { return DetailScreen(todo); @@ -43,14 +43,14 @@ class TodoItem extends StatelessWidget { title: Text( todo.task, key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.title, + style: Theme.of(context).textTheme.titleLarge, ), subtitle: Text( todo.note, key: ArchSampleKeys.todoItemNote(todo.id), maxLines: 1, overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.subhead, + style: Theme.of(context).textTheme.titleMedium, ), ), ); diff --git a/todos_app_core/.flutter-plugins-dependencies b/todos_app_core/.flutter-plugins-dependencies index ea4ac95d..54bf628d 100644 --- a/todos_app_core/.flutter-plugins-dependencies +++ b/todos_app_core/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"path_provider_android","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_android-2.2.17/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"path_provider_foundation","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"path_provider_linux","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"path_provider_windows","path":"/Users/brian/.puro/shared/pub_cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2025-07-05 15:37:05.164581","version":"3.32.5","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider_foundation","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"path_provider_android","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_android-2.2.17/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"path_provider_foundation","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"path_provider_linux","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"path_provider_windows","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false}],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2025-07-06 22:43:48.361394","version":"3.32.5","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file diff --git a/todos_app_core/lib/src/theme.dart b/todos_app_core/lib/src/theme.dart index 3357aa63..41271719 100644 --- a/todos_app_core/lib/src/theme.dart +++ b/todos_app_core/lib/src/theme.dart @@ -4,4 +4,8 @@ class ArchSampleTheme { static ThemeData get theme { return ThemeData.light(useMaterial3: true); } + + static ThemeData get darkTheme { + return ThemeData.dark(useMaterial3: true); + } } From e3f386fa19a0469416536281cfcc99575605342c Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 13:45:27 +0100 Subject: [PATCH 18/89] Remove deprecated RTDB repository --- firebase_rtdb_flutter_repository/README.md | 51 ------- .../lib/reactive_todos_repository.dart | 51 ------- .../lib/user_repository.dart | 21 --- firebase_rtdb_flutter_repository/pubspec.yaml | 19 --- .../firebase_flutter_repository_test.dart | 132 ------------------ 5 files changed, 274 deletions(-) delete mode 100644 firebase_rtdb_flutter_repository/README.md delete mode 100644 firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart delete mode 100644 firebase_rtdb_flutter_repository/lib/user_repository.dart delete mode 100644 firebase_rtdb_flutter_repository/pubspec.yaml delete mode 100644 firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart diff --git a/firebase_rtdb_flutter_repository/README.md b/firebase_rtdb_flutter_repository/README.md deleted file mode 100644 index 64da2608..00000000 --- a/firebase_rtdb_flutter_repository/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# firebase_rtdb_flutter_repository - -A reactive version of the todos repository and user repository backed by Firebase Realtime Database -and FirebaseAuth for Flutter. - -## Defines how to log in - -This library provides a concrete implementation of the `UserRepository` class. It uses the `firebase_auth` package and anonymous login as the mechanism and returns a `UserEntity`. - -## Defines how to interact with Todos - -This library provides a concrete implementation of the `ReactiveTodosRepository`. - -To listen for real-time changes, it streams `TodoEntity` objects stored in the `todos` collection on - Firebase Realtime Database. To create, update, and delete todos, it pushes changes to the `todos` - collection or individual documents. - -### Works with `firestore_redux` project - -In `main.dart` replace the current implementation of the abstract `ReactiveTodosRepository` -```dart - FirestoreReactiveTodosRepository(Firestore.instance) -``` -with -```dart - FirebaseReactiveTodosRepository(FirebaseDatabase.instance) -``` -Also in `main.dart` replace the `cloud_firestore` package with the `firebase_database` package. Replace -```dart -import 'package:cloud_firestore/cloud_firestore.dart'; -``` -with -```dart -import 'package:firebase_database/firebase_database.dart'; -``` -In `pubspec.yaml` replace -```yaml - firebase_flutter_repository: - path: ../firebase_flutter_repository -``` -with -```yaml - firebase_flutter_repository: - path: ../firebase_rtdb_flutter_repository -``` - -Then update packages from commandline with -``` -flutter packages get -``` -or the equivalent with your IDE. diff --git a/firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart b/firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart deleted file mode 100644 index dd8bee7c..00000000 --- a/firebase_rtdb_flutter_repository/lib/reactive_todos_repository.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:async'; - -import 'package:firebase_database/firebase_database.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -class FirebaseReactiveTodosRepository implements ReactiveTodosRepository { - static const String path = 'todo'; - - final FirebaseDatabase firebase; - - const FirebaseReactiveTodosRepository(this.firebase); - - @override - Future addNewTodo(TodoEntity todo) { - return updateTodo(todo); - } - - @override - Future deleteTodo(List idList) async { - await Future.wait( - idList.map((id) { - return firebase.reference().child(path).child(id).set(null); - }), - ); - } - - @override - Stream> todos() { - return firebase.reference().child(path).onValue.map((event) { - if (event.snapshot == null || event.snapshot.value == null) return []; - final Map value = event.snapshot.value; - final todoMap = value.map((key, doc) { - return MapEntry( - key, - TodoEntity( - doc['task'], - key, - doc['note'] ?? '', - doc['complete'] ?? false, - ), - ); - }); - return todoMap.values.toList(); - }); - } - - @override - Future updateTodo(TodoEntity todo) { - return firebase.reference().child(path).child(todo.id).set(todo.toJson()); - } -} diff --git a/firebase_rtdb_flutter_repository/lib/user_repository.dart b/firebase_rtdb_flutter_repository/lib/user_repository.dart deleted file mode 100644 index f38fdbb6..00000000 --- a/firebase_rtdb_flutter_repository/lib/user_repository.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'dart:async'; - -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -class FirebaseUserRepository implements UserRepository { - final FirebaseAuth auth; - - const FirebaseUserRepository(this.auth); - - @override - Future login() async { - final firebaseUser = await auth.signInAnonymously(); - - return UserEntity( - id: firebaseUser.uid, - displayName: firebaseUser.displayName, - photoUrl: firebaseUser.photoUrl, - ); - } -} diff --git a/firebase_rtdb_flutter_repository/pubspec.yaml b/firebase_rtdb_flutter_repository/pubspec.yaml deleted file mode 100644 index 11e4c493..00000000 --- a/firebase_rtdb_flutter_repository/pubspec.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: firebase_flutter_repository -description: A reactive version of the todos repository for Flutter using Firebase Realtime Database - -environment: - sdk: '>=2.0.0 <3.0.0' - -dependencies: - flutter: - sdk: flutter - todos_repository_core: - path: ../todos_repository_core - firebase_auth: 0.5.9 - firebase_database: ^3.1.1 - -dev_dependencies: - test: - mockito: - flutter_test: - sdk: flutter diff --git a/firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart b/firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart deleted file mode 100644 index b4776733..00000000 --- a/firebase_rtdb_flutter_repository/test/firebase_flutter_repository_test.dart +++ /dev/null @@ -1,132 +0,0 @@ -import 'dart:async'; - -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_database/firebase_database.dart'; -import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; -import 'package:firebase_flutter_repository/user_repository.dart'; -import 'package:mockito/mockito.dart'; -import 'package:test/test.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -void main() { - group('FirebaseUserRepository', () { - test('should log the user in anonymously', () async { - final auth = MockFirebaseAuth(); - final repository = FirebaseUserRepository(auth); - - when( - auth.signInAnonymously(), - ).thenAnswer((_) => Future.value(MockFirebaseUser())); - - final entity = await repository.login(); - - expect(entity, TypeMatcher()); - }); - }); - - group('FirebaseReactiveTodosRepository', () { - test('should send todos to firebase database', () { - final firebaseDatabase = MockFirebaseDatabase(); - final reference = MockDatabaseReference(); - final collection = MockDatabaseReference(); - final document = MockDatabaseReference(); - final repository = FirebaseReactiveTodosRepository(firebaseDatabase); - final todo = TodoEntity('A', '1', '', true); - - when(firebaseDatabase.reference()).thenReturn(reference); - when( - reference.child(FirebaseReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.child(todo.id)).thenReturn(document); - - repository.addNewTodo(todo); - - verify(document.set(todo.toJson())); - }); - - test('should update todos on firebase database', () { - final firebaseDatabase = MockFirebaseDatabase(); - final reference = MockDatabaseReference(); - final collection = MockDatabaseReference(); - final document = MockDatabaseReference(); - final repository = FirebaseReactiveTodosRepository(firebaseDatabase); - final todo = TodoEntity('A', '1', '', true); - - when(firebaseDatabase.reference()).thenReturn(reference); - when( - reference.child(FirebaseReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.child(todo.id)).thenReturn(document); - - repository.updateTodo(todo); - - verify(document.set(todo.toJson())); - }); - - test('should listen for updates to the collection', () { - final todo = TodoEntity('A', '1', '', true); - final firebaseDatabase = MockFirebaseDatabase(); - final reference = MockDatabaseReference(); - final collection = MockDatabaseReference(); - final document = todo.toJson(); - final documentMap = {todo.id: document}; - final event = MockEvent(); - final eventIterator = Stream.fromIterable([event]); - final data = {'key': todo.id, 'value': documentMap}; - final snapshot = MockDataSnapshot(data); - final repository = FirebaseReactiveTodosRepository(firebaseDatabase); - - when(firebaseDatabase.reference()).thenReturn(reference); - when( - reference.child(FirebaseReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.onValue).thenAnswer((_) => eventIterator); - when(event.snapshot).thenReturn(snapshot); - when(snapshot.key).thenReturn(todo.id); // not used - when(snapshot.value).thenReturn(documentMap); - - expect(repository.todos(), emits([todo])); - }); - - test('should delete todos on firebaseDatabase', () async { - final todoA = 'A'; - final todoB = 'B'; - final firebaseDatabase = MockFirebaseDatabase(); - final reference = MockDatabaseReference(); - final collection = MockDatabaseReference(); - final documentA = MockDatabaseReference(); - final documentB = MockDatabaseReference(); - final repository = FirebaseReactiveTodosRepository(firebaseDatabase); - - when(firebaseDatabase.reference()).thenReturn(reference); - when( - reference.child(FirebaseReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.child(todoA)).thenReturn(documentA); - when(collection.child(todoB)).thenReturn(documentB); - when(documentA.set(null)).thenAnswer((_) => Future.value()); - when(documentB.set(null)).thenAnswer((_) => Future.value()); - - await repository.deleteTodo([todoA, todoB]); - - verify(documentA.set(null)); - verify(documentB.set(null)); - }); - }); -} - -class MockFirebaseAuth extends Mock implements FirebaseAuth {} - -class MockFirebaseDatabase extends Mock implements FirebaseDatabase {} - -class MockDatabaseReference extends Mock implements DatabaseReference {} - -class MockEvent extends Mock implements Event {} - -class MockDataSnapshot extends Mock implements DataSnapshot { - final Map data; - - MockDataSnapshot([this.data]); -} - -class MockFirebaseUser extends Mock implements FirebaseUser {} From 385d81965ce5888f1332f4b4d8066d59b7bbd1bd Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 13:57:00 +0100 Subject: [PATCH 19/89] Delete frideos example (library deprecated) --- frideos_library/.flutter-plugins-dependencies | 1 - frideos_library/.gitignore | 73 --- frideos_library/.metadata | 10 - frideos_library/README.md | 19 - frideos_library/android/.gitignore | 7 - frideos_library/android/app/build.gradle | 67 --- .../android/app/src/debug/AndroidManifest.xml | 7 - .../android/app/src/main/AndroidManifest.xml | 30 - .../example/frideos_library/MainActivity.kt | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 0 bytes .../app/src/main/res/values/styles.xml | 8 - .../app/src/profile/AndroidManifest.xml | 7 - frideos_library/android/build.gradle | 31 -- frideos_library/android/gradle.properties | 4 - .../gradle/wrapper/gradle-wrapper.properties | 6 - frideos_library/android/settings.gradle | 15 - frideos_library/ios/.gitignore | 32 -- .../ios/Flutter/AppFrameworkInfo.plist | 26 - frideos_library/ios/Flutter/Debug.xcconfig | 2 - frideos_library/ios/Flutter/Release.xcconfig | 2 - frideos_library/ios/Podfile | 90 --- .../ios/Runner.xcodeproj/project.pbxproj | 518 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/Runner.xcscheme | 91 --- .../contents.xcworkspacedata | 7 - frideos_library/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 116 ---- .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 0 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - frideos_library/ios/Runner/Info.plist | 45 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - frideos_library/lib/app_state.dart | 46 -- frideos_library/lib/blocs/stats_bloc.dart | 26 - frideos_library/lib/blocs/todos_bloc.dart | 162 ------ frideos_library/lib/localization.dart | 26 - frideos_library/lib/main.dart | 34 -- .../lib/models/extra_actions_model.dart | 8 - frideos_library/lib/models/models.dart | 6 - frideos_library/lib/models/todo.dart | 54 -- .../lib/screens/add_edit_screen.dart | 102 ---- .../lib/screens/detail_screen.dart | 100 ---- frideos_library/lib/screens/homescreen.dart | 92 ---- .../lib/widgets/extra_actions_button.dart | 45 -- .../lib/widgets/filter_button.dart | 92 ---- frideos_library/lib/widgets/loading.dart | 12 - .../lib/widgets/stats_counter.dart | 58 -- frideos_library/lib/widgets/todo_item.dart | 46 -- frideos_library/lib/widgets/todo_list.dart | 79 --- frideos_library/pubspec.yaml | 78 --- frideos_library/test/stats_bloc_test.dart | 68 --- frideos_library/test/todos_bloc_test.dart | 362 ------------ frideos_library/test_driver/main_test.dart | 37 -- frideos_library/test_driver/todo_app.dart | 8 - .../test_driver/todo_app_test.dart | 5 - 82 files changed, 2896 deletions(-) delete mode 100644 frideos_library/.flutter-plugins-dependencies delete mode 100644 frideos_library/.gitignore delete mode 100644 frideos_library/.metadata delete mode 100644 frideos_library/README.md delete mode 100644 frideos_library/android/.gitignore delete mode 100644 frideos_library/android/app/build.gradle delete mode 100644 frideos_library/android/app/src/debug/AndroidManifest.xml delete mode 100644 frideos_library/android/app/src/main/AndroidManifest.xml delete mode 100644 frideos_library/android/app/src/main/kotlin/com/example/frideos_library/MainActivity.kt delete mode 100644 frideos_library/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 frideos_library/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 frideos_library/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 frideos_library/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 frideos_library/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 frideos_library/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 frideos_library/android/app/src/main/res/values/styles.xml delete mode 100644 frideos_library/android/app/src/profile/AndroidManifest.xml delete mode 100644 frideos_library/android/build.gradle delete mode 100644 frideos_library/android/gradle.properties delete mode 100644 frideos_library/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 frideos_library/android/settings.gradle delete mode 100644 frideos_library/ios/.gitignore delete mode 100644 frideos_library/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 frideos_library/ios/Flutter/Debug.xcconfig delete mode 100644 frideos_library/ios/Flutter/Release.xcconfig delete mode 100644 frideos_library/ios/Podfile delete mode 100644 frideos_library/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 frideos_library/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 frideos_library/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 frideos_library/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 frideos_library/ios/Runner/AppDelegate.swift delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 frideos_library/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 frideos_library/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 frideos_library/ios/Runner/Info.plist delete mode 100644 frideos_library/ios/Runner/Runner-Bridging-Header.h delete mode 100644 frideos_library/lib/app_state.dart delete mode 100644 frideos_library/lib/blocs/stats_bloc.dart delete mode 100644 frideos_library/lib/blocs/todos_bloc.dart delete mode 100644 frideos_library/lib/localization.dart delete mode 100644 frideos_library/lib/main.dart delete mode 100644 frideos_library/lib/models/extra_actions_model.dart delete mode 100644 frideos_library/lib/models/models.dart delete mode 100644 frideos_library/lib/models/todo.dart delete mode 100644 frideos_library/lib/screens/add_edit_screen.dart delete mode 100644 frideos_library/lib/screens/detail_screen.dart delete mode 100644 frideos_library/lib/screens/homescreen.dart delete mode 100644 frideos_library/lib/widgets/extra_actions_button.dart delete mode 100644 frideos_library/lib/widgets/filter_button.dart delete mode 100644 frideos_library/lib/widgets/loading.dart delete mode 100644 frideos_library/lib/widgets/stats_counter.dart delete mode 100644 frideos_library/lib/widgets/todo_item.dart delete mode 100644 frideos_library/lib/widgets/todo_list.dart delete mode 100644 frideos_library/pubspec.yaml delete mode 100644 frideos_library/test/stats_bloc_test.dart delete mode 100644 frideos_library/test/todos_bloc_test.dart delete mode 100644 frideos_library/test_driver/main_test.dart delete mode 100644 frideos_library/test_driver/todo_app.dart delete mode 100644 frideos_library/test_driver/todo_app_test.dart diff --git a/frideos_library/.flutter-plugins-dependencies b/frideos_library/.flutter-plugins-dependencies deleted file mode 100644 index 4ded62f8..00000000 --- a/frideos_library/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"android":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":[]}],"date_created":"2020-02-10 11:24:01.218565","version":"1.14.7-pre.38"} \ No newline at end of file diff --git a/frideos_library/.gitignore b/frideos_library/.gitignore deleted file mode 100644 index 2ddde2a5..00000000 --- a/frideos_library/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.packages -.pub-cache/ -.pub/ -/build/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/frideos_library/.metadata b/frideos_library/.metadata deleted file mode 100644 index 1b5cec02..00000000 --- a/frideos_library/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable - -project_type: app diff --git a/frideos_library/README.md b/frideos_library/README.md deleted file mode 100644 index 4a3d7610..00000000 --- a/frideos_library/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# frideos_library sample - -An example Todo app created with the [frideos](https://pub.dartlang.org/packages/frideos) library. - -## Key Concepts - -- This example aims to implement the BLoC pattern in a slightly different way, trying to reduce the amount of code and complexity of the original implementation, making it a little bit easier to adopt by beginners. -- A singleton instance of the `AppState` class implementing the `AppStateModel` interface, holds the state of the app, here is where the only two BLoCs `TodosBloc` and `StatsBloc` are instantiated. -- The state of the app is provided to the widgets tree by the `AppStateProvider`, a StatefulWidget that uses an InheritedWidget to make possible for the widgets of the subtree to access the data. -- Instead of one BLoC per screen, in this sample a single BLoC, `TodosBloc`, contains the business logic of the screens that share similar needs (`HomeScreen`, `DetailScreen` and `AddEditScreen`). -- To send data from the `TodosBloc` to the `StatsBloc`, in order to calculate the number of active and completed todos, it is used the `send` method of the `ListSender` class. First, in the `TodosBloc` is created an instance of the `ListSender` class, then by its method `setReceiver`, in the `AppState` class is set a reference to the stream on the `StatsBloc` that will receive the todos list whenever the method `send` is called. In this case, there is no need for the two BLoCs to share the same source of data, or having to pass the `TodosBloc` as a parameter to the `StatsBloc` to get the todos list. - -## UI and Streams - -- As per the classic BLoC implementation, the widgets, most of which in this sample are Stateless, are automatically rebuilt whenever the streams emit a new event. -- Every time a new value is set, the `ValueBuilder` widget, which takes as a parameter an object implementing the StreamedObject interface of the library, rebuilds providing the updated data. This is just a widget that extends the `StreamBuilder` and adds some callbacks to handle the stream state and return a `Container` if no widget is passed to the `NoDataChild` parameter, in order to avoid to check for the `snapshot.hasData` property to not return a null widget, ultimately, resulting in a less and cleaner code. - -## Testing -There are no particular tricks for testing the app with this library. The sample was tested with unit tests that check for every feature of the apps, and by the integration test with flutter drive. \ No newline at end of file diff --git a/frideos_library/android/.gitignore b/frideos_library/android/.gitignore deleted file mode 100644 index bc2100d8..00000000 --- a/frideos_library/android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java diff --git a/frideos_library/android/app/build.gradle b/frideos_library/android/app/build.gradle deleted file mode 100644 index af64cd13..00000000 --- a/frideos_library/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.frideos_library" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/frideos_library/android/app/src/debug/AndroidManifest.xml b/frideos_library/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index c2e1aefc..00000000 --- a/frideos_library/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/frideos_library/android/app/src/main/AndroidManifest.xml b/frideos_library/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index e9fb8d74..00000000 --- a/frideos_library/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - diff --git a/frideos_library/android/app/src/main/kotlin/com/example/frideos_library/MainActivity.kt b/frideos_library/android/app/src/main/kotlin/com/example/frideos_library/MainActivity.kt deleted file mode 100644 index 2be3277b..00000000 --- a/frideos_library/android/app/src/main/kotlin/com/example/frideos_library/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.frideos_library - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/frideos_library/android/app/src/main/res/drawable/launch_background.xml b/frideos_library/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f8..00000000 --- a/frideos_library/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/frideos_library/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/frideos_library/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1345 zcmV-H1-|-;P)uTd_0!V%xTj^~RVz+qQkNle+bG&pJ+~-@fF1He>(R5VVes7IOD>*8pj zqheUWHU<|V7e)gem4GGsJ2+v4(LhI>IrhY(VKk7Fi2z<|iTM&34b&ar1j_BVBq$oF zT^5{XaPhSSL<7+saIV4Zza$tMh~~j%l#2}#2o2PNi5m@Wr%DhsPz$TzUdrtp34jJ_ znQ1?5aIsS|cnuV=f=vu2gk<0vD8TK`l#6|mL2IA@7ekLTU=2jMm@OHo2BH8yg9lB? zAT>}wfRiW}AIb-*2s!8_Z`J0aS1@qoHy_}lPQz#RkE4~2! z=(Z>XqZkO0{yAgr%jc0Yq~kU?n{xX%#oOwWjsPbUd6WU+HDJRj(Jz;3Pq)p5ODGd- zRpPkY*4@5D9@RitX39y?ua@Yk&>~x0XE2eZ_RJA;@u^#pK)8}JPmFl^&f?(|+~wXw zlx{1_o=Py400@z``6J9n3hk?`&=Zu2?MiW&7)&sg2ncJBf3{icIA1y&P$u@O?8x0O z8w6ANfUwMLs0l^6(Xzk}43I58|S(7_2STsgb3Bd;<* zSWm4;S)us6*-BXm&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPV zl> zWXCr#aj@#Fvz(Q*M}0@G_VI6yJOZd~Pq;2> zG2)cDYOmwaEd5xdfMri1N}~YDGjb-}H20OVqDYXKgR~o0O;}k+t{Ul{4}K_j9IRSv zxx3v|cI4{w)Uu@Ys(@Ztn-O+?{~M&L=c#`Z%N?oK8Ww*1pQL%Dy5z}!lGc^q%5iX( zB~2vNEl(~>T3hyWhlL+ome`jZ8I6QEPyDr|C8@qaq{OwQz}f%Uvg8*?P03TslUJAE zK;HNC-|6?0nwBS)Cl!sfCZpi#6&bP@T^i~6H5v9p>yj@bH8^;1uQ~>2b^5MaYqCxw zI(Sbyg!J61w0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjf DcgJkH diff --git a/frideos_library/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/frideos_library/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmV;Q17Q4#P)D0gcVJI$m~tEjv=UM0#+Kd63T)IDVl(l zvY&{|q6jFO0HMLQ#b81S0Dyr|HVC0a6X*nBRzW5d1L+np_qFwC#87rFp==?-)R%y< zj}1(H>?1n?7#kA)tAlU}k(G^l;H@(IuS$Va5|bYvz0=YlGw+9MB+BA>!SR-IE8k(W zss)NAY>RFfF#X*6g#X0HZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBj zZgsP_v6)r@tiJZ$7xW!}mA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RJk``vY$`OxQ*%)P`Z0=`!sm4&|R=Oet|5ds3V>euZ%{TI`LDr?o5zeocvw?J`)O?{o8l!*psNt8|JhsSNR;46T0IM8_na3x~KezsqT zA1)v=Tdr^0D3gl99S1hI0M-S=rog)?z5}}8-E0I${?adS$(Wh&R(v76xwin`PYdu0 zbg#FpqHc-yTEGq6N5U1uCc~TY1qhFY5`Nu@Qolq$Te~WudyfS}=OJKd)eEj2I=&db zQoWbz*OVxUtbEH)$su9rG#CuOwSk+4xXJ=oEs^2_sj&J)NjyPGI}P`CaMH$ab=~d2G%a1mdZ8P~vz1 z6J=A4mv>~R@d~_|Kw~d$&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2iJAov!lV07GM*+YPcV?WX<0QCSHeyl2P0#=U002ovPDHLkV1k9w Bv-l9 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 diff --git a/frideos_library/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/frideos_library/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d5614ac831d924f5e49e16a3d4391be8964fcdf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4067 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 - - - diff --git a/frideos_library/android/app/src/profile/AndroidManifest.xml b/frideos_library/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index c2e1aefc..00000000 --- a/frideos_library/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/frideos_library/android/build.gradle b/frideos_library/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/frideos_library/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/frideos_library/android/gradle.properties b/frideos_library/android/gradle.properties deleted file mode 100644 index 38c8d454..00000000 --- a/frideos_library/android/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true -android.useAndroidX=true -android.enableJetifier=true diff --git a/frideos_library/android/gradle/wrapper/gradle-wrapper.properties b/frideos_library/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 296b146b..00000000 --- a/frideos_library/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/frideos_library/android/settings.gradle b/frideos_library/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/frideos_library/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/frideos_library/ios/.gitignore b/frideos_library/ios/.gitignore deleted file mode 100644 index e96ef602..00000000 --- a/frideos_library/ios/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/frideos_library/ios/Flutter/AppFrameworkInfo.plist b/frideos_library/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 6b4c0f78..00000000 --- a/frideos_library/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/frideos_library/ios/Flutter/Debug.xcconfig b/frideos_library/ios/Flutter/Debug.xcconfig deleted file mode 100644 index e8efba11..00000000 --- a/frideos_library/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/frideos_library/ios/Flutter/Release.xcconfig b/frideos_library/ios/Flutter/Release.xcconfig deleted file mode 100644 index 399e9340..00000000 --- a/frideos_library/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/frideos_library/ios/Podfile b/frideos_library/ios/Podfile deleted file mode 100644 index b30a428b..00000000 --- a/frideos_library/ios/Podfile +++ /dev/null @@ -1,90 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '9.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; - end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end - end - generated_key_values -end - -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; - - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' - - # Plugin Pods - - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') - end -end - -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end - end -end diff --git a/frideos_library/ios/Runner.xcodeproj/project.pbxproj b/frideos_library/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index f675d633..00000000 --- a/frideos_library/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,518 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B80C3931E831B6300D905FE /* App.framework */, - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.frideosLibrary; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.frideosLibrary; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.frideosLibrary; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/frideos_library/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/frideos_library/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/frideos_library/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/frideos_library/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/frideos_library/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a28140cf..00000000 --- a/frideos_library/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frideos_library/ios/Runner.xcworkspace/contents.xcworkspacedata b/frideos_library/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/frideos_library/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/frideos_library/ios/Runner/AppDelegate.swift b/frideos_library/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a..00000000 --- a/frideos_library/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d22f10b2..00000000 --- a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 980e5ad64bb0fd4a9c2c6506e9b811ffea9dd64b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)5QXpJpN(w?YkRkYwc_j#m|(3>!PrLIwlTJ6&Ufo}SH`I1$#eR?RVOWIzMsU) zrK2WI$*4hFGG^Q^9@T@8zu5)!Yz6I>${V_+j`Ok!^L)v;38fNcW`cbs^X>&xhbk?f zvS`XCEg(wS59HzvL0zJ3#-=Tswu302VRN>z3)sQt+#O8gBeP#+>JsI%uI=(!2l6=C zdFI%h9c;z_@g>lFVht7cT-%~z-i?ZdJmoU8IkPWPB^k`Ff#(xjg!dpSwLVm8y$Z@~ zqGHj@W>6!4&#i3X;(Y3is=Eq_sMPsUsrRE%>p_jmL_k5`*hG^t2U&6%yTe|1|lg*UW~p>+@q!E^s3OEa=e6Ud^0-fp0g z&B!j%6y4G^MmBL1O_42jA+woHwxTJ#r4io)FE___=bK_XXo_uveG`pQHs>9%se`%% x4TYA}o~Ajur)^2@Z#O6Q@F3(a-Ow$UJqP2R#rz($lm7q!002ovPDHLkV1fcFS>pfz diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index fd870289028b0d1ba6565d9f29fd42fab6bad5f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1591 zcmV-72FUq|P)Ffwcl%S_9_!a48Hv5l6Yg}=#nG6Dbu zla|r7Yb`^I)3=8fNzyX31gi{#!9`fl5R44#X&qjkmK_)Y1VY=0(Q$itxzaMci~?7J zyKH1wcMh7|XLASHg%J|-qf@pXF{&*iD^$-ij0`JyIjqHchvApQ$T03AS7awf2>H=E zVoaL{qYTWnjvBB;p1}%aY1}c541*Qen)UNz#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv; z?q3&e<7axnT(Y$hS>ykYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU9?SY zl0CLylXe)H&){aXGcRRIWPSb@&S>s!or|_aBlZ8FP zV=ahX*88G;#zXBh+X`g1q>VF-4C5|rhyFP)t?X1u_xvxC)$SMVvtD`w4~z_(bj-oX za4o|cKD-zpU*!;ev<20?M;dTJ^JP9;w8MaBVeEme`4cNaiXR?Rv*-WOoSK_wEc2pc z-cOwi3S{=X1Mm9MT7(KGr|8k7U|zR_3oZl*bk_W}NrOHzyJh_`l^26BGOXp>TXEVu zJ10BOU&GnjzWP3*b16ifOF@&4MdhE2FVJHzy+WUu;gYJ19-f7f;h*_ZbaZ}UtK1Xm za>H)G1;cm&;DU?v!V53ZQ!l+tpPk*LuH~=>H3wVyQz%QP7niom-IFL{&bkws3(7B6 zB8po6>4YjMdFI8J=u0!}B=1?l9E|yY#fx-td38B?=O3{Gc1U%R7f}wNr1@>T z^;xf;(1*M^?6XM*M&^PZUgF7`^l^qI?pn#Go_dO&d+s?D(o!rI2_@(EkI5y=dFttd z6|w-V;0y!N=gm`Z6WshW8CqCGkt<71?HrJU=lV4C!WwV}1JUa(P@k_k-woy|o6B8U z(4S0`!;{Ax^;)bl42m!^3`q0`O6UFl5=r{}MYw_QG$|?nTy7;&P*D93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+j ztOL979@$MeqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^ z$nd*OllQ^Xj1cnUL-EQrXRKOvMl0lCoFE2E)EO*kykCWpVe8!{^UAJxr6M~qLY6c6 zVB)yL6+fslctIn41|!2N!`5tX9`O4sA50u{FhXK}fDdI)uDOzj)2_rJNq896!Dlcs zjC=@Nvu<9IJermr7y%IK_+awrx+`_~H!f?qlZSa8Ja_V9{+g7*5v<@dSY_CnmEFA4 pojS_%e#4bI{@VvLN7oqv!0V&tCp*)&!{Pt{002ovPDHLkV1k)(4H5tV diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2506 zcmV;*2{rbKP)Z*FU!m{%*@P8VRsLNIdO-bn8LBcq}8jNvvE!9=H589 zS1q{F% z25_7w7rzc6_W!D9OuwF9IP!hcRh72%UTx5Ve2G1JF&R7ItnWOsxG;yFhdp@D-v_7k z&fdOmnO#2ee(9>pVtq010kWwNld+dE83*wHn9tfxBT2o#zpv%fYznjAHBY*l!u|2m zSf4hSMNGyg$1xwm-`9dY9-PW*J`_Ic{nAyH#QK&>FZOFo43jar5Bt!M3$uIOIUl>v zb9b5X3#kSD-cQS%Eqv6xMP zE1Yp6YpT=?fig_Kh{=PPj6E)4GIp-ZS?ri68GBT|J*YdD^7L~SW~Sf$s_d;n?I9a6 z86O}SlW`cF=fmCqsn)n2%B|DQU3h+l{eDQ{AqgImvG6u_z#8VP?>ut&`^aBtAJJ25 zoAf%WFtdD7GVuJ{!xnPrg0dHT=P{^0c=^-k#J?H&4rDa;IKAL**R;Bg+qyI7Dl?6?0iCgVW32mf*?q1Sfz z=n}fHUmsBNpsPIOBJ3dV4(?VgItv@Fu4~cXjdeNJ4Q-=X zkTvW(53?5w_f601lYAaaEi%u8TyU>q(bA3&^YwMj`h}NX(m!eGVBcXuOvdhcvL<%! ze>SspqOvb!mSs*L%6rh56AHih;)|A_H@E4+{TDD9A2AP;%Z=;jb0;eMNOFOB*o`eL zkL(y1%$N88ldrF9p|It5P46;5*0JRRCYv=(#zJ-Hgl=74E4rxsvheoAymLMogSucY z<-wA%;3_Qqt>G;*$gX227ciKa_|rX8dLX}1blF`~_UegQ<_E&Pw(wC<7~tyqm@cY8;W|KtwlU@|6uqkmeb zH@Ax}D?b_e=>MVDRK+0{Qa zGY;R24>BfWFnyGF7!ufW!Q|`fW4>kK-q-7OZRfb`_vPm!8NIr@S9IC=?H&Eyp`=&P zL*9tV*omA~}ZeJWoy5HD~$=HdkNnt5A zV=2cVg&Qu0Dhp4(@~Zx7`-nY%PkLGJpP=mE>Zblof3o0x)7Z;>GuWdSyY~yq+njVF zYd0LDFg*Y2YdV&i)hGFMdBe;2{~qZ!dO)F8jg@FX&V%1x1y9 zZDCDUN(sv10C;;)A5}S!)_zo&&EmhbwEC8O`st_jLk~TqpM3I3ie6EAZEY=7*{A37 z@3|k7aoF{g#$;tTvvCj~X8hM!8zsS(y!F;w^}`Q8OhG>aOW&W(9o&}@lW}2o7i1r{ zkPmw(`^6AsF&SI_5^J|b;kxUt(+@oGKww!|U0uDRsQm86&8Zc6nB0ZQ*v$|oW5GR7 zNeD}o;V+juY+3o&_`wGslz(MIm4$phuleklvj3V{4u3x;8O;oh`a>Hk*|{ z*FAE+h3xweWDa|nj5&)z5khf!UgL;iGIRXWnM_9C7*F`zF^}D_R>XVBN(NM4_Nc;S z?6V$;hcC@P*}n}=1i8bDSr6nA{Jx=_VVZ=F3f?YGp6iMhm%|?7UV2u9_DTw{2qZ!K}_qW+HdAyG7cc*d6O|2^A=3T($S!#tom$9pNdZ9^Kv*c znLivji9I5iJb?>y@#}7ipAXTgT>i7E+$n=n@)sdGx%LeyTSyJ|A%X*8Zw`~Odp{;m zVKR2Vhb-L;N>BtLl32UN8@4LQ0Zhg|2dW zA%Z~$U>6B&k+WEkHSFAPXJhuAV83+vgVrB5C?J3(I=%6Y==6G?K@gqBu#N>;!=Z>` zGKPTr$*hCCT{;*P00F@JA6atqAGI?Zc?v}^8M}Gk_sd)5&GL4GazXG#e(b7EZI(u6 zHm|NtZp0!p8}aDO=2CQK!(M`250o_w;5bhXyML)RxoO_A5i{?*THYvcHK?QbFVbTr U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 03ab8a84f141a4464654d46362eb539fffd7d067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 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 diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index f47613ee46814496f40d58ae909b756976d765e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcmV+}2GRM6P)oxL5Jl&M-bdt-nJLW7%*;tqD$LBxWM;P4BxYtABr|k+c6=+frM0{PRUMscPfyPc zN0@yoyQfc{?VNnEqH9uPrz*Op_Rn@r5@&*uVG9`URCG@6@%|KBtLUD5QNGCt01$L4 z`sPnmbWe?(?Vch@MfWs}3@f@|Q*dT^zM^MlM0Q{V5C~PhTFu#>nF0^-l4(m|mW>RX zor5y-Z0;btFhZh#)ymerTCt*cmW<56$gqN!!zLJK7=9c^hB1p=kewJI|_8U}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@Df?W z2J2MA$b1Huqni0OkwZ6C(4R1wv+aqh5neuGS0GCx!whEGD#I4$k?TfnG?ZCIFJnRM zWH2wPM;%l>YF8jjGgX{nWEius6`IGLG`n0Rv(KA>r0IT9J?5mpalpv1PR%%s3?F9L zg!866?Nf+=-x!ezKGY9`!N zJE=fs|3C1qYv%)$+1@Er4F%JtJ4DT-hd}M2ZyeI-{4ty1cY2=k!pN{Gx7ot9y1PeK zJ}>x_hx?3uMD4VXYNx$AHB-v>4@}aRzy3}akJ{Alj)L#P$nb-%7;WzDTPpW;Jb&aH zT+ojP02iF1pMUSp|=@GNZLSznTN_75zTdq0xJJ;P39Q7eC#4JZ!t z1B0rdSlvfrx|%*Xc`4| ze)#zpx_M+?KQqkp0$B2KJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^ z|CC;{RBm&BpC0kbav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA z0W0_q6h`KP3lRbhhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_UL9;QoS{=;0%|5GcFh< z(6Ffd;0OvH&D-NMOV_v(hBs7>!N@RXNi;0+;Zoed10!15asvYclt?5f zpU)p#F1)ovmpPMaH$M)m41+j~OhON~gbs51LWJJy>?tYs%{SjrXJ@BgE*_8T5RG;|v?ojGSc-AUUX-H`Km3q>`Q;as11Kr~x7|=~p}0-w zIezzr zXq;LcY233w7Dk2viDpl3ui2d=Ns~JZmvDQTlJf6MTO>v;YL<6^99(`s?!kb&i55>j z&4CnoSf`0IEV;v%F)cYAimF)#Mutnk?lSMScylSy>R-{Cz00J?!^ki)-Qmv}N)862 zI4_~a2P5a%W%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QG zL`$%6vL&!eI(`_e!0Ivsx2ZGE%BBQhQ`BALVleaE}Uo$6^pIG0<|!$AOtJ;4Av=~FT%!boGo)-xh-5M$WDxq<#akCTQzOr z^&*1@O2HW$8CDrKW-IprzhCHxtk*C?qJM#NliMfSq8lS^kqu(xW!My)nao=}hYyKv zj>ry-00;&;qMIk%VjC}VS*<;~k>-ngt-P3jCRnivEBFjn88&9=cHY?@+f4I*tu40o gVn<^0BqIR$3#s8JH79+r6951J07*qoM6N<$f+ET2fdBvi diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 42315c6dc1260f60b9de72e58f1fd4789c1f488a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�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 diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 45537513df37c45e8074c7c131c61cec2eac66ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 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 diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 6360ea17a408801185f000acaded313519da49b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9605 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7082 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 diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/frideos_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2f..00000000 --- a/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b..00000000 --- a/frideos_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -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. \ No newline at end of file diff --git a/frideos_library/ios/Runner/Base.lproj/LaunchScreen.storyboard b/frideos_library/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7..00000000 --- a/frideos_library/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frideos_library/ios/Runner/Base.lproj/Main.storyboard b/frideos_library/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516..00000000 --- a/frideos_library/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frideos_library/ios/Runner/Info.plist b/frideos_library/ios/Runner/Info.plist deleted file mode 100644 index 36b7bfcd..00000000 --- a/frideos_library/ios/Runner/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - frideos_library - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/frideos_library/ios/Runner/Runner-Bridging-Header.h b/frideos_library/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 7335fdf9..00000000 --- a/frideos_library/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/frideos_library/lib/app_state.dart b/frideos_library/lib/app_state.dart deleted file mode 100644 index 0c91154b..00000000 --- a/frideos_library/lib/app_state.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:path_provider/path_provider.dart'; - -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -import 'package:frideos/frideos.dart'; - -import 'package:frideos_library/blocs/stats_bloc.dart'; -import 'package:frideos_library/blocs/todos_bloc.dart'; -import 'package:frideos_library/models/models.dart'; - -class AppState extends AppStateModel { - static final AppState _singletonAppState = AppState._internal(); - - AppState._internal(); - - factory AppState() { - return _singletonAppState; - } - - LocalStorageRepository respository; - TodosBloc todosBloc; - StatsBloc statsBloc; - final tabController = StreamedValue(initialData: AppTab.todos); - - @override - void init() { - respository = const LocalStorageRepository( - localStorage: FileStorage( - 'frideos_library', - getApplicationDocumentsDirectory, - ), - ); - - todosBloc = TodosBloc(repository: respository); - statsBloc = StatsBloc(); - - todosBloc.todosSender.setReceiver(statsBloc.todosItems); - } - - @override - void dispose() { - todosBloc.dispose(); - statsBloc.dispose(); - tabController.dispose(); - } -} diff --git a/frideos_library/lib/blocs/stats_bloc.dart b/frideos_library/lib/blocs/stats_bloc.dart deleted file mode 100644 index d50f5f64..00000000 --- a/frideos_library/lib/blocs/stats_bloc.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:frideos/frideos.dart'; - -import 'package:frideos_library/models/models.dart'; - -class StatsBloc { - StatsBloc() { - todosItems.onChange((todos) { - numActive.value = - todos?.fold(0, (sum, todo) => !todo.complete ? ++sum : sum); - - numComplete.value = - todos?.fold(0, (sum, todo) => todo.complete ? ++sum : sum); - }); - } - // This will receive the todos from the TodoBloc. - final todosItems = StreamedList(); - - final numActive = StreamedValue(); - final numComplete = StreamedValue(); - - void dispose() { - todosItems.dispose(); - numActive.dispose(); - numComplete.dispose(); - } -} diff --git a/frideos_library/lib/blocs/todos_bloc.dart b/frideos_library/lib/blocs/todos_bloc.dart deleted file mode 100644 index 6f791446..00000000 --- a/frideos_library/lib/blocs/todos_bloc.dart +++ /dev/null @@ -1,162 +0,0 @@ -import 'package:todos_repository_core/todos_repository_core.dart'; - -import 'package:frideos/frideos.dart'; - -import 'package:frideos_library/models/models.dart'; - -class TodosBloc { - final TodosRepository repository; - - TodosBloc({this.repository}) { - _init(); - } - - void _init() async { - // Load the todos from the repository - await loadTodos(); - - // Listening for changes in the todos list, updated the streams and save - // to the repository. It is the same as: - // - // todosItems.outStream.listen((todos) => onTodosChange(...) - // - todosItems.onChange((todos) => - onTodosChange(allComplete, hasCompletedTodos, todos, onDataLoaded)); - - // Listening for changes in the VisibilityFilter and filter the visible - // todos depending on the current filter.: - activeFilter - .onChange((filter) => onFilterChange(todosItems, visibleTodos, filter)); - } - - // STREAMS - // - final todosItems = StreamedList(); - final visibleTodos = StreamedList(); - final activeFilter = - StreamedValue(initialData: VisibilityFilter.all); - final currentTodo = StreamedValue(initialData: Todo('Initializing')); - final allComplete = StreamedValue(initialData: false); - final hasCompletedTodos = StreamedValue(initialData: false); - - // SENDER (to send the todosItems list to the StatsBloc) - // - final todosSender = ListSender(); - - // METHODS - // - void loadTodos() async { - var todos = await repository.loadTodos(); - todosItems.value = todos.map(Todo.fromEntity).toList() ?? []; - todosSender.send(todosItems.value); - } - - /// Every time the todos list changes, this method will save the todos, update - /// the visible todos, and send to the statsBloc the todos list. - void onDataLoaded() { - saveTodos(); - updateVisibleItems(); - todosSender.send(todosItems.value); - } - - void updateVisibleItems() => - visibleTodos.value = filterTodos(todosItems.value, activeFilter.value); - - void saveTodos() => repository - .saveTodos(todosItems.value.map((item) => item.toEntity()).toList()); - - void addTodo(Todo todo) => todosItems.addElement(todo); - - void updateTodo(Todo todo) { - todosItems.replace(currentTodo.value, todo); - currentTodo.value = todo; - } - - void addEdit(bool isEditing, String task, String note) { - if (isEditing) { - updateTodo(currentTodo.value.copyWith(task: task, note: note)); - } else { - addTodo(Todo( - task, - note: note, - )); - } - } - - void deleteTodo(Todo todo) => todosItems.removeElement(todo); - - void onCheckboxChanged(Todo todo) { - var updatedTodo = todo.copyWith(complete: !todo.complete); - todosItems?.replace(todo, updatedTodo); - currentTodo.value = updatedTodo; - } - - void clearCompleted() { - todosItems.value.removeWhere((todo) => todo.complete); - - // Call the refresh method to update the stream when - // there is no implementation of the respective method - // on the StreamedList class, read the docs for details. - todosItems.refresh(); - } - - void toggleAll() { - var areAllComplete = todosItems.value.every((todo) => todo.complete); - todosItems.value = todosItems.value - .map((todo) => todo.copyWith(complete: !areAllComplete)) - .toList(); - } - - void extraAction(ExtraAction action) { - if (action == ExtraAction.toggleAllComplete) { - toggleAll(); - } else if (action == ExtraAction.clearCompleted) { - clearCompleted(); - } - } - - static void onTodosChange( - StreamedValue _allComplete, - StreamedValue _hasCompletedTodos, - List todos, - Function _onDataLoaded, - ) { - _allComplete.value = todos.every((todo) => todo.complete); - _hasCompletedTodos.value = todos.any((todo) => todo.complete); - - // Saving items, updating visible items and sending to the statsBloc - // the todos list. - _onDataLoaded(); - } - - static void onFilterChange(StreamedList _todosItems, - StreamedList _visibleTodos, VisibilityFilter _filter) { - if (_todosItems.value != null) { - _visibleTodos.value = filterTodos(_todosItems.value, _filter); - } - } - - static List filterTodos(List todos, VisibilityFilter filter) { - return todos.where((todo) { - switch (filter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); - } - - /// To close all the streams - void dispose() { - todosItems.dispose(); - currentTodo.dispose(); - activeFilter.dispose(); - allComplete.dispose(); - hasCompletedTodos.dispose(); - visibleTodos.dispose(); - } -} diff --git a/frideos_library/lib/localization.dart b/frideos_library/lib/localization.dart deleted file mode 100644 index 50f117bd..00000000 --- a/frideos_library/lib/localization.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -class FrideosLocalizations { - static FrideosLocalizations of(BuildContext context) { - return Localizations.of( - context, FrideosLocalizations); - } - - String get appTitle => 'Frideos Example'; -} - -class FrideosLocalizationsDelegate - extends LocalizationsDelegate { - @override - Future load(Locale locale) => - Future(() => FrideosLocalizations()); - - @override - bool shouldReload(FrideosLocalizationsDelegate old) => false; - - @override - bool isSupported(Locale locale) => - locale.languageCode.toLowerCase().contains('en'); -} diff --git a/frideos_library/lib/main.dart b/frideos_library/lib/main.dart deleted file mode 100644 index 909d6f94..00000000 --- a/frideos_library/lib/main.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:frideos/frideos.dart'; -import 'package:frideos_library/app_state.dart'; -import 'package:frideos_library/localization.dart'; -import 'package:frideos_library/screens/add_edit_screen.dart'; -import 'package:frideos_library/screens/homescreen.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -void main() { - runApp(FrideosApp()); -} - -class FrideosApp extends StatelessWidget { - final appState = AppState(); - - @override - Widget build(BuildContext context) { - return AppStateProvider( - appState: appState, - child: MaterialApp( - onGenerateTitle: (context) => FrideosLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FrideosLocalizationsDelegate(), - ], - routes: { - ArchSampleRoutes.home: (context) => HomeScreen(), - ArchSampleRoutes.addTodo: (context) => AddEditScreen(), - }, - ), - ); - } -} diff --git a/frideos_library/lib/models/extra_actions_model.dart b/frideos_library/lib/models/extra_actions_model.dart deleted file mode 100644 index d875c3cb..00000000 --- a/frideos_library/lib/models/extra_actions_model.dart +++ /dev/null @@ -1,8 +0,0 @@ -class ExtraActionsButtonViewModel { - final bool allComplete; - final bool hasCompletedTodos; - - ExtraActionsButtonViewModel(this.allComplete, this.hasCompletedTodos); -} - -enum ExtraAction { toggleAllComplete, clearCompleted } diff --git a/frideos_library/lib/models/models.dart b/frideos_library/lib/models/models.dart deleted file mode 100644 index 7767e8d0..00000000 --- a/frideos_library/lib/models/models.dart +++ /dev/null @@ -1,6 +0,0 @@ -export 'extra_actions_model.dart'; -export 'package:frideos_library/models/todo.dart'; - -enum VisibilityFilter { all, active, completed } - -enum AppTab { todos, stats } diff --git a/frideos_library/lib/models/todo.dart b/frideos_library/lib/models/todo.dart deleted file mode 100644 index 53ce9976..00000000 --- a/frideos_library/lib/models/todo.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -class Todo { - final bool complete; - final String id; - final String note; - final String task; - - Todo(this.task, {this.complete = false, String note = '', String id}) - : note = note ?? '', - id = id ?? Uuid().generateV4(); - - Todo copyWith({bool complete, String id, String note, String task}) { - return Todo( - task ?? this.task, - complete: complete ?? this.complete, - id: id ?? this.id, - note: note ?? this.note, - ); - } - - @override - int get hashCode => - complete.hashCode ^ task.hashCode ^ note.hashCode ^ id.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is Todo && - runtimeType == other.runtimeType && - complete == other.complete && - task == other.task && - note == other.note && - id == other.id; - - @override - String toString() { - return 'Todo{complete: $complete, task: $task, note: $note, id: $id}'; - } - - TodoEntity toEntity() { - return TodoEntity(task, id, note, complete); - } - - static Todo fromEntity(TodoEntity entity) { - return Todo( - entity.task, - complete: entity.complete ?? false, - note: entity.note, - id: entity.id ?? Uuid().generateV4(), - ); - } -} diff --git a/frideos_library/lib/screens/add_edit_screen.dart b/frideos_library/lib/screens/add_edit_screen.dart deleted file mode 100644 index bb4718d3..00000000 --- a/frideos_library/lib/screens/add_edit_screen.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:frideos/frideos.dart'; -import 'package:frideos_library/app_state.dart'; -import 'package:frideos_library/models/models.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class AddEditScreen extends StatefulWidget { - // Set to false by default to show the 'add todo'. - // On 'detail screen', push this screen with isEditing set - // to 'true', so that the fab will be used to edit an existing todo. - final bool isEditing; - - AddEditScreen({Key key, this.isEditing = false}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); - - @override - _AddEditScreenState createState() => _AddEditScreenState(); -} - -class _AddEditScreenState extends State { - static final GlobalKey formKey = GlobalKey(); - - String _task; - String _note; - - @override - Widget build(BuildContext context) { - final bloc = AppStateProvider.of(context).todosBloc; - var isEditing = widget.isEditing; - - return ValueBuilder( - streamed: bloc.currentTodo, - builder: (context, snapshot) => Scaffold( - appBar: AppBar( - title: Text( - isEditing - ? ArchSampleLocalizations.of(context).editTodo - : ArchSampleLocalizations.of(context).addTodo, - ), - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: Form( - key: formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, - child: ListView( - children: [ - TextFormField( - initialValue: isEditing ? snapshot.data.task : '', - key: ArchSampleKeys.taskField, - autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headlineSmall, - decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).newTodoHint, - ), - validator: (val) => val.trim().isEmpty - ? ArchSampleLocalizations.of(context).emptyTodoError - : null, - onSaved: (value) => _task = value, - ), - TextFormField( - initialValue: isEditing ? snapshot.data.note : '', - key: ArchSampleKeys.noteField, - maxLines: 10, - style: Theme.of(context).textTheme.titleMedium, - decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).notesHint, - ), - onSaved: (value) => _note = value, - ), - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - key: isEditing - ? ArchSampleKeys.saveTodoFab - : ArchSampleKeys.saveNewTodo, - tooltip: isEditing - ? ArchSampleLocalizations.of(context).saveChanges - : ArchSampleLocalizations.of(context).addTodo, - child: Icon(isEditing ? Icons.check : Icons.add), - onPressed: () { - final form = formKey.currentState; - if (form.validate()) { - form.save(); - - bloc.addEdit(isEditing, _task, _note); - - Navigator.pop(context); - } - }, - ), - ), - ); - } -} diff --git a/frideos_library/lib/screens/detail_screen.dart b/frideos_library/lib/screens/detail_screen.dart deleted file mode 100644 index 8c96cc07..00000000 --- a/frideos_library/lib/screens/detail_screen.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:frideos/frideos.dart'; -import 'package:frideos_library/app_state.dart'; -import 'package:frideos_library/models/models.dart'; -import 'package:frideos_library/screens/add_edit_screen.dart'; -import 'package:frideos_library/widgets/loading.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class DetailScreen extends StatelessWidget { - DetailScreen() : super(key: ArchSampleKeys.todoDetailsScreen); - - @override - Widget build(BuildContext context) { - final bloc = AppStateProvider.of(context).todosBloc; - - return ValueBuilder( - streamed: bloc.currentTodo, - noDataChild: LoadingSpinner(key: ArchSampleKeys.todosLoading), - builder: (context, snapshot) { - final todo = snapshot.data; - - return Scaffold( - appBar: AppBar( - title: Text(ArchSampleLocalizations.of(context).todoDetails), - actions: [ - IconButton( - key: ArchSampleKeys.deleteTodoButton, - tooltip: ArchSampleLocalizations.of(context).deleteTodo, - icon: Icon(Icons.delete), - onPressed: () { - bloc.deleteTodo(todo); - Navigator.pop(context, todo); - }, - ), - ], - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: ListView( - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(right: 8.0), - child: Checkbox( - value: todo.complete, - key: ArchSampleKeys.detailsTodoItemCheckbox, - onChanged: (_) => bloc.onCheckboxChanged(todo), - ), - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(top: 8.0, bottom: 16.0), - child: Text( - todo.task, - key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headlineSmall, - ), - ), - Text( - todo.note, - key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.titleMedium, - ), - ], - ), - ), - ], - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), - key: ArchSampleKeys.editTodoFab, - onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - // Set the isEditing flag to true to push the page - // in 'editing mode'. - return AddEditScreen( - isEditing: true, - key: ArchSampleKeys.editTodoScreen, - ); - }, - ), - ); - }, - ), - ); - }, - ); - } -} diff --git a/frideos_library/lib/screens/homescreen.dart b/frideos_library/lib/screens/homescreen.dart deleted file mode 100644 index 5da926b9..00000000 --- a/frideos_library/lib/screens/homescreen.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:frideos/frideos.dart'; - -import 'package:frideos_library/app_state.dart'; -import 'package:frideos_library/localization.dart'; -import 'package:frideos_library/blocs/todos_bloc.dart'; -import 'package:frideos_library/models/models.dart'; -import 'package:frideos_library/widgets/extra_actions_button.dart'; -import 'package:frideos_library/widgets/filter_button.dart'; -import 'package:frideos_library/widgets/todo_list.dart'; -import 'package:frideos_library/widgets/stats_counter.dart'; - -class HomeScreen extends StatelessWidget { - @override - Widget build(BuildContext context) { - final bloc = AppStateProvider.of(context).todosBloc; - final tabController = AppStateProvider.of(context).tabController; - - return ValueBuilder( - streamed: tabController, - builder: (context, activeTabSnapshot) => Scaffold( - appBar: AppBar( - title: Text(FrideosLocalizations.of(context).appTitle), - actions: _buildActions( - bloc, - activeTabSnapshot, - ), - ), - body: activeTabSnapshot.data == AppTab.todos - ? TodoList() - : StatsCounter(), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.addTodoFab, - onPressed: () { - Navigator.pushNamed(context, ArchSampleRoutes.addTodo); - }, - child: Icon(Icons.add), - tooltip: ArchSampleLocalizations.of(context).addTodo, - ), - bottomNavigationBar: BottomNavigationBar( - key: ArchSampleKeys.tabs, - currentIndex: AppTab.values.indexOf(activeTabSnapshot.data), - onTap: (index) { - tabController.value = AppTab.values[index]; - }, - items: AppTab.values.map((tab) { - return BottomNavigationBarItem( - icon: Icon( - tab == AppTab.todos ? Icons.list : Icons.show_chart, - key: tab == AppTab.stats - ? ArchSampleKeys.statsTab - : ArchSampleKeys.todoTab, - ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), - ); - }).toList(), - ), - ), - ); - } - - List _buildActions( - TodosBloc bloc, AsyncSnapshot activeTabSnapshot) { - return [ - ValueBuilder( - streamed: bloc.activeFilter, - builder: (context, snapshot) { - return FilterButton( - isActive: activeTabSnapshot.data == AppTab.todos, - activeFilter: snapshot.data ?? VisibilityFilter.all, - onSelected: bloc.activeFilter.inStream, - ); - }, - ), - ValueBuilder( - streamed: bloc.allComplete, - builder: (context, snapshot) { - return ExtraActionsButton( - allComplete: snapshot?.data ?? false, - ); - }, - ), - ]; - } -} diff --git a/frideos_library/lib/widgets/extra_actions_button.dart b/frideos_library/lib/widgets/extra_actions_button.dart deleted file mode 100644 index cdc710d7..00000000 --- a/frideos_library/lib/widgets/extra_actions_button.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:frideos/frideos.dart'; - -import 'package:frideos_library/app_state.dart'; -import 'package:frideos_library/models/models.dart'; - -class ExtraActionsButton extends StatelessWidget { - final bool allComplete; - - ExtraActionsButton({ - this.allComplete = false, - Key key, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, - onSelected: AppStateProvider.of(context).todosBloc.extraAction, - itemBuilder: (BuildContext context) { - return >[ - PopupMenuItem( - key: ArchSampleKeys.toggleAll, - value: ExtraAction.toggleAllComplete, - child: Text( - allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.clearCompleted, - value: ExtraAction.clearCompleted, - child: Text( - ArchSampleLocalizations.of(context).clearCompleted, - ), - ), - ]; - }, - ); - } -} diff --git a/frideos_library/lib/widgets/filter_button.dart b/frideos_library/lib/widgets/filter_button.dart deleted file mode 100644 index 067cebeb..00000000 --- a/frideos_library/lib/widgets/filter_button.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:frideos_library/models/models.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class FilterButton extends StatelessWidget { - final PopupMenuItemSelected onSelected; - final VisibilityFilter activeFilter; - final bool isActive; - - FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - final defaultStyle = theme.textTheme.bodyMedium; - final activeStyle = theme.textTheme.bodyMedium.copyWith( - color: theme.accentColor, - ); - final button = _Button( - onSelected: onSelected, - activeFilter: activeFilter, - activeStyle: activeStyle, - defaultStyle: defaultStyle, - ); - - return AnimatedOpacity( - opacity: isActive ? 1.0 : 0.0, - duration: Duration(milliseconds: 150), - child: isActive ? button : IgnorePointer(child: button), - ); - } -} - -class _Button extends StatelessWidget { - const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); - - final PopupMenuItemSelected onSelected; - final VisibilityFilter activeFilter; - final TextStyle activeStyle; - final TextStyle defaultStyle; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - key: ArchSampleKeys.filterButton, - tooltip: ArchSampleLocalizations.of(context).filterTodos, - onSelected: onSelected, - itemBuilder: (BuildContext context) { - return >[ - PopupMenuItem( - key: ArchSampleKeys.allFilter, - value: VisibilityFilter.all, - child: Text( - ArchSampleLocalizations.of(context).showAll, - style: activeFilter == VisibilityFilter.all - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.activeFilter, - value: VisibilityFilter.active, - child: Text( - ArchSampleLocalizations.of(context).showActive, - style: activeFilter == VisibilityFilter.active - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.completedFilter, - value: VisibilityFilter.completed, - child: Text( - ArchSampleLocalizations.of(context).showCompleted, - style: activeFilter == VisibilityFilter.completed - ? activeStyle - : defaultStyle, - ), - ), - ]; - }, - icon: Icon(Icons.filter_list), - ); - } -} diff --git a/frideos_library/lib/widgets/loading.dart b/frideos_library/lib/widgets/loading.dart deleted file mode 100644 index 2cf57230..00000000 --- a/frideos_library/lib/widgets/loading.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:flutter/material.dart'; - -class LoadingSpinner extends StatelessWidget { - LoadingSpinner({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); - } -} diff --git a/frideos_library/lib/widgets/stats_counter.dart b/frideos_library/lib/widgets/stats_counter.dart deleted file mode 100644 index bda7035a..00000000 --- a/frideos_library/lib/widgets/stats_counter.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:frideos/frideos.dart'; -import 'package:frideos_library/app_state.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class StatsCounter extends StatelessWidget { - @override - Widget build(BuildContext context) { - var bloc = AppStateProvider.of(context).statsBloc; - - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: ValueBuilder( - streamed: bloc.numComplete, - builder: (context, snapshot) => Text( - '${snapshot.data ?? 0}', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: ValueBuilder( - streamed: bloc.numActive, - builder: (context, snapshot) { - return Text( - '${snapshot.data ?? 0}', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.titleMedium, - ); - }, - ), - ), - ], - ), - ); - } -} diff --git a/frideos_library/lib/widgets/todo_item.dart b/frideos_library/lib/widgets/todo_item.dart deleted file mode 100644 index 9b603b5e..00000000 --- a/frideos_library/lib/widgets/todo_item.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:frideos_library/models/todo.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class TodoItem extends StatelessWidget { - final DismissDirectionCallback onDismissed; - final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; - final Todo todo; - - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, - }); - - @override - Widget build(BuildContext context) { - return Dismissible( - key: ArchSampleKeys.todoItem(todo.id), - onDismissed: onDismissed, - child: ListTile( - onTap: onTap, - leading: Checkbox( - key: ArchSampleKeys.todoItemCheckbox(todo.id), - value: todo.complete, - onChanged: onCheckboxChanged, - ), - title: Text( - todo.task, - key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.titleLarge, - ), - subtitle: Text( - todo.note, - key: ArchSampleKeys.todoItemNote(todo.id), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ); - } -} diff --git a/frideos_library/lib/widgets/todo_list.dart b/frideos_library/lib/widgets/todo_list.dart deleted file mode 100644 index b09e89c1..00000000 --- a/frideos_library/lib/widgets/todo_list.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:todos_app_core/todos_app_core.dart'; - -import 'package:frideos/frideos.dart'; - -import 'package:frideos_library/app_state.dart'; -import 'package:frideos_library/models/todo.dart'; -import 'package:frideos_library/screens/detail_screen.dart'; -import 'package:frideos_library/widgets/loading.dart'; -import 'package:frideos_library/widgets/todo_item.dart'; - -class TodoList extends StatelessWidget { - TodoList({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - var bloc = AppStateProvider.of(context).todosBloc; - - return ValueBuilder>( - streamed: bloc.visibleTodos, - noDataChild: LoadingSpinner(key: ArchSampleKeys.todosLoading), - builder: (context, snapshot) => Container( - child: ListView.builder( - key: ArchSampleKeys.todoList, - itemCount: snapshot.data.length, - itemBuilder: (BuildContext context, int index) { - final todo = snapshot.data[index]; - - return TodoItem( - todo: todo, - onDismissed: (direction) { - _removeTodo(context, todo); - }, - onTap: () { - bloc.currentTodo.value = todo; - - Navigator.push( - context, - MaterialPageRoute(builder: (context) => DetailScreen()), - ).then((todo) { - if (todo is Todo) { - _showUndoSnackbar(context, todo); - } - }); - }, - onCheckboxChanged: (complete) => bloc.onCheckboxChanged(todo), - ); - }), - ), - ); - } - - void _removeTodo(BuildContext context, Todo todo) { - AppStateProvider.of(context).todosBloc.deleteTodo(todo); - _showUndoSnackbar(context, todo); - } - - void _showUndoSnackbar(BuildContext context, Todo todo) { - final snackBar = SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - key: ArchSampleKeys.snackbarAction(todo.id), - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - AppStateProvider.of(context).todosBloc.addTodo(todo); - }, - ), - ); - - Scaffold.of(context).showSnackBar(snackBar); - } -} diff --git a/frideos_library/pubspec.yaml b/frideos_library/pubspec.yaml deleted file mode 100644 index 1a4a6a51..00000000 --- a/frideos_library/pubspec.yaml +++ /dev/null @@ -1,78 +0,0 @@ -name: frideos_library -description: A new Flutter project. - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.1.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - frideos: ^1.0.0+1 - todos_app_core: - path: ../todos_app_core - todos_repository_local_storage: - path: ../todos_repository_local_storage - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_driver: - sdk: flutter - test: - mockito: - integration_tests: - path: ../integration_tests - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/frideos_library/test/stats_bloc_test.dart b/frideos_library/test/stats_bloc_test.dart deleted file mode 100644 index 2fbeae2b..00000000 --- a/frideos_library/test/stats_bloc_test.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'dart:async'; - -import 'package:test/test.dart'; - -import 'package:todos_repository_core/todos_repository_core.dart'; - -import 'package:frideos_library/blocs/todos_bloc.dart'; -import 'package:frideos_library/blocs/stats_bloc.dart'; -import 'package:frideos_library/models/models.dart'; - -class MockRepository extends TodosRepository { - List entities; - - MockRepository(List todos) - : entities = todos.map((it) => it.toEntity()).toList(); - - @override - Future> loadTodos() { - return Future.value(entities); - } - - @override - Future saveTodos(List todos) { - return Future.sync(() => entities = todos); - } -} - -void main() { - group('StatsBloc', () { - test('should stream the number of active todos', () async { - final statsBloc = StatsBloc(); - - var todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; - - final todosBloc = TodosBloc(repository: MockRepository(todos)); - - todosBloc.todosSender.setReceiver(statsBloc.todosItems); - - await todosBloc.loadTodos(); - - await expectLater(statsBloc.numActive.outStream, emits(2)); - }); - - test('should stream the number of completed todos', () async { - final statsBloc = StatsBloc(); - - final todos = [ - Todo('a'), - Todo('b'), - Todo('Hallo', complete: true), - Todo('Friend', complete: true), - Todo('Flutter', complete: true), - ]; - - final todosBloc = TodosBloc(repository: MockRepository(todos)); - - todosBloc.todosSender.setReceiver(statsBloc.todosItems); - - await todosBloc.loadTodos(); - - await expectLater(statsBloc.numComplete.outStream, emits(3)); - }); - }); -} diff --git a/frideos_library/test/todos_bloc_test.dart b/frideos_library/test/todos_bloc_test.dart deleted file mode 100644 index e3179f58..00000000 --- a/frideos_library/test/todos_bloc_test.dart +++ /dev/null @@ -1,362 +0,0 @@ -import 'dart:async'; - -import 'package:test/test.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -import 'package:frideos_library/models/models.dart'; -import 'package:frideos_library/blocs/todos_bloc.dart'; - -import 'package:frideos/frideos.dart'; - -class MockRepository extends TodosRepository { - List entities; - - MockRepository(List todos) - : entities = todos.map((it) => it.toEntity()).toList(); - - @override - Future> loadTodos() { - return Future.value(entities); - } - - @override - Future saveTodos(List todos) { - return Future.sync(() => entities = todos); - } -} - -void main() { - group('TodosBloc', () { - test('Add a new todo', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - final todoToAdd = Todo('d'); - - todosBloc.addTodo(todoToAdd); - - expect(todosBloc.todosItems.value.contains(todoToAdd), true); - expect(todosBloc.todosItems.length, 4); - }); - - test('Delete a todo', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - final todoToDelete = - todosBloc.todosItems.value.firstWhere((todo) => todo.task == 'b'); - - todosBloc.deleteTodo(todoToDelete); - - expect(todosBloc.todosItems.value.contains(todoToDelete), false); - expect(todosBloc.todosItems.length, 2); - }); - - test('Update a todo', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - // Todo to update - todosBloc.currentTodo.value = todosBloc.todosItems.value[1]; - - // Updated todo - final todoUpdated = Todo('d'); - - todosBloc.updateTodo(todoUpdated); - expect(todosBloc.todosItems.value[1], todoUpdated); - expect(todosBloc.todosItems.value.contains(todoUpdated), true); - expect(todosBloc.currentTodo.value, todoUpdated); - expect(todosBloc.todosItems.length, 3); - }); - - test('Testing addEdit method', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - // Todo adding - todosBloc.addEdit(false, 'd', 'note'); - - expect(todosBloc.todosItems.value.firstWhere((todo) => todo.task == 'd'), - isNotNull); - expect(todosBloc.todosItems.length, 4); - - // Todo editing - todosBloc.currentTodo.value = - todosBloc.todosItems.value.firstWhere((todo) => todo.task == 'd'); - todosBloc.addEdit(true, 'e', 'note'); - - expect(todosBloc.todosItems.value.firstWhere((todo) => todo.task == 'e'), - isNotNull); - expect(todosBloc.todosItems.length, 4); - }); - - test('Change todo complete status', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - // Todo to update - final todoToUpdate = - todosBloc.todosItems.value.firstWhere((todo) => todo.task == 'c'); - - // Changing complete status - todosBloc.onCheckboxChanged(todoToUpdate); - - expect(todosBloc.todosItems.value.contains(todoToUpdate), false); - expect( - todosBloc.todosItems.value - .contains(todoToUpdate.copyWith(complete: false)), - true); - expect(todosBloc.todosItems.length, 3); - }); - - test('should check if there are completed todos', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - expect(todosBloc.todosItems.value.any((it) => it.complete), true); - }); - - test('should calculate the number of active todos', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - expect( - todosBloc.todosItems.value - .where((it) => !it.complete) - .toList() - .length, - 2); - }); - - test('should calculate the number of completed todos', () async { - final todosBloc = TodosBloc( - repository: MockRepository([ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ])); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - expect( - todosBloc.todosItems.value.where((it) => it.complete).toList().length, - 1); - }); - - test('should return all todos if the VisibilityFilter is all', () async { - final todos = [ - Todo('a'), - Todo('b'), - Todo('c', complete: true), - ]; - final todosBloc = TodosBloc( - repository: MockRepository(todos), - ); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - todosBloc.activeFilter.value = VisibilityFilter.all; - - expect(todosBloc.visibleTodos.outStream, emits(todos)); - }); - - test('should return active todos if the VisibilityFilter is active', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final todosBloc = TodosBloc( - repository: MockRepository(todos), - ); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - todosBloc.activeFilter.value = VisibilityFilter.active; - - expect( - todosBloc.visibleTodos.outStream, - emitsThrough([ - todo1, - todo2, - ])); - }); - - test('should return completed todos if the VisibilityFilter is completed', - () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final todosBloc = TodosBloc( - repository: MockRepository(todos), - ); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - todosBloc.activeFilter.value = VisibilityFilter.completed; - - expect(todosBloc.visibleTodos.outStream, emitsThrough([todo3])); - }); - - test('should clear the completed todos', () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final todosBloc = TodosBloc( - repository: MockRepository(todos), - ); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - todosBloc.clearCompleted(); - - expect(todosBloc.todosItems.value, [ - todo1, - todo2, - ]); - }); - - test('toggle all as complete or incomplete', () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [ - todo1, - todo2, - todo3, - ]; - final todosBloc = TodosBloc( - repository: MockRepository(todos), - ); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - // Toggle all complete - todosBloc.toggleAll(); - expect(todosBloc.todosItems.value.every((t) => t.complete), isTrue); - - // Toggle all incomplete - todosBloc.toggleAll(); - expect(todosBloc.todosItems.value.every((t) => !t.complete), isTrue); - }); - - test('testing extraAction method', () async { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - - final todos = [ - todo1, - todo2, - ]; - final todosBloc = TodosBloc( - repository: MockRepository(todos), - ); - - final streamedList = StreamedList(); - todosBloc.todosSender.setReceiver(streamedList); - - await todosBloc.loadTodos(); - - todosBloc.extraAction(ExtraAction.toggleAllComplete); - expect(todosBloc.todosItems.value.every((t) => t.complete), isTrue); - - todosBloc.extraAction(ExtraAction.clearCompleted); - expect(todosBloc.todosItems.length, 0); - }); - }); -} diff --git a/frideos_library/test_driver/main_test.dart b/frideos_library/test_driver/main_test.dart deleted file mode 100644 index da7a453e..00000000 --- a/frideos_library/test_driver/main_test.dart +++ /dev/null @@ -1,37 +0,0 @@ -// This is a basic Flutter Driver test for the application. A Flutter Driver -// test is an end-to-end test that "drives" your application from another -// process or even from another computer. If you are familiar with -// Selenium/WebDriver for web, Espresso for Android or UI Automation for iOS, -// this is simply Flutter's version of that. - -import 'package:flutter_driver/flutter_driver.dart'; -import 'package:test/test.dart'; - -void main() { - group('end-to-end test', () { - FlutterDriver driver; - - setUpAll(() async { - // Connect to a running Flutter application instance. - driver = await FlutterDriver.connect(); - }); - - tearDownAll(() async { - if (driver != null) await driver.close(); - }); - - test('tap on the floating action button; verify counter', () async { - // Finds the floating action button (fab) to tap on - final fab = find.byTooltip('Increment'); - - // Wait for the floating action button to appear - await driver.waitFor(fab); - - // Tap on the fab - await driver.tap(fab); - - // Wait for text to change to the desired value - await driver.waitFor(find.text('1')); - }); - }); -} diff --git a/frideos_library/test_driver/todo_app.dart b/frideos_library/test_driver/todo_app.dart deleted file mode 100644 index ccf7ec05..00000000 --- a/frideos_library/test_driver/todo_app.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:frideos_library/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/frideos_library/test_driver/todo_app_test.dart b/frideos_library/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/frideos_library/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} From c71cd160ad8355537586ed7861de4b45f5535756 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:18:52 +0100 Subject: [PATCH 20/89] Migrate to github CI --- .github/actions/app_validation.yml | 78 ++++++++++++++++++++++++++++++ .github/workflows/validation.yml | 18 +++++++ 2 files changed, 96 insertions(+) create mode 100644 .github/actions/app_validation.yml create mode 100644 .github/workflows/validation.yml diff --git a/.github/actions/app_validation.yml b/.github/actions/app_validation.yml new file mode 100644 index 00000000..091a2933 --- /dev/null +++ b/.github/actions/app_validation.yml @@ -0,0 +1,78 @@ +name: 'App Validation' +description: 'Runs lint, format, and test on an app' +runs: + using: "composite" + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up flutter + uses: kuhnroyal/flutter-fvm-config-action/setup@v3 + + - name: Install linux integration test dependencies + run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb + + - name: Get dependencies + run: flutter pub get + + - name: Check dart formatting + run: dart format -o none --set-exit-if-changed . + + - name: Check dart analysis + run: dart analyze --fatal-infos --fatal-warnings . + + - name: Run unit tests + run: flutter test + + - name: Run linux integration tests + run: | + export DISPLAY=:99 # Set display for Xvfb + xvfb-run -a flutter test integration_test/app_test.dart -d linux + + + + + + + + + + + + + + +------------ +name: "Run Linux Integration Tests" + +on: + workflow_call: + inputs: + working-directory: + description: "Working directory for the app validations" + required: true + type: string + +jobs: + linux_integration_tests: + name: Run Linux Integration Tests + runs-on: ubuntu-latest + defaults: + run: + working-directory: ${{ inputs.working-directory }} + + steps: + + + - name: Install Dependencies + run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb + + - name: Set up Flutter + uses: subosito/flutter-action@v2 + with: + channel: "stable" + + - name: Get Dependencies + run: flutter pub get + + diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml new file mode 100644 index 00000000..fbaffb13 --- /dev/null +++ b/.github/workflows/validation.yml @@ -0,0 +1,18 @@ +name: Validation + +on: + pull_request: + push: + branches: + - main + - refresh + +jobs: + vanilla: + name: Vanilla + runs-on: ubuntu-latest + defaults: + run: + working-directory: vanilla + steps: + - uses: ./.github/actions/app_validation.yml From f0415db67e67c19c21598aa6548dfb58a8836057 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:21:22 +0100 Subject: [PATCH 21/89] Checkout first --- .github/actions/app_validation.yml | 3 --- .github/workflows/validation.yml | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/app_validation.yml b/.github/actions/app_validation.yml index 091a2933..79f1fcc5 100644 --- a/.github/actions/app_validation.yml +++ b/.github/actions/app_validation.yml @@ -3,9 +3,6 @@ description: 'Runs lint, format, and test on an app' runs: using: "composite" steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Set up flutter uses: kuhnroyal/flutter-fvm-config-action/setup@v3 diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index fbaffb13..84db7e0b 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -15,4 +15,7 @@ jobs: run: working-directory: vanilla steps: + - name: Checkout repository + uses: actions/checkout@v4 + - uses: ./.github/actions/app_validation.yml From e364fd970194684f22b60564c7a8e60f71e9f234 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:27:22 +0100 Subject: [PATCH 22/89] Rename github action --- .../actions/{app_validation.yml => app_validation/action.yml} | 0 .github/workflows/validation.yml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename .github/actions/{app_validation.yml => app_validation/action.yml} (100%) diff --git a/.github/actions/app_validation.yml b/.github/actions/app_validation/action.yml similarity index 100% rename from .github/actions/app_validation.yml rename to .github/actions/app_validation/action.yml diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 84db7e0b..e87828a4 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -18,4 +18,4 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - uses: ./.github/actions/app_validation.yml + - uses: ./.github/actions/app_validation From 82465509d088d08208e6b163314c55b43f304a87 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:29:48 +0100 Subject: [PATCH 23/89] specify shell --- .github/actions/app_validation/action.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index 79f1fcc5..78e441c1 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -7,21 +7,27 @@ runs: uses: kuhnroyal/flutter-fvm-config-action/setup@v3 - name: Install linux integration test dependencies + shell: bash run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb - name: Get dependencies + shell: bash run: flutter pub get - name: Check dart formatting + shell: bash run: dart format -o none --set-exit-if-changed . - name: Check dart analysis + shell: bash run: dart analyze --fatal-infos --fatal-warnings . - name: Run unit tests + shell: bash run: flutter test - name: Run linux integration tests + shell: bash run: | export DISPLAY=:99 # Set display for Xvfb xvfb-run -a flutter test integration_test/app_test.dart -d linux From 4275a7aeba336a6c0f43e690d9fa24a3766c58ae Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:30:44 +0100 Subject: [PATCH 24/89] Get rid of bad actions --- .github/actions/app_validation/action.yml | 108 ++++++---------------- 1 file changed, 30 insertions(+), 78 deletions(-) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index 78e441c1..6dcfceff 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -1,81 +1,33 @@ -name: 'App Validation' -description: 'Runs lint, format, and test on an app' +name: "App Validation" +description: "Runs lint, format, and test on an app" runs: using: "composite" steps: - - name: Set up flutter - uses: kuhnroyal/flutter-fvm-config-action/setup@v3 - - - name: Install linux integration test dependencies - shell: bash - run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb - - - name: Get dependencies - shell: bash - run: flutter pub get - - - name: Check dart formatting - shell: bash - run: dart format -o none --set-exit-if-changed . - - - name: Check dart analysis - shell: bash - run: dart analyze --fatal-infos --fatal-warnings . - - - name: Run unit tests - shell: bash - run: flutter test - - - name: Run linux integration tests - shell: bash - run: | - export DISPLAY=:99 # Set display for Xvfb - xvfb-run -a flutter test integration_test/app_test.dart -d linux - - - - - - - - - - - - - - ------------- -name: "Run Linux Integration Tests" - -on: - workflow_call: - inputs: - working-directory: - description: "Working directory for the app validations" - required: true - type: string - -jobs: - linux_integration_tests: - name: Run Linux Integration Tests - runs-on: ubuntu-latest - defaults: - run: - working-directory: ${{ inputs.working-directory }} - - steps: - - - - name: Install Dependencies - run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb - - - name: Set up Flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - - - name: Get Dependencies - run: flutter pub get - - + - name: Set up flutter + uses: kuhnroyal/flutter-fvm-config-action/setup@v3 + + - name: Install linux integration test dependencies + shell: bash + run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb + + - name: Get dependencies + shell: bash + run: flutter pub get + + - name: Check dart formatting + shell: bash + run: dart format -o none --set-exit-if-changed . + + - name: Check dart analysis + shell: bash + run: dart analyze --fatal-infos --fatal-warnings . + + - name: Run unit tests + shell: bash + run: flutter test + + - name: Run linux integration tests + shell: bash + run: | + export DISPLAY=:99 # Set display for Xvfb + xvfb-run -a flutter test integration_test/app_test.dart -d linux From 24042a7da7492c57fdfbd198a73d0bc0c3fb4cfe Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:36:02 +0100 Subject: [PATCH 25/89] Fix working directory --- .github/actions/app_validation/action.yml | 11 +++++++++++ .github/workflows/validation.yml | 2 ++ 2 files changed, 13 insertions(+) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index 6dcfceff..0a135118 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -1,33 +1,44 @@ name: "App Validation" description: "Runs lint, format, and test on an app" +inputs: + working-directory: + description: "Directory to run validation in" + required: true runs: using: "composite" steps: - name: Set up flutter uses: kuhnroyal/flutter-fvm-config-action/setup@v3 + working-directory: ${{ inputs.working-directory }} - name: Install linux integration test dependencies shell: bash run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb + working-directory: ${{ inputs.working-directory }} - name: Get dependencies shell: bash run: flutter pub get + working-directory: ${{ inputs.working-directory }} - name: Check dart formatting shell: bash run: dart format -o none --set-exit-if-changed . + working-directory: ${{ inputs.working-directory }} - name: Check dart analysis shell: bash run: dart analyze --fatal-infos --fatal-warnings . + working-directory: ${{ inputs.working-directory }} - name: Run unit tests shell: bash run: flutter test + working-directory: ${{ inputs.working-directory }} - name: Run linux integration tests shell: bash run: | export DISPLAY=:99 # Set display for Xvfb xvfb-run -a flutter test integration_test/app_test.dart -d linux + working-directory: ${{ inputs.working-directory }} diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index e87828a4..bcf4d5d7 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -19,3 +19,5 @@ jobs: uses: actions/checkout@v4 - uses: ./.github/actions/app_validation + with: + working-directory: vanilla From 09c9028ebd8e1f4f813f5254876e6e9bee94807c Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:41:35 +0100 Subject: [PATCH 26/89] Keep fixing the CI --- .github/actions/app_validation/action.yml | 1 - .github/workflows/validation.yml | 7 ++----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index 0a135118..f41c7947 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -9,7 +9,6 @@ runs: steps: - name: Set up flutter uses: kuhnroyal/flutter-fvm-config-action/setup@v3 - working-directory: ${{ inputs.working-directory }} - name: Install linux integration test dependencies shell: bash diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index bcf4d5d7..36db5327 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -1,4 +1,4 @@ -name: Validation +name: Static Analysis & Tests on: pull_request: @@ -11,13 +11,10 @@ jobs: vanilla: name: Vanilla runs-on: ubuntu-latest - defaults: - run: - working-directory: vanilla steps: - name: Checkout repository uses: actions/checkout@v4 - uses: ./.github/actions/app_validation with: - working-directory: vanilla + working-directory: ./vanilla From 658eb170a1c3405c85d80c6641bb3354fbcfa510 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:46:25 +0100 Subject: [PATCH 27/89] install more deps for building flutter apps --- .github/actions/app_validation/action.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index f41c7947..6b62013d 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -12,8 +12,19 @@ runs: - name: Install linux integration test dependencies shell: bash - run: sudo apt-get update && sudo apt-get install -y libglu1-mesa xvfb - working-directory: ${{ inputs.working-directory }} + run: | + sudo apt-get update + sudo apt-get update + sudo apt-get install -y \ + clang \ + cmake \ + ninja-build \ + pkg-config \ + libgtk-3-dev \ + libayatana-appindicator3-dev \ + libsoup2.4-dev \ + libglu1-mesa \ + xvfb - name: Get dependencies shell: bash From 7239322ec4abd7b56fa70dc7778f8569b724d0c2 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:46:45 +0100 Subject: [PATCH 28/89] Rename app validation --- .github/workflows/validation.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index 36db5327..b430ec26 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -15,6 +15,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - uses: ./.github/actions/app_validation + - name: Run app validation + uses: ./.github/actions/app_validation with: working-directory: ./vanilla From b38a47cd27fdad5cd422279eea0637bfc1db6e53 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:51:47 +0100 Subject: [PATCH 29/89] Fix syntax --- .github/actions/app_validation/action.yml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index 6b62013d..eaf3d2ce 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -14,17 +14,16 @@ runs: shell: bash run: | sudo apt-get update - sudo apt-get update - sudo apt-get install -y \ - clang \ - cmake \ - ninja-build \ - pkg-config \ - libgtk-3-dev \ - libayatana-appindicator3-dev \ - libsoup2.4-dev \ - libglu1-mesa \ - xvfb + sudo apt-get install -y \ + clang \ + cmake \ + ninja-build \ + pkg-config \ + libgtk-3-dev \ + libayatana-appindicator3-dev \ + libsoup2.4-dev \ + libglu1-mesa \ + xvfb - name: Get dependencies shell: bash From 1c5d632aad838a5b61be6ffbbb688aa0fcdc450f Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 16:55:33 +0100 Subject: [PATCH 30/89] Deps directly from Flutter --- .github/actions/app_validation/action.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index eaf3d2ce..85b62b8d 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -14,14 +14,15 @@ runs: shell: bash run: | sudo apt-get update - sudo apt-get install -y \ + sudo apt-get install \ clang \ cmake \ + git \ ninja-build \ pkg-config \ libgtk-3-dev \ - libayatana-appindicator3-dev \ - libsoup2.4-dev \ + liblzma-dev \ + libstdc++-12-dev libglu1-mesa \ xvfb From 8dd1343b539e1ab9dc359a315cdee2cd22dd406c Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 17:09:28 +0100 Subject: [PATCH 31/89] Fix error --- .github/actions/app_validation/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/app_validation/action.yml b/.github/actions/app_validation/action.yml index 85b62b8d..23382b97 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/app_validation/action.yml @@ -22,7 +22,7 @@ runs: pkg-config \ libgtk-3-dev \ liblzma-dev \ - libstdc++-12-dev + libstdc++-12-dev \ libglu1-mesa \ xvfb From 7dd89d93a422f535b8dd09d03600d6502aff1ae0 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 17:33:35 +0100 Subject: [PATCH 32/89] Update workflows, run all tests --- .../action.yml | 36 ++++++++------- .../workflows/static_analysis_and_tests.yml | 44 +++++++++++++++++++ .github/workflows/validation.yml | 21 --------- 3 files changed, 63 insertions(+), 38 deletions(-) rename .github/actions/{app_validation => flutter_analysis_and_tests}/action.yml (88%) create mode 100644 .github/workflows/static_analysis_and_tests.yml delete mode 100644 .github/workflows/validation.yml diff --git a/.github/actions/app_validation/action.yml b/.github/actions/flutter_analysis_and_tests/action.yml similarity index 88% rename from .github/actions/app_validation/action.yml rename to .github/actions/flutter_analysis_and_tests/action.yml index 23382b97..9ba50a46 100644 --- a/.github/actions/app_validation/action.yml +++ b/.github/actions/flutter_analysis_and_tests/action.yml @@ -1,31 +1,20 @@ -name: "App Validation" +name: "Validate" description: "Runs lint, format, and test on an app" inputs: working-directory: description: "Directory to run validation in" required: true + run-integration-tests: + description: "Run integration tests" + required: false + default: "true" + runs: using: "composite" steps: - name: Set up flutter uses: kuhnroyal/flutter-fvm-config-action/setup@v3 - - name: Install linux integration test dependencies - shell: bash - run: | - sudo apt-get update - sudo apt-get install \ - clang \ - cmake \ - git \ - ninja-build \ - pkg-config \ - libgtk-3-dev \ - liblzma-dev \ - libstdc++-12-dev \ - libglu1-mesa \ - xvfb - - name: Get dependencies shell: bash run: flutter pub get @@ -47,8 +36,21 @@ runs: working-directory: ${{ inputs.working-directory }} - name: Run linux integration tests + if: ${{ inputs.run-integration-tests != 'false' }} shell: bash run: | + sudo apt-get update + sudo apt-get install \ + clang \ + cmake \ + git \ + ninja-build \ + pkg-config \ + libgtk-3-dev \ + liblzma-dev \ + libstdc++-12-dev \ + libglu1-mesa \ + xvfb export DISPLAY=:99 # Set display for Xvfb xvfb-run -a flutter test integration_test/app_test.dart -d linux working-directory: ${{ inputs.working-directory }} diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml new file mode 100644 index 00000000..a63b9c13 --- /dev/null +++ b/.github/workflows/static_analysis_and_tests.yml @@ -0,0 +1,44 @@ +name: Static Analysis & Tests + +on: + pull_request: + push: + branches: + - main + - refresh + +jobs: + todos_repository_local_storage: + name: Todos Repository Local Storage + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./todos_repository_local_storage + run-integration-tests: false + vanilla: + name: Vanilla + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./vanilla + inherited_widget: + name: Inherited Widget + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./inherited_widget diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml deleted file mode 100644 index b430ec26..00000000 --- a/.github/workflows/validation.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Static Analysis & Tests - -on: - pull_request: - push: - branches: - - main - - refresh - -jobs: - vanilla: - name: Vanilla - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Run app validation - uses: ./.github/actions/app_validation - with: - working-directory: ./vanilla From 00bd849959df6bed389e7e655f7d5c41e07c17e7 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 18:08:45 +0100 Subject: [PATCH 33/89] Update README with github actions badge --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index fe2edd8f..bb9ade52 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # flutter_architecture_samples -[![Build Status](https://travis-ci.org/brianegan/flutter_architecture_samples.svg?branch=master)](https://travis-ci.org/brianegan/flutter_architecture_samples) -[![Build Status](https://api.cirrus-ci.com/github/brianegan/flutter_architecture_samples.svg)](https://cirrus-ci.com/github/brianegan/flutter_architecture_samples) +[![Build Status](https://github.com/brianegan/flutter_architecture_samples/actions/workflows/static_analysis_and_tests.yml/badge.svg?branch=master)](https://github.com/brianegan/flutter_architecture_samples/actions/workflows/static_analysis_and_tests.yml) [![codecov](https://codecov.io/gh/brianegan/flutter_architecture_samples/branch/master/graph/badge.svg)](https://codecov.io/gh/brianegan/flutter_architecture_samples) List of Todos Screen From 155dbefa307cdc4b4b5ac98b1395b0d5af3d1a25 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 18:09:38 +0100 Subject: [PATCH 34/89] Remove old CI scripts --- scripts/android-wait-for-emulator.sh | 25 ----- scripts/ci.sh | 120 --------------------- scripts/runTests.sh | 151 --------------------------- 3 files changed, 296 deletions(-) delete mode 100755 scripts/android-wait-for-emulator.sh delete mode 100755 scripts/ci.sh delete mode 100755 scripts/runTests.sh diff --git a/scripts/android-wait-for-emulator.sh b/scripts/android-wait-for-emulator.sh deleted file mode 100755 index 4402fbfb..00000000 --- a/scripts/android-wait-for-emulator.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Originally written by Ralf Kistner , but placed in the public domain - -set +e - -bootanim="" -failcounter=0 -timeout_in_sec=360 - -until [[ "$bootanim" =~ "stopped" ]]; do - bootanim=`adb -e shell getprop init.svc.bootanim 2>&1 &` - if [[ "$bootanim" =~ "device not found" || "$bootanim" =~ "device offline" - || "$bootanim" =~ "running" ]]; then - let "failcounter += 1" - echo "Waiting for emulator to start: $failcounter of $timeout_in_sec : status: $bootanim" - if [[ $failcounter -gt timeout_in_sec ]]; then - echo "Timeout ($timeout_in_sec seconds) reached; failed to start emulator" - exit 1 - fi - fi - sleep 1 -done - -echo "Emulator is ready" \ No newline at end of file diff --git a/scripts/ci.sh b/scripts/ci.sh deleted file mode 100755 index fd3f5611..00000000 --- a/scripts/ci.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env bash - -show_help() { - printf "\n\nusage: $0 [--get] [--analyze] [--ios] [--apk] [--driver] [--clean] [] - -Tool for managing CI builds. -(run from root of repo) - -where: - --get - get all dependencies - --analyze - analyze dart code for all packages - --ios - build ios release for all apps - --apk - build android release for all apps - --driver - run integration tests for all apps - (expects a single running emulator/simulator) - --clean - clean all builds - - run flutter driver for app at path -" - exit 1 -} - -# run integration tests -runDriver () { - cd $1 - if [ -f "lib/main.dart" ]; then - echo "Running integration tests in $1..." - flutter packages get - flutter driver test_driver/todo_app.dart - fi - exitCode=$? - cd - > /dev/null - return $exitCode -} - -# run function in all dirs -# expects a function name -allDirs() { - dirs=(`find . -maxdepth 2 -type d`) - for dir in "${dirs[@]}"; do - $1 $dir - done -} - -runGet() { - cd $1 - if [ -f "pubspec.yaml" ]; then - flutter packages get - fi - cd - > /dev/null -} - -runIos() { - cd $1; - if [ -f "lib/main.dart" ]; then - flutter build ios - fi - cd - > /dev/null -} - -runApk() { - cd $1; - if [ -f "lib/main.dart" ]; then - echo "build apk in $1" - flutter build apk - fi - cd - > /dev/null -} - -runClean() { - cd $1; - if [ -f "pubspec.yaml" ]; then - echo "run clean in $1" - flutter clean > /dev/null - rm -rf ios/Pods ios/Podfile.lock - rm -rf android/.gradle - rm -rf coverage - fi - cd - > /dev/null -} - -# if no arguments passed -if [ -z $1 ]; then show_help; fi - -if ! [ -d .git ]; then printf "\nError: not in root of repo"; show_help; fi - -case $1 in - --get) - allDirs "runGet" - ;; - --analyze) - flutter analyze - ;; - --ios) - allDirs "runIos" - ;; - --apk) - allDirs "runApk" - ;; - --driver) - allDirs "runDriver" - ;; - --clean) - allDirs "runClean" - ;; - *) - if [[ -d "$1" ]]; then - runDriver $1 - else - printf "\nError: not a directory: $1" - show_help - fi - ;; -esac diff --git a/scripts/runTests.sh b/scripts/runTests.sh deleted file mode 100755 index f4588d0b..00000000 --- a/scripts/runTests.sh +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env bash - -# remember some failed commands and report on exit -error=false - -show_help() { - printf "usage: $0 [--help] [--report] [] - -Tool for running all unit and widget tests with code coverage. -(run from root of repo) - -where: - - run tests for package at path only - (otherwise runs all tests) - --report - run a coverage report - (requires lcov installed) - --help - print this message - -requires code_coverage package -(install with 'pub global activate coverage') -" - exit 1 -} - -# run unit and widget tests -runTests () { - local package_dir=$1 - local repo_dir=$2 - cd $package_dir; - if [[ -f "pubspec.yaml" ]] && [[ -d "test" ]]; then -# flutter packages get || echo "Ignore exit(1)" - flutter packages get - echo "run analyzer in $1" - flutter analyze - echo "run dartfmt in $1" - flutter dartfmt -n --set-exit-if-changed ./ - echo "running tests in $1" - # run tests with coverage - if grep flutter pubspec.yaml > /dev/null; then - echo "run flutter tests" - if [[ -f "test/all_tests.dart" ]]; then - flutter test --coverage test/all_tests.dart || error=true - else - flutter test --coverage || error=true - fi - else - # pure dart - echo "run dart tests" - pub get - pub run test || error=true - runDartTestsWithCoverage "test/all_tests.dart" || error=true - fi - combineCoverage $package_dir $repo_dir - fi - cd - > /dev/null -} - -# run tests with code coverage -runDartTestsWithCoverage () { - local test_path=$1 - local coverage_dir="coverage" - # clear coverage directory - rm -rf "$coverage_dir" - mkdir "$coverage_dir" - - OBS_PORT=9292 - - # Run the coverage collector to generate the JSON coverage report. - echo "Listening for coverage report on port $OBS_PORT..." - pub global run coverage:collect_coverage \ - --port=$OBS_PORT \ - --out="$coverage_dir"/coverage.json \ - --wait-paused \ - --resume-isolates & - - # Start tests in one VM. - echo "Running dart tests with code coverage..." - dart --disable-service-auth-codes \ - --enable-vm-service=$OBS_PORT \ - --pause-isolates-on-exit \ - "$test_path" - - echo "Generating LCOV report..." - pub global run coverage:format_coverage \ - --lcov \ - --in="$coverage_dir"/coverage.json \ - --out="$coverage_dir"/lcov.info \ - --packages=.packages \ - --report-on=lib -} - -# combine coverage into a single file for reporting -combineCoverage(){ - local package_dir=$1 - local repo_dir=$2 - escapedPath="$(echo $package_dir | sed 's/\//\\\//g')" - if [[ -d "coverage" ]]; then - # combine line coverage info from package tests to a common file - sed "s/^SF:lib/SF:$escapedPath\/lib/g" coverage/lcov.info >> $repo_dir/lcov.info - rm -rf "coverage" - fi -} - -runReport() { - if [[ -f "lcov.info" ]] && ! [[ "$TRAVIS" ]]; then - genhtml lcov.info -o coverage --no-function-coverage -s -p `pwd` - open coverage/index.html - fi -} - -if ! [[ -d .git ]]; then printf "\nError: not in root of repo"; show_help; fi - -case $1 in - --help) - show_help - ;; - --report) - if ! [[ -z ${2+x} ]]; then - printf "\nError: no extra parameters required: $2" - show_help - fi - runReport - ;; - *) - repo_dir=`pwd` - # if no parameter passed - if [[ -z $1 ]]; then - rm -f lcov.info - package_dirs=(`find . -maxdepth 2 -type d`) - for package_dir in "${package_dirs[@]}"; do - runTests $package_dir $repo_dir - done - else - if [[ -d "$1" ]]; then - runTests $1 $repo_dir - else - printf "\nError: not a directory: $1" - show_help - fi - fi - ;; -esac - -#Fail the build if there was an error -if [[ "$error" = true ]] ; -then - exit -1 -fi From 2fe778bfdc1b75197b8515d602409b8c2bf0be9e Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 18:23:45 +0100 Subject: [PATCH 35/89] See if I can collect coverage from each step --- .../flutter_analysis_and_tests/action.yml | 8 +++++++- .../workflows/static_analysis_and_tests.yml | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/.github/actions/flutter_analysis_and_tests/action.yml b/.github/actions/flutter_analysis_and_tests/action.yml index 9ba50a46..9cbf3bda 100644 --- a/.github/actions/flutter_analysis_and_tests/action.yml +++ b/.github/actions/flutter_analysis_and_tests/action.yml @@ -32,9 +32,15 @@ runs: - name: Run unit tests shell: bash - run: flutter test + run: flutter test --coverage working-directory: ${{ inputs.working-directory }} + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-lcov-$(basename "${{ inputs.working-directory }}").info + path: ${{ inputs.working-directory }}/coverage/lcov.info + - name: Run linux integration tests if: ${{ inputs.run-integration-tests != 'false' }} shell: bash diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index a63b9c13..635b047f 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -42,3 +42,22 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./inherited_widget + read_coverage: + name: Read Combined Coverage Files + runs-on: ubuntu-latest + needs: [todos_repository_local_storage, vanilla, inherited_widget] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Download coverage artifacts + uses: actions/download-artifact@v4 + with: + path: . + - name: List coverage files + run: ls -l coverage-lcov-*.info || echo "No coverage files found" + - name: Show coverage files content + run: | + for f in coverage-lcov-*.info; do + echo "\n==== $f ====" + cat "$f" + done || echo "No coverage files to show" From c5d65fd3da61ab8d7645532b87b9e5f2ca345e7f Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 18:28:46 +0100 Subject: [PATCH 36/89] Fix artifact upload --- .github/actions/flutter_analysis_and_tests/action.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/actions/flutter_analysis_and_tests/action.yml b/.github/actions/flutter_analysis_and_tests/action.yml index 9cbf3bda..cdb493ec 100644 --- a/.github/actions/flutter_analysis_and_tests/action.yml +++ b/.github/actions/flutter_analysis_and_tests/action.yml @@ -30,15 +30,18 @@ runs: run: dart analyze --fatal-infos --fatal-warnings . working-directory: ${{ inputs.working-directory }} - - name: Run unit tests + - name: Run unit tests and prepare coverage shell: bash - run: flutter test --coverage + run: | + flutter test --coverage + # Extract directory name for artifact naming + echo "DIR_NAME=$(basename "${{ inputs.working-directory }}")" >> $GITHUB_ENV working-directory: ${{ inputs.working-directory }} - name: Upload coverage artifact uses: actions/upload-artifact@v4 with: - name: coverage-lcov-$(basename "${{ inputs.working-directory }}").info + name: coverage-lcov-${{ env.DIR_NAME }} path: ${{ inputs.working-directory }}/coverage/lcov.info - name: Run linux integration tests From 28b67dd432a2ed222201dfe6a3e7612b922e1d7a Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 18:35:16 +0100 Subject: [PATCH 37/89] Find the files! --- .../workflows/static_analysis_and_tests.yml | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 635b047f..8f5d1020 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -54,10 +54,22 @@ jobs: with: path: . - name: List coverage files - run: ls -l coverage-lcov-*.info || echo "No coverage files found" + run: | + echo "Looking for coverage files in downloaded artifacts..." + find . -name "*.info" -type f | head -20 + echo "---" + ls -la coverage-lcov-*/ || echo "No coverage directories found" - name: Show coverage files content run: | - for f in coverage-lcov-*.info; do - echo "\n==== $f ====" - cat "$f" + for dir in coverage-lcov-*/; do + if [ -d "$dir" ]; then + echo "==== Contents of $dir ====" + ls -la "$dir" + for f in "$dir"*.info; do + if [ -f "$f" ]; then + echo "==== $f ====" + cat "$f" + fi + done + fi done || echo "No coverage files to show" From e7e9d22686b1dbdb71fc395ce37c4038a2b52b91 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 18:51:26 +0100 Subject: [PATCH 38/89] Upload coverage --- .../workflows/static_analysis_and_tests.yml | 52 +++++++++++++------ 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 8f5d1020..3e90a2e3 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -53,23 +53,43 @@ jobs: uses: actions/download-artifact@v4 with: path: . - - name: List coverage files + - name: Combine coverage files run: | - echo "Looking for coverage files in downloaded artifacts..." - find . -name "*.info" -type f | head -20 - echo "---" - ls -la coverage-lcov-*/ || echo "No coverage directories found" - - name: Show coverage files content - run: | - for dir in coverage-lcov-*/; do - if [ -d "$dir" ]; then - echo "==== Contents of $dir ====" - ls -la "$dir" - for f in "$dir"*.info; do - if [ -f "$f" ]; then - echo "==== $f ====" - cat "$f" + combineCoverage() { + local artifact_dir=$1 + local repo_dir=$2 + local package_name=$(basename "$artifact_dir") + escapedPath="$(echo $package_name | sed 's/\//\\\//g')" + + if [[ -d "$artifact_dir" ]]; then + # Find the lcov.info file in the artifact directory + for lcov_file in "$artifact_dir"/*.info; do + if [[ -f "$lcov_file" ]]; then + echo "Combining coverage from $package_name" + # combine line coverage info from package tests to a common file + sed "s/^SF:lib/SF:$escapedPath\/lib/g" "$lcov_file" >> "$repo_dir/lcov.info" + break fi done fi - done || echo "No coverage files to show" + } + + # Initialize the combined coverage file + touch lcov.info + + # Combine coverage from all downloaded artifacts + for artifact_dir in coverage-lcov-*/; do + if [[ -d "$artifact_dir" ]]; then + combineCoverage "$artifact_dir" "." + fi + done + + echo "Combined coverage file created:" + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v5 + with: + files: ./lcov.info + disable_search: true + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} From 1c9a92644a83b57131ceaea30deb56793268df84 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 19:02:48 +0100 Subject: [PATCH 39/89] One more time codecov, with love --- .github/workflows/static_analysis_and_tests.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 3e90a2e3..935f80c8 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -58,14 +58,17 @@ jobs: combineCoverage() { local artifact_dir=$1 local repo_dir=$2 + # Extract the package directory path from the artifact name + # coverage-lcov-vanilla -> ./vanilla local package_name=$(basename "$artifact_dir") - escapedPath="$(echo $package_name | sed 's/\//\\\//g')" + local package_dir="./${package_name#coverage-lcov-}" + escapedPath="$(echo $package_dir | sed 's/\//\\\//g')" if [[ -d "$artifact_dir" ]]; then # Find the lcov.info file in the artifact directory for lcov_file in "$artifact_dir"/*.info; do if [[ -f "$lcov_file" ]]; then - echo "Combining coverage from $package_name" + echo "Combining coverage from $package_dir" # combine line coverage info from package tests to a common file sed "s/^SF:lib/SF:$escapedPath\/lib/g" "$lcov_file" >> "$repo_dir/lcov.info" break @@ -85,6 +88,9 @@ jobs: done echo "Combined coverage file created:" + ls -la lcov.info + echo "First few lines of combined coverage:" + head -10 lcov.info - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 From 527ceef3847e72cc42327da6566e7f87e8d40cbd Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 19:08:34 +0100 Subject: [PATCH 40/89] Try usin just codecov --- .../workflows/static_analysis_and_tests.yml | 52 +------------------ 1 file changed, 2 insertions(+), 50 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 935f80c8..3dddeee0 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -42,60 +42,12 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./inherited_widget - read_coverage: - name: Read Combined Coverage Files + combine_and_upload_coverage: + name: Combine and Upload Code Coverage runs-on: ubuntu-latest needs: [todos_repository_local_storage, vanilla, inherited_widget] steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Download coverage artifacts - uses: actions/download-artifact@v4 - with: - path: . - - name: Combine coverage files - run: | - combineCoverage() { - local artifact_dir=$1 - local repo_dir=$2 - # Extract the package directory path from the artifact name - # coverage-lcov-vanilla -> ./vanilla - local package_name=$(basename "$artifact_dir") - local package_dir="./${package_name#coverage-lcov-}" - escapedPath="$(echo $package_dir | sed 's/\//\\\//g')" - - if [[ -d "$artifact_dir" ]]; then - # Find the lcov.info file in the artifact directory - for lcov_file in "$artifact_dir"/*.info; do - if [[ -f "$lcov_file" ]]; then - echo "Combining coverage from $package_dir" - # combine line coverage info from package tests to a common file - sed "s/^SF:lib/SF:$escapedPath\/lib/g" "$lcov_file" >> "$repo_dir/lcov.info" - break - fi - done - fi - } - - # Initialize the combined coverage file - touch lcov.info - - # Combine coverage from all downloaded artifacts - for artifact_dir in coverage-lcov-*/; do - if [[ -d "$artifact_dir" ]]; then - combineCoverage "$artifact_dir" "." - fi - done - - echo "Combined coverage file created:" - ls -la lcov.info - echo "First few lines of combined coverage:" - head -10 lcov.info - - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 - with: - files: ./lcov.info - disable_search: true env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} From 55a5a797c064b98749b2f1a410d1bd6e9e723767 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 19:12:46 +0100 Subject: [PATCH 41/89] Fix codecov only solution --- .github/workflows/static_analysis_and_tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 3dddeee0..52b732ed 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -47,6 +47,12 @@ jobs: runs-on: ubuntu-latest needs: [todos_repository_local_storage, vanilla, inherited_widget] steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Download coverage artifacts + uses: actions/download-artifact@v4 + with: + path: . - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 env: From fcd5d7f7eff90c93a040024c54ff9e4d4aae70e1 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 19:17:55 +0100 Subject: [PATCH 42/89] Revert "Fix codecov only solution" This reverts commit 55a5a797c064b98749b2f1a410d1bd6e9e723767. --- .github/workflows/static_analysis_and_tests.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 52b732ed..3dddeee0 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -47,12 +47,6 @@ jobs: runs-on: ubuntu-latest needs: [todos_repository_local_storage, vanilla, inherited_widget] steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Download coverage artifacts - uses: actions/download-artifact@v4 - with: - path: . - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 env: From be3ffe45726692ef7e6ab14ea6c0d69bf23bc0ca Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 9 Jul 2025 19:18:04 +0100 Subject: [PATCH 43/89] Revert "Try usin just codecov" This reverts commit 527ceef3847e72cc42327da6566e7f87e8d40cbd. --- .../workflows/static_analysis_and_tests.yml | 52 ++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 3dddeee0..935f80c8 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -42,12 +42,60 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./inherited_widget - combine_and_upload_coverage: - name: Combine and Upload Code Coverage + read_coverage: + name: Read Combined Coverage Files runs-on: ubuntu-latest needs: [todos_repository_local_storage, vanilla, inherited_widget] steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Download coverage artifacts + uses: actions/download-artifact@v4 + with: + path: . + - name: Combine coverage files + run: | + combineCoverage() { + local artifact_dir=$1 + local repo_dir=$2 + # Extract the package directory path from the artifact name + # coverage-lcov-vanilla -> ./vanilla + local package_name=$(basename "$artifact_dir") + local package_dir="./${package_name#coverage-lcov-}" + escapedPath="$(echo $package_dir | sed 's/\//\\\//g')" + + if [[ -d "$artifact_dir" ]]; then + # Find the lcov.info file in the artifact directory + for lcov_file in "$artifact_dir"/*.info; do + if [[ -f "$lcov_file" ]]; then + echo "Combining coverage from $package_dir" + # combine line coverage info from package tests to a common file + sed "s/^SF:lib/SF:$escapedPath\/lib/g" "$lcov_file" >> "$repo_dir/lcov.info" + break + fi + done + fi + } + + # Initialize the combined coverage file + touch lcov.info + + # Combine coverage from all downloaded artifacts + for artifact_dir in coverage-lcov-*/; do + if [[ -d "$artifact_dir" ]]; then + combineCoverage "$artifact_dir" "." + fi + done + + echo "Combined coverage file created:" + ls -la lcov.info + echo "First few lines of combined coverage:" + head -10 lcov.info + - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 + with: + files: ./lcov.info + disable_search: true env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} From c16847c3d9f36a6207b5fee47eadd8473f241eea Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 17 Aug 2025 22:08:06 +0100 Subject: [PATCH 44/89] Add a signals app --- mobx/.metadata | 39 +- mobx/analysis_options.yaml | 28 + mobx/android/.gitignore | 7 + mobx/android/app/build.gradle | 67 -- mobx/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- mobx/android/app/src/main/AndroidManifest.xml | 33 +- .../kotlin/com/example/mobx/MainActivity.kt | 12 - .../com/example/mobx_sample/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- mobx/android/build.gradle | 31 - mobx/android/build.gradle.kts | 21 + mobx/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- mobx/android/settings.gradle | 15 - mobx/android/settings.gradle.kts | 25 + mobx/integration_test/app_test.dart | 19 + mobx/ios/.gitignore | 2 + mobx/ios/Flutter/AppFrameworkInfo.plist | 4 +- mobx/ios/Flutter/Debug.xcconfig | 2 +- mobx/ios/Flutter/Release.xcconfig | 2 +- mobx/ios/Podfile | 83 +- mobx/ios/Runner.xcodeproj/project.pbxproj | 273 +++--- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../contents.xcworkspacedata | 3 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + mobx/ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes mobx/ios/Runner/Info.plist | 10 +- mobx/ios/Runner/Runner-Bridging-Header.h | 2 +- mobx/ios/RunnerTests/RunnerTests.swift | 12 + mobx/lib/add_todo_screen.dart | 14 +- mobx/lib/app.dart | 4 +- mobx/lib/details_screen.dart | 4 +- mobx/lib/edit_todo_screen.dart | 18 +- mobx/lib/home/extra_actions_button.dart | 2 +- mobx/lib/home/filter_button.dart | 8 +- mobx/lib/home/home_screen.dart | 40 +- mobx/lib/home/stats_view.dart | 3 +- mobx/lib/home/todo_list_view.dart | 4 +- mobx/lib/localization.dart | 2 +- mobx/lib/main.dart | 3 +- mobx/lib/models/todo.dart | 18 +- mobx/lib/models/todo.g.dart | 43 +- mobx/lib/models/todo_codec.dart | 9 +- mobx/lib/stores/todo_store.dart | 21 +- mobx/lib/stores/todo_store.g.dart | 141 +-- mobx/linux/.gitignore | 1 + mobx/linux/CMakeLists.txt | 128 +++ mobx/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + mobx/linux/flutter/generated_plugins.cmake | 23 + mobx/linux/runner/CMakeLists.txt | 26 + mobx/linux/runner/main.cc | 6 + mobx/linux/runner/my_application.cc | 130 +++ mobx/linux/runner/my_application.h | 18 + mobx/macos/.gitignore | 7 + mobx/macos/Flutter/Flutter-Debug.xcconfig | 2 + mobx/macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + mobx/macos/Podfile | 42 + mobx/macos/Podfile.lock | 30 + mobx/macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + mobx/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes mobx/macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ mobx/macos/Runner/Configs/AppInfo.xcconfig | 14 + mobx/macos/Runner/Configs/Debug.xcconfig | 2 + mobx/macos/Runner/Configs/Release.xcconfig | 2 + mobx/macos/Runner/Configs/Warnings.xcconfig | 13 + mobx/macos/Runner/DebugProfile.entitlements | 12 + mobx/macos/Runner/Info.plist | 32 + mobx/macos/Runner/MainFlutterWindow.swift | 15 + mobx/macos/Runner/Release.entitlements | 8 + mobx/macos/RunnerTests/RunnerTests.swift | 12 + mobx/package.json | 7 - mobx/pubspec.yaml | 26 +- mobx/test/home_screen_test.dart | 27 +- mobx/test_driver/integration_test.dart | 3 + mobx/test_driver/todo_app.dart | 9 - mobx/test_driver/todo_app_test.dart | 5 - mobx/web/favicon.png | Bin 0 -> 917 bytes mobx/web/icons/Icon-192.png | Bin 0 -> 5292 bytes mobx/web/icons/Icon-512.png | Bin 0 -> 8252 bytes mobx/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes mobx/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes mobx/web/index.html | 32 +- mobx/web/manifest.json | 35 + mobx/windows/.gitignore | 17 + mobx/windows/CMakeLists.txt | 108 +++ mobx/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + mobx/windows/flutter/generated_plugins.cmake | 23 + mobx/windows/runner/CMakeLists.txt | 40 + mobx/windows/runner/Runner.rc | 121 +++ mobx/windows/runner/flutter_window.cpp | 71 ++ mobx/windows/runner/flutter_window.h | 33 + mobx/windows/runner/main.cpp | 43 + mobx/windows/runner/resource.h | 16 + mobx/windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes mobx/windows/runner/runner.exe.manifest | 14 + mobx/windows/runner/utils.cpp | 65 ++ mobx/windows/runner/utils.h | 19 + mobx/windows/runner/win32_window.cpp | 288 +++++++ mobx/windows/runner/win32_window.h | 102 +++ signals/.gitignore | 45 + signals/.metadata | 45 + signals/README.md | 16 + signals/analysis_options.yaml | 34 + signals/android/.gitignore | 14 + signals/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 + .../com/example/signals/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + signals/android/build.gradle.kts | 24 + signals/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + signals/android/settings.gradle.kts | 26 + signals/integration_test/app_test.dart | 19 + signals/ios/.gitignore | 34 + signals/ios/Flutter/AppFrameworkInfo.plist | 26 + signals/ios/Flutter/Debug.xcconfig | 2 + signals/ios/Flutter/Release.xcconfig | 2 + signals/ios/Podfile | 43 + signals/ios/Runner.xcodeproj/project.pbxproj | 619 ++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 101 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + signals/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + signals/ios/Runner/Base.lproj/Main.storyboard | 26 + signals/ios/Runner/Info.plist | 49 ++ signals/ios/Runner/Runner-Bridging-Header.h | 1 + signals/ios/RunnerTests/RunnerTests.swift | 12 + signals/lib/add_todo_screen.dart | 86 ++ signals/lib/app.dart | 42 + signals/lib/details_screen.dart | 92 ++ signals/lib/edit_todo_screen.dart | 69 ++ signals/lib/home/extra_actions_button.dart | 48 ++ signals/lib/home/filter_button.dart | 77 ++ signals/lib/home/home_screen.dart | 127 +++ signals/lib/home/stats_view.dart | 56 ++ signals/lib/home/todo_list_view.dart | 75 ++ signals/lib/localization.dart | 28 + .../main_web.dart => signals/lib/main.dart | 8 +- signals/lib/todo.dart | 37 + signals/lib/todo_codec.dart | 46 + signals/lib/todo_list_controller.dart | 90 ++ signals/linux/.gitignore | 1 + signals/linux/CMakeLists.txt | 128 +++ signals/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + signals/linux/flutter/generated_plugins.cmake | 23 + signals/linux/runner/CMakeLists.txt | 26 + signals/linux/runner/main.cc | 6 + signals/linux/runner/my_application.cc | 144 ++++ signals/linux/runner/my_application.h | 18 + signals/macos/.gitignore | 7 + signals/macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + signals/macos/Podfile | 42 + signals/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + signals/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes signals/macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ signals/macos/Runner/Configs/AppInfo.xcconfig | 14 + signals/macos/Runner/Configs/Debug.xcconfig | 2 + signals/macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + signals/macos/Runner/Info.plist | 32 + signals/macos/Runner/MainFlutterWindow.swift | 15 + signals/macos/Runner/Release.entitlements | 8 + signals/macos/RunnerTests/RunnerTests.swift | 12 + signals/pubspec.yaml | 95 +++ signals/test/widget_test.dart | 34 + signals/test_driver/integration_test.dart | 3 + signals/web/favicon.png | Bin 0 -> 917 bytes signals/web/icons/Icon-192.png | Bin 0 -> 5292 bytes signals/web/icons/Icon-512.png | Bin 0 -> 8252 bytes signals/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes signals/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes signals/web/index.html | 38 + signals/web/manifest.json | 35 + signals/windows/.gitignore | 17 + signals/windows/CMakeLists.txt | 108 +++ signals/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + signals/windows/runner/CMakeLists.txt | 40 + signals/windows/runner/Runner.rc | 121 +++ signals/windows/runner/flutter_window.cpp | 71 ++ signals/windows/runner/flutter_window.h | 33 + signals/windows/runner/main.cpp | 43 + signals/windows/runner/resource.h | 16 + signals/windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes signals/windows/runner/runner.exe.manifest | 14 + signals/windows/runner/utils.cpp | 65 ++ signals/windows/runner/utils.h | 19 + signals/windows/runner/win32_window.cpp | 288 +++++++ signals/windows/runner/win32_window.h | 102 +++ 295 files changed, 9642 insertions(+), 561 deletions(-) create mode 100644 mobx/analysis_options.yaml delete mode 100644 mobx/android/app/build.gradle create mode 100644 mobx/android/app/build.gradle.kts delete mode 100644 mobx/android/app/src/main/kotlin/com/example/mobx/MainActivity.kt create mode 100644 mobx/android/app/src/main/kotlin/com/example/mobx_sample/MainActivity.kt create mode 100644 mobx/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 mobx/android/app/src/main/res/values-night/styles.xml delete mode 100644 mobx/android/build.gradle create mode 100644 mobx/android/build.gradle.kts delete mode 100644 mobx/android/settings.gradle create mode 100644 mobx/android/settings.gradle.kts create mode 100644 mobx/integration_test/app_test.dart create mode 100644 mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mobx/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mobx/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png create mode 100644 mobx/ios/RunnerTests/RunnerTests.swift create mode 100644 mobx/linux/.gitignore create mode 100644 mobx/linux/CMakeLists.txt create mode 100644 mobx/linux/flutter/CMakeLists.txt create mode 100644 mobx/linux/flutter/generated_plugin_registrant.cc create mode 100644 mobx/linux/flutter/generated_plugin_registrant.h create mode 100644 mobx/linux/flutter/generated_plugins.cmake create mode 100644 mobx/linux/runner/CMakeLists.txt create mode 100644 mobx/linux/runner/main.cc create mode 100644 mobx/linux/runner/my_application.cc create mode 100644 mobx/linux/runner/my_application.h create mode 100644 mobx/macos/.gitignore create mode 100644 mobx/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 mobx/macos/Flutter/Flutter-Release.xcconfig create mode 100644 mobx/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 mobx/macos/Podfile create mode 100644 mobx/macos/Podfile.lock create mode 100644 mobx/macos/Runner.xcodeproj/project.pbxproj create mode 100644 mobx/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mobx/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mobx/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mobx/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mobx/macos/Runner/AppDelegate.swift create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 mobx/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 mobx/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 mobx/macos/Runner/Configs/Debug.xcconfig create mode 100644 mobx/macos/Runner/Configs/Release.xcconfig create mode 100644 mobx/macos/Runner/Configs/Warnings.xcconfig create mode 100644 mobx/macos/Runner/DebugProfile.entitlements create mode 100644 mobx/macos/Runner/Info.plist create mode 100644 mobx/macos/Runner/MainFlutterWindow.swift create mode 100644 mobx/macos/Runner/Release.entitlements create mode 100644 mobx/macos/RunnerTests/RunnerTests.swift delete mode 100644 mobx/package.json create mode 100644 mobx/test_driver/integration_test.dart delete mode 100644 mobx/test_driver/todo_app.dart delete mode 100644 mobx/test_driver/todo_app_test.dart create mode 100644 mobx/web/favicon.png create mode 100644 mobx/web/icons/Icon-192.png create mode 100644 mobx/web/icons/Icon-512.png create mode 100644 mobx/web/icons/Icon-maskable-192.png create mode 100644 mobx/web/icons/Icon-maskable-512.png create mode 100644 mobx/web/manifest.json create mode 100644 mobx/windows/.gitignore create mode 100644 mobx/windows/CMakeLists.txt create mode 100644 mobx/windows/flutter/CMakeLists.txt create mode 100644 mobx/windows/flutter/generated_plugin_registrant.cc create mode 100644 mobx/windows/flutter/generated_plugin_registrant.h create mode 100644 mobx/windows/flutter/generated_plugins.cmake create mode 100644 mobx/windows/runner/CMakeLists.txt create mode 100644 mobx/windows/runner/Runner.rc create mode 100644 mobx/windows/runner/flutter_window.cpp create mode 100644 mobx/windows/runner/flutter_window.h create mode 100644 mobx/windows/runner/main.cpp create mode 100644 mobx/windows/runner/resource.h create mode 100644 mobx/windows/runner/resources/app_icon.ico create mode 100644 mobx/windows/runner/runner.exe.manifest create mode 100644 mobx/windows/runner/utils.cpp create mode 100644 mobx/windows/runner/utils.h create mode 100644 mobx/windows/runner/win32_window.cpp create mode 100644 mobx/windows/runner/win32_window.h create mode 100644 signals/.gitignore create mode 100644 signals/.metadata create mode 100644 signals/README.md create mode 100644 signals/analysis_options.yaml create mode 100644 signals/android/.gitignore create mode 100644 signals/android/app/build.gradle.kts create mode 100644 signals/android/app/src/debug/AndroidManifest.xml create mode 100644 signals/android/app/src/main/AndroidManifest.xml create mode 100644 signals/android/app/src/main/kotlin/com/example/signals/MainActivity.kt create mode 100644 signals/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 signals/android/app/src/main/res/drawable/launch_background.xml create mode 100644 signals/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 signals/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 signals/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 signals/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 signals/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 signals/android/app/src/main/res/values-night/styles.xml create mode 100644 signals/android/app/src/main/res/values/styles.xml create mode 100644 signals/android/app/src/profile/AndroidManifest.xml create mode 100644 signals/android/build.gradle.kts create mode 100644 signals/android/gradle.properties create mode 100644 signals/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 signals/android/settings.gradle.kts create mode 100644 signals/integration_test/app_test.dart create mode 100644 signals/ios/.gitignore create mode 100644 signals/ios/Flutter/AppFrameworkInfo.plist create mode 100644 signals/ios/Flutter/Debug.xcconfig create mode 100644 signals/ios/Flutter/Release.xcconfig create mode 100644 signals/ios/Podfile create mode 100644 signals/ios/Runner.xcodeproj/project.pbxproj create mode 100644 signals/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 signals/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 signals/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 signals/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 signals/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 signals/ios/Runner/AppDelegate.swift create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 signals/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 signals/ios/Runner/Base.lproj/Main.storyboard create mode 100644 signals/ios/Runner/Info.plist create mode 100644 signals/ios/Runner/Runner-Bridging-Header.h create mode 100644 signals/ios/RunnerTests/RunnerTests.swift create mode 100644 signals/lib/add_todo_screen.dart create mode 100644 signals/lib/app.dart create mode 100644 signals/lib/details_screen.dart create mode 100644 signals/lib/edit_todo_screen.dart create mode 100644 signals/lib/home/extra_actions_button.dart create mode 100644 signals/lib/home/filter_button.dart create mode 100644 signals/lib/home/home_screen.dart create mode 100644 signals/lib/home/stats_view.dart create mode 100644 signals/lib/home/todo_list_view.dart create mode 100644 signals/lib/localization.dart rename mobx/lib/main_web.dart => signals/lib/main.dart (71%) create mode 100644 signals/lib/todo.dart create mode 100644 signals/lib/todo_codec.dart create mode 100644 signals/lib/todo_list_controller.dart create mode 100644 signals/linux/.gitignore create mode 100644 signals/linux/CMakeLists.txt create mode 100644 signals/linux/flutter/CMakeLists.txt create mode 100644 signals/linux/flutter/generated_plugin_registrant.cc create mode 100644 signals/linux/flutter/generated_plugin_registrant.h create mode 100644 signals/linux/flutter/generated_plugins.cmake create mode 100644 signals/linux/runner/CMakeLists.txt create mode 100644 signals/linux/runner/main.cc create mode 100644 signals/linux/runner/my_application.cc create mode 100644 signals/linux/runner/my_application.h create mode 100644 signals/macos/.gitignore create mode 100644 signals/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 signals/macos/Flutter/Flutter-Release.xcconfig create mode 100644 signals/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 signals/macos/Podfile create mode 100644 signals/macos/Podfile.lock create mode 100644 signals/macos/Runner.xcodeproj/project.pbxproj create mode 100644 signals/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 signals/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 signals/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 signals/macos/Runner/AppDelegate.swift create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 signals/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 signals/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 signals/macos/Runner/Configs/Debug.xcconfig create mode 100644 signals/macos/Runner/Configs/Release.xcconfig create mode 100644 signals/macos/Runner/Configs/Warnings.xcconfig create mode 100644 signals/macos/Runner/DebugProfile.entitlements create mode 100644 signals/macos/Runner/Info.plist create mode 100644 signals/macos/Runner/MainFlutterWindow.swift create mode 100644 signals/macos/Runner/Release.entitlements create mode 100644 signals/macos/RunnerTests/RunnerTests.swift create mode 100644 signals/pubspec.yaml create mode 100644 signals/test/widget_test.dart create mode 100644 signals/test_driver/integration_test.dart create mode 100644 signals/web/favicon.png create mode 100644 signals/web/icons/Icon-192.png create mode 100644 signals/web/icons/Icon-512.png create mode 100644 signals/web/icons/Icon-maskable-192.png create mode 100644 signals/web/icons/Icon-maskable-512.png create mode 100644 signals/web/index.html create mode 100644 signals/web/manifest.json create mode 100644 signals/windows/.gitignore create mode 100644 signals/windows/CMakeLists.txt create mode 100644 signals/windows/flutter/CMakeLists.txt create mode 100644 signals/windows/flutter/generated_plugin_registrant.cc create mode 100644 signals/windows/flutter/generated_plugin_registrant.h create mode 100644 signals/windows/flutter/generated_plugins.cmake create mode 100644 signals/windows/runner/CMakeLists.txt create mode 100644 signals/windows/runner/Runner.rc create mode 100644 signals/windows/runner/flutter_window.cpp create mode 100644 signals/windows/runner/flutter_window.h create mode 100644 signals/windows/runner/main.cpp create mode 100644 signals/windows/runner/resource.h create mode 100644 signals/windows/runner/resources/app_icon.ico create mode 100644 signals/windows/runner/runner.exe.manifest create mode 100644 signals/windows/runner/utils.cpp create mode 100644 signals/windows/runner/utils.h create mode 100644 signals/windows/runner/win32_window.cpp create mode 100644 signals/windows/runner/win32_window.h diff --git a/mobx/.metadata b/mobx/.metadata index 1b5cec02..fdb4416b 100644 --- a/mobx/.metadata +++ b/mobx/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "fcf2c11572af6f390246c056bc905eca609533a0" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: android + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: ios + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: linux + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: macos + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: web + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + - platform: windows + create_revision: fcf2c11572af6f390246c056bc905eca609533a0 + base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/mobx/analysis_options.yaml b/mobx/analysis_options.yaml new file mode 100644 index 00000000..0d290213 --- /dev/null +++ b/mobx/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/mobx/android/.gitignore b/mobx/android/.gitignore index bc2100d8..be3943c9 100644 --- a/mobx/android/.gitignore +++ b/mobx/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/mobx/android/app/build.gradle b/mobx/android/app/build.gradle deleted file mode 100644 index 03fb603e..00000000 --- a/mobx/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.mobx" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/mobx/android/app/build.gradle.kts b/mobx/android/app/build.gradle.kts new file mode 100644 index 00000000..ab46c9bc --- /dev/null +++ b/mobx/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.mobx_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.mobx_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/mobx/android/app/src/debug/AndroidManifest.xml b/mobx/android/app/src/debug/AndroidManifest.xml index 066245a6..399f6981 100644 --- a/mobx/android/app/src/debug/AndroidManifest.xml +++ b/mobx/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/mobx/android/app/src/main/AndroidManifest.xml b/mobx/android/app/src/main/AndroidManifest.xml index 4d2b63e2..2763645a 100644 --- a/mobx/android/app/src/main/AndroidManifest.xml +++ b/mobx/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/mobx/android/app/src/main/kotlin/com/example/mobx/MainActivity.kt b/mobx/android/app/src/main/kotlin/com/example/mobx/MainActivity.kt deleted file mode 100644 index 3495c266..00000000 --- a/mobx/android/app/src/main/kotlin/com/example/mobx/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.mobx - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/mobx/android/app/src/main/kotlin/com/example/mobx_sample/MainActivity.kt b/mobx/android/app/src/main/kotlin/com/example/mobx_sample/MainActivity.kt new file mode 100644 index 00000000..833ad31b --- /dev/null +++ b/mobx/android/app/src/main/kotlin/com/example/mobx_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.mobx_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/mobx/android/app/src/main/res/drawable-v21/launch_background.xml b/mobx/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/mobx/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mobx/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mobx/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/mobx/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mobx/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 zcmV-$2aovC1@sP(8Gi-<0082ccQ^n52RlhbK~#9!?VWpUQ&k+tcegQKLJ$ckqM|5K zL4!ewI+#ot2>hXpbqoZ;L&Zph2n;rq$2Nhn7KcM5$l69kq9g_2tE~{1bjEQ5NG}^A@HdH+2MOLg@UI7WGnz+QdurvEPN_J zhFS*@t7AR8LV-^ONZsiGbjL*VK&bGk00}ksD)iC0Jby}oPX&ZJ^K0QjOf>CM;Zp%2 z)XW<03EbnC$pN1V5Lq*7yw79Xsgesm6(FKgT@CTrc7LwQ37-lO+ViWpDcE-E<%UlM z2$}hA?=0MEHYfp~3g~F&ySXI@zfmdpR6u+1U7jo@!BYWkM+?!IXl_>nJ{53pv=E1H zu)bFdJ{8cSW>-T`%<+Fw6FwCXocaGkUxaZ?ZTNx&#O9fDA{qYMS6~p%{4*rr3lb2W zR|qi%<9`?YONU5>^eD72Y)i`4C@#iWS zZ%h+>!FLPrOVAhEdKvcg)8OfL0YCc)&iotv4}Z2qU36;#{6lX%+r41-Anm~C(n&71 zIP?F}u????zVJ2$1V%;I&0h}`(AFs{WKjHAN|{#<}=c=P)S!#|_D3=d1X5rG2uC!rn>Y?H#| zbbs3$cREMN_I!_J4hs)Rz8S#+{1OU%xI;=K9IExlnRlG4wK}=AS3rc7EjBpKLc3f`F!B%uo~lj4JOieC%10@Ns;@|5jAi8w*`PA;jv9 zd8&kJ)xMVz{uRPAf2$&ar4#{y=%R2Z|9_fKv0TT^P2^9QB;lvJJ<3J)QUx?g*gI_R z-Z=RWSl%>T@O&f_O`HH9Df)QJAs~<+84nKJaiE8cr`r$2d@MUK&~#R?_uR5)Kq%MZ{}jl@6%bx*#V49!C4V3w zp|o4Rd9ax4cn_cphFaf}PBi%)m#T*wMFa$*3pUPRdR7p8H}t>*)=!#EG{aIr;IMYN zi^2R-yQkZ0a6c|~M+vu`3z8De@D<>fP#3$|nAqCCJ?j!Ygpd76(uro;B^XF7+)`eE ze@)E#U)3`M`Xvhxk8Ew+lZwCY`B*X>7eBi6-{^xlvlEP$e)McL4M0Hel9n zLFfixGIAj%V*?}{Ju3))aJ<1waMo)x(UfmJFlLBuHLEuRler0)^!30j&4Re}97wd3 zih|!P;WSF9td}Lx#07VJlz$dWj09#awwh(xz${q<%%V)_u{;~b*&HFkzb(NH$(8?U zE72q&!9V*Ke*(<=D}Z@-8T4A71LKR!CBbi&aLR>G!VT>tn#!yRg)7??z_*Pzffus_7;0MRVQ>>^bfoP(swgms|pSKv8w0B^@s$7^LBltTcoPTsda>WfHTg}r% z6HR5?k!i&}0#tfloB? z&x_p`)fozt%=BRIfBJK?D&X%J7~)MWuWQ+Me&GMNim1+1yo49_9a0~D3kh#stP8(H zQ_UJLeuCosF+q9luiA zZM7rog<>V)Cs;3hM=5u>CX~r9!Ok`&*c{s^UEvar%Xs>2Oengzj#3rfjvO}00(kh= z@)&aVqQn|)aahH-9oMaRYef>JCzphxGHI)bnSV3B$nhejCjY{0 z5wO+ty=to*LTM?tFc-BAzml6^ukKGNDKFvJy`fs=^^y2x45g!%greIL#uZmw>9lb& qSqY`b5{t`eoJ@-rEn2iXW&ICk*P-_82Zx0K0000{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/mobx/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mobx/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/mobx/android/app/src/main/res/values/styles.xml b/mobx/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/mobx/android/app/src/main/res/values/styles.xml +++ b/mobx/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/mobx/android/app/src/profile/AndroidManifest.xml b/mobx/android/app/src/profile/AndroidManifest.xml index 066245a6..399f6981 100644 --- a/mobx/android/app/src/profile/AndroidManifest.xml +++ b/mobx/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/mobx/android/build.gradle b/mobx/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/mobx/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/mobx/android/build.gradle.kts b/mobx/android/build.gradle.kts new file mode 100644 index 00000000..89176ef4 --- /dev/null +++ b/mobx/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/mobx/android/gradle.properties b/mobx/android/gradle.properties index 38c8d454..f018a618 100644 --- a/mobx/android/gradle.properties +++ b/mobx/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/mobx/android/gradle/wrapper/gradle-wrapper.properties b/mobx/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/mobx/android/gradle/wrapper/gradle-wrapper.properties +++ b/mobx/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/mobx/android/settings.gradle b/mobx/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/mobx/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/mobx/android/settings.gradle.kts b/mobx/android/settings.gradle.kts new file mode 100644 index 00000000..ab39a10a --- /dev/null +++ b/mobx/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.3" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/mobx/integration_test/app_test.dart b/mobx/integration_test/app_test.dart new file mode 100644 index 00000000..807bd01a --- /dev/null +++ b/mobx/integration_test/app_test.dart @@ -0,0 +1,19 @@ +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:mobx_sample/app.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return MobxApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'mobx_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ); + }, + ); +} diff --git a/mobx/ios/.gitignore b/mobx/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/mobx/ios/.gitignore +++ b/mobx/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/mobx/ios/Flutter/AppFrameworkInfo.plist b/mobx/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..7c569640 100644 --- a/mobx/ios/Flutter/AppFrameworkInfo.plist +++ b/mobx/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 12.0 diff --git a/mobx/ios/Flutter/Debug.xcconfig b/mobx/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/mobx/ios/Flutter/Debug.xcconfig +++ b/mobx/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/mobx/ios/Flutter/Release.xcconfig b/mobx/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/mobx/ios/Flutter/Release.xcconfig +++ b/mobx/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/mobx/ios/Podfile b/mobx/ios/Podfile index b30a428b..e549ee22 100644 --- a/mobx/ios/Podfile +++ b/mobx/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/mobx/ios/Runner.xcodeproj/project.pbxproj b/mobx/ios/Runner.xcodeproj/project.pbxproj index bc3ba7c9..2ee94714 100644 --- a/mobx/ios/Runner.xcodeproj/project.pbxproj +++ b/mobx/ios/Runner.xcodeproj/project.pbxproj @@ -3,23 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - B940DB6F91D78988856B434D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C2A5CE66B2BCD66DABB1BA0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -27,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -38,23 +42,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 25D1A3170E4D49A14BD3B1AF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7C2A5CE66B2BCD66DABB1BA0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 82D122571FE649096AAA5892 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B492BE0523C96C24DAD45E7E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,21 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - B940DB6F91D78988856B434D /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -90,8 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - FE8088922888B11E12816E76 /* Pods */, - D4D570E764474C60C2363F40 /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -99,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -110,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -119,47 +121,36 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, ); - name = "Supporting Files"; - sourceTree = ""; - }; - D4D570E764474C60C2363F40 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7C2A5CE66B2BCD66DABB1BA0 /* Pods_Runner.framework */, + buildRules = ( ); - name = Frameworks; - sourceTree = ""; - }; - FE8088922888B11E12816E76 /* Pods */ = { - isa = PBXGroup; - children = ( - 25D1A3170E4D49A14BD3B1AF /* Pods-Runner.debug.xcconfig */, - B492BE0523C96C24DAD45E7E /* Pods-Runner.release.xcconfig */, - 82D122571FE649096AAA5892 /* Pods-Runner.profile.xcconfig */, + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, ); - name = Pods; - path = Pods; - sourceTree = ""; + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A58A7FFFED3D999BFC70F620 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - C5836DAC2037C04040A76DF2 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -176,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -186,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -199,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -220,20 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -246,46 +253,17 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - A58A7FFFED3D999BFC70F620 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C5836DAC2037C04040A76DF2 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -297,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -319,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -351,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -359,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -375,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mobx; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -394,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -428,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -442,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -452,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -484,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -492,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -509,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mobx; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -536,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mobx; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -558,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/mobx/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mobx/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/mobx/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/mobx/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mobx/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mobx/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mobx/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/mobx/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/mobx/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - - - diff --git a/mobx/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobx/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mobx/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mobx/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mobx/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mobx/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mobx/ios/Runner/AppDelegate.swift b/mobx/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/mobx/ios/Runner/AppDelegate.swift +++ b/mobx/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 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 U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 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 diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! z*yu*-E@T3dqoJkwK+18}@#)AZuW^-g@it}woIK7hoXN264W(iQS{n~kPujP2(BPqp z4vWPKcLrM$1dq!PV~|?Km^AQrTt7{BRQ!;&S-?&G)GukB1Z}o<$lZ7azzE`uJ?)I} zSa!$A)?0d7yTobi1%WG$a4%jEm#H0Gyv5IoLst;(sPW{UNY76qbq?Mj+^z@2t3|TC zkcv4hn}hlpnANfhq43&&haH-ax=^e|q}m<%fDYDqrhm9~ljZjPI=;Kt+pEAlVEe#! z5$?PAj`3(j}J@o*Ldb$M&Wu9;~A*BTb|X2U9!pB5#bY){c&^=bQX;y)iH0v}%g>CTw5VxBM z>JI`-KmN)MGyN5nr0e-ESMVg!$=KGM=<{K%V@XCbG6#U6%Y(UfFxAZ{^a3ZCoocsaB2F zjvM*Jz87^}oY)?1`)l#NK||so!kw>T&J10@u#g_y?~mMDo=o88g7$Z0kQDh+q2=+o zcbBu0NlEkm$0g<1m-6_sZM{FJws_SpV+$BtI@w4rMrsDgW|fxOIRg6HQ1x{SLPsB* z_u`T&6MsC|C0=7OXR%`{Vvq@mAc65DNfFyWSDyQ}gTq$No&O|;O{Soh6e9PCQY8w6 zkEcXEzzNe!XJpAuq&K+5S9GJ=D*Vj!e}?QCTGXh5scN}ln(acaVJO2L5!*1K{hK>H z`2`y|yl7FTW_Umcd1qrq#u@34#E9l!QIN)z>nqWeH60N(tu$rpHs$C1o?E{o)u!GC zJ$!cUIIv-8!XcRh55M9F-Oz4DDRqnmAl+5?&G3P^jRx^^<)qrPqZ?vyi*-IzUzX3& zZg_aH0^w|`V80J@S@jVS8KmijI8YqlexP&HpX@xu^=tHOEh{l75xEe}(i9-7AkON$2h$#9~W>&Z| zs+@FaX)8S9k>`76apEjSaSKs;c*)SqZcLDv(=i)B&ZXyi)aT|qdw3q)!smUfF{gP_ z{&8kOUnPkXZ{lHFD>+lD9dt$#iDI3M{e47Sgn$Y$sQON>)4q5Tb}GLnf3P4+?07-N zWu{ARCj=>Ap+-VGK=wHY?FXfZ`UE%p-ktMgDUj2%Nlwe}B;zgdKEc!y9uG$k2Qa&R zOwv*(&F(NNj^}2z&XDh!-&s^k_w&y@>|0PsmAUzK50pA=l#~QbjTT(#OI70GU~-+F`-h_g>ZLOg)QzQ^AonZcL=x!{rPlz{yH!yt zVl`5eW*S)8QapS{Ma{9}DA)JCANhe1SFzY+V!8PjmkO!Ik!c|64U(ZfXDpdocN0tj zzzUSCyo+CyRdH@dO?cBP+mDvUIn9+LJ?2E$aeLPpCFP~^;+{R>akNJ(yL&-cau?}; z937zf5!AlnxL1>=g#}ccq>Y0Cx{Ba~3jyg3a(09UC>e@LT-~p*dxW5V0lRkJiw}Yh zrdqgy$E&VUC{!U^sDQRW^0FCyU7UnT{%oJ>bTR0a{ zN5P|>wG2$@2m^rrH+#$XU-z<%n(!rmPB-+5%oU`vbHIO~ zw8Yc;8StR1g`kQFM(G9ozZx|L<&qiDsSpjrE*<%N-8MorYEMGveBMYQV;r zw~jyg;J)JmdJR+VRDJI+;KXgRMnn_4^W#OF7kV@FR#9E137P$yi}C3Gf0c7XTfZo# zgn=%n>TX=~Um*R%$B5hYj5O1S>^aq^1XqJfOEvsc6yQ&M`cO+O#BF&HJrxNTMU*ZO zo5oFw0#Jj~{?8b804xL2&Up&<$Mx2Ii*>pYkBOH{HlN^WR2+2+@)GX&S2vYG_AB!$ ziuDqaq)279sPm2G;^Mj)t!-Q$ca9tW5>fj46(=vhb52$IV_FAWaA8`iJ4s1P&Sfms zL3%0s`*+EHLtC+-rXOCRGDHM`M2eLt&|0k&YPbo@7USX4Dh->xx=$WIrcLn7xph4X z>n%3)@8syRFW$rp1y=ydIP8?pN_-h6C9Oy_Z2xh3Vq_$2t@-+p@p8X0LFO>d5&ayM_bctm-tn!a>|4i zlK$aM&32~Ya#v37DhlC8c|EA&xBJgp-t{kJWwbJC!e^cv;zWPC$j*nNK+`!OefrLG zY4FTBmRy}D@KN*r0gea0Q+HgqToYD=S{7LG-xM2ZK>pl4md**3@Swj$QOY z=E=PQWGu0a@ z1kHp_#6smToZ?()7l!U!3JPh_ce9@vh`NYLs96tXx#|~Y^vzTw->4{SGT?xPmkax& zp+VW!soLdCZQKEI<4lYnL~P1FrziQy!?imtCPWnIIU=5iVYtR|sthe40O>MLgWVmm zA}>Zt>=E7e_V$qOvpL`6M0lPbQg(22@rWmHp_*H?jqI6`oL|54pG$Z=OgjA6ieKm! zNF$5;VG^b+>iytiCM9n<#Y|__ES^54|Ce=bslL8m`rF)6mLku@;tb$UgF=4epV6R| za7W!y!LlCHEEtVML%q));9yI5VR{+TFXr{$OkMx5%c90ARC1?nm5CIM>x+;dm6h>X z8?|HI?>;I<`XL*|f;2CU!zA46$V2R@?30}kaF+>Z=YI#rl-ZrzlYCj+Qt#a5JDYqd z0E)FU2_6FiCUsUBbI(`4? zmbVzBD{R`N6xs9GKuNh0j1}HI z%-*rgPAS^7L&#|>>adNu`66L$rJECPl56F4i&pFU-nwRMH$W7AvIvZ=d~ts(x8^#? z9``ALPi(Sj5ROcIwNifa#(NdGW~#}uLUctP%Ng*isWIm3`sLEb&AzT^7qlLfiKwyzxCCa<>18Emsh4W8t8+SiDHv%Y&&<7&=4% z@U0ggcnm@l0V%aw=TX^8A1V@2L8~p6Y4hE9veZ1Lw7tW?2@m5nqP)=7YGW;idUikD z>upK=6Pfn3j#TR$*ns&{&q7&VcE2j;;!#&uceob!7M6&|Kc6c#rw<+8!SOZb37f+X z=;*Rj+=CcQ%s=|k$1Cfvlfw5PS>tJg zB=m0r2RN8|=4z)B!QB~^0zZ_YMqrq%R@!pfk(^FN6#V` z$emvD@NGNbKyYj(I}H9|LJeU;JKm z^tqMurRb%;$8^^>zK^4}{mC7MY8d06%v1k0Q-JW=h+AVLXostIhc#I{xW~uJRrpj+jfI@RGzW2FtTs3tKNmjfc7RxYqWM0Xq~Q4IaIMn&aH z#3O!K&(W<7{$>yoQ3%8br2q#+Q!+O7@r@gouVnO`G97I^9BS6GK;K*jRd;Zbowjfa^Y?DWR3tWqFI7D9=?H3&rdD1~ z4PsnP-FTfg^$}{9axd3ITi^fNoOQs9Nxpb(EI2>SLja9WA?L#0DKz8w7<@%}cODG& zqAIK^#2-*jLcM%`;=b#?K4Zc`P704!qv}m>rfXOq&#cm};)wsP0Yg2gL2eeN;;|{B zC}ccYEQ@JDSHTI)N<)4^T48Cd$W@<_kFYQhWb8;+N`ggzY;<@AhJ+^tCG!L_BX?IRIsg<=mm<_@(M6>)-3oX(?hkIk`J(s zXsD!0mJV;JJdc`x?(cPeWtqA9vK=}rkhhv!IHNL<4@Eo=g_L_C^)5+5N<2`MXthZ1yKQa4W2p1zC5h}? zII!9xuIw%}+uh2Esh+le#P;vJ>TU?=nP3Zd+j|Bpq_+@^w>epDv7KRfPZ0YtO0-Lz z!BFlxx%Bd#DrYSK0(P~lV9C_}jD^YyG~KDEbXVWV-Sh_y8O*E5_EaGNJ8vMOR#YXF zUoBQ8iwR1JZpEd-S#z$^QU5LEjQRyH;iGpzKVXK-w^Rq+LIz?QVtMJICoLpW{kyL8 zHR%izGiCr*ngU7i#to}bG75LaYiF)Ry zRwE^3?!)f*Y_TgFHEyP@+NfMG+}JXCbrAJT#*p$Sb8An^AodHp0;FhcszZ_K-z| z?N|VnHUXw$Ci1|&$b@x#y7@_xT|)XAaDXUfDT#m$3l76E7EAo}1rXg|+N<1jOLdyt zxY#FhA=wyX19pHHLi`}&O@=ko^-IU3Gj9zfS{+l<`1@hMB^$xqwt(o_A^VbjyimG3 zvU6h!+R*$%TJ{`q>3WhVx+H>YsrmecRZ&u+!ay#A0exwrXlSC$3Ws#(d5xLd2dzig zF<|kN^=T|SIG>;I<26_?-)zpPcFvQ;KhZGinyfedn*m8M5Pc2lfR|e)7TjPE`l~Sp zX@S7*a1)9j8-$UZfw595MK2tLpke?+PADiCugEllm zD_)&QC|nwzR#$5hMFZy`;dRWiO+)~i!;%pAeLi)WD;Wve@QK_fhQZ{OXJ!nVhzIPC zc;DIUSTv8Qzx7AP#(ztI&Sgrs_a?(EN7MMAo}b4!4Qa`1D+tC@&6R!P@KpQYdj^#| z21!b~)+R#e@$`q=U{7=#G*|0yFV)lfs1%wgZ1s^T=P}Jv(W(;7Cs0l7fVj`kcA>B! zb+zkK)MpwoQNqQmXO&fX5g&?4%we4_p>Cgpm=d6pb~V%-Nv3Bibut&GFE;Ps%u-1O zQ~(ku84^p3y}lKC4$n((dT5(x>oC2?ctHH*Lb`=VHv;g<9$gY-*I^<%EEe&bs;4SwAQ#!^TsP(FryA67eNGv9^Z zG6q!~4>H~;X+*_<Gg#?J5XG#34*fxKnv8hNuewgndd*uJoPEX- zcj;1%1l1*Y(`FOwkNc)(A?7La;skDp?LCmKiT+5Ia>MEe-flAyZ{%*h{#>m1@VkeX z#k}h_dKR4HyiAg`J^N|EB_tvN+~B@}v!}utO*qngwHp0~`&N#oao!`vm=j*L@wW)T z9Hx+D@}tx(xasF4WCPqBD#207P@){vGCoL`14_}>mK$I63_6a@L(DN^7AlnL6A*AK|+$PVn$_DH|9fK9rEI^+|+t|J_Hpn{D9;8vLus zzw$Mf)-S?7r%wqpPMq@AvrI(}q}ga5DT2Q`-Jw(FzA;x`p&o+W0IT(N30OWwX=M;) zc{dmxkp51PqZI&ngntDDc@*`4XrA(50@WruK69cba;%Jb$fTR`M;cA#e&3UeK#w*2 zlG;-+(8Z7J;B>ujnjR+iW3w5)a>ix7$8#^sE5t0w14p#MTM|wF1keTW7_v+;J3M3L3A|q K)eG-g1^+*MxH5nM diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 zcmV-E4Z-q>P)|1QzpLn7 zyFaogR6Tj$`Fi#0wcd%1s%*aUwf<2~VcFVs$I9-_Ia0dEP`vJFX8^a}4^ihAoqFd>ecFbi@EOV=1w5*RP*i^~7Y{Mp!T{;Xs?1Ic6PvPbc# z7q`X_XEF6=Hq?4FyZ+qE$gZ-pLB)YtNnu6ay5r?j=6jZ27fUJX$E^`$IMnt2ek>DE z?|&}`#Y->=^|G_V>nodi<*T33yRz46E*s2KJLI49W##DXh-RDXLh?DXh?f zTtCii4@fh?Lt4vI&ENWXtV zy)27b@T-_#GBVh|+%X@FM+YaXH7ZCm6py+-cmRL@)B=K#_woNMZ`MyXbcW0~E?KFK zr|Z{JkVGzuN3Sty&3k)wo1R|C=r>yXg8E5TYW=C2dvj0KXoL9>#iRIYbd_*7u0IOS z9YM}eJnGCAGVeq69eRFoQOnnxZGA!eOI9lPbnTwpQ?*)<$59`-sO!DwP>Z@g=)V8F z7InSV-33V0bhE-+TDv`i(}94UUsfTwwA0!`b>tWk0Bo z5RV2SwJ09751^JasOLRTKdD9CUfJ~DcCJBR7@Z^=e_-tc!TYP+=rL$OBg`3UJ&H%+ z3>vpE>N`)r->%|DT{kf;nIs1mxWD294$+8ns9?{~gnB$0hW~!>xjWO(N}6>0m02=L z3@mhiW&hx!Acv^u0(GeC{pY#nF6w&!eW^hm?|t7tFaCGst$JW~UWb0Y*>Nd&f3@Mf zDTw17>W4FbJwCmD8;wWtD7F8nYS&})3uF-a-T)S{L~6py;Kq4#+^ zHsIUpy7ZNW3^}A47;md+;bLe)@s7&Ss0YsC`^g#VfiqvdzrV|ajXnIOPS#&WP_D!#XlNp|=F=4+;}e)`sFy0*iR!_!+&Kb2OOv_cj`jM&8k%S9a)@ zD|4xa_07Pz4&5KGqQ&D2P!m{b6c#*x^rYTWMsq)#Q9PO@zpLrey|dq^8rFw>qs$Yu zKd4RR?al}7XvAi7hTe6`2IlhGks`f=yFTPTibp-jJ1G9|^*wrIej&A>T(r^>C*rFyZaP$8}y=tLMJ>4%C8=c@NL|EsgzpY9W(aSQ!)6)9r(v_mcMq zwYj20hj7=aG6~2_!NH^Y$E7W9NP^r$9Up%#chUP>F6r6D#ni%*zifK2^%8Hb8Wjy~ zF(07NiN*#7A09lce^%CP>nl42@n{g#KHV{-7nYV%3u`*FsPAa*=N(|zp#AYm%$7u!qZ`686dFzdyQN5I6SQ85weSKp;{ZVJvu>F};ZK>)q ze_#=hTHlE#1_od5KcIhqp<(%fE)OaasA4Ej=FxUVgK-Cs$t1*Lw;A^Yu@Pg?!(@p`{PyAusWH$ z&V&U9-|pR~uRCAs_K;!F2zh&Zb(cOhKAmbgzb-4TWfmxK#NCRe>H)@L#ImUrGMAZue($JOP!PB z(|Wt?!9IADoeb`Nq5I?2)>`?%4`-rxpIv=m@Kn)x{r9FzdT4$j)vykXPU&sT8Y#XH zT?X&$7Pvom)fQ`#Fo9KGbzoIhReET6IMv^0eK9ntWe4^^eQ*|9??TWjGIjkHJOy>A z3GCd}1=i5ep!@s#BSuC>QVH$7fy>LY_gTcFc$8gGb`9Jg6vavWrL;+Zw{Kt8L4En< zm%6dBk+47y^F3{qe-Zss@3`JpZ)X#Ay+1HKnjQ33+v*22m=95l@u={x(uSbWzW(}a z{pqKl>JL8nKsPlt5t28w#Vr2<`+F1C6WwD$^KL_vN$w{QSnLB0m(XP-v_}1HOlW)d z?9m^7_@RF1op@{TCXVbUP$1d zW%3Kb{wS>7yLanHAAMB!_V#8S77Pv!t_bbYd`ADJbtHOky8*?c%%0so;q{=RM;nJC z@J20oQECisz5JIH658vpzpnfG`dB`d(7NUp^lw{+na7>c^|9xWTpzx_qS*TY8Utsy zl{bcm5*S+d3{!qkiP<{J`o%>+I{-KfQP<=zTm&ZTLR;?DkjYgUKB&qgpT?wZ3^2#iL%hd%k}- z>(E+ydUbx|pt(Ql_CqbrsAnEeJw9pPEcTyNJ6p!uwo4J0BBcT9`q*>1iw6Jjl$yG( z9-Y@TyrMsZ&XX8+X>gOFtL-sd;jqg!A zTPN-{MhkL?dIxAj1E8m&cwl8{hg&-7726;042-%yX}<7&3H$GCpSV}$bxf@N_kx#E zJZgRWWfYGlLTK_s^y}u%gT8&V#5$?xJ|q_3`iFy$j;eV8Z)3Gvswl z78sP0Z}R)**5q|gW$d7n{(*f+Ey_I{L;0EKB( zkTcX@kLR4)?C*QoW$vPa)S@BxL3THU{V)CC$2~K7`8_jJ@*w1)f$Zu*@mEl9;PeiC zFQGpBeuCLqb~h*=7%%dZooVo)AtMcqYSf2YHYlP*^KO(KQ#AW z1{H@j3CQo$cJpm=kJ;!$c*dPO_+&lbpz29*RR46T2Z*Yo|_ zANS7RYyNo8uHKpAUA=Q{=FiTQcfojk3*l3%cQNx$$*jf~%j~klPt7jb{;!q)5A+32 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 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 diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 zcmX9^cQ~8x*SGhqS}j6reOr605wo;vRa>hSqgGM7MnY^_v%@Miiq;lt7qKadq9|&X z)Fy-^k|%Had!Orip8SzB?sLxPocq4dbzWMS8L={5VWOa*V7+5(aG(79=ikdfNB$;R zC#6zQ+{nITp!*<{axYi8@v$mL0=L_yirM_TLs~3*R;A@#Im}^w^vPf7COhx zf)8rT77LrK_GcFwf7h5cfg7y`R7>GiW&7}L(gj;~lhxuA8m*nye9*POQ3N!>^|0_D z=kWbu{$T+$3K|WKfyP4Ppz+WIXri1+v>_D18g>|z$DO@c-I@EUt22v7LyMPZh61hj zT2FxLd$51^izH|L>{&;%CHv<#7+LJ+PzfB)> z4|y*DoHBiL6lSBWiUReNk582z-gAb;2Tp7b`Fh7Swz11Cp>Y6GWzAKhZ9Ve3=KL}B41PXowoFYf9Y^)1F^))F_YnM6$T|wgB zD_o{P()RYR8gSTmY4vRVR_$Yb@q|Y35l2|Z6l@1VJh5L@)y=Vp;T5-E24}J%;#Viw zPBLEjOFm~|9pU}MKcr=u?uERB2FSEr_E;Yd@wg&Gg01j3s6F5=oXD`C$oA=@EJc$$ zTm&*4HiN{2)(b&m$k*Rs@ui1veU_nb*%ciAPz{V5Ret{r{DdExM&8UMvE(X+v;Vr~ zV>}bUo9HZ(_Oz9aQ+W%$Y4iuz+ltam!dsJKNTP>Y2049e2=VDEB&SMH;_>B-posxW z>V3thB3ZK~Y-8!&Ir9{2yFZb5h>>rCT*-P|f5IbQ)BA_}^}!RA9OgZLk7Pccad$lC zXrtgb4*0{2iBcaahhtBcvx>Xz_y`rIeE$&kfA|SiCkS zm#_0zwW?}uw1#9NH&jmT64|@mMV}wrUYTG?w&x0oFnAmIlIUXwR#tKfTo?#5{>sp< zBt+n63tU|eh~7LILH(oCBb^R1Sh)#D{i$JpB=#LJD;B2uL3@6=-*B=ZCOYjVf@~l+ z_Ot4sZ>n4pSK92@hwE39C|Q|kF^4OONw*@wm^z^9tWe4AK$K;jCU7$wB803}Cwd_$ zr^q2okq{UP)y?5LXOb=_3wnr0wG8^E$rC-N?_g>|F9wtZDT;XT&ry*An{S(Mmq8^+fQc&Eg{|;7ZfIzUz^*d`Up<9aH|whUu6$yDH;1nT ztJp%#l+`?~?-j9Pt$_!!&5L-kVtx-8fu>SHTHlJVOWA3|+X3tq+ zkt)~jWxk97$q~W7)NZS3TR7~uL|$YO+^Aff=7-ZSr_CQss24C$;g1Z?FxjuEo7L3t zB>*f23{p2FX(fz!Ma&hNgv&E^q*u4)%Pq77*p^9X@<>UC7_q~k#v4y9#^yu$ic1Fi z&6Mp^7U_s&?_5}x}^!HNW)$y2XiVFccoN3tW zv~HT32iWV~9*Mk4I}_!=oK)jq0w#|}KU}|Zy9NFxibw*1g0iX8xN}1?=EofSV2K~7 z%Hrhd4x~ZC>JWln3E;g0clXS!UFt9t>QgCw4C?Wy zm@=913_q0IC$9Pk-xGD$0?t0hQ7~ee77Yg4}#>hj|Br@CUm+1;QYo z`R9&5LF(%2W9=WA62+g!5@-|`#oXkDum@1BZq9UDn?feCCHBcxLAD)CyvrHy@vJnL zMR?}N__n8!Y6w_?%Fxlii(xJ%hgkqi{mj=)S@KfP;CB-Zk5`Q3;XD?(D_O5 z4#=Ch(p%+6^fZ1*OkftieA(NY(slSaSCBECdKAF&3%G>7-%3 z&;L@40C+M6hXg98PPds$l@oUI?C@R(}A#7GBqvwU$Bl?grFZ1-{+%u&`zGpd;!!EHrWyUx(~MmnX^XGB)| z#P6C+Hng`jU=B;>188;jZtk!3V+gZ@VvU$Wgi6>V|5pABS5I)2I)CEYL9(H6L2^(pZdtEAe?7=?<$e?JDUTAQ^3dh>SNmO8 zNdXTy`ELpPMKtI~`P@I-IJ(UgG&M!7g=+O?3eY<&I{A=&|=b$#2uvp z>$UrG30Hl7;`5@YGm6+Aw*-!@(bEv1G38Ei3=0IiI{obH)V>UH^~%dqz_iv?bAFt`V{|(X{-)zso-BT>YI$zCFyt3#-vkVntoC-$ z$5D%D9&f@lmxb5J&`oC~`{wLlyz3M4DK2KBe>@-Nm}9=UEvFB9+3vKkxrR^3LCOqU<3sZMFw5+ly-6Vm^kPI8@c`N4K>Y;XHki~7cJ z`08(+?QLBz7e}6IDq2=L1Y4JSVyw=;bU4&xvk{N!wO$naIWhc>if6xhodqD^B+>BJ z(%0?c;@`3g)1NKq*C2ak1(wR=iJmpyX!j%mlKag!O2f6iwtjjEcJRz%N9R5{N2%R}(4F3D;pprMhw~K#I^l?* zw;_AX_?EPrDXpZU<&w$wRs7T6uJr_q-8uznVHru$VTjYJ%aXM5>h~|!-&MQev5CEq zG!Prf{Mn-Cvn@zf|NJeLJLf#A2@Y^E?wO%hh7Q+F?B5wfwxK%C@wv9dO-k$MWSFtnyLrTPi>$f++e2ZB9rX+F*H0dwoS1ij^P zG1#e7;E`g_!r96Qr-Fm)IjBzi&xa=d=860onut{%R=o@)J*3|~+eA^X!b?k5Zpm+9 z(kDj0)H6!A@J_}*+~eBLi(i#G1E+H zmxiUDCJV>MOS|1Wi%kFVeeT9_wQiT5_Sz9W?C5xil+{ajmnGF!Vvr~p@wyg?22E0= z$nloOeSj17TOg*w4yz3B!7$Qp?pp2o?PvWD)siDsR6>lpfE&YfHg6#8yJx9p#%Y~! z!1VmFH1B#MVvQww3w0fcExU6!)!a_ZfHt0k?S13kjeH<-p7*A`i#0r6mkpqxH_w>J9wIVd3dO++!nAdg2xTxr ze=O;Vi-f8D3+~#GfcFLE9xq*q+;p@IalKrkN3*}Y8cU0Ghk~oAv1q!)?iG?6Jqr1Q zyi?<;tLR7bT7s&~>m%9}}8#y;+qrOK4tC|SM%wVynVjl|KW6_u%4NU+ITec85 z$nT~-i;A~idsD&{WPL|r7LzC(rn_nF$o5(emMtv%Erwk1C1fY3I>Nhp0wP6@c(2gO zJwudvLMs=$s{DTTZ3KB)a-E4ZW2}vB=&pZb%$s00$hfjnsAe*%YZq$Bk^*NqvF28p z`l)?U+sn~y+Op-yE3KddYO1i;?n zRJoP!=aSb}d&)X}H_7t$pWV7KW2IgNh=4o8QQXt)skuKthjBC$V2dToH>G$^vW5>+ zBxn6v>*}34V8bPv)U5#CjSi6{MEBmd!6IxofCjf`pu$G8 zlte4)!I+o&#LP(!DyIZJ8*@jNlUOa0UuCBnwbt@%t5>eTH(*#S*GnGM;ga{ouV2d& zhv^+Fud9(Gmop?syX5Se??!5Mx83GPGo%us@MT;o`a>p|so%{wp;mKd>oJoM&26yS(>4iUoB3 z2{&j3ZUlCV&)asNJLq^wY8QCvuHVNOp7v+nA6KRUjymUJ*_r=-YTUn(-<5a~`Q+{i zyO78ngppOah%pPd9LJ}}DJoM24yjF?Da-B{|LQPQ&iC4QLQqO+tN zl$<@3{DAoL5-2VXcd6Kdma!w^Al#Vn3r3eBZN3PX>R_7FQa4P0)aVQR{i=0_Uq4jWS=2LCGr3`;>iu;Ij6x_0^hxds(UNGT8TsXy7wO%i~Ps zrn)7W;M!%JA-yVSp5AlYETh|Z$b9;S^oYO_igw!NJhR0jnT$&`{cX?SJBnwz)LktU zYOTVEIq_qg&fapQLYUzijk;XczJ1E)Is=o8?m@WO)B>Ts8+Q_#F1C=*uIPQCzM`sk z6AMuCpMkoB8Jr?*h=<>eM4b3jL?yhn!43ZaYtOtBvoUd`XPWqsWG^3iDlt4twE(f| zp<5xLVVSuc)r+cj8O8jwy4b>ok?g6%u{y>SWLnvNUhs!UMBf4Iufi*ngwFG9{R5-G zq?iO&1dxJM5bmb#osb)kt~V~s*t?I11RbW1=wQ8I%QO41+&Uj{-U7ZKp!!2p0nzvF z!Vj@bX;C^1T7gYUQ_eJJpAV7RLDKcB1i0sZ)6NZnu31vzmO~<`;fCiq*cmN92FKr>q5URP29dUx12k^Y4L5^`W~A`l6t{ zBmBxm823`baOf=|3DK|b9QKk)4NAaX!y&m|qMUu_f|;n4xZ+4$Jj1r6WWvveH#`M8 zv#%g@qp+0g&CN2P4UVUKM>_*CVaJfyXA}0J+|ND26C5h{pJLoOF4Ff^x#BcI!K=ia zQ6L*vrA{BF!xpFq6NpI>Tkgzo?}wXuGIO&m1aq@Nc1cfz6PG{%)F&tmpH$%?DEbsR z2I-L(74GS^PbdQ$IZw= zo97pht-7VS-=%KfddHh|5m8X9&A7rgJ05#^Do9~hDe1AA1POX$q10C+l>B|Jb4EI;YObcIwjUCZ-HdC+m&5==VXzk}JTJoW%U>UHjgirp;NkfUo=qGJIVmwrd+DA$5nP zoXmB-Pkxe|OYW5;b^H3VhrZJ$p#m033h*-O@jQ-LjXUaV0}{hlpUo@-O>VNXvD!-v zPIq2!T&f0+;(=okk9x3E;53;$KSPIK>I9Wbk^FhcQJE)Gc%nedq^723W_EVVF?3$Y zQfOO9p%$qLIRFRhGB9+ISN6Zm2c<#=4s)~rSo1`xuMez0D-VnRwu&rN^NI<-XsbU4WW!Fj{{8PHQ@CLBc)boBJR`*V2G?84z^ zAVB{sbc&L&x3%k*xJlLDv2;d`xCo`XuG3?)44-HAdtlej7yDP@+*2iwn*fOFIj$B= z;}S`Aj8(wm1K^_@x<}SI?^v@wqk3;?SF>c@gP9LsH%e1e0fSe>Zt+u7QzvhE5y9R& z#}K%!9Qx!4*Sb^(i%k0$t5q6A@j9J$V5g?aHO-*E9D-_oQD+CgO$-eUZ#&cAFD_h2 zO+ejTh^!4UJDa@81XAL8gKGbAD)=UWhOc%ti{81K{^3W=I;{OL7!sj*{8Z9E*d!mIS-cF zrgg8qJ`%fKR97eK2H6Fhrauf}!c1feQ~e#{xF|faW*FyjWDM7zh!4JS+pv50z3~{k zZDCk$-bcJR*SNOS32nLFy}#Hpoh5BAU~gqbt!pbb(tP}1c+o9x58@_p0)`|A$np}n zBe!)f5IOInDeSuqsUkJ17tcjIK8Z3~ZV@Kp@k((FA$#+>_ASrLzUQe<52juflvhzw z(lKU!wYn-1@01_Jh}kI z1esPw{hZ`-!cjReQuM-{mN;FbB+7WMo9QR{O@A^?W0MQwdz|RO*5l&vL`^ zl{e4l5tP?TA(6QFNc^@0ek~DnTJf^VPhCGGBt*395?YTWS;JBWpidsl9TAyDZxQRV z+NiqE%@|I$3fLh+*<7ObeiE}z=OFNShV8G1T_wI$OgeDgZrV{WP;d%59UsJ(T9BG2zNC)f1o&L0j{NRPaiovd% z&W*R<(YGgFw}xxxeZ};m>NGF0cu>1anM}mTBX3EM1OtW@16xTJg$XN>7t#?#%-kut z2|nds7;(E0hJINJhR$jfXv*|Ye{9O)s@nl*0n{r znoFD5G32S4mF$_S495MMBQ9qsT@)?`7EZr_8Oq;?x<2yOJyj;jOa2*W7iQM}bnvS0 zEY`uk%aa*945_{ zS2FWxS4ZW{f>Z_xnT#S@bXU9S7$!zHhFz`f3jw96E4u5Dm+xj~rk<6wJVqo}0`=qy zE%g@=j8%dN@v1x!mKp-T+iB5z*P7(;&UjL*?9O5MH`Xqj9T1ePT7i-kyWpJGtPn>- z-J{EFP+>lJvuu-mm`(Plrb_+{9HZ)vl8;p6=3|8JvP#{xT>lz6&XYOmvspvA2NBo> z!GXQFy@YsnFE(`t84AlC^Xt4H_(OS)tHD?dk$I(=wW5L8Mcog})5-zEGUJhx_!I7y`4tAwB8Zi))@Qz`Ta zk?&_)a-*t`d?A?6{e@3%I#>YZU!P#owc$+-pP=5ZrtF@7A>Hq}wwV2fugY*Uv>n6Z z2?`w%@scG_F*DTp0cJ`EyJ1UiJVyXk&%y^EgzL5B7im7Hhz-?3j6qsqZ0n^dMSM*W z%5~S|0G<9_UsiaHVN*l1YHkD-;>gK$cw%&y`u2(I>b_TLe~$O_PblWfz+UnNt|b|6 zYJR^g{aYM~R_zaK2nED`%zr46w$dpKc7l_FCn;QVuJ-aMl1SbO7zBUBw4@K+`5rn@@wqGQm%QN8-|{j%Q#Fp{5RQOo$G|$1TZQN1gKh%V-Rn z4Oxk7%n@sW`^K=(GOgYL3@Cm8H#4l5YqzvBJAcraFtLKiCk`WPLlW&C&Rx8oi#c-A zik8ofT0}AC`C1&|c3SH2Gb1ngWXUl5@G|WPXAdFy;k=|Pe`1L2J5=$i$F zI7&@8-$#}sS%Uc=QV0~q`r9}lZY?YOQkypyPV?8}A8zOz{x|65MT2E1ul$?yWs`Sk z33$u$MLhlNRSHqL)%G@-b>g|(ZfBQXi8>9+rY8}(Y+CY_q|n&%)u>_aL#ILr>7)*c z|7@#d+0-&rAN|2i(%D0ofj8?gka@&844zFwK9P2l^yDM?ulhBI9xM=uUc{Do_L^GU4~^zNqK;h7X~ z?StYZU%hzd%o@i%Mb}k1fUu@-3j=O@lJ}qFb8|)GFUHiKH=33myxA~45xUI~?)T|h zXR%ZY)ZfMQjVDjfU8`wW#3G|kekZcITK@VU7i53GiBDhFa(@>6fGgd`xIDI-SU>Kf z<^1Sgfn4DQasTcFR8l@=lpXY68N3F540zH>4^EDH?GVehSujPoc^|$VBIoP1d2=(r z^cjChLLw=XKN62`iWs`Phs5HmNWhx`zHr;h&$6rZ!@L=+as2&u+a`P~#JHGmK&Q6V z6jBJAp=I_T>7DI*Z!A%wJHSP5gd+ePv~ZG-Th>p!%V+ z!G(A+2O&<6*|Ox&6xCmGs)td)$JchlC^<$MU(by)9zp8J!v^FCY)R1x&#y{j_O|OP zFm-J*lH!eQ|Fc3C%zJ=3G$K}!^oZ=WKgg1FDDEx&g@=8)bUQnK%Y_t&FPu1*{Wn1{ zK!)v?98HF(FnyQSo0aU(6CsEs8nz;w+Nvfcd4hl$4f;vf;yEiNJ|XI8klG{rNl_{4 zTEbmKQ{LOva_y+C4Mc(kd0K&jq~yZWmrIjUs=n0eL^D`QEyz2zubaVN9-@Z>SkCU5 z<-j0hdC4c{if-}(Gy+zhEP#~IeAKlA{fJA~_zGNl$dfIy-Qe$80~`Vy;fVPwNVUqk zS{FsiA=+Yepcyt?T{rR~@q#=OQt0-|ZPb~8ty8W3Dr`})xHsOqIH{QH3OVBRQ{iWt zG2=6GYXEs*<8y8UAMfe9Xj`t4O}US$IB~73hfKVxc}Gs%~^;!ob%=TDrDX2{n9)G+L84m zl(XJudMJ&v6M5#P7;w?h=ee#cd#%pPZK6VH&dxG0K;(Y^q^;w{>o7@^oDz!l2oF#? zvB&{cL8fE{uw=7Gu$j+|W+i zBnlY+vnk!)>)hjol-m`KdxlF_BI(>hW6IJc8=UqwU&~#vj2!eG`BFIOtfC;~=&!j; zx!L_4NN#PzQyb~!F#76u2(yrgCn0}^&)p6GFp_-<3572S0Nu{8B3{`yQqcP|S8B)J zAYP@C9fjlM9GM$MeWxcor?{qx`#pE^F=aGpe~;fk5JTcL*I_1SATw)as&_umu6dS_De-44Vuprn~O?FBxt~ z%p;5TQa^C6qmR7wa9MB#<;G$ft=Iz^GM>Ue5U0R=GCto<(+^d)t@$bhwB#(ZidPcqHcSjlco zDDu$8=-GBCMAj>xx`)KP`cH>O3}Gf?qeJPR;O9_59lffVcF0;l+i?oG8LzeEq zUpG!KYC0v6(*yqJ#HLT=OdI01NKWd>#jBm+{;iA7%}g}*BUfu(zkW2sXO?QTH^0sp zr|A!fMtl7}qz7n&KV<8j)WaZYFgOM*LAv8kZk=`B(RwCt&l=NqlqCfXpR!HoZQu4? ze|{^2so@8M5Npq@$?%2zJdmVSpf6EQQpX*p(a*%rB+tC%QIzEv6U3{cc{Db%B|e-= z+)?f9XO@KbZ|%ljF&-pE0<5I~^NG3E?atd;iSR;yjVQ;(`k?zv z;|_!F+&-4I2<^kIf;lKJs^Ius!zrQt)UPG3qn9vQ1Kvh|%Px1^94&bBSP=QNSY!E% zpL_&LPl9N-WD5TfGz}N~eXOg|`q^ixfwbQ)xP000KjnC3ZyeDowPN-`V5Js@0z-wN o!O&qCFiaR0OxnP^Xd{Y{)%3ZzJNI|Uld2SV49yH`^&DgV4^qiy*#H0l diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/mobx/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobx/macos/Runner/Configs/AppInfo.xcconfig b/mobx/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..752facb4 --- /dev/null +++ b/mobx/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = mobx_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/mobx/macos/Runner/Configs/Debug.xcconfig b/mobx/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/mobx/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/mobx/macos/Runner/Configs/Release.xcconfig b/mobx/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/mobx/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/mobx/macos/Runner/Configs/Warnings.xcconfig b/mobx/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/mobx/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/mobx/macos/Runner/DebugProfile.entitlements b/mobx/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/mobx/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/mobx/macos/Runner/Info.plist b/mobx/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/mobx/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/mobx/macos/Runner/MainFlutterWindow.swift b/mobx/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/mobx/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/mobx/macos/Runner/Release.entitlements b/mobx/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/mobx/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/mobx/macos/RunnerTests/RunnerTests.swift b/mobx/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/mobx/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/mobx/package.json b/mobx/package.json deleted file mode 100644 index 0564f5ed..00000000 --- a/mobx/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "mobx_sample", - "version": "1.0.0", - "scripts": { - "generate": "flutter packages pub run build_runner watch --delete-conflicting-outputs" - } -} diff --git a/mobx/pubspec.yaml b/mobx/pubspec.yaml index 4fdbe688..01db0995 100644 --- a/mobx/pubspec.yaml +++ b/mobx/pubspec.yaml @@ -1,5 +1,8 @@ name: mobx_sample description: A new Flutter project. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: "none" # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -8,18 +11,20 @@ description: A new Flutter project. # build by specifying --build-name and --build-number, respectively. # In Android, build-name is used as versionName while build-number used as versionCode. # Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. version: 1.0.0+1 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ^3.8.1 dependencies: - mobx: ^0.4.0 - flutter_mobx: ^0.3.0 - provider: ^4.0.0 + mobx: + flutter_mobx: + provider: todos_repository_local_storage: path: ../todos_repository_local_storage todos_repository_core: @@ -28,28 +33,25 @@ dependencies: path: ../todos_app_core flutter: sdk: flutter - key_value_store_flutter: - key_value_store_web: shared_preferences: dev_dependencies: - mobx_codegen: ^0.4.0+1 - build_runner: ^1.7.3 + mobx_codegen: + build_runner: test: - flutter_driver: + flutter_lints: + integration_test: sdk: flutter integration_tests: path: ../integration_tests flutter_test: sdk: flutter - # For information on the generic Dart part of this file, see the # following page: https://www.dartlang.org/tools/pub/pubspec # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/mobx/test/home_screen_test.dart b/mobx/test/home_screen_test.dart index 7795c53e..54050402 100644 --- a/mobx/test/home_screen_test.dart +++ b/mobx/test/home_screen_test.dart @@ -1,4 +1,3 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mobx/mobx.dart'; @@ -8,7 +7,6 @@ import 'package:mobx_sample/models/todo.dart'; import 'package:mobx_sample/stores/todo_store.dart'; import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; import 'mock_repository.dart'; @@ -84,30 +82,18 @@ void main() { } class _TestWidget extends StatelessWidget { - final Widget child; - final TodosRepository repository; - final List todos; - - const _TestWidget({ - Key key, - this.child, - this.repository, - this.todos, - }) : super(key: key); - @override Widget build(BuildContext context) { return Provider( - create: (_) => TodoStore( - repository ?? MockRepository(), - todos: ObservableList.of(todos ?? defaultTodos()), - )..init(), + create: (_) => + TodoStore(MockRepository(), todos: ObservableList.of(defaultTodos())) + ..init(), child: MaterialApp( localizationsDelegates: [ MobxLocalizationsDelegate(), ArchSampleLocalizationsDelegate(), ], - home: child ?? const HomeScreen(), + home: const HomeScreen(), ), ); } @@ -124,10 +110,11 @@ List defaultTodos() { Matcher isChecked(bool isChecked) { return matchesSemantics( isChecked: isChecked, + hasTapAction: true, + hasFocusAction: true, hasCheckedState: true, + isFocusable: true, hasEnabledState: true, isEnabled: true, - isFocusable: true, - hasTapAction: true, ); } diff --git a/mobx/test_driver/integration_test.dart b/mobx/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/mobx/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/mobx/test_driver/todo_app.dart b/mobx/test_driver/todo_app.dart deleted file mode 100644 index 363e0d34..00000000 --- a/mobx/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:mobx_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/mobx/test_driver/todo_app_test.dart b/mobx/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/mobx/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/mobx/web/favicon.png b/mobx/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/mobx/web/icons/Icon-192.png b/mobx/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/mobx/web/icons/Icon-512.png b/mobx/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/mobx/web/icons/Icon-maskable-192.png b/mobx/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/mobx/web/icons/Icon-maskable-512.png b/mobx/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/mobx/web/index.html b/mobx/web/index.html index 7454051f..48b94f9e 100644 --- a/mobx/web/index.html +++ b/mobx/web/index.html @@ -1,10 +1,38 @@ + + + - mobx + + + + + + + + + + + + + mobx_sample + - + diff --git a/mobx/web/manifest.json b/mobx/web/manifest.json new file mode 100644 index 00000000..c2e62c19 --- /dev/null +++ b/mobx/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "mobx_sample", + "short_name": "mobx_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/mobx/windows/.gitignore b/mobx/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/mobx/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/mobx/windows/CMakeLists.txt b/mobx/windows/CMakeLists.txt new file mode 100644 index 00000000..0e6d24b2 --- /dev/null +++ b/mobx/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(mobx_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "mobx_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/mobx/windows/flutter/CMakeLists.txt b/mobx/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/mobx/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/mobx/windows/flutter/generated_plugin_registrant.cc b/mobx/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/mobx/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/mobx/windows/flutter/generated_plugin_registrant.h b/mobx/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/mobx/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/mobx/windows/flutter/generated_plugins.cmake b/mobx/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/mobx/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/mobx/windows/runner/CMakeLists.txt b/mobx/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/mobx/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/mobx/windows/runner/Runner.rc b/mobx/windows/runner/Runner.rc new file mode 100644 index 00000000..0ac38590 --- /dev/null +++ b/mobx/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "mobx_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "mobx_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "mobx_sample.exe" "\0" + VALUE "ProductName", "mobx_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/mobx/windows/runner/flutter_window.cpp b/mobx/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/mobx/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/mobx/windows/runner/flutter_window.h b/mobx/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/mobx/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/mobx/windows/runner/main.cpp b/mobx/windows/runner/main.cpp new file mode 100644 index 00000000..261a5c0d --- /dev/null +++ b/mobx/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"mobx_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/mobx/windows/runner/resource.h b/mobx/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/mobx/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mobx/windows/runner/resources/app_icon.ico b/mobx/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/mobx/windows/runner/runner.exe.manifest b/mobx/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/mobx/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/mobx/windows/runner/utils.cpp b/mobx/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/mobx/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/mobx/windows/runner/utils.h b/mobx/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/mobx/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/mobx/windows/runner/win32_window.cpp b/mobx/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/mobx/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/mobx/windows/runner/win32_window.h b/mobx/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/mobx/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/signals/.gitignore b/signals/.gitignore new file mode 100644 index 00000000..3820a95c --- /dev/null +++ b/signals/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/signals/.metadata b/signals/.metadata new file mode 100644 index 00000000..c85d80ab --- /dev/null +++ b/signals/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "20f82749394e68bcfbbeee96bad384abaae09c13" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + - platform: android + create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + - platform: ios + create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + - platform: linux + create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + - platform: macos + create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + - platform: web + create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + - platform: windows + create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/signals/README.md b/signals/README.md new file mode 100644 index 00000000..b72900d9 --- /dev/null +++ b/signals/README.md @@ -0,0 +1,16 @@ +# signals + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/signals/analysis_options.yaml b/signals/analysis_options.yaml new file mode 100644 index 00000000..4549d270 --- /dev/null +++ b/signals/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/signals/android/.gitignore b/signals/android/.gitignore new file mode 100644 index 00000000..be3943c9 --- /dev/null +++ b/signals/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/signals/android/app/build.gradle.kts b/signals/android/app/build.gradle.kts new file mode 100644 index 00000000..72763df5 --- /dev/null +++ b/signals/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.signals" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.signals" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/signals/android/app/src/debug/AndroidManifest.xml b/signals/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/signals/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/signals/android/app/src/main/AndroidManifest.xml b/signals/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..5d8d56e2 --- /dev/null +++ b/signals/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/signals/android/app/src/main/kotlin/com/example/signals/MainActivity.kt b/signals/android/app/src/main/kotlin/com/example/signals/MainActivity.kt new file mode 100644 index 00000000..3dbcce09 --- /dev/null +++ b/signals/android/app/src/main/kotlin/com/example/signals/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.signals + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/signals/android/app/src/main/res/drawable-v21/launch_background.xml b/signals/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/signals/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/signals/android/app/src/main/res/drawable/launch_background.xml b/signals/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/signals/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/signals/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/signals/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/signals/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/signals/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/signals/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/signals/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/signals/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/signals/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/signals/android/app/src/main/res/values-night/styles.xml b/signals/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/signals/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/signals/android/app/src/main/res/values/styles.xml b/signals/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..cb1ef880 --- /dev/null +++ b/signals/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/signals/android/app/src/profile/AndroidManifest.xml b/signals/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/signals/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/signals/android/build.gradle.kts b/signals/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/signals/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/signals/android/gradle.properties b/signals/android/gradle.properties new file mode 100644 index 00000000..f018a618 --- /dev/null +++ b/signals/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/signals/android/gradle/wrapper/gradle-wrapper.properties b/signals/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..ac3b4792 --- /dev/null +++ b/signals/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/signals/android/settings.gradle.kts b/signals/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/signals/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/signals/integration_test/app_test.dart b/signals/integration_test/app_test.dart new file mode 100644 index 00000000..769ff580 --- /dev/null +++ b/signals/integration_test/app_test.dart @@ -0,0 +1,19 @@ +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:signals_sample/app.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return SignalsApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'mobx_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ); + }, + ); +} diff --git a/signals/ios/.gitignore b/signals/ios/.gitignore new file mode 100644 index 00000000..7a7f9873 --- /dev/null +++ b/signals/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/signals/ios/Flutter/AppFrameworkInfo.plist b/signals/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..1dc6cf76 --- /dev/null +++ b/signals/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 + + diff --git a/signals/ios/Flutter/Debug.xcconfig b/signals/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..ec97fc6f --- /dev/null +++ b/signals/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/signals/ios/Flutter/Release.xcconfig b/signals/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..c4855bfe --- /dev/null +++ b/signals/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/signals/ios/Podfile b/signals/ios/Podfile new file mode 100644 index 00000000..620e46eb --- /dev/null +++ b/signals/ios/Podfile @@ -0,0 +1,43 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '13.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/signals/ios/Runner.xcodeproj/project.pbxproj b/signals/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..3671c0ff --- /dev/null +++ b/signals/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,619 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/signals/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/signals/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/signals/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/signals/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/signals/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/signals/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..e3773d42 --- /dev/null +++ b/signals/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/signals/ios/Runner.xcworkspace/contents.xcworkspacedata b/signals/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/signals/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/signals/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/signals/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/signals/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/signals/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/signals/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/signals/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/signals/ios/Runner/AppDelegate.swift b/signals/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..62666446 --- /dev/null +++ b/signals/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/signals/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 00000000..0bedcf2f --- /dev/null +++ b/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/signals/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/signals/ios/Runner/Base.lproj/LaunchScreen.storyboard b/signals/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/signals/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/signals/ios/Runner/Base.lproj/Main.storyboard b/signals/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/signals/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/signals/ios/Runner/Info.plist b/signals/ios/Runner/Info.plist new file mode 100644 index 00000000..4443954e --- /dev/null +++ b/signals/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Signals + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + signals + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/signals/ios/Runner/Runner-Bridging-Header.h b/signals/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..308a2a56 --- /dev/null +++ b/signals/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/signals/ios/RunnerTests/RunnerTests.swift b/signals/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/signals/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/signals/lib/add_todo_screen.dart b/signals/lib/add_todo_screen.dart new file mode 100644 index 00000000..10b57781 --- /dev/null +++ b/signals/lib/add_todo_screen.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +import 'todo.dart'; + +class AddTodoScreen extends StatefulWidget { + const AddTodoScreen({ + super.key = ArchSampleKeys.addTodoScreen, + required this.onAdd, + }); + + final void Function(Todo) onAdd; + + @override + AddTodoScreenState createState() => AddTodoScreenState(); +} + +class AddTodoScreenState extends State { + final _formKey = GlobalKey(); + final _titleEditingController = TextEditingController(); + final _notesEditingController = TextEditingController(); + + @override + void dispose() { + _titleEditingController.dispose(); + _notesEditingController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final localizations = ArchSampleLocalizations.of(context); + final textTheme = Theme.of(context).textTheme; + + return Scaffold( + appBar: AppBar(title: Text(localizations.addTodo)), + body: Form( + key: _formKey, + autovalidateMode: AutovalidateMode.always, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + TextFormField( + key: ArchSampleKeys.taskField, + controller: _titleEditingController, + decoration: InputDecoration( + hintText: localizations.newTodoHint, + ), + style: textTheme.titleLarge, + autofocus: true, + validator: (val) { + return val == null || val.trim().isEmpty + ? localizations.emptyTodoError + : null; + }, + ), + TextFormField( + key: ArchSampleKeys.noteField, + controller: _notesEditingController, + style: textTheme.titleMedium, + decoration: InputDecoration(hintText: localizations.notesHint), + maxLines: 10, + ), + ], + ), + ), + ), + floatingActionButton: FloatingActionButton( + key: ArchSampleKeys.saveNewTodo, + tooltip: localizations.addTodo, + onPressed: () { + if (_formKey.currentState!.validate()) { + widget.onAdd( + Todo( + _titleEditingController.text, + note: _notesEditingController.text, + ), + ); + } + }, + child: const Icon(Icons.add), + ), + ); + } +} diff --git a/signals/lib/app.dart b/signals/lib/app.dart new file mode 100644 index 00000000..0a1da412 --- /dev/null +++ b/signals/lib/app.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:signals_sample/todo_list_controller.dart'; +import 'package:todos_app_core/todos_app_core.dart'; +import 'package:todos_repository_core/todos_repository_core.dart'; + +import 'add_todo_screen.dart'; +import 'home/home_screen.dart'; +import 'localization.dart'; +import 'todo.dart'; + +class SignalsApp extends StatelessWidget { + final TodosRepository repository; + + const SignalsApp({super.key, required this.repository}); + + @override + Widget build(BuildContext context) { + return Provider( + create: (_) => TodoListController(todosRepository: repository)..init(), + dispose: (_, controller) => controller.dispose(), + child: MaterialApp( + theme: ArchSampleTheme.theme, + localizationsDelegates: [ + ArchSampleLocalizationsDelegate(), + SignalsLocalizationsDelegate(), + ], + onGenerateTitle: (context) => SignalsLocalizations.of(context).appTitle, + routes: { + ArchSampleRoutes.home: (context) => HomeScreen(), + ArchSampleRoutes.addTodo: (context) => AddTodoScreen( + onAdd: (Todo todo) { + context.read().todos.add(todo); + + Navigator.pop(context); + }, + ), + }, + ), + ); + } +} diff --git a/signals/lib/details_screen.dart b/signals/lib/details_screen.dart new file mode 100644 index 00000000..432e59c4 --- /dev/null +++ b/signals/lib/details_screen.dart @@ -0,0 +1,92 @@ +import 'package:flutter/material.dart'; +import 'package:signals/signals_flutter.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +import 'edit_todo_screen.dart'; +import 'todo.dart'; + +class DetailsScreen extends StatelessWidget { + final Todo todo; + final void Function() onRemove; + + const DetailsScreen({required this.todo, required this.onRemove}) + : super(key: ArchSampleKeys.todoDetailsScreen); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(ArchSampleLocalizations.of(context).todoDetails), + actions: [ + IconButton( + key: ArchSampleKeys.deleteTodoButton, + tooltip: ArchSampleLocalizations.of(context).deleteTodo, + icon: const Icon(Icons.delete), + onPressed: onRemove, + ), + ], + ), + floatingActionButton: FloatingActionButton( + key: ArchSampleKeys.editTodoFab, + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => EditTodoScreen( + todo: todo, + onEdit: () => Navigator.pop(context), + ), + ), + ); + }, + child: const Icon(Icons.edit), + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: ListView( + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(right: 8.0), + child: Watch( + (_) => Checkbox( + key: ArchSampleKeys.detailsTodoItemCheckbox, + value: todo.complete.value, + onChanged: (done) => todo.complete.value = done ?? false, + ), + ), + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top: 8.0, bottom: 16.0), + child: Watch( + (context) => Text( + todo.task.value, + key: ArchSampleKeys.detailsTodoItemTask, + style: Theme.of(context).textTheme.headlineSmall, + ), + ), + ), + Watch( + (_) => Text( + todo.note.value, + key: ArchSampleKeys.detailsTodoItemNote, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + ], + ), + ), + ], + ), + ], + ), + ), + ); + } +} diff --git a/signals/lib/edit_todo_screen.dart b/signals/lib/edit_todo_screen.dart new file mode 100644 index 00000000..07750381 --- /dev/null +++ b/signals/lib/edit_todo_screen.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:signals_sample/todo.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +class EditTodoScreen extends StatefulWidget { + final void Function() onEdit; + final Todo todo; + + const EditTodoScreen({required this.todo, required this.onEdit}) + : super(key: ArchSampleKeys.editTodoScreen); + + @override + EditTodoScreenState createState() => EditTodoScreenState(); +} + +class EditTodoScreenState extends State { + final _formKey = GlobalKey(); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(ArchSampleLocalizations.of(context).editTodo)), + body: Form( + key: _formKey, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + TextFormField( + key: ArchSampleKeys.taskField, + initialValue: widget.todo.task.value, + style: Theme.of(context).textTheme.headlineSmall, + decoration: InputDecoration( + hintText: ArchSampleLocalizations.of(context).newTodoHint, + ), + validator: (val) { + return val == null || val.trim().isEmpty + ? ArchSampleLocalizations.of(context).emptyTodoError + : null; + }, + onSaved: (value) => widget.todo.task.value = value ?? '', + ), + TextFormField( + key: ArchSampleKeys.noteField, + initialValue: widget.todo.note.value, + decoration: InputDecoration( + hintText: ArchSampleLocalizations.of(context).notesHint, + ), + maxLines: 10, + onSaved: (value) => widget.todo.note.value = value ?? '', + ), + ], + ), + ), + ), + floatingActionButton: FloatingActionButton( + key: ArchSampleKeys.saveTodoFab, + tooltip: ArchSampleLocalizations.of(context).saveChanges, + onPressed: () { + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); + widget.onEdit(); + } + }, + child: const Icon(Icons.check), + ), + ); + } +} diff --git a/signals/lib/home/extra_actions_button.dart b/signals/lib/home/extra_actions_button.dart new file mode 100644 index 00000000..780c6775 --- /dev/null +++ b/signals/lib/home/extra_actions_button.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +import '../todo_list_controller.dart'; + +class ExtraActionsButton extends StatelessWidget { + const ExtraActionsButton({super.key}); + + @override + Widget build(BuildContext context) { + final controller = context.watch(); + + return PopupMenuButton( + key: ArchSampleKeys.extraActionsButton, + onSelected: (action) { + switch (action) { + case ExtraAction.toggleAllComplete: + controller.toggleAll(); + break; + case ExtraAction.clearCompleted: + controller.clearCompleted(); + break; + } + }, + itemBuilder: (BuildContext context) { + return >[ + PopupMenuItem( + key: ArchSampleKeys.toggleAll, + value: ExtraAction.toggleAllComplete, + child: Text( + controller.hasPendingTodos.value + ? ArchSampleLocalizations.of(context).markAllComplete + : ArchSampleLocalizations.of(context).markAllIncomplete, + ), + ), + PopupMenuItem( + key: ArchSampleKeys.clearCompleted, + value: ExtraAction.clearCompleted, + child: Text(ArchSampleLocalizations.of(context).clearCompleted), + ), + ]; + }, + ); + } +} + +enum ExtraAction { toggleAllComplete, clearCompleted } diff --git a/signals/lib/home/filter_button.dart b/signals/lib/home/filter_button.dart new file mode 100644 index 00000000..4ef52a97 --- /dev/null +++ b/signals/lib/home/filter_button.dart @@ -0,0 +1,77 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:signals/signals_flutter.dart'; +import 'package:signals_sample/todo_list_controller.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +class FilterButton extends StatelessWidget { + final bool isActive; + + const FilterButton({super.key, required this.isActive}); + + @override + Widget build(BuildContext context) { + final controller = context.watch(); + + return IgnorePointer( + ignoring: !isActive, + child: AnimatedOpacity( + opacity: isActive ? 1.0 : 0.0, + duration: const Duration(milliseconds: 150), + child: Watch((context) { + return PopupMenuButton( + key: ArchSampleKeys.filterButton, + tooltip: ArchSampleLocalizations.of(context).filterTodos, + initialValue: controller.filter.value, + onSelected: (filter) => controller.filter.value = filter, + itemBuilder: (BuildContext context) => _items(context, controller), + icon: const Icon(Icons.filter_list), + ); + }), + ), + ); + } + + List> _items( + BuildContext context, + TodoListController controller, + ) { + final activeStyle = Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); + final defaultStyle = Theme.of(context).textTheme.bodyMedium; + + return [ + PopupMenuItem( + key: ArchSampleKeys.allFilter, + value: VisibilityFilter.all, + child: Text( + ArchSampleLocalizations.of(context).showAll, + style: controller.filter.value == VisibilityFilter.all + ? activeStyle + : defaultStyle, + ), + ), + PopupMenuItem( + key: ArchSampleKeys.activeFilter, + value: VisibilityFilter.active, + child: Text( + ArchSampleLocalizations.of(context).showActive, + style: controller.filter.value == VisibilityFilter.active + ? activeStyle + : defaultStyle, + ), + ), + PopupMenuItem( + key: ArchSampleKeys.completedFilter, + value: VisibilityFilter.completed, + child: Text( + ArchSampleLocalizations.of(context).showCompleted, + style: controller.filter.value == VisibilityFilter.completed + ? activeStyle + : defaultStyle, + ), + ), + ]; + } +} diff --git a/signals/lib/home/home_screen.dart b/signals/lib/home/home_screen.dart new file mode 100644 index 00000000..448a29d7 --- /dev/null +++ b/signals/lib/home/home_screen.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart' hide Action; +import 'package:provider/provider.dart'; +import 'package:signals/signals_flutter.dart'; +import 'package:signals_sample/localization.dart'; +import 'package:signals_sample/todo_list_controller.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +import '../todo.dart'; +import 'extra_actions_button.dart'; +import 'filter_button.dart'; +import 'stats_view.dart'; +import 'todo_list_view.dart'; + +class HomeScreen extends StatefulWidget { + const HomeScreen({super.key}); + + @override + HomeScreenState createState() => HomeScreenState(); +} + +class HomeScreenState extends State { + // Because the state of the tabs is only a concern to the HomeScreen Widget, + // it is stored as local state rather than in the TodoListController. + final _tab = Signal(HomeScreenTab.todos); + + @override + Widget build(BuildContext context) { + final controller = context.watch(); + + return Scaffold( + appBar: AppBar( + title: Text(SignalsLocalizations.of(context).appTitle), + actions: [ + Watch( + (_) => FilterButton(isActive: _tab.value == HomeScreenTab.todos), + ), + const ExtraActionsButton(), + ], + ), + floatingActionButton: FloatingActionButton( + key: ArchSampleKeys.addTodoFab, + onPressed: () => Navigator.pushNamed(context, ArchSampleRoutes.addTodo), + tooltip: ArchSampleLocalizations.of(context).addTodo, + child: const Icon(Icons.add), + ), + body: FutureBuilder( + future: controller.initializingFuture, + builder: (context, snapshot) { + if (snapshot.connectionState != ConnectionState.done) { + return Center( + child: CircularProgressIndicator( + key: ArchSampleKeys.todosLoading, + ), + ); + } + + return Watch((context) { + switch (_tab.value) { + case HomeScreenTab.stats: + return const StatsView(); + case HomeScreenTab.todos: + return TodoListView( + onRemove: (context, todo) { + controller.todos.remove(todo); + _displayRemovalNotification(context, todo); + }, + ); + } + }); + }, + ), + bottomNavigationBar: Watch((context) { + return BottomNavigationBar( + key: ArchSampleKeys.tabs, + currentIndex: HomeScreenTab.values.indexOf(_tab.value), + onTap: (int index) { + _tab.value = HomeScreenTab.values[index]; + }, + items: [ + for (final tab in HomeScreenTab.values) + BottomNavigationBarItem( + icon: Icon(tab.icon, key: tab.key), + label: tab.title, + ), + ], + ); + }), + ); + } + + void _displayRemovalNotification(BuildContext context, Todo todo) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + key: ArchSampleKeys.snackbar, + duration: const Duration(seconds: 2), + content: Text( + ArchSampleLocalizations.of(context).todoDeleted(todo.task.value), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + action: SnackBarAction( + key: ArchSampleKeys.snackbarAction(todo.id.value), + label: ArchSampleLocalizations.of(context).undo, + onPressed: () => context.read().todos.add(todo), + ), + ), + ); + } +} + +enum HomeScreenTab { todos, stats } + +extension TabExtensions on HomeScreenTab { + IconData get icon { + return (this == HomeScreenTab.todos) ? Icons.list : Icons.show_chart; + } + + String get title { + return this == HomeScreenTab.todos ? 'Todos' : 'Stats'; + } + + Key get key { + return this == HomeScreenTab.stats + ? ArchSampleKeys.statsTab + : ArchSampleKeys.todoTab; + } +} diff --git a/signals/lib/home/stats_view.dart b/signals/lib/home/stats_view.dart new file mode 100644 index 00000000..f4c6cc9c --- /dev/null +++ b/signals/lib/home/stats_view.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:signals/signals_flutter.dart'; +import 'package:signals_sample/todo_list_controller.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +class StatsView extends StatelessWidget { + const StatsView({super.key}); + + @override + Widget build(BuildContext context) { + final controller = context.read(); + + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).completedTodos, + style: Theme.of(context).textTheme.titleLarge, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 24.0), + child: Watch( + (context) => Text( + '${controller.numCompleted}', + key: ArchSampleKeys.statsNumCompleted, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).activeTodos, + style: Theme.of(context).textTheme.titleLarge, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 24.0), + child: Watch( + (context) => Text( + '${controller.numPending}', + key: ArchSampleKeys.statsNumActive, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + ), + ], + ), + ); + } +} diff --git a/signals/lib/home/todo_list_view.dart b/signals/lib/home/todo_list_view.dart new file mode 100644 index 00000000..cb346cf0 --- /dev/null +++ b/signals/lib/home/todo_list_view.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:signals/signals_flutter.dart'; +import 'package:signals_sample/todo_list_controller.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +import '../details_screen.dart'; +import '../todo.dart'; + +class TodoListView extends StatelessWidget { + final void Function(BuildContext context, Todo todo) onRemove; + + const TodoListView({super.key, required this.onRemove}); + + @override + Widget build(BuildContext context) { + return Watch((context) { + final todos = context.read().visibleTodos; + + return ListView.builder( + key: ArchSampleKeys.todoList, + itemCount: todos.value.length, + itemBuilder: (context, index) { + final todo = todos.value[index]; + + return Dismissible( + key: ArchSampleKeys.todoItem(todo.id.value), + onDismissed: (_) => onRemove(context, todo), + child: ListTile( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (_) { + return DetailsScreen( + todo: todo, + onRemove: () { + Navigator.pop(context); + onRemove(context, todo); + }, + ); + }, + ), + ); + }, + leading: Watch( + (_) => Checkbox( + key: ArchSampleKeys.todoItemCheckbox(todo.id.value), + value: todo.complete.value, + onChanged: (done) => todo.complete.value = done ?? false, + ), + ), + title: Watch( + (context) => Text( + todo.task.value, + key: ArchSampleKeys.todoItemTask(todo.id.value), + style: Theme.of(context).textTheme.titleLarge, + ), + ), + subtitle: Watch( + (_) => Text( + todo.note.value, + key: ArchSampleKeys.todoItemNote(todo.id.value), + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + ), + ); + }, + ); + }); + } +} diff --git a/signals/lib/localization.dart b/signals/lib/localization.dart new file mode 100644 index 00000000..cb462cd1 --- /dev/null +++ b/signals/lib/localization.dart @@ -0,0 +1,28 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +class SignalsLocalizations { + static SignalsLocalizations of(BuildContext context) { + return Localizations.of( + context, + SignalsLocalizations, + )!; + } + + String get appTitle => 'Signals Example'; +} + +class SignalsLocalizationsDelegate + extends LocalizationsDelegate { + @override + Future load(Locale locale) => + Future(() => SignalsLocalizations()); + + @override + bool shouldReload(SignalsLocalizationsDelegate old) => false; + + @override + bool isSupported(Locale locale) => + locale.languageCode.toLowerCase().contains('en'); +} diff --git a/mobx/lib/main_web.dart b/signals/lib/main.dart similarity index 71% rename from mobx/lib/main_web.dart rename to signals/lib/main.dart index d9b4785a..b9df2867 100644 --- a/mobx/lib/main_web.dart +++ b/signals/lib/main.dart @@ -1,7 +1,5 @@ -import 'dart:html'; - import 'package:flutter/material.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; import 'app.dart'; @@ -10,11 +8,11 @@ Future main() async { WidgetsFlutterBinding.ensureInitialized(); runApp( - MobxApp( + SignalsApp( repository: LocalStorageRepository( localStorage: KeyValueStorage( 'mobx_todos', - WebKeyValueStore(window.localStorage), + await SharedPreferences.getInstance(), ), ), ), diff --git a/signals/lib/todo.dart b/signals/lib/todo.dart new file mode 100644 index 00000000..9a442f76 --- /dev/null +++ b/signals/lib/todo.dart @@ -0,0 +1,37 @@ +import 'package:signals/signals.dart'; +import 'package:todos_app_core/todos_app_core.dart'; + +class Todo { + final Signal complete; + final Signal id; + final Signal note; + final Signal task; + + Todo(String task, {bool complete = false, String note = '', String? id}) + : task = Signal(task), + complete = Signal(complete), + note = Signal(note), + id = Signal(id ?? Uuid().generateV4()); + + @override + int get hashCode => + complete.value.hashCode ^ + task.value.hashCode ^ + note.value.hashCode ^ + id.value.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is Todo && + runtimeType == other.runtimeType && + complete.value == other.complete.value && + task.value == other.task.value && + note.value == other.note.value && + id.value == other.id.value; + + @override + String toString() { + return 'Todo{complete: ${complete.value}, task: ${task.value}, note: ${note.value}, id: ${id.value}}'; + } +} diff --git a/signals/lib/todo_codec.dart b/signals/lib/todo_codec.dart new file mode 100644 index 00000000..2226e43b --- /dev/null +++ b/signals/lib/todo_codec.dart @@ -0,0 +1,46 @@ +import 'dart:convert'; + +import 'package:todos_repository_core/todos_repository_core.dart'; + +import 'todo.dart'; + +// Converts Todos to TodoEntities and vice-versa for interop with the +// TodoRepository (data layer). Implements the standard `Codec` interface from +// dart:convert. +class TodoCodec extends Codec { + const TodoCodec(); + + @override + Converter get decoder => const _TodoDecoder(); + + @override + Converter get encoder => const _TodoEncoder(); +} + +class _TodoEncoder extends Converter { + const _TodoEncoder(); + + @override + TodoEntity convert(Todo todo) { + return TodoEntity( + todo.task.value, + todo.id.value, + todo.note.value, + todo.complete.value, + ); + } +} + +class _TodoDecoder extends Converter { + const _TodoDecoder(); + + @override + Todo convert(TodoEntity entity) { + return Todo( + entity.task, + complete: entity.complete, + note: entity.note, + id: entity.id, + ); + } +} diff --git a/signals/lib/todo_list_controller.dart b/signals/lib/todo_list_controller.dart new file mode 100644 index 00000000..bd6dcc89 --- /dev/null +++ b/signals/lib/todo_list_controller.dart @@ -0,0 +1,90 @@ +import 'package:signals/signals.dart'; +import 'package:signals_sample/todo.dart'; +import 'package:signals_sample/todo_codec.dart'; +import 'package:todos_repository_core/todos_repository_core.dart'; + +enum VisibilityFilter { all, active, completed } + +class TodoListController { + TodoListController({ + required TodosRepository todosRepository, + VisibilityFilter? filter, + List? todos, + TodoCodec? codec, + }) : _todosRepository = todosRepository, + _todoCodec = codec ?? const TodoCodec(), + todos = ListSignal(todos ?? []), + filter = Signal(VisibilityFilter.all); + + final TodosRepository _todosRepository; + final TodoCodec _todoCodec; + final ListSignal todos; + final Signal filter; + + late final EffectCleanup _effectCleanup; + late final Future initializingFuture; + + ReadonlySignal> get pendingTodos => Computed( + () => todos.where((t) => !t.complete.value).toList(growable: false), + ); + + ReadonlySignal> get completedTodos => Computed( + () => todos.where((t) => t.complete.value).toList(growable: false), + ); + + ReadonlySignal get hasCompletedTodos => + Computed(() => completedTodos.value.isNotEmpty); + + ReadonlySignal get hasPendingTodos => + Computed(() => pendingTodos.value.isNotEmpty); + + ReadonlySignal get numPending => + Computed(() => pendingTodos.value.length); + + ReadonlySignal get numCompleted => + Computed(() => completedTodos.value.length); + + ReadonlySignal> get visibleTodos => Computed( + () => switch (filter.value) { + VisibilityFilter.active => pendingTodos.value, + VisibilityFilter.completed => completedTodos.value, + VisibilityFilter.all => todos, + }, + ); + + void toggleAll() { + final allComplete = todos.every((todo) => todo.complete.value); + + for (final todo in todos) { + todo.complete.value = !allComplete; + } + } + + void clearCompleted() => todos.removeWhere((todo) => todo.complete.value); + + Future _loadTodos() async { + final entities = await _todosRepository.loadTodos(); + + todos.addAll(entities.map(_todoCodec.decode).toList()); + } + + Future init() async { + initializingFuture = _loadTodos(); + + await initializingFuture; + + // Use `effect` from signals.dart to observe the list of todos and persist + // them to the repository whenever a change occurs. + // + // Save operations are debounced by a configurable delay to prevent writing + // to the repository more often than necessary. In production, save + // operations are debounced by 500ms. In tests, they are not debounced to + // speed up test execution. + _effectCleanup = effect(() async { + final toSave = todos.map(_todoCodec.encode).toList(growable: false); + await _todosRepository.saveTodos(toSave); + }); + } + + void dispose() => _effectCleanup(); +} diff --git a/signals/linux/.gitignore b/signals/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/signals/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/signals/linux/CMakeLists.txt b/signals/linux/CMakeLists.txt new file mode 100644 index 00000000..72eb75d3 --- /dev/null +++ b/signals/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "signals") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.signals") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/signals/linux/flutter/CMakeLists.txt b/signals/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/signals/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/signals/linux/flutter/generated_plugin_registrant.cc b/signals/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/signals/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/signals/linux/flutter/generated_plugin_registrant.h b/signals/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/signals/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/signals/linux/flutter/generated_plugins.cmake b/signals/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/signals/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/signals/linux/runner/CMakeLists.txt b/signals/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/signals/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/signals/linux/runner/main.cc b/signals/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/signals/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/signals/linux/runner/my_application.cc b/signals/linux/runner/my_application.cc new file mode 100644 index 00000000..e0d27118 --- /dev/null +++ b/signals/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "signals"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "signals"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/signals/linux/runner/my_application.h b/signals/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/signals/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/signals/macos/.gitignore b/signals/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/signals/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/signals/macos/Flutter/Flutter-Debug.xcconfig b/signals/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/signals/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/signals/macos/Flutter/Flutter-Release.xcconfig b/signals/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/signals/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/signals/macos/Flutter/GeneratedPluginRegistrant.swift b/signals/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/signals/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/signals/macos/Podfile b/signals/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/signals/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/signals/macos/Podfile.lock b/signals/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/signals/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/signals/macos/Runner.xcodeproj/project.pbxproj b/signals/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..907d0dac --- /dev/null +++ b/signals/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 982B8A7E954D910B004A3B20 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D403300652767C6F348D3F6F /* Pods_RunnerTests.framework */; }; + 9B2D99852FDC10663A575681 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C9905B424BEBA8AB3E520EE /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 05C133C0AAA638C05D0559D8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 0C9905B424BEBA8AB3E520EE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 298B9CF8FC1AAD04311FE3D5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* signals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = signals.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 411E88AEBDDCB14203FC4194 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 42D07F7147CD286608F02B14 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 84A07B383D385B323B51AD3C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 8F89FA02C28C693F702C059D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + D403300652767C6F348D3F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 982B8A7E954D910B004A3B20 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9B2D99852FDC10663A575681 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + DA0193FF90A817948528B26B /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* signals.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 0C9905B424BEBA8AB3E520EE /* Pods_Runner.framework */, + D403300652767C6F348D3F6F /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + DA0193FF90A817948528B26B /* Pods */ = { + isa = PBXGroup; + children = ( + 05C133C0AAA638C05D0559D8 /* Pods-Runner.debug.xcconfig */, + 42D07F7147CD286608F02B14 /* Pods-Runner.release.xcconfig */, + 84A07B383D385B323B51AD3C /* Pods-Runner.profile.xcconfig */, + 298B9CF8FC1AAD04311FE3D5 /* Pods-RunnerTests.debug.xcconfig */, + 411E88AEBDDCB14203FC4194 /* Pods-RunnerTests.release.xcconfig */, + 8F89FA02C28C693F702C059D /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 26D38BC6E24926A406D4B4CD /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 781A64B277AAD1987F13EDA6 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + EDF2C2431EA66F39C403FD7F /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* signals.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 26D38BC6E24926A406D4B4CD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 781A64B277AAD1987F13EDA6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + EDF2C2431EA66F39C403FD7F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 298B9CF8FC1AAD04311FE3D5 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 411E88AEBDDCB14203FC4194 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8F89FA02C28C693F702C059D /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/signals/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/signals/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/signals/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..8cfbbc36 --- /dev/null +++ b/signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/signals/macos/Runner.xcworkspace/contents.xcworkspacedata b/signals/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/signals/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/signals/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/signals/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/signals/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/signals/macos/Runner/AppDelegate.swift b/signals/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/signals/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/signals/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/signals/macos/Runner/Configs/AppInfo.xcconfig b/signals/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..13dc9923 --- /dev/null +++ b/signals/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = signals + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.signals + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/signals/macos/Runner/Configs/Debug.xcconfig b/signals/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/signals/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/signals/macos/Runner/Configs/Release.xcconfig b/signals/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/signals/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/signals/macos/Runner/Configs/Warnings.xcconfig b/signals/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/signals/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/signals/macos/Runner/DebugProfile.entitlements b/signals/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/signals/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/signals/macos/Runner/Info.plist b/signals/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/signals/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/signals/macos/Runner/MainFlutterWindow.swift b/signals/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/signals/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/signals/macos/Runner/Release.entitlements b/signals/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/signals/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/signals/macos/RunnerTests/RunnerTests.swift b/signals/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/signals/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/signals/pubspec.yaml b/signals/pubspec.yaml new file mode 100644 index 00000000..f7cc8585 --- /dev/null +++ b/signals/pubspec.yaml @@ -0,0 +1,95 @@ +name: signals_sample +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ^3.9.0 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + provider: + shared_preferences: + signals: + signals_flutter: + todos_repository_local_storage: + path: ../todos_repository_local_storage + todos_repository_core: + path: ../todos_repository_core + todos_app_core: + path: ../todos_app_core + +dev_dependencies: + flutter_lints: + flutter_test: + sdk: flutter + integration_test: + sdk: flutter + test: + mockito: + integration_tests: + path: ../integration_tests + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package diff --git a/signals/test/widget_test.dart b/signals/test/widget_test.dart new file mode 100644 index 00000000..b2d05be7 --- /dev/null +++ b/signals/test/widget_test.dart @@ -0,0 +1,34 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:signals/signals.dart'; + +void main() { + testWidgets('how do signals work?', (WidgetTester tester) async { + final ls = ListSignal([]); + final computed = Computed( + () => ls.where((item) => item.length < 2).toList(growable: false), + ); + final hasComputedItems = Computed(() => computed.value.isNotEmpty); + + effect(() { + print('List: ${ls.value}'); + }); + + effect(() { + print('Computed: ${computed}'); + }); + + effect(() { + print('hasComputedItems: $hasComputedItems'); + }); + + ls.add('H'); + ls.add('Hi'); + }); +} diff --git a/signals/test_driver/integration_test.dart b/signals/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/signals/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/signals/web/favicon.png b/signals/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/signals/web/icons/Icon-192.png b/signals/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/signals/web/icons/Icon-512.png b/signals/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/signals/web/icons/Icon-maskable-192.png b/signals/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/signals/web/icons/Icon-maskable-512.png b/signals/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/signals/web/index.html b/signals/web/index.html new file mode 100644 index 00000000..aebfb2db --- /dev/null +++ b/signals/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + signals + + + + + + diff --git a/signals/web/manifest.json b/signals/web/manifest.json new file mode 100644 index 00000000..82303ab1 --- /dev/null +++ b/signals/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "signals", + "short_name": "signals", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/signals/windows/.gitignore b/signals/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/signals/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/signals/windows/CMakeLists.txt b/signals/windows/CMakeLists.txt new file mode 100644 index 00000000..5a0a4967 --- /dev/null +++ b/signals/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(signals LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "signals") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/signals/windows/flutter/CMakeLists.txt b/signals/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/signals/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/signals/windows/flutter/generated_plugin_registrant.cc b/signals/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/signals/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/signals/windows/flutter/generated_plugin_registrant.h b/signals/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/signals/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/signals/windows/flutter/generated_plugins.cmake b/signals/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/signals/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/signals/windows/runner/CMakeLists.txt b/signals/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/signals/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/signals/windows/runner/Runner.rc b/signals/windows/runner/Runner.rc new file mode 100644 index 00000000..43c2c6f3 --- /dev/null +++ b/signals/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "signals" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "signals" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "signals.exe" "\0" + VALUE "ProductName", "signals" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/signals/windows/runner/flutter_window.cpp b/signals/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/signals/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/signals/windows/runner/flutter_window.h b/signals/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/signals/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/signals/windows/runner/main.cpp b/signals/windows/runner/main.cpp new file mode 100644 index 00000000..1c9e476d --- /dev/null +++ b/signals/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"signals", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/signals/windows/runner/resource.h b/signals/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/signals/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/signals/windows/runner/resources/app_icon.ico b/signals/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/signals/windows/runner/runner.exe.manifest b/signals/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/signals/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/signals/windows/runner/utils.cpp b/signals/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/signals/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/signals/windows/runner/utils.h b/signals/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/signals/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/signals/windows/runner/win32_window.cpp b/signals/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/signals/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/signals/windows/runner/win32_window.h b/signals/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/signals/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 51e866505edb70877ce93061727b90eb5132d989 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 13:12:04 +0100 Subject: [PATCH 45/89] Add a signals app tests --- signals/lib/app.dart | 2 +- signals/lib/home/extra_actions_button.dart | 2 +- signals/lib/home/stats_view.dart | 2 +- signals/lib/todo_list_controller.dart | 39 ++- signals/test/todo_list_controller_test.dart | 245 ++++++++++++++++++ .../test/todo_list_controller_test.mocks.dart | 51 ++++ signals/test/widget_test.dart | 34 --- 7 files changed, 317 insertions(+), 58 deletions(-) create mode 100644 signals/test/todo_list_controller_test.dart create mode 100644 signals/test/todo_list_controller_test.mocks.dart delete mode 100644 signals/test/widget_test.dart diff --git a/signals/lib/app.dart b/signals/lib/app.dart index 0a1da412..43b5b112 100644 --- a/signals/lib/app.dart +++ b/signals/lib/app.dart @@ -17,7 +17,7 @@ class SignalsApp extends StatelessWidget { @override Widget build(BuildContext context) { return Provider( - create: (_) => TodoListController(todosRepository: repository)..init(), + create: (_) => TodoListController(repository: repository)..init(), dispose: (_, controller) => controller.dispose(), child: MaterialApp( theme: ArchSampleTheme.theme, diff --git a/signals/lib/home/extra_actions_button.dart b/signals/lib/home/extra_actions_button.dart index 780c6775..c82d2bec 100644 --- a/signals/lib/home/extra_actions_button.dart +++ b/signals/lib/home/extra_actions_button.dart @@ -29,7 +29,7 @@ class ExtraActionsButton extends StatelessWidget { key: ArchSampleKeys.toggleAll, value: ExtraAction.toggleAllComplete, child: Text( - controller.hasPendingTodos.value + controller.hasActiveTodos.value ? ArchSampleLocalizations.of(context).markAllComplete : ArchSampleLocalizations.of(context).markAllIncomplete, ), diff --git a/signals/lib/home/stats_view.dart b/signals/lib/home/stats_view.dart index f4c6cc9c..0298c0dd 100644 --- a/signals/lib/home/stats_view.dart +++ b/signals/lib/home/stats_view.dart @@ -43,7 +43,7 @@ class StatsView extends StatelessWidget { padding: const EdgeInsets.only(bottom: 24.0), child: Watch( (context) => Text( - '${controller.numPending}', + '${controller.numActive}', key: ArchSampleKeys.statsNumActive, style: Theme.of(context).textTheme.titleMedium, ), diff --git a/signals/lib/todo_list_controller.dart b/signals/lib/todo_list_controller.dart index bd6dcc89..7c1f2ead 100644 --- a/signals/lib/todo_list_controller.dart +++ b/signals/lib/todo_list_controller.dart @@ -7,24 +7,23 @@ enum VisibilityFilter { all, active, completed } class TodoListController { TodoListController({ - required TodosRepository todosRepository, + required TodosRepository repository, VisibilityFilter? filter, - List? todos, TodoCodec? codec, - }) : _todosRepository = todosRepository, + }) : _todosRepository = repository, _todoCodec = codec ?? const TodoCodec(), - todos = ListSignal(todos ?? []), - filter = Signal(VisibilityFilter.all); + todos = ListSignal([]), + filter = Signal(filter ?? VisibilityFilter.all); final TodosRepository _todosRepository; final TodoCodec _todoCodec; final ListSignal todos; final Signal filter; - late final EffectCleanup _effectCleanup; + late final EffectCleanup _persistenceEffectCleanup; late final Future initializingFuture; - ReadonlySignal> get pendingTodos => Computed( + ReadonlySignal> get activeTodos => Computed( () => todos.where((t) => !t.complete.value).toList(growable: false), ); @@ -32,21 +31,17 @@ class TodoListController { () => todos.where((t) => t.complete.value).toList(growable: false), ); - ReadonlySignal get hasCompletedTodos => - Computed(() => completedTodos.value.isNotEmpty); + ReadonlySignal get hasActiveTodos => + Computed(() => activeTodos.value.isNotEmpty); - ReadonlySignal get hasPendingTodos => - Computed(() => pendingTodos.value.isNotEmpty); - - ReadonlySignal get numPending => - Computed(() => pendingTodos.value.length); + ReadonlySignal get numActive => Computed(() => activeTodos.value.length); ReadonlySignal get numCompleted => Computed(() => completedTodos.value.length); ReadonlySignal> get visibleTodos => Computed( () => switch (filter.value) { - VisibilityFilter.active => pendingTodos.value, + VisibilityFilter.active => activeTodos.value, VisibilityFilter.completed => completedTodos.value, VisibilityFilter.all => todos, }, @@ -55,9 +50,11 @@ class TodoListController { void toggleAll() { final allComplete = todos.every((todo) => todo.complete.value); - for (final todo in todos) { - todo.complete.value = !allComplete; - } + batch(() { + for (final todo in todos) { + todo.complete.value = !allComplete; + } + }); } void clearCompleted() => todos.removeWhere((todo) => todo.complete.value); @@ -80,11 +77,11 @@ class TodoListController { // to the repository more often than necessary. In production, save // operations are debounced by 500ms. In tests, they are not debounced to // speed up test execution. - _effectCleanup = effect(() async { - final toSave = todos.map(_todoCodec.encode).toList(growable: false); + _persistenceEffectCleanup = effect(() async { + final toSave = todos.value.map(_todoCodec.encode).toList(growable: false); await _todosRepository.saveTodos(toSave); }); } - void dispose() => _effectCleanup(); + void dispose() => _persistenceEffectCleanup(); } diff --git a/signals/test/todo_list_controller_test.dart b/signals/test/todo_list_controller_test.dart new file mode 100644 index 00000000..9a88cebd --- /dev/null +++ b/signals/test/todo_list_controller_test.dart @@ -0,0 +1,245 @@ +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:signals_sample/todo.dart'; +import 'package:signals_sample/todo_list_controller.dart'; +import 'package:test/test.dart'; +import 'package:todos_repository_core/todos_repository_core.dart'; + +import 'todo_list_controller_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec()]) +void main() { + group('$TodoListController', () { + test('should compute the number of completed todos', () async { + final repository = MockTodosRepository(); + final controller = TodoListController(repository: repository); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + await controller.init(); + + expect(controller.numCompleted.value, 1); + }); + + test('should calculate the number of active todos', () async { + final repository = MockTodosRepository(); + final controller = TodoListController(repository: repository); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + await controller.init(); + + expect(controller.hasActiveTodos.value, isTrue); + expect(controller.numActive.value, 2); + }); + + test('should return all todos if the VisibilityFilter is all', () async { + final repository = MockTodosRepository(); + final controller = TodoListController( + filter: VisibilityFilter.all, + repository: repository, + ); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + + await controller.init(); + + expect(controller.visibleTodos.value, [ + Todo('a', id: '1'), + Todo('b', id: '2'), + Todo('c', id: '3', complete: true), + ]); + }); + + test( + 'should return active todos if the VisibilityFilter is active', + () async { + final repository = MockTodosRepository(); + final controller = TodoListController( + filter: VisibilityFilter.active, + repository: repository, + ); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + await controller.init(); + + expect(controller.visibleTodos.value, [ + Todo('a', id: '1'), + Todo('b', id: '2'), + ]); + }, + ); + + test( + 'should return completed todos if the VisibilityFilter is completed', + () async { + final repository = MockTodosRepository(); + final controller = TodoListController( + filter: VisibilityFilter.completed, + repository: repository, + ); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + await controller.init(); + + expect(controller.visibleTodos.value, [ + Todo('c', id: '3', complete: true), + ]); + }, + ); + + test('should clear the completed todos', () async { + final repository = MockTodosRepository(); + final controller = TodoListController(repository: repository); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + + await controller.init(); + controller.clearCompleted(); + + expect(controller.todos.value, [Todo('a', id: '1'), Todo('b', id: '2')]); + verify( + repository.saveTodos([ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + ]), + ); + }); + + test('toggle all as complete or incomplete', () async { + final repository = MockTodosRepository(); + final controller = TodoListController(repository: repository); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + + await controller.init(); + + // Toggle all complete + controller.toggleAll(); + expect(controller.todos.every((t) => t.complete.value), isTrue); + verify( + repository.saveTodos([ + TodoEntity('a', '1', '', true), + TodoEntity('b', '2', '', true), + TodoEntity('c', '3', '', true), + ]), + ); + + // Toggle all incomplete + controller.toggleAll(); + expect(controller.todos.every((t) => !t.complete.value), isTrue); + verify( + repository.saveTodos([ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', false), + ]), + ); + }); + + test('should add a todo', () async { + final repository = MockTodosRepository(); + final controller = TodoListController(repository: repository); + + when( + repository.loadTodos(), + ).thenAnswer((_) async => [TodoEntity('a', '1', '', false)]); + + await controller.init(); + controller.todos.add(Todo('b', id: '2')); + + expect(controller.todos, [Todo('a', id: '1'), Todo('b', id: '2')]); + verify( + repository.saveTodos([ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + ]), + ); + }); + + test('should remove a todo', () async { + final repository = MockTodosRepository(); + final controller = TodoListController(repository: repository); + + when( + repository.loadTodos(), + ).thenAnswer((_) async => [TodoEntity('a', '1', '', false)]); + + await controller.init(); + + controller.todos.remove(Todo('a', id: '1')); + + expect(controller.todos.value, []); + verify(repository.saveTodos([])); + }); + + test('should update a todo', () async { + final repository = MockTodosRepository(); + final controller = TodoListController(repository: repository); + + when(repository.loadTodos()).thenAnswer( + (_) async => [ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', false), + TodoEntity('c', '3', '', true), + ], + ); + await controller.init(); + + controller.todos[1].complete.value = true; + + expect(controller.todos.value, [ + Todo('a', id: '1'), + Todo('b', id: '2', complete: true), + Todo('c', id: '3', complete: true), + ]); + verify( + repository.saveTodos([ + TodoEntity('a', '1', '', false), + TodoEntity('b', '2', '', true), + TodoEntity('c', '3', '', true), + ]), + ); + }); + }); +} diff --git a/signals/test/todo_list_controller_test.mocks.dart b/signals/test/todo_list_controller_test.mocks.dart new file mode 100644 index 00000000..7b5b3b17 --- /dev/null +++ b/signals/test/todo_list_controller_test.mocks.dart @@ -0,0 +1,51 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in signals_sample/test/todo_list_controller_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; +import 'package:todos_repository_core/src/todos_repository.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosRepository extends _i1.Mock implements _i2.TodosRepository { + @override + _i3.Future> loadTodos() => + (super.noSuchMethod( + Invocation.method(#loadTodos, []), + returnValue: _i3.Future>.value( + <_i4.TodoEntity>[], + ), + returnValueForMissingStub: _i3.Future>.value( + <_i4.TodoEntity>[], + ), + ) + as _i3.Future>); + + @override + _i3.Future saveTodos(List<_i4.TodoEntity>? todos) => + (super.noSuchMethod( + Invocation.method(#saveTodos, [todos]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} diff --git a/signals/test/widget_test.dart b/signals/test/widget_test.dart deleted file mode 100644 index b2d05be7..00000000 --- a/signals/test/widget_test.dart +++ /dev/null @@ -1,34 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter_test/flutter_test.dart'; -import 'package:signals/signals.dart'; - -void main() { - testWidgets('how do signals work?', (WidgetTester tester) async { - final ls = ListSignal([]); - final computed = Computed( - () => ls.where((item) => item.length < 2).toList(growable: false), - ); - final hasComputedItems = Computed(() => computed.value.isNotEmpty); - - effect(() { - print('List: ${ls.value}'); - }); - - effect(() { - print('Computed: ${computed}'); - }); - - effect(() { - print('hasComputedItems: $hasComputedItems'); - }); - - ls.add('H'); - ls.add('Hi'); - }); -} From 24f4e81ec6d5245e9bf2fd44111c58c2e6a55d9e Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 13:37:35 +0100 Subject: [PATCH 46/89] update flutter versions --- .fvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.fvmrc b/.fvmrc index 0251c4a7..2bb4682a 100644 --- a/.fvmrc +++ b/.fvmrc @@ -1,3 +1,3 @@ { - "flutter": "3.32.5" + "flutter": "3.35.2" } \ No newline at end of file From 888579391773f6ba0396d65bff7b0e65f7c798aa Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 13:40:47 +0100 Subject: [PATCH 47/89] Update line counter with signals --- line_count.md | 14 +++++++------- scripts/line_counter.sh | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/line_count.md b/line_count.md index b9d31d6c..d1de6744 100644 --- a/line_count.md +++ b/line_count.md @@ -16,17 +16,17 @@ samples to make them smaller, unless doing so improves the application overall. | *Sample* | *LOC (no comments)* | |--------|-------------------| | scoped_model | 767 | -| mobx | 812 | -| inherited_widget | 817 | -| change_notifier_provider | 826 | -| vanilla | 834 | -| frideos_library | 850 | +| signals | 782 | +| mobx | 799 | +| inherited_widget | 815 | +| change_notifier_provider | 832 | +| vanilla | 835 | | simple blocs | 1043 | | bloc | 1124 | -| bloc library | 1208 | | mvi | 1209 | +| bloc library | 1210 | | built_redux | 1212 | | redux | 1354 | | firestore_redux | 1395 | -Note: This file was generated on Sun Jul 6 16:04:54 UTC 2025 using `scripts/line_counter.sh`. +Note: This file was generated on Wed Sep 3 12:40:20 UTC 2025 using `scripts/line_counter.sh`. diff --git a/scripts/line_counter.sh b/scripts/line_counter.sh index 72cb393f..a6013663 100755 --- a/scripts/line_counter.sh +++ b/scripts/line_counter.sh @@ -43,10 +43,10 @@ samples=( "bloc library:bloc_library" "built_redux:built_redux" "firestore_redux:firestore_redux" - "frideos_library:frideos_library" "inherited_widget:inherited_widget" "mobx:mobx" "mvi:mvi_flutter mvi_base" + "signals:signals" "redux:redux" "scoped_model:scoped_model" "simple blocs:simple_bloc_flutter simple_blocs" From 73e7848b0d3b141bba02d655630c8cdd9e627dd5 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 14:19:19 +0100 Subject: [PATCH 48/89] Mobx sample small style fix --- mobx/lib/add_todo_screen.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mobx/lib/add_todo_screen.dart b/mobx/lib/add_todo_screen.dart index 7c6f460f..ffda58ab 100644 --- a/mobx/lib/add_todo_screen.dart +++ b/mobx/lib/add_todo_screen.dart @@ -5,8 +5,10 @@ import 'package:todos_app_core/todos_app_core.dart'; class AddTodoScreen extends StatefulWidget { final void Function(Todo) onAdd; - const AddTodoScreen({required this.onAdd}) - : super(key: ArchSampleKeys.addTodoScreen); + const AddTodoScreen({ + super.key = ArchSampleKeys.addTodoScreen, + required this.onAdd, + }); @override AddTodoScreenState createState() => AddTodoScreenState(); From e80955eda4314ba98cd849805670c215074300b2 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 14:39:42 +0100 Subject: [PATCH 49/89] Add flutter upgrade script --- scripts/update_flutter.sh | 56 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 scripts/update_flutter.sh diff --git a/scripts/update_flutter.sh b/scripts/update_flutter.sh new file mode 100755 index 00000000..c128486c --- /dev/null +++ b/scripts/update_flutter.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# This script loops through subdirectories to find Flutter projects, +# cleans them by removing platform-specific folders, +# recreates the Flutter project files, and then removes an unnecessary test file. + +# Find all directories one level deep from the current location. +for dir in */; do + # Ensure we are only processing actual directories. + if [ -d "$dir" ]; then + echo "🔎 Processing directory: $dir" + + pubspec_file="${dir}pubspec.yaml" + + # 1. Check if pubspec.yaml exists and contains a 'flutter:' dependency. + if [ -f "$pubspec_file" ] && grep -q "flutter:" "$pubspec_file"; then + echo " ✅ Found pubspec.yaml with a Flutter dependency." + + # 2. Check if it's a valid project by looking for platform folders. + if [ -d "${dir}ios" ] || [ -d "${dir}android" ] || [ -d "${dir}web" ] || \ + [ -d "${dir}macos" ] || [ -d "${dir}windows" ] || [ -d "${dir}linux" ]; then + + echo " ✅ Found platform folders. Proceeding with cleanup..." + + # Using a subshell to change directory, so we don't have to 'cd ..' + ( + cd "$dir" || exit + + # 3. Remove the old platform folders. + echo " Removing platform folders: ios, android, web, macos, windows, linux" + rm -rf ios android web macos windows linux + + # 4. Recreate the Flutter project in the current directory. + echo " 🚀 Running 'fvm flutter create .'" + fvm flutter create . + + # 5. Remove the default widget test file. + widget_test_file="test/widget_test.dart" + if [ -f "$widget_test_file" ]; then + echo " 🗑️ Removing generated file: $widget_test_file" + rm "$widget_test_file" + fi + + echo " ✨ Successfully processed project in $dir" + ) + else + echo " ⏭️ Skipping: No platform folders found." + fi + else + echo " ⏭️ Skipping: Not a Flutter project." + fi + echo "--------------------------------------------------" + fi +done + +echo "All directories have been processed." From 460119260fc826dd1f3e7f358ea81118ef695ba0 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 14:49:29 +0100 Subject: [PATCH 50/89] Upgrade signals app flutter version --- scripts/update_flutter.sh | 50 +++++-- signals/.metadata | 30 ++-- signals/android/app/build.gradle.kts | 4 +- .../android/app/src/main/AndroidManifest.xml | 2 +- .../MainActivity.kt | 2 +- signals/ios/Runner.xcodeproj/project.pbxproj | 12 +- signals/ios/Runner/Info.plist | 4 +- signals/linux/CMakeLists.txt | 4 +- signals/linux/runner/my_application.cc | 4 +- .../macos/Runner.xcodeproj/project.pbxproj | 132 +++++++++--------- .../xcshareddata/xcschemes/Runner.xcscheme | 8 +- signals/macos/Runner/Configs/AppInfo.xcconfig | 4 +- signals/web/index.html | 4 +- signals/web/manifest.json | 4 +- signals/windows/CMakeLists.txt | 4 +- signals/windows/runner/Runner.rc | 8 +- signals/windows/runner/main.cpp | 2 +- 17 files changed, 154 insertions(+), 124 deletions(-) rename signals/android/app/src/main/kotlin/com/example/{signals => signals_sample}/MainActivity.kt (72%) diff --git a/scripts/update_flutter.sh b/scripts/update_flutter.sh index c128486c..2da43113 100755 --- a/scripts/update_flutter.sh +++ b/scripts/update_flutter.sh @@ -3,9 +3,31 @@ # This script loops through subdirectories to find Flutter projects, # cleans them by removing platform-specific folders, # recreates the Flutter project files, and then removes an unnecessary test file. +# +# Usage: +# ./scripts/update_flutter.sh # Process all Flutter projects +# ./scripts/update_flutter.sh signals # Process only the 'signals' directory -# Find all directories one level deep from the current location. -for dir in */; do +# Check if a specific directory was provided as an argument +if [ $# -eq 1 ]; then + # Process only the specified directory + target_dir="$1" + if [ ! -d "$target_dir" ]; then + echo "❌ Error: Directory '$target_dir' does not exist." + exit 1 + fi + # Add trailing slash if not present + if [[ ! "$target_dir" == */ ]]; then + target_dir="${target_dir}/" + fi + directories=("$target_dir") +else + # Find all directories one level deep from the current location + directories=(*/) +fi + +# Process the directories +for dir in "${directories[@]}"; do # Ensure we are only processing actual directories. if [ -d "$dir" ]; then echo "🔎 Processing directory: $dir" @@ -14,40 +36,48 @@ for dir in */; do # 1. Check if pubspec.yaml exists and contains a 'flutter:' dependency. if [ -f "$pubspec_file" ] && grep -q "flutter:" "$pubspec_file"; then - echo " ✅ Found pubspec.yaml with a Flutter dependency." + echo "✅ Found pubspec.yaml with a Flutter dependency." # 2. Check if it's a valid project by looking for platform folders. if [ -d "${dir}ios" ] || [ -d "${dir}android" ] || [ -d "${dir}web" ] || \ [ -d "${dir}macos" ] || [ -d "${dir}windows" ] || [ -d "${dir}linux" ]; then - echo " ✅ Found platform folders. Proceeding with cleanup..." + echo "✅ Found platform folders. Proceeding with cleanup..." # Using a subshell to change directory, so we don't have to 'cd ..' ( cd "$dir" || exit # 3. Remove the old platform folders. - echo " Removing platform folders: ios, android, web, macos, windows, linux" + echo "Removing platform folders: ios, android, web, macos, windows, linux" rm -rf ios android web macos windows linux # 4. Recreate the Flutter project in the current directory. - echo " 🚀 Running 'fvm flutter create .'" + echo "🚀 Running 'fvm flutter create .'" fvm flutter create . # 5. Remove the default widget test file. widget_test_file="test/widget_test.dart" if [ -f "$widget_test_file" ]; then - echo " 🗑️ Removing generated file: $widget_test_file" + echo "🗑️ Removing generated file: $widget_test_file" rm "$widget_test_file" fi - echo " ✨ Successfully processed project in $dir" + # Clean the project + echo "🧹 Cleaning the project" + fvm flutter clean + + # Install dependencies + echo "🔎 Installing dependencies" + fvm flutter pub get + + echo "✨ Successfully processed project in $dir" ) else - echo " ⏭️ Skipping: No platform folders found." + echo "⏭️ Skipping: No platform folders found." fi else - echo " ⏭️ Skipping: Not a Flutter project." + echo "⏭️ Skipping: Not a Flutter project." fi echo "--------------------------------------------------" fi diff --git a/signals/.metadata b/signals/.metadata index c85d80ab..05a8ab44 100644 --- a/signals/.metadata +++ b/signals/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "20f82749394e68bcfbbeee96bad384abaae09c13" + revision: "05db9689081f091050f01aed79f04dce0c750154" channel: "stable" project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 - base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: android - create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 - base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: ios - create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 - base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: linux - create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 - base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: macos - create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 - base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: web - create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 - base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: windows - create_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 - base_revision: 20f82749394e68bcfbbeee96bad384abaae09c13 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 # User provided section diff --git a/signals/android/app/build.gradle.kts b/signals/android/app/build.gradle.kts index 72763df5..2e71d7c1 100644 --- a/signals/android/app/build.gradle.kts +++ b/signals/android/app/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } android { - namespace = "com.example.signals" + namespace = "com.example.signals_sample" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion @@ -21,7 +21,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.signals" + applicationId = "com.example.signals_sample" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. minSdk = flutter.minSdkVersion diff --git a/signals/android/app/src/main/AndroidManifest.xml b/signals/android/app/src/main/AndroidManifest.xml index 5d8d56e2..044a7e26 100644 --- a/signals/android/app/src/main/AndroidManifest.xml +++ b/signals/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Signals + Signals Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -13,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - signals + signals_sample CFBundlePackageType APPL CFBundleShortVersionString diff --git a/signals/linux/CMakeLists.txt b/signals/linux/CMakeLists.txt index 72eb75d3..2ba803bf 100644 --- a/signals/linux/CMakeLists.txt +++ b/signals/linux/CMakeLists.txt @@ -4,10 +4,10 @@ project(runner LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "signals") +set(BINARY_NAME "signals_sample") # The unique GTK application identifier for this application. See: # https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "com.example.signals") +set(APPLICATION_ID "com.example.signals_sample") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/signals/linux/runner/my_application.cc b/signals/linux/runner/my_application.cc index e0d27118..aa2c8eca 100644 --- a/signals/linux/runner/my_application.cc +++ b/signals/linux/runner/my_application.cc @@ -46,11 +46,11 @@ static void my_application_activate(GApplication* application) { if (use_header_bar) { GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "signals"); + gtk_header_bar_set_title(header_bar, "signals_sample"); gtk_header_bar_set_show_close_button(header_bar, TRUE); gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); } else { - gtk_window_set_title(window, "signals"); + gtk_window_set_title(window, "signals_sample"); } gtk_window_set_default_size(window, 1280, 720); diff --git a/signals/macos/Runner.xcodeproj/project.pbxproj b/signals/macos/Runner.xcodeproj/project.pbxproj index 907d0dac..98a46c0c 100644 --- a/signals/macos/Runner.xcodeproj/project.pbxproj +++ b/signals/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,8 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 982B8A7E954D910B004A3B20 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D403300652767C6F348D3F6F /* Pods_RunnerTests.framework */; }; - 9B2D99852FDC10663A575681 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C9905B424BEBA8AB3E520EE /* Pods_Runner.framework */; }; + 85BC6F05405E947FDEE22EBC /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9AF64CD5AC1BCF18FC6C138 /* Pods_RunnerTests.framework */; }; + B4BB21DE84F0C1954B31B7E8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50733925DFBA2A1C3DDD3CFC /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,14 +62,14 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 05C133C0AAA638C05D0559D8 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 0C9905B424BEBA8AB3E520EE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 298B9CF8FC1AAD04311FE3D5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 0A10B43194ABA80F4290BC74 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 2C55AE5A292B7887B20D3BC2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 31D1A2AABF7A2EC6656A23E3 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* signals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = signals.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* signals_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = signals_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -81,13 +81,13 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 411E88AEBDDCB14203FC4194 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 42D07F7147CD286608F02B14 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 50733925DFBA2A1C3DDD3CFC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5CBC020B4C25B30A9E502772 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 84A07B383D385B323B51AD3C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 8F89FA02C28C693F702C059D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D403300652767C6F348D3F6F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B64C17EABD281F8213FBA7CA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F18A13CD91DADE6FBD7EDBA4 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + F9AF64CD5AC1BCF18FC6C138 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 982B8A7E954D910B004A3B20 /* Pods_RunnerTests.framework in Frameworks */, + 85BC6F05405E947FDEE22EBC /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9B2D99852FDC10663A575681 /* Pods_Runner.framework in Frameworks */, + B4BB21DE84F0C1954B31B7E8 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,14 +137,14 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - DA0193FF90A817948528B26B /* Pods */, + 4795F38FDA247A6E7167F1F8 /* Pods */, ); sourceTree = ""; }; 33CC10EE2044A3C60003C045 /* Products */ = { isa = PBXGroup; children = ( - 33CC10ED2044A3C60003C045 /* signals.app */, + 33CC10ED2044A3C60003C045 /* signals_sample.app */, 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + 4795F38FDA247A6E7167F1F8 /* Pods */ = { isa = PBXGroup; children = ( - 0C9905B424BEBA8AB3E520EE /* Pods_Runner.framework */, - D403300652767C6F348D3F6F /* Pods_RunnerTests.framework */, + 2C55AE5A292B7887B20D3BC2 /* Pods-Runner.debug.xcconfig */, + 5CBC020B4C25B30A9E502772 /* Pods-Runner.release.xcconfig */, + 31D1A2AABF7A2EC6656A23E3 /* Pods-Runner.profile.xcconfig */, + F18A13CD91DADE6FBD7EDBA4 /* Pods-RunnerTests.debug.xcconfig */, + B64C17EABD281F8213FBA7CA /* Pods-RunnerTests.release.xcconfig */, + 0A10B43194ABA80F4290BC74 /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - DA0193FF90A817948528B26B /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 05C133C0AAA638C05D0559D8 /* Pods-Runner.debug.xcconfig */, - 42D07F7147CD286608F02B14 /* Pods-Runner.release.xcconfig */, - 84A07B383D385B323B51AD3C /* Pods-Runner.profile.xcconfig */, - 298B9CF8FC1AAD04311FE3D5 /* Pods-RunnerTests.debug.xcconfig */, - 411E88AEBDDCB14203FC4194 /* Pods-RunnerTests.release.xcconfig */, - 8F89FA02C28C693F702C059D /* Pods-RunnerTests.profile.xcconfig */, + 50733925DFBA2A1C3DDD3CFC /* Pods_Runner.framework */, + F9AF64CD5AC1BCF18FC6C138 /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 26D38BC6E24926A406D4B4CD /* [CP] Check Pods Manifest.lock */, + E6B31848EDF0E59989349B4C /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 781A64B277AAD1987F13EDA6 /* [CP] Check Pods Manifest.lock */, + E26D25A60EF518BF1CF419B4 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EDF2C2431EA66F39C403FD7F /* [CP] Embed Pods Frameworks */, + 69F5CF9B6165BF2E4A6FA2D6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -249,7 +249,7 @@ ); name = Runner; productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* signals.app */; + productReference = 33CC10ED2044A3C60003C045 /* signals_sample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -323,67 +323,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 26D38BC6E24926A406D4B4CD /* [CP] Check Pods Manifest.lock */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 69F5CF9B6165BF2E4A6FA2D6 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 781A64B277AAD1987F13EDA6 /* [CP] Check Pods Manifest.lock */ = { + E26D25A60EF518BF1CF419B4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -405,21 +400,26 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EDF2C2431EA66F39C403FD7F /* [CP] Embed Pods Frameworks */ = { + E6B31848EDF0E59989349B4C /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -473,46 +473,46 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 298B9CF8FC1AAD04311FE3D5 /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = F18A13CD91DADE6FBD7EDBA4 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signalsSample.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals_sample"; }; name = Debug; }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 411E88AEBDDCB14203FC4194 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = B64C17EABD281F8213FBA7CA /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signalsSample.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals_sample"; }; name = Release; }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F89FA02C28C693F702C059D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 0A10B43194ABA80F4290BC74 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.example.signals.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.example.signalsSample.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/signals_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/signals_sample"; }; name = Profile; }; diff --git a/signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 8cfbbc36..68b72b97 100644 --- a/signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/signals/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -15,7 +15,7 @@ @@ -31,7 +31,7 @@ @@ -66,7 +66,7 @@ @@ -83,7 +83,7 @@ diff --git a/signals/macos/Runner/Configs/AppInfo.xcconfig b/signals/macos/Runner/Configs/AppInfo.xcconfig index 13dc9923..b0252eee 100644 --- a/signals/macos/Runner/Configs/AppInfo.xcconfig +++ b/signals/macos/Runner/Configs/AppInfo.xcconfig @@ -5,10 +5,10 @@ // 'flutter create' template. // The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = signals +PRODUCT_NAME = signals_sample // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.example.signals +PRODUCT_BUNDLE_IDENTIFIER = com.example.signalsSample // The copyright displayed in application information PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/signals/web/index.html b/signals/web/index.html index aebfb2db..33e7a91d 100644 --- a/signals/web/index.html +++ b/signals/web/index.html @@ -23,13 +23,13 @@ - + - signals + signals_sample diff --git a/signals/web/manifest.json b/signals/web/manifest.json index 82303ab1..f0df473e 100644 --- a/signals/web/manifest.json +++ b/signals/web/manifest.json @@ -1,6 +1,6 @@ { - "name": "signals", - "short_name": "signals", + "name": "signals_sample", + "short_name": "signals_sample", "start_url": ".", "display": "standalone", "background_color": "#0175C2", diff --git a/signals/windows/CMakeLists.txt b/signals/windows/CMakeLists.txt index 5a0a4967..ea80d449 100644 --- a/signals/windows/CMakeLists.txt +++ b/signals/windows/CMakeLists.txt @@ -1,10 +1,10 @@ # Project-level configuration. cmake_minimum_required(VERSION 3.14) -project(signals LANGUAGES CXX) +project(signals_sample LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "signals") +set(BINARY_NAME "signals_sample") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/signals/windows/runner/Runner.rc b/signals/windows/runner/Runner.rc index 43c2c6f3..8bcf8bb2 100644 --- a/signals/windows/runner/Runner.rc +++ b/signals/windows/runner/Runner.rc @@ -90,12 +90,12 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "com.example" "\0" - VALUE "FileDescription", "signals" "\0" + VALUE "FileDescription", "signals_sample" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "signals" "\0" + VALUE "InternalName", "signals_sample" "\0" VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" - VALUE "OriginalFilename", "signals.exe" "\0" - VALUE "ProductName", "signals" "\0" + VALUE "OriginalFilename", "signals_sample.exe" "\0" + VALUE "ProductName", "signals_sample" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" END END diff --git a/signals/windows/runner/main.cpp b/signals/windows/runner/main.cpp index 1c9e476d..d6bb6e4e 100644 --- a/signals/windows/runner/main.cpp +++ b/signals/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.Create(L"signals", origin, size)) { + if (!window.Create(L"signals_sample", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); From 09634d488d75f15d9ea17c3e147374e665ef1f65 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 15:51:32 +0100 Subject: [PATCH 51/89] Updated Change Notifier Provider Sample --- change_notifier_provider/.metadata | 39 +- .../analysis_options.yaml | 34 + change_notifier_provider/android/.gitignore | 7 + .../android/app/build.gradle | 67 -- .../android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 33 +- .../change_notifier_provider/MainActivity.kt | 12 - .../MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- change_notifier_provider/android/build.gradle | 31 - .../android/build.gradle.kts | 24 + .../android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../android/settings.gradle | 15 - .../android/settings.gradle.kts | 26 + .../integration_test/app_test.dart | 19 + change_notifier_provider/ios/.gitignore | 2 + .../ios/Flutter/AppFrameworkInfo.plist | 4 +- .../ios/Flutter/Debug.xcconfig | 2 +- .../ios/Flutter/Release.xcconfig | 2 +- change_notifier_provider/ios/Podfile | 83 +- .../ios/Runner.xcodeproj/project.pbxproj | 213 +++-- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../ios/Runner/Info.plist | 10 +- .../ios/Runner/Runner-Bridging-Header.h | 2 +- .../ios/RunnerTests/RunnerTests.swift | 12 + .../lib/add_todo_screen.dart | 12 +- change_notifier_provider/lib/app.dart | 7 +- .../lib/details_screen.dart | 15 +- .../lib/edit_todo_screen.dart | 16 +- .../lib/home/extra_actions_button.dart | 2 +- .../lib/home/filter_button.dart | 10 +- .../lib/home/home_screen.dart | 28 +- .../lib/home/stats_view.dart | 3 +- .../lib/home/todo_list_view.dart | 6 +- .../lib/localization.dart | 2 +- change_notifier_provider/lib/main.dart | 3 +- change_notifier_provider/lib/main_web.dart | 21 - change_notifier_provider/lib/models.dart | 9 +- .../lib/todo_list_model.dart | 20 +- change_notifier_provider/linux/.gitignore | 1 + change_notifier_provider/linux/CMakeLists.txt | 128 +++ .../linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../linux/runner/CMakeLists.txt | 26 + change_notifier_provider/linux/runner/main.cc | 6 + .../linux/runner/my_application.cc | 144 ++++ .../linux/runner/my_application.h | 18 + change_notifier_provider/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + change_notifier_provider/macos/Podfile | 42 + change_notifier_provider/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + change_notifier_provider/pubspec.yaml | 25 +- .../test/home_screen_test.dart | 17 +- .../test/mock_repository.dart | 2 +- .../test/todo_list_model_test.dart | 4 +- .../test_driver/integration_test.dart | 3 + .../test_driver/todo_app.dart | 9 - .../test_driver/todo_app_test.dart | 9 - change_notifier_provider/web/favicon.png | Bin 0 -> 917 bytes .../web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes change_notifier_provider/web/index.html | 32 +- change_notifier_provider/web/manifest.json | 35 + change_notifier_provider/windows/.gitignore | 17 + .../windows/CMakeLists.txt | 108 +++ .../windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../windows/runner/CMakeLists.txt | 40 + .../windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../windows/runner/flutter_window.h | 33 + .../windows/runner/main.cpp | 43 + .../windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + .../windows/runner/utils.cpp | 65 ++ .../windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 288 +++++++ .../windows/runner/win32_window.h | 102 +++ 147 files changed, 3790 insertions(+), 428 deletions(-) create mode 100644 change_notifier_provider/analysis_options.yaml delete mode 100644 change_notifier_provider/android/app/build.gradle create mode 100644 change_notifier_provider/android/app/build.gradle.kts delete mode 100644 change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider/MainActivity.kt create mode 100644 change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider_sample/MainActivity.kt create mode 100644 change_notifier_provider/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 change_notifier_provider/android/app/src/main/res/values-night/styles.xml delete mode 100644 change_notifier_provider/android/build.gradle create mode 100644 change_notifier_provider/android/build.gradle.kts delete mode 100644 change_notifier_provider/android/settings.gradle create mode 100644 change_notifier_provider/android/settings.gradle.kts create mode 100644 change_notifier_provider/integration_test/app_test.dart create mode 100644 change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 change_notifier_provider/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 change_notifier_provider/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png create mode 100644 change_notifier_provider/ios/RunnerTests/RunnerTests.swift delete mode 100644 change_notifier_provider/lib/main_web.dart create mode 100644 change_notifier_provider/linux/.gitignore create mode 100644 change_notifier_provider/linux/CMakeLists.txt create mode 100644 change_notifier_provider/linux/flutter/CMakeLists.txt create mode 100644 change_notifier_provider/linux/flutter/generated_plugin_registrant.cc create mode 100644 change_notifier_provider/linux/flutter/generated_plugin_registrant.h create mode 100644 change_notifier_provider/linux/flutter/generated_plugins.cmake create mode 100644 change_notifier_provider/linux/runner/CMakeLists.txt create mode 100644 change_notifier_provider/linux/runner/main.cc create mode 100644 change_notifier_provider/linux/runner/my_application.cc create mode 100644 change_notifier_provider/linux/runner/my_application.h create mode 100644 change_notifier_provider/macos/.gitignore create mode 100644 change_notifier_provider/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 change_notifier_provider/macos/Flutter/Flutter-Release.xcconfig create mode 100644 change_notifier_provider/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 change_notifier_provider/macos/Podfile create mode 100644 change_notifier_provider/macos/Podfile.lock create mode 100644 change_notifier_provider/macos/Runner.xcodeproj/project.pbxproj create mode 100644 change_notifier_provider/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 change_notifier_provider/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 change_notifier_provider/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 change_notifier_provider/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 change_notifier_provider/macos/Runner/AppDelegate.swift create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 change_notifier_provider/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 change_notifier_provider/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 change_notifier_provider/macos/Runner/Configs/Debug.xcconfig create mode 100644 change_notifier_provider/macos/Runner/Configs/Release.xcconfig create mode 100644 change_notifier_provider/macos/Runner/Configs/Warnings.xcconfig create mode 100644 change_notifier_provider/macos/Runner/DebugProfile.entitlements create mode 100644 change_notifier_provider/macos/Runner/Info.plist create mode 100644 change_notifier_provider/macos/Runner/MainFlutterWindow.swift create mode 100644 change_notifier_provider/macos/Runner/Release.entitlements create mode 100644 change_notifier_provider/macos/RunnerTests/RunnerTests.swift create mode 100644 change_notifier_provider/test_driver/integration_test.dart delete mode 100644 change_notifier_provider/test_driver/todo_app.dart delete mode 100644 change_notifier_provider/test_driver/todo_app_test.dart create mode 100644 change_notifier_provider/web/favicon.png create mode 100644 change_notifier_provider/web/icons/Icon-192.png create mode 100644 change_notifier_provider/web/icons/Icon-512.png create mode 100644 change_notifier_provider/web/icons/Icon-maskable-192.png create mode 100644 change_notifier_provider/web/icons/Icon-maskable-512.png create mode 100644 change_notifier_provider/web/manifest.json create mode 100644 change_notifier_provider/windows/.gitignore create mode 100644 change_notifier_provider/windows/CMakeLists.txt create mode 100644 change_notifier_provider/windows/flutter/CMakeLists.txt create mode 100644 change_notifier_provider/windows/flutter/generated_plugin_registrant.cc create mode 100644 change_notifier_provider/windows/flutter/generated_plugin_registrant.h create mode 100644 change_notifier_provider/windows/flutter/generated_plugins.cmake create mode 100644 change_notifier_provider/windows/runner/CMakeLists.txt create mode 100644 change_notifier_provider/windows/runner/Runner.rc create mode 100644 change_notifier_provider/windows/runner/flutter_window.cpp create mode 100644 change_notifier_provider/windows/runner/flutter_window.h create mode 100644 change_notifier_provider/windows/runner/main.cpp create mode 100644 change_notifier_provider/windows/runner/resource.h create mode 100644 change_notifier_provider/windows/runner/resources/app_icon.ico create mode 100644 change_notifier_provider/windows/runner/runner.exe.manifest create mode 100644 change_notifier_provider/windows/runner/utils.cpp create mode 100644 change_notifier_provider/windows/runner/utils.h create mode 100644 change_notifier_provider/windows/runner/win32_window.cpp create mode 100644 change_notifier_provider/windows/runner/win32_window.h diff --git a/change_notifier_provider/.metadata b/change_notifier_provider/.metadata index 361e1e4c..05a8ab44 100644 --- a/change_notifier_provider/.metadata +++ b/change_notifier_provider/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 18cd7a3601bcffb36fdf2f679f763b5e827c2e8e - channel: beta + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/change_notifier_provider/analysis_options.yaml b/change_notifier_provider/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/change_notifier_provider/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/change_notifier_provider/android/.gitignore b/change_notifier_provider/android/.gitignore index bc2100d8..be3943c9 100644 --- a/change_notifier_provider/android/.gitignore +++ b/change_notifier_provider/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/change_notifier_provider/android/app/build.gradle b/change_notifier_provider/android/app/build.gradle deleted file mode 100644 index 84853055..00000000 --- a/change_notifier_provider/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.change_notifier_provider" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/change_notifier_provider/android/app/build.gradle.kts b/change_notifier_provider/android/app/build.gradle.kts new file mode 100644 index 00000000..cbc4befb --- /dev/null +++ b/change_notifier_provider/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.change_notifier_provider_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.change_notifier_provider_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/change_notifier_provider/android/app/src/debug/AndroidManifest.xml b/change_notifier_provider/android/app/src/debug/AndroidManifest.xml index a9a5b33e..399f6981 100644 --- a/change_notifier_provider/android/app/src/debug/AndroidManifest.xml +++ b/change_notifier_provider/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/change_notifier_provider/android/app/src/main/AndroidManifest.xml b/change_notifier_provider/android/app/src/main/AndroidManifest.xml index afb0b62e..3e5f710b 100644 --- a/change_notifier_provider/android/app/src/main/AndroidManifest.xml +++ b/change_notifier_provider/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider/MainActivity.kt b/change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider/MainActivity.kt deleted file mode 100644 index 891c3153..00000000 --- a/change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.change_notifier_provider - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider_sample/MainActivity.kt b/change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider_sample/MainActivity.kt new file mode 100644 index 00000000..304eb04b --- /dev/null +++ b/change_notifier_provider/android/app/src/main/kotlin/com/example/change_notifier_provider_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.change_notifier_provider_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/change_notifier_provider/android/app/src/main/res/drawable-v21/launch_background.xml b/change_notifier_provider/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/change_notifier_provider/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/change_notifier_provider/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/change_notifier_provider/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/change_notifier_provider/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/change_notifier_provider/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 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 literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/change_notifier_provider/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/change_notifier_provider/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/change_notifier_provider/android/app/src/main/res/values/styles.xml b/change_notifier_provider/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/change_notifier_provider/android/app/src/main/res/values/styles.xml +++ b/change_notifier_provider/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/change_notifier_provider/android/app/src/profile/AndroidManifest.xml b/change_notifier_provider/android/app/src/profile/AndroidManifest.xml index a9a5b33e..399f6981 100644 --- a/change_notifier_provider/android/app/src/profile/AndroidManifest.xml +++ b/change_notifier_provider/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/change_notifier_provider/android/build.gradle b/change_notifier_provider/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/change_notifier_provider/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/change_notifier_provider/android/build.gradle.kts b/change_notifier_provider/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/change_notifier_provider/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/change_notifier_provider/android/gradle.properties b/change_notifier_provider/android/gradle.properties index 38c8d454..f018a618 100644 --- a/change_notifier_provider/android/gradle.properties +++ b/change_notifier_provider/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/change_notifier_provider/android/gradle/wrapper/gradle-wrapper.properties b/change_notifier_provider/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/change_notifier_provider/android/gradle/wrapper/gradle-wrapper.properties +++ b/change_notifier_provider/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/change_notifier_provider/android/settings.gradle b/change_notifier_provider/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/change_notifier_provider/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/change_notifier_provider/android/settings.gradle.kts b/change_notifier_provider/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/change_notifier_provider/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/change_notifier_provider/integration_test/app_test.dart b/change_notifier_provider/integration_test/app_test.dart new file mode 100644 index 00000000..7904d407 --- /dev/null +++ b/change_notifier_provider/integration_test/app_test.dart @@ -0,0 +1,19 @@ +import 'package:change_notifier_provider_sample/app.dart'; +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return ProviderApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'change_notifier_provider_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ); + }, + ); +} diff --git a/change_notifier_provider/ios/.gitignore b/change_notifier_provider/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/change_notifier_provider/ios/.gitignore +++ b/change_notifier_provider/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/change_notifier_provider/ios/Flutter/AppFrameworkInfo.plist b/change_notifier_provider/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..1dc6cf76 100644 --- a/change_notifier_provider/ios/Flutter/AppFrameworkInfo.plist +++ b/change_notifier_provider/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 13.0 diff --git a/change_notifier_provider/ios/Flutter/Debug.xcconfig b/change_notifier_provider/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/change_notifier_provider/ios/Flutter/Debug.xcconfig +++ b/change_notifier_provider/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/change_notifier_provider/ios/Flutter/Release.xcconfig b/change_notifier_provider/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/change_notifier_provider/ios/Flutter/Release.xcconfig +++ b/change_notifier_provider/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/change_notifier_provider/ios/Podfile b/change_notifier_provider/ios/Podfile index b30a428b..620e46eb 100644 --- a/change_notifier_provider/ios/Podfile +++ b/change_notifier_provider/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/change_notifier_provider/ios/Runner.xcodeproj/project.pbxproj b/change_notifier_provider/ios/Runner.xcodeproj/project.pbxproj index a50c875c..26ec136d 100644 --- a/change_notifier_provider/ios/Runner.xcodeproj/project.pbxproj +++ b/change_notifier_provider/ios/Runner.xcodeproj/project.pbxproj @@ -3,22 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -26,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -37,14 +42,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -57,20 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -84,6 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -91,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -102,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -111,16 +121,26 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -147,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -157,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -170,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -191,20 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -220,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -231,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -253,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -285,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -293,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -309,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProvider; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -328,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -362,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -376,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -386,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -418,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -426,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -443,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProvider; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -470,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProvider; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -492,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/change_notifier_provider/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/change_notifier_provider/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/change_notifier_provider/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/change_notifier_provider/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/change_notifier_provider/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - + + + + IDEDidComputeMac32BitWarning + + + diff --git a/change_notifier_provider/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/change_notifier_provider/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/change_notifier_provider/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/change_notifier_provider/ios/Runner/AppDelegate.swift b/change_notifier_provider/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/change_notifier_provider/ios/Runner/AppDelegate.swift +++ b/change_notifier_provider/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 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 U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 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 diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 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 diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/change_notifier_provider/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/change_notifier_provider/macos/Runner/Configs/AppInfo.xcconfig b/change_notifier_provider/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..0c7fa86c --- /dev/null +++ b/change_notifier_provider/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = change_notifier_provider_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/change_notifier_provider/macos/Runner/Configs/Debug.xcconfig b/change_notifier_provider/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/change_notifier_provider/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/change_notifier_provider/macos/Runner/Configs/Release.xcconfig b/change_notifier_provider/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/change_notifier_provider/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/change_notifier_provider/macos/Runner/Configs/Warnings.xcconfig b/change_notifier_provider/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/change_notifier_provider/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/change_notifier_provider/macos/Runner/DebugProfile.entitlements b/change_notifier_provider/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/change_notifier_provider/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/change_notifier_provider/macos/Runner/Info.plist b/change_notifier_provider/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/change_notifier_provider/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/change_notifier_provider/macos/Runner/MainFlutterWindow.swift b/change_notifier_provider/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/change_notifier_provider/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/change_notifier_provider/macos/Runner/Release.entitlements b/change_notifier_provider/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/change_notifier_provider/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/change_notifier_provider/macos/RunnerTests/RunnerTests.swift b/change_notifier_provider/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/change_notifier_provider/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/change_notifier_provider/pubspec.yaml b/change_notifier_provider/pubspec.yaml index f5c2a871..bc36b18c 100644 --- a/change_notifier_provider/pubspec.yaml +++ b/change_notifier_provider/pubspec.yaml @@ -12,29 +12,32 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: "none" environment: - sdk: ">=2.6.0 <3.0.0" + sdk: ^3.8.1 dependencies: - provider: ^4.0.4 - todos_repository_local_storage: - path: ../todos_repository_local_storage - todos_app_core: - path: ../todos_app_core + provider: + collection: flutter: sdk: flutter - key_value_store_flutter: - key_value_store_web: + todos_app_core: + path: ../todos_app_core + todos_repository_core: + path: ../todos_repository_core + todos_repository_local_storage: + path: ../todos_repository_local_storage shared_preferences: dev_dependencies: - mockito: - test: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter + test: + mockito: integration_tests: path: ../integration_tests diff --git a/change_notifier_provider/test/home_screen_test.dart b/change_notifier_provider/test/home_screen_test.dart index e2e17a64..16655bcc 100644 --- a/change_notifier_provider/test/home_screen_test.dart +++ b/change_notifier_provider/test/home_screen_test.dart @@ -2,12 +2,10 @@ import 'package:change_notifier_provider_sample/home/home_screen.dart'; import 'package:change_notifier_provider_sample/localization.dart'; import 'package:change_notifier_provider_sample/models.dart'; import 'package:change_notifier_provider_sample/todo_list_model.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; import 'mock_repository.dart'; @@ -83,22 +81,13 @@ void main() { } class _TestWidget extends StatelessWidget { - final Widget child; - final TodosRepository repository; - final List todos; - - const _TestWidget({ - Key key, - this.child, - this.repository, - this.todos, - }) : super(key: key); + const _TestWidget(); @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (_) { - final repo = MockRepository(todos ?? _defaultTodos); + final repo = MockRepository(_defaultTodos); return TodoListModel(repository: repo)..loadTodos(); }, child: MaterialApp( @@ -106,7 +95,7 @@ class _TestWidget extends StatelessWidget { ProviderLocalizationsDelegate(), ArchSampleLocalizationsDelegate(), ], - home: child ?? const HomeScreen(), + home: const HomeScreen(), ), ); } diff --git a/change_notifier_provider/test/mock_repository.dart b/change_notifier_provider/test/mock_repository.dart index bbe13c77..6a4b2cc1 100644 --- a/change_notifier_provider/test/mock_repository.dart +++ b/change_notifier_provider/test/mock_repository.dart @@ -14,7 +14,7 @@ class MockRepository extends TodosRepository { Future> loadTodos() async => entities; @override - Future saveTodos(List todos) async { + Future saveTodos(List todos) async { saveCount++; entities = todos; } diff --git a/change_notifier_provider/test/todo_list_model_test.dart b/change_notifier_provider/test/todo_list_model_test.dart index 2c125bd2..79a68728 100644 --- a/change_notifier_provider/test/todo_list_model_test.dart +++ b/change_notifier_provider/test/todo_list_model_test.dart @@ -121,7 +121,7 @@ void main() { model.removeTodo(todo); - expect(model.todos, []); + expect(model.todos, []); expect(repository.saveCount, 1); }); @@ -148,7 +148,7 @@ void main() { final model = TodoListModel(repository: repository); expect(model.isLoading, isFalse); - expect(model.todos, []); + expect(model.todos, []); final loading = model.loadTodos(); diff --git a/change_notifier_provider/test_driver/integration_test.dart b/change_notifier_provider/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/change_notifier_provider/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/change_notifier_provider/test_driver/todo_app.dart b/change_notifier_provider/test_driver/todo_app.dart deleted file mode 100644 index 3dfed839..00000000 --- a/change_notifier_provider/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:change_notifier_provider_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/change_notifier_provider/test_driver/todo_app_test.dart b/change_notifier_provider/test_driver/todo_app_test.dart deleted file mode 100644 index fa00c88c..00000000 --- a/change_notifier_provider/test_driver/todo_app_test.dart +++ /dev/null @@ -1,9 +0,0 @@ -// _copyright 2018 _the _flutter _architecture _sample _authors. _all rights reserved. -// _use of this source code is governed by the _m_i_t license that can be found -// in the _l_i_c_e_n_s_e file. - -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/change_notifier_provider/web/favicon.png b/change_notifier_provider/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/change_notifier_provider/web/icons/Icon-192.png b/change_notifier_provider/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/change_notifier_provider/web/icons/Icon-512.png b/change_notifier_provider/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/change_notifier_provider/web/icons/Icon-maskable-192.png b/change_notifier_provider/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/change_notifier_provider/web/icons/Icon-maskable-512.png b/change_notifier_provider/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/change_notifier_provider/web/index.html b/change_notifier_provider/web/index.html index 47bbc93b..39677907 100644 --- a/change_notifier_provider/web/index.html +++ b/change_notifier_provider/web/index.html @@ -1,10 +1,38 @@ + + + - change_notifier_provider + + + + + + + + + + + + + change_notifier_provider_sample + - + diff --git a/change_notifier_provider/web/manifest.json b/change_notifier_provider/web/manifest.json new file mode 100644 index 00000000..456cf19b --- /dev/null +++ b/change_notifier_provider/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "change_notifier_provider_sample", + "short_name": "change_notifier_provider_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/change_notifier_provider/windows/.gitignore b/change_notifier_provider/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/change_notifier_provider/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/change_notifier_provider/windows/CMakeLists.txt b/change_notifier_provider/windows/CMakeLists.txt new file mode 100644 index 00000000..177b62f3 --- /dev/null +++ b/change_notifier_provider/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(change_notifier_provider_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "change_notifier_provider_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/change_notifier_provider/windows/flutter/CMakeLists.txt b/change_notifier_provider/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/change_notifier_provider/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/change_notifier_provider/windows/flutter/generated_plugin_registrant.cc b/change_notifier_provider/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/change_notifier_provider/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/change_notifier_provider/windows/flutter/generated_plugin_registrant.h b/change_notifier_provider/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/change_notifier_provider/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/change_notifier_provider/windows/flutter/generated_plugins.cmake b/change_notifier_provider/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/change_notifier_provider/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/change_notifier_provider/windows/runner/CMakeLists.txt b/change_notifier_provider/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/change_notifier_provider/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/change_notifier_provider/windows/runner/Runner.rc b/change_notifier_provider/windows/runner/Runner.rc new file mode 100644 index 00000000..959154ce --- /dev/null +++ b/change_notifier_provider/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "change_notifier_provider_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "change_notifier_provider_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "change_notifier_provider_sample.exe" "\0" + VALUE "ProductName", "change_notifier_provider_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/change_notifier_provider/windows/runner/flutter_window.cpp b/change_notifier_provider/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/change_notifier_provider/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/change_notifier_provider/windows/runner/flutter_window.h b/change_notifier_provider/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/change_notifier_provider/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/change_notifier_provider/windows/runner/main.cpp b/change_notifier_provider/windows/runner/main.cpp new file mode 100644 index 00000000..b2139b1b --- /dev/null +++ b/change_notifier_provider/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"change_notifier_provider_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/change_notifier_provider/windows/runner/resource.h b/change_notifier_provider/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/change_notifier_provider/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/change_notifier_provider/windows/runner/resources/app_icon.ico b/change_notifier_provider/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/change_notifier_provider/windows/runner/runner.exe.manifest b/change_notifier_provider/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/change_notifier_provider/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/change_notifier_provider/windows/runner/utils.cpp b/change_notifier_provider/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/change_notifier_provider/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/change_notifier_provider/windows/runner/utils.h b/change_notifier_provider/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/change_notifier_provider/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/change_notifier_provider/windows/runner/win32_window.cpp b/change_notifier_provider/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/change_notifier_provider/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/change_notifier_provider/windows/runner/win32_window.h b/change_notifier_provider/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/change_notifier_provider/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 60e90f94f603b47be062dd9686d9ad8cd677395a Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 15:52:12 +0100 Subject: [PATCH 52/89] Update titleLarge in all samples --- bloc_library/lib/screens/add_edit_screen.dart | 2 +- built_redux/lib/presentation/add_edit_screen.dart | 2 +- firestore_redux/lib/presentation/add_edit_screen.dart | 2 +- freezed_provider_value_notifier/lib/add_todo_screen.dart | 2 +- redux/lib/presentation/add_edit_screen.dart | 2 +- scoped_model/lib/screens/add_edit_screen.dart | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bloc_library/lib/screens/add_edit_screen.dart b/bloc_library/lib/screens/add_edit_screen.dart index 77477e48..c531e8cd 100644 --- a/bloc_library/lib/screens/add_edit_screen.dart +++ b/bloc_library/lib/screens/add_edit_screen.dart @@ -48,7 +48,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: !isEditing, - style: textTheme.headline, + style: textTheme.titleLarge, decoration: InputDecoration( hintText: localizations.newTodoHint, ), diff --git a/built_redux/lib/presentation/add_edit_screen.dart b/built_redux/lib/presentation/add_edit_screen.dart index fbd9f558..63673fa3 100644 --- a/built_redux/lib/presentation/add_edit_screen.dart +++ b/built_redux/lib/presentation/add_edit_screen.dart @@ -47,7 +47,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: !isEditing, - style: textTheme.headline, + style: textTheme.titleLarge, decoration: InputDecoration( hintText: localizations.newTodoHint, ), diff --git a/firestore_redux/lib/presentation/add_edit_screen.dart b/firestore_redux/lib/presentation/add_edit_screen.dart index 3c449694..7b9dbe5b 100644 --- a/firestore_redux/lib/presentation/add_edit_screen.dart +++ b/firestore_redux/lib/presentation/add_edit_screen.dart @@ -47,7 +47,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: !isEditing, - style: textTheme.headline, + style: textTheme.titleLarge, decoration: InputDecoration( hintText: localizations.newTodoHint, ), diff --git a/freezed_provider_value_notifier/lib/add_todo_screen.dart b/freezed_provider_value_notifier/lib/add_todo_screen.dart index 483fcc63..c1528bb0 100644 --- a/freezed_provider_value_notifier/lib/add_todo_screen.dart +++ b/freezed_provider_value_notifier/lib/add_todo_screen.dart @@ -44,7 +44,7 @@ class _AddTodoScreenState extends State { decoration: InputDecoration( hintText: localizations.newTodoHint, ), - style: textTheme.headline, + style: textTheme.titleLarge, autofocus: true, validator: (val) { return val.trim().isEmpty diff --git a/redux/lib/presentation/add_edit_screen.dart b/redux/lib/presentation/add_edit_screen.dart index 961a785e..015e89f3 100644 --- a/redux/lib/presentation/add_edit_screen.dart +++ b/redux/lib/presentation/add_edit_screen.dart @@ -47,7 +47,7 @@ class _AddEditScreenState extends State { initialValue: isEditing ? widget.todo.task : '', key: ArchSampleKeys.taskField, autofocus: !isEditing, - style: textTheme.headline, + style: textTheme.titleLarge, decoration: InputDecoration( hintText: localizations.newTodoHint, ), diff --git a/scoped_model/lib/screens/add_edit_screen.dart b/scoped_model/lib/screens/add_edit_screen.dart index 7912bda9..a850a3df 100644 --- a/scoped_model/lib/screens/add_edit_screen.dart +++ b/scoped_model/lib/screens/add_edit_screen.dart @@ -49,7 +49,7 @@ class _AddEditScreenState extends State { initialValue: task?.task ?? '', key: ArchSampleKeys.taskField, autofocus: !isEditing, - style: textTheme.headline, + style: textTheme.titleLarge, decoration: InputDecoration( hintText: localizations.newTodoHint, ), From a549ff435a226f7b3adbcefe6139d0cc02ceb78e Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 15:53:10 +0100 Subject: [PATCH 53/89] Update line count --- line_count.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/line_count.md b/line_count.md index d1de6744..87cbe0b2 100644 --- a/line_count.md +++ b/line_count.md @@ -19,7 +19,7 @@ samples to make them smaller, unless doing so improves the application overall. | signals | 782 | | mobx | 799 | | inherited_widget | 815 | -| change_notifier_provider | 832 | +| change_notifier_provider | 821 | | vanilla | 835 | | simple blocs | 1043 | | bloc | 1124 | @@ -29,4 +29,4 @@ samples to make them smaller, unless doing so improves the application overall. | redux | 1354 | | firestore_redux | 1395 | -Note: This file was generated on Wed Sep 3 12:40:20 UTC 2025 using `scripts/line_counter.sh`. +Note: This file was generated on Wed Sep 3 14:52:54 UTC 2025 using `scripts/line_counter.sh`. From 573a63a3e679ce03ed3d02bce7d3e5d097b75b82 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 19:32:38 +0100 Subject: [PATCH 54/89] Remove Firestore samples --- .../.flutter-plugins-dependencies | 1 - firebase_flutter_repository/README.md | 13 - .../lib/reactive_todos_repository.dart | 48 -- .../lib/user_repository.dart | 21 - firebase_flutter_repository/pubspec.yaml | 21 - .../firebase_flutter_repository_test.dart | 131 ---- firestore_redux/.flutter-plugins-dependencies | 1 - firestore_redux/.gitignore | 73 --- firestore_redux/.metadata | 10 - firestore_redux/README.md | 98 --- firestore_redux/android/.gitignore | 7 - firestore_redux/android/app/build.gradle | 68 -- .../android/app/src/debug/AndroidManifest.xml | 7 - .../android/app/src/main/AndroidManifest.xml | 30 - .../example/firestore_redux/MainActivity.kt | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 0 bytes .../app/src/main/res/values/styles.xml | 8 - .../app/src/profile/AndroidManifest.xml | 7 - firestore_redux/android/build.gradle | 31 - firestore_redux/android/gradle.properties | 4 - .../gradle/wrapper/gradle-wrapper.properties | 6 - firestore_redux/android/settings.gradle | 15 - firestore_redux/ios/.gitignore | 32 - .../ios/Flutter/AppFrameworkInfo.plist | 26 - firestore_redux/ios/Flutter/Debug.xcconfig | 2 - firestore_redux/ios/Flutter/Release.xcconfig | 2 - firestore_redux/ios/Podfile | 90 --- .../ios/Runner.xcodeproj/project.pbxproj | 588 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/Runner.xcscheme | 91 --- .../contents.xcworkspacedata | 10 - firestore_redux/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 116 ---- .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 0 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - .../ios/Runner/GoogleService-Info.plist | 40 -- firestore_redux/ios/Runner/Info.plist | 45 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - firestore_redux/lib/actions/actions.dart | 94 --- .../lib/containers/active_tab.dart | 20 - firestore_redux/lib/containers/add_todo.dart | 29 - .../lib/containers/app_loading.dart | 21 - firestore_redux/lib/containers/edit_todo.dart | 34 - .../containers/extra_actions_container.dart | 56 -- .../lib/containers/filter_selector.dart | 54 -- .../lib/containers/filtered_todos.dart | 64 -- firestore_redux/lib/containers/stats.dart | 38 -- .../lib/containers/tab_selector.dart | 68 -- .../lib/containers/todo_details.dart | 57 -- firestore_redux/lib/localization.dart | 28 - firestore_redux/lib/main.dart | 63 -- .../middleware/store_todos_middleware.dart | 131 ---- firestore_redux/lib/models/app_state.dart | 55 -- firestore_redux/lib/models/app_tab.dart | 1 - firestore_redux/lib/models/extra_action.dart | 1 - firestore_redux/lib/models/models.dart | 5 - firestore_redux/lib/models/todo.dart | 56 -- .../lib/models/visibility_filter.dart | 1 - .../lib/presentation/add_edit_screen.dart | 90 --- .../lib/presentation/details_screen.dart | 97 --- .../presentation/extra_actions_button.dart | 34 - .../lib/presentation/filter_button.dart | 89 --- .../lib/presentation/home_screen.dart | 41 -- .../lib/presentation/loading_indicator.dart | 10 - .../lib/presentation/stats_counter.dart | 64 -- .../lib/presentation/todo_item.dart | 52 -- .../lib/presentation/todo_list.dart | 100 --- .../lib/presentation/typedefs.dart | 7 - .../lib/reducers/app_state_reducer.dart | 15 - .../lib/reducers/loading_reducer.dart | 10 - .../lib/reducers/tabs_reducer.dart | 11 - .../lib/reducers/todos_reducer.dart | 16 - .../lib/reducers/visibility_reducer.dart | 14 - firestore_redux/lib/selectors/selectors.dart | 47 -- firestore_redux/pubspec.yaml | 82 --- firestore_redux/test/all_tests.dart | 9 - firestore_redux/test/middleware_test.dart | 171 ----- firestore_redux/test/reducer_test.dart | 49 -- firestore_redux/test/selectors_test.dart | 85 --- .../test_driver/mock_reactive_repository.dart | 49 -- firestore_redux/test_driver/todo_app.dart | 16 - .../test_driver/todo_app_test.dart | 5 - 110 files changed, 3817 deletions(-) delete mode 100644 firebase_flutter_repository/.flutter-plugins-dependencies delete mode 100644 firebase_flutter_repository/README.md delete mode 100644 firebase_flutter_repository/lib/reactive_todos_repository.dart delete mode 100644 firebase_flutter_repository/lib/user_repository.dart delete mode 100644 firebase_flutter_repository/pubspec.yaml delete mode 100644 firebase_flutter_repository/test/firebase_flutter_repository_test.dart delete mode 100644 firestore_redux/.flutter-plugins-dependencies delete mode 100644 firestore_redux/.gitignore delete mode 100644 firestore_redux/.metadata delete mode 100644 firestore_redux/README.md delete mode 100644 firestore_redux/android/.gitignore delete mode 100644 firestore_redux/android/app/build.gradle delete mode 100644 firestore_redux/android/app/src/debug/AndroidManifest.xml delete mode 100644 firestore_redux/android/app/src/main/AndroidManifest.xml delete mode 100644 firestore_redux/android/app/src/main/kotlin/com/example/firestore_redux/MainActivity.kt delete mode 100644 firestore_redux/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 firestore_redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 firestore_redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 firestore_redux/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 firestore_redux/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 firestore_redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 firestore_redux/android/app/src/main/res/values/styles.xml delete mode 100644 firestore_redux/android/app/src/profile/AndroidManifest.xml delete mode 100644 firestore_redux/android/build.gradle delete mode 100644 firestore_redux/android/gradle.properties delete mode 100644 firestore_redux/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 firestore_redux/android/settings.gradle delete mode 100644 firestore_redux/ios/.gitignore delete mode 100644 firestore_redux/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 firestore_redux/ios/Flutter/Debug.xcconfig delete mode 100644 firestore_redux/ios/Flutter/Release.xcconfig delete mode 100644 firestore_redux/ios/Podfile delete mode 100644 firestore_redux/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 firestore_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 firestore_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 firestore_redux/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 firestore_redux/ios/Runner/AppDelegate.swift delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 firestore_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 firestore_redux/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 firestore_redux/ios/Runner/GoogleService-Info.plist delete mode 100644 firestore_redux/ios/Runner/Info.plist delete mode 100644 firestore_redux/ios/Runner/Runner-Bridging-Header.h delete mode 100644 firestore_redux/lib/actions/actions.dart delete mode 100644 firestore_redux/lib/containers/active_tab.dart delete mode 100644 firestore_redux/lib/containers/add_todo.dart delete mode 100644 firestore_redux/lib/containers/app_loading.dart delete mode 100644 firestore_redux/lib/containers/edit_todo.dart delete mode 100644 firestore_redux/lib/containers/extra_actions_container.dart delete mode 100644 firestore_redux/lib/containers/filter_selector.dart delete mode 100644 firestore_redux/lib/containers/filtered_todos.dart delete mode 100644 firestore_redux/lib/containers/stats.dart delete mode 100644 firestore_redux/lib/containers/tab_selector.dart delete mode 100644 firestore_redux/lib/containers/todo_details.dart delete mode 100644 firestore_redux/lib/localization.dart delete mode 100644 firestore_redux/lib/main.dart delete mode 100644 firestore_redux/lib/middleware/store_todos_middleware.dart delete mode 100644 firestore_redux/lib/models/app_state.dart delete mode 100644 firestore_redux/lib/models/app_tab.dart delete mode 100644 firestore_redux/lib/models/extra_action.dart delete mode 100644 firestore_redux/lib/models/models.dart delete mode 100644 firestore_redux/lib/models/todo.dart delete mode 100644 firestore_redux/lib/models/visibility_filter.dart delete mode 100644 firestore_redux/lib/presentation/add_edit_screen.dart delete mode 100644 firestore_redux/lib/presentation/details_screen.dart delete mode 100644 firestore_redux/lib/presentation/extra_actions_button.dart delete mode 100644 firestore_redux/lib/presentation/filter_button.dart delete mode 100644 firestore_redux/lib/presentation/home_screen.dart delete mode 100644 firestore_redux/lib/presentation/loading_indicator.dart delete mode 100644 firestore_redux/lib/presentation/stats_counter.dart delete mode 100644 firestore_redux/lib/presentation/todo_item.dart delete mode 100644 firestore_redux/lib/presentation/todo_list.dart delete mode 100644 firestore_redux/lib/presentation/typedefs.dart delete mode 100644 firestore_redux/lib/reducers/app_state_reducer.dart delete mode 100644 firestore_redux/lib/reducers/loading_reducer.dart delete mode 100644 firestore_redux/lib/reducers/tabs_reducer.dart delete mode 100644 firestore_redux/lib/reducers/todos_reducer.dart delete mode 100644 firestore_redux/lib/reducers/visibility_reducer.dart delete mode 100644 firestore_redux/lib/selectors/selectors.dart delete mode 100644 firestore_redux/pubspec.yaml delete mode 100644 firestore_redux/test/all_tests.dart delete mode 100644 firestore_redux/test/middleware_test.dart delete mode 100644 firestore_redux/test/reducer_test.dart delete mode 100644 firestore_redux/test/selectors_test.dart delete mode 100644 firestore_redux/test_driver/mock_reactive_repository.dart delete mode 100644 firestore_redux/test_driver/todo_app.dart delete mode 100644 firestore_redux/test_driver/todo_app_test.dart diff --git a/firebase_flutter_repository/.flutter-plugins-dependencies b/firebase_flutter_repository/.flutter-plugins-dependencies deleted file mode 100644 index e3b89dcd..00000000 --- a/firebase_flutter_repository/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"cloud_firestore","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.1+1/","dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.15.4/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+3/","dependencies":[]}],"android":[{"name":"cloud_firestore","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.1+1/","dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.15.4/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+3/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[{"name":"firebase_auth_web","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_auth_web-0.1.2/","dependencies":[]},{"name":"firebase_core_web","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+2/","dependencies":[]}]},"dependencyGraph":[{"name":"cloud_firestore","dependencies":["firebase_core"]},{"name":"firebase_auth","dependencies":["firebase_core","firebase_auth_web"]},{"name":"firebase_auth_web","dependencies":[]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]}],"date_created":"2020-02-10 11:23:47.330621","version":"1.14.7-pre.38"} \ No newline at end of file diff --git a/firebase_flutter_repository/README.md b/firebase_flutter_repository/README.md deleted file mode 100644 index 3ecb0eca..00000000 --- a/firebase_flutter_repository/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# firebase_flutter_repository - -A reactive version of the todos repository and user repository backed by Firestore and FirebaseAuth for Flutter. - -## Defines how to log in - -This library provides a concrete implementation of the `UserRepository` class. It uses the `firebase_auth` package and anonymous login as the mechanism and returns a `UserEntity`. - -## Defines how to interact with Todos - -This library provides a concrete implementation of the `ReactiveTodosRepository`. - -To listen for real-time changes, it streams `TodoEntity` objects stored in the `todos` collection on Firestore. To create, update, and delete todos, it pushes changes to the `todos` collection or individual documents. diff --git a/firebase_flutter_repository/lib/reactive_todos_repository.dart b/firebase_flutter_repository/lib/reactive_todos_repository.dart deleted file mode 100644 index f527661e..00000000 --- a/firebase_flutter_repository/lib/reactive_todos_repository.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:async'; - -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -class FirestoreReactiveTodosRepository implements ReactiveTodosRepository { - static const String path = 'todo'; - - final Firestore firestore; - - const FirestoreReactiveTodosRepository(this.firestore); - - @override - Future addNewTodo(TodoEntity todo) { - return firestore.collection(path).document(todo.id).setData(todo.toJson()); - } - - @override - Future deleteTodo(List idList) async { - await Future.wait( - idList.map((id) { - return firestore.collection(path).document(id).delete(); - }), - ); - } - - @override - Stream> todos() { - return firestore.collection(path).snapshots().map((snapshot) { - return snapshot.documents.map((doc) { - return TodoEntity( - doc['task'], - doc.documentID, - doc['note'] ?? '', - doc['complete'] ?? false, - ); - }).toList(); - }); - } - - @override - Future updateTodo(TodoEntity todo) { - return firestore - .collection(path) - .document(todo.id) - .updateData(todo.toJson()); - } -} diff --git a/firebase_flutter_repository/lib/user_repository.dart b/firebase_flutter_repository/lib/user_repository.dart deleted file mode 100644 index eb1bc37a..00000000 --- a/firebase_flutter_repository/lib/user_repository.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'dart:async'; - -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -class FirebaseUserRepository implements UserRepository { - final FirebaseAuth auth; - - const FirebaseUserRepository(this.auth); - - @override - Future login() async { - final firebaseUser = await auth.signInAnonymously(); - - return UserEntity( - id: firebaseUser.user.uid, - displayName: firebaseUser.user.displayName, - photoUrl: firebaseUser.user.photoUrl, - ); - } -} diff --git a/firebase_flutter_repository/pubspec.yaml b/firebase_flutter_repository/pubspec.yaml deleted file mode 100644 index 3f812f9a..00000000 --- a/firebase_flutter_repository/pubspec.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: firebase_flutter_repository -description: A reactive version of the todos repository for Flutter - -environment: - sdk: '>=2.0.0 <3.0.0' - -dependencies: - flutter: - sdk: flutter - todos_repository_core: - path: ../todos_repository_core - firebase_auth: ^0.15.3 - cloud_firestore: ^0.13.0+1 - -dev_dependencies: - test: - mockito: - flutter_test: - sdk: flutter - -flutter: diff --git a/firebase_flutter_repository/test/firebase_flutter_repository_test.dart b/firebase_flutter_repository/test/firebase_flutter_repository_test.dart deleted file mode 100644 index e1c7f26f..00000000 --- a/firebase_flutter_repository/test/firebase_flutter_repository_test.dart +++ /dev/null @@ -1,131 +0,0 @@ -import 'dart:async'; - -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; -import 'package:firebase_flutter_repository/user_repository.dart'; -import 'package:mockito/mockito.dart'; -import 'package:test/test.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -void main() { - group('FirebaseUserRepository', () { - test('should log the user in anonymously', () async { - final auth = MockFirebaseAuth(); - final repository = FirebaseUserRepository(auth); - - when( - auth.signInAnonymously(), - ).thenAnswer((_) => Future.value(MockAuthResult())); - - final entity = await repository.login(); - - expect(entity, TypeMatcher()); - }); - }); - - group('FirebaseReactiveTodosRepository', () { - test('should send todos to firestore', () { - final firestore = MockFirestore(); - final collection = MockCollectionReference(); - final document = MockDocumentReference(); - final repository = FirestoreReactiveTodosRepository(firestore); - final todo = TodoEntity('A', '1', '', true); - - when( - firestore.collection(FirestoreReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.document(todo.id)).thenReturn(document); - - repository.addNewTodo(todo); - - verify(document.setData(todo.toJson())); - }); - - test('should update todos on firestore', () { - final firestore = MockFirestore(); - final collection = MockCollectionReference(); - final document = MockDocumentReference(); - final repository = FirestoreReactiveTodosRepository(firestore); - final todo = TodoEntity('A', '1', '', true); - - when( - firestore.collection(FirestoreReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.document(todo.id)).thenReturn(document); - - repository.updateTodo(todo); - - verify(document.updateData(todo.toJson())); - }); - - test('should listen for updates to the collection', () { - final todo = TodoEntity('A', '1', '', true); - final firestore = MockFirestore(); - final collection = MockCollectionReference(); - final snapshot = MockQuerySnapshot(); - final snapshots = Stream.fromIterable([snapshot]); - final document = MockDocumentSnapshot(todo.toJson()); - final repository = FirestoreReactiveTodosRepository(firestore); - - when( - firestore.collection(FirestoreReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.snapshots()).thenAnswer((_) => snapshots); - when(snapshot.documents).thenReturn([document]); - when(document.documentID).thenReturn(todo.id); - - expect(repository.todos(), emits([todo])); - }); - - test('should delete todos on firestore', () async { - final todoA = 'A'; - final todoB = 'B'; - final firestore = MockFirestore(); - final collection = MockCollectionReference(); - final documentA = MockDocumentReference(); - final documentB = MockDocumentReference(); - final repository = FirestoreReactiveTodosRepository(firestore); - - when( - firestore.collection(FirestoreReactiveTodosRepository.path), - ).thenReturn(collection); - when(collection.document(todoA)).thenReturn(documentA); - when(collection.document(todoB)).thenReturn(documentB); - when(documentA.delete()).thenAnswer((_) => Future.value()); - when(documentB.delete()).thenAnswer((_) => Future.value()); - - await repository.deleteTodo([todoA, todoB]); - - verify(documentA.delete()); - verify(documentB.delete()); - }); - }); -} - -class MockFirebaseAuth extends Mock implements FirebaseAuth {} - -class MockFirestore extends Mock implements Firestore {} - -class MockCollectionReference extends Mock implements CollectionReference {} - -class MockDocumentSnapshot extends Mock implements DocumentSnapshot { - @override - final Map data; - - MockDocumentSnapshot([this.data]); - - @override - dynamic operator [](String key) => data[key]; -} - -class MockDocumentReference extends Mock implements DocumentReference {} - -class MockQuerySnapshot extends Mock implements QuerySnapshot {} - -class MockAuthResult extends Mock implements AuthResult { - @override - final user = MockFirebaseUser(); -} - -class MockFirebaseUser extends Mock implements FirebaseUser {} diff --git a/firestore_redux/.flutter-plugins-dependencies b/firestore_redux/.flutter-plugins-dependencies deleted file mode 100644 index ba421a8f..00000000 --- a/firestore_redux/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"cloud_firestore","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.1+1/","dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.15.4/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+3/","dependencies":[]},{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"android":[{"name":"cloud_firestore","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.1+1/","dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.15.4/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+3/","dependencies":[]},{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[{"name":"firebase_auth_web","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_auth_web-0.1.2/","dependencies":[]},{"name":"firebase_core_web","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+2/","dependencies":[]}]},"dependencyGraph":[{"name":"cloud_firestore","dependencies":["firebase_core"]},{"name":"firebase_auth","dependencies":["firebase_core","firebase_auth_web"]},{"name":"firebase_auth_web","dependencies":[]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"path_provider","dependencies":[]}],"date_created":"2020-02-10 11:23:57.149758","version":"1.14.7-pre.38"} \ No newline at end of file diff --git a/firestore_redux/.gitignore b/firestore_redux/.gitignore deleted file mode 100644 index 2ddde2a5..00000000 --- a/firestore_redux/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.packages -.pub-cache/ -.pub/ -/build/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/firestore_redux/.metadata b/firestore_redux/.metadata deleted file mode 100644 index 1b5cec02..00000000 --- a/firestore_redux/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable - -project_type: app diff --git a/firestore_redux/README.md b/firestore_redux/README.md deleted file mode 100644 index f40e2cb9..00000000 --- a/firestore_redux/README.md +++ /dev/null @@ -1,98 +0,0 @@ -# firestore redux sample - -This repo started with [flutter_architecture_redux sample](https://github.com/brianegan/flutter_architecture_samples/blob/master/redux/README.md), -and added [Cloud_Firestore](https://firebase.google.com/docs/firestore/) as the backend database. Cloud Firestore -provides realtime connection between the database and authenticated devices, as well as automatic offline -persistence for Android and iOS. Firebase authentication is included for anonymous authentication of users. - -## Set-up - -The steps below were primarily developed from [MemeChat repo](https://github.com/efortuna/memechat/blob/master/README.md). -There is a very useful [video tutorial](https://www.youtube.com/watch?v=w2TcYP8qiRI) associated with the MemeChat -repo from 2017 Google I/O that covers some basics related to connecting to Firebase. Additionally, refer to -[Firebase for Flutter Codelab](https://codelabs.developers.google.com/codelabs/flutter-firebase/index.html?index=..%2F..%2Findex#0) -In the present case, Firestore is being used but set up is similar. - -1) Set up a Firestore instance at [Firebase Console](https://console.firebase.google.com/). - -2) Enable anonymous authentication by going to 'Authentication' in left hand menu, selecting -'Sign-in Method', and enabling Anonymous at the bottom of the page. - -3) For Android: - - - Create an app within your Firebase instance for Android, with package name com.yourcompany.fireredux. - In the Firebase console, in the settings of your Android app, add your SHA-1 key by clicking "Add Fingerprint". - Run the following command to get your SHA-1 key: - - `keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore` - - Follow instructions to download google-services.json, and place it into fire_redux/android/app/. - - Set the defaultConfig.applicationID in `android/app/build.gradle` to match - android_client_info.package_name in `google-services.json`, e.g. `com.yourcompany.fireredux`. - This is the name of your Android app in Firebase. - Package values must match between files `android/app/src/main/AndroidManifest.xml` and - `android/app/src/main/java/yourcompany/redux/MainActivity.java`, e.g. `com.yourcompany.fireredux`. - - - To connect to Firestore be sure your project is using Gradle 4.1 and Android Studio Gradle plugin 3.0.1. - If you are creating a new Flutter project, then this should already be set up properly. - If not, then follow these - [upgrades steps](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). - You will need to edit these files: `android/gradle/wrapper/gradle-wrapper.properties`, - `android/build.gradle`, and `android/app/build.gradle`. - - - Add google-service plugin to `android/build.gradle` under buildscript.dependencies: - - `classpath 'com.google.gms:google-services:3.1.0'`. - - - Apply this plugin to `android/app/build.gradle` by adding this to the end of the file: - - `apply plugin: 'com.google.gms.google-services'` - - - Add the following to `android/build.gradle` under allprojects.repositories: - - ` maven { - url "https://jitpack.io" - }` - -4) For iOS: - - - Create an app within your Firebase instance for iOS, with package name com.yourcompany.fireredux. - - Follow instructions to download GoogleService-Info.plist, and place it into fire_redux/ios/Runner. - - Open fire_redux/ios/Runner/Info.plist. Locate the CFBundleURLSchemes key. - The second item in the array value of this key is specific to the Firebase instance. - Replace it with the value for REVERSED_CLIENT_ID from GoogleService-Info.plist. It will look like this: - ```$xslt - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - com.yourcompany.firereduxios - com.googleusercontent.apps.631911544122-jtjdk7lmrqoiup15hofsceegpfn0dhj6 - - - - ``` - - To successfully run on iOS, it may be necessary to manually copy GoogleService-Info.plist - to your Xcode project. After you attempt a run/build of your project on iOS open Xcode by - clicking on fire_redux/ios/Runner.xcworkspace. When your project is open in Xcode, then copy - GoogleService-Info.plist to Runner/Runner folder. Then your project should run on iOS. - - -## Summary of changes made to the original redux sample repo. - - 1. Added `firebase_flutter_repository` to the `pubspec.yaml`, removed `todos_repository_simple`. - 2. Limit the responsibility of the Reducers since Firestore is the source of truth. - 3. Change the Middleware to work with a `UserRepository` for auth and `ReactiveTodosRepository` to listen for changes to the Todos and push updates to Firestore. - 4. Add Actions for Login and to Start Listening to Firestore. It's not needed in this app, but we could also add an action to stop listening to Firestore. - -## Testing - -For integration testing, we need to pass through a Mock `UserRepository` and Mock `ReactiveTodosRepository`. - - 1. `flutter test` will run all unit tests. - * `flutter test test/selectors_test.dart` for selectors unit testing. - * `flutter test test/reducer_test.dart` for reducers unit testing. - * `flutter test test/middleware_test.dart` for middleware unit testing. - 2. `flutter drive --target=test_driver/todo_app.dart` to run integrations test. Integrations tests are unchanged from the original redux repo. diff --git a/firestore_redux/android/.gitignore b/firestore_redux/android/.gitignore deleted file mode 100644 index bc2100d8..00000000 --- a/firestore_redux/android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java diff --git a/firestore_redux/android/app/build.gradle b/firestore_redux/android/app/build.gradle deleted file mode 100644 index e449cb88..00000000 --- a/firestore_redux/android/app/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.firestore_redux" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - multiDexEnabled true - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/firestore_redux/android/app/src/debug/AndroidManifest.xml b/firestore_redux/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index c30df743..00000000 --- a/firestore_redux/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/firestore_redux/android/app/src/main/AndroidManifest.xml b/firestore_redux/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index a6e1e1bf..00000000 --- a/firestore_redux/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - diff --git a/firestore_redux/android/app/src/main/kotlin/com/example/firestore_redux/MainActivity.kt b/firestore_redux/android/app/src/main/kotlin/com/example/firestore_redux/MainActivity.kt deleted file mode 100644 index a7de940a..00000000 --- a/firestore_redux/android/app/src/main/kotlin/com/example/firestore_redux/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.firestore_redux - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/firestore_redux/android/app/src/main/res/drawable/launch_background.xml b/firestore_redux/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f8..00000000 --- a/firestore_redux/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/firestore_redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/firestore_redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1345 zcmV-H1-|-;P)uTd_0!V%xTj^~RVz+qQkNle+bG&pJ+~-@fF1He>(R5VVes7IOD>*8pj zqheUWHU<|V7e)gem4GGsJ2+v4(LhI>IrhY(VKk7Fi2z<|iTM&34b&ar1j_BVBq$oF zT^5{XaPhSSL<7+saIV4Zza$tMh~~j%l#2}#2o2PNi5m@Wr%DhsPz$TzUdrtp34jJ_ znQ1?5aIsS|cnuV=f=vu2gk<0vD8TK`l#6|mL2IA@7ekLTU=2jMm@OHo2BH8yg9lB? zAT>}wfRiW}AIb-*2s!8_Z`J0aS1@qoHy_}lPQz#RkE4~2! z=(Z>XqZkO0{yAgr%jc0Yq~kU?n{xX%#oOwWjsPbUd6WU+HDJRj(Jz;3Pq)p5ODGd- zRpPkY*4@5D9@RitX39y?ua@Yk&>~x0XE2eZ_RJA;@u^#pK)8}JPmFl^&f?(|+~wXw zlx{1_o=Py400@z``6J9n3hk?`&=Zu2?MiW&7)&sg2ncJBf3{icIA1y&P$u@O?8x0O z8w6ANfUwMLs0l^6(Xzk}43I58|S(7_2STsgb3Bd;<* zSWm4;S)us6*-BXm&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPV zl> zWXCr#aj@#Fvz(Q*M}0@G_VI6yJOZd~Pq;2> zG2)cDYOmwaEd5xdfMri1N}~YDGjb-}H20OVqDYXKgR~o0O;}k+t{Ul{4}K_j9IRSv zxx3v|cI4{w)Uu@Ys(@Ztn-O+?{~M&L=c#`Z%N?oK8Ww*1pQL%Dy5z}!lGc^q%5iX( zB~2vNEl(~>T3hyWhlL+ome`jZ8I6QEPyDr|C8@qaq{OwQz}f%Uvg8*?P03TslUJAE zK;HNC-|6?0nwBS)Cl!sfCZpi#6&bP@T^i~6H5v9p>yj@bH8^;1uQ~>2b^5MaYqCxw zI(Sbyg!J61w0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjf DcgJkH diff --git a/firestore_redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/firestore_redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmV;Q17Q4#P)D0gcVJI$m~tEjv=UM0#+Kd63T)IDVl(l zvY&{|q6jFO0HMLQ#b81S0Dyr|HVC0a6X*nBRzW5d1L+np_qFwC#87rFp==?-)R%y< zj}1(H>?1n?7#kA)tAlU}k(G^l;H@(IuS$Va5|bYvz0=YlGw+9MB+BA>!SR-IE8k(W zss)NAY>RFfF#X*6g#X0HZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBj zZgsP_v6)r@tiJZ$7xW!}mA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RJk``vY$`OxQ*%)P`Z0=`!sm4&|R=Oet|5ds3V>euZ%{TI`LDr?o5zeocvw?J`)O?{o8l!*psNt8|JhsSNR;46T0IM8_na3x~KezsqT zA1)v=Tdr^0D3gl99S1hI0M-S=rog)?z5}}8-E0I${?adS$(Wh&R(v76xwin`PYdu0 zbg#FpqHc-yTEGq6N5U1uCc~TY1qhFY5`Nu@Qolq$Te~WudyfS}=OJKd)eEj2I=&db zQoWbz*OVxUtbEH)$su9rG#CuOwSk+4xXJ=oEs^2_sj&J)NjyPGI}P`CaMH$ab=~d2G%a1mdZ8P~vz1 z6J=A4mv>~R@d~_|Kw~d$&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2iJAov!lV07GM*+YPcV?WX<0QCSHeyl2P0#=U002ovPDHLkV1k9w Bv-l9 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 diff --git a/firestore_redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/firestore_redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d5614ac831d924f5e49e16a3d4391be8964fcdf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4067 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 - - - diff --git a/firestore_redux/android/app/src/profile/AndroidManifest.xml b/firestore_redux/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index c30df743..00000000 --- a/firestore_redux/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/firestore_redux/android/build.gradle b/firestore_redux/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/firestore_redux/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/firestore_redux/android/gradle.properties b/firestore_redux/android/gradle.properties deleted file mode 100644 index 38c8d454..00000000 --- a/firestore_redux/android/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true -android.useAndroidX=true -android.enableJetifier=true diff --git a/firestore_redux/android/gradle/wrapper/gradle-wrapper.properties b/firestore_redux/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 296b146b..00000000 --- a/firestore_redux/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/firestore_redux/android/settings.gradle b/firestore_redux/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/firestore_redux/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/firestore_redux/ios/.gitignore b/firestore_redux/ios/.gitignore deleted file mode 100644 index e96ef602..00000000 --- a/firestore_redux/ios/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/firestore_redux/ios/Flutter/AppFrameworkInfo.plist b/firestore_redux/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 6b4c0f78..00000000 --- a/firestore_redux/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/firestore_redux/ios/Flutter/Debug.xcconfig b/firestore_redux/ios/Flutter/Debug.xcconfig deleted file mode 100644 index e8efba11..00000000 --- a/firestore_redux/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/firestore_redux/ios/Flutter/Release.xcconfig b/firestore_redux/ios/Flutter/Release.xcconfig deleted file mode 100644 index 399e9340..00000000 --- a/firestore_redux/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/firestore_redux/ios/Podfile b/firestore_redux/ios/Podfile deleted file mode 100644 index b30a428b..00000000 --- a/firestore_redux/ios/Podfile +++ /dev/null @@ -1,90 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '9.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; - end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end - end - generated_key_values -end - -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; - - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' - - # Plugin Pods - - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') - end -end - -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end - end -end diff --git a/firestore_redux/ios/Runner.xcodeproj/project.pbxproj b/firestore_redux/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 7eaece8c..00000000 --- a/firestore_redux/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,588 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 3DC6C12F0C8DFDEB46BBFD03 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3A9BD3573C89AFE68E3A21F6 /* Pods_Runner.framework */; }; - 4EEE3E9123C493B90065A5A2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4EEE3E9023C493B80065A5A2 /* GoogleService-Info.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 32DF067C14C43DCE0F4AD703 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 3A9BD3573C89AFE68E3A21F6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 4EEE3E9023C493B80065A5A2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8C698F6ECF0154F865792E58 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E51BC1BAB575DF40A23CCE8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - 3DC6C12F0C8DFDEB46BBFD03 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 14C49F13D6D71163E2B1EDBD /* Frameworks */ = { - isa = PBXGroup; - children = ( - 3A9BD3573C89AFE68E3A21F6 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 6535F9FC413878FBAB23E085 /* Pods */ = { - isa = PBXGroup; - children = ( - 8C698F6ECF0154F865792E58 /* Pods-Runner.debug.xcconfig */, - 32DF067C14C43DCE0F4AD703 /* Pods-Runner.release.xcconfig */, - 9E51BC1BAB575DF40A23CCE8 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B80C3931E831B6300D905FE /* App.framework */, - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - 6535F9FC413878FBAB23E085 /* Pods */, - 14C49F13D6D71163E2B1EDBD /* Frameworks */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 4EEE3E9023C493B80065A5A2 /* GoogleService-Info.plist */, - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - DA25481C73BA8ED396688A6A /* [CP] Check Pods Manifest.lock */, - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 733B60DD2D2D2F65ABD9C4F3 /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 4EEE3E9123C493B90065A5A2 /* GoogleService-Info.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 733B60DD2D2D2F65ABD9C4F3 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; - DA25481C73BA8ED396688A6A /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.firestoreRedux; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.firestoreRedux; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.firestoreRedux; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/firestore_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/firestore_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/firestore_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/firestore_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/firestore_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a28140cf..00000000 --- a/firestore_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/firestore_redux/ios/Runner.xcworkspace/contents.xcworkspacedata b/firestore_redux/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14..00000000 --- a/firestore_redux/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/firestore_redux/ios/Runner/AppDelegate.swift b/firestore_redux/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a..00000000 --- a/firestore_redux/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d22f10b2..00000000 --- a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 980e5ad64bb0fd4a9c2c6506e9b811ffea9dd64b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)5QXpJpN(w?YkRkYwc_j#m|(3>!PrLIwlTJ6&Ufo}SH`I1$#eR?RVOWIzMsU) zrK2WI$*4hFGG^Q^9@T@8zu5)!Yz6I>${V_+j`Ok!^L)v;38fNcW`cbs^X>&xhbk?f zvS`XCEg(wS59HzvL0zJ3#-=Tswu302VRN>z3)sQt+#O8gBeP#+>JsI%uI=(!2l6=C zdFI%h9c;z_@g>lFVht7cT-%~z-i?ZdJmoU8IkPWPB^k`Ff#(xjg!dpSwLVm8y$Z@~ zqGHj@W>6!4&#i3X;(Y3is=Eq_sMPsUsrRE%>p_jmL_k5`*hG^t2U&6%yTe|1|lg*UW~p>+@q!E^s3OEa=e6Ud^0-fp0g z&B!j%6y4G^MmBL1O_42jA+woHwxTJ#r4io)FE___=bK_XXo_uveG`pQHs>9%se`%% x4TYA}o~Ajur)^2@Z#O6Q@F3(a-Ow$UJqP2R#rz($lm7q!002ovPDHLkV1fcFS>pfz diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index fd870289028b0d1ba6565d9f29fd42fab6bad5f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1591 zcmV-72FUq|P)Ffwcl%S_9_!a48Hv5l6Yg}=#nG6Dbu zla|r7Yb`^I)3=8fNzyX31gi{#!9`fl5R44#X&qjkmK_)Y1VY=0(Q$itxzaMci~?7J zyKH1wcMh7|XLASHg%J|-qf@pXF{&*iD^$-ij0`JyIjqHchvApQ$T03AS7awf2>H=E zVoaL{qYTWnjvBB;p1}%aY1}c541*Qen)UNz#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv; z?q3&e<7axnT(Y$hS>ykYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU9?SY zl0CLylXe)H&){aXGcRRIWPSb@&S>s!or|_aBlZ8FP zV=ahX*88G;#zXBh+X`g1q>VF-4C5|rhyFP)t?X1u_xvxC)$SMVvtD`w4~z_(bj-oX za4o|cKD-zpU*!;ev<20?M;dTJ^JP9;w8MaBVeEme`4cNaiXR?Rv*-WOoSK_wEc2pc z-cOwi3S{=X1Mm9MT7(KGr|8k7U|zR_3oZl*bk_W}NrOHzyJh_`l^26BGOXp>TXEVu zJ10BOU&GnjzWP3*b16ifOF@&4MdhE2FVJHzy+WUu;gYJ19-f7f;h*_ZbaZ}UtK1Xm za>H)G1;cm&;DU?v!V53ZQ!l+tpPk*LuH~=>H3wVyQz%QP7niom-IFL{&bkws3(7B6 zB8po6>4YjMdFI8J=u0!}B=1?l9E|yY#fx-td38B?=O3{Gc1U%R7f}wNr1@>T z^;xf;(1*M^?6XM*M&^PZUgF7`^l^qI?pn#Go_dO&d+s?D(o!rI2_@(EkI5y=dFttd z6|w-V;0y!N=gm`Z6WshW8CqCGkt<71?HrJU=lV4C!WwV}1JUa(P@k_k-woy|o6B8U z(4S0`!;{Ax^;)bl42m!^3`q0`O6UFl5=r{}MYw_QG$|?nTy7;&P*D93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+j ztOL979@$MeqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^ z$nd*OllQ^Xj1cnUL-EQrXRKOvMl0lCoFE2E)EO*kykCWpVe8!{^UAJxr6M~qLY6c6 zVB)yL6+fslctIn41|!2N!`5tX9`O4sA50u{FhXK}fDdI)uDOzj)2_rJNq896!Dlcs zjC=@Nvu<9IJermr7y%IK_+awrx+`_~H!f?qlZSa8Ja_V9{+g7*5v<@dSY_CnmEFA4 pojS_%e#4bI{@VvLN7oqv!0V&tCp*)&!{Pt{002ovPDHLkV1k)(4H5tV diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2506 zcmV;*2{rbKP)Z*FU!m{%*@P8VRsLNIdO-bn8LBcq}8jNvvE!9=H589 zS1q{F% z25_7w7rzc6_W!D9OuwF9IP!hcRh72%UTx5Ve2G1JF&R7ItnWOsxG;yFhdp@D-v_7k z&fdOmnO#2ee(9>pVtq010kWwNld+dE83*wHn9tfxBT2o#zpv%fYznjAHBY*l!u|2m zSf4hSMNGyg$1xwm-`9dY9-PW*J`_Ic{nAyH#QK&>FZOFo43jar5Bt!M3$uIOIUl>v zb9b5X3#kSD-cQS%Eqv6xMP zE1Yp6YpT=?fig_Kh{=PPj6E)4GIp-ZS?ri68GBT|J*YdD^7L~SW~Sf$s_d;n?I9a6 z86O}SlW`cF=fmCqsn)n2%B|DQU3h+l{eDQ{AqgImvG6u_z#8VP?>ut&`^aBtAJJ25 zoAf%WFtdD7GVuJ{!xnPrg0dHT=P{^0c=^-k#J?H&4rDa;IKAL**R;Bg+qyI7Dl?6?0iCgVW32mf*?q1Sfz z=n}fHUmsBNpsPIOBJ3dV4(?VgItv@Fu4~cXjdeNJ4Q-=X zkTvW(53?5w_f601lYAaaEi%u8TyU>q(bA3&^YwMj`h}NX(m!eGVBcXuOvdhcvL<%! ze>SspqOvb!mSs*L%6rh56AHih;)|A_H@E4+{TDD9A2AP;%Z=;jb0;eMNOFOB*o`eL zkL(y1%$N88ldrF9p|It5P46;5*0JRRCYv=(#zJ-Hgl=74E4rxsvheoAymLMogSucY z<-wA%;3_Qqt>G;*$gX227ciKa_|rX8dLX}1blF`~_UegQ<_E&Pw(wC<7~tyqm@cY8;W|KtwlU@|6uqkmeb zH@Ax}D?b_e=>MVDRK+0{Qa zGY;R24>BfWFnyGF7!ufW!Q|`fW4>kK-q-7OZRfb`_vPm!8NIr@S9IC=?H&Eyp`=&P zL*9tV*omA~}ZeJWoy5HD~$=HdkNnt5A zV=2cVg&Qu0Dhp4(@~Zx7`-nY%PkLGJpP=mE>Zblof3o0x)7Z;>GuWdSyY~yq+njVF zYd0LDFg*Y2YdV&i)hGFMdBe;2{~qZ!dO)F8jg@FX&V%1x1y9 zZDCDUN(sv10C;;)A5}S!)_zo&&EmhbwEC8O`st_jLk~TqpM3I3ie6EAZEY=7*{A37 z@3|k7aoF{g#$;tTvvCj~X8hM!8zsS(y!F;w^}`Q8OhG>aOW&W(9o&}@lW}2o7i1r{ zkPmw(`^6AsF&SI_5^J|b;kxUt(+@oGKww!|U0uDRsQm86&8Zc6nB0ZQ*v$|oW5GR7 zNeD}o;V+juY+3o&_`wGslz(MIm4$phuleklvj3V{4u3x;8O;oh`a>Hk*|{ z*FAE+h3xweWDa|nj5&)z5khf!UgL;iGIRXWnM_9C7*F`zF^}D_R>XVBN(NM4_Nc;S z?6V$;hcC@P*}n}=1i8bDSr6nA{Jx=_VVZ=F3f?YGp6iMhm%|?7UV2u9_DTw{2qZ!K}_qW+HdAyG7cc*d6O|2^A=3T($S!#tom$9pNdZ9^Kv*c znLivji9I5iJb?>y@#}7ipAXTgT>i7E+$n=n@)sdGx%LeyTSyJ|A%X*8Zw`~Odp{;m zVKR2Vhb-L;N>BtLl32UN8@4LQ0Zhg|2dW zA%Z~$U>6B&k+WEkHSFAPXJhuAV83+vgVrB5C?J3(I=%6Y==6G?K@gqBu#N>;!=Z>` zGKPTr$*hCCT{;*P00F@JA6atqAGI?Zc?v}^8M}Gk_sd)5&GL4GazXG#e(b7EZI(u6 zHm|NtZp0!p8}aDO=2CQK!(M`250o_w;5bhXyML)RxoO_A5i{?*THYvcHK?QbFVbTr U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 03ab8a84f141a4464654d46362eb539fffd7d067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 zcmV+{1k?M8P)eFxfFw`eszE*1VZKxuv6X zwN+Es?jA2G?-={Ew0+ztZ67ns+Q+E$?=gapO^5uxW8A>K^6uFZ;e1z5Oq^BGG4Xg= z=Y&<(F+ogur?L%an0H{sxU!yc7x&SlN-Mf%9xv~jk_RV=?M9hqfL*rDBwJ-RK##zy zk^g!{&$Lz1Jxxx^*?RV#Gv52M2YsTlZ|>9bo*4oaY^HaX4KQPKX1mifOV2JxVH>$y z**o{CsO+CJD*NUMRP@a$+nLSGYd-b<2S$pDhlf-)O!=h?vnH0lp57Z8` zqzvkZS7>N+kMw7uRDHh$%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54Kn*U zoHuDuFlVB}wbZ#UYQ}?9Jr)3j{A}j{)k*X3&N-X&WwQ}Vnnm(@GrM`Y8z7q?EK4U0 z()sDv-{|%BUaG^AV^%vEQU=#A#Au_q?^!syoug*^8y#7S15;rIN`Lv~7kcOKE^3-I z^ci87eaA|Yvik>~h25K3s>A-Iy{~^OYNsPqHys6p%%$MtzdET^7UOrFM}iqL4-Y*H ze_h`rzRT9LsGEtAVm8L5iqHRSr?V%5R67&JoL-2m)4|b^XW_S*9lnQel=Up?=Mu!! z&Bj%!&ewnZMHfy5>AmDO9eEVu_YYIs_MN#n;0)_omd+xhP>3@MgvKRGagLi+U6Pbm_Kpb)6yVzEegg~LO7D6)lbj)N>+S(9a}fH=d?$>LZn zrpk2E=``&W3Un6=<$j~wccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<% z4sM!FflYEjE^SgUojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N z7qWEQ5KW=oPn$zKbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}b7I+&mT=Z;4)0NOc$e6& zXgi=qne#5&Yu`ejz-x`=A8(1~s3npmww>8F%@Jigvpx1X^Sm{deO&Onn&_<7ME>!% zSix$E<>W9A@CUGMIKz5Yb2i{T+$dPMj~?NC=VXc{tqJqf*0^c3#Z9v{ULYMgW9!*< m-j?{s#GTfZ`6=$|J^unddhQb0Cw0#N0000oW>oh3TRvgw{P=1#Z!?x zn}<4_r7Pm;=Y`DtGT(NS>r;5D@nGKZ`u{t6qW0CJC+ZrH9j{FtJ6^YX^mwhD|Xp)~1f0tZURa<(;bkKYgRc>_+H9{>i38M^DyQ+j3%uW;lVN7JG5` zC`W9@WE=_hdgs?y>zggc2O&#AZ|^NfPt`r;F9xjD;{e@@m18#JAY*W6xOe%^lXJ|^ zJK6B0cCZ*1LO|a6jstn88fuT7Y7j*a;!MV5>?eHx&7G$m^3K;Euo%dO2hR-Nns=(P z_NbN&;V33!IE~3TBL4Ha*M0A^UEE(;L&!Vb^i*a*qo~Q)N3Q*PAtqxlx`v$`_kQhU zF-q`5{@J!e$IdiKo&_tq8GB((9ngr$*xl1kcKeS*n z-jy#mbnp5e?P&7OxBQ=8?&T~d;|%$jjN{FN@SkY1Gw(-jgEG6evFkkTX!6gszM6mj zx+r-#jB}33*quQ>hsoG?AG4zG|6Ny7Hn+EBabr^p=^FmeeD3pJTCtm* zBCVK=UHrwFyHE2U>mL<9TGY3nTyVav(G*;0O>uE<+OV5*uE(11fwk9C6Lh5LuJ0+h z(3Y}A+gI~1wn-!|U_Y#R_j}e0F1BMghn_FA`J=HJwL{US2JkFemb$Dd)2=4WbDDS-|^?02V`n(BUeX? z=A3T|uXf9RQGm&qY%j%R?C$+W+psLy$4B^3)N`NZTGqDcwI0s`*fq>POvbrkmUljU zzbh>(n_IG%&(h|m=Y5`{MYX*FnsGp_{W@bs*RW?lIsW=@`o?5qYkMypDe9l^*c8?E zW*0PLMK}EZKI|JTrjY;SK%oR9ul&UK$D3`+HR(G73ad?1g0d`il% zb@M&-zVgz@w8Z^PuW!f~+mbo&Fh%wKvKw0T{rBIOr#?CV05~+Cy0yaW;F4 zD*FBZzuGP(oQ=SPttm;atj8{Sd3H(4o89+e@B8&_Sc}@wJgnGFIGZWz z!aI=F`U{q|n9}QZ0a|c2M=ABvRlm*=hp!~dS1k*)1`B{%K4KcuF4gEgdZfW93E8GA4#tvYOE2lCDZF^X1K zS4(>`Epb07XP`O-)5EJHN3d-{_x| z(ssRfOwl*sos7vi7g|(@c4Q!{gS_Kkg_M2s%{S$_=bn=nUwlzUMn)*O=dzRQoAQO; z2`#DjsmYl4U^3?IID^gDly%&YaK^I!)rH#s`c?ef-~J{~J@pi&LYbVL3@tmdwjux5 zGr^tvN@?(ZHASHllW~S$UZ~3!ee%gC<B5QU1~ zX{_w2Y-cJhiS7woY&yz(FYX?NS!yzN_i9IDzeq7C7v&i2(A%wtZ;Xc))IZD3!zoF) zGqTKJH;3Lw4qu4>iV4){>)bQB_%NseBWBpy?7_%X!F6pUm<^Le$~Lj|Cz+V%E1b~oW}%) zdF+KXx5ypVf9b#BmI^IO4!@5ac77gv_k(uSq9!r4P@NdeY{roo#9=I8Cu7b=o9ExZ zfJ5hNH;d7d=8ojjA>B|pv>=#_ZwBG_`5#W+%Y5x-FH(QJk zLMV5St{kiyUHQMN^vbJMBdd*7>E%>adUe%)EdY8UCS#@2X6$DFdEJBE{VRHRO5dVy g(zodwEoL|V4a+}H#QmXIKmY&$07*qoM6N<$g7_o&$^ZZW diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index f47613ee46814496f40d58ae909b756976d765e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcmV+}2GRM6P)oxL5Jl&M-bdt-nJLW7%*;tqD$LBxWM;P4BxYtABr|k+c6=+frM0{PRUMscPfyPc zN0@yoyQfc{?VNnEqH9uPrz*Op_Rn@r5@&*uVG9`URCG@6@%|KBtLUD5QNGCt01$L4 z`sPnmbWe?(?Vch@MfWs}3@f@|Q*dT^zM^MlM0Q{V5C~PhTFu#>nF0^-l4(m|mW>RX zor5y-Z0;btFhZh#)ymerTCt*cmW<56$gqN!!zLJK7=9c^hB1p=kewJI|_8U}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@Df?W z2J2MA$b1Huqni0OkwZ6C(4R1wv+aqh5neuGS0GCx!whEGD#I4$k?TfnG?ZCIFJnRM zWH2wPM;%l>YF8jjGgX{nWEius6`IGLG`n0Rv(KA>r0IT9J?5mpalpv1PR%%s3?F9L zg!866?Nf+=-x!ezKGY9`!N zJE=fs|3C1qYv%)$+1@Er4F%JtJ4DT-hd}M2ZyeI-{4ty1cY2=k!pN{Gx7ot9y1PeK zJ}>x_hx?3uMD4VXYNx$AHB-v>4@}aRzy3}akJ{Alj)L#P$nb-%7;WzDTPpW;Jb&aH zT+ojP02iF1pMUSp|=@GNZLSznTN_75zTdq0xJJ;P39Q7eC#4JZ!t z1B0rdSlvfrx|%*Xc`4| ze)#zpx_M+?KQqkp0$B2KJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^ z|CC;{RBm&BpC0kbav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA z0W0_q6h`KP3lRbhhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_UL9;QoS{=;0%|5GcFh< z(6Ffd;0OvH&D-NMOV_v(hBs7>!N@RXNi;0+;Zoed10!15asvYclt?5f zpU)p#F1)ovmpPMaH$M)m41+j~OhON~gbs51LWJJy>?tYs%{SjrXJ@BgE*_8T5RG;|v?ojGSc-AUUX-H`Km3q>`Q;as11Kr~x7|=~p}0-w zIezzr zXq;LcY233w7Dk2viDpl3ui2d=Ns~JZmvDQTlJf6MTO>v;YL<6^99(`s?!kb&i55>j z&4CnoSf`0IEV;v%F)cYAimF)#Mutnk?lSMScylSy>R-{Cz00J?!^ki)-Qmv}N)862 zI4_~a2P5a%W%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QG zL`$%6vL&!eI(`_e!0Ivsx2ZGE%BBQhQ`BALVleaE}Uo$6^pIG0<|!$AOtJ;4Av=~FT%!boGo)-xh-5M$WDxq<#akCTQzOr z^&*1@O2HW$8CDrKW-IprzhCHxtk*C?qJM#NliMfSq8lS^kqu(xW!My)nao=}hYyKv zj>ry-00;&;qMIk%VjC}VS*<;~k>-ngt-P3jCRnivEBFjn88&9=cHY?@+f4I*tu40o gVn<^0BqIR$3#s8JH79+r6951J07*qoM6N<$f+ET2fdBvi diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 42315c6dc1260f60b9de72e58f1fd4789c1f488a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�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 diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 45537513df37c45e8074c7c131c61cec2eac66ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 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 diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 6360ea17a408801185f000acaded313519da49b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9605 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7082 zcmX9@c{~&T8=rF+rqdi575bKA___+qUF0Yg6}F*L)X05p<}NGxDrbxoGQL;MjBf_>tYzr>Xq$_6N=o0Du2rHD{xom>(Px;hTf3Q3L1}6$u2=ii z;hGaoSNcB3W%`CLa~nH7=kKhp|IvqP5nqQFzon&}+>6pL#}*8%JSqM&&ojOTKdwEn zly9-E*};tA`HFeL0`pTKN|@`Sz#?vbc! zzov1o2U11u(Fj`uG|2aa_!M;MuD0#J4`r209`+mAz^Ev!dQqh;7einE~+r-2lz;V&kO-a zOROfTuX;6Fp!LnwN6&{ZMJtZ)Ri4yNF`SOP{rgfk`v7zW8L>5+^6%# zm&!YdE6eOD2zw=IR3G)?#-7QlsuD`zx+uAggTTTkbcEsq zbEM*0$yc5$9uarcA8T0u7QIadj+E1gFLaF|V%mW66T)|@BFx_d|s%X9HPc4n#AaixZ)BjhJtC`ZmFrCe!0dT4u&Uovy- za`up<{5p%Oabc%n^!qrNlJ|QEvC=7{fCq2jp4gpy^6*Q%nGxGf@;}p=vMI)>R=EBcUl$2%-c-y&zn4>meYdb;Iq9F7SGm%yu)heuD-dmPEr5V zro!kZLJ#@+;S&n@`S$qUsTxKdSDVV~Vf;=X*s-R?nt0`Mtgz^>@ik@;q~^oY zOQEC(&jCB`V5`RAWFz^du${D@XeRSKJJ>pgN6GJY*xc0#8A=qg4lMKP{AJ4x^^z&E zAud$kktFNb$4^H$V~^UtbARyvwRkCh4yK+y=H;yAw-{Endo$p2&XC2%?XAy60}ggO z7LRQRS9eQaJU&S83LT)hzCc0_?A9%hF`vK`4B}N=tHl%}6>f|7=uo^sb5pcX7LMyk zPkW=da(P&(cZ&YZdoroM`7W23$9>UsOW$Ary<*z!$g(s)H}_pA#&O|5^hR??Tt7{PZh=@ z)WPG+_IY-!$!o#5(P4XJ!YMH%0*doXyv0?2V)#J}_J6&ND%lls-*r$RJx3=v(n#e& zH;;)bgC)_hq^`rhQ1j8#p_&k^2l>yk+a6zTLX}Y(Y+~>@4&Wt2OD2YAZH9}M$N_p( zmDpZEZw8v1QO~43VFXr98Y6RI{D<;cg}}Y1k($s)$H=46sW3XBx%i*+f|gy6a!CfO z_t6=#DL-%u)h8xg)&2uZ-w`sEGz3dD=Z1t8eG)FiG(vi!G4A>jOMH=|DA!S!NLMI| zf)Hh?k2{)X&!zaE&d(A%8I5Vfi8&odA|xPgUWU)<^f|a62)VMNnl}HilJP=ol>Z1s(K)= zdr8j)v2R3hWL=|J)#)E6auQ>Y%&a1$P%eRy$aYT{ktJqiPpX@eZtpESN*=u$X;i+Z z?88=UDDrgNkRT;ckQ&Rn=aQkYaT$97(Te*R0T?-?8C)?X!Hxh7g6?o1g%$lJ;0Ujf zQ4wUv@$KU-^XX6BQp8sz37W2T_?)~fb~%AXnRGOzp9!WPBa&u+qTlle8|#&Gd1p=u zQg}?gKdV>NH@kvSpUdUXveRTg6$Y}YoelpHu0=@=wR9drK^MFyS^)~ioI)jJXpFc* zox0-nRM;a*GM|HP5LwULkiN^hr$rMN#$e7LByw@ER~Mi>elyF&{Ki;|O=_Xgp*N;w zw~#e3vN%vsv_f;k`|`(}tQ>n9+H*_AZz%q-S z1hd|~FelE)W0u9lv4-4zW>;`!ET zmqYh7lP2i-q*~#L<4F8{*Jn>a+wYp>{+@7yeK0jWq8Bt)ZR*rrX$*_(u=g}kgbw>^=yl4`FYN29YK|y0vV?p7b5xz+ zT6T1M2v_oDWSu(qAnWO5C75vHHhA|!tZ2ShM$sJtC_~+hv{s@2`o)l5jUPnASZn)%NmRVT*sz6;-x>ID8rb@J||u0 zvO18dac)PH6G#y7lV6|FR}hp$1qn}`Y1WaE51D?@Qzmks^E56-U|m#LFRgJWT0}99 z5ZxF-cY|+vDnGh=K}!O`K=)P5*+AV-2=+f%YjcnoX~-_YJ%}q*I_bFK0H5!+gt^M| zDuYZbqTo>quFk}_x3^~H$x_>DT4W9`;e4CG%JBMMrAf);TNaKnhv*!+M`k?@T_lyGoSmDsd{X%pw9^QdSymt zXKOQSB_p%I>xWhjeU&YlIyx%pk4}CH>+m@8bTUx>ZuH1&L%og8Xt^-X+ZE9O0StY> zNW(nsqZWs@$~g!LA5BQ&WrpgV7I3)*+53W?OcEBOnvJlz)fidT)Lr&<9 zm_ejD(l^YwI|>N{2m6{zmFoZeBt!!waz^fjdg^Qz6P_H%9EmqrW(;CKbqRX)Vfo@S zV>RN$o{0+X#ORKo^Blx~OG{9+$h&M2kRGLsJ6CNa5^*q~Wu_=c+h2v#&O}u_0l0aQ z+<%WD6N0#7mkUpMei8CFv^V4~l^GwB{?z_$OyqLrLIpv{>oEbw$OIA+v$X|ZUBUCw zsjMEMKLFq6v$JANXO6S>zBWy#V7Tl~?U#zA8@c8X_Xhy!9(eO!!<)V-$1E;JmX@9B znP(X7eti3PIdJ+rEp%{$$Q7!(*zXp`L*M}j|0liTcNURT0NNeu`J;*&S6}bq{jPs0 zBah}Y>IffrU6(ns)1T;9!{#&R<{4#>STswZ(mFsGh9je25ZXps5W2M^>_du)Lib90#hehghp zQ_DJNC?L-WZ+8VN%kE@nFk5(m#ud`n>dsETjcb}OUm{a&saYcX)Iw}%+|#1x_j|*G%C9YT+yFnfHySC=mBjxH#Kw zcN+Uncav8V7&od(R8my&jgu0)ecYfbMEPyYlm`*|l>y``-~aqt_@dTi(cktP!1h!O zufc!ur{shjgYhnnBDu#qoD$M>p5}jhePwKfF{U6Au?Y^b`|BE9El5Y*F_hJT&L+xc=Ctb6A-uW z!d=Mw_wNr5PuV&+I2_;JYkFt~pXOy%TznDhrvaM}TZc!9rN#jt{T6DJLQRyIN46V7 zyqEg22jwyn`^UzlO1hf6#P3ifaekpjt^XntA{fvSv*?v8H6Tj94P@@UjQ7S=lUo_m zhCJ=vIBoRh3(qEgYwbkaGP^bWFjhnO)X&-L2>Dis?yi;-Z=8O8+5MDzWmi|1JO|HR z7{;8>xa7FVthI5{6(#q@{hy@`cT4_cK+8jH`M#qKeZUUhA2c0dx#Iupv6``^B`~w( z9G1-W@GIZR(6ssytMMREM~L$b%z3{T?V0na+}iSG)sXEy%Eo2t7s5A7zV0wym$zWKiaML}CO{wB zQCQ1uiJ4xHgTIn(ItaXDHxc1m0ukF?%Cwny=)av%>@_-_j(i8R8P?J^9T^Is=z?Uv zSI`@`q-f-)_G#e>YzCB?;fxazR2DfSBKiHBnny}@%g_;-L>u}_Az@LJ&e`7>xU|t| z3Ju@n(bm?+p+t1YMn@qX+P{c4t1tv7ZF@K8jf3V0bS%aRJ>_8yTbS(YG=UjNjTli0PFKT=%YY^B~r zJ8H<7@T1WN>~=<6kS~H^n$Kn#sla&U4vkQLW<9jv!%?~0fx_NkY(6%j`0 zl&wMwouL#vqpL|qtaDft*g|N;V;tDI^7lfxbKgJ{T#g#HM%2#}llQS5+Z2dDox-M5 zqNepL>*PY073#U1eP&`f*Ww1uz~EY0{#PvCwx7PA1sCzk*GCC5Uft0ME@A7Ye>n+p zw=^AFB`G*3dsb)S;ddv)Hk$kylR-N{uO~L&BRxG6wok!#@wLkjmzgchJO@bc$HBxJ zt|u&}naASR?R1h~YsgHLN4M{WD$`+BwPvCf+Lb#qlet#4mhgU>uMuJ&&E-^))`V}h zK*n_d+VZYGoYtG5hz_Ob4cT%cC-l6k>VhB;M8`2;n5|%&Qc2K*IwptUQ@%;q}H2!$1>A-<5-#aupX#SqH`SUP8bxZr4$1rl|X&Y<+3IC>%^ykQ#q?4%fvhP2KdYkO&@Ey z_mm)A9wJ~$-4=_XRQrH67CRr9&H%{HVeE-B0#Aes&4gR)AP^l$mcmHDiD{29?^HR1 zoA>zH68l}2ZN{=_u9&xki#X_#klF8o?O*ck$@lK^r_4Z~PxyW+6Jn`uID*_uh8=gI zXzt54TyRXYoQRq#xv=|{ZM{)HBnI;U-!#ZbE{_(wJ+6g9d~t-h?+bc`#cK4~B{x0{ z;ZAExmA`)ERd^xA#(2e%x*s3Usj9g~GeNsX0j!$a8oxyDc=OKcN{u}I?y)?3Q|StO zubGQsmUm8R77p(|SQCg@x(-s&PYwDODlxu;Q+(C!;apW;@m%ebC)g4G#b~2BXX8*} z&#(Ha^FcgOMkqmwuoqo^gv}1fW>49q7J23RUAV+MywObH)}YB>Y)+wMiGf9f5vZh5 zfwlegcToBFR+F8YFkF2=;$ZA&H_(~$AnVtVi-D(4oaUG9tj?~^mA*u-m|LJ5G1xH? zp`FUpJEnReZR%WNXwdW|cfI)79bV{N@W&?Ns%jOpfPok8%V&N+eUk_y=HT;K;aIr( z&!Wt0j}Nw}0io{PKcVvoHzT8J*R6vMLRa~BAQY6#Gsu@)AsHFRNm|Y`nL(sg?lRJV zkDhHlRoyAx$2DXBV%AVMpy{Q$8yoeu)&f#yL{UBK&G7!|z3$9u*R{gioO3P%2S37% z%v;6YkEqAcQpZZb)o;Zd1LRjc{ih_G?J+KDI|9`5Fm(s(m-HV{tSg~%XC!P~N#CHZ zhgYml)PD-tc|F;t-vF{R9JiaIL0f@`rt~|52}Eb7hD9cuH4|r%H-GT&Jtdog@--AO z%@1HG&(D|7(F@pLZX6i~c79VzS!CTuBhU%jz2&-kcQKsOHV*OMd;cQI!$7-dd{Gz$ zPVK8^qsImtXwA&krKNJ3fmaUvyqz%fW1%ehds43jw@)c?TRpPOY|GOE+L143WvG~3 zJ%!eMR7Ti!-Cx?#2Q&Kt1a%_qO&f%X8b2I4lq)5Y9t>VLD9SG%VZ=8^2Gbr5d$dl% zS6O3ycQDz{cC796@vot+izqDmwhw9+&}+W}g1Dh9#dQfVAVtbbO5n?LzTK*NsWLRK864 zE1m{+ezy#If&D2+W$rO=VFbd0HQ%~EgOHH?6e5fngc&ce&zMk$u}-rxSXsqit`6W)v6VF2tzyhf8k(Sa}XiI@Kn3cyFU3H7Fn zow=@NMv}`*G~$@_e-|v;-ZuzL4}l@Q!zxiSZ7U*to#k*7LuiTaq4WN_$%H@tCwSELovi?#);DO=eab--=ZH7HKd2gMR(2QC9&7Xts6k@9V~7djo1OeN~c> zWEnwYN%SEWB%PD4l+Gi-jGzC;b{auoZjRFv%_y;!h7in zZ80tU6{R!mcYGGPP^WT=lc$kUSxyw9{KvHPWKg;tPI%ir6XW9bQf|T3$uFUgsmNPn zPf7F1`w^1%;fK1RLemV4V1oG+PAHhZVoW!=dk$|;xv&~NcjkB!bv1$(`g^E+d*oNX z<-f=JJ%xgMRTel2eH zpzNJ~u=9aIp{HPupG)#V_LlK8gQi(nchnterdzM}*eib>a7&&En16W zB+nMV41!(hsb;g6JjZ%VcRkv)f4OJ5h)eGPDo?69s{<2f`>)V;%Fvwlrq7L~ZO3^W z(q*tV<%*MAPydy(b7}ji_3P8gpINJ=Nf@6-BBDLElYoub?j9f84Q4EE(TdticzdY9 zX|7iF4;laTd7w|`YT24^EsKWF^Nsc_jYw|dfGHaOPfKfvn(%jMm+kI*U0Ge@`aS1K zZ(2)hQeLi34qW=yH~$>ef9B>gDf|tyqw_=~T@D`$JxUlb5BC}LO}6M*#lq%`;kdZBZ7GN2M4%nZfjO%f{gkfr9@=g diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/firestore_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2f..00000000 --- a/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b..00000000 --- a/firestore_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -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. \ No newline at end of file diff --git a/firestore_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard b/firestore_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7..00000000 --- a/firestore_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/firestore_redux/ios/Runner/Base.lproj/Main.storyboard b/firestore_redux/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516..00000000 --- a/firestore_redux/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/firestore_redux/ios/Runner/GoogleService-Info.plist b/firestore_redux/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index c8cc9bf9..00000000 --- a/firestore_redux/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - AD_UNIT_ID_FOR_BANNER_TEST - ca-app-pub-9999999999999999/9999999999 - AD_UNIT_ID_FOR_INTERSTITIAL_TEST - ca-app-pub-9999999999999999/9999999999 - CLIENT_ID - xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - API_KEY - xxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx - GCM_SENDER_ID - 999999999999 - PLIST_VERSION - 1 - BUNDLE_ID - com.fluttersamples.bloc - PROJECT_ID - xxxxxxxxxxxxx-99999 - STORAGE_BUCKET - xxxxxxxxxxxxx-99999.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 9:999999999999:ios:xxxxxxxxxxxxxxxx - DATABASE_URL - https://xxxxxxxxxxxxx-99999.firebaseio.com - - \ No newline at end of file diff --git a/firestore_redux/ios/Runner/Info.plist b/firestore_redux/ios/Runner/Info.plist deleted file mode 100644 index 4572c6e7..00000000 --- a/firestore_redux/ios/Runner/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - firestore_redux - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/firestore_redux/ios/Runner/Runner-Bridging-Header.h b/firestore_redux/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 7335fdf9..00000000 --- a/firestore_redux/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/firestore_redux/lib/actions/actions.dart b/firestore_redux/lib/actions/actions.dart deleted file mode 100644 index 617c6865..00000000 --- a/firestore_redux/lib/actions/actions.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/models/visibility_filter.dart'; - -class ClearCompletedAction {} - -class ToggleAllAction { - ToggleAllAction(); - - @override - String toString() { - return 'ToggleAllAction{}'; - } -} - -class LoadTodosAction { - final List todos; - - LoadTodosAction(this.todos); - - @override - String toString() { - return 'LoadTodosAction{todos: $todos}'; - } -} - -class UpdateTodoAction { - final String id; - final Todo updatedTodo; - - UpdateTodoAction(this.id, this.updatedTodo); - - @override - String toString() { - return 'UpdateTodoAction{id: $id, updatedTodo: $updatedTodo}'; - } -} - -class DeleteTodoAction { - final String id; - - DeleteTodoAction(this.id); - - @override - String toString() { - return 'DeleteTodoAction{id: $id}'; - } -} - -class AddTodoAction { - final Todo todo; - - AddTodoAction(this.todo); - - @override - String toString() { - return 'AddTodoAction{todo: $todo}'; - } -} - -class InitAppAction { - @override - String toString() { - return 'InitAppAction{}'; - } -} - -class ConnectToDataSourceAction { - @override - String toString() { - return 'ConnectToDataSourceAction{}'; - } -} - -class UpdateFilterAction { - final VisibilityFilter newFilter; - - UpdateFilterAction(this.newFilter); - - @override - String toString() { - return 'UpdateFilterAction{newFilter: $newFilter}'; - } -} - -class UpdateTabAction { - final AppTab newTab; - - UpdateTabAction(this.newTab); - - @override - String toString() { - return 'UpdateTabAction{newTab: $newTab}'; - } -} diff --git a/firestore_redux/lib/containers/active_tab.dart b/firestore_redux/lib/containers/active_tab.dart deleted file mode 100644 index a9ef33b7..00000000 --- a/firestore_redux/lib/containers/active_tab.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class ActiveTab extends StatelessWidget { - final ViewModelBuilder builder; - - ActiveTab({Key key, @required this.builder}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - distinct: true, - converter: (Store store) => store.state.activeTab, - builder: builder, - ); - } -} diff --git a/firestore_redux/lib/containers/add_todo.dart b/firestore_redux/lib/containers/add_todo.dart deleted file mode 100644 index 63d5bc79..00000000 --- a/firestore_redux/lib/containers/add_todo.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/add_edit_screen.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class AddTodo extends StatelessWidget { - AddTodo({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - converter: (Store store) { - return (task, note) { - store.dispatch(AddTodoAction(Todo(task, note: note))); - }; - }, - builder: (BuildContext context, OnSaveCallback onSave) { - return AddEditScreen( - key: ArchSampleKeys.addTodoScreen, - onSave: onSave, - isEditing: false, - ); - }, - ); - } -} diff --git a/firestore_redux/lib/containers/app_loading.dart b/firestore_redux/lib/containers/app_loading.dart deleted file mode 100644 index 5303811c..00000000 --- a/firestore_redux/lib/containers/app_loading.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class AppLoading extends StatelessWidget { - final Function(BuildContext context, bool isLoading) builder; - - AppLoading({Key key, @required this.builder}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - distinct: true, - converter: (Store store) => isLoadingSelector(store.state), - builder: builder, - ); - } -} diff --git a/firestore_redux/lib/containers/edit_todo.dart b/firestore_redux/lib/containers/edit_todo.dart deleted file mode 100644 index 8f69788d..00000000 --- a/firestore_redux/lib/containers/edit_todo.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/add_edit_screen.dart'; -import 'package:flutter/widgets.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class EditTodo extends StatelessWidget { - final Todo todo; - - EditTodo({this.todo, Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - converter: (Store store) { - return (task, note) { - store.dispatch( - UpdateTodoAction(todo.id, todo.copyWith(task: task, note: note)), - ); - }; - }, - builder: (BuildContext context, OnSaveCallback onSave) { - return AddEditScreen( - key: ArchSampleKeys.editTodoScreen, - onSave: onSave, - isEditing: true, - todo: todo, - ); - }, - ); - } -} diff --git a/firestore_redux/lib/containers/extra_actions_container.dart b/firestore_redux/lib/containers/extra_actions_container.dart deleted file mode 100644 index 01b05cb5..00000000 --- a/firestore_redux/lib/containers/extra_actions_container.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/extra_actions_button.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class ExtraActionsContainer extends StatelessWidget { - ExtraActionsContainer({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - distinct: true, - converter: _ViewModel.fromStore, - builder: (context, vm) { - return ExtraActionsButton( - allComplete: vm.allComplete, - onSelected: vm.onActionSelected, - ); - }, - ); - } -} - -class _ViewModel { - final Function(ExtraAction) onActionSelected; - final bool allComplete; - - _ViewModel({@required this.onActionSelected, @required this.allComplete}); - - static _ViewModel fromStore(Store store) { - return _ViewModel( - onActionSelected: (action) { - if (action == ExtraAction.clearCompleted) { - store.dispatch(ClearCompletedAction()); - } else if (action == ExtraAction.toggleAllComplete) { - store.dispatch(ToggleAllAction()); - } - }, - allComplete: allCompleteSelector(todosSelector(store.state)), - ); - } - - @override - bool operator ==(Object other) => - identical(this, other) || - other is _ViewModel && - runtimeType == other.runtimeType && - allComplete == other.allComplete; - - @override - int get hashCode => allComplete.hashCode; -} diff --git a/firestore_redux/lib/containers/filter_selector.dart b/firestore_redux/lib/containers/filter_selector.dart deleted file mode 100644 index 87b30e45..00000000 --- a/firestore_redux/lib/containers/filter_selector.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/filter_button.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class FilterSelector extends StatelessWidget { - final bool visible; - - FilterSelector({Key key, @required this.visible}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - distinct: true, - converter: _ViewModel.fromStore, - builder: (context, vm) { - return FilterButton( - visible: visible, - activeFilter: vm.activeFilter, - onSelected: vm.onFilterSelected, - ); - }, - ); - } -} - -class _ViewModel { - final Function(VisibilityFilter) onFilterSelected; - final VisibilityFilter activeFilter; - - _ViewModel({@required this.onFilterSelected, @required this.activeFilter}); - - static _ViewModel fromStore(Store store) { - return _ViewModel( - onFilterSelected: (filter) { - store.dispatch(UpdateFilterAction(filter)); - }, - activeFilter: store.state.activeFilter, - ); - } - - @override - bool operator ==(Object other) => - identical(this, other) || - other is _ViewModel && - runtimeType == other.runtimeType && - activeFilter == other.activeFilter; - - @override - int get hashCode => activeFilter.hashCode; -} diff --git a/firestore_redux/lib/containers/filtered_todos.dart b/firestore_redux/lib/containers/filtered_todos.dart deleted file mode 100644 index ce83c849..00000000 --- a/firestore_redux/lib/containers/filtered_todos.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/todo_list.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class FilteredTodos extends StatelessWidget { - FilteredTodos({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - converter: _ViewModel.fromStore, - builder: (context, vm) { - return TodoList( - todos: vm.todos, - onCheckboxChanged: vm.onCheckboxChanged, - onRemove: vm.onRemove, - onUndoRemove: vm.onUndoRemove, - ); - }, - ); - } -} - -class _ViewModel { - final List todos; - final bool loading; - final Function(Todo, bool) onCheckboxChanged; - final Function(Todo) onRemove; - final Function(Todo) onUndoRemove; - - _ViewModel({ - @required this.todos, - @required this.loading, - @required this.onCheckboxChanged, - @required this.onRemove, - @required this.onUndoRemove, - }); - - static _ViewModel fromStore(Store store) { - return _ViewModel( - todos: filteredTodosSelector( - todosSelector(store.state), - activeFilterSelector(store.state), - ), - loading: store.state.isLoading, - onCheckboxChanged: (todo, complete) { - store.dispatch( - UpdateTodoAction(todo.id, todo.copyWith(complete: !todo.complete)), - ); - }, - onRemove: (todo) { - store.dispatch(DeleteTodoAction(todo.id)); - }, - onUndoRemove: (todo) { - store.dispatch(AddTodoAction(todo)); - }, - ); - } -} diff --git a/firestore_redux/lib/containers/stats.dart b/firestore_redux/lib/containers/stats.dart deleted file mode 100644 index c039e7ed..00000000 --- a/firestore_redux/lib/containers/stats.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/stats_counter.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class Stats extends StatelessWidget { - Stats({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - converter: _ViewModel.fromStore, - builder: (context, vm) { - return StatsCounter( - numActive: vm.numActive, - numCompleted: vm.numCompleted, - ); - }, - ); - } -} - -class _ViewModel { - final int numCompleted; - final int numActive; - - _ViewModel({@required this.numCompleted, @required this.numActive}); - - static _ViewModel fromStore(Store store) { - return _ViewModel( - numActive: numActiveSelector(todosSelector(store.state)), - numCompleted: numCompletedSelector(todosSelector(store.state)), - ); - } -} diff --git a/firestore_redux/lib/containers/tab_selector.dart b/firestore_redux/lib/containers/tab_selector.dart deleted file mode 100644 index 430b83f9..00000000 --- a/firestore_redux/lib/containers/tab_selector.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class TabSelector extends StatelessWidget { - TabSelector({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - distinct: true, - converter: _ViewModel.fromStore, - builder: (context, vm) { - return BottomNavigationBar( - key: ArchSampleKeys.tabs, - currentIndex: AppTab.values.indexOf(vm.activeTab), - onTap: vm.onTabSelected, - items: AppTab.values.map((tab) { - return BottomNavigationBarItem( - icon: Icon( - tab == AppTab.todos ? Icons.list : Icons.show_chart, - key: tab == AppTab.todos - ? ArchSampleKeys.todoTab - : ArchSampleKeys.statsTab, - ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), - ); - }).toList(), - ); - }, - ); - } -} - -class _ViewModel { - final AppTab activeTab; - final Function(int) onTabSelected; - - _ViewModel({@required this.activeTab, @required this.onTabSelected}); - - static _ViewModel fromStore(Store store) { - return _ViewModel( - activeTab: store.state.activeTab, - onTabSelected: (index) { - store.dispatch(UpdateTabAction((AppTab.values[index]))); - }, - ); - } - - @override - bool operator ==(Object other) => - identical(this, other) || - other is _ViewModel && - runtimeType == other.runtimeType && - activeTab == other.activeTab; - - @override - int get hashCode => activeTab.hashCode; -} diff --git a/firestore_redux/lib/containers/todo_details.dart b/firestore_redux/lib/containers/todo_details.dart deleted file mode 100644 index eb89b80d..00000000 --- a/firestore_redux/lib/containers/todo_details.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/details_screen.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; - -class TodoDetails extends StatelessWidget { - final String id; - - TodoDetails({Key key, @required this.id}) : super(key: key); - - @override - Widget build(BuildContext context) { - return StoreConnector( - ignoreChange: (state) => todoSelector(state.todos, id).isNotPresent, - converter: (Store store) { - return _ViewModel.from(store, id); - }, - builder: (context, vm) { - return DetailsScreen( - todo: vm.todo, - onDelete: vm.onDelete, - toggleCompleted: vm.toggleCompleted, - ); - }, - ); - } -} - -class _ViewModel { - final Todo todo; - final Function onDelete; - final Function(bool) toggleCompleted; - - _ViewModel({ - @required this.todo, - @required this.onDelete, - @required this.toggleCompleted, - }); - - factory _ViewModel.from(Store store, String id) { - final todo = todoSelector(todosSelector(store.state), id).value; - - return _ViewModel( - todo: todo, - onDelete: () => store.dispatch(DeleteTodoAction(todo.id)), - toggleCompleted: (isComplete) { - store.dispatch( - UpdateTodoAction(todo.id, todo.copyWith(complete: isComplete)), - ); - }, - ); - } -} diff --git a/firestore_redux/lib/localization.dart b/firestore_redux/lib/localization.dart deleted file mode 100644 index 3091a041..00000000 --- a/firestore_redux/lib/localization.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -class FirestoreReduxLocalizations { - static FirestoreReduxLocalizations of(BuildContext context) { - return Localizations.of( - context, - FirestoreReduxLocalizations, - ); - } - - String get appTitle => 'Firestore Redux Example'; -} - -class FirestoreReduxLocalizationsDelegate - extends LocalizationsDelegate { - @override - Future load(Locale locale) => - Future(() => FirestoreReduxLocalizations()); - - @override - bool shouldReload(FirestoreReduxLocalizationsDelegate old) => false; - - @override - bool isSupported(Locale locale) => - locale.languageCode.toLowerCase().contains('en'); -} diff --git a/firestore_redux/lib/main.dart b/firestore_redux/lib/main.dart deleted file mode 100644 index 7aa16de6..00000000 --- a/firestore_redux/lib/main.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/containers/add_todo.dart'; -import 'package:fire_redux_sample/localization.dart'; -import 'package:fire_redux_sample/middleware/store_todos_middleware.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/home_screen.dart'; -import 'package:fire_redux_sample/reducers/app_state_reducer.dart'; -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; -import 'package:firebase_flutter_repository/user_repository.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_redux/flutter_redux.dart'; -import 'package:redux/redux.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -void main() { - WidgetsFlutterBinding.ensureInitialized(); - - runApp(ReduxApp()); -} - -class ReduxApp extends StatelessWidget { - final Store store; - - ReduxApp({ - Key key, - ReactiveTodosRepository todosRepository, - UserRepository userRepository, - }) : store = Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware( - todosRepository ?? - FirestoreReactiveTodosRepository(Firestore.instance), - userRepository ?? FirebaseUserRepository(FirebaseAuth.instance), - ), - ), - super(key: key) { - store.dispatch(InitAppAction()); - } - - @override - Widget build(BuildContext context) { - return StoreProvider( - store: store, - child: MaterialApp( - onGenerateTitle: (context) => - FirestoreReduxLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FirestoreReduxLocalizationsDelegate(), - ], - routes: { - ArchSampleRoutes.home: (context) => HomeScreen(), - ArchSampleRoutes.addTodo: (context) => AddTodo(), - }, - ), - ); - } -} diff --git a/firestore_redux/lib/middleware/store_todos_middleware.dart b/firestore_redux/lib/middleware/store_todos_middleware.dart deleted file mode 100644 index b2054039..00000000 --- a/firestore_redux/lib/middleware/store_todos_middleware.dart +++ /dev/null @@ -1,131 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:redux/redux.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -List> createStoreTodosMiddleware( - ReactiveTodosRepository todosRepository, - UserRepository userRepository, -) { - return [ - TypedMiddleware(_firestoreSignIn(userRepository)), - TypedMiddleware( - _firestoreConnect(todosRepository), - ), - TypedMiddleware( - _firestoreSaveNewTodo(todosRepository), - ), - TypedMiddleware( - _firestoreDeleteTodo(todosRepository), - ), - TypedMiddleware( - _firestoreUpdateTodo(todosRepository), - ), - TypedMiddleware( - _firestoreToggleAll(todosRepository), - ), - TypedMiddleware( - _firestoreClearCompleted(todosRepository), - ), - ]; -} - -void Function(Store store, InitAppAction action, NextDispatcher next) -_firestoreSignIn(UserRepository repository) { - return (store, action, next) { - next(action); - - repository.login().then((_) { - store.dispatch(ConnectToDataSourceAction()); - }); - }; -} - -void Function( - Store store, - ConnectToDataSourceAction action, - NextDispatcher next, -) -_firestoreConnect(ReactiveTodosRepository repository) { - return (store, action, next) { - next(action); - - repository.todos().listen((todos) { - store.dispatch(LoadTodosAction(todos.map(Todo.fromEntity).toList())); - }); - }; -} - -void Function(Store store, AddTodoAction action, NextDispatcher next) -_firestoreSaveNewTodo(ReactiveTodosRepository repository) { - return (store, action, next) { - next(action); - repository.addNewTodo(action.todo.toEntity()); - }; -} - -void Function( - Store store, - DeleteTodoAction action, - NextDispatcher next, -) -_firestoreDeleteTodo(ReactiveTodosRepository repository) { - return (store, action, next) { - next(action); - repository.deleteTodo([action.id]); - }; -} - -void Function( - Store store, - UpdateTodoAction action, - NextDispatcher next, -) -_firestoreUpdateTodo(ReactiveTodosRepository repository) { - return (store, action, next) { - next(action); - repository.updateTodo(action.updatedTodo.toEntity()); - }; -} - -void Function( - Store store, - ToggleAllAction action, - NextDispatcher next, -) -_firestoreToggleAll(ReactiveTodosRepository repository) { - return (store, action, next) { - next(action); - var todos = todosSelector(store.state); - - for (var todo in todos) { - if (allCompleteSelector(todos)) { - if (todo.complete) { - repository.updateTodo(todo.copyWith(complete: false).toEntity()); - } - } else { - if (!todo.complete) { - repository.updateTodo(todo.copyWith(complete: true).toEntity()); - } - } - } - }; -} - -void Function( - Store store, - ClearCompletedAction action, - NextDispatcher next, -) -_firestoreClearCompleted(ReactiveTodosRepository repository) { - return (store, action, next) { - next(action); - - repository.deleteTodo( - completeTodosSelector( - todosSelector(store.state), - ).map((todo) => todo.id).toList(), - ); - }; -} diff --git a/firestore_redux/lib/models/app_state.dart b/firestore_redux/lib/models/app_state.dart deleted file mode 100644 index 4b5c7490..00000000 --- a/firestore_redux/lib/models/app_state.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:meta/meta.dart'; - -@immutable -class AppState { - final bool isLoading; - final List todos; - final AppTab activeTab; - final VisibilityFilter activeFilter; - - AppState({ - this.isLoading = false, - this.todos = const [], - this.activeTab = AppTab.todos, - this.activeFilter = VisibilityFilter.all, - }); - - factory AppState.loading() => AppState(isLoading: true); - - AppState copyWith({ - bool isLoading, - List todos, - AppTab activeTab, - VisibilityFilter activeFilter, - }) { - return AppState( - isLoading: isLoading ?? this.isLoading, - todos: todos ?? this.todos, - activeTab: activeTab ?? this.activeTab, - activeFilter: activeFilter ?? this.activeFilter, - ); - } - - @override - int get hashCode => - isLoading.hashCode ^ - todos.hashCode ^ - activeTab.hashCode ^ - activeFilter.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is AppState && - runtimeType == other.runtimeType && - isLoading == other.isLoading && - todos == other.todos && - activeTab == other.activeTab && - activeFilter == other.activeFilter; - - @override - String toString() { - return 'AppState{isLoading: $isLoading, todos: $todos, activeTab: $activeTab, activeFilter: $activeFilter}'; - } -} diff --git a/firestore_redux/lib/models/app_tab.dart b/firestore_redux/lib/models/app_tab.dart deleted file mode 100644 index 8348dfcf..00000000 --- a/firestore_redux/lib/models/app_tab.dart +++ /dev/null @@ -1 +0,0 @@ -enum AppTab { todos, stats } diff --git a/firestore_redux/lib/models/extra_action.dart b/firestore_redux/lib/models/extra_action.dart deleted file mode 100644 index 4ca0c02b..00000000 --- a/firestore_redux/lib/models/extra_action.dart +++ /dev/null @@ -1 +0,0 @@ -enum ExtraAction { toggleAllComplete, clearCompleted } diff --git a/firestore_redux/lib/models/models.dart b/firestore_redux/lib/models/models.dart deleted file mode 100644 index e2e948c9..00000000 --- a/firestore_redux/lib/models/models.dart +++ /dev/null @@ -1,5 +0,0 @@ -export 'app_state.dart'; -export 'app_tab.dart'; -export 'extra_action.dart'; -export 'todo.dart'; -export 'visibility_filter.dart'; diff --git a/firestore_redux/lib/models/todo.dart b/firestore_redux/lib/models/todo.dart deleted file mode 100644 index 84dadd81..00000000 --- a/firestore_redux/lib/models/todo.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:meta/meta.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -@immutable -class Todo { - final bool complete; - final String id; - final String note; - final String task; - - Todo(this.task, {this.complete = false, String note = '', String id}) - : note = note ?? '', - id = id ?? Uuid().generateV4(); - - Todo copyWith({bool complete, String id, String note, String task}) { - return Todo( - task ?? this.task, - complete: complete ?? this.complete, - id: id ?? this.id, - note: note ?? this.note, - ); - } - - @override - int get hashCode => - complete.hashCode ^ task.hashCode ^ note.hashCode ^ id.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is Todo && - runtimeType == other.runtimeType && - complete == other.complete && - task == other.task && - note == other.note && - id == other.id; - - @override - String toString() { - return 'Todo{complete: $complete, task: $task, note: $note, id: $id}'; - } - - TodoEntity toEntity() { - return TodoEntity(task, id, note, complete); - } - - static Todo fromEntity(TodoEntity entity) { - return Todo( - entity.task, - complete: entity.complete ?? false, - note: entity.note, - id: entity.id ?? Uuid().generateV4(), - ); - } -} diff --git a/firestore_redux/lib/models/visibility_filter.dart b/firestore_redux/lib/models/visibility_filter.dart deleted file mode 100644 index a47beca1..00000000 --- a/firestore_redux/lib/models/visibility_filter.dart +++ /dev/null @@ -1 +0,0 @@ -enum VisibilityFilter { all, active, completed } diff --git a/firestore_redux/lib/presentation/add_edit_screen.dart b/firestore_redux/lib/presentation/add_edit_screen.dart deleted file mode 100644 index 7b9dbe5b..00000000 --- a/firestore_redux/lib/presentation/add_edit_screen.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -typedef OnSaveCallback = void Function(String task, String note); - -class AddEditScreen extends StatefulWidget { - final bool isEditing; - final OnSaveCallback onSave; - final Todo todo; - - AddEditScreen({ - Key key, - @required this.onSave, - @required this.isEditing, - this.todo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); - @override - _AddEditScreenState createState() => _AddEditScreenState(); -} - -class _AddEditScreenState extends State { - static final GlobalKey _formKey = GlobalKey(); - - String _task; - String _note; - - bool get isEditing => widget.isEditing; - - @override - Widget build(BuildContext context) { - final localizations = ArchSampleLocalizations.of(context); - final textTheme = Theme.of(context).textTheme; - - return Scaffold( - appBar: AppBar( - title: Text(isEditing ? localizations.editTodo : localizations.addTodo), - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: Form( - key: _formKey, - child: ListView( - children: [ - TextFormField( - initialValue: isEditing ? widget.todo.task : '', - key: ArchSampleKeys.taskField, - autofocus: !isEditing, - style: textTheme.titleLarge, - decoration: InputDecoration( - hintText: localizations.newTodoHint, - ), - validator: (val) { - return val.trim().isEmpty - ? localizations.emptyTodoError - : null; - }, - onSaved: (value) => _task = value, - ), - TextFormField( - initialValue: isEditing ? widget.todo.note : '', - key: ArchSampleKeys.noteField, - maxLines: 10, - style: textTheme.titleMedium, - decoration: InputDecoration(hintText: localizations.notesHint), - onSaved: (value) => _note = value, - ), - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - key: isEditing - ? ArchSampleKeys.saveTodoFab - : ArchSampleKeys.saveNewTodo, - tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, - child: Icon(isEditing ? Icons.check : Icons.add), - onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); - widget.onSave(_task, _note); - - Navigator.pop(context); - } - }, - ), - ); - } -} diff --git a/firestore_redux/lib/presentation/details_screen.dart b/firestore_redux/lib/presentation/details_screen.dart deleted file mode 100644 index cfb3a2bf..00000000 --- a/firestore_redux/lib/presentation/details_screen.dart +++ /dev/null @@ -1,97 +0,0 @@ -import 'package:fire_redux_sample/containers/edit_todo.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class DetailsScreen extends StatelessWidget { - final Todo todo; - final Function onDelete; - final Function(bool) toggleCompleted; - - DetailsScreen({ - Key key, - @required this.todo, - @required this.onDelete, - @required this.toggleCompleted, - }) : super(key: key ?? ArchSampleKeys.todoDetailsScreen); - - @override - Widget build(BuildContext context) { - final localizations = ArchSampleLocalizations.of(context); - - return Scaffold( - appBar: AppBar( - title: Text(localizations.todoDetails), - actions: [ - IconButton( - tooltip: localizations.deleteTodo, - key: ArchSampleKeys.deleteTodoButton, - icon: Icon(Icons.delete), - onPressed: () { - onDelete(); - Navigator.pop(context, todo); - }, - ), - ], - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: ListView( - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(right: 8.0), - child: Checkbox( - value: todo.complete, - onChanged: toggleCompleted, - ), - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Hero( - tag: '${todo.id}__heroTag', - child: Container( - width: MediaQuery.of(context).size.width, - padding: EdgeInsets.only(top: 8.0, bottom: 16.0), - child: Text( - todo.task, - key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headlineSmall, - ), - ), - ), - Text( - todo.note, - key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.titleMedium, - ), - ], - ), - ), - ], - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.editTodoFab, - tooltip: localizations.editTodo, - child: Icon(Icons.edit), - onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return EditTodo(todo: todo); - }, - ), - ); - }, - ), - ); - } -} diff --git a/firestore_redux/lib/presentation/extra_actions_button.dart b/firestore_redux/lib/presentation/extra_actions_button.dart deleted file mode 100644 index 10c28e8d..00000000 --- a/firestore_redux/lib/presentation/extra_actions_button.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class ExtraActionsButton extends StatelessWidget { - final PopupMenuItemSelected onSelected; - final bool allComplete; - - ExtraActionsButton({this.onSelected, this.allComplete = false, Key key}) - : super(key: ArchSampleKeys.extraActionsButton); - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - onSelected: onSelected, - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.toggleAll, - value: ExtraAction.toggleAllComplete, - child: Text( - allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.clearCompleted, - value: ExtraAction.clearCompleted, - child: Text(ArchSampleLocalizations.of(context).clearCompleted), - ), - ], - ); - } -} diff --git a/firestore_redux/lib/presentation/filter_button.dart b/firestore_redux/lib/presentation/filter_button.dart deleted file mode 100644 index 1ac040fe..00000000 --- a/firestore_redux/lib/presentation/filter_button.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class FilterButton extends StatelessWidget { - final PopupMenuItemSelected onSelected; - final VisibilityFilter activeFilter; - final bool visible; - - FilterButton({this.onSelected, this.activeFilter, this.visible, Key key}) - : super(key: key); - - @override - Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.bodyMedium; - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); - final button = _Button( - onSelected: onSelected, - activeFilter: activeFilter, - activeStyle: activeStyle, - defaultStyle: defaultStyle, - ); - - return AnimatedOpacity( - opacity: visible ? 1.0 : 0.0, - duration: Duration(milliseconds: 150), - child: visible ? button : IgnorePointer(child: button), - ); - } -} - -class _Button extends StatelessWidget { - const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); - - final PopupMenuItemSelected onSelected; - final VisibilityFilter activeFilter; - final TextStyle activeStyle; - final TextStyle defaultStyle; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - key: ArchSampleKeys.filterButton, - tooltip: ArchSampleLocalizations.of(context).filterTodos, - onSelected: onSelected, - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.allFilter, - value: VisibilityFilter.all, - child: Text( - ArchSampleLocalizations.of(context).showAll, - style: activeFilter == VisibilityFilter.all - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.activeFilter, - value: VisibilityFilter.active, - child: Text( - ArchSampleLocalizations.of(context).showActive, - style: activeFilter == VisibilityFilter.active - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.completedFilter, - value: VisibilityFilter.completed, - child: Text( - ArchSampleLocalizations.of(context).showCompleted, - style: activeFilter == VisibilityFilter.completed - ? activeStyle - : defaultStyle, - ), - ), - ], - icon: Icon(Icons.filter_list), - ); - } -} diff --git a/firestore_redux/lib/presentation/home_screen.dart b/firestore_redux/lib/presentation/home_screen.dart deleted file mode 100644 index 8b06f2c0..00000000 --- a/firestore_redux/lib/presentation/home_screen.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:fire_redux_sample/containers/active_tab.dart'; -import 'package:fire_redux_sample/containers/extra_actions_container.dart'; -import 'package:fire_redux_sample/containers/filter_selector.dart'; -import 'package:fire_redux_sample/containers/filtered_todos.dart'; -import 'package:fire_redux_sample/containers/stats.dart'; -import 'package:fire_redux_sample/containers/tab_selector.dart'; -import 'package:fire_redux_sample/localization.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class HomeScreen extends StatelessWidget { - HomeScreen() : super(key: ArchSampleKeys.homeScreen); - - @override - Widget build(BuildContext context) { - return ActiveTab( - builder: (BuildContext context, AppTab activeTab) { - return Scaffold( - appBar: AppBar( - title: Text(FirestoreReduxLocalizations.of(context).appTitle), - actions: [ - FilterSelector(visible: activeTab == AppTab.todos), - ExtraActionsContainer(), - ], - ), - body: activeTab == AppTab.todos ? FilteredTodos() : Stats(), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.addTodoFab, - onPressed: () { - Navigator.pushNamed(context, ArchSampleRoutes.addTodo); - }, - child: Icon(Icons.add), - tooltip: ArchSampleLocalizations.of(context).addTodo, - ), - bottomNavigationBar: TabSelector(), - ); - }, - ); - } -} diff --git a/firestore_redux/lib/presentation/loading_indicator.dart b/firestore_redux/lib/presentation/loading_indicator.dart deleted file mode 100644 index e9884bb8..00000000 --- a/firestore_redux/lib/presentation/loading_indicator.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/material.dart'; - -class LoadingIndicator extends StatelessWidget { - LoadingIndicator({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center(child: CircularProgressIndicator()); - } -} diff --git a/firestore_redux/lib/presentation/stats_counter.dart b/firestore_redux/lib/presentation/stats_counter.dart deleted file mode 100644 index 7c8d93db..00000000 --- a/firestore_redux/lib/presentation/stats_counter.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:fire_redux_sample/containers/app_loading.dart'; -import 'package:fire_redux_sample/presentation/loading_indicator.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class StatsCounter extends StatelessWidget { - final int numActive; - final int numCompleted; - - StatsCounter({@required this.numActive, @required this.numCompleted}); - - @override - Widget build(BuildContext context) { - return AppLoading( - builder: (context, loading) { - return loading - ? LoadingIndicator(key: Key('__statsLoading__')) - : _buildStats(context); - }, - ); - } - - Widget _buildStats(BuildContext context) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numCompleted', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numActive', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ], - ), - ); - } -} diff --git a/firestore_redux/lib/presentation/todo_item.dart b/firestore_redux/lib/presentation/todo_item.dart deleted file mode 100644 index 55e3b845..00000000 --- a/firestore_redux/lib/presentation/todo_item.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class TodoItem extends StatelessWidget { - final DismissDirectionCallback onDismissed; - final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; - final Todo todo; - - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, - }); - - @override - Widget build(BuildContext context) { - return Dismissible( - key: ArchSampleKeys.todoItem(todo.id), - onDismissed: onDismissed, - child: ListTile( - onTap: onTap, - leading: Checkbox( - key: ArchSampleKeys.todoItemCheckbox(todo.id), - value: todo.complete, - onChanged: onCheckboxChanged, - ), - title: Hero( - tag: '${todo.id}__heroTag', - child: Container( - width: MediaQuery.of(context).size.width, - child: Text( - todo.task, - key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.titleLarge, - ), - ), - ), - subtitle: Text( - todo.note, - key: ArchSampleKeys.todoItemNote(todo.id), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ); - } -} diff --git a/firestore_redux/lib/presentation/todo_list.dart b/firestore_redux/lib/presentation/todo_list.dart deleted file mode 100644 index 7a81bf27..00000000 --- a/firestore_redux/lib/presentation/todo_list.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:fire_redux_sample/containers/app_loading.dart'; -import 'package:fire_redux_sample/containers/todo_details.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/presentation/loading_indicator.dart'; -import 'package:fire_redux_sample/presentation/todo_item.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class TodoList extends StatelessWidget { - final List todos; - final Function(Todo, bool) onCheckboxChanged; - final Function(Todo) onRemove; - final Function(Todo) onUndoRemove; - - TodoList({ - Key key, - @required this.todos, - @required this.onCheckboxChanged, - @required this.onRemove, - @required this.onUndoRemove, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppLoading( - builder: (context, loading) { - return loading - ? LoadingIndicator(key: ArchSampleKeys.todosLoading) - : _buildListView(); - }, - ); - } - - ListView _buildListView() { - return ListView.builder( - key: ArchSampleKeys.todoList, - itemCount: todos.length, - itemBuilder: (BuildContext context, int index) { - final todo = todos[index]; - - return TodoItem( - todo: todo, - onDismissed: (direction) { - _removeTodo(context, todo); - }, - onTap: () => _onTodoTap(context, todo), - onCheckboxChanged: (complete) { - onCheckboxChanged(todo, complete); - }, - ); - }, - ); - } - - void _removeTodo(BuildContext context, Todo todo) { - onRemove(todo); - - Scaffold.of(context).showSnackBar( - SnackBar( - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () => onUndoRemove(todo), - ), - ), - ); - } - - void _onTodoTap(BuildContext context, Todo todo) { - Navigator.of(context) - .push(MaterialPageRoute(builder: (_) => TodoDetails(id: todo.id))) - .then((removedTodo) { - if (removedTodo != null) { - Scaffold.of(context).showSnackBar( - SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - onUndoRemove(todo); - }, - ), - ), - ); - } - }); - } -} diff --git a/firestore_redux/lib/presentation/typedefs.dart b/firestore_redux/lib/presentation/typedefs.dart deleted file mode 100644 index 04a5529e..00000000 --- a/firestore_redux/lib/presentation/typedefs.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; - -typedef TodoAdder = void Function(Todo todo); - -typedef TodoRemover = void Function(String id); - -typedef TodoUpdater = void Function(String id, Todo todo); diff --git a/firestore_redux/lib/reducers/app_state_reducer.dart b/firestore_redux/lib/reducers/app_state_reducer.dart deleted file mode 100644 index 9c94f4c2..00000000 --- a/firestore_redux/lib/reducers/app_state_reducer.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/reducers/loading_reducer.dart'; -import 'package:fire_redux_sample/reducers/tabs_reducer.dart'; -import 'package:fire_redux_sample/reducers/todos_reducer.dart'; -import 'package:fire_redux_sample/reducers/visibility_reducer.dart'; - -// We create the State reducer by combining many smaller reducers into one! -AppState appReducer(AppState state, action) { - return AppState( - isLoading: loadingReducer(state.isLoading, action), - todos: todosReducer(state.todos, action), - activeFilter: visibilityReducer(state.activeFilter, action), - activeTab: tabsReducer(state.activeTab, action), - ); -} diff --git a/firestore_redux/lib/reducers/loading_reducer.dart b/firestore_redux/lib/reducers/loading_reducer.dart deleted file mode 100644 index ef6b7295..00000000 --- a/firestore_redux/lib/reducers/loading_reducer.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:redux/redux.dart'; - -final loadingReducer = combineReducers([ - TypedReducer(_setLoaded), -]); - -bool _setLoaded(bool state, action) { - return false; -} diff --git a/firestore_redux/lib/reducers/tabs_reducer.dart b/firestore_redux/lib/reducers/tabs_reducer.dart deleted file mode 100644 index 7b572f5f..00000000 --- a/firestore_redux/lib/reducers/tabs_reducer.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:redux/redux.dart'; - -final tabsReducer = combineReducers([ - TypedReducer(_activeTabReducer), -]); - -AppTab _activeTabReducer(AppTab activeTab, UpdateTabAction action) { - return action.newTab; -} diff --git a/firestore_redux/lib/reducers/todos_reducer.dart b/firestore_redux/lib/reducers/todos_reducer.dart deleted file mode 100644 index df0b06d0..00000000 --- a/firestore_redux/lib/reducers/todos_reducer.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:redux/redux.dart'; - -final todosReducer = combineReducers>([ - TypedReducer, LoadTodosAction>(_setLoadedTodos), - TypedReducer, DeleteTodoAction>(_deleteTodo), -]); - -List _setLoadedTodos(List todos, LoadTodosAction action) { - return action.todos; -} - -List _deleteTodo(List todos, DeleteTodoAction action) { - return todos..removeWhere((todo) => todo.id == action.id); -} diff --git a/firestore_redux/lib/reducers/visibility_reducer.dart b/firestore_redux/lib/reducers/visibility_reducer.dart deleted file mode 100644 index fececea2..00000000 --- a/firestore_redux/lib/reducers/visibility_reducer.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:redux/redux.dart'; - -final visibilityReducer = combineReducers([ - TypedReducer(_activeFilterReducer), -]); - -VisibilityFilter _activeFilterReducer( - VisibilityFilter activeFilter, - UpdateFilterAction action, -) { - return action.newFilter; -} diff --git a/firestore_redux/lib/selectors/selectors.dart b/firestore_redux/lib/selectors/selectors.dart deleted file mode 100644 index f7e782ff..00000000 --- a/firestore_redux/lib/selectors/selectors.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -List todosSelector(AppState state) => state.todos; - -VisibilityFilter activeFilterSelector(AppState state) => state.activeFilter; - -AppTab activeTabSelector(AppState state) => state.activeTab; - -bool isLoadingSelector(AppState state) => state.isLoading; - -bool allCompleteSelector(List todos) => - todos.every((todo) => todo.complete); - -int numActiveSelector(List todos) => activeTodosSelector(todos).length; - -int numCompletedSelector(List todos) => - completeTodosSelector(todos).length; - -List activeTodosSelector(List todos) => - todos.where((todo) => !todo.complete).toList(); - -List completeTodosSelector(List todos) => - todos.where((todo) => todo.complete).toList(); - -List filteredTodosSelector( - List todos, - VisibilityFilter activeFilter, -) { - switch (activeFilter) { - case VisibilityFilter.active: - return activeTodosSelector(todos); - case VisibilityFilter.completed: - return completeTodosSelector(todos); - case VisibilityFilter.all: - default: - return todos; - } -} - -Optional todoSelector(List todos, String id) { - try { - return Optional.of(todos.firstWhere((todo) => todo.id == id)); - } catch (e) { - return Optional.absent(); - } -} diff --git a/firestore_redux/pubspec.yaml b/firestore_redux/pubspec.yaml deleted file mode 100644 index 6d15d4fb..00000000 --- a/firestore_redux/pubspec.yaml +++ /dev/null @@ -1,82 +0,0 @@ -name: fire_redux_sample -description: A new Flutter project. - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.1.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - meta: '>=1.1.0 <2.0.0' - redux: ^4.0.0 - flutter_redux: ^0.6.0 - todos_app_core: - path: ../todos_app_core - firebase_flutter_repository: - path: ../firebase_flutter_repository - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_driver: - sdk: flutter - test: - mockito: - integration_tests: - path: ../integration_tests - todos_repository_local_storage: - path: ../todos_repository_local_storage - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/firestore_redux/test/all_tests.dart b/firestore_redux/test/all_tests.dart deleted file mode 100644 index 53c95150..00000000 --- a/firestore_redux/test/all_tests.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'middleware_test.dart' as middleware; -import 'reducer_test.dart' as reducer; -import 'selectors_test.dart' as selector; - -void main() { - middleware.main(); - reducer.main(); - selector.main(); -} diff --git a/firestore_redux/test/middleware_test.dart b/firestore_redux/test/middleware_test.dart deleted file mode 100644 index b2ee01fc..00000000 --- a/firestore_redux/test/middleware_test.dart +++ /dev/null @@ -1,171 +0,0 @@ -import 'dart:async'; - -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/middleware/store_todos_middleware.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/reducers/app_state_reducer.dart'; -import 'package:flutter/foundation.dart'; -import 'package:mockito/mockito.dart'; -import 'package:redux/redux.dart'; -import 'package:test/test.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -class MockReactiveTodosRepository extends Mock - implements ReactiveTodosRepository {} - -class MockUserRepository extends Mock implements UserRepository {} - -class MockMiddleware extends Mock implements MiddlewareClass {} - -void main() { - group('Middleware', () { - test('should log in and start listening for changes', () { - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final captor = MockMiddleware(); - final store = Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware(todosRepository, userRepository) - ..add(captor), - ); - - when(userRepository.login()).thenAnswer((_) => SynchronousFuture(null)); - when( - todosRepository.todos(), - ).thenAnswer((_) => StreamController>().stream); - - store.dispatch(InitAppAction()); - - verify(userRepository.login()); - verify(todosRepository.todos()); - verify( - captor.call(any, TypeMatcher(), any) - as dynamic, - ); - }); - - test('should convert entities to todos', () async { - // ignore: close_sinks - final controller = StreamController>(sync: true); - final todo = Todo('A'); - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final captor = MockMiddleware(); - final store = Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware(todosRepository, userRepository) - ..add(captor), - ); - - when(todosRepository.todos()).thenAnswer((_) => controller.stream); - - store.dispatch(ConnectToDataSourceAction()); - controller.add([todo.toEntity()]); - - verify(captor.call(any, TypeMatcher(), any) as dynamic); - }); - - test('should send todos to the repository', () { - final todo = Todo('T'); - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final store = Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware(todosRepository, userRepository), - ); - - store.dispatch(AddTodoAction(todo)); - verify(todosRepository.addNewTodo(todo.toEntity())); - }); - - test('should clear the completed todos from the repository', () { - final todoA = Todo('A'); - final todoB = Todo('B', complete: true); - final todoC = Todo('C', complete: true); - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final store = Store( - appReducer, - initialState: AppState(todos: [todoA, todoB, todoC]), - middleware: createStoreTodosMiddleware(todosRepository, userRepository), - ); - - store.dispatch(ClearCompletedAction()); - - verify(todosRepository.deleteTodo([todoB.id, todoC.id])); - }); - - test('should inform the repository to toggle all todos active', () { - final todoA = Todo('A', complete: true); - final todoB = Todo('B', complete: true); - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final store = Store( - appReducer, - initialState: AppState(todos: [todoA, todoB]), - middleware: createStoreTodosMiddleware(todosRepository, userRepository), - ); - - store.dispatch(ToggleAllAction()); - - verify( - todosRepository.updateTodo(todoA.copyWith(complete: false).toEntity()), - ); - verify( - todosRepository.updateTodo(todoB.copyWith(complete: false).toEntity()), - ); - }); - - test('should inform the repository to toggle all todos complete', () { - final todoA = Todo('A'); - final todoB = Todo('B', complete: true); - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final store = Store( - appReducer, - initialState: AppState(todos: [todoA, todoB]), - middleware: createStoreTodosMiddleware(todosRepository, userRepository), - ); - - store.dispatch(ToggleAllAction()); - - verify( - todosRepository.updateTodo(todoA.copyWith(complete: true).toEntity()), - ); - }); - - test('should update a todo on firestore', () { - final todo = Todo('A'); - final update = todo.copyWith(task: 'B'); - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final store = Store( - appReducer, - initialState: AppState(todos: [todo]), - middleware: createStoreTodosMiddleware(todosRepository, userRepository), - ); - - store.dispatch(UpdateTodoAction(todo.id, update)); - - verify(todosRepository.updateTodo(update.toEntity())); - }); - - test('should delete a todo on firestore', () { - final todo = Todo('A'); - final todosRepository = MockReactiveTodosRepository(); - final userRepository = MockUserRepository(); - final store = Store( - appReducer, - initialState: AppState(todos: [todo]), - middleware: createStoreTodosMiddleware(todosRepository, userRepository), - ); - - store.dispatch(DeleteTodoAction(todo.id)); - - verify(todosRepository.deleteTodo([todo.id])); - }); - }); -} diff --git a/firestore_redux/test/reducer_test.dart b/firestore_redux/test/reducer_test.dart deleted file mode 100644 index 8d71f762..00000000 --- a/firestore_redux/test/reducer_test.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:fire_redux_sample/actions/actions.dart'; -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/reducers/app_state_reducer.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:redux/redux.dart'; -import 'package:test/test.dart'; - -void main() { - group('State Reducer', () { - test('should load todos into store', () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - final store = Store( - appReducer, - initialState: AppState.loading(), - ); - - expect(todosSelector(store.state), []); - - store.dispatch(LoadTodosAction(todos)); - - expect(todosSelector(store.state), todos); - }); - - test('should update the VisibilityFilter', () { - final store = Store( - appReducer, - initialState: AppState(activeFilter: VisibilityFilter.active), - ); - - store.dispatch(UpdateFilterAction(VisibilityFilter.completed)); - - expect(store.state.activeFilter, VisibilityFilter.completed); - }); - - test('should update the AppTab', () { - final store = Store( - appReducer, - initialState: AppState(activeTab: AppTab.todos), - ); - - store.dispatch(UpdateTabAction(AppTab.stats)); - - expect(store.state.activeTab, AppTab.stats); - }); - }); -} diff --git a/firestore_redux/test/selectors_test.dart b/firestore_redux/test/selectors_test.dart deleted file mode 100644 index 4c79541b..00000000 --- a/firestore_redux/test/selectors_test.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:fire_redux_sample/models/models.dart'; -import 'package:fire_redux_sample/selectors/selectors.dart'; -import 'package:quiver/core.dart'; -import 'package:test/test.dart'; - -void main() { - group('Selectors', () { - test('should list the active todos', () { - final todoA = Todo('a'); - final todoB = Todo('b'); - final todos = [todoA, todoB, Todo('c', complete: true)]; - - expect(activeTodosSelector(todos), [todoA, todoB]); - }); - - test('should calculate the number of active todos', () { - final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; - - expect(numActiveSelector(todos), 2); - }); - - test('should list the completed todos', () { - final todo = Todo('c', complete: true); - final todos = [Todo('a'), Todo('b'), todo]; - - expect(completeTodosSelector(todos), [todo]); - }); - - test('should calculate the number of completed todos', () { - final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; - - expect(numCompletedSelector(todos), 1); - }); - - test('should return all todos if the VisibilityFilter is all', () { - final todos = [Todo('a'), Todo('b'), Todo('c', complete: true)]; - - expect(filteredTodosSelector(todos, VisibilityFilter.all), todos); - }); - - test('should return active todos if the VisibilityFilter is active', () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - - expect(filteredTodosSelector(todos, VisibilityFilter.active), [ - todo1, - todo2, - ]); - }); - - test( - 'should return completed todos if the VisibilityFilter is completed', - () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - - expect(filteredTodosSelector(todos, VisibilityFilter.completed), [ - todo3, - ]); - }, - ); - - test('should return an Optional todo based on id', () { - final todo1 = Todo('a', id: '1'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - - expect(todoSelector(todos, '1'), Optional.of(todo1)); - }); - - test('should return an absent Optional if the id is not found', () { - final todo1 = Todo('a', id: '1'); - final todo2 = Todo('b'); - final todo3 = Todo('c', complete: true); - final todos = [todo1, todo2, todo3]; - - expect(todoSelector(todos, '2'), Optional.absent()); - }); - }); -} diff --git a/firestore_redux/test_driver/mock_reactive_repository.dart b/firestore_redux/test_driver/mock_reactive_repository.dart deleted file mode 100644 index 92b61c8c..00000000 --- a/firestore_redux/test_driver/mock_reactive_repository.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'dart:async'; - -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -class MockUserRepository implements UserRepository { - @override - Future login([delayAuth = const Duration(milliseconds: 200)]) { - return Future.delayed(delayAuth); - } -} - -class MockReactiveTodosRepository implements ReactiveTodosRepository { - // ignore: close_sinks - final controller = StreamController>(); - List _todos = []; - - @override - Future addNewTodo(TodoEntity newTodo) async { - _todos.add(newTodo); - controller.add(_todos); - } - - @override - Future> deleteTodo(List idList) async { - _todos.removeWhere((todo) => idList.contains(todo.id)); - controller.add(_todos); - - return []; - } - - @override - Stream> todos({webClient = const WebClient()}) async* { - _todos = await webClient.loadTodos(); - - yield _todos; - - await for (var latest in controller.stream) { - yield latest; - } - } - - @override - Future updateTodo(TodoEntity todo) async { - _todos[_todos.indexWhere((t) => t.id == todo.id)] = todo; - - controller.add(_todos); - } -} diff --git a/firestore_redux/test_driver/todo_app.dart b/firestore_redux/test_driver/todo_app.dart deleted file mode 100644 index 11ba816e..00000000 --- a/firestore_redux/test_driver/todo_app.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:fire_redux_sample/main.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_driver/driver_extension.dart'; - -import 'mock_reactive_repository.dart'; - -void main() { - enableFlutterDriverExtension(); - - runApp( - ReduxApp( - todosRepository: MockReactiveTodosRepository(), - userRepository: MockUserRepository(), - ), - ); -} diff --git a/firestore_redux/test_driver/todo_app_test.dart b/firestore_redux/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/firestore_redux/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} From caf8a6a5f0858097c755ca017584124985eb7d2c Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 19:45:15 +0100 Subject: [PATCH 55/89] Upgrade simple_blocs to latest version --- mobx/analysis_options.yaml | 6 + mobx/lib/details_screen.dart | 2 +- simple_blocs/.gitignore | 14 +- simple_blocs/CHANGELOG.md | 6 +- simple_blocs/README.md | 43 +++-- simple_blocs/analysis_options.yaml | 44 +++-- simple_blocs/lib/src/models/todo.dart | 11 +- simple_blocs/lib/src/todos_interactor.dart | 8 +- simple_blocs/lib/src/todos_list_bloc.dart | 1 - simple_blocs/pubspec.yaml | 12 +- simple_blocs/test/todos_bloc_test.dart | 107 ++++++----- simple_blocs/test/todos_bloc_test.mocks.dart | 176 +++++++++++++++++++ 12 files changed, 318 insertions(+), 112 deletions(-) create mode 100644 simple_blocs/test/todos_bloc_test.mocks.dart diff --git a/mobx/analysis_options.yaml b/mobx/analysis_options.yaml index 0d290213..8d2d02a1 100644 --- a/mobx/analysis_options.yaml +++ b/mobx/analysis_options.yaml @@ -9,6 +9,12 @@ # packages, and plugins designed to encourage good coding practices. include: package:flutter_lints/flutter.yaml +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + linter: # The lint rules applied to this project can be customized in the # section below to disable rules from the `package:flutter_lints/flutter.yaml` diff --git a/mobx/lib/details_screen.dart b/mobx/lib/details_screen.dart index 9d15da47..0a8830b6 100644 --- a/mobx/lib/details_screen.dart +++ b/mobx/lib/details_screen.dart @@ -31,7 +31,7 @@ class DetailsScreen extends StatelessWidget { onPressed: () { Navigator.push( context, - MaterialPageRoute( + MaterialPageRoute( builder: (context) => EditTodoScreen( todo: todo, onEdit: () => Navigator.pop(context), diff --git a/simple_blocs/.gitignore b/simple_blocs/.gitignore index 1410a619..3cceda55 100644 --- a/simple_blocs/.gitignore +++ b/simple_blocs/.gitignore @@ -1,9 +1,7 @@ -# Files and directories created by pub -.packages -.pub/ -build/ -# Remove the following pattern if you wish to check in your lock file -pubspec.lock +# https://dart.dev/guides/libraries/private-files +# Created by `dart pub` +.dart_tool/ -# Directory created by dartdoc -doc/api/ +# Avoid committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/simple_blocs/CHANGELOG.md b/simple_blocs/CHANGELOG.md index 791a857f..effe43c8 100644 --- a/simple_blocs/CHANGELOG.md +++ b/simple_blocs/CHANGELOG.md @@ -1,5 +1,3 @@ -# Changelog +## 1.0.0 -## 0.0.1 - -- Initial version, created by Stagehand +- Initial version. diff --git a/simple_blocs/README.md b/simple_blocs/README.md index 90a4993d..8831761b 100644 --- a/simple_blocs/README.md +++ b/simple_blocs/README.md @@ -1,22 +1,39 @@ -# blocs + -## Usage +TODO: Put a short description of the package here that helps potential users +know whether this package might be useful for them. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. -A simple usage example: +## Getting started - import 'package:simple_blocs/blocs.dart'; +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage - main() { - var awesome = new Awesome(); - } +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. -## Features and bugs +```dart +const like = 'sample'; +``` -Please file feature requests and bugs at the [issue tracker][tracker]. +## Additional information -[tracker]: http://example.com/issues/replaceme +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/simple_blocs/analysis_options.yaml b/simple_blocs/analysis_options.yaml index 97d4b470..f798e77a 100644 --- a/simple_blocs/analysis_options.yaml +++ b/simple_blocs/analysis_options.yaml @@ -1,14 +1,32 @@ +# This file configures the static analysis results for your project (errors, +# warnings, and lints). +# +# This enables the 'recommended' set of lints from `package:lints`. +# This set helps identify many issues that may lead to problems when running +# or consuming Dart code, and enforces writing Dart using a single, idiomatic +# style and format. +# +# If you want a smaller set of lints you can change this to specify +# 'package:lints/core.yaml'. These are just the most critical lints +# (the recommended set includes the core lints). +# The core lints are also what is used by pub.dev for scoring packages. + +include: package:lints/recommended.yaml + +# Uncomment the following section to specify additional rules. + analyzer: -# exclude: -# - path/to/excluded/files/** - -# Lint rules and documentation, see http://dart-lang.github.io/linter/lints -linter: - rules: - - cancel_subscriptions - - hash_and_equals - - iterable_contains_unrelated_type - - list_remove_unrelated_type - - test_types_in_equals - - unrelated_type_equality_checks - - valid_regexps + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +# linter: +# rules: +# - camel_case_types + +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/simple_blocs/lib/src/models/todo.dart b/simple_blocs/lib/src/models/todo.dart index b6825225..b45dac02 100644 --- a/simple_blocs/lib/src/models/todo.dart +++ b/simple_blocs/lib/src/models/todo.dart @@ -9,11 +9,10 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, String note = '', String id}) - : this.note = note ?? '', - this.id = id ?? Uuid().generateV4(); + Todo(this.task, {this.complete = false, this.note = '', String? id}) + : id = id ?? Uuid().generateV4(); - Todo copyWith({bool complete, String id, String note, String task}) { + Todo copyWith({bool? complete, String? id, String? note, String? task}) { return Todo( task ?? this.task, complete: complete ?? this.complete, @@ -48,9 +47,9 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, - id: entity.id ?? Uuid().generateV4(), + id: entity.id, ); } } diff --git a/simple_blocs/lib/src/todos_interactor.dart b/simple_blocs/lib/src/todos_interactor.dart index d55fb5e4..945ee7ea 100644 --- a/simple_blocs/lib/src/todos_interactor.dart +++ b/simple_blocs/lib/src/todos_interactor.dart @@ -1,5 +1,7 @@ import 'dart:async'; +import 'package:collection/collection.dart'; +import 'package:rxdart/rxdart.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -21,10 +23,8 @@ class TodosInteractor { Stream todo(String id) { return todos - .map((todos) { - return todos.firstWhere((todo) => todo.id == id, orElse: () => null); - }) - .where((todo) => todo != null); + .map((todos) => todos.firstWhereOrNull((todo) => todo.id == id)) + .whereNotNull(); } Stream get allComplete => todos.map(_allComplete); diff --git a/simple_blocs/lib/src/todos_list_bloc.dart b/simple_blocs/lib/src/todos_list_bloc.dart index cde09e59..cb1cf6d7 100644 --- a/simple_blocs/lib/src/todos_list_bloc.dart +++ b/simple_blocs/lib/src/todos_list_bloc.dart @@ -50,7 +50,6 @@ class TodosListBloc { case VisibilityFilter.completed: return todo.complete; case VisibilityFilter.all: - default: return true; } }).toList(); diff --git a/simple_blocs/pubspec.yaml b/simple_blocs/pubspec.yaml index ed95a47b..635a7ed7 100644 --- a/simple_blocs/pubspec.yaml +++ b/simple_blocs/pubspec.yaml @@ -1,14 +1,18 @@ name: simple_blocs description: The Business Logic Components for a Todo App - Simplfied +version: 1.0.0 +publish_to: "none" environment: - sdk: '>=2.0.0-dev.28.0 <3.0.0' + sdk: ^3.9.0 dependencies: + collection: ^1.15.0 + rxdart: ^0.28.0 todos_repository_core: path: ../todos_repository_core - rxdart: ^0.23.1 dev_dependencies: - test: - mockito: + lints: ^6.0.0 + test: ^1.25.6 + mockito: ^5.5.0 diff --git a/simple_blocs/test/todos_bloc_test.dart b/simple_blocs/test/todos_bloc_test.dart index 453a23ed..533e97a6 100644 --- a/simple_blocs/test/todos_bloc_test.dart +++ b/simple_blocs/test/todos_bloc_test.dart @@ -1,20 +1,21 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:simple_blocs/simple_blocs.dart'; -import 'package:simple_blocs/src/models/models.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class MockReactiveTodosRepository extends Mock - implements ReactiveTodosRepository {} - -class MockTodosListInteractor extends Mock implements TodosInteractor {} +import 'todos_bloc_test.mocks.dart'; +@GenerateNiceMocks([ + MockSpec(), + MockSpec(), +]) void main() { group('TodosListBloc', () { test('should display all todos by default', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final bloc = TodosListBloc(interactor); final todos = [Todo('Hallo')]; @@ -24,78 +25,64 @@ void main() { }); test('should display completed todos', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final bloc = TodosListBloc(interactor); - final todos = [ - Todo('Hallo'), - Todo('Friend', complete: true), - ]; + final todos = [Todo('Hallo'), Todo('Friend', complete: true)]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); bloc.updateFilter(VisibilityFilter.completed); - expect( - bloc.visibleTodos, - emitsThrough([todos.last]), - ); + expect(bloc.visibleTodos, emitsThrough([todos.last])); }); test('should display active todos', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final bloc = TodosListBloc(interactor); - final todos = [ - Todo('Hallo'), - Todo('Friend', complete: true), - ]; + final todos = [Todo('Hallo'), Todo('Friend', complete: true)]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); bloc.updateFilter(VisibilityFilter.active); - expect( - bloc.visibleTodos, - emitsThrough([todos.first]), - ); + expect(bloc.visibleTodos, emitsThrough([todos.first])); }); test('should stream the current visibility filter', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final bloc = TodosListBloc(interactor); - final todos = [ - Todo('Hallo'), - Todo('Friend', complete: true), - ]; + final todos = [Todo('Hallo'), Todo('Friend', complete: true)]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); bloc.updateFilter(VisibilityFilter.completed); - expect( - bloc.activeFilter, - emits(VisibilityFilter.completed), - ); + expect(bloc.activeFilter, emits(VisibilityFilter.completed)); }); test('allComplete should stream from the interactor', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final bloc = TodosListBloc(interactor); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); expect(bloc.allComplete, emits(false)); }); test('hasCompletedTodos should stream from the interactor', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([true])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([true])); final bloc = TodosListBloc(interactor); @@ -103,12 +90,14 @@ void main() { }); test('should add todos to the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final todo = Todo('AddMe'); - when(interactor.todos).thenAnswer((_) => Stream.fromIterable([ - [todo] - ])); + when(interactor.todos).thenAnswer( + (_) => Stream.fromIterable([ + [todo], + ]), + ); when(interactor.addNewTodo(todo)).thenAnswer((_) => Future.value()); final bloc = TodosListBloc(interactor); @@ -118,10 +107,11 @@ void main() { }); test('should send deletions to the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); when(interactor.deleteTodo('1')).thenAnswer((_) => Future.value()); final bloc = TodosListBloc(interactor); @@ -131,10 +121,11 @@ void main() { }); test('should remove completed todos from the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); when(interactor.clearCompleted(null)).thenAnswer((_) => Future.value()); final bloc = TodosListBloc(interactor); @@ -144,12 +135,12 @@ void main() { }); test('should toggle all with the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); - when(interactor.toggleAll(null)) - .thenAnswer((_) => Future>.value()); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); + when(interactor.toggleAll(null)).thenAnswer((_) async => []); final bloc = TodosListBloc(interactor); bloc.toggleAll(); diff --git a/simple_blocs/test/todos_bloc_test.mocks.dart b/simple_blocs/test/todos_bloc_test.mocks.dart new file mode 100644 index 00000000..4be9183b --- /dev/null +++ b/simple_blocs/test/todos_bloc_test.mocks.dart @@ -0,0 +1,176 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in simple_blocs/test/todos_bloc_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:simple_blocs/simple_blocs.dart' as _i5; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [ReactiveTodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockReactiveTodosRepository extends _i1.Mock + implements _i2.ReactiveTodosRepository { + @override + _i3.Future addNewTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(List? idList) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [idList]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Stream> todos() => + (super.noSuchMethod( + Invocation.method(#todos, []), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Future updateTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i5.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i3.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i3.Stream.empty(), + returnValueForMissingStub: _i3.Stream.empty(), + ) + as _i3.Stream); + + @override + _i3.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i3.Stream.empty(), + returnValueForMissingStub: _i3.Stream.empty(), + ) + as _i3.Stream); + + @override + _i3.Stream<_i5.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i3.Stream<_i5.Todo>.empty(), + returnValueForMissingStub: _i3.Stream<_i5.Todo>.empty(), + ) + as _i3.Stream<_i5.Todo>); + + @override + _i3.Future updateTodo(_i5.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future addNewTodo(_i5.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i3.Future>.value([]), + returnValueForMissingStub: _i3.Future>.value( + [], + ), + ) + as _i3.Future>); +} From c0c47e5b8fa8ad98103f3455b9629753b177cfe8 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Wed, 3 Sep 2025 19:45:24 +0100 Subject: [PATCH 56/89] Fix analysis error for mobx sample --- mobx/lib/home/todo_list_view.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobx/lib/home/todo_list_view.dart b/mobx/lib/home/todo_list_view.dart index 4a3ee3a6..fd33116a 100644 --- a/mobx/lib/home/todo_list_view.dart +++ b/mobx/lib/home/todo_list_view.dart @@ -31,7 +31,7 @@ class TodoListView extends StatelessWidget { onTap: () { Navigator.push( context, - MaterialPageRoute( + MaterialPageRoute( builder: (_) { return DetailsScreen( todo: todo, From b304221c832a9c183f13904d46eaaee2340afc1f Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 13:30:47 +0100 Subject: [PATCH 57/89] Update gitignore to hide cursor MCP files --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e7e860dc..8bb94fa7 100644 --- a/.gitignore +++ b/.gitignore @@ -95,4 +95,5 @@ lcov.info .vscode/ # FVM Version Cache -.fvm/ \ No newline at end of file +.fvm/ +.cursor/ From 8a844b798d85a2dcb7513781c785dc0658a071da Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 13:32:04 +0100 Subject: [PATCH 58/89] Update simple blocs example --- simple_bloc_flutter/.metadata | 39 +- simple_bloc_flutter/analysis_options.yaml | 34 + simple_bloc_flutter/android/.gitignore | 7 + simple_bloc_flutter/android/app/build.gradle | 68 -- .../android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 33 +- .../simple_bloc_flutter/MainActivity.kt | 12 - .../MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- simple_bloc_flutter/android/build.gradle | 31 - simple_bloc_flutter/android/build.gradle.kts | 24 + simple_bloc_flutter/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- simple_bloc_flutter/android/settings.gradle | 15 - .../android/settings.gradle.kts | 26 + .../integration_test/app_test.dart | 26 + simple_bloc_flutter/ios/.gitignore | 2 + .../ios/Flutter/AppFrameworkInfo.plist | 4 +- .../ios/Flutter/Debug.xcconfig | 2 +- .../ios/Flutter/Release.xcconfig | 2 +- simple_bloc_flutter/ios/Podfile | 83 +- .../ios/Runner.xcodeproj/project.pbxproj | 217 +++-- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../ios/Runner/GoogleService-Info.plist | 40 - simple_bloc_flutter/ios/Runner/Info.plist | 10 +- .../ios/Runner/Runner-Bridging-Header.h | 2 +- .../ios/RunnerTests/RunnerTests.swift | 12 + .../lib/anonymous_user_repository.dart | 7 + simple_bloc_flutter/lib/app.dart | 11 +- .../lib/dependency_injection.dart | 21 +- simple_bloc_flutter/lib/localization.dart | 2 +- simple_bloc_flutter/lib/main.dart | 12 +- simple_bloc_flutter/lib/main_firebase.dart | 20 - simple_bloc_flutter/lib/main_web.dart | 36 - .../lib/screens/add_edit_screen.dart | 51 +- .../lib/screens/detail_screen.dart | 21 +- .../lib/screens/home_screen.dart | 30 +- .../lib/widgets/extra_actions_button.dart | 8 +- .../lib/widgets/filter_button.dart | 30 +- simple_bloc_flutter/lib/widgets/loading.dart | 2 +- .../lib/widgets/stats_counter.dart | 10 +- .../lib/widgets/todo_item.dart | 14 +- .../lib/widgets/todo_list.dart | 23 +- .../lib/widgets/todos_bloc_provider.dart | 13 +- simple_bloc_flutter/linux/.gitignore | 1 + simple_bloc_flutter/linux/CMakeLists.txt | 128 +++ .../linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../linux/runner/CMakeLists.txt | 26 + simple_bloc_flutter/linux/runner/main.cc | 6 + .../linux/runner/my_application.cc | 144 ++++ .../linux/runner/my_application.h | 18 + simple_bloc_flutter/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + simple_bloc_flutter/macos/Podfile | 42 + simple_bloc_flutter/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + simple_bloc_flutter/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + simple_bloc_flutter/pubspec.yaml | 19 +- .../test_driver/integration_test.dart | 3 + simple_bloc_flutter/test_driver/todo_app.dart | 8 - .../test_driver/todo_app_test.dart | 5 - simple_bloc_flutter/web/favicon.png | Bin 0 -> 917 bytes simple_bloc_flutter/web/icons/Icon-192.png | Bin 0 -> 5292 bytes simple_bloc_flutter/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes simple_bloc_flutter/web/index.html | 32 +- simple_bloc_flutter/web/manifest.json | 35 + simple_bloc_flutter/windows/.gitignore | 17 + simple_bloc_flutter/windows/CMakeLists.txt | 108 +++ .../windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../windows/runner/CMakeLists.txt | 40 + simple_bloc_flutter/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../windows/runner/flutter_window.h | 33 + simple_bloc_flutter/windows/runner/main.cpp | 43 + simple_bloc_flutter/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + simple_bloc_flutter/windows/runner/utils.cpp | 65 ++ simple_bloc_flutter/windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 288 +++++++ .../windows/runner/win32_window.h | 102 +++ 148 files changed, 3845 insertions(+), 548 deletions(-) create mode 100644 simple_bloc_flutter/analysis_options.yaml delete mode 100644 simple_bloc_flutter/android/app/build.gradle create mode 100644 simple_bloc_flutter/android/app/build.gradle.kts delete mode 100644 simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter/MainActivity.kt create mode 100644 simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter_sample/MainActivity.kt create mode 100644 simple_bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 simple_bloc_flutter/android/app/src/main/res/values-night/styles.xml delete mode 100644 simple_bloc_flutter/android/build.gradle create mode 100644 simple_bloc_flutter/android/build.gradle.kts delete mode 100644 simple_bloc_flutter/android/settings.gradle create mode 100644 simple_bloc_flutter/android/settings.gradle.kts create mode 100644 simple_bloc_flutter/integration_test/app_test.dart create mode 100644 simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 simple_bloc_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 simple_bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 simple_bloc_flutter/ios/Runner/GoogleService-Info.plist create mode 100644 simple_bloc_flutter/ios/RunnerTests/RunnerTests.swift create mode 100644 simple_bloc_flutter/lib/anonymous_user_repository.dart delete mode 100644 simple_bloc_flutter/lib/main_firebase.dart delete mode 100644 simple_bloc_flutter/lib/main_web.dart create mode 100644 simple_bloc_flutter/linux/.gitignore create mode 100644 simple_bloc_flutter/linux/CMakeLists.txt create mode 100644 simple_bloc_flutter/linux/flutter/CMakeLists.txt create mode 100644 simple_bloc_flutter/linux/flutter/generated_plugin_registrant.cc create mode 100644 simple_bloc_flutter/linux/flutter/generated_plugin_registrant.h create mode 100644 simple_bloc_flutter/linux/flutter/generated_plugins.cmake create mode 100644 simple_bloc_flutter/linux/runner/CMakeLists.txt create mode 100644 simple_bloc_flutter/linux/runner/main.cc create mode 100644 simple_bloc_flutter/linux/runner/my_application.cc create mode 100644 simple_bloc_flutter/linux/runner/my_application.h create mode 100644 simple_bloc_flutter/macos/.gitignore create mode 100644 simple_bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 simple_bloc_flutter/macos/Flutter/Flutter-Release.xcconfig create mode 100644 simple_bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 simple_bloc_flutter/macos/Podfile create mode 100644 simple_bloc_flutter/macos/Podfile.lock create mode 100644 simple_bloc_flutter/macos/Runner.xcodeproj/project.pbxproj create mode 100644 simple_bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 simple_bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 simple_bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 simple_bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 simple_bloc_flutter/macos/Runner/AppDelegate.swift create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 simple_bloc_flutter/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 simple_bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 simple_bloc_flutter/macos/Runner/Configs/Debug.xcconfig create mode 100644 simple_bloc_flutter/macos/Runner/Configs/Release.xcconfig create mode 100644 simple_bloc_flutter/macos/Runner/Configs/Warnings.xcconfig create mode 100644 simple_bloc_flutter/macos/Runner/DebugProfile.entitlements create mode 100644 simple_bloc_flutter/macos/Runner/Info.plist create mode 100644 simple_bloc_flutter/macos/Runner/MainFlutterWindow.swift create mode 100644 simple_bloc_flutter/macos/Runner/Release.entitlements create mode 100644 simple_bloc_flutter/macos/RunnerTests/RunnerTests.swift create mode 100644 simple_bloc_flutter/test_driver/integration_test.dart delete mode 100644 simple_bloc_flutter/test_driver/todo_app.dart delete mode 100644 simple_bloc_flutter/test_driver/todo_app_test.dart create mode 100644 simple_bloc_flutter/web/favicon.png create mode 100644 simple_bloc_flutter/web/icons/Icon-192.png create mode 100644 simple_bloc_flutter/web/icons/Icon-512.png create mode 100644 simple_bloc_flutter/web/icons/Icon-maskable-192.png create mode 100644 simple_bloc_flutter/web/icons/Icon-maskable-512.png create mode 100644 simple_bloc_flutter/web/manifest.json create mode 100644 simple_bloc_flutter/windows/.gitignore create mode 100644 simple_bloc_flutter/windows/CMakeLists.txt create mode 100644 simple_bloc_flutter/windows/flutter/CMakeLists.txt create mode 100644 simple_bloc_flutter/windows/flutter/generated_plugin_registrant.cc create mode 100644 simple_bloc_flutter/windows/flutter/generated_plugin_registrant.h create mode 100644 simple_bloc_flutter/windows/flutter/generated_plugins.cmake create mode 100644 simple_bloc_flutter/windows/runner/CMakeLists.txt create mode 100644 simple_bloc_flutter/windows/runner/Runner.rc create mode 100644 simple_bloc_flutter/windows/runner/flutter_window.cpp create mode 100644 simple_bloc_flutter/windows/runner/flutter_window.h create mode 100644 simple_bloc_flutter/windows/runner/main.cpp create mode 100644 simple_bloc_flutter/windows/runner/resource.h create mode 100644 simple_bloc_flutter/windows/runner/resources/app_icon.ico create mode 100644 simple_bloc_flutter/windows/runner/runner.exe.manifest create mode 100644 simple_bloc_flutter/windows/runner/utils.cpp create mode 100644 simple_bloc_flutter/windows/runner/utils.h create mode 100644 simple_bloc_flutter/windows/runner/win32_window.cpp create mode 100644 simple_bloc_flutter/windows/runner/win32_window.h diff --git a/simple_bloc_flutter/.metadata b/simple_bloc_flutter/.metadata index 1b5cec02..05a8ab44 100644 --- a/simple_bloc_flutter/.metadata +++ b/simple_bloc_flutter/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/simple_bloc_flutter/analysis_options.yaml b/simple_bloc_flutter/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/simple_bloc_flutter/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/simple_bloc_flutter/android/.gitignore b/simple_bloc_flutter/android/.gitignore index bc2100d8..be3943c9 100644 --- a/simple_bloc_flutter/android/.gitignore +++ b/simple_bloc_flutter/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/simple_bloc_flutter/android/app/build.gradle b/simple_bloc_flutter/android/app/build.gradle deleted file mode 100644 index 3635ab33..00000000 --- a/simple_bloc_flutter/android/app/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.simple_bloc_flutter" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - multiDexEnabled true - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/simple_bloc_flutter/android/app/build.gradle.kts b/simple_bloc_flutter/android/app/build.gradle.kts new file mode 100644 index 00000000..7d47ffe2 --- /dev/null +++ b/simple_bloc_flutter/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.simple_bloc_flutter_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.simple_bloc_flutter_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/simple_bloc_flutter/android/app/src/debug/AndroidManifest.xml b/simple_bloc_flutter/android/app/src/debug/AndroidManifest.xml index eb07cafb..399f6981 100644 --- a/simple_bloc_flutter/android/app/src/debug/AndroidManifest.xml +++ b/simple_bloc_flutter/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/simple_bloc_flutter/android/app/src/main/AndroidManifest.xml b/simple_bloc_flutter/android/app/src/main/AndroidManifest.xml index aa5858a1..3aaf4dae 100644 --- a/simple_bloc_flutter/android/app/src/main/AndroidManifest.xml +++ b/simple_bloc_flutter/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter/MainActivity.kt b/simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter/MainActivity.kt deleted file mode 100644 index 42d0a44d..00000000 --- a/simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.simple_bloc_flutter - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter_sample/MainActivity.kt b/simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter_sample/MainActivity.kt new file mode 100644 index 00000000..48e54521 --- /dev/null +++ b/simple_bloc_flutter/android/app/src/main/kotlin/com/example/simple_bloc_flutter_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.simple_bloc_flutter_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/simple_bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml b/simple_bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/simple_bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/simple_bloc_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/simple_bloc_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/simple_bloc_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/simple_bloc_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 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 literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/simple_bloc_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/simple_bloc_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/simple_bloc_flutter/android/app/src/main/res/values/styles.xml b/simple_bloc_flutter/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/simple_bloc_flutter/android/app/src/main/res/values/styles.xml +++ b/simple_bloc_flutter/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/simple_bloc_flutter/android/app/src/profile/AndroidManifest.xml b/simple_bloc_flutter/android/app/src/profile/AndroidManifest.xml index eb07cafb..399f6981 100644 --- a/simple_bloc_flutter/android/app/src/profile/AndroidManifest.xml +++ b/simple_bloc_flutter/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/simple_bloc_flutter/android/build.gradle b/simple_bloc_flutter/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/simple_bloc_flutter/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/simple_bloc_flutter/android/build.gradle.kts b/simple_bloc_flutter/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/simple_bloc_flutter/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/simple_bloc_flutter/android/gradle.properties b/simple_bloc_flutter/android/gradle.properties index 38c8d454..f018a618 100644 --- a/simple_bloc_flutter/android/gradle.properties +++ b/simple_bloc_flutter/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/simple_bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties b/simple_bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/simple_bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties +++ b/simple_bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/simple_bloc_flutter/android/settings.gradle b/simple_bloc_flutter/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/simple_bloc_flutter/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/simple_bloc_flutter/android/settings.gradle.kts b/simple_bloc_flutter/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/simple_bloc_flutter/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/simple_bloc_flutter/integration_test/app_test.dart b/simple_bloc_flutter/integration_test/app_test.dart new file mode 100644 index 00000000..28b4e648 --- /dev/null +++ b/simple_bloc_flutter/integration_test/app_test.dart @@ -0,0 +1,26 @@ +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:simple_bloc_flutter_sample/anonymous_user_repository.dart'; +import 'package:simple_bloc_flutter_sample/app.dart'; +import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return SimpleBlocApp( + todosInteractor: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'simple_bloc_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ), + ), + userRepository: AnonymousUserRepository(), + ); + }, + ); +} diff --git a/simple_bloc_flutter/ios/.gitignore b/simple_bloc_flutter/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/simple_bloc_flutter/ios/.gitignore +++ b/simple_bloc_flutter/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/simple_bloc_flutter/ios/Flutter/AppFrameworkInfo.plist b/simple_bloc_flutter/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..1dc6cf76 100644 --- a/simple_bloc_flutter/ios/Flutter/AppFrameworkInfo.plist +++ b/simple_bloc_flutter/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 13.0 diff --git a/simple_bloc_flutter/ios/Flutter/Debug.xcconfig b/simple_bloc_flutter/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/simple_bloc_flutter/ios/Flutter/Debug.xcconfig +++ b/simple_bloc_flutter/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/simple_bloc_flutter/ios/Flutter/Release.xcconfig b/simple_bloc_flutter/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/simple_bloc_flutter/ios/Flutter/Release.xcconfig +++ b/simple_bloc_flutter/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/simple_bloc_flutter/ios/Podfile b/simple_bloc_flutter/ios/Podfile index b30a428b..620e46eb 100644 --- a/simple_bloc_flutter/ios/Podfile +++ b/simple_bloc_flutter/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/simple_bloc_flutter/ios/Runner.xcodeproj/project.pbxproj b/simple_bloc_flutter/ios/Runner.xcodeproj/project.pbxproj index 8acc15e9..71d5b573 100644 --- a/simple_bloc_flutter/ios/Runner.xcodeproj/project.pbxproj +++ b/simple_bloc_flutter/ios/Runner.xcodeproj/project.pbxproj @@ -3,23 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 4EEE3E9523C494310065A5A2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4EEE3E9423C494310065A5A2 /* GoogleService-Info.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -27,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -38,15 +42,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 4EEE3E9423C494310065A5A2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -59,20 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -86,6 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -93,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -100,12 +109,10 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - 4EEE3E9423C494310065A5A2 /* GoogleService-Info.plist */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -114,16 +121,26 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -150,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -160,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -173,18 +195,25 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 4EEE3E9523C494310065A5A2 /* GoogleService-Info.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); @@ -195,20 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -224,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -235,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -257,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -289,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -297,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -313,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -332,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -366,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -380,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -390,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -422,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -430,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -447,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -474,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -496,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/simple_bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/simple_bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/simple_bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/simple_bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/simple_bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/simple_bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/simple_bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/simple_bloc_flutter/ios/Runner/AppDelegate.swift b/simple_bloc_flutter/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/simple_bloc_flutter/ios/Runner/AppDelegate.swift +++ b/simple_bloc_flutter/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 zcmV;k0ZjhN6T$GM-ShrilfUZt{^9lhT*&z4_x{-O{Rv#2V9EI}xb^~1iQe@7)8g(7UZ4B@ z|4zgB>+<*9=;^^)>d)H7pzGjuM>Jnezy3`@G2r z?{~a!Fj;`+8Gq^x2Jl;?IEV8)=fG217*|@)CCYgFze-x?IFODUIA>nWKpE+bn~n7; z-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGrXPIdeRE&b2Thd#{MtDK$ zpx*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{HY|nMnXd&JOovdH8X7Z*FU!m{%*@P8VRsLNIdO-bn8LBcq}8jNvvE!9=H589 zS1q{F% z25_7w7rzc6_W!D9OuwF9IP!hcRh72%UTx5Ve2G1JF&R7ItnWOsxG;yFhdp@D-v_7k z&fdOmnO#2ee(9>pVtq010kWwNld+dE83*wHn9tfxBT2o#zpv%fYznjAHBY*l!u|2m zSf4hSMNGyg$1xwm-`9dY9-PW*J`_Ic{nAyH#QK&>FZOFo43jar5Bt!M3$uIOIUl>v zb9b5X3#kSD-cQS%Eqv6xMP zE1Yp6YpT=?fig_Kh{=PPj6E)4GIp-ZS?ri68GBT|J*YdD^7L~SW~Sf$s_d;n?I9a6 z86O}SlW`cF=fmCqsn)n2%B|DQU3h+l{eDQ{AqgImvG6u_z#8VP?>ut&`^aBtAJJ25 zoAf%WFtdD7GVuJ{!xnPrg0dHT=P{^0c=^-k#J?H&4rDa;IKAL**R;Bg+qyI7Dl?6?0iCgVW32mf*?q1Sfz z=n}fHUmsBNpsPIOBJ3dV4(?VgItv@Fu4~cXjdeNJ4Q-=X zkTvW(53?5w_f601lYAaaEi%u8TyU>q(bA3&^YwMj`h}NX(m!eGVBcXuOvdhcvL<%! ze>SspqOvb!mSs*L%6rh56AHih;)|A_H@E4+{TDD9A2AP;%Z=;jb0;eMNOFOB*o`eL zkL(y1%$N88ldrF9p|It5P46;5*0JRRCYv=(#zJ-Hgl=74E4rxsvheoAymLMogSucY z<-wA%;3_Qqt>G;*$gX227ciKa_|rX8dLX}1blF`~_UegQ<_E&Pw(wC<7~tyqm@cY8;W|KtwlU@|6uqkmeb zH@Ax}D?b_e=>MVDRK+0{Qa zGY;R24>BfWFnyGF7!ufW!Q|`fW4>kK-q-7OZRfb`_vPm!8NIr@S9IC=?H&Eyp`=&P zL*9tV*omA~}ZeJWoy5HD~$=HdkNnt5A zV=2cVg&Qu0Dhp4(@~Zx7`-nY%PkLGJpP=mE>Zblof3o0x)7Z;>GuWdSyY~yq+njVF zYd0LDFg*Y2YdV&i)hGFMdBe;2{~qZ!dO)F8jg@FX&V%1x1y9 zZDCDUN(sv10C;;)A5}S!)_zo&&EmhbwEC8O`st_jLk~TqpM3I3ie6EAZEY=7*{A37 z@3|k7aoF{g#$;tTvvCj~X8hM!8zsS(y!F;w^}`Q8OhG>aOW&W(9o&}@lW}2o7i1r{ zkPmw(`^6AsF&SI_5^J|b;kxUt(+@oGKww!|U0uDRsQm86&8Zc6nB0ZQ*v$|oW5GR7 zNeD}o;V+juY+3o&_`wGslz(MIm4$phuleklvj3V{4u3x;8O;oh`a>Hk*|{ z*FAE+h3xweWDa|nj5&)z5khf!UgL;iGIRXWnM_9C7*F`zF^}D_R>XVBN(NM4_Nc;S z?6V$;hcC@P*}n}=1i8bDSr6nA{Jx=_VVZ=F3f?YGp6iMhm%|?7UV2u9_DTw{2qZ!K}_qW+HdAyG7cc*d6O|2^A=3T($S!#tom$9pNdZ9^Kv*c znLivji9I5iJb?>y@#}7ipAXTgT>i7E+$n=n@)sdGx%LeyTSyJ|A%X*8Zw`~Odp{;m zVKR2Vhb-L;N>BtLl32UN8@4LQ0Zhg|2dW zA%Z~$U>6B&k+WEkHSFAPXJhuAV83+vgVrB5C?J3(I=%6Y==6G?K@gqBu#N>;!=Z>` zGKPTr$*hCCT{;*P00F@JA6atqAGI?Zc?v}^8M}Gk_sd)5&GL4GazXG#e(b7EZI(u6 zHm|NtZp0!p8}aDO=2CQK!(M`250o_w;5bhXyML)RxoO_A5i{?*THYvcHK?QbFVbTr U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 zcmW+)cQ~8f8%|=?Y^hlkUu_brN^7*JR?XC=5kZvNL~D;~QKd!HCRS}?)d*4)A8JJH z5~D3*##gh%_@%%1y3YIlai04*_qm_@JlDD2IH>VMR;FuA004mXk=}h%>NoK3xI|BV z-$vdV0|2-i9^Kb64+K`FXklmNId#XyPK!@~pXIghLdrF8WQlXmx>inRvYwH6eLdGz6!){BxQ6=ffLru4 z*R`IOEWW`gmF2jkZUbH97lVKDeXlEH#LfJE8nIx*=wr`%Xc_LiPkhQ|3AudBCS1b6 zr8R}CN$HP6N)6lkkxAm$L@)c?UvQON>G$cP-Xk-f5%b6j*M}9Z^xmz>6(@V3LYFVU z6qY}QzUzC+Yhw5=FgL@Ma=E-DKdK;K{vm7kIS<>QZ*wT6%)#1&;a0ap7*S(U;KQ&( zZufTg9Z3&8UKLRWfec5bHzC=>HCX#k%Ic@)=izkUiil@A?%NE>+&hzfwZ-=sn zv>akDS4P#o?T&eQ^%lG?K+isJDEl_v{=)sre7C*r&@ag**-M4quNfA3WdGPkF$PAl z2Py?y7ClL@El`NEyV!`*d@LaCCCtNTL%Eu1aimBz1@X%R-NYvT6UX0!C#3Mp=Pm%= z(4>8`y(me63#V91s0cj%W?a*CtDLTOT#eSfGva!T(6#+>VEDmas7zOQ`XdWBhEx{l z4w1V)zuvpMEq6{!94Cf1{|y#yL)#55;C^)Li#IkK?BoHJIY$JNtae=b8n%zWTe`MZ z^U7{c21JnQN8^(s6;mwL?@1U+w1B`$2wyjxXof94IlB^XVC(C4tbdSyB7~=_GBW_% zmtQv*D~}wW_&MR5`Pit!G~T-t6wG?O_Veu2RpsXV0~Wnmio?M{<<12$;*n#ybNiHU zHIhh~#Ms`!s}4MOoQu!Y|Mw9D;XCd72LD9l21h)N<@)4^=T&}q7aAT3;v0THes{#= z=*Y6NMrT})CHF=6*@X?@EN-?in^+zUcpv^b-JUM3N6I3DkP0rhittI?WND1OCc z7u93NIBrt#Lo1rb!bBwUd~^99Eis%}BLEVotM5tSbQH&V3Kj)OnLb%{;%I*iFzzoB zRkF4j%$%V$4F28*+IsbMz?mLfv%<-cni799Q3BxK?alcI7uicUHDIBeV%bh-;Fz2! z)y}|wz18L$03I^++;yV|`hg)ez^lKHGbvV$=QyKvazvTfMuv6M`FvDvuR(?(@&k-( zr1?~!)Aa!m>7;K8=LIDJ7#|&p+Yz=Ha*TMqLs2MGZzJplcp#OfF?hbQHLKD4IXGou zmnGODrP6Jx5tgeTu7Q1uj<@Ou{vLj}ToMWm+G))K>ww8UB`FI`x3p@)e1q%GcBo#c zaJ;l4@!&J+d*jEMRKvHiJM$IiG~FT7(~28+<@KubE%QIBm~NI{DF?SrSqvGv1u>nm zEotI9>B>TLU}Kf~Y-NGbr@rC0_FOJ?+XA0aq9Lnu=f>-lIx>v0h0Ei1MW_Np|8?vU z_Op-*NH&#tW-PKje==gUp6gya+ZIfUkzVGmI)otj`_tbZ-{g{ld&-$K>x@5OnI4;q zn&fY;aS^i|`^RBQD=o65xANP%HdVgcEV4$oHiJ-TKXvKD{FUe{VVqCfQpTwXjDXV z5cZ_R10>Yjxb~&1qE0sdOJn?3x3UlffV{$iKndStlUN>%S6A+7`6KjeHD^!and~MB z2gfjXN=v~VFLi1MvP4a3R2H3gY5go#MLG8ictEBvgkuXMZuanAICVbxxq_P_;m}T8 zF54Z;={)FHNB6I}j=pB@6e#;1?GCgu1^K~|aU%cz5jq!(u?xbclceXFYuC`m7AoUO zQ6XH2N?LP~b2Zog)0hpp=?4030t&BgbtWk)OkuUF@)py5gouq5Pyq7J^CYkt4|$%` z{1WOfmL?qR!g`&cX+fDx$h$=pBf$@=v1?~`ST%q_5&h){?U;JT0a-&AY?j$T};{{G{V#qA2He2^b)K5NV4 zlgqIJ34%+J-gi<+!9nB?h}Zwv;cv#EbC_#28Kqyd3yRrGzDVH{`j}pH_QHux6)N`+uoGO{bFsIhl85$BRF$jhgPf2$aBbK(8~H;lO!je0d^9n&xLmc2pl zFVhR&lVWTtT29qk(;J680@VVBw+5)fr*{Om&(9cJruuktCf(N4d*S^iUQN|_Xb@FR zKq>i2uQ#U|*Vo6i_dr$CX^iwDS0nN2)3fRU+QwX5O#vyBVj3i-X%JSF4EuqQBQ(kq z!en?$DzNbS0!|l5=NG&Wn6?v+aesuNz{6j=g`D)4pgSvsyK!shr>X#n|Et6k?dwL} z%(h=Gi}m#ZRn%~V1Ry(C?EeyNQ6<_E5^i&E=@ahY?Q5s0FF$p2gk#js)dOsTzz1wB zrqcS)o#>H~D}snHz}5=x*C0y8YI3}DNw~O7l%yTbSfLsK*QX**ZdVb_g54;(L zGO8^!KtyMxlQvdxcPBn2(TL?XkM%M^zwJ5qdwBdc?MXs7zTjPsBp_zVGU4ex%R7Pl zf1Ne{u4Ts;#cEq!R~ExiUVC8n4kPh?pNao?ph*tXP_sRcGfwsK6K$ z7dG{t(!6@W*BX^)-_E<2X_nJf31K(n47qYOmSZ@u%CATIcK0AT%ycXYf5YTdo(-mf zKY8o`cNc?C##V9TQS5I6j?nxYkKK8QGP%t#9YKD*POkh+FU+9e5D-;8i%%T$ev0=G zB1=R+cH7#PP?>mF!lqAS*qPb|!umjh9l+GgJZv#jTSTK8Sjg_!GH#KpuN)r{NrZOX z{Pb(8Dl|?cj)o5QhGuFA^#k!}vuWoeqm|I-|ANScW7jtLctuqv;%294p+GLgFa4G) zIq@U@doZB&)W6$muDiVdN>u>Ec^D-uq#$R6u`L&cob2^cPSg|6am zBseQ%G1D#6!ph3tXLw;MHD67hoDzeqR&g&&x%L5b`)pS3i-0f-OBD}{+C<|TFsCtz zF#|AlxwAD0BA{*=hT3H~Nsr%!eKyLA_Y97$ENITtl&%(3ARLtER$d#vvIMGqfT?8U z%?jIMIos5F`74P0k*F`dy(Xe!UR9b{!ZZCojif)a!qgwB%Y!iD0@cDXm8`s35r1fp zRgtl~M5!)$UAx_ly28rz1?eh24MJ*eWt2=l+xlN89RQiZnm(^jkM_(kr0@)(f|CVJ zKOHXr{n6J^8+9u|sy>WC>I^RF97LX`cAU*k2^Dk8Cn|Wf z&~!ga*XIf}0jbKZSTL21Z_yMfNhkSrHUr&>wv8@A&I<#L8iZW?x1PbIO)mq9;@JH? z7=WwDW*cq;x=E!{3fH?Xul;t~OS2J7u(NwiRikgy)QN%a-%L_Pm-cR^OlKC^NU4Wv z2Gtp+>czSg@%hu?UG)H$77V=|=*Yv4pWzNxoyRosX=BK3bHJ)&D+M>DYRx9K(0%b=XllvfWKIJ?*;vk<+zw^xf^+*`lHueUHkB^iz$#8> zJ|63j_3@#JWoB^SCOO`pD@ly_T#-t8dd;W7R&9WFQbS&kS(^QtbqeYI+JfV;w%F1X zb7vL>2k@x;{O8Bdj9nt*?NsyER5Qd!tSS|?V-k@vd$3}s$s{@$8~5K`naP1_@h9Yc z6F_CVHU6DvFps&J{oOE2+d&6g3<w|G zUvwI!hv*(+;=?ZY3jGPoOH)V8eYVP!q9hYFY&R5-?ogkCWjXIr0T(PKK~NufNo zW_>cm`G-54mNZr1AZ%5zzp8aVElVw^b~PL#kYftI9r$4k^I>!gtxA=x20a4L^7zuI zOgKpNFW`WR(FMwR8opU4lkNZm``!z3%1W1vcm*JFLEH2Dwm`&e772ts*;I{SiSQg$H=<}MS$DV z%UCRgGOY)gdZ}*3$Q|`cAq|*TSrs?NTKAhw^6RgpLvFLTd(GdmZFJ)T+kejCmV+Da zkqD(av22e3eN4E9hVe9I^g*(C=W|Jd#bO%Jas|%D6&d6*utj=G93GEiX%W~!iy63f zMbX`K84<`*aH1Dfd%-d)5R;&cre~Y@taoZn zJF3*MtlKE@Fv@oG{z|(27!E}O$Vl}I3JRuGB@bccb!b$UaqTiN=FY!I0N~L}#hzWM zUTE+(B(ESkPBvstwi*a)MTwe)_7P`XNmW;bB^n=m(P|YXa6!2cA_-1!UKuHUfR6y5 ze9FuAl~a{QhR2;OrOJ_3=Uwa*H#HaOi?(E(;A zt}tE|he~pSB0rQhHa_oBM#s^qde2kaPhUL?kG>2ItSmaij)IF!$llwm=`il??UjmV zZv6DAY+BF9;DtBFT|Zn+49ES&JCZBXlSmj2wbqki?LWQU+}=)PZ-JsvN(JOw@yZ;{ zBpg6CuTi>8`&lFm*m;X;IR2zO5q3YQ&+fad2fNwWFcIoKswrUV-g|+^yk0u+70>&ls#>1Xn$4{ zvO3@;Zq?{2X6;sF&9o4Ip?O5%C+pnL?(s_#fVX-KI=pTog7;tt;hXsr2hW`h#FM+< zw4A_CFVf~jGyP1A2s5T)by@+#C=t%dhQ;#^u_8r$+3(!eJEL9wnl9w$>)Jr$N?oFTvpf-QGSHSn^ft!C&Oq`=8{_qI_zLB|GJf;R{Om`=Ba3;JW`i43 zAkm8}a%Q{6;zyNNNux1s5tzY=`d#^A4ugTHly=P0DL;GY_PpTdyVEqireylN_dm4X z@asVOg*aj2Hw>zS1q){!qXvDq?Uej~&z=jm-L(?Sh>J$NO}&$RN4m^#w`p#-O+x3= zc5x6^zXn}lHbiT+odF$jqYQTqENdlOF2+$%%DOm1x!$ORgV;c|kX>{bX@Yk7kf?4| z+AP^bThI#DflNJuM~Kv2z818UuZ$n2pmImsnvmcrx#PaTVrSeRy4AT-agpZfRov@G zlk3HZug>7o<4*{d>pDDMq4l{G)V#x6M~h&yuP;oc(r8omyub&2$e?k*aoGm%+^m8b zcn+x^yg9DuHk3AGtB-t_HKoa(&~>A%C(-NoIqa<^T53Wjjmz|9N6;8c(*t(pj zj&{Mq8ws!$wmSS>g6E6;x00#VnI9Y3yJ~f5+_yFSe3(>xBe3RRUar6%OGzFmWKL10 zmkFV>%d`^HfNC<2^B9%egXO~BOqDy+LGV6OyparAZ?mZuuz%S?;(q3ru}j7oLV7DU zheVFoww#}28H#+$Tg73{njT}_2XRXqN@#eOMm*kA5HkIz_IE4dCd@TT{|;L+yiOX2Y1&#ueMejPm3~jlgoU|;T@0h*IAqH9 z(;8-55TQN=$DOm3Scv#TvLfN2Bs~Nywn=00E1cOsINmczo=^;n2o_NrPV7vj#{O{f z_d0h-4(U-M6q}n$>3cSjAc*SOTKyds-XWCK2gk_*>A}QyMQ$- zTy%Wy&**_Cm%oZZDX-R#19X>~yC!}*lus99^@pSH^d8Qst6--Les8yPT3CsdPp>3i qj{nbl(D%UZ^d4JB0mqQ>t`JfW&3MbB4N3ir4S1w$d>^Zgi25IS_L{8# diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 zcmX9@c{~&T8=rF+rqdi575bKA___+qUF0Yg6}F*L)X05p<}NGxDrbxoGQL;MjBf_>tYzr>Xq$_6N=o0Du2rHD{xom>(Px;hTf3Q3L1}6$u2=ii z;hGaoSNcB3W%`CLa~nH7=kKhp|IvqP5nqQFzon&}+>6pL#}*8%JSqM&&ojOTKdwEn zly9-E*};tA`HFeL0`pTKN|@`Sz#?vbc! zzov1o2U11u(Fj`uG|2aa_!M;MuD0#J4`r209`+mAz^Ev!dQqh;7einE~+r-2lz;V&kO-a zOROfTuX;6Fp!LnwN6&{ZMJtZ)Ri4yNF`SOP{rgfk`v7zW8L>5+^6%# zm&!YdE6eOD2zw=IR3G)?#-7QlsuD`zx+uAggTTTkbcEsq zbEM*0$yc5$9uarcA8T0u7QIadj+E1gFLaF|V%mW66T)|@BFx_d|s%X9HPc4n#AaixZ)BjhJtC`ZmFrCe!0dT4u&Uovy- za`up<{5p%Oabc%n^!qrNlJ|QEvC=7{fCq2jp4gpy^6*Q%nGxGf@;}p=vMI)>R=EBcUl$2%-c-y&zn4>meYdb;Iq9F7SGm%yu)heuD-dmPEr5V zro!kZLJ#@+;S&n@`S$qUsTxKdSDVV~Vf;=X*s-R?nt0`Mtgz^>@ik@;q~^oY zOQEC(&jCB`V5`RAWFz^du${D@XeRSKJJ>pgN6GJY*xc0#8A=qg4lMKP{AJ4x^^z&E zAud$kktFNb$4^H$V~^UtbARyvwRkCh4yK+y=H;yAw-{Endo$p2&XC2%?XAy60}ggO z7LRQRS9eQaJU&S83LT)hzCc0_?A9%hF`vK`4B}N=tHl%}6>f|7=uo^sb5pcX7LMyk zPkW=da(P&(cZ&YZdoroM`7W23$9>UsOW$Ary<*z!$g(s)H}_pA#&O|5^hR??Tt7{PZh=@ z)WPG+_IY-!$!o#5(P4XJ!YMH%0*doXyv0?2V)#J}_J6&ND%lls-*r$RJx3=v(n#e& zH;;)bgC)_hq^`rhQ1j8#p_&k^2l>yk+a6zTLX}Y(Y+~>@4&Wt2OD2YAZH9}M$N_p( zmDpZEZw8v1QO~43VFXr98Y6RI{D<;cg}}Y1k($s)$H=46sW3XBx%i*+f|gy6a!CfO z_t6=#DL-%u)h8xg)&2uZ-w`sEGz3dD=Z1t8eG)FiG(vi!G4A>jOMH=|DA!S!NLMI| zf)Hh?k2{)X&!zaE&d(A%8I5Vfi8&odA|xPgUWU)<^f|a62)VMNnl}HilJP=ol>Z1s(K)= zdr8j)v2R3hWL=|J)#)E6auQ>Y%&a1$P%eRy$aYT{ktJqiPpX@eZtpESN*=u$X;i+Z z?88=UDDrgNkRT;ckQ&Rn=aQkYaT$97(Te*R0T?-?8C)?X!Hxh7g6?o1g%$lJ;0Ujf zQ4wUv@$KU-^XX6BQp8sz37W2T_?)~fb~%AXnRGOzp9!WPBa&u+qTlle8|#&Gd1p=u zQg}?gKdV>NH@kvSpUdUXveRTg6$Y}YoelpHu0=@=wR9drK^MFyS^)~ioI)jJXpFc* zox0-nRM;a*GM|HP5LwULkiN^hr$rMN#$e7LByw@ER~Mi>elyF&{Ki;|O=_Xgp*N;w zw~#e3vN%vsv_f;k`|`(}tQ>n9+H*_AZz%q-S z1hd|~FelE)W0u9lv4-4zW>;`!ET zmqYh7lP2i-q*~#L<4F8{*Jn>a+wYp>{+@7yeK0jWq8Bt)ZR*rrX$*_(u=g}kgbw>^=yl4`FYN29YK|y0vV?p7b5xz+ zT6T1M2v_oDWSu(qAnWO5C75vHHhA|!tZ2ShM$sJtC_~+hv{s@2`o)l5jUPnASZn)%NmRVT*sz6;-x>ID8rb@J||u0 zvO18dac)PH6G#y7lV6|FR}hp$1qn}`Y1WaE51D?@Qzmks^E56-U|m#LFRgJWT0}99 z5ZxF-cY|+vDnGh=K}!O`K=)P5*+AV-2=+f%YjcnoX~-_YJ%}q*I_bFK0H5!+gt^M| zDuYZbqTo>quFk}_x3^~H$x_>DT4W9`;e4CG%JBMMrAf);TNaKnhv*!+M`k?@T_lyGoSmDsd{X%pw9^QdSymt zXKOQSB_p%I>xWhjeU&YlIyx%pk4}CH>+m@8bTUx>ZuH1&L%og8Xt^-X+ZE9O0StY> zNW(nsqZWs@$~g!LA5BQ&WrpgV7I3)*+53W?OcEBOnvJlz)fidT)Lr&<9 zm_ejD(l^YwI|>N{2m6{zmFoZeBt!!waz^fjdg^Qz6P_H%9EmqrW(;CKbqRX)Vfo@S zV>RN$o{0+X#ORKo^Blx~OG{9+$h&M2kRGLsJ6CNa5^*q~Wu_=c+h2v#&O}u_0l0aQ z+<%WD6N0#7mkUpMei8CFv^V4~l^GwB{?z_$OyqLrLIpv{>oEbw$OIA+v$X|ZUBUCw zsjMEMKLFq6v$JANXO6S>zBWy#V7Tl~?U#zA8@c8X_Xhy!9(eO!!<)V-$1E;JmX@9B znP(X7eti3PIdJ+rEp%{$$Q7!(*zXp`L*M}j|0liTcNURT0NNeu`J;*&S6}bq{jPs0 zBah}Y>IffrU6(ns)1T;9!{#&R<{4#>STswZ(mFsGh9je25ZXps5W2M^>_du)Lib90#hehghp zQ_DJNC?L-WZ+8VN%kE@nFk5(m#ud`n>dsETjcb}OUm{a&saYcX)Iw}%+|#1x_j|*G%C9YT+yFnfHySC=mBjxH#Kw zcN+Uncav8V7&od(R8my&jgu0)ecYfbMEPyYlm`*|l>y``-~aqt_@dTi(cktP!1h!O zufc!ur{shjgYhnnBDu#qoD$M>p5}jhePwKfF{U6Au?Y^b`|BE9El5Y*F_hJT&L+xc=Ctb6A-uW z!d=Mw_wNr5PuV&+I2_;JYkFt~pXOy%TznDhrvaM}TZc!9rN#jt{T6DJLQRyIN46V7 zyqEg22jwyn`^UzlO1hf6#P3ifaekpjt^XntA{fvSv*?v8H6Tj94P@@UjQ7S=lUo_m zhCJ=vIBoRh3(qEgYwbkaGP^bWFjhnO)X&-L2>Dis?yi;-Z=8O8+5MDzWmi|1JO|HR z7{;8>xa7FVthI5{6(#q@{hy@`cT4_cK+8jH`M#qKeZUUhA2c0dx#Iupv6``^B`~w( z9G1-W@GIZR(6ssytMMREM~L$b%z3{T?V0na+}iSG)sXEy%Eo2t7s5A7zV0wym$zWKiaML}CO{wB zQCQ1uiJ4xHgTIn(ItaXDHxc1m0ukF?%Cwny=)av%>@_-_j(i8R8P?J^9T^Is=z?Uv zSI`@`q-f-)_G#e>YzCB?;fxazR2DfSBKiHBnny}@%g_;-L>u}_Az@LJ&e`7>xU|t| z3Ju@n(bm?+p+t1YMn@qX+P{c4t1tv7ZF@K8jf3V0bS%aRJ>_8yTbS(YG=UjNjTli0PFKT=%YY^B~r zJ8H<7@T1WN>~=<6kS~H^n$Kn#sla&U4vkQLW<9jv!%?~0fx_NkY(6%j`0 zl&wMwouL#vqpL|qtaDft*g|N;V;tDI^7lfxbKgJ{T#g#HM%2#}llQS5+Z2dDox-M5 zqNepL>*PY073#U1eP&`f*Ww1uz~EY0{#PvCwx7PA1sCzk*GCC5Uft0ME@A7Ye>n+p zw=^AFB`G*3dsb)S;ddv)Hk$kylR-N{uO~L&BRxG6wok!#@wLkjmzgchJO@bc$HBxJ zt|u&}naASR?R1h~YsgHLN4M{WD$`+BwPvCf+Lb#qlet#4mhgU>uMuJ&&E-^))`V}h zK*n_d+VZYGoYtG5hz_Ob4cT%cC-l6k>VhB;M8`2;n5|%&Qc2K*IwptUQ@%;q}H2!$1>A-<5-#aupX#SqH`SUP8bxZr4$1rl|X&Y<+3IC>%^ykQ#q?4%fvhP2KdYkO&@Ey z_mm)A9wJ~$-4=_XRQrH67CRr9&H%{HVeE-B0#Aes&4gR)AP^l$mcmHDiD{29?^HR1 zoA>zH68l}2ZN{=_u9&xki#X_#klF8o?O*ck$@lK^r_4Z~PxyW+6Jn`uID*_uh8=gI zXzt54TyRXYoQRq#xv=|{ZM{)HBnI;U-!#ZbE{_(wJ+6g9d~t-h?+bc`#cK4~B{x0{ z;ZAExmA`)ERd^xA#(2e%x*s3Usj9g~GeNsX0j!$a8oxyDc=OKcN{u}I?y)?3Q|StO zubGQsmUm8R77p(|SQCg@x(-s&PYwDODlxu;Q+(C!;apW;@m%ebC)g4G#b~2BXX8*} z&#(Ha^FcgOMkqmwuoqo^gv}1fW>49q7J23RUAV+MywObH)}YB>Y)+wMiGf9f5vZh5 zfwlegcToBFR+F8YFkF2=;$ZA&H_(~$AnVtVi-D(4oaUG9tj?~^mA*u-m|LJ5G1xH? zp`FUpJEnReZR%WNXwdW|cfI)79bV{N@W&?Ns%jOpfPok8%V&N+eUk_y=HT;K;aIr( z&!Wt0j}Nw}0io{PKcVvoHzT8J*R6vMLRa~BAQY6#Gsu@)AsHFRNm|Y`nL(sg?lRJV zkDhHlRoyAx$2DXBV%AVMpy{Q$8yoeu)&f#yL{UBK&G7!|z3$9u*R{gioO3P%2S37% z%v;6YkEqAcQpZZb)o;Zd1LRjc{ih_G?J+KDI|9`5Fm(s(m-HV{tSg~%XC!P~N#CHZ zhgYml)PD-tc|F;t-vF{R9JiaIL0f@`rt~|52}Eb7hD9cuH4|r%H-GT&Jtdog@--AO z%@1HG&(D|7(F@pLZX6i~c79VzS!CTuBhU%jz2&-kcQKsOHV*OMd;cQI!$7-dd{Gz$ zPVK8^qsImtXwA&krKNJ3fmaUvyqz%fW1%ehds43jw@)c?TRpPOY|GOE+L143WvG~3 zJ%!eMR7Ti!-Cx?#2Q&Kt1a%_qO&f%X8b2I4lq)5Y9t>VLD9SG%VZ=8^2Gbr5d$dl% zS6O3ycQDz{cC796@vot+izqDmwhw9+&}+W}g1Dh9#dQfVAVtbbO5n?LzTK*NsWLRK864 zE1m{+ezy#If&D2+W$rO=VFbd0HQ%~EgOHH?6e5fngc&ce&zMk$u}-rxSXsqit`6W)v6VF2tzyhf8k(Sa}XiI@Kn3cyFU3H7Fn zow=@NMv}`*G~$@_e-|v;-ZuzL4}l@Q!zxiSZ7U*to#k*7LuiTaq4WN_$%H@tCwSELovi?#);DO=eab--=ZH7HKd2gMR(2QC9&7Xts6k@9V~7djo1OeN~c> zWEnwYN%SEWB%PD4l+Gi-jGzC;b{auoZjRFv%_y;!h7in zZ80tU6{R!mcYGGPP^WT=lc$kUSxyw9{KvHPWKg;tPI%ir6XW9bQf|T3$uFUgsmNPn zPf7F1`w^1%;fK1RLemV4V1oG+PAHhZVoW!=dk$|;xv&~NcjkB!bv1$(`g^E+d*oNX z<-f=JJ%xgMRTel2eH zpzNJ~u=9aIp{HPupG)#V_LlK8gQi(nchnterdzM}*eib>a7&&En16W zB+nMV41!(hsb;g6JjZ%VcRkv)f4OJ5h)eGPDo?69s{<2f`>)V;%Fvwlrq7L~ZO3^W z(q*tV<%*MAPydy(b7}ji_3P8gpINJ=Nf@6-BBDLElYoub?j9f84Q4EE(TdticzdY9 zX|7iF4;laTd7w|`YT24^EsKWF^Nsc_jYw|dfGHaOPfKfvn(%jMm+kI*U0Ge@`aS1K zZ(2)hQeLi34qW=yH~$>ef9B>gDf|tyqw_=~T@D`$JxUlb5BC}LO}6M*#lq%`;kdZBZ7GN2M4%nZfjO%f{gkfr9@=g diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/simple_bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 zcmX9^dpuMB|DWqHw{k6)QGJkWrBE&-B;}Iauao2&llx^h*N|J0kTRE05lX0BX1U*! zkX+_|zie~cnC*9bf9LVo_Rs76x;&rH*X#X0J16O$i2)bKSq=~g#ASF}?>_KLJ^8S) z0^jE4-R>Ze;(J3q9g9$gjklJedFrH&y@dGnCOfxpSk2|S%e#at%Kv}uNTs%Fe%kc= z{o|stTd$9e`oC?PBNdUi#J?1m@iUr(6SOgKF2jUb(th28#6TrouiJ*HB9p9NRbTf83FqWj2IpJ3a3UE!AE)dIY(O zLM?_|yIZ^N^>^e-ciTG|6(Ti1_Mi+S)g)8%$-#uX=4IEBK7r{tgVDJIJX$XG@(gqu zT9si*+n)=$w&^u7qSk%Y-q=xN0*<;@+CVK_DAP-o2ElYk?6h~UL_nG)@&nOo29$|h zY;jFs$HFvHZ$9m`@#4eE1S9Nq6e{9%N(|D*Q?@?g`sox2(Sla1BK#&JMpY@~0< zBZ$@G%*=E1?pKINz_$_XlcSw~NXL{|hN12UW`Hpg8{?VV+830Hc3Q!VhONXHrdtm% zNc2hq$43*?qBV^nB;mGOQ|%T*P5cY#Q*A8B7weHjX65tIP-LO<)FT8R-ku+R>07=t z3~xchKFWU@9){KHX}XEVNdchpBYL- z$LM1)>8IPg3uf*wSfdsP`Fmhtp5Kws3{SmOBNN4l2V_L|)3BkACVd!l3Z~F2a`pp{ z{CT%XH~NPiIV{N?avmKJlIFT*ImI_+dU>)u7BnZ6gG7`+JbV38wHV658OgzJly?$e z@z`{7YJ!0IJv@iG5qx0xXk{mjKY@lU)W$%5Z;rE|iB8wmr z>ZOMG1=u}a8A>Ps;1aPx{q~jnNz&h7A{#O(6%~;!=ckKIUkSl5#)%v4FNHW!mS(6$ zge-cn>y9ScMCoi}kjL10kI#@1u2U8DE6T@`5?Tyu3F+xSzsH1H+K(jGpCSN707z%J zdRcyA%EXG`m9ONmi-O3}sQnf*HPy{MW|o`J5`p|-6UsLvC=CbGvoBZAL_(YIUA(}C zq$K|fWu)vCoj_OCV0fig=84)~>a-rL1fIdz)6rQaOv!>%rltZzUb?D%W}1Zc4GP|p z^H%($yryvII&8*cvkO_3a|6_Y3Ne^+^dZAqx&&@H*&jW<)x?7BK+&|>2kb$D(%M>D zK;v4|9Ja~chD+0dRd4AudR=&@TfB%M^b#NZa4vqnusVGTPNf2(*tJBxI)af-OBWbz z{}u9MvaMdJIVK5l37}>h;SU*cMPwmcN)}e1ygHC!bQ_m8IYZ|A(o~$x2-;Q+j*20J zQWJ2U^AN^JAmXdpZ86)xkZjk{4ECU3CG;0O^5|JL;*R-BHc19csy~NL+fwYV_;0)5 z%W;FaUN8;IxStl5tYw=dkzc>E6EOUb$3`0PW3?dN-=J=ErF>D$q7<>AyC(|T3xl9$ zqR32b*C?UXP!nNOAg3%!KwyHQTkUD^Li4IvWDraaCP8C)7O8_(y zlvI*W=vYDt0!2VKTd0xWn;c-m5=1XZ%;AijiCUeL1*OeU_`4O3R#322*R z^YD<>!O3Cv*gToP5Zm2hXcd+5B07IJJ+nsT*XseyIuxdR#iZl-IrKG>Gw42;>yG>( zZy=-m;d~>RyqY|YCCOo5(no2A>Vf+)wX=dO*oOHF4<~sj%}MSf*_RLshs{v=?*6@3 zN$DI=-Zo~KaQaj_uqKLLiMyzdqJ4Q}$4{l;lH6aUJb^8+N;NkgYPayn%b<0hmzJ8j$^?zlvr;Lf*Kh97Su1cHn+;u^#G3O1#u){t7b;o{_u% z=>+J(iSHBQSQU5g$7Te4KxgXbQJQHb+P`ur%3mj?C7IKZk)5wG?F13H)$~L6Wub}! zeH>;z?@d6+)TEY8nBTn8o!gnyHy-i9#WCrfsXS~QfYz1Qu@4?&ni{{k#w(mfg^U?D zqt}*Z;-U=^WA{~7%MVy?K9JWz@^CdHH9D)PJ@ot!vBAEcu&2Ue;S_fDskG>S{g?^;^wD*ohw|s zcpKojY7_RrdLdiP{wj5=vH_Mr=T?@imZZuv8uCP)ISH8ATDE!Ps|R_?QI&%GfL>rN ztuP-Ax}ZYDNxfzi5r-;1zlgYO)x;9-J?C_jXeKERjGcpVjA`G$Ag>`pLxb;1Y+(yS z7dIz0bgp|2fE|AWP=78~R_^g-B2Vtd%paR6r7j5@=`mHAzY={6aH>Fjy3h$$5qsGW(0gH8UKlG?5=vGF9!KVl6&i@&es-AsOp zp9<0)Acph32H!2xa$gk5s8UjLMnx{-E2x8tRvRzM15`=`xnQf`3Yp&?urrCo`kAgI zM15W%Gq&aQU~MVzD;f_62NeGD{|}P9$zQua(SkYqqe-k`$+$(Ol&e~Is>RDat5@Xc zZVTwmzo>{O4~9x7=Vr?qd?jWp{90!cj&MI8jJ@JbIc1ZsFjMGxvI&b;QS+YD#WE8% z_DUW#Feu2P_)K`k@1NuRnGF6(M(S`d;Fcja6jeUDK``_)q_;OX*3N<|bxHdR&YAAD z*plHPZ}S8h219H2;J2voe<42=t1A9-JvJle?K#|&-Iu#PA_TpsEzATI%1_0YVPz*$ z1kGv2C=csRcGhH+)_ce48;hr5S24Cw0gw^Z89B*w*n_80(Q22y^F~~Hu#yJ%BxIOp z;1a&E!g9h;%fV2fMD!5}|0VLD;DAGQ|KrPx_}fx`5SJHh5LP6PyxH(kWr){?5`7V! zN5nrlP_#c>el)QGMCD@Mjb&oEmny_h_H552$)Jx2utx^%TR#FvI(`A6UKq7lmk=2< zg+#~jgyauY9~`}JPCQ~|ElA{U@^(JCptc9{4rzn(CMTA?}7%zePs8T8JhxV`G6qwC*4z#68Gf+qB zN_=xfeZ7f2?#6emFQk~vDjrn0&^ch&q)#^U5#YBw$4`I*pI-7QYD-{g31{zs%;WN_ zzmds((azLSpue_7Z}`|3w!cK{Lf@Hz7^0rl&mita7Zz0gN6Dg(bq+l;uqd(m z4A}4Hq8PN>?aMw*v(ANKV*+%+DLXo!+N!Aa8Jjl(aCP?qa9Ck2`ec?x*rQAa;?5~M zCqF~@Izf)UslNZW!Ch(G>ZE37R%Yhp0!EO`%0rbt!GcDNtrCzk`u>v+6Ng4G`_Di+ znL>>#_8}IH#z=&jqy*uCughf>d*@lowEudn3jmS(%Y%Q%)|C@hK7hXqu}>K3F3f`O zw5q3h+Q1k`V19|R6?*_Bu$({IOj_Tm%d$73sLpb!Z4!eOzJGQV360j~m5V3$k%7Ys zU0@!(xj`-R*#j``=Yo7oN-|zxsUhYbcXm}#5&1VBD=8_C2YUcf z$x)2)Dp5b1B?<~=oEvvRIWZ}za0=e~y4UinY@dd&fCMh^{bdOTPMh*d6eJ3*Vd?;k z0#9=Jm(AY*FVQUThbP*=>zyneu{_5Dh#?+^BnYp3bwEaOJ4|S*s6Vv?qFCDVx6CzCR2LwqBQ$1 z+U73H#K4J)jD(dqTbL>Y6;>4NwSfs>R;_{t0sWInMko#ZjUK;SH+6y#E=HS0u#u%A zbN##=__>h9q0mi=Ilzo(M;Z>E<+J=hfKG;z@5S)s=3Tkd=G7woRa8^xG{RjGUY}P2 zP*)?s#E&b&*fDHNipX^Fw~;Q=v40ylmcG4^`bZBEQgd@#x+L8x>IPg=%57Q!oZfCv zce97Gt*>qQ*M*$hOtTubXj-f6Ga77MMg6|IV=k=*LB>}%S z7z-8KT~#zt_~2~1f*K`Zrd^Kh9;3QcevFvNp|IdxEzo!PUuY;%{eBy4mFg}uavx7% zOC1w@M^z`DUJBANNsR5x3!9aaQyW_*YB)%SX|!me3EU!d_??GWuacrV0wDKkZ_A8M zb3))XR~9G+X`+Sk%T>L^#TaEgCXzzA+DpEI zmFcGF9RdgTZIhAdkvLo&k%tvGmwZb>;EKPPK`dxuixP!|tSm{yz4UI}SnNzRdeEUL zN!Itxac;-5HsJls%%gTW^Lvd@7qHcv8>V~+0oW4_ z?qlBBiDjkEyFxTR@qNd~9l#26^rz*_#*f;I_{%xY)lp##PjF1$ruilA2!Zt{ocmxo zp^8Y_m6$&Ic*>O@6KMvIiUrr9?+*NBnX=LDf8x~tt0p|S#x}3X&o882y}IBTPO};+ zCOWc0`zMd}b*>gJ_avqa*X zKY?wQF-z-BxsE!Pp%yA$Tk+c^eWVt^bVpC5(Vi6oRgol692P_y(l7<8zWh1c21|Tw zG(!Ku!vs1w?BGKo6bPYEUYw90|Ci}C+CW4?M{%X0TKh~zj2-VNnVV-rJ^0OZL%uZM z)$RHL{8!Lp68&Sr>wjS4`^SGOYlDa0rOYhjiPfMPYn;xXbNf)uJ5YEp&Vhd5o`fYH zz9O3{RhEcr$lf(mANixh_xl1p&A*~mo6v$gZ?M`cmn+V#Mh-puijo4qLs61V9g+~w zDtW(Ig}7Trg~VhthF>Uf!Ofj-V&{gn@nmm>!yJyNO_PP@9q1>Iiua}871x#2{kKWl z7WPpq7PUH9l*=enZ%jFp?VGnP#KwzmiO`@^5br%D>-GC1Va{Qe=5|YX!(g0n8`=do zUy{cU5xwn$gb?=)(tC=&WBgEZh}#oX^;?jST0qzI#fX~XNEGpHLJMNK^7nA@J{a;6 zM>_tuth8+~t%SsoO+yoFhKj#mPD6_QGVXku`oufYlKN>h^x*G@D*h@7Yrq7AxP z{rXhr>u>*O5`V|&;z#2ns=Dx-d(o{w6S5@x6J{cD&xVCOeox)sIksI=su+|I>dGXc zFPF!ViVYqOO)hga%U7`L)5NIf!59g?8K`9S2WC|^+)-Rm*}(6bkUMjvXaojJp=Dg7 z)xMFH-9G68Z&Bf*bW*u)Cc4u(1{Xt+bA~c#LAUE?h`;;KgcJACtVi{|n9kv43BihW zcdHf}lz^#rp6+chy?nw}`IbmQy?^=5EVKd7d)8JGh$Jv@6irqLZ4BI5+nnnpL_;}g zgw(nA)iJe1Dom-Oa1_%m8>`8Xp~o!TU1^k2nR`gOE%5JWTT z??o>I5%msT+PIigjx&e&_J;(miuKk~J;Fvwp4=ImF)cd(CmwW2MJk(u*P2F$F-@!( zWSdnj8V>)-Y=iD$=IQ%^OsF6U9mem?O26^jd$Q-sC!Ur1`Y^7h?#H9X1!&9|Q_EU2 zgX9AZWL>@hjwxAjl8qDHc17vZcL^zX%U`u8`6}V4<|A>+9Fa7JPG?4H8&A}On}YIG z4jbgV`WXD6V@XmlB|?VnyEDA&L(v-(4Ox+EdteQeJYt3dc|?1_05&ws-@PgB@;1+T68zXS3gvImteP!ifTz_Dt5>@BL- zTV!omynzXr|6My%xz~r7fFU3+!nYT!&5fb|s|Iz5NM3)pW3)|$90kqEdvM%}(n&+u z5<*v(L^ZR`+@i4#Aigi<&e!1S*80_$>GI+w1|ZAYSGd9i_xs*{)2naMFTS8Hg^%s?Gw zpn^K{;=CJwttC{s<*8~SoM|VmU>Lq`@}!5n!;CZiI)f_rD3a9BG%#xzn=(~ew1O!p@qqy~mjtL`8WJYdBj$!LKP)4F@oW1wa@S!X zk_pGQ2PIG&qM*x+Gb;?WhJD$pEjadG@M#Sk6F5!0#1ye4orJaU^N;pPt~KBo`&U~h z9xm1SHNTyR>w~3B6P_4J&3KXi60aXT2!ajCSva$#XZtoczsR$odC70s?1X7aY3-)# zr}w0JmE|>f6ooMK>>*%uLaL&6ntwHjs;Ao4*=qU~!^iREq{^4&w%s#I(kYAcxd}Up zwYSoH)_l+p!Rqk-D>#=o$A_we*e+>qH2AHk8@L5I8}*yOJ?Qk~`?@N+ICOB?%6#cP zu!YrK8}*gH-Qs`T3*4xI;Zw8yQZ4?WcnM~VIGOm{I2V2TG}#NqB@lFwIa*W|`O$Z1 zKrTP(0hCg`zlNtnp0;47X3HPsDnSdjV2b%`v5)2@$zOj$m#c;@;K{wq^xy{yQzzST z0GfpoVHxl<=EZ{=TK^c>h^#Ko9T%H=ISnjXA|QxqFv`3x1mj5gk1!t*^yj^%tVrbM zFw<-Jw9Fe-b-Y2$d`vZ*?oZomsv)vcpCk-^3TA*$KflgEY58q-qS14jd5){OFlf31 z()_-uSTUgK=6z2u&se|an@w}bSabSHat+L;#%0snvj8q*c5$ z?J(5Y&G!7>E%eRTzy2jWT`ix>k(c16P<_U*6c*eY7&As#YU$@1>J6%Y&9yZ+0jz@2 z&{cAOB|QL_>B7k6O~FRB;{<`6rS(6nF~(f0GHBQvJpAiWmoH7@W_{8H>3PmR(ju#^ z=9#)FZ8GG2rlf;9+p748(z5tI*nI?L8heCyJoC6T*_tG7AA` z%rHp$ir(aWz^mc(BTT)xEeBQ|_6Gn}Zd0sajKk}{=&l(?vw%+{*z44p?HuMf%mv26 zQzy1`lNYDZSsD{E%_u4+98-yDo0IglO>v_QT3;mY?$FO-vi6N#uTF2Cb5itX#PrkPB#KW-IG z0VU(+*^diPYecLrxuG0rgNq~I+KuA`YmSb0b)85?WDPJ_y9C(N`a zk6SC>BBIxw#4J-z5{o#i9{FCnKu}Ptf)ldG1Iwj~WwL+d**D}4Wt89P1P+N9MZEuY z^gYqyLo?t|1V8#(S?S38{vO=n5+SUKNZenCKFl1zn{hL?SPN>&Curo0JzuKfN|(c7 zZUjAhCR_f##G0O~2@r%Xw_l9WkNmIPX>$~PhpgUnioM(V!Wj~)F0iY)58Mk1x;8R0 zVip;x$;EvOx;&B@2eYibV5Li`?o+K&<(}BXT%n~U$mOiEGBeH!QYkyjA4*F*1k`zx z+dZ6}qdL6J(IyeWVVNNey?Zi)_15%@i`yPdt^^Rk%Y)7sm8bn&M`E>KSQc6uj+x9V;>J6dFxUM zN%g=&nv^bY^+#hHr>dxt!}=C{QiC=_#g>SJWIPHLwNvHxZgBof0?#lm7VJr<9e)kk zcKTQAEwuUfbF9C=e@^20A@`uYAqY#*O=X534&vv>_}HxZ0hu+vn%=WJG`Ucim{nVFsGK6qDK6T5m@eB&$D>0yR6%f-;E# zm5)k{Hr9O8FufyFqUZ2mJ^6h8R!5J1vN!M^tthlCxB4DwX=%ypdgs^p_!)9lq@CH= z)+!8%0Y@$sC$@)utA$AVl z6kaR0yV#pO4CvmIIM=?mm7eWfQCM7j-VbQyf{)ieP_oy1%bn%_$Fn~#2o)pZGCvDB z7FW?Y3J<>DRw@1(H@J9bh4=f9Jh>P2qiyW&0UlkBS(m)A?twt?^o?m5mwTA#)B5L` zNTKQ{2rCDd5g9JwsZm$kQdQS~&_lxacD~VGM0RKV$NYj$S;p)FUdq#{Mu9I@CK7I~ ztbZwexrC>O*Vvq3>!(J=7o;S`U$*HVW7pmtZ>DWjqFw3B81zaNmR1C#kz-Luo2rM4 z+3*!Iah}(9=GW-xEfu@@nM;xP|GEB0N3jbx9}rht;LWYQ49>Hyj0et+@B3T*Z+7H_ zo$nOFmD3B%&vgQ9(O1hb9z#X?f%_Y_iE`B*K0YNDb+2iX;oI0-5DJgr@8{STGuIfk znJQu?!0Te9L*>flP@3hN!<9;{FZ9Fps@DH$TaK3=C80)YQ`^kktG&S=k8$_tH;kMo+@ zJ)`NIZVuWvafdbCewXvHQ)`1PdsE1U_ z5ptE?fA6jiXQiu7|32H_-{1U<<`Mzb)8t18`mKx<2wP|&TAYQDb*Y3YFrj0n*w1zVNY{e(l6u2kG8O;me()RZ* z54#REAh5=7Z)7#oX%UC}69`XWbXhn#aet0uH8wWR*TXh^P~RjW0??~1_{;Xyr+}RZ z1e@>PDVutx6ut-B!6SFLBKJnDw+6Sfva)y$W%OZJuDH-@P50h<=Avz&ymx@}!O<6I zGp35I9dZ)l8=F;HXJK+a%%gZ~4TGkAKh$iXoi@4Xi=eX5ZmHDNeFov%Q7QfC#fRdtOIkQyaGw0f^;8V z2sPeyoYLGiHuG88QA&YYQ^f-PbD&X6(&5_r#?^F#%a2`%G=l-#6*Yh62j6ziCaI;r z$WGk6q^zv?G&k3bpVvw6!N8TB*RRHfmj?dW`5ymvwV0?B@eaQGds~+Bx>@#Ev-v;# z@eS*b!Bq}ch~UG#gWX=0s@?SQuSK-^2pMDQ)6-!%7sPWk)48*M3nzCcCMJ$x@dp;p z!5_2gX!FQaz`*ngm_J3xi{ab?znL9o*ERT1hCb7BVN}gop*v@U&rHmtPy$6?hA z{0t+Nl^Ww8wJ-SG2x~7ZwhFE57E0dl7?L+fzdau7Kp<6&9^F+`@fQ;5xyhLfZo4eA z&8q)K=v-P^`hmgFuIoPK@qm-MS>lp49_>hFl_F%I-nCqt;Wg4_R=ujXr192Z!_d?X zlk>JV+f;Ffx^`5RfWL~k*vLhWAFMcv0|!f*L;-nofau02XG;* zA%E1e!3EmWcU@HpYYtpSSnC^q+~~o9lTMc!w)(4@=^SL^8`hLzK9GuhL*nGnVRK3Uk-BCKAZs-HucUw%WHvI+SlV}#|LeL?M8aE+f@Pffrm6zW^LIct|ui30zSSnqE9aViiJf86e9zho% zWRCTJp!D#3aA?n1F@81#{;18Fz6`N=a%$A8iGg=kzHl#>sA0-zYzk96GQuYscMet+ z1ITo*ONGw!i6<(7mOg*VuKLDyU7y#S7Z;Z45`GxDZvd8>Tecnr^1$TGq^jC0+K8VM zFVF|srOO?C5~R#5Q1Sl08pf>@+=DdEAgyI9cHdsh^&W10~U-P^Xm8A z-m2^0h<6#9zELL(!;b#HZ6K}Fe5OC{1IMWVlp>t>`;7_L!}!Oe)0fN=G4O!@$HKN8 z`$qV?PUVYUh!hNykL<0gw+7-_!nVP!PB5{>-rbhRO$4aEW=1OG2wL{}--Wsil{ z@srV6+_B)QUKfuFG@x0Viriv-xij1u@p-j-1D>ApZ%3$(uchi8K$3F&8YDWUFx#RK zRf*JvvV)kHXGNs&Ro+>bH6QMqKE1Vh9iq-YWBunuFhuQ+U%k2IwVAnGW>l^v((B}$ zgyo$U67k(xy{?Pms;JQ45wDN`wp44%HDrTOk52d!=W*q1dL9$I@idCi^8OO&Jnhya z4(8J-?q>rvC=I|PWp#D1%F)qr?0$;Fbp~qB;fd(Qx}L9;6uKM>LuS59nqQ)jUHaQ2 z1tfYPQcK&m<(aFtHP~TQSLN^ijAQ|zpU^*SGzGh!8!315uaC{X>u>?4MdDn{P4Tht zW{t~)2IGJ2W#=B;oi_g zDkWrsBXMEtiZ0?{*z0`M{N^m~gC1#p4a-O?2?t)ydUiaB4!W>UmIrpiZ z(X%N#m(!E6s+W$*qxqX+`FG{9l_yFxrH@V92KM?en|*7wjSz4n^Xy}*-(4D(dL!T3 zeTB345;e;23ztt!gCFa=%kxog;%~|{C!fTIrh#J^Eg=_3b&%EsR^?sF!28K5(GJg5wJ_I#gz_+Xdm zeGOaKjYB;4b2N*jFX5>>@_Z)eUD)Wi(aVV}ZBZ6be+3Oc(f1s3Ght`Rtd|^Z#5%8$Y|N0wh z_xt$cZ=Ym|n3XfkG1|0`8+d9SI{(2>vEF+gz8?<;N>tmPIcZOyeKhjV{q{PDNtRhD zTvOEf!apqBNZ>dRy#qZSbDBLPHTgMFE&u&A4Ww~thHFKY->@AV!^FiS3U<&xsbF}c z*;EaBE=}6AwrbiIQI(36XhGbT)w%?I{I0?-0V<4oC?~rB#HNS4D|m8MO1@hB<3|Kbt<>aW?O#!6Mya30+%zbpWa8^sUY^9@^#QNYCF>kUCnE{`BCC5cm<+Y zRXBDF{EkUhu669)Q|S8;&Amtfo54Tm*XVZ%kuR9Al;McMs?|bCb|^Ga^#SC0W2RLsD1zPVGBV-1pDMN;Lmgow&_DK zI^}DZm?J*+E=;d9EtKoxABLxNes)z5?Gz{$BYjr20`U2OHh=4YZSeGLX;R|q7m6zB zH6`SUY=SmW4KdNOJ$n5p-oo+|G5lc@4j>0Qh^C3rL;~j}T@D}9rjEYSE#54xyD;B8 zcxAaxXgM`|bV?5lEdc!HTv)H#>5IaOz)qcWGnnkD&wK&9aFsz+#tSsKXIr7v7l;P( zyn7t$9`9G9*Y#0Z=6;nYAV+|Dym10v>((B6|omo>`NAs2)3$R

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simple_bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig b/simple_bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..ccfc52c8 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = simple_bloc_flutter_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/simple_bloc_flutter/macos/Runner/Configs/Debug.xcconfig b/simple_bloc_flutter/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/simple_bloc_flutter/macos/Runner/Configs/Release.xcconfig b/simple_bloc_flutter/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/simple_bloc_flutter/macos/Runner/Configs/Warnings.xcconfig b/simple_bloc_flutter/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/simple_bloc_flutter/macos/Runner/DebugProfile.entitlements b/simple_bloc_flutter/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/simple_bloc_flutter/macos/Runner/Info.plist b/simple_bloc_flutter/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/simple_bloc_flutter/macos/Runner/MainFlutterWindow.swift b/simple_bloc_flutter/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/simple_bloc_flutter/macos/Runner/Release.entitlements b/simple_bloc_flutter/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/simple_bloc_flutter/macos/RunnerTests/RunnerTests.swift b/simple_bloc_flutter/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/simple_bloc_flutter/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/simple_bloc_flutter/pubspec.yaml b/simple_bloc_flutter/pubspec.yaml index 0a5366c7..c715c260 100644 --- a/simple_bloc_flutter/pubspec.yaml +++ b/simple_bloc_flutter/pubspec.yaml @@ -12,30 +12,30 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: "none" environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ^3.9.0 dependencies: flutter: sdk: flutter - todos_repository_local_storage: - path: ../todos_repository_local_storage - firebase_flutter_repository: - path: ../firebase_flutter_repository todos_app_core: path: ../todos_app_core + todos_repository_core: + path: ../todos_repository_core + todos_repository_local_storage: + path: ../todos_repository_local_storage simple_blocs: path: ../simple_blocs - rxdart: ^0.23.1 - key_value_store_flutter: - key_value_store_web: + rxdart: ^0.28.0 shared_preferences: dev_dependencies: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter test: mockito: @@ -47,7 +47,6 @@ dev_dependencies: # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/simple_bloc_flutter/test_driver/integration_test.dart b/simple_bloc_flutter/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/simple_bloc_flutter/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/simple_bloc_flutter/test_driver/todo_app.dart b/simple_bloc_flutter/test_driver/todo_app.dart deleted file mode 100644 index 00bbd158..00000000 --- a/simple_bloc_flutter/test_driver/todo_app.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:simple_bloc_flutter_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/simple_bloc_flutter/test_driver/todo_app_test.dart b/simple_bloc_flutter/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/simple_bloc_flutter/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/simple_bloc_flutter/web/favicon.png b/simple_bloc_flutter/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/web/icons/Icon-192.png b/simple_bloc_flutter/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/web/icons/Icon-512.png b/simple_bloc_flutter/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/web/icons/Icon-maskable-192.png b/simple_bloc_flutter/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/web/icons/Icon-maskable-512.png b/simple_bloc_flutter/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/web/index.html b/simple_bloc_flutter/web/index.html index 515108bd..dfc1c678 100644 --- a/simple_bloc_flutter/web/index.html +++ b/simple_bloc_flutter/web/index.html @@ -1,10 +1,38 @@ + + + - simple_bloc_flutter + + + + + + + + + + + + + simple_bloc_flutter_sample + - + diff --git a/simple_bloc_flutter/web/manifest.json b/simple_bloc_flutter/web/manifest.json new file mode 100644 index 00000000..acd22c0a --- /dev/null +++ b/simple_bloc_flutter/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "simple_bloc_flutter_sample", + "short_name": "simple_bloc_flutter_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/simple_bloc_flutter/windows/.gitignore b/simple_bloc_flutter/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/simple_bloc_flutter/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/simple_bloc_flutter/windows/CMakeLists.txt b/simple_bloc_flutter/windows/CMakeLists.txt new file mode 100644 index 00000000..16fc0ce1 --- /dev/null +++ b/simple_bloc_flutter/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(simple_bloc_flutter_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "simple_bloc_flutter_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/simple_bloc_flutter/windows/flutter/CMakeLists.txt b/simple_bloc_flutter/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/simple_bloc_flutter/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/simple_bloc_flutter/windows/flutter/generated_plugin_registrant.cc b/simple_bloc_flutter/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/simple_bloc_flutter/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/simple_bloc_flutter/windows/flutter/generated_plugin_registrant.h b/simple_bloc_flutter/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/simple_bloc_flutter/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/simple_bloc_flutter/windows/flutter/generated_plugins.cmake b/simple_bloc_flutter/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/simple_bloc_flutter/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/simple_bloc_flutter/windows/runner/CMakeLists.txt b/simple_bloc_flutter/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/simple_bloc_flutter/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/simple_bloc_flutter/windows/runner/Runner.rc b/simple_bloc_flutter/windows/runner/Runner.rc new file mode 100644 index 00000000..d6f8dfcd --- /dev/null +++ b/simple_bloc_flutter/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "simple_bloc_flutter_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "simple_bloc_flutter_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "simple_bloc_flutter_sample.exe" "\0" + VALUE "ProductName", "simple_bloc_flutter_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/simple_bloc_flutter/windows/runner/flutter_window.cpp b/simple_bloc_flutter/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/simple_bloc_flutter/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/simple_bloc_flutter/windows/runner/flutter_window.h b/simple_bloc_flutter/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/simple_bloc_flutter/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/simple_bloc_flutter/windows/runner/main.cpp b/simple_bloc_flutter/windows/runner/main.cpp new file mode 100644 index 00000000..f9abb2d6 --- /dev/null +++ b/simple_bloc_flutter/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"simple_bloc_flutter_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/simple_bloc_flutter/windows/runner/resource.h b/simple_bloc_flutter/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/simple_bloc_flutter/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/simple_bloc_flutter/windows/runner/resources/app_icon.ico b/simple_bloc_flutter/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/windows/runner/runner.exe.manifest b/simple_bloc_flutter/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/simple_bloc_flutter/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/simple_bloc_flutter/windows/runner/utils.cpp b/simple_bloc_flutter/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/simple_bloc_flutter/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/simple_bloc_flutter/windows/runner/utils.h b/simple_bloc_flutter/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/simple_bloc_flutter/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/simple_bloc_flutter/windows/runner/win32_window.cpp b/simple_bloc_flutter/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/simple_bloc_flutter/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/simple_bloc_flutter/windows/runner/win32_window.h b/simple_bloc_flutter/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/simple_bloc_flutter/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 7dd467ce4271de1524b029465ef299e2b3bdd5b9 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 15:58:21 +0100 Subject: [PATCH 59/89] Update scoped model --- scoped_model/.flutter-plugins-dependencies | 2 +- scoped_model/.metadata | 39 +- scoped_model/analysis_options.yaml | 34 + scoped_model/android/.gitignore | 7 + scoped_model/android/app/build.gradle | 67 -- scoped_model/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 33 +- .../com/example/scoped_model/MainActivity.kt | 12 - .../scoped_model_sample/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- scoped_model/android/build.gradle | 31 - scoped_model/android/build.gradle.kts | 24 + scoped_model/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- scoped_model/android/gradlew.bat | 180 ++-- scoped_model/android/settings.gradle | 15 - scoped_model/android/settings.gradle.kts | 26 + scoped_model/integration_test/app_test.dart | 19 + scoped_model/ios/.gitignore | 2 + .../ios/Flutter/AppFrameworkInfo.plist | 4 +- scoped_model/ios/Flutter/Debug.xcconfig | 2 +- scoped_model/ios/Flutter/Release.xcconfig | 2 +- scoped_model/ios/Podfile | 83 +- .../ios/Runner.xcodeproj/project.pbxproj | 213 +++-- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + scoped_model/ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes scoped_model/ios/Runner/Info.plist | 10 +- .../ios/Runner/Runner-Bridging-Header.h | 2 +- .../ios/RunnerTests/RunnerTests.swift | 12 + scoped_model/lib/app.dart | 3 +- scoped_model/lib/localization.dart | 2 +- scoped_model/lib/models.dart | 6 +- scoped_model/lib/screens/add_edit_screen.dart | 98 +-- scoped_model/lib/screens/detail_screen.dart | 11 +- scoped_model/lib/screens/home_screen.dart | 16 +- scoped_model/lib/todo_list_model.dart | 13 +- .../lib/widgets/extra_actions_button.dart | 6 +- scoped_model/lib/widgets/filter_button.dart | 10 +- scoped_model/lib/widgets/todo_item.dart | 14 +- scoped_model/lib/widgets/todo_list.dart | 10 +- scoped_model/linux/.gitignore | 1 + scoped_model/linux/CMakeLists.txt | 128 +++ scoped_model/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + scoped_model/linux/runner/CMakeLists.txt | 26 + scoped_model/linux/runner/main.cc | 6 + scoped_model/linux/runner/my_application.cc | 144 ++++ scoped_model/linux/runner/my_application.h | 18 + scoped_model/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + scoped_model/macos/Podfile | 42 + scoped_model/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + scoped_model/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + scoped_model/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + scoped_model/pubspec.yaml | 17 +- scoped_model/test/app_state_test.dart | 2 +- .../test_driver/integration_test.dart | 3 + scoped_model/test_driver/todo_app.dart | 9 - scoped_model/test_driver/todo_app_test.dart | 5 - scoped_model/web/favicon.png | Bin 0 -> 917 bytes scoped_model/web/icons/Icon-192.png | Bin 0 -> 5292 bytes scoped_model/web/icons/Icon-512.png | Bin 0 -> 8252 bytes scoped_model/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes scoped_model/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes scoped_model/web/index.html | 38 + scoped_model/web/manifest.json | 35 + scoped_model/windows/.gitignore | 17 + scoped_model/windows/CMakeLists.txt | 108 +++ scoped_model/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + scoped_model/windows/runner/CMakeLists.txt | 40 + scoped_model/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ scoped_model/windows/runner/flutter_window.h | 33 + scoped_model/windows/runner/main.cpp | 43 + scoped_model/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + scoped_model/windows/runner/utils.cpp | 65 ++ scoped_model/windows/runner/utils.h | 19 + scoped_model/windows/runner/win32_window.cpp | 288 +++++++ scoped_model/windows/runner/win32_window.h | 102 +++ 144 files changed, 3912 insertions(+), 496 deletions(-) create mode 100644 scoped_model/analysis_options.yaml delete mode 100644 scoped_model/android/app/build.gradle create mode 100644 scoped_model/android/app/build.gradle.kts delete mode 100644 scoped_model/android/app/src/main/kotlin/com/example/scoped_model/MainActivity.kt create mode 100644 scoped_model/android/app/src/main/kotlin/com/example/scoped_model_sample/MainActivity.kt create mode 100644 scoped_model/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 scoped_model/android/app/src/main/res/values-night/styles.xml delete mode 100644 scoped_model/android/build.gradle create mode 100644 scoped_model/android/build.gradle.kts delete mode 100644 scoped_model/android/settings.gradle create mode 100644 scoped_model/android/settings.gradle.kts create mode 100644 scoped_model/integration_test/app_test.dart create mode 100644 scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 scoped_model/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 scoped_model/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png create mode 100644 scoped_model/ios/RunnerTests/RunnerTests.swift create mode 100644 scoped_model/linux/.gitignore create mode 100644 scoped_model/linux/CMakeLists.txt create mode 100644 scoped_model/linux/flutter/CMakeLists.txt create mode 100644 scoped_model/linux/flutter/generated_plugin_registrant.cc create mode 100644 scoped_model/linux/flutter/generated_plugin_registrant.h create mode 100644 scoped_model/linux/flutter/generated_plugins.cmake create mode 100644 scoped_model/linux/runner/CMakeLists.txt create mode 100644 scoped_model/linux/runner/main.cc create mode 100644 scoped_model/linux/runner/my_application.cc create mode 100644 scoped_model/linux/runner/my_application.h create mode 100644 scoped_model/macos/.gitignore create mode 100644 scoped_model/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 scoped_model/macos/Flutter/Flutter-Release.xcconfig create mode 100644 scoped_model/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 scoped_model/macos/Podfile create mode 100644 scoped_model/macos/Podfile.lock create mode 100644 scoped_model/macos/Runner.xcodeproj/project.pbxproj create mode 100644 scoped_model/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 scoped_model/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 scoped_model/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 scoped_model/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 scoped_model/macos/Runner/AppDelegate.swift create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 scoped_model/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 scoped_model/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 scoped_model/macos/Runner/Configs/Debug.xcconfig create mode 100644 scoped_model/macos/Runner/Configs/Release.xcconfig create mode 100644 scoped_model/macos/Runner/Configs/Warnings.xcconfig create mode 100644 scoped_model/macos/Runner/DebugProfile.entitlements create mode 100644 scoped_model/macos/Runner/Info.plist create mode 100644 scoped_model/macos/Runner/MainFlutterWindow.swift create mode 100644 scoped_model/macos/Runner/Release.entitlements create mode 100644 scoped_model/macos/RunnerTests/RunnerTests.swift create mode 100644 scoped_model/test_driver/integration_test.dart delete mode 100644 scoped_model/test_driver/todo_app.dart delete mode 100644 scoped_model/test_driver/todo_app_test.dart create mode 100644 scoped_model/web/favicon.png create mode 100644 scoped_model/web/icons/Icon-192.png create mode 100644 scoped_model/web/icons/Icon-512.png create mode 100644 scoped_model/web/icons/Icon-maskable-192.png create mode 100644 scoped_model/web/icons/Icon-maskable-512.png create mode 100644 scoped_model/web/index.html create mode 100644 scoped_model/web/manifest.json create mode 100644 scoped_model/windows/.gitignore create mode 100644 scoped_model/windows/CMakeLists.txt create mode 100644 scoped_model/windows/flutter/CMakeLists.txt create mode 100644 scoped_model/windows/flutter/generated_plugin_registrant.cc create mode 100644 scoped_model/windows/flutter/generated_plugin_registrant.h create mode 100644 scoped_model/windows/flutter/generated_plugins.cmake create mode 100644 scoped_model/windows/runner/CMakeLists.txt create mode 100644 scoped_model/windows/runner/Runner.rc create mode 100644 scoped_model/windows/runner/flutter_window.cpp create mode 100644 scoped_model/windows/runner/flutter_window.h create mode 100644 scoped_model/windows/runner/main.cpp create mode 100644 scoped_model/windows/runner/resource.h create mode 100644 scoped_model/windows/runner/resources/app_icon.ico create mode 100644 scoped_model/windows/runner/runner.exe.manifest create mode 100644 scoped_model/windows/runner/utils.cpp create mode 100644 scoped_model/windows/runner/utils.h create mode 100644 scoped_model/windows/runner/win32_window.cpp create mode 100644 scoped_model/windows/runner/win32_window.h diff --git a/scoped_model/.flutter-plugins-dependencies b/scoped_model/.flutter-plugins-dependencies index d4d3c8cc..e577057b 100644 --- a/scoped_model/.flutter-plugins-dependencies +++ b/scoped_model/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"android":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":[]}],"date_created":"2020-02-10 11:24:35.748663","version":"1.14.7-pre.38"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"integration_test","path":"/Users/brian/fvm/versions/3.35.2/packages/integration_test/","native_build":true,"dependencies":[],"dev_dependency":true},{"name":"path_provider_foundation","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/Users/brian/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"integration_test","path":"/Users/brian/fvm/versions/3.35.2/packages/integration_test/","native_build":true,"dependencies":[],"dev_dependency":true},{"name":"path_provider_android","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_android-2.2.18/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_android","path":"/Users/brian/.pub-cache/hosted/pub.dev/shared_preferences_android-2.4.12/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"path_provider_foundation","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_foundation","path":"/Users/brian/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"path_provider_linux","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_linux","path":"/Users/brian/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.4.1/","native_build":false,"dependencies":["path_provider_linux"],"dev_dependency":false}],"windows":[{"name":"path_provider_windows","path":"/Users/brian/.pub-cache/hosted/pub.dev/path_provider_windows-2.3.0/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"shared_preferences_windows","path":"/Users/brian/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.4.1/","native_build":false,"dependencies":["path_provider_windows"],"dev_dependency":false}],"web":[{"name":"shared_preferences_web","path":"/Users/brian/.pub-cache/hosted/pub.dev/shared_preferences_web-2.4.3/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"integration_test","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]}],"date_created":"2025-09-04 15:35:49.303722","version":"3.35.2","swift_package_manager_enabled":{"ios":false,"macos":false}} \ No newline at end of file diff --git a/scoped_model/.metadata b/scoped_model/.metadata index 1b5cec02..05a8ab44 100644 --- a/scoped_model/.metadata +++ b/scoped_model/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/scoped_model/analysis_options.yaml b/scoped_model/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/scoped_model/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/scoped_model/android/.gitignore b/scoped_model/android/.gitignore index bc2100d8..be3943c9 100644 --- a/scoped_model/android/.gitignore +++ b/scoped_model/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/scoped_model/android/app/build.gradle b/scoped_model/android/app/build.gradle deleted file mode 100644 index e16427c0..00000000 --- a/scoped_model/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.scoped_model" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/scoped_model/android/app/build.gradle.kts b/scoped_model/android/app/build.gradle.kts new file mode 100644 index 00000000..4bfa5291 --- /dev/null +++ b/scoped_model/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.scoped_model_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.scoped_model_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/scoped_model/android/app/src/debug/AndroidManifest.xml b/scoped_model/android/app/src/debug/AndroidManifest.xml index 321ebbeb..399f6981 100644 --- a/scoped_model/android/app/src/debug/AndroidManifest.xml +++ b/scoped_model/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/scoped_model/android/app/src/main/AndroidManifest.xml b/scoped_model/android/app/src/main/AndroidManifest.xml index 59c10228..3f727faf 100644 --- a/scoped_model/android/app/src/main/AndroidManifest.xml +++ b/scoped_model/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/scoped_model/android/app/src/main/kotlin/com/example/scoped_model/MainActivity.kt b/scoped_model/android/app/src/main/kotlin/com/example/scoped_model/MainActivity.kt deleted file mode 100644 index 2334c261..00000000 --- a/scoped_model/android/app/src/main/kotlin/com/example/scoped_model/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.scoped_model - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/scoped_model/android/app/src/main/kotlin/com/example/scoped_model_sample/MainActivity.kt b/scoped_model/android/app/src/main/kotlin/com/example/scoped_model_sample/MainActivity.kt new file mode 100644 index 00000000..10a878a8 --- /dev/null +++ b/scoped_model/android/app/src/main/kotlin/com/example/scoped_model_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.scoped_model_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/scoped_model/android/app/src/main/res/drawable-v21/launch_background.xml b/scoped_model/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/scoped_model/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/scoped_model/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/scoped_model/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/scoped_model/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/scoped_model/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 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 literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/scoped_model/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/scoped_model/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/scoped_model/android/app/src/main/res/values/styles.xml b/scoped_model/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/scoped_model/android/app/src/main/res/values/styles.xml +++ b/scoped_model/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/scoped_model/android/app/src/profile/AndroidManifest.xml b/scoped_model/android/app/src/profile/AndroidManifest.xml index 321ebbeb..399f6981 100644 --- a/scoped_model/android/app/src/profile/AndroidManifest.xml +++ b/scoped_model/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/scoped_model/android/build.gradle b/scoped_model/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/scoped_model/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/scoped_model/android/build.gradle.kts b/scoped_model/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/scoped_model/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/scoped_model/android/gradle.properties b/scoped_model/android/gradle.properties index 38c8d454..f018a618 100644 --- a/scoped_model/android/gradle.properties +++ b/scoped_model/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/scoped_model/android/gradle/wrapper/gradle-wrapper.properties b/scoped_model/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/scoped_model/android/gradle/wrapper/gradle-wrapper.properties +++ b/scoped_model/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/scoped_model/android/gradlew.bat b/scoped_model/android/gradlew.bat index 8a0b282a..aec99730 100644 --- a/scoped_model/android/gradlew.bat +++ b/scoped_model/android/gradlew.bat @@ -1,90 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/scoped_model/android/settings.gradle b/scoped_model/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/scoped_model/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/scoped_model/android/settings.gradle.kts b/scoped_model/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/scoped_model/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/scoped_model/integration_test/app_test.dart b/scoped_model/integration_test/app_test.dart new file mode 100644 index 00000000..9ad90a36 --- /dev/null +++ b/scoped_model/integration_test/app_test.dart @@ -0,0 +1,19 @@ +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:scoped_model_sample/app.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return ScopedModelApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'scoped_model_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ); + }, + ); +} diff --git a/scoped_model/ios/.gitignore b/scoped_model/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/scoped_model/ios/.gitignore +++ b/scoped_model/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/scoped_model/ios/Flutter/AppFrameworkInfo.plist b/scoped_model/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..1dc6cf76 100644 --- a/scoped_model/ios/Flutter/AppFrameworkInfo.plist +++ b/scoped_model/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 13.0 diff --git a/scoped_model/ios/Flutter/Debug.xcconfig b/scoped_model/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/scoped_model/ios/Flutter/Debug.xcconfig +++ b/scoped_model/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/scoped_model/ios/Flutter/Release.xcconfig b/scoped_model/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/scoped_model/ios/Flutter/Release.xcconfig +++ b/scoped_model/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/scoped_model/ios/Podfile b/scoped_model/ios/Podfile index b30a428b..620e46eb 100644 --- a/scoped_model/ios/Podfile +++ b/scoped_model/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/scoped_model/ios/Runner.xcodeproj/project.pbxproj b/scoped_model/ios/Runner.xcodeproj/project.pbxproj index 1ccce2d4..cc33e9e1 100644 --- a/scoped_model/ios/Runner.xcodeproj/project.pbxproj +++ b/scoped_model/ios/Runner.xcodeproj/project.pbxproj @@ -3,22 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -26,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -37,14 +42,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -57,20 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -84,6 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -91,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -102,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -111,16 +121,26 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -147,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -157,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -170,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -191,20 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -220,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -231,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -253,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -285,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -293,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -309,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModel; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -328,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -362,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -376,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -386,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -418,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -426,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -443,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModel; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -470,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModel; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -492,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/scoped_model/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/scoped_model/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/scoped_model/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/scoped_model/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/scoped_model/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - + + + + IDEDidComputeMac32BitWarning + + + diff --git a/scoped_model/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/scoped_model/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/scoped_model/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/scoped_model/ios/Runner/AppDelegate.swift b/scoped_model/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/scoped_model/ios/Runner/AppDelegate.swift +++ b/scoped_model/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 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 U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 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 diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 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 diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/scoped_model/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scoped_model/macos/Runner/Configs/AppInfo.xcconfig b/scoped_model/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..30fec302 --- /dev/null +++ b/scoped_model/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = scoped_model_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/scoped_model/macos/Runner/Configs/Debug.xcconfig b/scoped_model/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/scoped_model/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/scoped_model/macos/Runner/Configs/Release.xcconfig b/scoped_model/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/scoped_model/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/scoped_model/macos/Runner/Configs/Warnings.xcconfig b/scoped_model/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/scoped_model/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/scoped_model/macos/Runner/DebugProfile.entitlements b/scoped_model/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/scoped_model/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/scoped_model/macos/Runner/Info.plist b/scoped_model/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/scoped_model/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/scoped_model/macos/Runner/MainFlutterWindow.swift b/scoped_model/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/scoped_model/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/scoped_model/macos/Runner/Release.entitlements b/scoped_model/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/scoped_model/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/scoped_model/macos/RunnerTests/RunnerTests.swift b/scoped_model/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/scoped_model/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/scoped_model/pubspec.yaml b/scoped_model/pubspec.yaml index ffefa676..27d0cf7c 100644 --- a/scoped_model/pubspec.yaml +++ b/scoped_model/pubspec.yaml @@ -12,23 +12,29 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: none environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ^3.9.0 dependencies: + collection: flutter: sdk: flutter - scoped_model: ^1.0.1 - todos_repository_local_storage: - path: ../todos_repository_local_storage + scoped_model: + shared_preferences: todos_app_core: path: ../todos_app_core + todos_repository_core: + path: ../todos_repository_core + todos_repository_local_storage: + path: ../todos_repository_local_storage dev_dependencies: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter test: mockito: @@ -40,7 +46,6 @@ dev_dependencies: # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/scoped_model/test/app_state_test.dart b/scoped_model/test/app_state_test.dart index 3c4c184a..56a8729d 100644 --- a/scoped_model/test/app_state_test.dart +++ b/scoped_model/test/app_state_test.dart @@ -135,7 +135,7 @@ class MockRepository extends TodosRepository { } @override - Future saveTodos(List todos) { + Future saveTodos(List todos) { return Future.sync(() => entities = todos); } } diff --git a/scoped_model/test_driver/integration_test.dart b/scoped_model/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/scoped_model/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/scoped_model/test_driver/todo_app.dart b/scoped_model/test_driver/todo_app.dart deleted file mode 100644 index 4dd62e57..00000000 --- a/scoped_model/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:scoped_model_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/scoped_model/test_driver/todo_app_test.dart b/scoped_model/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/scoped_model/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/scoped_model/web/favicon.png b/scoped_model/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/scoped_model/web/icons/Icon-192.png b/scoped_model/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/scoped_model/web/icons/Icon-512.png b/scoped_model/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/scoped_model/web/icons/Icon-maskable-192.png b/scoped_model/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/scoped_model/web/icons/Icon-maskable-512.png b/scoped_model/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/scoped_model/web/index.html b/scoped_model/web/index.html new file mode 100644 index 00000000..2c929009 --- /dev/null +++ b/scoped_model/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + scoped_model_sample + + + + + + diff --git a/scoped_model/web/manifest.json b/scoped_model/web/manifest.json new file mode 100644 index 00000000..a576bb67 --- /dev/null +++ b/scoped_model/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "scoped_model_sample", + "short_name": "scoped_model_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/scoped_model/windows/.gitignore b/scoped_model/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/scoped_model/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/scoped_model/windows/CMakeLists.txt b/scoped_model/windows/CMakeLists.txt new file mode 100644 index 00000000..500ca1e3 --- /dev/null +++ b/scoped_model/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(scoped_model_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "scoped_model_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/scoped_model/windows/flutter/CMakeLists.txt b/scoped_model/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/scoped_model/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/scoped_model/windows/flutter/generated_plugin_registrant.cc b/scoped_model/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/scoped_model/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/scoped_model/windows/flutter/generated_plugin_registrant.h b/scoped_model/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/scoped_model/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/scoped_model/windows/flutter/generated_plugins.cmake b/scoped_model/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/scoped_model/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/scoped_model/windows/runner/CMakeLists.txt b/scoped_model/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/scoped_model/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/scoped_model/windows/runner/Runner.rc b/scoped_model/windows/runner/Runner.rc new file mode 100644 index 00000000..0b4f51f8 --- /dev/null +++ b/scoped_model/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "scoped_model_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "scoped_model_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "scoped_model_sample.exe" "\0" + VALUE "ProductName", "scoped_model_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/scoped_model/windows/runner/flutter_window.cpp b/scoped_model/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/scoped_model/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/scoped_model/windows/runner/flutter_window.h b/scoped_model/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/scoped_model/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/scoped_model/windows/runner/main.cpp b/scoped_model/windows/runner/main.cpp new file mode 100644 index 00000000..f411910c --- /dev/null +++ b/scoped_model/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"scoped_model_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/scoped_model/windows/runner/resource.h b/scoped_model/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/scoped_model/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/scoped_model/windows/runner/resources/app_icon.ico b/scoped_model/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/scoped_model/windows/runner/runner.exe.manifest b/scoped_model/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/scoped_model/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/scoped_model/windows/runner/utils.cpp b/scoped_model/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/scoped_model/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/scoped_model/windows/runner/utils.h b/scoped_model/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/scoped_model/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/scoped_model/windows/runner/win32_window.cpp b/scoped_model/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/scoped_model/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/scoped_model/windows/runner/win32_window.h b/scoped_model/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/scoped_model/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 77f8ba6c59997c9c1e50da608f9dfdac0c1d5a02 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 15:59:02 +0100 Subject: [PATCH 60/89] remove states_rebuilder for now. --- built_redux/.flutter-plugins-dependencies | 1 - built_redux/.gitignore | 73 --- built_redux/.metadata | 10 - built_redux/README.md | 51 -- built_redux/android/.gitignore | 7 - built_redux/android/app/build.gradle | 67 --- .../android/app/src/debug/AndroidManifest.xml | 7 - .../android/app/src/main/AndroidManifest.xml | 30 - .../com/example/built_redux/MainActivity.kt | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 0 bytes .../app/src/main/res/values/styles.xml | 8 - .../app/src/profile/AndroidManifest.xml | 7 - built_redux/android/build.gradle | 31 -- built_redux/android/gradle.properties | 4 - .../gradle/wrapper/gradle-wrapper.properties | 6 - built_redux/android/settings.gradle | 15 - built_redux/ios/.gitignore | 32 -- .../ios/Flutter/AppFrameworkInfo.plist | 26 - built_redux/ios/Flutter/Debug.xcconfig | 2 - built_redux/ios/Flutter/Release.xcconfig | 2 - built_redux/ios/Podfile | 90 --- .../ios/Runner.xcodeproj/project.pbxproj | 518 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/Runner.xcscheme | 91 --- .../contents.xcworkspacedata | 7 - built_redux/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 116 ---- .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 0 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - built_redux/ios/Runner/Info.plist | 45 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - built_redux/lib/actions/actions.dart | 40 -- built_redux/lib/actions/actions.g.dart | 245 --------- .../lib/containers/action_selector.dart | 26 - built_redux/lib/containers/active_tab.dart | 20 - built_redux/lib/containers/add_todo.dart | 28 - built_redux/lib/containers/app_loading.dart | 22 - built_redux/lib/containers/edit_todo.dart | 36 -- .../lib/containers/filter_selector.dart | 61 --- .../lib/containers/filter_selector.g.dart | 112 ---- .../lib/containers/filtered_todos.dart | 33 -- built_redux/lib/containers/stats.dart | 41 -- built_redux/lib/containers/stats.g.dart | 100 ---- built_redux/lib/containers/tab_selector.dart | 41 -- built_redux/lib/containers/todo_details.dart | 36 -- built_redux/lib/containers/typedefs.dart | 4 - built_redux/lib/data/file_storage.dart | 50 -- built_redux/lib/data/todos_repository.dart | 47 -- built_redux/lib/data/web_client.dart | 59 -- built_redux/lib/localization.dart | 28 - built_redux/lib/main.dart | 68 --- .../middleware/store_todos_middleware.dart | 68 --- built_redux/lib/models/app_state.dart | 77 --- built_redux/lib/models/app_state.g.dart | 232 -------- built_redux/lib/models/app_tab.dart | 38 -- built_redux/lib/models/app_tab.g.dart | 47 -- built_redux/lib/models/extra_actions.dart | 20 - built_redux/lib/models/extra_actions.g.dart | 49 -- built_redux/lib/models/models.dart | 7 - built_redux/lib/models/serializers.dart | 10 - built_redux/lib/models/serializers.g.dart | 20 - built_redux/lib/models/todo.dart | 40 -- built_redux/lib/models/todo.g.dart | 186 ------- built_redux/lib/models/visibility_filter.dart | 23 - .../lib/models/visibility_filter.g.dart | 54 -- .../lib/presentation/add_edit_screen.dart | 90 --- .../lib/presentation/details_screen.dart | 94 ---- .../presentation/extra_actions_button.dart | 35 -- .../lib/presentation/filter_button.dart | 64 --- built_redux/lib/presentation/home_screen.dart | 50 -- .../lib/presentation/stats_counter.dart | 64 --- built_redux/lib/presentation/todo_item.dart | 46 -- built_redux/lib/presentation/todo_list.dart | 108 ---- built_redux/lib/reducers/reducers.dart | 81 --- built_redux/pubspec.yaml | 83 --- built_redux/test/all_tests.dart | 13 - built_redux/test/app_state_test.dart | 84 --- built_redux/test/file_storage_test.dart | 31 -- built_redux/test/middleware_test.dart | 92 ---- built_redux/test/reducer_test.dart | 142 ----- built_redux/test/todos_repository_test.dart | 104 ---- built_redux/test_driver/todo_app.dart | 9 - built_redux/test_driver/todo_app_test.dart | 5 - mobx/lib/home/filter_button.dart | 4 +- states_rebuilder/.gitignore | 37 -- states_rebuilder/.metadata | 10 - states_rebuilder/.vscode/settings.json | 5 - states_rebuilder/README.md | 82 --- states_rebuilder/android/.gitignore | 7 - states_rebuilder/android/app/build.gradle | 67 --- .../android/app/src/debug/AndroidManifest.xml | 7 - .../android/app/src/main/AndroidManifest.xml | 30 - .../states_rebuilder_sample/MainActivity.kt | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 0 bytes .../app/src/main/res/values/styles.xml | 8 - .../app/src/profile/AndroidManifest.xml | 7 - states_rebuilder/android/build.gradle | 31 -- states_rebuilder/android/gradle.properties | 4 - .../gradle/wrapper/gradle-wrapper.properties | 6 - states_rebuilder/android/settings.gradle | 15 - states_rebuilder/ios/.gitignore | 32 -- .../ios/Flutter/AppFrameworkInfo.plist | 26 - states_rebuilder/ios/Flutter/Debug.xcconfig | 1 - states_rebuilder/ios/Flutter/Release.xcconfig | 1 - .../ios/Runner.xcodeproj/project.pbxproj | 518 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/xcschemes/Runner.xcscheme | 91 --- .../contents.xcworkspacedata | 7 - states_rebuilder/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 122 ----- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 -- .../ios/Runner/Base.lproj/Main.storyboard | 26 - states_rebuilder/ios/Runner/Info.plist | 45 -- .../ios/Runner/Runner-Bridging-Header.h | 1 - states_rebuilder/lib/app.dart | 35 -- .../lib/data_source/todo_repository.dart | 42 -- .../lib/domain/entities/todo.dart | 51 -- .../exceptions/validation_exception.dart | 5 - states_rebuilder/lib/localization.dart | 28 - states_rebuilder/lib/main.dart | 24 - states_rebuilder/lib/main_web.dart | 24 - .../lib/service/common/enums.dart | 3 - .../exceptions/persistance_exception.dart | 5 - .../service/interfaces/i_todo_repository.dart | 8 - .../lib/service/todos_service.dart | 73 --- states_rebuilder/lib/ui/common/enums.dart | 2 - .../lib/ui/common/helper_methods.dart | 34 -- .../lib/ui/exceptions/error_handler.dart | 16 - .../add_edit_screen.dart/add_edit_screen.dart | 102 ---- .../ui/pages/detail_screen/detail_screen.dart | 105 ---- .../home_screen/extra_actions_button.dart | 40 -- .../ui/pages/home_screen/filter_button.dart | 95 ---- .../lib/ui/pages/home_screen/home_screen.dart | 79 --- .../ui/pages/home_screen/stats_counter.dart | 53 -- .../lib/ui/pages/home_screen/todo_item.dart | 58 -- .../lib/ui/pages/home_screen/todo_list.dart | 36 -- states_rebuilder/pubspec.yaml | 82 --- states_rebuilder/test/fake_repository.dart | 31 -- states_rebuilder/test/todo_service_test.dart | 119 ---- states_rebuilder/test_driver/todo_app.dart | 9 - .../test_driver/todo_app_test.dart | 5 - states_rebuilder/web/index.html | 10 - 195 files changed, 2 insertions(+), 7016 deletions(-) delete mode 100644 built_redux/.flutter-plugins-dependencies delete mode 100644 built_redux/.gitignore delete mode 100644 built_redux/.metadata delete mode 100644 built_redux/README.md delete mode 100644 built_redux/android/.gitignore delete mode 100644 built_redux/android/app/build.gradle delete mode 100644 built_redux/android/app/src/debug/AndroidManifest.xml delete mode 100644 built_redux/android/app/src/main/AndroidManifest.xml delete mode 100644 built_redux/android/app/src/main/kotlin/com/example/built_redux/MainActivity.kt delete mode 100644 built_redux/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 built_redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 built_redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 built_redux/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 built_redux/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 built_redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 built_redux/android/app/src/main/res/values/styles.xml delete mode 100644 built_redux/android/app/src/profile/AndroidManifest.xml delete mode 100644 built_redux/android/build.gradle delete mode 100644 built_redux/android/gradle.properties delete mode 100644 built_redux/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 built_redux/android/settings.gradle delete mode 100644 built_redux/ios/.gitignore delete mode 100644 built_redux/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 built_redux/ios/Flutter/Debug.xcconfig delete mode 100644 built_redux/ios/Flutter/Release.xcconfig delete mode 100644 built_redux/ios/Podfile delete mode 100644 built_redux/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 built_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 built_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 built_redux/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 built_redux/ios/Runner/AppDelegate.swift delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 built_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 built_redux/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 built_redux/ios/Runner/Info.plist delete mode 100644 built_redux/ios/Runner/Runner-Bridging-Header.h delete mode 100644 built_redux/lib/actions/actions.dart delete mode 100644 built_redux/lib/actions/actions.g.dart delete mode 100644 built_redux/lib/containers/action_selector.dart delete mode 100644 built_redux/lib/containers/active_tab.dart delete mode 100644 built_redux/lib/containers/add_todo.dart delete mode 100644 built_redux/lib/containers/app_loading.dart delete mode 100644 built_redux/lib/containers/edit_todo.dart delete mode 100644 built_redux/lib/containers/filter_selector.dart delete mode 100644 built_redux/lib/containers/filter_selector.g.dart delete mode 100644 built_redux/lib/containers/filtered_todos.dart delete mode 100644 built_redux/lib/containers/stats.dart delete mode 100644 built_redux/lib/containers/stats.g.dart delete mode 100644 built_redux/lib/containers/tab_selector.dart delete mode 100644 built_redux/lib/containers/todo_details.dart delete mode 100644 built_redux/lib/containers/typedefs.dart delete mode 100644 built_redux/lib/data/file_storage.dart delete mode 100644 built_redux/lib/data/todos_repository.dart delete mode 100644 built_redux/lib/data/web_client.dart delete mode 100644 built_redux/lib/localization.dart delete mode 100644 built_redux/lib/main.dart delete mode 100644 built_redux/lib/middleware/store_todos_middleware.dart delete mode 100644 built_redux/lib/models/app_state.dart delete mode 100644 built_redux/lib/models/app_state.g.dart delete mode 100644 built_redux/lib/models/app_tab.dart delete mode 100644 built_redux/lib/models/app_tab.g.dart delete mode 100644 built_redux/lib/models/extra_actions.dart delete mode 100644 built_redux/lib/models/extra_actions.g.dart delete mode 100644 built_redux/lib/models/models.dart delete mode 100644 built_redux/lib/models/serializers.dart delete mode 100644 built_redux/lib/models/serializers.g.dart delete mode 100644 built_redux/lib/models/todo.dart delete mode 100644 built_redux/lib/models/todo.g.dart delete mode 100644 built_redux/lib/models/visibility_filter.dart delete mode 100644 built_redux/lib/models/visibility_filter.g.dart delete mode 100644 built_redux/lib/presentation/add_edit_screen.dart delete mode 100644 built_redux/lib/presentation/details_screen.dart delete mode 100644 built_redux/lib/presentation/extra_actions_button.dart delete mode 100644 built_redux/lib/presentation/filter_button.dart delete mode 100644 built_redux/lib/presentation/home_screen.dart delete mode 100644 built_redux/lib/presentation/stats_counter.dart delete mode 100644 built_redux/lib/presentation/todo_item.dart delete mode 100644 built_redux/lib/presentation/todo_list.dart delete mode 100644 built_redux/lib/reducers/reducers.dart delete mode 100644 built_redux/pubspec.yaml delete mode 100644 built_redux/test/all_tests.dart delete mode 100644 built_redux/test/app_state_test.dart delete mode 100644 built_redux/test/file_storage_test.dart delete mode 100644 built_redux/test/middleware_test.dart delete mode 100644 built_redux/test/reducer_test.dart delete mode 100644 built_redux/test/todos_repository_test.dart delete mode 100644 built_redux/test_driver/todo_app.dart delete mode 100644 built_redux/test_driver/todo_app_test.dart delete mode 100644 states_rebuilder/.gitignore delete mode 100644 states_rebuilder/.metadata delete mode 100644 states_rebuilder/.vscode/settings.json delete mode 100644 states_rebuilder/README.md delete mode 100644 states_rebuilder/android/.gitignore delete mode 100644 states_rebuilder/android/app/build.gradle delete mode 100644 states_rebuilder/android/app/src/debug/AndroidManifest.xml delete mode 100644 states_rebuilder/android/app/src/main/AndroidManifest.xml delete mode 100644 states_rebuilder/android/app/src/main/kotlin/com/example/states_rebuilder_sample/MainActivity.kt delete mode 100644 states_rebuilder/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 states_rebuilder/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 states_rebuilder/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 states_rebuilder/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 states_rebuilder/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 states_rebuilder/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 states_rebuilder/android/app/src/main/res/values/styles.xml delete mode 100644 states_rebuilder/android/app/src/profile/AndroidManifest.xml delete mode 100644 states_rebuilder/android/build.gradle delete mode 100644 states_rebuilder/android/gradle.properties delete mode 100644 states_rebuilder/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 states_rebuilder/android/settings.gradle delete mode 100644 states_rebuilder/ios/.gitignore delete mode 100644 states_rebuilder/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 states_rebuilder/ios/Flutter/Debug.xcconfig delete mode 100644 states_rebuilder/ios/Flutter/Release.xcconfig delete mode 100644 states_rebuilder/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 states_rebuilder/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 states_rebuilder/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 states_rebuilder/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 states_rebuilder/ios/Runner/AppDelegate.swift delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 states_rebuilder/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 states_rebuilder/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 states_rebuilder/ios/Runner/Info.plist delete mode 100644 states_rebuilder/ios/Runner/Runner-Bridging-Header.h delete mode 100644 states_rebuilder/lib/app.dart delete mode 100644 states_rebuilder/lib/data_source/todo_repository.dart delete mode 100644 states_rebuilder/lib/domain/entities/todo.dart delete mode 100644 states_rebuilder/lib/domain/exceptions/validation_exception.dart delete mode 100644 states_rebuilder/lib/localization.dart delete mode 100644 states_rebuilder/lib/main.dart delete mode 100644 states_rebuilder/lib/main_web.dart delete mode 100644 states_rebuilder/lib/service/common/enums.dart delete mode 100644 states_rebuilder/lib/service/exceptions/persistance_exception.dart delete mode 100644 states_rebuilder/lib/service/interfaces/i_todo_repository.dart delete mode 100644 states_rebuilder/lib/service/todos_service.dart delete mode 100644 states_rebuilder/lib/ui/common/enums.dart delete mode 100644 states_rebuilder/lib/ui/common/helper_methods.dart delete mode 100644 states_rebuilder/lib/ui/exceptions/error_handler.dart delete mode 100644 states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart delete mode 100644 states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart delete mode 100644 states_rebuilder/lib/ui/pages/home_screen/extra_actions_button.dart delete mode 100644 states_rebuilder/lib/ui/pages/home_screen/filter_button.dart delete mode 100644 states_rebuilder/lib/ui/pages/home_screen/home_screen.dart delete mode 100644 states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart delete mode 100644 states_rebuilder/lib/ui/pages/home_screen/todo_item.dart delete mode 100644 states_rebuilder/lib/ui/pages/home_screen/todo_list.dart delete mode 100644 states_rebuilder/pubspec.yaml delete mode 100644 states_rebuilder/test/fake_repository.dart delete mode 100644 states_rebuilder/test/todo_service_test.dart delete mode 100644 states_rebuilder/test_driver/todo_app.dart delete mode 100644 states_rebuilder/test_driver/todo_app_test.dart delete mode 100644 states_rebuilder/web/index.html diff --git a/built_redux/.flutter-plugins-dependencies b/built_redux/.flutter-plugins-dependencies deleted file mode 100644 index 51c6a6c7..00000000 --- a/built_redux/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"android":[{"name":"path_provider","path":"/Users/remirousselet/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.0/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"path_provider","dependencies":[]}],"date_created":"2020-02-10 11:23:40.410802","version":"1.14.7-pre.38"} \ No newline at end of file diff --git a/built_redux/.gitignore b/built_redux/.gitignore deleted file mode 100644 index 2ddde2a5..00000000 --- a/built_redux/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.packages -.pub-cache/ -.pub/ -/build/ - -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/built_redux/.metadata b/built_redux/.metadata deleted file mode 100644 index 1b5cec02..00000000 --- a/built_redux/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable - -project_type: app diff --git a/built_redux/README.md b/built_redux/README.md deleted file mode 100644 index 2d0bb162..00000000 --- a/built_redux/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# built_redux - -An example Todo app created with [built_value](https://pub.dartlang.org/packages/built_value), [built_redux](https://pub.dartlang.org/packages/built_redux), and [flutter_built_redux](https://pub.dartlang.org/packages/flutter_built_redux). - -## Key Concepts - - * Most of the Key Concepts from the [Redux Example](../redux) apply to this example as well, but the implementations are slightly different. - * To enforce immutability, `built_redux` apps require you to use a `built_value` Value Object. - * To increase discoverability, all actions are created using `built_redux` and attached to the `Store`. - * To use `built_value` and `built_redux`, you must add a `build.yaml` file to your project. - * To help with Type Safety, Reducers and Middleware can be created with `ReducerBuilder` and `MiddlewareBuilder` classes. - -## Enforcing Immutability - -The `State` objects in your app need to be created with `built_value`. `built_value` is a library that generate "Value Classes" from a Class template that you write. - -The Value classes can not be directly modified, but instead must be updated by creating a new version of the object. - -## Actions Discoverability - -One benefit of `built_redux` is that it attaches all possible actions to your store. This makes it very easy to see which actions are available for dispatch within your IDE using autocompletion. - -## Build.yaml - -In order to use `built_redux` and `built_value`, you need to create a `build.yaml` file in your project. Whenever you update your Value Classes or Redux Actions you'll need to run the build command: `flutter pub pub run build_runner build`. Instead of running the `build` command, you can run the `watch` command: `flutter pub pub run build_runner watch`. This will watch for changes and trigger a rebuild every time you make updates. This tends to be much faster overall. - -## Type Safety in Reducers and Middleware - -As your app grows, you'll want to break reducers and middleware down into smaller functions. - -## Differences to Redux - -These two libraries are incredibly similar. These are the minor differences: - - * Actions - - `built_redux` - Actions are generated for you by `built_redux` based on a definition. They are then attached to the Store upon creation. Each action has a unique name and a generic payload type. Each action can have at most one reducer. - - `Redux`, Actions are plain ol' Dart values, Classes or Enums. - * Reducers - - `built_redux` - Reducers are void functions that mutate a `StateBuilder`. The `StateBuilder` is then built after all reducers have run. Enforces immutability. - - `redux` - Reducers are functions in app state and latest action and return a new app state. Since immutability is not enforced, a user could simply mutate the state object instead of returning an updated copy. - - Both - Testing is easy, and both libraries have utilities for binding Reducers to Actions of a specific type. - * Middleware - - Very little difference here. Both libraries have utilities for binding actions of a specific type to a given Middleware. - * Nesting Large State Trees - - `built_redux` - Provides helpers for composing large Action trees that you can attach to your Store upon creation. Reducers can be combined via functional composition and by using utilities from the library. - - `redux` - No need for nesting actions, nesting reducers can be done via functional composition and by using utilities from the library. - - Both - allow you to break down your app into smaller units. - * Flutter integration - - `built_redux` - Maps from a `State` to `Prop`, which is passed to your `build` method along with your `Actions`. You combine the `Prop` wih the actions in the `build` method. - - `redux` - Maps from a `Store` to a `ViewModel`. The `ViewModel` should include both "Props" and callback functions that dispatch actions. - - Both - Store a Widget at the top of your tree containing your State. diff --git a/built_redux/android/.gitignore b/built_redux/android/.gitignore deleted file mode 100644 index bc2100d8..00000000 --- a/built_redux/android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java diff --git a/built_redux/android/app/build.gradle b/built_redux/android/app/build.gradle deleted file mode 100644 index 6f68c33d..00000000 --- a/built_redux/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.built_redux" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/built_redux/android/app/src/debug/AndroidManifest.xml b/built_redux/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 6ac55600..00000000 --- a/built_redux/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/built_redux/android/app/src/main/AndroidManifest.xml b/built_redux/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 1aeedeb3..00000000 --- a/built_redux/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - diff --git a/built_redux/android/app/src/main/kotlin/com/example/built_redux/MainActivity.kt b/built_redux/android/app/src/main/kotlin/com/example/built_redux/MainActivity.kt deleted file mode 100644 index bd1f037e..00000000 --- a/built_redux/android/app/src/main/kotlin/com/example/built_redux/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.built_redux - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/built_redux/android/app/src/main/res/drawable/launch_background.xml b/built_redux/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f8..00000000 --- a/built_redux/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/built_redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/built_redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1345 zcmV-H1-|-;P)uTd_0!V%xTj^~RVz+qQkNle+bG&pJ+~-@fF1He>(R5VVes7IOD>*8pj zqheUWHU<|V7e)gem4GGsJ2+v4(LhI>IrhY(VKk7Fi2z<|iTM&34b&ar1j_BVBq$oF zT^5{XaPhSSL<7+saIV4Zza$tMh~~j%l#2}#2o2PNi5m@Wr%DhsPz$TzUdrtp34jJ_ znQ1?5aIsS|cnuV=f=vu2gk<0vD8TK`l#6|mL2IA@7ekLTU=2jMm@OHo2BH8yg9lB? zAT>}wfRiW}AIb-*2s!8_Z`J0aS1@qoHy_}lPQz#RkE4~2! z=(Z>XqZkO0{yAgr%jc0Yq~kU?n{xX%#oOwWjsPbUd6WU+HDJRj(Jz;3Pq)p5ODGd- zRpPkY*4@5D9@RitX39y?ua@Yk&>~x0XE2eZ_RJA;@u^#pK)8}JPmFl^&f?(|+~wXw zlx{1_o=Py400@z``6J9n3hk?`&=Zu2?MiW&7)&sg2ncJBf3{icIA1y&P$u@O?8x0O z8w6ANfUwMLs0l^6(Xzk}43I58|S(7_2STsgb3Bd;<* zSWm4;S)us6*-BXm&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPV zl> zWXCr#aj@#Fvz(Q*M}0@G_VI6yJOZd~Pq;2> zG2)cDYOmwaEd5xdfMri1N}~YDGjb-}H20OVqDYXKgR~o0O;}k+t{Ul{4}K_j9IRSv zxx3v|cI4{w)Uu@Ys(@Ztn-O+?{~M&L=c#`Z%N?oK8Ww*1pQL%Dy5z}!lGc^q%5iX( zB~2vNEl(~>T3hyWhlL+ome`jZ8I6QEPyDr|C8@qaq{OwQz}f%Uvg8*?P03TslUJAE zK;HNC-|6?0nwBS)Cl!sfCZpi#6&bP@T^i~6H5v9p>yj@bH8^;1uQ~>2b^5MaYqCxw zI(Sbyg!J61w0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjf DcgJkH diff --git a/built_redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/built_redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmV;Q17Q4#P)D0gcVJI$m~tEjv=UM0#+Kd63T)IDVl(l zvY&{|q6jFO0HMLQ#b81S0Dyr|HVC0a6X*nBRzW5d1L+np_qFwC#87rFp==?-)R%y< zj}1(H>?1n?7#kA)tAlU}k(G^l;H@(IuS$Va5|bYvz0=YlGw+9MB+BA>!SR-IE8k(W zss)NAY>RFfF#X*6g#X0HZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBj zZgsP_v6)r@tiJZ$7xW!}mA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RJk``vY$`OxQ*%)P`Z0=`!sm4&|R=Oet|5ds3V>euZ%{TI`LDr?o5zeocvw?J`)O?{o8l!*psNt8|JhsSNR;46T0IM8_na3x~KezsqT zA1)v=Tdr^0D3gl99S1hI0M-S=rog)?z5}}8-E0I${?adS$(Wh&R(v76xwin`PYdu0 zbg#FpqHc-yTEGq6N5U1uCc~TY1qhFY5`Nu@Qolq$Te~WudyfS}=OJKd)eEj2I=&db zQoWbz*OVxUtbEH)$su9rG#CuOwSk+4xXJ=oEs^2_sj&J)NjyPGI}P`CaMH$ab=~d2G%a1mdZ8P~vz1 z6J=A4mv>~R@d~_|Kw~d$&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2iJAov!lV07GM*+YPcV?WX<0QCSHeyl2P0#=U002ovPDHLkV1k9w Bv-l9 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 diff --git a/built_redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/built_redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d5614ac831d924f5e49e16a3d4391be8964fcdf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4067 zcmZ`+c|25K*uR((uA=LW4tr(fA1gf=X378pYJ)(bH2~>ea^Y(-c&2N2?v`X8vpzSFoQ^@X`%Zuopy2ydz30K z;;IIHkz@F^c(~nEQ5T5&taK{xiy`FM-zgFS^tz;{47Q#*wGsX3=%#d!MSjToVps#2 z0g%vJKS1QJ?dKMcPynFe9r{zQdILFf#xoWG?lo@(lii+u--%a#PV>vl8D1rhI%24e zbaX+boydu!m>AIMWF^(8hgKQq0q9^#N`(Zf*c!3R1oV+soGf{g=N1A}XiOfy9HPFR z0i)=rg*12k)`1McX<_xWK@raaWL?R1fb)f{j|SDyE!zeV_+Ou6D2`3nXp`Uaial-e zcR<~t8~Ws|;98SpkV$#}>z4C7Hzu^0oHb2H+w;OGBw$Y+cvwJVczVJ9#9BKuX^@te zQjNd->Dog!r=u|hoKW8EZ8xXh{6HQO)>3ErvZ%@^SL6QoMHvR2nW9i6- zjQI{pjRwVns5)V+L=uIcm6n<`REHx|s#ryNu!$P!+WJc?5Q29{(UG zMItMPX_EZN{k?y%`XF%>Ob-&blIJaLPZc+&>lXHGSRAE_-ev$QO36QV294>&U011s z=E{MO8q$4fMM$zJPjUN35#gVu#mkl^{M{lTs%j&&oLr{X#|1@@{f>>pLRfD7udHG&E~%22YSH z|MmKX(@nqr*J~RtV^4i7Mz5Px;iAmJ`j3)sYypBBD4fGQbG;;EM;*}r$HY6=6hFfp zN0R-wK?`9GXLS{CEJO%j`eVs?PZ01_3DpQihlCb&!Y?bg&#PM)uKJyeV~hVm?&NLM z&4{l}SD+_Cw#Xi?yAE6hZI0w#!sGvY+H=-vFST$NZiySi+dJH#vQ^>%5VY?I7vS}W zTwl1&L*W?@=^RE>ekA!Ry{KY>YQ$=LXYRV)9nlc{ja~d(mD0vNOBopc>ID25_qQ1Z z0M#b%02B=QE99=ij^O)z&7H(W>8SP7Dg55vSeV-=m=@IJyteX&!`*9WEu9eWg{>86o_<;{w;6U3*M_Z`((>?h?5^Y;CvX#-w#Ab&4{U)qq&aFJ2F> zugJtJ?C#m+J?@O5256thbgA`=GL@aHDs6@xcNZ?(H}sZvIAR)>@CtUZlaT3DoCxsK z>|w<{h4 z^Xw8j8^?t;A1z@R^c9y(?>lL84%-c#KWGb?sGa|;&K#!~EBz~6GM|xM9sBc5so2g& zN?>f!d}-}a67JdJT_Az{BFPzFoBA~OSDmP#-1{A5%7B8mu>`vA4A3dDIg$CiMb33| zjJEXx$eu*@f4UG_q52%A~&(hXH(&; zjAb~`ak)}xAg$UT2eZ3!+im_nNR;tUg&QzI;+C$76zuViQ`DNZyVy#_eEqSukG9p< zm?qA|b<_=BExO)do21k}sC)0w2_>8gw*?^lCPgp3b-lt@X@Z3ehC+OIYo{g0eZ+u- zH~RaaH-)+x(uIiq3tbe=%bFG}afK4$nzG)p=P}(ZPNmqbY`$NG1Ql_hlVF&48|QA9 z7wy?^g6k!I)fxA>10+CX+b*j&w>%#%Z77n*zi!q)93W;Z--_%HsbByv7&cRG9w*%K zQbA70liB`6HkWT4SSot%DKP?_x%c;4>Q2is)kDPB6y;_ePpp(?ZsWO0`9)&}C_hHp zKer?_TL3?duWrT6mmsnTDtg#SP2d%a*Sy0wzA&Y*^$m$~^aCE9@&4S?z)7MD|GBsh zv!%ci^0ev~?H{%O=zX^2#1s?O9vDQL|8^GQ2Erx331P_lh>WS-LCch*E7-Zz5gyBR zj=bw16=eYi@Hs7lhBjv^D>;hA7q1p(}m z3BO0GmrI`6op0L6|0I(2D_d9D2x}_=B+Mv|u-fA#XeTCZ7e6UkG)#q$1K^u~;Rm7a3#z zw642c4AOv7wuUG|_{-S--vB76iuxkM-SwDxYd`8F^*iw>o1hYmwG9Ij+}#Ifi4isV zWSx*gf_>hrmdhyQeQs+{Q6Q%=0i#%lcM`C9*ST66hY?Pb&}8UfEtl2oe&pNqO^*E(lZx$*tpB$2ym?e&4; zoG|-k+B^a{_jg(WFy1hE;x_WkuA>Ug^rvvGOAPTrsl^AGEJ6;u&EV!u4HqadQq-QZ z!tTt|-1g+iUzSgE{JMt-hNYPuq?cSQ=^xwdOZ_?S?JlsVz^gD`?KBInqK)(>4H7c% zuj@V{QTxqLoRf_<$$YHYv_N}%*VF8$-syyM@Fq-jUkHj>lXd07V40wwD3N=MZ}M?3 z4-+Po3)`c=lf@0J+$_NU!m|wC>_8l8MH}tara!?RG!`y1-9R?KsdO3)*8a$Kv4J0; z!XAb{2I{qXiv~yv!`|KPu!-GJSRqvqHt99VF^GJXzwL+8QhWbMQo|$FPztsDFs%Dd zyc9>!5#KCH86o9k+(DWMZ8R-J!_@1pKBy<743@A@(21sDjEwGkd%kJiTNY(=qoO{( zG&>0vRg6c~JoUh~d>FyR5cK>qkBEvVR(V!(@eGR}Lwxu35q`N5pbj67WKu=H zfP}@nXDZ8{|Caby{dwf5qKw?Lia`BQ<^~lLZtdI&PYks<*U2h3LUNFU%T1b(el(pp ze9oiX1J`L^eAzx`Mpcv9i)dS(0MCdZ3CB(o;u(HY!6 z!=$<8EpZbg`Rc3f!#@>TqcPSg%%dzyG9-Bg$XL5anALht-k1TCa^hkV+L3>m$VI<4DOW+ zal}m!tIk-Qjy+I2kw!D4pgv>nUp>doy6G$NQ+S_NUdaH!G=$Fthii4rc|8b#~N>rYWir|EngnY@a})RwGPWgP^bzo9f}QY#yO6 zRz(ZtmQ12cn35CIFg74wF!;SzQbil=t9*cL@?6B-FBDbX|LQiHWN7LWG50+%z_+L9 zuUhf){HpOQ)4Yx&6jd39MU8C!xeV^g0rmbRK?bOm`*84qRd3Zx$LT{Umk%}(d4Be5 zViKCQKh9-nFaQhNn<`VHPspPY2M{hyf_@q0X>;S_5-WUNON3`PYz7A%zrqj7tXW1r zLRMzs>mF~JF(N*6eb5=qBJfx>*DR1EPwUqT`XHZqTL-fVJOT+HhY=}k`gM%We34-{ zEdobm93%xnZaDS6$5THa@L^Eeumbg>r6AXNMru)X zjf_jW)Y+uJZcgte%pjln8ptzz?Wt1itSk(RSE6gYWBYfbuvSbF$^R7yF;d$PWTk}@ zrC3#&6L?=fiIYM4$6oofo~+`NoY%`+$if&HlNqwOC}eqVB2e<3H9vQ|-|De6#=)86_MOmb|R6lfFZ^h(sXimpFc_!O}1 z0o932rn-Z`(Y!f!qy;m@C^0Ju=%EUl2zpDF4E+531(@^VC^fL@_r9Ft$4nq1e)j3vRxP`CD*h1A(5dB+l7~Nd=ieLC z7a0TVT5D%-@HMhO_lzXC-^kT@IllSlZQ$amHb*1d^V&;Cuf`z{=R@b`Fye|uS+MyR z!y-NE?=HFRMji*6T=n8qYHC#j7$rykIW9y;4GDW>L?%o*-Z*>G^DVsMxD_pQ%`dA7 zdUzQGW;2snZIk=N)p+J!xa47^GlXNvTqKu#{2l;j+XxKBQ%pgb-Lh^ zX-;k#Gh - - - diff --git a/built_redux/android/app/src/profile/AndroidManifest.xml b/built_redux/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 6ac55600..00000000 --- a/built_redux/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/built_redux/android/build.gradle b/built_redux/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/built_redux/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/built_redux/android/gradle.properties b/built_redux/android/gradle.properties deleted file mode 100644 index 38c8d454..00000000 --- a/built_redux/android/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true -android.useAndroidX=true -android.enableJetifier=true diff --git a/built_redux/android/gradle/wrapper/gradle-wrapper.properties b/built_redux/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 296b146b..00000000 --- a/built_redux/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/built_redux/android/settings.gradle b/built_redux/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/built_redux/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/built_redux/ios/.gitignore b/built_redux/ios/.gitignore deleted file mode 100644 index e96ef602..00000000 --- a/built_redux/ios/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/built_redux/ios/Flutter/AppFrameworkInfo.plist b/built_redux/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 6b4c0f78..00000000 --- a/built_redux/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/built_redux/ios/Flutter/Debug.xcconfig b/built_redux/ios/Flutter/Debug.xcconfig deleted file mode 100644 index e8efba11..00000000 --- a/built_redux/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "Generated.xcconfig" diff --git a/built_redux/ios/Flutter/Release.xcconfig b/built_redux/ios/Flutter/Release.xcconfig deleted file mode 100644 index 399e9340..00000000 --- a/built_redux/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "Generated.xcconfig" diff --git a/built_redux/ios/Podfile b/built_redux/ios/Podfile deleted file mode 100644 index b30a428b..00000000 --- a/built_redux/ios/Podfile +++ /dev/null @@ -1,90 +0,0 @@ -# Uncomment this line to define a global platform for your project -# platform :ios, '9.0' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; - end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end - end - generated_key_values -end - -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; - - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' - - # Plugin Pods - - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') - end -end - -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end - end -end diff --git a/built_redux/ios/Runner.xcodeproj/project.pbxproj b/built_redux/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index d02225dc..00000000 --- a/built_redux/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,518 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B80C3931E831B6300D905FE /* App.framework */, - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.builtRedux; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.builtRedux; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.builtRedux; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/built_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/built_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/built_redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/built_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/built_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a28140cf..00000000 --- a/built_redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/built_redux/ios/Runner.xcworkspace/contents.xcworkspacedata b/built_redux/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/built_redux/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/built_redux/ios/Runner/AppDelegate.swift b/built_redux/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a..00000000 --- a/built_redux/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d22f10b2..00000000 --- a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 980e5ad64bb0fd4a9c2c6506e9b811ffea9dd64b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)5QXpJpN(w?YkRkYwc_j#m|(3>!PrLIwlTJ6&Ufo}SH`I1$#eR?RVOWIzMsU) zrK2WI$*4hFGG^Q^9@T@8zu5)!Yz6I>${V_+j`Ok!^L)v;38fNcW`cbs^X>&xhbk?f zvS`XCEg(wS59HzvL0zJ3#-=Tswu302VRN>z3)sQt+#O8gBeP#+>JsI%uI=(!2l6=C zdFI%h9c;z_@g>lFVht7cT-%~z-i?ZdJmoU8IkPWPB^k`Ff#(xjg!dpSwLVm8y$Z@~ zqGHj@W>6!4&#i3X;(Y3is=Eq_sMPsUsrRE%>p_jmL_k5`*hG^t2U&6%yTe|1|lg*UW~p>+@q!E^s3OEa=e6Ud^0-fp0g z&B!j%6y4G^MmBL1O_42jA+woHwxTJ#r4io)FE___=bK_XXo_uveG`pQHs>9%se`%% x4TYA}o~Ajur)^2@Z#O6Q@F3(a-Ow$UJqP2R#rz($lm7q!002ovPDHLkV1fcFS>pfz diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index fd870289028b0d1ba6565d9f29fd42fab6bad5f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1591 zcmV-72FUq|P)Ffwcl%S_9_!a48Hv5l6Yg}=#nG6Dbu zla|r7Yb`^I)3=8fNzyX31gi{#!9`fl5R44#X&qjkmK_)Y1VY=0(Q$itxzaMci~?7J zyKH1wcMh7|XLASHg%J|-qf@pXF{&*iD^$-ij0`JyIjqHchvApQ$T03AS7awf2>H=E zVoaL{qYTWnjvBB;p1}%aY1}c541*Qen)UNz#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv; z?q3&e<7axnT(Y$hS>ykYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU9?SY zl0CLylXe)H&){aXGcRRIWPSb@&S>s!or|_aBlZ8FP zV=ahX*88G;#zXBh+X`g1q>VF-4C5|rhyFP)t?X1u_xvxC)$SMVvtD`w4~z_(bj-oX za4o|cKD-zpU*!;ev<20?M;dTJ^JP9;w8MaBVeEme`4cNaiXR?Rv*-WOoSK_wEc2pc z-cOwi3S{=X1Mm9MT7(KGr|8k7U|zR_3oZl*bk_W}NrOHzyJh_`l^26BGOXp>TXEVu zJ10BOU&GnjzWP3*b16ifOF@&4MdhE2FVJHzy+WUu;gYJ19-f7f;h*_ZbaZ}UtK1Xm za>H)G1;cm&;DU?v!V53ZQ!l+tpPk*LuH~=>H3wVyQz%QP7niom-IFL{&bkws3(7B6 zB8po6>4YjMdFI8J=u0!}B=1?l9E|yY#fx-td38B?=O3{Gc1U%R7f}wNr1@>T z^;xf;(1*M^?6XM*M&^PZUgF7`^l^qI?pn#Go_dO&d+s?D(o!rI2_@(EkI5y=dFttd z6|w-V;0y!N=gm`Z6WshW8CqCGkt<71?HrJU=lV4C!WwV}1JUa(P@k_k-woy|o6B8U z(4S0`!;{Ax^;)bl42m!^3`q0`O6UFl5=r{}MYw_QG$|?nTy7;&P*D93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+j ztOL979@$MeqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^ z$nd*OllQ^Xj1cnUL-EQrXRKOvMl0lCoFE2E)EO*kykCWpVe8!{^UAJxr6M~qLY6c6 zVB)yL6+fslctIn41|!2N!`5tX9`O4sA50u{FhXK}fDdI)uDOzj)2_rJNq896!Dlcs zjC=@Nvu<9IJermr7y%IK_+awrx+`_~H!f?qlZSa8Ja_V9{+g7*5v<@dSY_CnmEFA4 pojS_%e#4bI{@VvLN7oqv!0V&tCp*)&!{Pt{002ovPDHLkV1k)(4H5tV diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2506 zcmV;*2{rbKP)Z*FU!m{%*@P8VRsLNIdO-bn8LBcq}8jNvvE!9=H589 zS1q{F% z25_7w7rzc6_W!D9OuwF9IP!hcRh72%UTx5Ve2G1JF&R7ItnWOsxG;yFhdp@D-v_7k z&fdOmnO#2ee(9>pVtq010kWwNld+dE83*wHn9tfxBT2o#zpv%fYznjAHBY*l!u|2m zSf4hSMNGyg$1xwm-`9dY9-PW*J`_Ic{nAyH#QK&>FZOFo43jar5Bt!M3$uIOIUl>v zb9b5X3#kSD-cQS%Eqv6xMP zE1Yp6YpT=?fig_Kh{=PPj6E)4GIp-ZS?ri68GBT|J*YdD^7L~SW~Sf$s_d;n?I9a6 z86O}SlW`cF=fmCqsn)n2%B|DQU3h+l{eDQ{AqgImvG6u_z#8VP?>ut&`^aBtAJJ25 zoAf%WFtdD7GVuJ{!xnPrg0dHT=P{^0c=^-k#J?H&4rDa;IKAL**R;Bg+qyI7Dl?6?0iCgVW32mf*?q1Sfz z=n}fHUmsBNpsPIOBJ3dV4(?VgItv@Fu4~cXjdeNJ4Q-=X zkTvW(53?5w_f601lYAaaEi%u8TyU>q(bA3&^YwMj`h}NX(m!eGVBcXuOvdhcvL<%! ze>SspqOvb!mSs*L%6rh56AHih;)|A_H@E4+{TDD9A2AP;%Z=;jb0;eMNOFOB*o`eL zkL(y1%$N88ldrF9p|It5P46;5*0JRRCYv=(#zJ-Hgl=74E4rxsvheoAymLMogSucY z<-wA%;3_Qqt>G;*$gX227ciKa_|rX8dLX}1blF`~_UegQ<_E&Pw(wC<7~tyqm@cY8;W|KtwlU@|6uqkmeb zH@Ax}D?b_e=>MVDRK+0{Qa zGY;R24>BfWFnyGF7!ufW!Q|`fW4>kK-q-7OZRfb`_vPm!8NIr@S9IC=?H&Eyp`=&P zL*9tV*omA~}ZeJWoy5HD~$=HdkNnt5A zV=2cVg&Qu0Dhp4(@~Zx7`-nY%PkLGJpP=mE>Zblof3o0x)7Z;>GuWdSyY~yq+njVF zYd0LDFg*Y2YdV&i)hGFMdBe;2{~qZ!dO)F8jg@FX&V%1x1y9 zZDCDUN(sv10C;;)A5}S!)_zo&&EmhbwEC8O`st_jLk~TqpM3I3ie6EAZEY=7*{A37 z@3|k7aoF{g#$;tTvvCj~X8hM!8zsS(y!F;w^}`Q8OhG>aOW&W(9o&}@lW}2o7i1r{ zkPmw(`^6AsF&SI_5^J|b;kxUt(+@oGKww!|U0uDRsQm86&8Zc6nB0ZQ*v$|oW5GR7 zNeD}o;V+juY+3o&_`wGslz(MIm4$phuleklvj3V{4u3x;8O;oh`a>Hk*|{ z*FAE+h3xweWDa|nj5&)z5khf!UgL;iGIRXWnM_9C7*F`zF^}D_R>XVBN(NM4_Nc;S z?6V$;hcC@P*}n}=1i8bDSr6nA{Jx=_VVZ=F3f?YGp6iMhm%|?7UV2u9_DTw{2qZ!K}_qW+HdAyG7cc*d6O|2^A=3T($S!#tom$9pNdZ9^Kv*c znLivji9I5iJb?>y@#}7ipAXTgT>i7E+$n=n@)sdGx%LeyTSyJ|A%X*8Zw`~Odp{;m zVKR2Vhb-L;N>BtLl32UN8@4LQ0Zhg|2dW zA%Z~$U>6B&k+WEkHSFAPXJhuAV83+vgVrB5C?J3(I=%6Y==6G?K@gqBu#N>;!=Z>` zGKPTr$*hCCT{;*P00F@JA6atqAGI?Zc?v}^8M}Gk_sd)5&GL4GazXG#e(b7EZI(u6 zHm|NtZp0!p8}aDO=2CQK!(M`250o_w;5bhXyML)RxoO_A5i{?*THYvcHK?QbFVbTr U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 03ab8a84f141a4464654d46362eb539fffd7d067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 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 diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index f47613ee46814496f40d58ae909b756976d765e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcmV+}2GRM6P)oxL5Jl&M-bdt-nJLW7%*;tqD$LBxWM;P4BxYtABr|k+c6=+frM0{PRUMscPfyPc zN0@yoyQfc{?VNnEqH9uPrz*Op_Rn@r5@&*uVG9`URCG@6@%|KBtLUD5QNGCt01$L4 z`sPnmbWe?(?Vch@MfWs}3@f@|Q*dT^zM^MlM0Q{V5C~PhTFu#>nF0^-l4(m|mW>RX zor5y-Z0;btFhZh#)ymerTCt*cmW<56$gqN!!zLJK7=9c^hB1p=kewJI|_8U}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@Df?W z2J2MA$b1Huqni0OkwZ6C(4R1wv+aqh5neuGS0GCx!whEGD#I4$k?TfnG?ZCIFJnRM zWH2wPM;%l>YF8jjGgX{nWEius6`IGLG`n0Rv(KA>r0IT9J?5mpalpv1PR%%s3?F9L zg!866?Nf+=-x!ezKGY9`!N zJE=fs|3C1qYv%)$+1@Er4F%JtJ4DT-hd}M2ZyeI-{4ty1cY2=k!pN{Gx7ot9y1PeK zJ}>x_hx?3uMD4VXYNx$AHB-v>4@}aRzy3}akJ{Alj)L#P$nb-%7;WzDTPpW;Jb&aH zT+ojP02iF1pMUSp|=@GNZLSznTN_75zTdq0xJJ;P39Q7eC#4JZ!t z1B0rdSlvfrx|%*Xc`4| ze)#zpx_M+?KQqkp0$B2KJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^ z|CC;{RBm&BpC0kbav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA z0W0_q6h`KP3lRbhhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_UL9;QoS{=;0%|5GcFh< z(6Ffd;0OvH&D-NMOV_v(hBs7>!N@RXNi;0+;Zoed10!15asvYclt?5f zpU)p#F1)ovmpPMaH$M)m41+j~OhON~gbs51LWJJy>?tYs%{SjrXJ@BgE*_8T5RG;|v?ojGSc-AUUX-H`Km3q>`Q;as11Kr~x7|=~p}0-w zIezzr zXq;LcY233w7Dk2viDpl3ui2d=Ns~JZmvDQTlJf6MTO>v;YL<6^99(`s?!kb&i55>j z&4CnoSf`0IEV;v%F)cYAimF)#Mutnk?lSMScylSy>R-{Cz00J?!^ki)-Qmv}N)862 zI4_~a2P5a%W%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QG zL`$%6vL&!eI(`_e!0Ivsx2ZGE%BBQhQ`BALVleaE}Uo$6^pIG0<|!$AOtJ;4Av=~FT%!boGo)-xh-5M$WDxq<#akCTQzOr z^&*1@O2HW$8CDrKW-IprzhCHxtk*C?qJM#NliMfSq8lS^kqu(xW!My)nao=}hYyKv zj>ry-00;&;qMIk%VjC}VS*<;~k>-ngt-P3jCRnivEBFjn88&9=cHY?@+f4I*tu40o gVn<^0BqIR$3#s8JH79+r6951J07*qoM6N<$f+ET2fdBvi diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 42315c6dc1260f60b9de72e58f1fd4789c1f488a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�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 diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index 45537513df37c45e8074c7c131c61cec2eac66ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5868 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 diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 6360ea17a408801185f000acaded313519da49b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9605 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7082 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 diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/built_redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json deleted file mode 100644 index 0bedcf2f..00000000 --- a/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "LaunchImage.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "LaunchImage@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b..00000000 --- a/built_redux/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -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. \ No newline at end of file diff --git a/built_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard b/built_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7..00000000 --- a/built_redux/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/built_redux/ios/Runner/Base.lproj/Main.storyboard b/built_redux/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516..00000000 --- a/built_redux/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/built_redux/ios/Runner/Info.plist b/built_redux/ios/Runner/Info.plist deleted file mode 100644 index fcf21c99..00000000 --- a/built_redux/ios/Runner/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - built_redux - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/built_redux/ios/Runner/Runner-Bridging-Header.h b/built_redux/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 7335fdf9..00000000 --- a/built_redux/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/built_redux/lib/actions/actions.dart b/built_redux/lib/actions/actions.dart deleted file mode 100644 index e42f4bad..00000000 --- a/built_redux/lib/actions/actions.dart +++ /dev/null @@ -1,40 +0,0 @@ -library actions; - -import 'package:built_redux/built_redux.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; - -part 'actions.g.dart'; - -abstract class AppActions extends ReduxActions { - ActionDispatcher addTodoAction; - ActionDispatcher clearCompletedAction; - ActionDispatcher deleteTodoAction; - ActionDispatcher fetchTodosAction; - ActionDispatcher toggleAllAction; - ActionDispatcher> loadTodosSuccess; - ActionDispatcher loadTodosFailure; - ActionDispatcher updateFilterAction; - ActionDispatcher updateTabAction; - ActionDispatcher updateTodoAction; - - AppActions._(); - - factory AppActions() => _$AppActions(); -} - -abstract class UpdateTodoActionPayload - implements Built { - static Serializer get serializer => - _$updateTodoActionPayloadSerializer; - - String get id; - - Todo get updatedTodo; - - UpdateTodoActionPayload._(); - - factory UpdateTodoActionPayload(String id, Todo updatedTodo) => - _$UpdateTodoActionPayload._(id: id, updatedTodo: updatedTodo); -} diff --git a/built_redux/lib/actions/actions.g.dart b/built_redux/lib/actions/actions.g.dart deleted file mode 100644 index 025f841c..00000000 --- a/built_redux/lib/actions/actions.g.dart +++ /dev/null @@ -1,245 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of actions; - -// ************************************************************************** -// BuiltReduxGenerator -// ************************************************************************** - -// ignore_for_file: avoid_classes_with_only_static_members -// ignore_for_file: annotate_overrides -// ignore_for_file: overridden_fields -// ignore_for_file: type_annotate_public_apis - -class _$AppActions extends AppActions { - factory _$AppActions() => new _$AppActions._(); - _$AppActions._() : super._(); - - final addTodoAction = new ActionDispatcher('AppActions-addTodoAction'); - final clearCompletedAction = - new ActionDispatcher('AppActions-clearCompletedAction'); - final deleteTodoAction = - new ActionDispatcher('AppActions-deleteTodoAction'); - final fetchTodosAction = - new ActionDispatcher('AppActions-fetchTodosAction'); - final toggleAllAction = - new ActionDispatcher('AppActions-toggleAllAction'); - final loadTodosSuccess = - new ActionDispatcher>('AppActions-loadTodosSuccess'); - final loadTodosFailure = - new ActionDispatcher('AppActions-loadTodosFailure'); - final updateFilterAction = - new ActionDispatcher('AppActions-updateFilterAction'); - final updateTabAction = - new ActionDispatcher('AppActions-updateTabAction'); - final updateTodoAction = new ActionDispatcher( - 'AppActions-updateTodoAction'); - - @override - void setDispatcher(Dispatcher dispatcher) { - addTodoAction.setDispatcher(dispatcher); - clearCompletedAction.setDispatcher(dispatcher); - deleteTodoAction.setDispatcher(dispatcher); - fetchTodosAction.setDispatcher(dispatcher); - toggleAllAction.setDispatcher(dispatcher); - loadTodosSuccess.setDispatcher(dispatcher); - loadTodosFailure.setDispatcher(dispatcher); - updateFilterAction.setDispatcher(dispatcher); - updateTabAction.setDispatcher(dispatcher); - updateTodoAction.setDispatcher(dispatcher); - } -} - -class AppActionsNames { - static final addTodoAction = new ActionName('AppActions-addTodoAction'); - static final clearCompletedAction = - new ActionName('AppActions-clearCompletedAction'); - static final deleteTodoAction = - new ActionName('AppActions-deleteTodoAction'); - static final fetchTodosAction = - new ActionName('AppActions-fetchTodosAction'); - static final toggleAllAction = - new ActionName('AppActions-toggleAllAction'); - static final loadTodosSuccess = - new ActionName>('AppActions-loadTodosSuccess'); - static final loadTodosFailure = - new ActionName('AppActions-loadTodosFailure'); - static final updateFilterAction = - new ActionName('AppActions-updateFilterAction'); - static final updateTabAction = - new ActionName('AppActions-updateTabAction'); - static final updateTodoAction = - new ActionName('AppActions-updateTodoAction'); -} - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -Serializer _$updateTodoActionPayloadSerializer = - new _$UpdateTodoActionPayloadSerializer(); - -class _$UpdateTodoActionPayloadSerializer - implements StructuredSerializer { - @override - final Iterable types = const [ - UpdateTodoActionPayload, - _$UpdateTodoActionPayload - ]; - @override - final String wireName = 'UpdateTodoActionPayload'; - - @override - Iterable serialize( - Serializers serializers, UpdateTodoActionPayload object, - {FullType specifiedType = FullType.unspecified}) { - final result = [ - 'id', - serializers.serialize(object.id, specifiedType: const FullType(String)), - 'updatedTodo', - serializers.serialize(object.updatedTodo, - specifiedType: const FullType(Todo)), - ]; - - return result; - } - - @override - UpdateTodoActionPayload deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { - final result = new UpdateTodoActionPayloadBuilder(); - - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current as String; - iterator.moveNext(); - final dynamic value = iterator.current; - switch (key) { - case 'id': - result.id = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; - case 'updatedTodo': - result.updatedTodo.replace(serializers.deserialize(value, - specifiedType: const FullType(Todo)) as Todo); - break; - } - } - - return result.build(); - } -} - -class _$UpdateTodoActionPayload extends UpdateTodoActionPayload { - @override - final String id; - @override - final Todo updatedTodo; - - factory _$UpdateTodoActionPayload( - [void Function(UpdateTodoActionPayloadBuilder) updates]) => - (new UpdateTodoActionPayloadBuilder()..update(updates)).build(); - - _$UpdateTodoActionPayload._({this.id, this.updatedTodo}) : super._() { - if (id == null) { - throw new BuiltValueNullFieldError('UpdateTodoActionPayload', 'id'); - } - if (updatedTodo == null) { - throw new BuiltValueNullFieldError( - 'UpdateTodoActionPayload', 'updatedTodo'); - } - } - - @override - UpdateTodoActionPayload rebuild( - void Function(UpdateTodoActionPayloadBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - UpdateTodoActionPayloadBuilder toBuilder() => - new UpdateTodoActionPayloadBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is UpdateTodoActionPayload && - id == other.id && - updatedTodo == other.updatedTodo; - } - - @override - int get hashCode { - return $jf($jc($jc(0, id.hashCode), updatedTodo.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('UpdateTodoActionPayload') - ..add('id', id) - ..add('updatedTodo', updatedTodo)) - .toString(); - } -} - -class UpdateTodoActionPayloadBuilder - implements - Builder { - _$UpdateTodoActionPayload _$v; - - String _id; - String get id => _$this._id; - set id(String id) => _$this._id = id; - - TodoBuilder _updatedTodo; - TodoBuilder get updatedTodo => _$this._updatedTodo ??= new TodoBuilder(); - set updatedTodo(TodoBuilder updatedTodo) => _$this._updatedTodo = updatedTodo; - - UpdateTodoActionPayloadBuilder(); - - UpdateTodoActionPayloadBuilder get _$this { - if (_$v != null) { - _id = _$v.id; - _updatedTodo = _$v.updatedTodo?.toBuilder(); - _$v = null; - } - return this; - } - - @override - void replace(UpdateTodoActionPayload other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$UpdateTodoActionPayload; - } - - @override - void update(void Function(UpdateTodoActionPayloadBuilder) updates) { - if (updates != null) updates(this); - } - - @override - _$UpdateTodoActionPayload build() { - _$UpdateTodoActionPayload _$result; - try { - _$result = _$v ?? - new _$UpdateTodoActionPayload._( - id: id, updatedTodo: updatedTodo.build()); - } catch (_) { - String _$failedField; - try { - _$failedField = 'updatedTodo'; - updatedTodo.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - 'UpdateTodoActionPayload', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/containers/action_selector.dart b/built_redux/lib/containers/action_selector.dart deleted file mode 100644 index b124adb1..00000000 --- a/built_redux/lib/containers/action_selector.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/extra_actions_button.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -class ExtraActionSelector extends StoreConnector { - ExtraActionSelector({Key key}) : super(key: key); - - @override - bool connect(AppState state) => state.allCompleteSelector; - - @override - Widget build(BuildContext context, bool allComplete, AppActions actions) { - return ExtraActionsButton( - allComplete: allComplete, - onSelected: (action) { - if (action == ExtraAction.clearCompleted) { - actions.clearCompletedAction(); - } else if (action == ExtraAction.toggleAllComplete) { - actions.toggleAllAction(); - } - }, - ); - } -} diff --git a/built_redux/lib/containers/active_tab.dart b/built_redux/lib/containers/active_tab.dart deleted file mode 100644 index 711e2d6f..00000000 --- a/built_redux/lib/containers/active_tab.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/containers/typedefs.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -class ActiveTab extends StoreConnector { - final ViewModelBuilder builder; - - ActiveTab({Key key, @required this.builder}) : super(key: key); - - @override - AppTab connect(AppState state) => state.activeTab; - - @override - Widget build(BuildContext context, AppTab activeTab, AppActions actions) { - return builder(context, activeTab); - } -} diff --git a/built_redux/lib/containers/add_todo.dart b/built_redux/lib/containers/add_todo.dart deleted file mode 100644 index 5484c357..00000000 --- a/built_redux/lib/containers/add_todo.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/add_edit_screen.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -class AddTodo extends StoreConnector { - AddTodo({Key key}) : super(key: key); - - @override - Widget build(BuildContext context, Null ignored, AppActions actions) { - return AddEditScreen( - isEditing: false, - onSave: (String task, String note) { - actions.addTodoAction( - Todo.builder((b) { - return b - ..task = task - ..note = note; - }), - ); - }, - ); - } - - @override - Null connect(AppState state) {} -} diff --git a/built_redux/lib/containers/app_loading.dart b/built_redux/lib/containers/app_loading.dart deleted file mode 100644 index 8182e210..00000000 --- a/built_redux/lib/containers/app_loading.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/containers/typedefs.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -class AppLoading extends StoreConnector { - final ViewModelBuilder builder; - - AppLoading({Key key, @required this.builder}) : super(key: key); - - @override - Widget build(BuildContext context, bool state, AppActions actions) { - return builder(context, state); - } - - @override - bool connect(AppState state) { - return state.isLoading; - } -} diff --git a/built_redux/lib/containers/edit_todo.dart b/built_redux/lib/containers/edit_todo.dart deleted file mode 100644 index 6421b1ce..00000000 --- a/built_redux/lib/containers/edit_todo.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/add_edit_screen.dart'; -import 'package:flutter/widgets.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -class EditTodo extends StoreConnector { - final Todo todo; - - EditTodo({this.todo, Key key}) : super(key: key); - - @override - Widget build(BuildContext context, _, AppActions actions) { - return AddEditScreen( - key: ArchSampleKeys.editTodoScreen, - isEditing: true, - onSave: (task, note) { - actions.updateTodoAction( - UpdateTodoActionPayload( - todo.id, - todo.rebuild( - (b) => b - ..task = task - ..note = note, - ), - ), - ); - }, - todo: todo, - ); - } - - @override - Null connect(AppState state) {} -} diff --git a/built_redux/lib/containers/filter_selector.dart b/built_redux/lib/containers/filter_selector.dart deleted file mode 100644 index 48ff5283..00000000 --- a/built_redux/lib/containers/filter_selector.dart +++ /dev/null @@ -1,61 +0,0 @@ -library filter_selector; - -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/containers/typedefs.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_value/built_value.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/src/widgets/framework.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -part 'filter_selector.g.dart'; - -typedef OnFilterSelected = void Function(VisibilityFilter filter); - -abstract class FilterSelectorViewModel - implements Built { - FilterSelectorViewModel._(); - - OnFilterSelected get onFilterSelected; - - VisibilityFilter get activeFilter; - - factory FilterSelectorViewModel([ - void Function(FilterSelectorViewModelBuilder b) updates, - ]) = _$FilterSelectorViewModel; - - factory FilterSelectorViewModel.from( - AppActions actions, - VisibilityFilter activeFilter, - ) { - return FilterSelectorViewModel( - (b) => b - ..onFilterSelected = (filter) { - actions.updateFilterAction(filter); - } - ..activeFilter = activeFilter, - ); - } -} - -class FilterSelector - extends StoreConnector { - final ViewModelBuilder builder; - - @override - VisibilityFilter connect(AppState state) => state.activeFilter; - - FilterSelector({Key key, @required this.builder}) : super(key: key); - - @override - Widget build( - BuildContext context, - VisibilityFilter activeFilter, - AppActions actions, - ) { - return builder( - context, - FilterSelectorViewModel.from(actions, activeFilter), - ); - } -} diff --git a/built_redux/lib/containers/filter_selector.g.dart b/built_redux/lib/containers/filter_selector.g.dart deleted file mode 100644 index 3001e3a9..00000000 --- a/built_redux/lib/containers/filter_selector.g.dart +++ /dev/null @@ -1,112 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of filter_selector; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -class _$FilterSelectorViewModel extends FilterSelectorViewModel { - @override - final OnFilterSelected onFilterSelected; - @override - final VisibilityFilter activeFilter; - - factory _$FilterSelectorViewModel( - [void Function(FilterSelectorViewModelBuilder) updates]) => - (new FilterSelectorViewModelBuilder()..update(updates)).build(); - - _$FilterSelectorViewModel._({this.onFilterSelected, this.activeFilter}) - : super._() { - if (onFilterSelected == null) { - throw new BuiltValueNullFieldError( - 'FilterSelectorViewModel', 'onFilterSelected'); - } - if (activeFilter == null) { - throw new BuiltValueNullFieldError( - 'FilterSelectorViewModel', 'activeFilter'); - } - } - - @override - FilterSelectorViewModel rebuild( - void Function(FilterSelectorViewModelBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - FilterSelectorViewModelBuilder toBuilder() => - new FilterSelectorViewModelBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - final _$dynamicOther = other as dynamic; - return other is FilterSelectorViewModel && - onFilterSelected == _$dynamicOther.onFilterSelected && - activeFilter == other.activeFilter; - } - - @override - int get hashCode { - return $jf($jc($jc(0, onFilterSelected.hashCode), activeFilter.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('FilterSelectorViewModel') - ..add('onFilterSelected', onFilterSelected) - ..add('activeFilter', activeFilter)) - .toString(); - } -} - -class FilterSelectorViewModelBuilder - implements - Builder { - _$FilterSelectorViewModel _$v; - - OnFilterSelected _onFilterSelected; - OnFilterSelected get onFilterSelected => _$this._onFilterSelected; - set onFilterSelected(OnFilterSelected onFilterSelected) => - _$this._onFilterSelected = onFilterSelected; - - VisibilityFilter _activeFilter; - VisibilityFilter get activeFilter => _$this._activeFilter; - set activeFilter(VisibilityFilter activeFilter) => - _$this._activeFilter = activeFilter; - - FilterSelectorViewModelBuilder(); - - FilterSelectorViewModelBuilder get _$this { - if (_$v != null) { - _onFilterSelected = _$v.onFilterSelected; - _activeFilter = _$v.activeFilter; - _$v = null; - } - return this; - } - - @override - void replace(FilterSelectorViewModel other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$FilterSelectorViewModel; - } - - @override - void update(void Function(FilterSelectorViewModelBuilder) updates) { - if (updates != null) updates(this); - } - - @override - _$FilterSelectorViewModel build() { - final _$result = _$v ?? - new _$FilterSelectorViewModel._( - onFilterSelected: onFilterSelected, activeFilter: activeFilter); - replace(_$result); - return _$result; - } -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/containers/filtered_todos.dart b/built_redux/lib/containers/filtered_todos.dart deleted file mode 100644 index 4d0711c5..00000000 --- a/built_redux/lib/containers/filtered_todos.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/todo_list.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -class FilteredTodos extends StoreConnector> { - FilteredTodos({Key key}) : super(key: key); - - @override - Widget build(BuildContext context, List state, AppActions actions) { - return TodoList( - todos: state, - onCheckboxChanged: (todo, complete) { - actions.updateTodoAction( - UpdateTodoActionPayload( - todo.id, - todo.rebuild((b) => b..complete = complete), - ), - ); - }, - onRemove: (todo) { - actions.deleteTodoAction(todo.id); - }, - onUndoRemove: (todo) { - actions.addTodoAction(todo); - }, - ); - } - - @override - List connect(AppState state) => state.filteredTodosSelector; -} diff --git a/built_redux/lib/containers/stats.dart b/built_redux/lib/containers/stats.dart deleted file mode 100644 index 95d3ab86..00000000 --- a/built_redux/lib/containers/stats.dart +++ /dev/null @@ -1,41 +0,0 @@ -library stats; - -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/stats_counter.dart'; -import 'package:built_value/built_value.dart'; -import 'package:flutter/src/widgets/framework.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -part 'stats.g.dart'; - -abstract class StatsProps implements Built { - int get numCompleted; - - int get numActive; - - StatsProps._(); - - factory StatsProps([Function(StatsPropsBuilder b) updates]) = _$StatsProps; -} - -class Stats extends StoreConnector { - Stats({Key key}) : super(key: key); - - @override - StatsProps connect(AppState state) { - return StatsProps( - (b) => b - ..numCompleted = state.numCompletedSelector - ..numActive = state.numActiveSelector, - ); - } - - @override - Widget build(BuildContext context, StatsProps props, AppActions actions) { - return StatsCounter( - numActive: props.numActive, - numCompleted: props.numCompleted, - ); - } -} diff --git a/built_redux/lib/containers/stats.g.dart b/built_redux/lib/containers/stats.g.dart deleted file mode 100644 index b0e50bc9..00000000 --- a/built_redux/lib/containers/stats.g.dart +++ /dev/null @@ -1,100 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of stats; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -class _$StatsProps extends StatsProps { - @override - final int numCompleted; - @override - final int numActive; - - factory _$StatsProps([void Function(StatsPropsBuilder) updates]) => - (new StatsPropsBuilder()..update(updates)).build(); - - _$StatsProps._({this.numCompleted, this.numActive}) : super._() { - if (numCompleted == null) { - throw new BuiltValueNullFieldError('StatsProps', 'numCompleted'); - } - if (numActive == null) { - throw new BuiltValueNullFieldError('StatsProps', 'numActive'); - } - } - - @override - StatsProps rebuild(void Function(StatsPropsBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - StatsPropsBuilder toBuilder() => new StatsPropsBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is StatsProps && - numCompleted == other.numCompleted && - numActive == other.numActive; - } - - @override - int get hashCode { - return $jf($jc($jc(0, numCompleted.hashCode), numActive.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('StatsProps') - ..add('numCompleted', numCompleted) - ..add('numActive', numActive)) - .toString(); - } -} - -class StatsPropsBuilder implements Builder { - _$StatsProps _$v; - - int _numCompleted; - int get numCompleted => _$this._numCompleted; - set numCompleted(int numCompleted) => _$this._numCompleted = numCompleted; - - int _numActive; - int get numActive => _$this._numActive; - set numActive(int numActive) => _$this._numActive = numActive; - - StatsPropsBuilder(); - - StatsPropsBuilder get _$this { - if (_$v != null) { - _numCompleted = _$v.numCompleted; - _numActive = _$v.numActive; - _$v = null; - } - return this; - } - - @override - void replace(StatsProps other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$StatsProps; - } - - @override - void update(void Function(StatsPropsBuilder) updates) { - if (updates != null) updates(this); - } - - @override - _$StatsProps build() { - final _$result = _$v ?? - new _$StatsProps._(numCompleted: numCompleted, numActive: numActive); - replace(_$result); - return _$result; - } -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/containers/tab_selector.dart b/built_redux/lib/containers/tab_selector.dart deleted file mode 100644 index cd9661ee..00000000 --- a/built_redux/lib/containers/tab_selector.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/src/widgets/framework.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -typedef OnTabsSelected = void Function(int); - -class TabSelector extends StoreConnector { - TabSelector({Key key}) : super(key: key); - - @override - AppTab connect(AppState state) => state.activeTab; - - @override - Widget build(BuildContext context, AppTab activeTab, AppActions action) { - return BottomNavigationBar( - key: ArchSampleKeys.tabs, - currentIndex: AppTab.toIndex(activeTab), - onTap: (index) { - action.updateTabAction(AppTab.fromIndex(index)); - }, - items: AppTab.values.map((tab) { - return BottomNavigationBarItem( - icon: Icon( - tab == AppTab.todos ? Icons.list : Icons.show_chart, - key: tab == AppTab.stats - ? ArchSampleKeys.statsTab - : ArchSampleKeys.todoTab, - ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), - ); - }).toList(), - ); - } -} diff --git a/built_redux/lib/containers/todo_details.dart b/built_redux/lib/containers/todo_details.dart deleted file mode 100644 index 4d57a40b..00000000 --- a/built_redux/lib/containers/todo_details.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/details_screen.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; - -class TodoDetails extends StoreConnector { - final String id; - - TodoDetails({Key key, @required this.id}) : super(key: key); - - @override - Widget build(BuildContext context, Todo todo, AppActions actions) { - return DetailsScreen( - todo: todo, - onDelete: () => actions.deleteTodoAction(todo.id), - toggleCompleted: (isComplete) { - actions.updateTodoAction( - UpdateTodoActionPayload( - id, - todo.rebuild((b) => b..complete = isComplete), - ), - ); - }, - ); - } - - @override - Todo connect(AppState state) { - return state.todos.firstWhere( - (todo) => todo.id == id, - orElse: () => Todo('Nothing Here'), - ); - } -} diff --git a/built_redux/lib/containers/typedefs.dart b/built_redux/lib/containers/typedefs.dart deleted file mode 100644 index e6088528..00000000 --- a/built_redux/lib/containers/typedefs.dart +++ /dev/null @@ -1,4 +0,0 @@ -import 'package:flutter/src/widgets/framework.dart'; - -typedef ViewModelBuilder = - Widget Function(BuildContext context, ViewModel vm); diff --git a/built_redux/lib/data/file_storage.dart b/built_redux/lib/data/file_storage.dart deleted file mode 100644 index 201fb859..00000000 --- a/built_redux/lib/data/file_storage.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; - -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/models/serializers.dart'; - -/// Loads and saves a List of Todos using a text file stored on the device. -class FileStorage { - final String tag; - final Future Function() getDirectory; - - const FileStorage(this.tag, this.getDirectory); - - /// LoadTodos - Future> loadTodos() async { - final file = await _getLocalFile(); - final contents = await file.readAsString(); - - return serializers - .deserializeWith(AppState.serializer, json.decode(contents)) - .todos - .toList(); - } - - Future saveTodos(List todos) async { - final file = await _getLocalFile(); - - return file.writeAsString( - json.encode( - serializers.serializeWith( - AppState.serializer, - AppState.fromTodos(todos), - ), - ), - ); - } - - Future _getLocalFile() async { - final dir = await getDirectory(); - - return File('${dir.path}/FlutterMvcFileStorage__$tag.json'); - } - - Future clean() async { - final file = await _getLocalFile(); - - return file.delete(); - } -} diff --git a/built_redux/lib/data/todos_repository.dart b/built_redux/lib/data/todos_repository.dart deleted file mode 100644 index 1b618b0d..00000000 --- a/built_redux/lib/data/todos_repository.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'dart:async'; -import 'dart:core'; - -import 'package:built_redux_sample/data/file_storage.dart'; -import 'package:built_redux_sample/data/web_client.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:path_provider/path_provider.dart'; - -/// A class that glues together our local file storage and web client. It has a -/// clear responsibility: Load Todos and Persist todos. -/// -/// In most apps, we use the provided repository. In this case, it makes sense -/// to demonstrate the built_value serializers, which are used in the -/// FileStorage part of this app. -/// -/// Please see the `todos_repository` library for more information about the -/// Repository pattern. -class TodosRepository { - final FileStorage fileStorage; - final WebClient webClient; - - const TodosRepository({ - this.fileStorage = const FileStorage( - '__built_redux_sample_app__', - getApplicationDocumentsDirectory, - ), - this.webClient = const WebClient(), - }); - - /// Loads todos first from File storage. If they don't exist or encounter an - /// error, it attempts to load the Todos from a Web Service. - Future> loadTodos() async { - try { - return await fileStorage.loadTodos(); - } catch (e) { - return webClient.fetchTodos(); - } - } - - // Persists todos to local disk and the web - Future saveTodos(List todos) { - return Future.wait([ - fileStorage.saveTodos(todos), - webClient.postTodos(todos), - ]); - } -} diff --git a/built_redux/lib/data/web_client.dart b/built_redux/lib/data/web_client.dart deleted file mode 100644 index 47337ba0..00000000 --- a/built_redux/lib/data/web_client.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'dart:async'; - -import 'package:built_redux_sample/models/models.dart'; - -/// A class that is meant to represent a Web Service you would call to fetch -/// and persist Todos to and from the cloud. -/// -/// Since we're trying to keep this example simple, it doesn't communicate with -/// a real server but simply emulates the functionality. -class WebClient { - final Duration delay; - - const WebClient([this.delay = const Duration(milliseconds: 1200)]); - - /// Mock that "fetches" some Todos from a "web service" after a short delay - Future> fetchTodos() async { - return Future.delayed( - delay, - () => [ - Todo.builder( - (b) => b - ..task = 'Buy food for da kitty' - ..note = 'With the chickeny bits!' - ..id = '1', - ), - Todo.builder( - (b) => b - ..task = 'Find a Red Sea dive trip' - ..note = 'Echo vs MY Dream' - ..id = '2', - ), - Todo.builder( - (b) => b - ..task = 'Book flights to Egypt' - ..complete = true - ..id = '3', - ), - Todo.builder( - (b) => b - ..task = 'Decide on accommodation' - ..id = '4', - ), - Todo.builder( - (b) => b - ..task = 'Sip Margaritas' - ..note = 'on the beach' - ..complete = true - ..id = '5', - ), - ], - ); - } - - /// Mock that returns true or false for success or failure. In this case, - /// it will "Always Succeed" - Future postTodos(List todos) async { - return Future.value(true); - } -} diff --git a/built_redux/lib/localization.dart b/built_redux/lib/localization.dart deleted file mode 100644 index 786230b1..00000000 --- a/built_redux/lib/localization.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -class BuiltReduxLocalizations { - static BuiltReduxLocalizations of(BuildContext context) { - return Localizations.of( - context, - BuiltReduxLocalizations, - ); - } - - String get appTitle => 'Built Redux Example'; -} - -class BuiltReduxLocalizationsDelegate - extends LocalizationsDelegate { - @override - Future load(Locale locale) => - Future(() => BuiltReduxLocalizations()); - - @override - bool shouldReload(BuiltReduxLocalizationsDelegate old) => false; - - @override - bool isSupported(Locale locale) => - locale.languageCode.toLowerCase().contains('en'); -} diff --git a/built_redux/lib/main.dart b/built_redux/lib/main.dart deleted file mode 100644 index 010bf39d..00000000 --- a/built_redux/lib/main.dart +++ /dev/null @@ -1,68 +0,0 @@ -library built_redux_sample; - -import 'package:built_redux/built_redux.dart'; -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/containers/add_todo.dart'; -import 'package:built_redux_sample/localization.dart'; -import 'package:built_redux_sample/middleware/store_todos_middleware.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/home_screen.dart'; -import 'package:built_redux_sample/reducers/reducers.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_built_redux/flutter_built_redux.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -void main() { - runApp(BuiltReduxApp()); -} - -class BuiltReduxApp extends StatefulWidget { - final store = Store( - reducerBuilder.build(), - AppState.loading(), - AppActions(), - middleware: [createStoreTodosMiddleware()], - ); - - @override - State createState() { - return BuiltReduxAppState(); - } -} - -class BuiltReduxAppState extends State { - Store store; - - @override - void initState() { - store = widget.store; - - store.actions.fetchTodosAction(); - - super.initState(); - } - - @override - Widget build(BuildContext context) { - return ReduxProvider( - store: store, - child: MaterialApp( - onGenerateTitle: (context) => - BuiltReduxLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - BuiltReduxLocalizationsDelegate(), - ], - routes: { - ArchSampleRoutes.home: (context) { - return HomeScreen(key: ArchSampleKeys.homeScreen); - }, - ArchSampleRoutes.addTodo: (context) { - return AddTodo(); - }, - }, - ), - ); - } -} diff --git a/built_redux/lib/middleware/store_todos_middleware.dart b/built_redux/lib/middleware/store_todos_middleware.dart deleted file mode 100644 index 9889cfba..00000000 --- a/built_redux/lib/middleware/store_todos_middleware.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:built_redux/built_redux.dart'; -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/data/todos_repository.dart'; -import 'package:built_redux_sample/models/models.dart'; - -Middleware createStoreTodosMiddleware([ - TodosRepository repository = const TodosRepository(), -]) { - return (MiddlewareBuilder() - ..add(AppActionsNames.fetchTodosAction, createFetchTodos(repository)) - ..add(AppActionsNames.addTodoAction, createSaveTodos(repository)) - ..add( - AppActionsNames.clearCompletedAction, - createSaveTodos(repository), - ) - ..add( - AppActionsNames.loadTodosSuccess, - createSaveTodos>(repository), - ) - ..add( - AppActionsNames.deleteTodoAction, - createSaveTodos(repository), - ) - ..add( - AppActionsNames.toggleAllAction, - createSaveTodos(repository), - ) - ..add( - AppActionsNames.updateTodoAction, - createSaveTodos(repository), - )) - .build(); -} - -MiddlewareHandler createFetchTodos( - TodosRepository repository, -) { - return ( - MiddlewareApi api, - ActionHandler next, - Action action, - ) { - if (api.state.isLoading) { - repository - .loadTodos() - .then((todos) { - return api.actions.loadTodosSuccess(todos); - }) - .catchError(api.actions.loadTodosFailure); - } - - next(action); - }; -} - -MiddlewareHandler createSaveTodos( - TodosRepository repository, -) { - return ( - MiddlewareApi api, - ActionHandler next, - Action action, - ) { - next(action); - - repository.saveTodos(api.state.todos.toList()); - }; -} diff --git a/built_redux/lib/models/app_state.dart b/built_redux/lib/models/app_state.dart deleted file mode 100644 index 38be86ba..00000000 --- a/built_redux/lib/models/app_state.dart +++ /dev/null @@ -1,77 +0,0 @@ -library app_state; - -import 'package:built_collection/built_collection.dart'; -import 'package:built_redux_sample/models/app_tab.dart'; -import 'package:built_redux_sample/models/todo.dart'; -import 'package:built_redux_sample/models/visibility_filter.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -part 'app_state.g.dart'; - -abstract class AppState implements Built { - static Serializer get serializer => _$appStateSerializer; - - bool get isLoading; - - BuiltList get todos; - - AppTab get activeTab; - - VisibilityFilter get activeFilter; - - AppState._(); - - factory AppState([void Function(AppStateBuilder b) updates]) => _$AppState( - (b) => b - ..isLoading = false - ..todos = ListBuilder([]) - ..activeTab = AppTab.todos - ..activeFilter = VisibilityFilter.all - ..update(updates), - ); - - factory AppState.loading() => AppState((b) => b..isLoading = true); - - factory AppState.fromTodos(List todos) => - AppState((b) => b..todos = ListBuilder(todos)); - - /// [numCompletedSelector] memoizes and returns the number of complete todos. - @memoized - int get numCompletedSelector => - todos.fold(0, (sum, todo) => todo.complete ? ++sum : sum); - - /// [numActiveSelector] returns and memoizes the number of active todos. - /// Note it is computed using numCompletedSelector. Since `numCompletedSelector` is memoized, this is - /// cheaper than iterating over all todos again by doing todos.fold(0, (sum, todo) => !todo.complete ? ++sum : sum); - @memoized - int get numActiveSelector => todos.length - numCompletedSelector; - - /// [allCompleteSelector] returns and memoizes a boolean value which is true if all todos are complete. - /// Note it is computed using numCompletedSelector. Since `numCompletedSelector` is memoized, this is - /// cheaper than iterating over all todos again by doing todos.every((t) => t.completed); - @memoized - bool get allCompleteSelector => numCompletedSelector == todos.length; - - @memoized - List get filteredTodosSelector => todos.where((todo) { - switch (activeFilter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); - - Optional todoSelector(String id) { - try { - return Optional.of(todos.firstWhere((todo) => todo.id == id)); - } catch (e) { - return Optional.absent(); - } - } -} diff --git a/built_redux/lib/models/app_state.g.dart b/built_redux/lib/models/app_state.g.dart deleted file mode 100644 index 6b75b07d..00000000 --- a/built_redux/lib/models/app_state.g.dart +++ /dev/null @@ -1,232 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of app_state; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -Serializer _$appStateSerializer = new _$AppStateSerializer(); - -class _$AppStateSerializer implements StructuredSerializer { - @override - final Iterable types = const [AppState, _$AppState]; - @override - final String wireName = 'AppState'; - - @override - Iterable serialize(Serializers serializers, AppState object, - {FullType specifiedType = FullType.unspecified}) { - final result = [ - 'isLoading', - serializers.serialize(object.isLoading, - specifiedType: const FullType(bool)), - 'todos', - serializers.serialize(object.todos, - specifiedType: - const FullType(BuiltList, const [const FullType(Todo)])), - 'activeTab', - serializers.serialize(object.activeTab, - specifiedType: const FullType(AppTab)), - 'activeFilter', - serializers.serialize(object.activeFilter, - specifiedType: const FullType(VisibilityFilter)), - ]; - - return result; - } - - @override - AppState deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { - final result = new AppStateBuilder(); - - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current as String; - iterator.moveNext(); - final dynamic value = iterator.current; - switch (key) { - case 'isLoading': - result.isLoading = serializers.deserialize(value, - specifiedType: const FullType(bool)) as bool; - break; - case 'todos': - result.todos.replace(serializers.deserialize(value, - specifiedType: - const FullType(BuiltList, const [const FullType(Todo)])) - as BuiltList); - break; - case 'activeTab': - result.activeTab = serializers.deserialize(value, - specifiedType: const FullType(AppTab)) as AppTab; - break; - case 'activeFilter': - result.activeFilter = serializers.deserialize(value, - specifiedType: const FullType(VisibilityFilter)) - as VisibilityFilter; - break; - } - } - - return result.build(); - } -} - -class _$AppState extends AppState { - @override - final bool isLoading; - @override - final BuiltList todos; - @override - final AppTab activeTab; - @override - final VisibilityFilter activeFilter; - int __numCompletedSelector; - int __numActiveSelector; - bool __allCompleteSelector; - List __filteredTodosSelector; - - factory _$AppState([void Function(AppStateBuilder) updates]) => - (new AppStateBuilder()..update(updates)).build(); - - _$AppState._({this.isLoading, this.todos, this.activeTab, this.activeFilter}) - : super._() { - if (isLoading == null) { - throw new BuiltValueNullFieldError('AppState', 'isLoading'); - } - if (todos == null) { - throw new BuiltValueNullFieldError('AppState', 'todos'); - } - if (activeTab == null) { - throw new BuiltValueNullFieldError('AppState', 'activeTab'); - } - if (activeFilter == null) { - throw new BuiltValueNullFieldError('AppState', 'activeFilter'); - } - } - - @override - int get numCompletedSelector => - __numCompletedSelector ??= super.numCompletedSelector; - - @override - int get numActiveSelector => __numActiveSelector ??= super.numActiveSelector; - - @override - bool get allCompleteSelector => - __allCompleteSelector ??= super.allCompleteSelector; - - @override - List get filteredTodosSelector => - __filteredTodosSelector ??= super.filteredTodosSelector; - - @override - AppState rebuild(void Function(AppStateBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - AppStateBuilder toBuilder() => new AppStateBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is AppState && - isLoading == other.isLoading && - todos == other.todos && - activeTab == other.activeTab && - activeFilter == other.activeFilter; - } - - @override - int get hashCode { - return $jf($jc( - $jc($jc($jc(0, isLoading.hashCode), todos.hashCode), - activeTab.hashCode), - activeFilter.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('AppState') - ..add('isLoading', isLoading) - ..add('todos', todos) - ..add('activeTab', activeTab) - ..add('activeFilter', activeFilter)) - .toString(); - } -} - -class AppStateBuilder implements Builder { - _$AppState _$v; - - bool _isLoading; - bool get isLoading => _$this._isLoading; - set isLoading(bool isLoading) => _$this._isLoading = isLoading; - - ListBuilder _todos; - ListBuilder get todos => _$this._todos ??= new ListBuilder(); - set todos(ListBuilder todos) => _$this._todos = todos; - - AppTab _activeTab; - AppTab get activeTab => _$this._activeTab; - set activeTab(AppTab activeTab) => _$this._activeTab = activeTab; - - VisibilityFilter _activeFilter; - VisibilityFilter get activeFilter => _$this._activeFilter; - set activeFilter(VisibilityFilter activeFilter) => - _$this._activeFilter = activeFilter; - - AppStateBuilder(); - - AppStateBuilder get _$this { - if (_$v != null) { - _isLoading = _$v.isLoading; - _todos = _$v.todos?.toBuilder(); - _activeTab = _$v.activeTab; - _activeFilter = _$v.activeFilter; - _$v = null; - } - return this; - } - - @override - void replace(AppState other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$AppState; - } - - @override - void update(void Function(AppStateBuilder) updates) { - if (updates != null) updates(this); - } - - @override - _$AppState build() { - _$AppState _$result; - try { - _$result = _$v ?? - new _$AppState._( - isLoading: isLoading, - todos: todos.build(), - activeTab: activeTab, - activeFilter: activeFilter); - } catch (_) { - String _$failedField; - try { - _$failedField = 'todos'; - todos.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - 'AppState', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/models/app_tab.dart b/built_redux/lib/models/app_tab.dart deleted file mode 100644 index 20c7690a..00000000 --- a/built_redux/lib/models/app_tab.dart +++ /dev/null @@ -1,38 +0,0 @@ -library app_tab; - -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; - -part 'app_tab.g.dart'; - -class AppTab extends EnumClass { - static Serializer get serializer => _$appTabSerializer; - - static const AppTab todos = _$todos; - static const AppTab stats = _$stats; - - const AppTab._(String name) : super(name); - - static BuiltSet get values => _$appTabValues; - - static AppTab valueOf(String name) => _$appTabValueOf(name); - - static AppTab fromIndex(int index) { - switch (index) { - case 1: - return AppTab.stats; - default: - return AppTab.todos; - } - } - - static int toIndex(AppTab tab) { - switch (tab) { - case AppTab.stats: - return 1; - default: - return 0; - } - } -} diff --git a/built_redux/lib/models/app_tab.g.dart b/built_redux/lib/models/app_tab.g.dart deleted file mode 100644 index dc9598d7..00000000 --- a/built_redux/lib/models/app_tab.g.dart +++ /dev/null @@ -1,47 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of app_tab; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -const AppTab _$todos = const AppTab._('todos'); -const AppTab _$stats = const AppTab._('stats'); - -AppTab _$appTabValueOf(String name) { - switch (name) { - case 'todos': - return _$todos; - case 'stats': - return _$stats; - default: - throw new ArgumentError(name); - } -} - -final BuiltSet _$appTabValues = new BuiltSet(const [ - _$todos, - _$stats, -]); - -Serializer _$appTabSerializer = new _$AppTabSerializer(); - -class _$AppTabSerializer implements PrimitiveSerializer { - @override - final Iterable types = const [AppTab]; - @override - final String wireName = 'AppTab'; - - @override - Object serialize(Serializers serializers, AppTab object, - {FullType specifiedType = FullType.unspecified}) => - object.name; - - @override - AppTab deserialize(Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}) => - AppTab.valueOf(serialized as String); -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/models/extra_actions.dart b/built_redux/lib/models/extra_actions.dart deleted file mode 100644 index b257ba24..00000000 --- a/built_redux/lib/models/extra_actions.dart +++ /dev/null @@ -1,20 +0,0 @@ -library extra_actions; - -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; - -part 'extra_actions.g.dart'; - -class ExtraAction extends EnumClass { - static Serializer get serializer => _$extraActionSerializer; - - static const ExtraAction toggleAllComplete = _$toggleAllComplete; - static const ExtraAction clearCompleted = _$clearCompleted; - - const ExtraAction._(String name) : super(name); - - static BuiltSet get values => _$extraActionValues; - - static ExtraAction valueOf(String name) => _$extraActionValueOf(name); -} diff --git a/built_redux/lib/models/extra_actions.g.dart b/built_redux/lib/models/extra_actions.g.dart deleted file mode 100644 index 309b36b8..00000000 --- a/built_redux/lib/models/extra_actions.g.dart +++ /dev/null @@ -1,49 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of extra_actions; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -const ExtraAction _$toggleAllComplete = - const ExtraAction._('toggleAllComplete'); -const ExtraAction _$clearCompleted = const ExtraAction._('clearCompleted'); - -ExtraAction _$extraActionValueOf(String name) { - switch (name) { - case 'toggleAllComplete': - return _$toggleAllComplete; - case 'clearCompleted': - return _$clearCompleted; - default: - throw new ArgumentError(name); - } -} - -final BuiltSet _$extraActionValues = - new BuiltSet(const [ - _$toggleAllComplete, - _$clearCompleted, -]); - -Serializer _$extraActionSerializer = new _$ExtraActionSerializer(); - -class _$ExtraActionSerializer implements PrimitiveSerializer { - @override - final Iterable types = const [ExtraAction]; - @override - final String wireName = 'ExtraAction'; - - @override - Object serialize(Serializers serializers, ExtraAction object, - {FullType specifiedType = FullType.unspecified}) => - object.name; - - @override - ExtraAction deserialize(Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}) => - ExtraAction.valueOf(serialized as String); -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/models/models.dart b/built_redux/lib/models/models.dart deleted file mode 100644 index a4725035..00000000 --- a/built_redux/lib/models/models.dart +++ /dev/null @@ -1,7 +0,0 @@ -library models; - -export 'app_state.dart'; -export 'app_tab.dart'; -export 'extra_actions.dart'; -export 'todo.dart'; -export 'visibility_filter.dart'; diff --git a/built_redux/lib/models/serializers.dart b/built_redux/lib/models/serializers.dart deleted file mode 100644 index 6462ef1f..00000000 --- a/built_redux/lib/models/serializers.dart +++ /dev/null @@ -1,10 +0,0 @@ -library serializers; - -import 'package:built_collection/built_collection.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_value/serializer.dart'; - -part 'serializers.g.dart'; - -@SerializersFor([AppTab, ExtraAction, VisibilityFilter, AppState, Todo]) -final Serializers serializers = _$serializers; diff --git a/built_redux/lib/models/serializers.g.dart b/built_redux/lib/models/serializers.g.dart deleted file mode 100644 index 0eb437ee..00000000 --- a/built_redux/lib/models/serializers.g.dart +++ /dev/null @@ -1,20 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of serializers; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -Serializers _$serializers = (new Serializers().toBuilder() - ..add(AppState.serializer) - ..add(AppTab.serializer) - ..add(ExtraAction.serializer) - ..add(Todo.serializer) - ..add(VisibilityFilter.serializer) - ..addBuilderFactory( - const FullType(BuiltList, const [const FullType(Todo)]), - () => new ListBuilder())) - .build(); - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/models/todo.dart b/built_redux/lib/models/todo.dart deleted file mode 100644 index 6b779648..00000000 --- a/built_redux/lib/models/todo.dart +++ /dev/null @@ -1,40 +0,0 @@ -library todo; - -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -part 'todo.g.dart'; - -abstract class Todo implements Built { - static Serializer get serializer => _$todoSerializer; - - bool get complete; - - String get id; - - String get note; - - String get task; - - Todo._(); - - factory Todo(String task) { - return _$Todo._( - task: task, - complete: false, - note: '', - id: Uuid().generateV4(), - ); - } - - factory Todo.builder([void Function(TodoBuilder b) updates]) { - final builder = TodoBuilder() - ..id = Uuid().generateV4() - ..complete = false - ..note = '' - ..update(updates); - - return builder.build(); - } -} diff --git a/built_redux/lib/models/todo.g.dart b/built_redux/lib/models/todo.g.dart deleted file mode 100644 index d59bf4b1..00000000 --- a/built_redux/lib/models/todo.g.dart +++ /dev/null @@ -1,186 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of todo; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -Serializer _$todoSerializer = new _$TodoSerializer(); - -class _$TodoSerializer implements StructuredSerializer { - @override - final Iterable types = const [Todo, _$Todo]; - @override - final String wireName = 'Todo'; - - @override - Iterable serialize(Serializers serializers, Todo object, - {FullType specifiedType = FullType.unspecified}) { - final result = [ - 'complete', - serializers.serialize(object.complete, - specifiedType: const FullType(bool)), - 'id', - serializers.serialize(object.id, specifiedType: const FullType(String)), - 'note', - serializers.serialize(object.note, specifiedType: const FullType(String)), - 'task', - serializers.serialize(object.task, specifiedType: const FullType(String)), - ]; - - return result; - } - - @override - Todo deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { - final result = new TodoBuilder(); - - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current as String; - iterator.moveNext(); - final dynamic value = iterator.current; - switch (key) { - case 'complete': - result.complete = serializers.deserialize(value, - specifiedType: const FullType(bool)) as bool; - break; - case 'id': - result.id = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; - case 'note': - result.note = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; - case 'task': - result.task = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; - break; - } - } - - return result.build(); - } -} - -class _$Todo extends Todo { - @override - final bool complete; - @override - final String id; - @override - final String note; - @override - final String task; - - factory _$Todo([void Function(TodoBuilder) updates]) => - (new TodoBuilder()..update(updates)).build(); - - _$Todo._({this.complete, this.id, this.note, this.task}) : super._() { - if (complete == null) { - throw new BuiltValueNullFieldError('Todo', 'complete'); - } - if (id == null) { - throw new BuiltValueNullFieldError('Todo', 'id'); - } - if (note == null) { - throw new BuiltValueNullFieldError('Todo', 'note'); - } - if (task == null) { - throw new BuiltValueNullFieldError('Todo', 'task'); - } - } - - @override - Todo rebuild(void Function(TodoBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - TodoBuilder toBuilder() => new TodoBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is Todo && - complete == other.complete && - id == other.id && - note == other.note && - task == other.task; - } - - @override - int get hashCode { - return $jf($jc( - $jc($jc($jc(0, complete.hashCode), id.hashCode), note.hashCode), - task.hashCode)); - } - - @override - String toString() { - return (newBuiltValueToStringHelper('Todo') - ..add('complete', complete) - ..add('id', id) - ..add('note', note) - ..add('task', task)) - .toString(); - } -} - -class TodoBuilder implements Builder { - _$Todo _$v; - - bool _complete; - bool get complete => _$this._complete; - set complete(bool complete) => _$this._complete = complete; - - String _id; - String get id => _$this._id; - set id(String id) => _$this._id = id; - - String _note; - String get note => _$this._note; - set note(String note) => _$this._note = note; - - String _task; - String get task => _$this._task; - set task(String task) => _$this._task = task; - - TodoBuilder(); - - TodoBuilder get _$this { - if (_$v != null) { - _complete = _$v.complete; - _id = _$v.id; - _note = _$v.note; - _task = _$v.task; - _$v = null; - } - return this; - } - - @override - void replace(Todo other) { - if (other == null) { - throw new ArgumentError.notNull('other'); - } - _$v = other as _$Todo; - } - - @override - void update(void Function(TodoBuilder) updates) { - if (updates != null) updates(this); - } - - @override - _$Todo build() { - final _$result = - _$v ?? new _$Todo._(complete: complete, id: id, note: note, task: task); - replace(_$result); - return _$result; - } -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/models/visibility_filter.dart b/built_redux/lib/models/visibility_filter.dart deleted file mode 100644 index 04ea5508..00000000 --- a/built_redux/lib/models/visibility_filter.dart +++ /dev/null @@ -1,23 +0,0 @@ -library visibility_filter; - -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; - -part 'visibility_filter.g.dart'; - -class VisibilityFilter extends EnumClass { - static Serializer get serializer => - _$visibilityFilterSerializer; - - static const VisibilityFilter all = _$all; - static const VisibilityFilter active = _$active; - static const VisibilityFilter completed = _$completed; - - const VisibilityFilter._(String name) : super(name); - - static BuiltSet get values => _$visibilityFilterValues; - - static VisibilityFilter valueOf(String name) => - _$visibilityFilterValueOf(name); -} diff --git a/built_redux/lib/models/visibility_filter.g.dart b/built_redux/lib/models/visibility_filter.g.dart deleted file mode 100644 index d8bab605..00000000 --- a/built_redux/lib/models/visibility_filter.g.dart +++ /dev/null @@ -1,54 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of visibility_filter; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -const VisibilityFilter _$all = const VisibilityFilter._('all'); -const VisibilityFilter _$active = const VisibilityFilter._('active'); -const VisibilityFilter _$completed = const VisibilityFilter._('completed'); - -VisibilityFilter _$visibilityFilterValueOf(String name) { - switch (name) { - case 'all': - return _$all; - case 'active': - return _$active; - case 'completed': - return _$completed; - default: - throw new ArgumentError(name); - } -} - -final BuiltSet _$visibilityFilterValues = - new BuiltSet(const [ - _$all, - _$active, - _$completed, -]); - -Serializer _$visibilityFilterSerializer = - new _$VisibilityFilterSerializer(); - -class _$VisibilityFilterSerializer - implements PrimitiveSerializer { - @override - final Iterable types = const [VisibilityFilter]; - @override - final String wireName = 'VisibilityFilter'; - - @override - Object serialize(Serializers serializers, VisibilityFilter object, - {FullType specifiedType = FullType.unspecified}) => - object.name; - - @override - VisibilityFilter deserialize(Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}) => - VisibilityFilter.valueOf(serialized as String); -} - -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new diff --git a/built_redux/lib/presentation/add_edit_screen.dart b/built_redux/lib/presentation/add_edit_screen.dart deleted file mode 100644 index 63673fa3..00000000 --- a/built_redux/lib/presentation/add_edit_screen.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -typedef OnSaveCallback = void Function(String task, String note); - -class AddEditScreen extends StatefulWidget { - final bool isEditing; - final Function(String task, String note) onSave; - final Todo todo; - - AddEditScreen({ - Key key, - @required this.onSave, - @required this.isEditing, - this.todo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); - @override - _AddEditScreenState createState() => _AddEditScreenState(); -} - -class _AddEditScreenState extends State { - static final GlobalKey _formKey = GlobalKey(); - - String _task; - String _note; - - bool get isEditing => widget.isEditing; - - @override - Widget build(BuildContext context) { - final localizations = ArchSampleLocalizations.of(context); - final textTheme = Theme.of(context).textTheme; - - return Scaffold( - appBar: AppBar( - title: Text(isEditing ? localizations.editTodo : localizations.addTodo), - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: Form( - key: _formKey, - child: ListView( - children: [ - TextFormField( - initialValue: isEditing ? widget.todo.task : '', - key: ArchSampleKeys.taskField, - autofocus: !isEditing, - style: textTheme.titleLarge, - decoration: InputDecoration( - hintText: localizations.newTodoHint, - ), - validator: (val) { - return val.trim().isEmpty - ? localizations.emptyTodoError - : null; - }, - onSaved: (value) => _task = value, - ), - TextFormField( - initialValue: isEditing ? widget.todo.note : '', - key: ArchSampleKeys.noteField, - maxLines: 10, - style: textTheme.titleMedium, - decoration: InputDecoration(hintText: localizations.notesHint), - onSaved: (value) => _note = value, - ), - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - key: isEditing - ? ArchSampleKeys.saveTodoFab - : ArchSampleKeys.saveNewTodo, - tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, - child: Icon(isEditing ? Icons.check : Icons.add), - onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); - widget.onSave(_task, _note); - - Navigator.pop(context); - } - }, - ), - ); - } -} diff --git a/built_redux/lib/presentation/details_screen.dart b/built_redux/lib/presentation/details_screen.dart deleted file mode 100644 index 4f6bf41d..00000000 --- a/built_redux/lib/presentation/details_screen.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:built_redux_sample/containers/edit_todo.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class DetailsScreen extends StatelessWidget { - final Todo todo; - final Function onDelete; - final Function(bool) toggleCompleted; - - DetailsScreen({ - Key key, - @required this.todo, - @required this.onDelete, - @required this.toggleCompleted, - }) : super(key: ArchSampleKeys.todoDetailsScreen); - - @override - Widget build(BuildContext context) { - final localizations = ArchSampleLocalizations.of(context); - - return Scaffold( - appBar: AppBar( - title: Text(localizations.todoDetails), - actions: [ - IconButton( - tooltip: localizations.deleteTodo, - icon: Icon(Icons.delete), - key: ArchSampleKeys.deleteTodoButton, - onPressed: () { - onDelete(); - Navigator.pop(context, todo); - }, - ), - ], - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: ListView( - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(right: 8.0), - child: Checkbox( - key: ArchSampleKeys.detailsTodoItemCheckbox, - value: todo.complete, - onChanged: toggleCompleted, - ), - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(top: 8.0, bottom: 16.0), - child: Text( - todo.task, - key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headlineSmall, - ), - ), - Text( - todo.note, - key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.titleMedium, - ), - ], - ), - ), - ], - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.editTodoFab, - tooltip: localizations.editTodo, - child: Icon(Icons.edit), - onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return EditTodo(todo: todo); - }, - ), - ); - }, - ), - ); - } -} diff --git a/built_redux/lib/presentation/extra_actions_button.dart b/built_redux/lib/presentation/extra_actions_button.dart deleted file mode 100644 index a33fb53b..00000000 --- a/built_redux/lib/presentation/extra_actions_button.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class ExtraActionsButton extends StatelessWidget { - final PopupMenuItemSelected onSelected; - final bool allComplete; - - ExtraActionsButton({this.onSelected, this.allComplete = false, Key key}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, - onSelected: onSelected, - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.toggleAll, - value: ExtraAction.toggleAllComplete, - child: Text( - allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.clearCompleted, - value: ExtraAction.clearCompleted, - child: Text(ArchSampleLocalizations.of(context).clearCompleted), - ), - ], - ); - } -} diff --git a/built_redux/lib/presentation/filter_button.dart b/built_redux/lib/presentation/filter_button.dart deleted file mode 100644 index e9673ab5..00000000 --- a/built_redux/lib/presentation/filter_button.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class FilterButton extends StatelessWidget { - final PopupMenuItemSelected onSelected; - final VisibilityFilter activeFilter; - final bool visible; - - FilterButton({this.onSelected, this.activeFilter, this.visible, Key key}) - : super(key: key); - - @override - Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.bodyMedium; - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); - - return AnimatedOpacity( - opacity: visible ? 1.0 : 0.0, - duration: Duration(milliseconds: 150), - child: PopupMenuButton( - key: ArchSampleKeys.filterButton, - tooltip: ArchSampleLocalizations.of(context).filterTodos, - onSelected: onSelected, - itemBuilder: (BuildContext context) => - >[ - PopupMenuItem( - value: VisibilityFilter.all, - child: Text( - ArchSampleLocalizations.of(context).showAll, - key: ArchSampleKeys.allFilter, - style: activeFilter == VisibilityFilter.all - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - value: VisibilityFilter.active, - child: Text( - ArchSampleLocalizations.of(context).showActive, - key: ArchSampleKeys.activeFilter, - style: activeFilter == VisibilityFilter.active - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - value: VisibilityFilter.completed, - child: Text( - ArchSampleLocalizations.of(context).showCompleted, - key: ArchSampleKeys.completedFilter, - style: activeFilter == VisibilityFilter.completed - ? activeStyle - : defaultStyle, - ), - ), - ], - icon: Icon(Icons.filter_list), - ), - ); - } -} diff --git a/built_redux/lib/presentation/home_screen.dart b/built_redux/lib/presentation/home_screen.dart deleted file mode 100644 index 201ce4bf..00000000 --- a/built_redux/lib/presentation/home_screen.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:built_redux_sample/containers/action_selector.dart'; -import 'package:built_redux_sample/containers/active_tab.dart'; -import 'package:built_redux_sample/containers/filter_selector.dart'; -import 'package:built_redux_sample/containers/filtered_todos.dart'; -import 'package:built_redux_sample/containers/stats.dart'; -import 'package:built_redux_sample/containers/tab_selector.dart'; -import 'package:built_redux_sample/localization.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/filter_button.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class HomeScreen extends StatelessWidget { - HomeScreen({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ActiveTab( - builder: (BuildContext context, AppTab activeTab) { - return Scaffold( - appBar: AppBar( - title: Text(BuiltReduxLocalizations.of(context).appTitle), - actions: [ - FilterSelector( - builder: (context, vm) { - return FilterButton( - visible: activeTab == AppTab.todos, - activeFilter: vm.activeFilter, - onSelected: vm.onFilterSelected, - ); - }, - ), - ExtraActionSelector(), - ], - ), - body: activeTab == AppTab.todos ? FilteredTodos() : Stats(), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.addTodoFab, - onPressed: () { - Navigator.pushNamed(context, ArchSampleRoutes.addTodo); - }, - child: Icon(Icons.add), - tooltip: ArchSampleLocalizations.of(context).addTodo, - ), - bottomNavigationBar: TabSelector(), - ); - }, - ); - } -} diff --git a/built_redux/lib/presentation/stats_counter.dart b/built_redux/lib/presentation/stats_counter.dart deleted file mode 100644 index 1992b5c3..00000000 --- a/built_redux/lib/presentation/stats_counter.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:built_redux_sample/containers/app_loading.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class StatsCounter extends StatelessWidget { - final int numActive; - final int numCompleted; - - StatsCounter({@required this.numActive, @required this.numCompleted}); - - @override - Widget build(BuildContext context) { - return AppLoading( - builder: (context, loading) { - return loading - ? Center( - key: ArchSampleKeys.statsLoading, - child: CircularProgressIndicator( - key: ArchSampleKeys.statsLoading, - ), - ) - : Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numCompleted', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '$numActive', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ], - ), - ); - }, - ); - } -} diff --git a/built_redux/lib/presentation/todo_item.dart b/built_redux/lib/presentation/todo_item.dart deleted file mode 100644 index 94bbc852..00000000 --- a/built_redux/lib/presentation/todo_item.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:built_redux_sample/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class TodoItem extends StatelessWidget { - final DismissDirectionCallback onDismissed; - final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; - final Todo todo; - - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, - }) : super(key: ArchSampleKeys.todoItem(todo.id)); - - @override - Widget build(BuildContext context) { - return Dismissible( - key: Key(todo.id), - onDismissed: onDismissed, - child: ListTile( - onTap: onTap, - leading: Checkbox( - key: ArchSampleKeys.todoItemCheckbox(todo.id), - value: todo.complete, - onChanged: onCheckboxChanged, - ), - title: Text( - todo.task, - key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.titleLarge, - ), - subtitle: Text( - todo.note, - key: ArchSampleKeys.todoItemNote(todo.id), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ); - } -} diff --git a/built_redux/lib/presentation/todo_list.dart b/built_redux/lib/presentation/todo_list.dart deleted file mode 100644 index 90bef287..00000000 --- a/built_redux/lib/presentation/todo_list.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:built_redux_sample/containers/app_loading.dart'; -import 'package:built_redux_sample/containers/todo_details.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/presentation/todo_item.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class TodoList extends StatelessWidget { - final List todos; - final Function(Todo, bool) onCheckboxChanged; - final Function(Todo) onRemove; - final Function(Todo) onUndoRemove; - - TodoList({ - @required this.todos, - @required this.onCheckboxChanged, - @required this.onRemove, - @required this.onUndoRemove, - }) : super(key: ArchSampleKeys.todoList); - - @override - Widget build(BuildContext context) { - return AppLoading( - builder: (context, loading) { - return loading - ? Center( - key: ArchSampleKeys.todosLoading, - child: CircularProgressIndicator( - key: ArchSampleKeys.statsLoading, - ), - ) - : Container( - child: ListView.builder( - key: ArchSampleKeys.todoList, - itemCount: todos.length, - itemBuilder: (BuildContext context, int index) { - final todo = todos[index]; - - return TodoItem( - todo: todo, - onDismissed: (direction) { - _removeTodo(context, todo); - }, - onTap: () => _onTodoTap(context, todo), - onCheckboxChanged: (complete) { - onCheckboxChanged(todo, complete); - }, - ); - }, - ), - ); - }, - ); - } - - void _removeTodo(BuildContext context, Todo todo) { - onRemove(todo); - - Scaffold.of(context).showSnackBar( - SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () => onUndoRemove(todo), - ), - ), - ); - } - - void _onTodoTap(BuildContext context, Todo todo) { - Navigator.of(context) - .push( - MaterialPageRoute( - builder: (_) { - return TodoDetails(id: todo.id); - }, - ), - ) - .then((removedTodo) { - if (removedTodo != null) { - Scaffold.of(context).showSnackBar( - SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - onUndoRemove(todo); - }, - ), - ), - ); - } - }); - } -} diff --git a/built_redux/lib/reducers/reducers.dart b/built_redux/lib/reducers/reducers.dart deleted file mode 100644 index 20e78c2e..00000000 --- a/built_redux/lib/reducers/reducers.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'package:built_redux/built_redux.dart'; -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; - -var reducerBuilder = ReducerBuilder() - ..add(AppActionsNames.addTodoAction, addTodo) - ..add(AppActionsNames.clearCompletedAction, clearCompleted) - ..add(AppActionsNames.deleteTodoAction, deleteTodo) - ..add(AppActionsNames.toggleAllAction, toggleAll) - ..add(AppActionsNames.updateFilterAction, updateFilter) - ..add(AppActionsNames.updateTabAction, updateTab) - ..add(AppActionsNames.updateTodoAction, updateTodo) - ..add(AppActionsNames.loadTodosSuccess, todosLoaded) - ..add(AppActionsNames.loadTodosFailure, todosLoadFailed); - -void addTodo(AppState state, Action action, AppStateBuilder builder) { - builder.todos.add(action.payload); -} - -void clearCompleted( - AppState state, - Action action, - AppStateBuilder builder, -) { - builder.todos.where((todo) => !todo.complete); -} - -void deleteTodo( - AppState state, - Action action, - AppStateBuilder builder, -) { - builder.todos.where((todo) => todo.id != action.payload); -} - -void toggleAll(AppState state, Action action, AppStateBuilder builder) { - final allComplete = state.allCompleteSelector; - builder.todos.map((todo) => todo.rebuild((b) => b..complete = !allComplete)); -} - -void updateFilter( - AppState state, - Action action, - AppStateBuilder builder, -) { - builder.activeFilter = action.payload; -} - -void updateTab(AppState state, Action action, AppStateBuilder builder) { - builder.activeTab = action.payload; -} - -void todosLoaded( - AppState state, - Action> action, - AppStateBuilder builder, -) { - builder - ..isLoading = false - ..todos.addAll(action.payload); -} - -void todosLoadFailed( - AppState state, - Action action, - AppStateBuilder builder, -) { - builder - ..isLoading = false - ..todos.clear(); -} - -void updateTodo( - AppState state, - Action action, - AppStateBuilder builder, -) { - builder.todos.map( - (todo) => todo.id == action.payload.id ? action.payload.updatedTodo : todo, - ); -} diff --git a/built_redux/pubspec.yaml b/built_redux/pubspec.yaml deleted file mode 100644 index b0159388..00000000 --- a/built_redux/pubspec.yaml +++ /dev/null @@ -1,83 +0,0 @@ -name: built_redux_sample -description: A new Flutter project. - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.1.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - flutter_built_redux: - built_redux: - built_value: - built_collection: - todos_app_core: - path: ../todos_app_core - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_driver: - sdk: flutter - test: - build: - build_runner: - built_value_generator: - source_gen: - mockito: - integration_tests: - path: ../integration_tests - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/built_redux/test/all_tests.dart b/built_redux/test/all_tests.dart deleted file mode 100644 index 45d9ff51..00000000 --- a/built_redux/test/all_tests.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'app_state_test.dart' as app_state; -import 'file_storage_test.dart' as file_storage; -import 'middleware_test.dart' as middleware; -import 'reducer_test.dart' as reducer; -import 'todos_repository_test.dart' as todos_repository; - -void main() { - app_state.main(); - file_storage.main(); - middleware.main(); - reducer.main(); - todos_repository.main(); -} diff --git a/built_redux/test/app_state_test.dart b/built_redux/test/app_state_test.dart deleted file mode 100644 index d15ec93d..00000000 --- a/built_redux/test/app_state_test.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:built_redux_sample/models/models.dart'; -import 'package:test/test.dart'; - -void main() { - group('Selector Tests', () { - test('should calculate the number of active todos', () { - final state = AppState.fromTodos([ - Todo('a'), - Todo('b'), - Todo.builder( - (b) => b - ..task = 'c' - ..complete = true, - ), - ]); - - expect(state.numActiveSelector, 2); - }); - - test('should calculate the number of completed todos', () { - final state = AppState.fromTodos([ - Todo('a'), - Todo('b'), - Todo.builder( - (b) => b - ..task = 'c' - ..complete = true, - ), - ]); - - expect(state.numCompletedSelector, 1); - }); - - test('should return all todos if the VisibilityFilter is all', () { - final todos = [ - Todo('a'), - Todo('b'), - Todo.builder( - (b) => b - ..task = 'c' - ..complete = true, - ), - ]; - final state = AppState.fromTodos(todos); - expect(state.activeFilter, VisibilityFilter.all); - expect(state.filteredTodosSelector, todos); - }); - - test('should return active todos if the VisibilityFilter is active', () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo.builder( - (b) => b - ..task = 'c' - ..complete = true, - ); - final todos = [todo1, todo2, todo3]; - final state = AppState.fromTodos( - todos, - ).rebuild((b) => b.activeFilter = VisibilityFilter.active); - - expect(state.filteredTodosSelector, [todo1, todo2]); - }); - - test( - 'should return completed todos if the VisibilityFilter is completed', - () { - final todo1 = Todo('a'); - final todo2 = Todo('b'); - final todo3 = Todo.builder( - (b) => b - ..task = 'c' - ..complete = true, - ); - final todos = [todo1, todo2, todo3]; - final state = AppState.fromTodos( - todos, - ).rebuild((b) => b.activeFilter = VisibilityFilter.completed); - - expect(state.filteredTodosSelector, [todo3]); - }, - ); - }); -} diff --git a/built_redux/test/file_storage_test.dart b/built_redux/test/file_storage_test.dart deleted file mode 100644 index 5f88733c..00000000 --- a/built_redux/test/file_storage_test.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'dart:io'; - -import 'package:built_redux_sample/data/file_storage.dart'; -import 'package:built_redux_sample/models/todo.dart'; -import 'package:test/test.dart'; - -void main() { - group('FileStorage', () { - final todos = [Todo('Yep')]; - final directory = Directory.systemTemp.createTemp('__storage_test__'); - final storage = FileStorage('_test_tag_', () => directory); - - tearDownAll(() async { - final tempDirectory = await directory; - - tempDirectory.deleteSync(recursive: true); - }); - - test('Should persist TodoEntities to disk', () async { - final file = await storage.saveTodos(todos); - - expect(file.existsSync(), isTrue); - }); - - test('Should load TodoEntities from disk', () async { - final loadedTodos = await storage.loadTodos(); - - expect(loadedTodos, todos); - }); - }); -} diff --git a/built_redux/test/middleware_test.dart b/built_redux/test/middleware_test.dart deleted file mode 100644 index f934669e..00000000 --- a/built_redux/test/middleware_test.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'dart:async'; - -import 'package:built_redux/built_redux.dart'; -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/data/todos_repository.dart'; -import 'package:built_redux_sample/middleware/store_todos_middleware.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/reducers/reducers.dart'; -import 'package:mockito/mockito.dart'; -import 'package:test/test.dart'; - -/// We create two Mocks for our Web Service and File Storage. We will use these -/// mock classes to verify the behavior of the TodosService. -class MockTodosService extends Mock implements TodosRepository {} - -void main() { - group('TodosMiddleware', () { - test( - 'should load todos when the app dispatches a fetch action and the app is loading', - () { - final service = MockTodosService(); - final middleware = createStoreTodosMiddleware(service); - final store = Store( - reducerBuilder.build(), - AppState.loading(), - AppActions(), - middleware: [middleware], - ); - final todos = [Todo('Task')]; - - // We'll use our mock throughout the tests to set certain conditions. In - // this first test, we want to mock out our file storage to return a - // list of Todos that we define here in our test! - when(service.loadTodos()).thenAnswer((_) => Future.value(todos)); - - store.actions.fetchTodosAction(); - - verify(service.loadTodos()); - }, - ); - - test( - 'should not load todos when the app dispatches a fetch action and the app is not loading', - () { - final service = MockTodosService(); - final middleware = createStoreTodosMiddleware(service); - final store = Store( - reducerBuilder.build(), - AppState(), - AppActions(), - middleware: [middleware], - ); - final todos = [Todo('Task')]; - - // We'll use our mock throughout the tests to set certain conditions. In - // this first test, we want to mock out our file storage to return a - // list of Todos that we define here in our test! - when(service.loadTodos()).thenAnswer((_) => Future.value(todos)); - - store.actions.fetchTodosAction(); - - verifyNever(service.loadTodos()); - }, - ); - - test('should save todos on all action that update the todo', () { - final service = MockTodosService(); - final middleware = createStoreTodosMiddleware(service); - final store = Store( - reducerBuilder.build(), - AppState(), - AppActions(), - middleware: [middleware], - ); - final todos = [Todo('Task')]; - - when(service.saveTodos(todos)).thenAnswer((_) => Future.value(todos)); - - // Dispatch all actions that update our Todos. We expect each to - // trigger a call to our Storage Service. - store.actions.addTodoAction(Todo('Wat')); - store.actions.clearCompletedAction(); - store.actions.deleteTodoAction(''); - store.actions.toggleAllAction(); - store.actions.updateTodoAction( - UpdateTodoActionPayload('', Todo('Update')), - ); - - verify(service.saveTodos(any)).called(5); - }); - }); -} diff --git a/built_redux/test/reducer_test.dart b/built_redux/test/reducer_test.dart deleted file mode 100644 index 71038cd9..00000000 --- a/built_redux/test/reducer_test.dart +++ /dev/null @@ -1,142 +0,0 @@ -import 'package:built_redux/built_redux.dart'; -import 'package:built_redux_sample/actions/actions.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:built_redux_sample/reducers/reducers.dart'; -import 'package:test/test.dart'; - -void main() { - group('State Reducer', () { - test('should add a todo to the list in response to an AddTodoAction', () { - final todo = Todo('Hallo'); - final store = Store( - reducerBuilder.build(), - AppState(), - AppActions(), - ); - - store.actions.addTodoAction(todo); - - expect(store.state.todos, [todo]); - }); - - test('should remove from the list in response to a DeleteTodoAction', () { - final todo = Todo('Hallo'); - final store = Store( - reducerBuilder.build(), - AppState.fromTodos([todo]), - AppActions(), - ); - - expect(store.state.todos, [todo]); - - store.actions.deleteTodoAction(todo.id); - - expect(store.state.todos, []); - }); - - test('should update a todo in response to an UpdateTodoAction', () { - final todo = Todo('Hallo'); - final updatedTodo = todo.rebuild((b) => b.task = 'Tschuss'); - final store = Store( - reducerBuilder.build(), - AppState.fromTodos([todo]), - AppActions(), - ); - - store.actions.updateTodoAction( - UpdateTodoActionPayload(todo.id, updatedTodo), - ); - - expect(store.state.todos, [updatedTodo]); - }); - - test('should clear completed todos', () { - final todo1 = Todo('Hallo'); - final todo2 = Todo.builder( - (b) => b - ..task = 'Tschüss' - ..complete = true, - ); - final store = Store( - reducerBuilder.build(), - AppState.fromTodos([todo1, todo2]), - AppActions(), - ); - - expect(store.state.todos, [todo1, todo2]); - - store.actions.clearCompletedAction(); - - expect(store.state.todos, [todo1]); - }); - - test('should mark all as completed if some todos are incomplete', () { - final todo1 = Todo('Hallo'); - final todo2 = Todo.builder( - (b) => b - ..task = 'Tschüss' - ..complete = true, - ); - final store = Store( - reducerBuilder.build(), - AppState.fromTodos([todo1, todo2]), - AppActions(), - ); - - expect(store.state.todos, [todo1, todo2]); - - store.actions.toggleAllAction(); - - expect(store.state.allCompleteSelector, isTrue); - }); - - test('should mark all as incomplete if all todos are complete', () { - final todo1 = Todo.builder( - (b) => b - ..task = 'Hallo' - ..complete = true, - ); - final todo2 = Todo.builder( - (b) => b - ..task = 'Tschüss' - ..complete = true, - ); - final store = Store( - reducerBuilder.build(), - AppState.fromTodos([todo1, todo2]), - AppActions(), - ); - - expect(store.state.todos, [todo1, todo2]); - - store.actions.toggleAllAction(); - - expect(store.state.allCompleteSelector, isFalse); - expect(store.state.todos.every((todo) => !todo.complete), isTrue); - }); - - test('should update the VisibilityFilter', () { - final store = Store( - reducerBuilder.build(), - AppState(), - AppActions(), - ); - - store.actions.updateFilterAction(VisibilityFilter.completed); - - expect(store.state.activeFilter, VisibilityFilter.completed); - }); - - test('should update the AppTab', () { - final store = Store( - reducerBuilder.build(), - AppState(), - AppActions(), - ); - - store.actions.updateTabAction(AppTab.stats); - - expect(store.state.activeTab, AppTab.stats); - }); - }); -} diff --git a/built_redux/test/todos_repository_test.dart b/built_redux/test/todos_repository_test.dart deleted file mode 100644 index bf12368e..00000000 --- a/built_redux/test/todos_repository_test.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'dart:async'; - -import 'package:built_redux_sample/data/file_storage.dart'; -import 'package:built_redux_sample/data/todos_repository.dart'; -import 'package:built_redux_sample/data/web_client.dart'; -import 'package:built_redux_sample/models/models.dart'; -import 'package:mockito/mockito.dart'; -import 'package:test/test.dart'; - -/// We create two Mocks for our Web Service and File Storage. We will use these -/// mock classes to verify the behavior of the TodosService. -class MockFileStorage extends Mock implements FileStorage {} - -class MockWebService extends Mock implements WebClient {} - -void main() { - group('TodosRepository', () { - test( - 'should load todos from File Storage if they exist without calling the web service', - () { - final fileStorage = MockFileStorage(); - final webService = MockWebService(); - final todosService = TodosRepository( - fileStorage: fileStorage, - webClient: webService, - ); - final todos = [Todo('Task')]; - - // We'll use our mock throughout the tests to set certain conditions. In - // this first test, we want to mock out our file storage to return a - // list of Todos that we define here in our test! - when(fileStorage.loadTodos()).thenAnswer((_) => Future.value(todos)); - - expect(todosService.loadTodos(), completion(todos)); - verifyNever(webService.fetchTodos()); - }, - ); - - test( - 'should fetch todos from the Web Service if the file storage throws a synchronous error', - () async { - final fileStorage = MockFileStorage(); - final webService = MockWebService(); - final todosService = TodosRepository( - fileStorage: fileStorage, - webClient: webService, - ); - final todos = [Todo('Task')]; - - // In this instance, we'll ask our Mock to throw an error. When it does, - // we expect the web service to be called instead. - when( - fileStorage.loadTodos(), - ).thenAnswer((_) => Future>.error('Oh no')); - when(webService.fetchTodos()).thenAnswer((_) => Future.value(todos)); - - // We check that the correct todos were returned, and that the - // webService.fetchTodos method was in fact called! - expect(await todosService.loadTodos(), todos); - verify(webService.fetchTodos()); - }, - ); - - test( - 'should fetch todos from the Web Service if the File storage returns an async error', - () async { - final fileStorage = MockFileStorage(); - final webService = MockWebService(); - final todosService = TodosRepository( - fileStorage: fileStorage, - webClient: webService, - ); - final todos = [Todo('Task')]; - - when( - fileStorage.loadTodos(), - ).thenAnswer((_) => Future>.error('Oh no')); - when(webService.fetchTodos()).thenAnswer((_) => Future.value(todos)); - - expect(await todosService.loadTodos(), todos); - verify(webService.fetchTodos()); - }, - ); - - test('should persist the todos to local disk and the web service', () { - final fileStorage = MockFileStorage(); - final webService = MockWebService(); - final todosService = TodosRepository( - fileStorage: fileStorage, - webClient: webService, - ); - final todos = [Todo('Task')]; - - when(fileStorage.saveTodos(todos)).thenAnswer((_) async => null); - when(webService.postTodos(todos)).thenAnswer((_) async => true); - - // In this case, we just want to verify we're correctly persisting to all - // the storage mechanisms we care about. - expect(todosService.saveTodos(todos), completes); - verify(fileStorage.saveTodos(todos)); - verify(webService.postTodos(todos)); - }); - }); -} diff --git a/built_redux/test_driver/todo_app.dart b/built_redux/test_driver/todo_app.dart deleted file mode 100644 index 6b4e27cb..00000000 --- a/built_redux/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:built_redux_sample/main.dart' as app; -import 'package:flutter_driver/driver_extension.dart'; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/built_redux/test_driver/todo_app_test.dart b/built_redux/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/built_redux/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/mobx/lib/home/filter_button.dart b/mobx/lib/home/filter_button.dart index e5174295..9958758e 100644 --- a/mobx/lib/home/filter_button.dart +++ b/mobx/lib/home/filter_button.dart @@ -38,10 +38,10 @@ class FilterButton extends StatelessWidget { BuildContext context, TodoStore store, ) { - final activeStyle = Theme.of(context).textTheme.bodyMedium?.copyWith( + final defaultStyle = Theme.of(context).textTheme.bodyMedium; + final activeStyle = defaultStyle?.copyWith( color: Theme.of(context).colorScheme.secondary, ); - final defaultStyle = Theme.of(context).textTheme.bodyMedium; return [ PopupMenuItem( diff --git a/states_rebuilder/.gitignore b/states_rebuilder/.gitignore deleted file mode 100644 index ae1f1838..00000000 --- a/states_rebuilder/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Web related -lib/generated_plugin_registrant.dart - -# Exceptions to above rules. -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/states_rebuilder/.metadata b/states_rebuilder/.metadata deleted file mode 100644 index b869ae45..00000000 --- a/states_rebuilder/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 659dc8129d4edb9166e9a0d600439d135740933f - channel: dev - -project_type: app diff --git a/states_rebuilder/.vscode/settings.json b/states_rebuilder/.vscode/settings.json deleted file mode 100644 index eae28263..00000000 --- a/states_rebuilder/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "cSpell.words": [ - "todos" - ] -} \ No newline at end of file diff --git a/states_rebuilder/README.md b/states_rebuilder/README.md deleted file mode 100644 index 7b65b4b4..00000000 --- a/states_rebuilder/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# states_rebuilder_sample - -This sample is an implementation of the todoMVC app using `states_rebuilder` package as a state management technique. - -For more information and tutorials on how states_rebuilder work please check out the [official documentation](https://github.com/GIfatahTH/states_rebuilder). - -# key concepts of the architecture - -* The app is divided into there layers in the form of onion layers : the innermost is Domain, the middle is Service, and the outer layer for UI and external services which has three parts (UI, data_source, and infrastructure). - -The folders structure is : - -```lib - - |-domain - | |-entities - | |-exceptions - |-service (application service) - | |-interfaces (to be implemented by data_source) - | |-exceptions - | |-common - |-data_source - |-ui - | |-pages - | |-exceptions (handle exception) - | |-common -``` - -## domain -Contains enterprise wide business logic. It encapsulates entities, value_objects, exceptions. In case of todoMVC we need one entity `Todo`. - -* Entity is a mutable object with an ID. It should contain all the logic It controls. Entity is validated just before persistance, ie, in toMap() method. - -* Domain objects must throw exceptions defined in the exception folders: - -## service -Contains service application use cases business logic. It defines a set of API to be consumed by the outer layer (UI and infrastructure). -* Service layer defines a set of interfaces, outer layer (data_source and infrastructure) must implement. - -* Service objects must throw exceptions defined in the exception folder in the service layer: - - ->Domain and Service layer are the core portable part of your app. It does not depend on any concrete implementation of external service (data_source) and can be share a cross many UI frameworks. - - -# key concepts of states_rebuilder - -1. With states_rebuilder you can achieve a clear separation between UI and business logic; -2. Your business logic is made up of pure dart classes without the need to refer to external packages or frameworks (NO extension, NO notification, NO annotation); -```dart -class Foo { - //Vanilla dart class - //NO inheritance form external libraries - //NO notification - //No annotation -} -``` -3. You make a singleton of your logical class available to the widget tree by injecting it using the Injector widget. -```dart -Injector( - inject : [Inject(()=>Foo())] - builder : (context) => MyChildWidget() -) -``` -Injector is a StatefulWidget. It can be used any where in the widget tree. -4. From any child widget of the Injector widget, you can get the registered raw singleton using the static method `Injector.get()` method; -```dart -final Foo foo = Injector.get(); -``` -5. To get the registered singleton wrapped with a reactive environment, you use the static method -`Injector.getAsReactive()` method: -```dart -final ReactiveModel foo = Injector.getAsReactive(); -``` -In fact, for each injected model, states_rebuilder registers two singletons: -- The raw singleton of the model -- The reactive singleton of the model which is the raw singleton wrapped with a reactive environment: -The reactive environment adds getters, fields, and methods to modify the state, track the state of the reactive environment and notify the widgets which are subscribed to it. -6. To subscribe a widget as observer, we use `StateBuilder` widget or define the context parameter in `Injector.getAsReactive(context:context)`. -7. The `setState` method is where actions that mutate the state and send notifications are defined. -What happens is that from the user interface, we use the `setState` method to mutate the state and notify subscribed widgets after the state mutation. In the `setState`, we can define a callback for all the side effects to be executed after the state change and just before rebuilding subscribed widgets using `onSetState`, `onData` and `onError` parameter(or `onRebuild` so that the code executes after the reconstruction). From inside `onSetState`, we can call another `setState` to mutate the state and notify the user interface with another call `onSetState` (`onRebuild`) and so on … - -For more information and tutorials on how states_rebuilder work please check out the [official documentation](https://github.com/GIfatahTH/states_rebuilder). \ No newline at end of file diff --git a/states_rebuilder/android/.gitignore b/states_rebuilder/android/.gitignore deleted file mode 100644 index bc2100d8..00000000 --- a/states_rebuilder/android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java diff --git a/states_rebuilder/android/app/build.gradle b/states_rebuilder/android/app/build.gradle deleted file mode 100644 index 7412815e..00000000 --- a/states_rebuilder/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.states_rebuilder_sample" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/states_rebuilder/android/app/src/debug/AndroidManifest.xml b/states_rebuilder/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index fc323d3f..00000000 --- a/states_rebuilder/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/states_rebuilder/android/app/src/main/AndroidManifest.xml b/states_rebuilder/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 6c2ada0f..00000000 --- a/states_rebuilder/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - diff --git a/states_rebuilder/android/app/src/main/kotlin/com/example/states_rebuilder_sample/MainActivity.kt b/states_rebuilder/android/app/src/main/kotlin/com/example/states_rebuilder_sample/MainActivity.kt deleted file mode 100644 index 71069cbf..00000000 --- a/states_rebuilder/android/app/src/main/kotlin/com/example/states_rebuilder_sample/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.states_rebuilder_sample - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/states_rebuilder/android/app/src/main/res/drawable/launch_background.xml b/states_rebuilder/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f8..00000000 --- a/states_rebuilder/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/states_rebuilder/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/states_rebuilder/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/states_rebuilder/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/states_rebuilder/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/states_rebuilder/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/states_rebuilder/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/states_rebuilder/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/states_rebuilder/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb28e45604e46eeda8dd24651419bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/states_rebuilder/android/app/src/main/res/values/styles.xml b/states_rebuilder/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 00fa4417..00000000 --- a/states_rebuilder/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/states_rebuilder/android/app/src/profile/AndroidManifest.xml b/states_rebuilder/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index fc323d3f..00000000 --- a/states_rebuilder/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/states_rebuilder/android/build.gradle b/states_rebuilder/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/states_rebuilder/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/states_rebuilder/android/gradle.properties b/states_rebuilder/android/gradle.properties deleted file mode 100644 index 38c8d454..00000000 --- a/states_rebuilder/android/gradle.properties +++ /dev/null @@ -1,4 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true -android.useAndroidX=true -android.enableJetifier=true diff --git a/states_rebuilder/android/gradle/wrapper/gradle-wrapper.properties b/states_rebuilder/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 296b146b..00000000 --- a/states_rebuilder/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/states_rebuilder/android/settings.gradle b/states_rebuilder/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/states_rebuilder/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/states_rebuilder/ios/.gitignore b/states_rebuilder/ios/.gitignore deleted file mode 100644 index e96ef602..00000000 --- a/states_rebuilder/ios/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/states_rebuilder/ios/Flutter/AppFrameworkInfo.plist b/states_rebuilder/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 6b4c0f78..00000000 --- a/states_rebuilder/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/states_rebuilder/ios/Flutter/Debug.xcconfig b/states_rebuilder/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee8..00000000 --- a/states_rebuilder/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/states_rebuilder/ios/Flutter/Release.xcconfig b/states_rebuilder/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee8..00000000 --- a/states_rebuilder/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/states_rebuilder/ios/Runner.xcodeproj/project.pbxproj b/states_rebuilder/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 1c6a7621..00000000 --- a/states_rebuilder/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,518 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B80C3931E831B6300D905FE /* App.framework */, - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.statesRebuilderSample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.statesRebuilderSample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.statesRebuilderSample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/states_rebuilder/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/states_rebuilder/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/states_rebuilder/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/states_rebuilder/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/states_rebuilder/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index a28140cf..00000000 --- a/states_rebuilder/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/states_rebuilder/ios/Runner.xcworkspace/contents.xcworkspacedata b/states_rebuilder/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a16..00000000 --- a/states_rebuilder/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/states_rebuilder/ios/Runner/AppDelegate.swift b/states_rebuilder/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4a..00000000 --- a/states_rebuilder/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fab..00000000 --- a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10932 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 diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0bca859a3f474b03065bef75ba58a9e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7edb86cdfe0d15b4b0d98334a86163658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 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 diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5cee1c98386d13b17e89f719e83555b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831 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 diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/states_rebuilder/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725b..00000000 --- a/states_rebuilder/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -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. \ No newline at end of file diff --git a/states_rebuilder/ios/Runner/Base.lproj/LaunchScreen.storyboard b/states_rebuilder/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c7..00000000 --- a/states_rebuilder/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/states_rebuilder/ios/Runner/Base.lproj/Main.storyboard b/states_rebuilder/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c28516..00000000 --- a/states_rebuilder/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/states_rebuilder/ios/Runner/Info.plist b/states_rebuilder/ios/Runner/Info.plist deleted file mode 100644 index ca212ede..00000000 --- a/states_rebuilder/ios/Runner/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - states_rebuilder_sample - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/states_rebuilder/ios/Runner/Runner-Bridging-Header.h b/states_rebuilder/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a56..00000000 --- a/states_rebuilder/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/states_rebuilder/lib/app.dart b/states_rebuilder/lib/app.dart deleted file mode 100644 index 83ea8fcb..00000000 --- a/states_rebuilder/lib/app.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'data_source/todo_repository.dart'; -import 'localization.dart'; -import 'service/todos_service.dart'; -import 'ui/pages/add_edit_screen.dart/add_edit_screen.dart'; -import 'ui/pages/home_screen/home_screen.dart'; - -class StatesRebuilderApp extends StatelessWidget { - final StatesBuilderTodosRepository repository; - - const StatesRebuilderApp({Key key, this.repository}) : super(key: key); - - @override - Widget build(BuildContext context) { - //Injecting the TodoService globally before MaterialApp widget. - //It will be available throughout all the widget tree even after navigation. - return Injector( - inject: [Inject(() => TodosService(repository))], - builder: (_) => MaterialApp( - title: StatesRebuilderLocalizations().appTitle, - theme: ArchSampleTheme.theme, - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - StatesRebuilderLocalizationsDelegate(), - ], - routes: { - ArchSampleRoutes.home: (context) => HomeScreen(), - ArchSampleRoutes.addTodo: (context) => AddEditPage(), - }, - ), - ); - } -} diff --git a/states_rebuilder/lib/data_source/todo_repository.dart b/states_rebuilder/lib/data_source/todo_repository.dart deleted file mode 100644 index d215055e..00000000 --- a/states_rebuilder/lib/data_source/todo_repository.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:todos_repository_core/src/todo_entity.dart'; -import 'package:todos_repository_core/src/todos_repository.dart' as core; -import '../domain/entities/todo.dart'; -import '../service/exceptions/persistance_exception.dart'; -import '../service/interfaces/i_todo_repository.dart'; - -class StatesBuilderTodosRepository implements ITodosRepository { - final core.TodosRepository _todosRepository; - - StatesBuilderTodosRepository({core.TodosRepository todosRepository}) - : _todosRepository = todosRepository; - - @override - Future> loadTodos() async { - try { - final todoEntities = await _todosRepository.loadTodos(); - var todos = []; - for (var todoEntity in todoEntities) { - todos.add( - Todo.fromJson(todoEntity.toJson()), - ); - } - return todos; - } catch (e) { - throw PersistanceException('There is a problem in loading todos : $e'); - } - } - - @override - Future saveTodos(List todos) { - try { - var todosEntities = []; - for (var todo in todos) { - todosEntities.add(TodoEntity.fromJson(todo.toJson())); - } - - return _todosRepository.saveTodos(todosEntities); - } catch (e) { - throw PersistanceException('There is a problem in saving todos : $e'); - } - } -} diff --git a/states_rebuilder/lib/domain/entities/todo.dart b/states_rebuilder/lib/domain/entities/todo.dart deleted file mode 100644 index c149058b..00000000 --- a/states_rebuilder/lib/domain/entities/todo.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:todos_app_core/todos_app_core.dart' as flutter_arch_sample_app; - -import '../exceptions/validation_exception.dart'; - -//Entity is a mutable object with an ID. It should contain all the logic It controls. -//Entity is validated just before persistance, ie, in toMap() method. -class Todo { - String id; - bool complete; - String note; - String task; - - Todo(this.task, {String id, this.note, this.complete = false}) - : id = id ?? flutter_arch_sample_app.Uuid().generateV4(); - - Todo.fromJson(Map map) { - id = map['id'] as String; - task = map['task'] as String; - note = map['note'] as String; - complete = map['complete'] as bool; - } - - // toJson is called just before persistance. - Map toJson() { - _validation(); - return { - 'complete': complete, - 'task': task, - 'note': note, - 'id': id, - }; - } - - void _validation() { - if (id == null) { - // Custom defined error classes - throw ValidationException('This todo has no ID!'); - } - if (task == null || task.isEmpty) { - throw ValidationException('Empty task are not allowed'); - } - } - - @override - int get hashCode => id.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is Todo && runtimeType == other.runtimeType && id == other.id; -} diff --git a/states_rebuilder/lib/domain/exceptions/validation_exception.dart b/states_rebuilder/lib/domain/exceptions/validation_exception.dart deleted file mode 100644 index e348fcd7..00000000 --- a/states_rebuilder/lib/domain/exceptions/validation_exception.dart +++ /dev/null @@ -1,5 +0,0 @@ -class ValidationException extends Error { - final String message; - - ValidationException(this.message); -} diff --git a/states_rebuilder/lib/localization.dart b/states_rebuilder/lib/localization.dart deleted file mode 100644 index 94596802..00000000 --- a/states_rebuilder/lib/localization.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -class StatesRebuilderLocalizations { - static StatesRebuilderLocalizations of(BuildContext context) { - return Localizations.of( - context, - StatesRebuilderLocalizations, - ); - } - - String get appTitle => 'States_rebuilder Example'; -} - -class StatesRebuilderLocalizationsDelegate - extends LocalizationsDelegate { - @override - Future load(Locale locale) => - Future(() => StatesRebuilderLocalizations()); - - @override - bool shouldReload(StatesRebuilderLocalizationsDelegate old) => false; - - @override - bool isSupported(Locale locale) => - locale.languageCode.toLowerCase().contains('en'); -} diff --git a/states_rebuilder/lib/main.dart b/states_rebuilder/lib/main.dart deleted file mode 100644 index a5d2b66c..00000000 --- a/states_rebuilder/lib/main.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -import 'app.dart'; -import 'data_source/todo_repository.dart'; - -void main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - StatesRebuilderApp( - repository: StatesBuilderTodosRepository( - todosRepository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'states_rebuilder', - FlutterKeyValueStore(await SharedPreferences.getInstance()), - ), - ), - ), - ), - ); -} diff --git a/states_rebuilder/lib/main_web.dart b/states_rebuilder/lib/main_web.dart deleted file mode 100644 index fa9bdf39..00000000 --- a/states_rebuilder/lib/main_web.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'dart:html'; - -import 'package:flutter/material.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -import 'app.dart'; -import 'data_source/todo_repository.dart'; - -void main() async { - WidgetsFlutterBinding.ensureInitialized(); - runApp( - StatesRebuilderApp( - repository: StatesBuilderTodosRepository( - todosRepository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'states_rebuilder', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ), - ); -} diff --git a/states_rebuilder/lib/service/common/enums.dart b/states_rebuilder/lib/service/common/enums.dart deleted file mode 100644 index d2d209fc..00000000 --- a/states_rebuilder/lib/service/common/enums.dart +++ /dev/null @@ -1,3 +0,0 @@ -enum VisibilityFilter { all, active, completed } - -//NOTE that `AppTab` and `ExtraAction` are not used here. They will be declared in the UI layer. diff --git a/states_rebuilder/lib/service/exceptions/persistance_exception.dart b/states_rebuilder/lib/service/exceptions/persistance_exception.dart deleted file mode 100644 index fdc86d9e..00000000 --- a/states_rebuilder/lib/service/exceptions/persistance_exception.dart +++ /dev/null @@ -1,5 +0,0 @@ -class PersistanceException extends Error { - final String message; - - PersistanceException(this.message); -} diff --git a/states_rebuilder/lib/service/interfaces/i_todo_repository.dart b/states_rebuilder/lib/service/interfaces/i_todo_repository.dart deleted file mode 100644 index 861b0d4d..00000000 --- a/states_rebuilder/lib/service/interfaces/i_todo_repository.dart +++ /dev/null @@ -1,8 +0,0 @@ -import '../../domain/entities/todo.dart'; - -abstract class ITodosRepository { - /// Loads todos - Future> loadTodos(); - // Persists todos to local disk and the web - Future saveTodos(List todos); -} diff --git a/states_rebuilder/lib/service/todos_service.dart b/states_rebuilder/lib/service/todos_service.dart deleted file mode 100644 index 49d80081..00000000 --- a/states_rebuilder/lib/service/todos_service.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:states_rebuilder_sample/domain/entities/todo.dart'; - -import 'common/enums.dart'; -import 'interfaces/i_todo_repository.dart'; - -//`TodosService` is a pure dart class that can be easily tested (see test folder). - -class TodosService { - //Constructor injection of the ITodoRepository abstract class. - TodosService(ITodosRepository todoRepository) - : _todoRepository = todoRepository; - - //private fields - final ITodosRepository _todoRepository; - List _todos = const []; - - //public field - VisibilityFilter activeFilter = VisibilityFilter.all; - - //getters - List get todos { - if (activeFilter == VisibilityFilter.active) { - return _activeTodos; - } - if (activeFilter == VisibilityFilter.completed) { - return _completedTodos; - } - return _todos; - } - - List get _completedTodos => _todos.where((t) => t.complete).toList(); - List get _activeTodos => _todos.where((t) => !t.complete).toList(); - int get numCompleted => _completedTodos.length; - int get numActive => _activeTodos.length; - bool get allComplete => _activeTodos.isEmpty; - - //methods for CRUD - void loadTodos() async { - _todos = await _todoRepository.loadTodos(); - } - - void addTodo(Todo todo) { - _todos.add(todo); - _todoRepository.saveTodos(_todos); - } - - void updateTodo(Todo todo) { - final index = _todos.indexOf(todo); - if (index == -1) return; - _todos[index] = todo; - _todoRepository.saveTodos(_todos); - } - - void deleteTodo(Todo todo) { - if (_todos.remove(todo)) { - _todoRepository.saveTodos(_todos); - } - } - - void toggleAll() { - final allComplete = _todos.every((todo) => todo.complete); - - for (final todo in _todos) { - todo.complete = !allComplete; - } - _todoRepository.saveTodos(_todos); - } - - void clearCompleted() { - _todos.removeWhere((todo) => todo.complete); - _todoRepository.saveTodos(_todos); - } -} diff --git a/states_rebuilder/lib/ui/common/enums.dart b/states_rebuilder/lib/ui/common/enums.dart deleted file mode 100644 index 9fd4c5d6..00000000 --- a/states_rebuilder/lib/ui/common/enums.dart +++ /dev/null @@ -1,2 +0,0 @@ -enum AppTab { todos, stats } -enum ExtraAction { toggleAllComplete, clearCompleted } diff --git a/states_rebuilder/lib/ui/common/helper_methods.dart b/states_rebuilder/lib/ui/common/helper_methods.dart deleted file mode 100644 index eba8136c..00000000 --- a/states_rebuilder/lib/ui/common/helper_methods.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -import '../../domain/entities/todo.dart'; -import '../../service/todos_service.dart'; - -class HelperMethods { - static void removeTodo(Todo todo) { - final todosServiceRM = Injector.getAsReactive(); - todosServiceRM.setState( - (s) => s.deleteTodo(todo), - onSetState: (context) { - Scaffold.of(context).showSnackBar( - SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - todosServiceRM.setState((s) => s.addTodo(todo)); - }, - ), - ), - ); - }, - ); - } -} diff --git a/states_rebuilder/lib/ui/exceptions/error_handler.dart b/states_rebuilder/lib/ui/exceptions/error_handler.dart deleted file mode 100644 index 4be1dc88..00000000 --- a/states_rebuilder/lib/ui/exceptions/error_handler.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:states_rebuilder_sample/domain/exceptions/validation_exception.dart'; -import 'package:states_rebuilder_sample/service/exceptions/persistance_exception.dart'; - -class ErrorHandler { - static String getErrorMessage(dynamic error) { - if (error is ValidationException) { - return error.message; - } - - if (error is PersistanceException) { - return error.message; - } - - throw (error); - } -} diff --git a/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart b/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart deleted file mode 100644 index 0d856cb5..00000000 --- a/states_rebuilder/lib/ui/pages/add_edit_screen.dart/add_edit_screen.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:states_rebuilder_sample/domain/entities/todo.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class AddEditPage extends StatefulWidget { - final Todo todo; - - AddEditPage({Key key, this.todo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); - - @override - _AddEditPageState createState() => _AddEditPageState(); -} - -class _AddEditPageState extends State { - static final GlobalKey formKey = GlobalKey(); - // Here we use a StatefulWidget to hold local fields _task and _note - String _task; - String _note; - bool get isEditing => widget.todo != null; - final todosService = Injector.get(); - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text( - isEditing - ? ArchSampleLocalizations.of(context).editTodo - : ArchSampleLocalizations.of(context).addTodo, - ), - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: Form( - key: formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, - child: ListView( - children: [ - TextFormField( - initialValue: widget.todo != null ? widget.todo.task : '', - key: ArchSampleKeys.taskField, - autofocus: isEditing ? false : true, - style: Theme.of(context).textTheme.headlineSmall, - decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).newTodoHint, - ), - validator: (val) => val.trim().isEmpty - ? ArchSampleLocalizations.of(context).emptyTodoError - : null, - onSaved: (value) => _task = value, - ), - TextFormField( - initialValue: widget.todo != null ? widget.todo.note : '', - key: ArchSampleKeys.noteField, - maxLines: 10, - style: Theme.of(context).textTheme.titleMedium, - decoration: InputDecoration( - hintText: ArchSampleLocalizations.of(context).notesHint, - ), - onSaved: (value) => _note = value, - ), - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - key: isEditing - ? ArchSampleKeys.saveTodoFab - : ArchSampleKeys.saveNewTodo, - tooltip: isEditing - ? ArchSampleLocalizations.of(context).saveChanges - : ArchSampleLocalizations.of(context).addTodo, - child: Icon(isEditing ? Icons.check : Icons.add), - onPressed: () { - final form = formKey.currentState; - if (form.validate()) { - form.save(); - - if (isEditing) { - widget.todo - ..task = _task - ..note = _note; - todosService.updateTodo(widget.todo); - } else { - todosService.addTodo(Todo(_task, note: _note)); - } - - Navigator.pop(context); - } - }, - ), - ); - } -} diff --git a/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart b/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart deleted file mode 100644 index e1d72a8f..00000000 --- a/states_rebuilder/lib/ui/pages/detail_screen/detail_screen.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:states_rebuilder_sample/domain/entities/todo.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; -import 'package:states_rebuilder_sample/ui/common/helper_methods.dart'; -import 'package:states_rebuilder_sample/ui/pages/add_edit_screen.dart/add_edit_screen.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class DetailScreen extends StatelessWidget { - DetailScreen(this.todo) : super(key: ArchSampleKeys.todoDetailsScreen); - final Todo todo; - //use Injector.get because DetailScreen need not be reactive - final todosService = Injector.get(); - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(ArchSampleLocalizations.of(context).todoDetails), - actions: [ - IconButton( - key: ArchSampleKeys.deleteTodoButton, - tooltip: ArchSampleLocalizations.of(context).deleteTodo, - icon: Icon(Icons.delete), - onPressed: () { - //This is one particularity of states_rebuilder - //We have the ability to call a method form an injected model without notify observers - //This can be done by consuming the injected model using Injector.get and call the method we want. - todosService.deleteTodo(todo); - //When navigating back to home page, rebuild is granted by flutter framework. - Navigator.pop(context, todo); - //delegate to the static method HelperMethods.removeTodo to remove todo - HelperMethods.removeTodo(todo); - }, - ), - ], - ), - body: Padding( - padding: EdgeInsets.all(16.0), - child: ListView( - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(right: 8.0), - child: StateBuilder( - //getting a new ReactiveModel of TodosService to optimize rebuild of widgets - builder: (_, todosServiceRM) { - return Checkbox( - value: todo.complete, - key: ArchSampleKeys.detailsTodoItemCheckbox, - onChanged: (complete) { - todo.complete = !todo.complete; - //only this checkBox will rebuild - todosServiceRM.setState((s) => s.updateTodo(todo)); - }, - ); - }, - ), - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(top: 8.0, bottom: 16.0), - child: Text( - todo.task, - key: ArchSampleKeys.detailsTodoItemTask, - style: Theme.of(context).textTheme.headlineSmall, - ), - ), - Text( - todo.note, - key: ArchSampleKeys.detailsTodoItemNote, - style: Theme.of(context).textTheme.titleMedium, - ), - ], - ), - ), - ], - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), - key: ArchSampleKeys.editTodoFab, - onPressed: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (context) { - return AddEditPage( - key: ArchSampleKeys.editTodoScreen, - todo: todo, - ); - }, - ), - ); - }, - ), - ); - } -} diff --git a/states_rebuilder/lib/ui/pages/home_screen/extra_actions_button.dart b/states_rebuilder/lib/ui/pages/home_screen/extra_actions_button.dart deleted file mode 100644 index aca10542..00000000 --- a/states_rebuilder/lib/ui/pages/home_screen/extra_actions_button.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; -import 'package:states_rebuilder_sample/ui/common/enums.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class ExtraActionsButton extends StatelessWidget { - ExtraActionsButton({Key key}) : super(key: key); - final todosServiceRM = Injector.getAsReactive(); - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, - onSelected: (action) { - if (action == ExtraAction.toggleAllComplete) { - todosServiceRM.setState((s) => s.toggleAll()); - } else if (action == ExtraAction.clearCompleted) { - todosServiceRM.setState((s) => s.clearCompleted()); - } - }, - itemBuilder: (BuildContext context) { - return >[ - PopupMenuItem( - key: ArchSampleKeys.toggleAll, - value: ExtraAction.toggleAllComplete, - child: Text(todosServiceRM.state.allComplete - ? ArchSampleLocalizations.of(context).markAllIncomplete - : ArchSampleLocalizations.of(context).markAllComplete), - ), - PopupMenuItem( - key: ArchSampleKeys.clearCompleted, - value: ExtraAction.clearCompleted, - child: Text(ArchSampleLocalizations.of(context).clearCompleted), - ), - ]; - }, - ); - } -} diff --git a/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart b/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart deleted file mode 100644 index 398bd866..00000000 --- a/states_rebuilder/lib/ui/pages/home_screen/filter_button.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:states_rebuilder_sample/service/common/enums.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class FilterButton extends StatelessWidget { - const FilterButton({this.isActive, Key key}) : super(key: key); - final bool isActive; - - @override - Widget build(BuildContext context) { - //context is used to register FilterButton as observer in todosServiceRM - final todosServiceRM = Injector.getAsReactive( - context: context, - ); - - final defaultStyle = Theme.of(context).textTheme.bodyMedium; - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); - final button = _Button( - onSelected: (filter) { - todosServiceRM.setState((s) => s.activeFilter = filter); - }, - activeFilter: todosServiceRM.state.activeFilter, - activeStyle: activeStyle, - defaultStyle: defaultStyle, - ); - - return AnimatedOpacity( - opacity: isActive ? 1.0 : 0.0, - duration: Duration(milliseconds: 150), - child: isActive ? button : IgnorePointer(child: button), - ); - } -} - -class _Button extends StatelessWidget { - const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); - - final PopupMenuItemSelected onSelected; - final VisibilityFilter activeFilter; - final TextStyle activeStyle; - final TextStyle defaultStyle; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - key: ArchSampleKeys.filterButton, - tooltip: ArchSampleLocalizations.of(context).filterTodos, - onSelected: onSelected, - itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - key: ArchSampleKeys.allFilter, - value: VisibilityFilter.all, - child: Text( - ArchSampleLocalizations.of(context).showAll, - style: activeFilter == VisibilityFilter.all - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.activeFilter, - value: VisibilityFilter.active, - child: Text( - ArchSampleLocalizations.of(context).showActive, - style: activeFilter == VisibilityFilter.active - ? activeStyle - : defaultStyle, - ), - ), - PopupMenuItem( - key: ArchSampleKeys.completedFilter, - value: VisibilityFilter.completed, - child: Text( - ArchSampleLocalizations.of(context).showCompleted, - style: activeFilter == VisibilityFilter.completed - ? activeStyle - : defaultStyle, - ), - ), - ], - icon: Icon(Icons.filter_list), - ); - } -} diff --git a/states_rebuilder/lib/ui/pages/home_screen/home_screen.dart b/states_rebuilder/lib/ui/pages/home_screen/home_screen.dart deleted file mode 100644 index 69655b82..00000000 --- a/states_rebuilder/lib/ui/pages/home_screen/home_screen.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -import '../../../localization.dart'; -import '../../../service/todos_service.dart'; -import '../../common/enums.dart'; -import 'extra_actions_button.dart'; -import 'filter_button.dart'; -import 'stats_counter.dart'; -import 'todo_list.dart'; - -class HomeScreen extends StatefulWidget { - HomeScreen({Key key}) : super(key: key ?? ArchSampleKeys.homeScreen); - - @override - _HomeScreenState createState() => _HomeScreenState(); -} - -class _HomeScreenState extends State { - // Here we use a StatefulWidget to store the _activeTab state which is private to this class - - AppTab _activeTab = AppTab.todos; - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(StatesRebuilderLocalizations.of(context).appTitle), - actions: [ - FilterButton(isActive: _activeTab == AppTab.todos), - ExtraActionsButton(), - ], - ), - body: StateBuilder( - models: [Injector.getAsReactive()], - initState: (_, todosServiceRM) { - //update state and notify observer - return todosServiceRM.setState((s) => s.loadTodos()); - }, - builder: (_, todosServiceRM) { - return _activeTab == AppTab.todos ? TodoList() : StatsCounter(); - }, - ), - floatingActionButton: FloatingActionButton( - key: ArchSampleKeys.addTodoFab, - onPressed: () { - Navigator.pushNamed(context, ArchSampleRoutes.addTodo); - }, - child: Icon(Icons.add), - tooltip: ArchSampleLocalizations.of(context).addTodo, - ), - bottomNavigationBar: BottomNavigationBar( - key: ArchSampleKeys.tabs, - currentIndex: AppTab.values.indexOf(_activeTab), - onTap: (index) { - //mutate the state of the private field _activeTab and use Flutter setState because - setState(() => _activeTab = AppTab.values[index]); - }, - items: AppTab.values.map( - (tab) { - return BottomNavigationBarItem( - icon: Icon( - tab == AppTab.todos ? Icons.list : Icons.show_chart, - key: tab == AppTab.stats - ? ArchSampleKeys.statsTab - : ArchSampleKeys.todoTab, - ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), - ); - }, - ).toList(), - ), - ); - } -} diff --git a/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart b/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart deleted file mode 100644 index d06db252..00000000 --- a/states_rebuilder/lib/ui/pages/home_screen/stats_counter.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class StatsCounter extends StatelessWidget { - //use Injector.get, because this class need not to be reactive and its rebuild is ensured by its parent. - final todosService = Injector.get(); - - StatsCounter() : super(key: ArchSampleKeys.statsCounter); - - @override - Widget build(BuildContext context) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '${todosService.numCompleted}', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '${todosService.numActive}', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ], - ), - ); - } -} diff --git a/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart b/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart deleted file mode 100644 index 340ea3eb..00000000 --- a/states_rebuilder/lib/ui/pages/home_screen/todo_item.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:states_rebuilder_sample/domain/entities/todo.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; -import 'package:states_rebuilder_sample/ui/common/helper_methods.dart'; -import 'package:states_rebuilder_sample/ui/pages/detail_screen/detail_screen.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -class TodoItem extends StatelessWidget { - final Todo todo; - - TodoItem({Key key, @required this.todo}) : super(key: key); - - final todosServiceRM = Injector.getAsReactive(); - - @override - Widget build(BuildContext context) { - return Dismissible( - key: ArchSampleKeys.todoItem(todo.id), - onDismissed: (direction) { - //delegate removing todo to the static method HelperMethods.removeTodo. - HelperMethods.removeTodo(todo); - }, - child: ListTile( - onTap: () { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) { - return DetailScreen(todo); - }, - ), - ); - }, - leading: Checkbox( - key: ArchSampleKeys.todoItemCheckbox(todo.id), - value: todo.complete, - onChanged: (complete) { - todo.complete = !todo.complete; - todosServiceRM.setState((state) => state.updateTodo(todo)); - }, - ), - title: Text( - todo.task, - key: ArchSampleKeys.todoItemTask(todo.id), - style: Theme.of(context).textTheme.titleLarge, - ), - subtitle: Text( - todo.note, - key: ArchSampleKeys.todoItemNote(todo.id), - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - ); - } -} diff --git a/states_rebuilder/lib/ui/pages/home_screen/todo_list.dart b/states_rebuilder/lib/ui/pages/home_screen/todo_list.dart deleted file mode 100644 index 7577a09c..00000000 --- a/states_rebuilder/lib/ui/pages/home_screen/todo_list.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:states_rebuilder/states_rebuilder.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; -import 'package:states_rebuilder_sample/ui/exceptions/error_handler.dart'; -import 'package:todos_app_core/todos_app_core.dart'; - -import 'todo_item.dart'; - -class TodoList extends StatelessWidget { - TodoList() : super(key: ArchSampleKeys.todoList); - final todosServiceRM = Injector.getAsReactive(); - @override - Widget build(BuildContext context) { - //use whenConnectionState method to go through all the possible status of the ReactiveModel - return todosServiceRM.whenConnectionState( - onIdle: () => Container(), - onWaiting: () => Center( - child: CircularProgressIndicator(key: ArchSampleKeys.todosLoading), - ), - onData: (todosService) { - return ListView.builder( - key: ArchSampleKeys.todoList, - itemCount: todosService.todos.length, - itemBuilder: (BuildContext context, int index) { - final todo = todosService.todos[index]; - return TodoItem(todo: todo); - }, - ); - }, - onError: (error) { - //Delegate error handling to the static method ErrorHandler.getErrorMessage - return Center(child: Text(ErrorHandler.getErrorMessage(error))); - }, - ); - } -} diff --git a/states_rebuilder/pubspec.yaml b/states_rebuilder/pubspec.yaml deleted file mode 100644 index 56a789be..00000000 --- a/states_rebuilder/pubspec.yaml +++ /dev/null @@ -1,82 +0,0 @@ -name: states_rebuilder_sample -description: A new Flutter project. - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 - -environment: - sdk: ">=2.1.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - states_rebuilder: ^1.11.2 - key_value_store_flutter: - key_value_store_web: - shared_preferences: - todos_repository_local_storage: - path: ../todos_repository_local_storage - todos_app_core: - path: ../todos_app_core - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_driver: - sdk: flutter - test: - mockito: - integration_tests: - path: ../integration_tests - - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/states_rebuilder/test/fake_repository.dart b/states_rebuilder/test/fake_repository.dart deleted file mode 100644 index d8fa18ff..00000000 --- a/states_rebuilder/test/fake_repository.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:states_rebuilder_sample/domain/entities/todo.dart'; -import 'package:states_rebuilder_sample/service/interfaces/i_todo_repository.dart'; - -class FakeRepository implements ITodosRepository { - @override - Future> loadTodos() { - return Future.value( - [ - Todo( - 'task1', - id: '1', - note: 'note1', - complete: true, - ), - Todo( - 'task2', - id: '2', - note: 'note2', - complete: false, - ), - ], - ); - } - - bool isSaved = false; - @override - Future saveTodos(List todos) { - isSaved = true; - return Future.value(true); - } -} diff --git a/states_rebuilder/test/todo_service_test.dart b/states_rebuilder/test/todo_service_test.dart deleted file mode 100644 index ae91c27f..00000000 --- a/states_rebuilder/test/todo_service_test.dart +++ /dev/null @@ -1,119 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:states_rebuilder_sample/domain/entities/todo.dart'; -import 'package:states_rebuilder_sample/service/common/enums.dart'; -import 'package:states_rebuilder_sample/service/interfaces/i_todo_repository.dart'; -import 'package:states_rebuilder_sample/service/todos_service.dart'; - -import 'fake_repository.dart'; - -//TodoService class is a pure dart class, you can test it just as you test a plain dart class. -void main() { - group( - 'TodosService', - () { - ITodosRepository todosRepository; - TodosService todoService; - setUp( - () { - todosRepository = FakeRepository(); - todoService = TodosService(todosRepository); - }, - ); - - test( - 'should load todos works', - () async { - expect(todoService.todos.isEmpty, isTrue); - await todoService.loadTodos(); - expect(todoService.todos.length, equals(2)); - }, - ); - - test( - 'should filler todos works', - () async { - await todoService.loadTodos(); - //all todos - expect(todoService.todos.length, equals(2)); - //active todos - todoService.activeFilter = VisibilityFilter.active; - expect(todoService.todos.length, equals(1)); - //completed todos - todoService.activeFilter = VisibilityFilter.completed; - expect(todoService.todos.length, equals(1)); - }, - ); - - test( - 'should add todo works', - () async { - await todoService.loadTodos(); - expect(todoService.todos.length, equals(2)); - final todoToAdd = Todo('addTask'); - await todoService.addTodo(todoToAdd); - expect(todoService.todos.length, equals(3)); - expect(await (todosRepository as FakeRepository).isSaved, isTrue); - }, - ); - - test( - 'should update todo works', - () async { - await todoService.loadTodos(); - final beforeUpdate = - todoService.todos.firstWhere((todo) => todo.id == '1'); - expect(beforeUpdate.task, equals('task1')); - await todoService.updateTodo(Todo('updateTodo', id: '1')); - expect(await (todosRepository as FakeRepository).isSaved, isTrue); - final afterUpdate = - todoService.todos.firstWhere((todo) => todo.id == '1'); - expect(afterUpdate.task, equals('updateTodo')); - }, - ); - - test( - 'should delete todo works', - () async { - await todoService.loadTodos(); - expect(todoService.todos.length, equals(2)); - await todoService.deleteTodo(Todo('updateTodo', id: '1')); - expect(await (todosRepository as FakeRepository).isSaved, isTrue); - expect(todoService.todos.length, equals(1)); - }, - ); - - test( - 'should toggleAll todos works', - () async { - await todoService.loadTodos(); - expect(todoService.numActive, equals(1)); - expect(todoService.numCompleted, equals(1)); - - await todoService.toggleAll(); - expect(await (todosRepository as FakeRepository).isSaved, isTrue); - expect(todoService.numActive, equals(0)); - expect(todoService.numCompleted, equals(2)); - - await todoService.toggleAll(); - expect(todoService.numActive, equals(2)); - expect(todoService.numCompleted, equals(0)); - }, - ); - - test( - 'should clearCompleted todos works', - () async { - await todoService.loadTodos(); - expect(todoService.numActive, equals(1)); - expect(todoService.numCompleted, equals(1)); - - await todoService.clearCompleted(); - expect(await (todosRepository as FakeRepository).isSaved, isTrue); - expect(todoService.todos.length, equals(1)); - expect(todoService.numActive, equals(1)); - expect(todoService.numCompleted, equals(0)); - }, - ); - }, - ); -} diff --git a/states_rebuilder/test_driver/todo_app.dart b/states_rebuilder/test_driver/todo_app.dart deleted file mode 100644 index d7e29fe0..00000000 --- a/states_rebuilder/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:states_rebuilder_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/states_rebuilder/test_driver/todo_app_test.dart b/states_rebuilder/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/states_rebuilder/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/states_rebuilder/web/index.html b/states_rebuilder/web/index.html deleted file mode 100644 index 929359b3..00000000 --- a/states_rebuilder/web/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - states_rebuilder_sample - - - - - From 12e4f027cec44df83e80fc1de8a20ccd681dba4c Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 16:15:34 +0100 Subject: [PATCH 61/89] Fix scoped model analysis errors --- scoped_model/lib/app.dart | 2 +- scoped_model/lib/widgets/stats_counter.dart | 3 +-- scoped_model/pubspec.yaml | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scoped_model/lib/app.dart b/scoped_model/lib/app.dart index ea11664a..99f2c1bb 100644 --- a/scoped_model/lib/app.dart +++ b/scoped_model/lib/app.dart @@ -10,7 +10,7 @@ import 'package:todos_repository_core/todos_repository_core.dart'; class ScopedModelApp extends StatelessWidget { final TodosRepository repository; - ScopedModelApp({required this.repository}); + const ScopedModelApp({super.key, required this.repository}); @override Widget build(BuildContext context) { diff --git a/scoped_model/lib/widgets/stats_counter.dart b/scoped_model/lib/widgets/stats_counter.dart index bb1e1b11..98147604 100644 --- a/scoped_model/lib/widgets/stats_counter.dart +++ b/scoped_model/lib/widgets/stats_counter.dart @@ -1,4 +1,3 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; @@ -6,7 +5,7 @@ import 'package:scoped_model_sample/todo_list_model.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatelessWidget { - StatsCounter() : super(key: ArchSampleKeys.statsCounter); + const StatsCounter({super.key = ArchSampleKeys.statsCounter}); bool isActive(Todo todo) => !todo.complete; diff --git a/scoped_model/pubspec.yaml b/scoped_model/pubspec.yaml index 27d0cf7c..598fa99a 100644 --- a/scoped_model/pubspec.yaml +++ b/scoped_model/pubspec.yaml @@ -21,6 +21,7 @@ dependencies: collection: flutter: sdk: flutter + path_provider: scoped_model: shared_preferences: todos_app_core: From a3b4e41a8d614bba62bf5b4b780c3d6c5362cf3e Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 16:48:54 +0100 Subject: [PATCH 62/89] Update redux --- redux/.metadata | 39 +- redux/analysis_options.yaml | 34 + redux/android/.gitignore | 7 + redux/android/app/build.gradle | 67 -- redux/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 33 +- .../kotlin/com/example/redux/MainActivity.kt | 12 - .../com/example/redux_sample/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- redux/android/build.gradle | 31 - redux/android/build.gradle.kts | 24 + redux/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- redux/android/gradlew.bat | 180 ++-- redux/android/settings.gradle | 15 - redux/android/settings.gradle.kts | 26 + redux/integration_test/app_test.dart | 29 + redux/ios/.gitignore | 2 + redux/ios/Flutter/AppFrameworkInfo.plist | 4 +- redux/ios/Flutter/Debug.xcconfig | 2 +- redux/ios/Flutter/Release.xcconfig | 2 +- redux/ios/Podfile | 83 +- redux/ios/Podfile.lock | 34 - redux/ios/Runner.xcodeproj/project.pbxproj | 269 +++--- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../contents.xcworkspacedata | 3 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + redux/ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes redux/ios/Runner/Info.plist | 10 +- redux/ios/Runner/Runner-Bridging-Header.h | 2 +- redux/ios/RunnerTests/RunnerTests.swift | 12 + redux/lib/app.dart | 6 +- redux/lib/containers/active_tab.dart | 3 +- redux/lib/containers/add_todo.dart | 4 +- redux/lib/containers/app_loading.dart | 5 +- redux/lib/containers/edit_todo.dart | 2 +- .../containers/extra_actions_container.dart | 7 +- redux/lib/containers/filter_selector.dart | 7 +- redux/lib/containers/filtered_todos.dart | 19 +- redux/lib/containers/stats.dart | 5 +- redux/lib/containers/tab_selector.dart | 18 +- redux/lib/containers/todo_details.dart | 13 +- redux/lib/localization.dart | 2 +- redux/lib/main.dart | 3 +- redux/lib/main_web.dart | 31 - .../middleware/store_todos_middleware.dart | 18 +- redux/lib/models/app_state.dart | 10 +- redux/lib/models/todo.dart | 13 +- redux/lib/presentation/add_edit_screen.dart | 36 +- redux/lib/presentation/details_screen.dart | 17 +- .../presentation/extra_actions_button.dart | 9 +- redux/lib/presentation/filter_button.dart | 28 +- redux/lib/presentation/home_screen.dart | 9 +- redux/lib/presentation/loading_indicator.dart | 3 +- redux/lib/presentation/stats_counter.dart | 8 +- redux/lib/presentation/todo_item.dart | 16 +- redux/lib/presentation/todo_list.dart | 35 +- redux/lib/reducers/app_state_reducer.dart | 2 +- redux/lib/reducers/loading_reducer.dart | 6 +- redux/lib/reducers/tabs_reducer.dart | 7 +- redux/lib/reducers/todos_reducer.dart | 14 +- redux/lib/reducers/visibility_reducer.dart | 6 +- redux/lib/selectors/selectors.dart | 3 +- redux/linux/.gitignore | 1 + redux/linux/CMakeLists.txt | 128 +++ redux/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + redux/linux/flutter/generated_plugins.cmake | 23 + redux/linux/runner/CMakeLists.txt | 26 + redux/linux/runner/main.cc | 6 + redux/linux/runner/my_application.cc | 144 ++++ redux/linux/runner/my_application.h | 18 + redux/macos/.gitignore | 7 + redux/macos/Flutter/Flutter-Debug.xcconfig | 2 + redux/macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + redux/macos/Podfile | 42 + redux/macos/Podfile.lock | 30 + redux/macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + redux/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes redux/macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ redux/macos/Runner/Configs/AppInfo.xcconfig | 14 + redux/macos/Runner/Configs/Debug.xcconfig | 2 + redux/macos/Runner/Configs/Release.xcconfig | 2 + redux/macos/Runner/Configs/Warnings.xcconfig | 13 + redux/macos/Runner/DebugProfile.entitlements | 12 + redux/macos/Runner/Info.plist | 32 + redux/macos/Runner/MainFlutterWindow.swift | 15 + redux/macos/Runner/Release.entitlements | 8 + redux/macos/RunnerTests/RunnerTests.swift | 12 + redux/pubspec.yaml | 21 +- redux/test/middleware_test.dart | 4 +- redux/test/middleware_test.mocks.dart | 51 ++ redux/test/reducer_test.dart | 2 +- redux/test/selectors_test.dart | 4 +- redux/test_driver/integration_test.dart | 3 + redux/test_driver/todo_app.dart | 8 - redux/test_driver/todo_app_test.dart | 5 - redux/web/favicon.png | Bin 0 -> 917 bytes redux/web/icons/Icon-192.png | Bin 0 -> 5292 bytes redux/web/icons/Icon-512.png | Bin 0 -> 8252 bytes redux/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes redux/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes redux/web/index.html | 32 +- redux/web/manifest.json | 35 + redux/windows/.gitignore | 17 + redux/windows/CMakeLists.txt | 108 +++ redux/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + redux/windows/flutter/generated_plugins.cmake | 23 + redux/windows/runner/CMakeLists.txt | 40 + redux/windows/runner/Runner.rc | 121 +++ redux/windows/runner/flutter_window.cpp | 71 ++ redux/windows/runner/flutter_window.h | 33 + redux/windows/runner/main.cpp | 43 + redux/windows/runner/resource.h | 16 + redux/windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes redux/windows/runner/runner.exe.manifest | 14 + redux/windows/runner/utils.cpp | 65 ++ redux/windows/runner/utils.h | 19 + redux/windows/runner/win32_window.cpp | 288 +++++++ redux/windows/runner/win32_window.h | 102 +++ 169 files changed, 4034 insertions(+), 707 deletions(-) create mode 100644 redux/analysis_options.yaml delete mode 100644 redux/android/app/build.gradle create mode 100644 redux/android/app/build.gradle.kts delete mode 100644 redux/android/app/src/main/kotlin/com/example/redux/MainActivity.kt create mode 100644 redux/android/app/src/main/kotlin/com/example/redux_sample/MainActivity.kt create mode 100644 redux/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 redux/android/app/src/main/res/values-night/styles.xml delete mode 100644 redux/android/build.gradle create mode 100644 redux/android/build.gradle.kts delete mode 100644 redux/android/settings.gradle create mode 100644 redux/android/settings.gradle.kts create mode 100644 redux/integration_test/app_test.dart delete mode 100644 redux/ios/Podfile.lock create mode 100644 redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 redux/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 redux/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png create mode 100644 redux/ios/RunnerTests/RunnerTests.swift delete mode 100644 redux/lib/main_web.dart create mode 100644 redux/linux/.gitignore create mode 100644 redux/linux/CMakeLists.txt create mode 100644 redux/linux/flutter/CMakeLists.txt create mode 100644 redux/linux/flutter/generated_plugin_registrant.cc create mode 100644 redux/linux/flutter/generated_plugin_registrant.h create mode 100644 redux/linux/flutter/generated_plugins.cmake create mode 100644 redux/linux/runner/CMakeLists.txt create mode 100644 redux/linux/runner/main.cc create mode 100644 redux/linux/runner/my_application.cc create mode 100644 redux/linux/runner/my_application.h create mode 100644 redux/macos/.gitignore create mode 100644 redux/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 redux/macos/Flutter/Flutter-Release.xcconfig create mode 100644 redux/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 redux/macos/Podfile create mode 100644 redux/macos/Podfile.lock create mode 100644 redux/macos/Runner.xcodeproj/project.pbxproj create mode 100644 redux/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 redux/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 redux/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 redux/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 redux/macos/Runner/AppDelegate.swift create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 redux/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 redux/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 redux/macos/Runner/Configs/Debug.xcconfig create mode 100644 redux/macos/Runner/Configs/Release.xcconfig create mode 100644 redux/macos/Runner/Configs/Warnings.xcconfig create mode 100644 redux/macos/Runner/DebugProfile.entitlements create mode 100644 redux/macos/Runner/Info.plist create mode 100644 redux/macos/Runner/MainFlutterWindow.swift create mode 100644 redux/macos/Runner/Release.entitlements create mode 100644 redux/macos/RunnerTests/RunnerTests.swift create mode 100644 redux/test/middleware_test.mocks.dart create mode 100644 redux/test_driver/integration_test.dart delete mode 100644 redux/test_driver/todo_app.dart delete mode 100644 redux/test_driver/todo_app_test.dart create mode 100644 redux/web/favicon.png create mode 100644 redux/web/icons/Icon-192.png create mode 100644 redux/web/icons/Icon-512.png create mode 100644 redux/web/icons/Icon-maskable-192.png create mode 100644 redux/web/icons/Icon-maskable-512.png create mode 100644 redux/web/manifest.json create mode 100644 redux/windows/.gitignore create mode 100644 redux/windows/CMakeLists.txt create mode 100644 redux/windows/flutter/CMakeLists.txt create mode 100644 redux/windows/flutter/generated_plugin_registrant.cc create mode 100644 redux/windows/flutter/generated_plugin_registrant.h create mode 100644 redux/windows/flutter/generated_plugins.cmake create mode 100644 redux/windows/runner/CMakeLists.txt create mode 100644 redux/windows/runner/Runner.rc create mode 100644 redux/windows/runner/flutter_window.cpp create mode 100644 redux/windows/runner/flutter_window.h create mode 100644 redux/windows/runner/main.cpp create mode 100644 redux/windows/runner/resource.h create mode 100644 redux/windows/runner/resources/app_icon.ico create mode 100644 redux/windows/runner/runner.exe.manifest create mode 100644 redux/windows/runner/utils.cpp create mode 100644 redux/windows/runner/utils.h create mode 100644 redux/windows/runner/win32_window.cpp create mode 100644 redux/windows/runner/win32_window.h diff --git a/redux/.metadata b/redux/.metadata index 361e1e4c..05a8ab44 100644 --- a/redux/.metadata +++ b/redux/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 18cd7a3601bcffb36fdf2f679f763b5e827c2e8e - channel: beta + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/redux/analysis_options.yaml b/redux/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/redux/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/redux/android/.gitignore b/redux/android/.gitignore index bc2100d8..be3943c9 100644 --- a/redux/android/.gitignore +++ b/redux/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/redux/android/app/build.gradle b/redux/android/app/build.gradle deleted file mode 100644 index 73f22ada..00000000 --- a/redux/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.redux" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/redux/android/app/build.gradle.kts b/redux/android/app/build.gradle.kts new file mode 100644 index 00000000..bb3748cf --- /dev/null +++ b/redux/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.redux_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.redux_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/redux/android/app/src/debug/AndroidManifest.xml b/redux/android/app/src/debug/AndroidManifest.xml index f404de4d..399f6981 100644 --- a/redux/android/app/src/debug/AndroidManifest.xml +++ b/redux/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/redux/android/app/src/main/AndroidManifest.xml b/redux/android/app/src/main/AndroidManifest.xml index e249cc72..29735f54 100644 --- a/redux/android/app/src/main/AndroidManifest.xml +++ b/redux/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/redux/android/app/src/main/kotlin/com/example/redux/MainActivity.kt b/redux/android/app/src/main/kotlin/com/example/redux/MainActivity.kt deleted file mode 100644 index 30266c3c..00000000 --- a/redux/android/app/src/main/kotlin/com/example/redux/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.redux - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/redux/android/app/src/main/kotlin/com/example/redux_sample/MainActivity.kt b/redux/android/app/src/main/kotlin/com/example/redux_sample/MainActivity.kt new file mode 100644 index 00000000..1afad812 --- /dev/null +++ b/redux/android/app/src/main/kotlin/com/example/redux_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.redux_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/redux/android/app/src/main/res/drawable-v21/launch_background.xml b/redux/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/redux/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/redux/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/redux/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 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 literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/redux/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/redux/android/app/src/main/res/values/styles.xml b/redux/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/redux/android/app/src/main/res/values/styles.xml +++ b/redux/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/redux/android/app/src/profile/AndroidManifest.xml b/redux/android/app/src/profile/AndroidManifest.xml index f404de4d..399f6981 100644 --- a/redux/android/app/src/profile/AndroidManifest.xml +++ b/redux/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/redux/android/build.gradle b/redux/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/redux/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/redux/android/build.gradle.kts b/redux/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/redux/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/redux/android/gradle.properties b/redux/android/gradle.properties index 38c8d454..f018a618 100644 --- a/redux/android/gradle.properties +++ b/redux/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/redux/android/gradle/wrapper/gradle-wrapper.properties b/redux/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/redux/android/gradle/wrapper/gradle-wrapper.properties +++ b/redux/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/redux/android/gradlew.bat b/redux/android/gradlew.bat index 8a0b282a..aec99730 100644 --- a/redux/android/gradlew.bat +++ b/redux/android/gradlew.bat @@ -1,90 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/redux/android/settings.gradle b/redux/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/redux/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/redux/android/settings.gradle.kts b/redux/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/redux/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/redux/integration_test/app_test.dart b/redux/integration_test/app_test.dart new file mode 100644 index 00000000..75488cc5 --- /dev/null +++ b/redux/integration_test/app_test.dart @@ -0,0 +1,29 @@ +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:redux/redux.dart'; +import 'package:redux_sample/app.dart'; +import 'package:redux_sample/middleware/store_todos_middleware.dart'; +import 'package:redux_sample/models/app_state.dart'; +import 'package:redux_sample/reducers/app_state_reducer.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return ReduxApp( + store: Store( + appReducer, + initialState: AppState.loading(), + middleware: createStoreTodosMiddleware( + LocalStorageRepository( + localStorage: KeyValueStorage( + 'redux_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ), + ), + ); + }, + ); +} diff --git a/redux/ios/.gitignore b/redux/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/redux/ios/.gitignore +++ b/redux/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/redux/ios/Flutter/AppFrameworkInfo.plist b/redux/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..1dc6cf76 100644 --- a/redux/ios/Flutter/AppFrameworkInfo.plist +++ b/redux/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 13.0 diff --git a/redux/ios/Flutter/Debug.xcconfig b/redux/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/redux/ios/Flutter/Debug.xcconfig +++ b/redux/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/redux/ios/Flutter/Release.xcconfig b/redux/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/redux/ios/Flutter/Release.xcconfig +++ b/redux/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/redux/ios/Podfile b/redux/ios/Podfile index b30a428b..620e46eb 100644 --- a/redux/ios/Podfile +++ b/redux/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/redux/ios/Podfile.lock b/redux/ios/Podfile.lock deleted file mode 100644 index 60cb72ff..00000000 --- a/redux/ios/Podfile.lock +++ /dev/null @@ -1,34 +0,0 @@ -PODS: - - Flutter (1.0.0) - - key_value_store_flutter (0.0.1): - - Flutter - - path_provider (0.0.1): - - Flutter - - shared_preferences (0.0.1): - - Flutter - -DEPENDENCIES: - - Flutter (from `Flutter`) - - key_value_store_flutter (from `.symlinks/plugins/key_value_store_flutter/ios`) - - path_provider (from `.symlinks/plugins/path_provider/ios`) - - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) - -EXTERNAL SOURCES: - Flutter: - :path: Flutter - key_value_store_flutter: - :path: ".symlinks/plugins/key_value_store_flutter/ios" - path_provider: - :path: ".symlinks/plugins/path_provider/ios" - shared_preferences: - :path: ".symlinks/plugins/shared_preferences/ios" - -SPEC CHECKSUMS: - Flutter: 0e3d915762c693b495b44d77113d4970485de6ec - key_value_store_flutter: 17757389b11f4df6461c3a63b7a996062c74b13c - path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d - shared_preferences: 1feebfa37bb57264736e16865e7ffae7fc99b523 - -PODFILE CHECKSUM: 1b66dae606f75376c5f2135a8290850eeb09ae83 - -COCOAPODS: 1.8.4 diff --git a/redux/ios/Runner.xcodeproj/project.pbxproj b/redux/ios/Runner.xcodeproj/project.pbxproj index dd0da594..be7aeefd 100644 --- a/redux/ios/Runner.xcodeproj/project.pbxproj +++ b/redux/ios/Runner.xcodeproj/project.pbxproj @@ -3,23 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 5E7495283C2EE97EE73E9CE4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCA19202287B052354FC31F7 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -27,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -38,23 +42,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 480AC9B32D88555244F6D203 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 6484D0F73242762AEE945887 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - ABE7BBA1000592FA3BB3A065 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - BCA19202287B052354FC31F7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,32 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - 5E7495283C2EE97EE73E9CE4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 60B8E1B7B3D4F8767DEAF8E2 /* Pods */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - ABE7BBA1000592FA3BB3A065 /* Pods-Runner.debug.xcconfig */, - 480AC9B32D88555244F6D203 /* Pods-Runner.release.xcconfig */, - 6484D0F73242762AEE945887 /* Pods-Runner.profile.xcconfig */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -101,8 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 60B8E1B7B3D4F8767DEAF8E2 /* Pods */, - B5449BEF13D944A9F24ACD12 /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -110,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -121,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -130,36 +121,36 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; - B5449BEF13D944A9F24ACD12 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BCA19202287B052354FC31F7 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4FEA805F7E8C9CABE6EB44C4 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 20E57DA7F7B71919905952FF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -176,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -186,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -199,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -218,59 +222,25 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 20E57DA7F7B71919905952FF /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 4FEA805F7E8C9CABE6EB44C4 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -286,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -297,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -319,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -351,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -359,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -375,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.redux; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -394,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -428,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -442,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -452,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -484,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -492,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -509,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.redux; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -536,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.redux; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -558,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/redux/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/redux/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/redux/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - - - diff --git a/redux/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/redux/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/redux/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/redux/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/redux/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/redux/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/redux/ios/Runner/AppDelegate.swift b/redux/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/redux/ios/Runner/AppDelegate.swift +++ b/redux/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 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 U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 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 diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 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 diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/redux/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/redux/ios/Runner/Info.plist b/redux/ios/Runner/Info.plist index 9f78a477..880e62e1 100644 --- a/redux/ios/Runner/Info.plist +++ b/redux/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Redux Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - redux + redux_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/redux/ios/Runner/Runner-Bridging-Header.h b/redux/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/redux/ios/Runner/Runner-Bridging-Header.h +++ b/redux/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/redux/ios/RunnerTests/RunnerTests.swift b/redux/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/redux/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/redux/lib/app.dart b/redux/lib/app.dart index 92dc824d..b594dc48 100644 --- a/redux/lib/app.dart +++ b/redux/lib/app.dart @@ -11,7 +11,7 @@ import 'package:todos_app_core/todos_app_core.dart'; class ReduxApp extends StatelessWidget { final Store store; - const ReduxApp({Key key, this.store}) : super(key: key); + const ReduxApp({super.key, required this.store}); @override Widget build(BuildContext context) { @@ -32,9 +32,7 @@ class ReduxApp extends StatelessWidget { }, ); }, - ArchSampleRoutes.addTodo: (context) { - return AddTodo(); - }, + ArchSampleRoutes.addTodo: (context) => AddTodo(), }, ), ); diff --git a/redux/lib/containers/active_tab.dart b/redux/lib/containers/active_tab.dart index e9a8a03c..ffbcbcf2 100644 --- a/redux/lib/containers/active_tab.dart +++ b/redux/lib/containers/active_tab.dart @@ -1,5 +1,4 @@ import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; import 'package:redux_sample/models/models.dart'; @@ -7,7 +6,7 @@ import 'package:redux_sample/models/models.dart'; class ActiveTab extends StatelessWidget { final ViewModelBuilder builder; - ActiveTab({Key key, @required this.builder}) : super(key: key); + const ActiveTab({super.key, required this.builder}); @override Widget build(BuildContext context) { diff --git a/redux/lib/containers/add_todo.dart b/redux/lib/containers/add_todo.dart index f56a9088..248fc9f0 100644 --- a/redux/lib/containers/add_todo.dart +++ b/redux/lib/containers/add_todo.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; import 'package:redux_sample/presentation/add_edit_screen.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class AddTodo extends StatelessWidget { - AddTodo({Key key}) : super(key: key); + const AddTodo({super.key}); @override Widget build(BuildContext context) { diff --git a/redux/lib/containers/app_loading.dart b/redux/lib/containers/app_loading.dart index 97c487b9..8d769cf9 100644 --- a/redux/lib/containers/app_loading.dart +++ b/redux/lib/containers/app_loading.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; @@ -6,9 +5,9 @@ import 'package:redux_sample/models/models.dart'; import 'package:redux_sample/selectors/selectors.dart'; class AppLoading extends StatelessWidget { - final Function(BuildContext context, bool isLoading) builder; + final ViewModelBuilder builder; - AppLoading({Key key, @required this.builder}) : super(key: key); + const AppLoading({super.key, required this.builder}); @override Widget build(BuildContext context) { diff --git a/redux/lib/containers/edit_todo.dart b/redux/lib/containers/edit_todo.dart index b9e93023..014e1c38 100644 --- a/redux/lib/containers/edit_todo.dart +++ b/redux/lib/containers/edit_todo.dart @@ -9,7 +9,7 @@ import 'package:redux_sample/presentation/add_edit_screen.dart'; class EditTodo extends StatelessWidget { final Todo todo; - EditTodo({this.todo, Key key}) : super(key: key); + const EditTodo({super.key, required this.todo}); @override Widget build(BuildContext context) { diff --git a/redux/lib/containers/extra_actions_container.dart b/redux/lib/containers/extra_actions_container.dart index a85d762a..c754e33f 100644 --- a/redux/lib/containers/extra_actions_container.dart +++ b/redux/lib/containers/extra_actions_container.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; @@ -8,7 +7,7 @@ import 'package:redux_sample/presentation/extra_actions_button.dart'; import 'package:redux_sample/selectors/selectors.dart'; class ExtraActionsContainer extends StatelessWidget { - ExtraActionsContainer({Key key}) : super(key: key); + const ExtraActionsContainer({super.key}); @override Widget build(BuildContext context) { @@ -26,10 +25,10 @@ class ExtraActionsContainer extends StatelessWidget { } class _ViewModel { - final Function(ExtraAction) onActionSelected; + final void Function(ExtraAction) onActionSelected; final bool allComplete; - _ViewModel({@required this.onActionSelected, @required this.allComplete}); + _ViewModel({required this.onActionSelected, required this.allComplete}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/redux/lib/containers/filter_selector.dart b/redux/lib/containers/filter_selector.dart index 74ce9a33..94b520e3 100644 --- a/redux/lib/containers/filter_selector.dart +++ b/redux/lib/containers/filter_selector.dart @@ -1,5 +1,4 @@ import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; @@ -9,7 +8,7 @@ import 'package:redux_sample/presentation/filter_button.dart'; class FilterSelector extends StatelessWidget { final bool visible; - FilterSelector({Key key, @required this.visible}) : super(key: key); + const FilterSelector({super.key, required this.visible}); @override Widget build(BuildContext context) { @@ -28,10 +27,10 @@ class FilterSelector extends StatelessWidget { } class _ViewModel { - final Function(VisibilityFilter) onFilterSelected; + final void Function(VisibilityFilter) onFilterSelected; final VisibilityFilter activeFilter; - _ViewModel({@required this.onFilterSelected, @required this.activeFilter}); + _ViewModel({required this.onFilterSelected, required this.activeFilter}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/redux/lib/containers/filtered_todos.dart b/redux/lib/containers/filtered_todos.dart index 106711d3..bc3e4805 100644 --- a/redux/lib/containers/filtered_todos.dart +++ b/redux/lib/containers/filtered_todos.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; @@ -8,7 +7,7 @@ import 'package:redux_sample/presentation/todo_list.dart'; import 'package:redux_sample/selectors/selectors.dart'; class FilteredTodos extends StatelessWidget { - FilteredTodos({Key key}) : super(key: key); + const FilteredTodos({super.key}); @override Widget build(BuildContext context) { @@ -29,16 +28,16 @@ class FilteredTodos extends StatelessWidget { class _ViewModel { final List todos; final bool loading; - final Function(Todo, bool) onCheckboxChanged; - final Function(Todo) onRemove; - final Function(Todo) onUndoRemove; + final void Function(Todo, bool?) onCheckboxChanged; + final void Function(Todo) onRemove; + final void Function(Todo) onUndoRemove; _ViewModel({ - @required this.todos, - @required this.loading, - @required this.onCheckboxChanged, - @required this.onRemove, - @required this.onUndoRemove, + required this.todos, + required this.loading, + required this.onCheckboxChanged, + required this.onRemove, + required this.onUndoRemove, }); static _ViewModel fromStore(Store store) { diff --git a/redux/lib/containers/stats.dart b/redux/lib/containers/stats.dart index 5fc25fa9..04cdf8bd 100644 --- a/redux/lib/containers/stats.dart +++ b/redux/lib/containers/stats.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; @@ -7,7 +6,7 @@ import 'package:redux_sample/presentation/stats_counter.dart'; import 'package:redux_sample/selectors/selectors.dart'; class Stats extends StatelessWidget { - Stats({Key key}) : super(key: key); + const Stats({super.key}); @override Widget build(BuildContext context) { @@ -28,7 +27,7 @@ class _ViewModel { final int numCompleted; final int numActive; - _ViewModel({@required this.numCompleted, @required this.numActive}); + _ViewModel({required this.numCompleted, required this.numActive}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/redux/lib/containers/tab_selector.dart b/redux/lib/containers/tab_selector.dart index 470b01e5..0c56a69d 100644 --- a/redux/lib/containers/tab_selector.dart +++ b/redux/lib/containers/tab_selector.dart @@ -1,14 +1,12 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TabSelector extends StatelessWidget { - TabSelector({Key key}) : super(key: key); + const TabSelector({super.key}); @override Widget build(BuildContext context) { @@ -28,11 +26,9 @@ class TabSelector extends StatelessWidget { ? ArchSampleKeys.todoTab : ArchSampleKeys.statsTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ); @@ -43,9 +39,9 @@ class TabSelector extends StatelessWidget { class _ViewModel { final AppTab activeTab; - final Function(int) onTabSelected; + final void Function(int) onTabSelected; - _ViewModel({@required this.activeTab, @required this.onTabSelected}); + _ViewModel({required this.activeTab, required this.onTabSelected}); static _ViewModel fromStore(Store store) { return _ViewModel( diff --git a/redux/lib/containers/todo_details.dart b/redux/lib/containers/todo_details.dart index c6bae809..2cd4ab82 100644 --- a/redux/lib/containers/todo_details.dart +++ b/redux/lib/containers/todo_details.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; @@ -10,7 +9,7 @@ import 'package:redux_sample/selectors/selectors.dart'; class TodoDetails extends StatelessWidget { final String id; - TodoDetails({Key key, @required this.id}) : super(key: key); + const TodoDetails({super.key, required this.id}); @override Widget build(BuildContext context) { @@ -32,13 +31,13 @@ class TodoDetails extends StatelessWidget { class _ViewModel { final Todo todo; - final Function onDelete; - final Function(bool) toggleCompleted; + final void Function() onDelete; + final void Function(bool?) toggleCompleted; _ViewModel({ - @required this.todo, - @required this.onDelete, - @required this.toggleCompleted, + required this.todo, + required this.onDelete, + required this.toggleCompleted, }); factory _ViewModel.from(Store store, String id) { diff --git a/redux/lib/localization.dart b/redux/lib/localization.dart index 172fb647..38ba4ddc 100644 --- a/redux/lib/localization.dart +++ b/redux/lib/localization.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; class ReduxLocalizations { static ReduxLocalizations of(BuildContext context) { - return Localizations.of(context, ReduxLocalizations); + return Localizations.of(context, ReduxLocalizations)!; } String get appTitle => 'Redux Example'; diff --git a/redux/lib/main.dart b/redux/lib/main.dart index 2a4a7f43..77b65054 100644 --- a/redux/lib/main.dart +++ b/redux/lib/main.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:redux/redux.dart'; import 'package:redux_sample/app.dart'; import 'package:redux_sample/reducers/app_state_reducer.dart'; @@ -21,7 +20,7 @@ Future main() async { LocalStorageRepository( localStorage: KeyValueStorage( 'redux', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + await SharedPreferences.getInstance(), ), ), ), diff --git a/redux/lib/main_web.dart b/redux/lib/main_web.dart deleted file mode 100644 index cc6e1ace..00000000 --- a/redux/lib/main_web.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'dart:html'; - -import 'package:flutter/material.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:redux/redux.dart'; -import 'package:redux_sample/app.dart'; -import 'package:redux_sample/middleware/store_todos_middleware.dart'; -import 'package:redux_sample/models/app_state.dart'; -import 'package:redux_sample/reducers/app_state_reducer.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - ReduxApp( - store: Store( - appReducer, - initialState: AppState.loading(), - middleware: createStoreTodosMiddleware( - LocalStorageRepository( - localStorage: KeyValueStorage( - 'redux', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ), - ), - ); -} diff --git a/redux/lib/middleware/store_todos_middleware.dart b/redux/lib/middleware/store_todos_middleware.dart index f596c118..af0feac0 100644 --- a/redux/lib/middleware/store_todos_middleware.dart +++ b/redux/lib/middleware/store_todos_middleware.dart @@ -11,13 +11,13 @@ List> createStoreTodosMiddleware( final loadTodos = _createLoadTodos(repository); return [ - TypedMiddleware(loadTodos), - TypedMiddleware(saveTodos), - TypedMiddleware(saveTodos), - TypedMiddleware(saveTodos), - TypedMiddleware(saveTodos), - TypedMiddleware(saveTodos), - TypedMiddleware(saveTodos), + TypedMiddleware(loadTodos).call, + TypedMiddleware(saveTodos).call, + TypedMiddleware(saveTodos).call, + TypedMiddleware(saveTodos).call, + TypedMiddleware(saveTodos).call, + TypedMiddleware(saveTodos).call, + TypedMiddleware(saveTodos).call, ]; } @@ -40,7 +40,9 @@ Middleware _createLoadTodos(TodosRepository repository) { TodosLoadedAction(todos.map(Todo.fromEntity).toList()), ); }) - .catchError((_) => store.dispatch(TodosNotLoadedAction())); + .catchError((_) { + store.dispatch(TodosNotLoadedAction()); + }); next(action); }; diff --git a/redux/lib/models/app_state.dart b/redux/lib/models/app_state.dart index 062b9dff..cea509d9 100644 --- a/redux/lib/models/app_state.dart +++ b/redux/lib/models/app_state.dart @@ -8,7 +8,7 @@ class AppState { final AppTab activeTab; final VisibilityFilter activeFilter; - AppState({ + const AppState({ this.isLoading = false, this.todos = const [], this.activeTab = AppTab.todos, @@ -18,10 +18,10 @@ class AppState { factory AppState.loading() => AppState(isLoading: true); AppState copyWith({ - bool isLoading, - List todos, - AppTab activeTab, - VisibilityFilter activeFilter, + bool? isLoading, + List? todos, + AppTab? activeTab, + VisibilityFilter? activeFilter, }) { return AppState( isLoading: isLoading ?? this.isLoading, diff --git a/redux/lib/models/todo.dart b/redux/lib/models/todo.dart index 84dadd81..ccdf3cbd 100644 --- a/redux/lib/models/todo.dart +++ b/redux/lib/models/todo.dart @@ -1,5 +1,5 @@ -import 'package:todos_app_core/todos_app_core.dart'; import 'package:meta/meta.dart'; +import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @immutable @@ -9,11 +9,10 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, String note = '', String id}) - : note = note ?? '', - id = id ?? Uuid().generateV4(); + Todo(this.task, {this.complete = false, this.note = '', String? id}) + : id = id ?? Uuid().generateV4(); - Todo copyWith({bool complete, String id, String note, String task}) { + Todo copyWith({bool? complete, String? id, String? note, String? task}) { return Todo( task ?? this.task, complete: complete ?? this.complete, @@ -48,9 +47,9 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, - id: entity.id ?? Uuid().generateV4(), + id: entity.id, ); } } diff --git a/redux/lib/presentation/add_edit_screen.dart b/redux/lib/presentation/add_edit_screen.dart index 015e89f3..1e7a4540 100644 --- a/redux/lib/presentation/add_edit_screen.dart +++ b/redux/lib/presentation/add_edit_screen.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:redux_sample/models/models.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -8,23 +7,24 @@ typedef OnSaveCallback = void Function(String task, String note); class AddEditScreen extends StatefulWidget { final bool isEditing; final OnSaveCallback onSave; - final Todo todo; + final Todo? todo; - AddEditScreen({ - Key key, - @required this.onSave, - @required this.isEditing, + const AddEditScreen({ + super.key = ArchSampleKeys.addTodoScreen, + required this.onSave, + required this.isEditing, this.todo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + }); + @override - _AddEditScreenState createState() => _AddEditScreenState(); + AddEditScreenState createState() => AddEditScreenState(); } -class _AddEditScreenState extends State { +class AddEditScreenState extends State { static final GlobalKey _formKey = GlobalKey(); - String _task; - String _note; + late String _task; + late String _note; bool get isEditing => widget.isEditing; @@ -44,7 +44,7 @@ class _AddEditScreenState extends State { child: ListView( children: [ TextFormField( - initialValue: isEditing ? widget.todo.task : '', + initialValue: isEditing ? widget.todo!.task : '', key: ArchSampleKeys.taskField, autofocus: !isEditing, style: textTheme.titleLarge, @@ -52,19 +52,19 @@ class _AddEditScreenState extends State { hintText: localizations.newTodoHint, ), validator: (val) { - return val.trim().isEmpty + return val != null && val.trim().isEmpty ? localizations.emptyTodoError : null; }, - onSaved: (value) => _task = value, + onSaved: (value) => _task = value ?? '', ), TextFormField( - initialValue: isEditing ? widget.todo.note : '', + initialValue: isEditing ? widget.todo!.note : '', key: ArchSampleKeys.noteField, maxLines: 10, style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), - onSaved: (value) => _note = value, + onSaved: (value) => _note = value ?? '', ), ], ), @@ -77,8 +77,8 @@ class _AddEditScreenState extends State { tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); widget.onSave(_task, _note); Navigator.pop(context); diff --git a/redux/lib/presentation/details_screen.dart b/redux/lib/presentation/details_screen.dart index 7644a7d6..57f36584 100644 --- a/redux/lib/presentation/details_screen.dart +++ b/redux/lib/presentation/details_screen.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:redux_sample/containers/edit_todo.dart'; import 'package:redux_sample/models/models.dart'; @@ -6,15 +5,15 @@ import 'package:todos_app_core/todos_app_core.dart'; class DetailsScreen extends StatelessWidget { final Todo todo; - final Function onDelete; - final Function(bool) toggleCompleted; + final void Function() onDelete; + final void Function(bool?) toggleCompleted; - DetailsScreen({ - Key key, - @required this.todo, - @required this.onDelete, - @required this.toggleCompleted, - }) : super(key: key ?? ArchSampleKeys.todoDetailsScreen); + const DetailsScreen({ + super.key = ArchSampleKeys.todoDetailsScreen, + required this.todo, + required this.onDelete, + required this.toggleCompleted, + }); @override Widget build(BuildContext context) { diff --git a/redux/lib/presentation/extra_actions_button.dart b/redux/lib/presentation/extra_actions_button.dart index 8da29726..1c0cf329 100644 --- a/redux/lib/presentation/extra_actions_button.dart +++ b/redux/lib/presentation/extra_actions_button.dart @@ -1,13 +1,16 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class ExtraActionsButton extends StatelessWidget { final PopupMenuItemSelected onSelected; final bool allComplete; - ExtraActionsButton({this.onSelected, this.allComplete = false, Key key}) - : super(key: ArchSampleKeys.extraActionsButton); + const ExtraActionsButton({ + super.key = ArchSampleKeys.extraActionsButton, + required this.onSelected, + this.allComplete = false, + }); @override Widget build(BuildContext context) { diff --git a/redux/lib/presentation/filter_button.dart b/redux/lib/presentation/filter_button.dart index fec824b3..0c37f8f4 100644 --- a/redux/lib/presentation/filter_button.dart +++ b/redux/lib/presentation/filter_button.dart @@ -7,15 +7,20 @@ class FilterButton extends StatelessWidget { final VisibilityFilter activeFilter; final bool visible; - FilterButton({this.onSelected, this.activeFilter, this.visible, Key key}) - : super(key: key); + const FilterButton({ + super.key, + required this.onSelected, + required this.activeFilter, + required this.visible, + }); @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.bodyMedium; - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final defaultStyle = Theme.of(context).textTheme.bodyMedium!; + final activeStyle = defaultStyle.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); + final button = _Button( onSelected: onSelected, activeFilter: activeFilter, @@ -33,12 +38,11 @@ class FilterButton extends StatelessWidget { class _Button extends StatelessWidget { const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); + required this.onSelected, + required this.activeFilter, + required this.activeStyle, + required this.defaultStyle, + }); final PopupMenuItemSelected onSelected; final VisibilityFilter activeFilter; diff --git a/redux/lib/presentation/home_screen.dart b/redux/lib/presentation/home_screen.dart index 5efcbac8..2af4a899 100644 --- a/redux/lib/presentation/home_screen.dart +++ b/redux/lib/presentation/home_screen.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/containers/active_tab.dart'; import 'package:redux_sample/containers/extra_actions_container.dart'; import 'package:redux_sample/containers/filter_selector.dart'; @@ -8,11 +7,15 @@ import 'package:redux_sample/containers/stats.dart'; import 'package:redux_sample/containers/tab_selector.dart'; import 'package:redux_sample/localization.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class HomeScreen extends StatefulWidget { final void Function() onInit; - HomeScreen({@required this.onInit}) : super(key: ArchSampleKeys.homeScreen); + const HomeScreen({ + super.key = ArchSampleKeys.homeScreen, + required this.onInit, + }); @override HomeScreenState createState() => HomeScreenState(); @@ -43,8 +46,8 @@ class HomeScreenState extends State { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.add), ), bottomNavigationBar: TabSelector(), ); diff --git a/redux/lib/presentation/loading_indicator.dart b/redux/lib/presentation/loading_indicator.dart index e9884bb8..9d9fea74 100644 --- a/redux/lib/presentation/loading_indicator.dart +++ b/redux/lib/presentation/loading_indicator.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class LoadingIndicator extends StatelessWidget { - LoadingIndicator({Key key}) : super(key: key); + const LoadingIndicator({super.key = ArchSampleKeys.todosLoading}); @override Widget build(BuildContext context) { diff --git a/redux/lib/presentation/stats_counter.dart b/redux/lib/presentation/stats_counter.dart index af48fb2f..9a37df94 100644 --- a/redux/lib/presentation/stats_counter.dart +++ b/redux/lib/presentation/stats_counter.dart @@ -1,5 +1,3 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:redux_sample/containers/app_loading.dart'; import 'package:redux_sample/presentation/loading_indicator.dart'; @@ -9,7 +7,11 @@ class StatsCounter extends StatelessWidget { final int numActive; final int numCompleted; - StatsCounter({@required this.numActive, @required this.numCompleted}); + const StatsCounter({ + super.key, + required this.numActive, + required this.numCompleted, + }); @override Widget build(BuildContext context) { diff --git a/redux/lib/presentation/todo_item.dart b/redux/lib/presentation/todo_item.dart index 592ee319..23863554 100644 --- a/redux/lib/presentation/todo_item.dart +++ b/redux/lib/presentation/todo_item.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:redux_sample/models/models.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -6,14 +5,15 @@ import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, + const TodoItem({ + super.key, + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, }); @override @@ -30,7 +30,7 @@ class TodoItem extends StatelessWidget { ), title: Hero( tag: '${todo.id}__heroTag', - child: Container( + child: SizedBox( width: MediaQuery.of(context).size.width, child: Text( todo.task, diff --git a/redux/lib/presentation/todo_list.dart b/redux/lib/presentation/todo_list.dart index 4cd9934a..4923d503 100644 --- a/redux/lib/presentation/todo_list.dart +++ b/redux/lib/presentation/todo_list.dart @@ -1,33 +1,30 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/containers/app_loading.dart'; import 'package:redux_sample/containers/todo_details.dart'; import 'package:redux_sample/models/models.dart'; import 'package:redux_sample/presentation/loading_indicator.dart'; import 'package:redux_sample/presentation/todo_item.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoList extends StatelessWidget { final List todos; - final Function(Todo, bool) onCheckboxChanged; - final Function(Todo) onRemove; - final Function(Todo) onUndoRemove; + final void Function(Todo, bool?) onCheckboxChanged; + final void Function(Todo) onRemove; + final void Function(Todo) onUndoRemove; - TodoList({ - Key key, - @required this.todos, - @required this.onCheckboxChanged, - @required this.onRemove, - @required this.onUndoRemove, - }) : super(key: key); + const TodoList({ + super.key, + required this.todos, + required this.onCheckboxChanged, + required this.onRemove, + required this.onUndoRemove, + }); @override Widget build(BuildContext context) { return AppLoading( builder: (context, loading) { - return loading - ? LoadingIndicator(key: ArchSampleKeys.todosLoading) - : _buildListView(); + return loading ? LoadingIndicator() : _buildListView(); }, ); } @@ -56,7 +53,7 @@ class TodoList extends StatelessWidget { void _removeTodo(BuildContext context, Todo todo) { onRemove(todo); - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( duration: Duration(seconds: 2), content: Text( @@ -74,10 +71,10 @@ class TodoList extends StatelessWidget { void _onTodoTap(BuildContext context, Todo todo) { Navigator.of(context) - .push(MaterialPageRoute(builder: (_) => TodoDetails(id: todo.id))) + .push(MaterialPageRoute(builder: (_) => TodoDetails(id: todo.id))) .then((removedTodo) { - if (removedTodo != null) { - Scaffold.of(context).showSnackBar( + if (removedTodo != null && context.mounted) { + ScaffoldMessenger.of(context).showSnackBar( SnackBar( key: ArchSampleKeys.snackbar, duration: Duration(seconds: 2), diff --git a/redux/lib/reducers/app_state_reducer.dart b/redux/lib/reducers/app_state_reducer.dart index ad6f1cc7..b9f292af 100644 --- a/redux/lib/reducers/app_state_reducer.dart +++ b/redux/lib/reducers/app_state_reducer.dart @@ -5,7 +5,7 @@ import 'package:redux_sample/reducers/todos_reducer.dart'; import 'package:redux_sample/reducers/visibility_reducer.dart'; // We create the State reducer by combining many smaller reducers into one! -AppState appReducer(AppState state, action) { +AppState appReducer(AppState state, dynamic action) { return AppState( isLoading: loadingReducer(state.isLoading, action), todos: todosReducer(state.todos, action), diff --git a/redux/lib/reducers/loading_reducer.dart b/redux/lib/reducers/loading_reducer.dart index d0ce9533..06227102 100644 --- a/redux/lib/reducers/loading_reducer.dart +++ b/redux/lib/reducers/loading_reducer.dart @@ -2,10 +2,10 @@ import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; final loadingReducer = combineReducers([ - TypedReducer(_setLoaded), - TypedReducer(_setLoaded), + TypedReducer(_setLoaded).call, + TypedReducer(_setLoaded).call, ]); -bool _setLoaded(bool state, action) { +bool _setLoaded(bool state, dynamic action) { return false; } diff --git a/redux/lib/reducers/tabs_reducer.dart b/redux/lib/reducers/tabs_reducer.dart index 86a6ec25..d667ecfe 100644 --- a/redux/lib/reducers/tabs_reducer.dart +++ b/redux/lib/reducers/tabs_reducer.dart @@ -3,9 +3,8 @@ import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; final tabsReducer = combineReducers([ - TypedReducer(_activeTabReducer), + TypedReducer(_activeTabReducer).call, ]); -AppTab _activeTabReducer(AppTab activeTab, UpdateTabAction action) { - return action.newTab; -} +AppTab _activeTabReducer(AppTab activeTab, UpdateTabAction action) => + action.newTab; diff --git a/redux/lib/reducers/todos_reducer.dart b/redux/lib/reducers/todos_reducer.dart index d74e8daa..feeed50d 100644 --- a/redux/lib/reducers/todos_reducer.dart +++ b/redux/lib/reducers/todos_reducer.dart @@ -4,13 +4,13 @@ import 'package:redux_sample/models/models.dart'; import 'package:redux_sample/selectors/selectors.dart'; final todosReducer = combineReducers>([ - TypedReducer, AddTodoAction>(_addTodo), - TypedReducer, DeleteTodoAction>(_deleteTodo), - TypedReducer, UpdateTodoAction>(_updateTodo), - TypedReducer, ClearCompletedAction>(_clearCompleted), - TypedReducer, ToggleAllAction>(_toggleAll), - TypedReducer, TodosLoadedAction>(_setLoadedTodos), - TypedReducer, TodosNotLoadedAction>(_setNoTodos), + TypedReducer, AddTodoAction>(_addTodo).call, + TypedReducer, DeleteTodoAction>(_deleteTodo).call, + TypedReducer, UpdateTodoAction>(_updateTodo).call, + TypedReducer, ClearCompletedAction>(_clearCompleted).call, + TypedReducer, ToggleAllAction>(_toggleAll).call, + TypedReducer, TodosLoadedAction>(_setLoadedTodos).call, + TypedReducer, TodosNotLoadedAction>(_setNoTodos).call, ]); List _addTodo(List todos, AddTodoAction action) { diff --git a/redux/lib/reducers/visibility_reducer.dart b/redux/lib/reducers/visibility_reducer.dart index 974f3e25..dabdb5f4 100644 --- a/redux/lib/reducers/visibility_reducer.dart +++ b/redux/lib/reducers/visibility_reducer.dart @@ -3,12 +3,10 @@ import 'package:redux_sample/actions/actions.dart'; import 'package:redux_sample/models/models.dart'; final visibilityReducer = combineReducers([ - TypedReducer(_activeFilterReducer), + TypedReducer(_activeFilterReducer).call, ]); VisibilityFilter _activeFilterReducer( VisibilityFilter activeFilter, UpdateFilterAction action, -) { - return action.newFilter; -} +) => action.newFilter; diff --git a/redux/lib/selectors/selectors.dart b/redux/lib/selectors/selectors.dart index 9d7b3874..55518f20 100644 --- a/redux/lib/selectors/selectors.dart +++ b/redux/lib/selectors/selectors.dart @@ -1,5 +1,5 @@ -import 'package:todos_app_core/todos_app_core.dart'; import 'package:redux_sample/models/models.dart'; +import 'package:todos_app_core/todos_app_core.dart'; List todosSelector(AppState state) => state.todos; @@ -29,7 +29,6 @@ List filteredTodosSelector( case VisibilityFilter.completed: return todo.complete; case VisibilityFilter.all: - default: return true; } }).toList(); diff --git a/redux/linux/.gitignore b/redux/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/redux/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/redux/linux/CMakeLists.txt b/redux/linux/CMakeLists.txt new file mode 100644 index 00000000..778b7d24 --- /dev/null +++ b/redux/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "redux_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.redux_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/redux/linux/flutter/CMakeLists.txt b/redux/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/redux/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/redux/linux/flutter/generated_plugin_registrant.cc b/redux/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/redux/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/redux/linux/flutter/generated_plugin_registrant.h b/redux/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/redux/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/redux/linux/flutter/generated_plugins.cmake b/redux/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/redux/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/redux/linux/runner/CMakeLists.txt b/redux/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/redux/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/redux/linux/runner/main.cc b/redux/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/redux/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/redux/linux/runner/my_application.cc b/redux/linux/runner/my_application.cc new file mode 100644 index 00000000..567f2378 --- /dev/null +++ b/redux/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "redux_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "redux_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/redux/linux/runner/my_application.h b/redux/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/redux/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/redux/macos/.gitignore b/redux/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/redux/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/redux/macos/Flutter/Flutter-Debug.xcconfig b/redux/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/redux/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/redux/macos/Flutter/Flutter-Release.xcconfig b/redux/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/redux/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/redux/macos/Flutter/GeneratedPluginRegistrant.swift b/redux/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/redux/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/redux/macos/Podfile b/redux/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/redux/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/redux/macos/Podfile.lock b/redux/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/redux/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/redux/macos/Runner.xcodeproj/project.pbxproj b/redux/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..5c1453de --- /dev/null +++ b/redux/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + A0BDCCDD9FE38594F043A2C5 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59DA7F3F064D5DB0DA14E03A /* Pods_RunnerTests.framework */; }; + AA25D07C6F90872979FB7D7E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6966F0123F3819531B0BAA60 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* redux_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = redux_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 5789A6CDB481FE81A6246B2F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 59DA7F3F064D5DB0DA14E03A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6966F0123F3819531B0BAA60 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 82CC2E6BD01825E3FB46470C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 90E611559D867180A313A29C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + CDEE05271C042EC7B7FD482F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + E06C0629C74FBC0EAE5BF142 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FAC92A148E980EF9EB335838 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A0BDCCDD9FE38594F043A2C5 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AA25D07C6F90872979FB7D7E /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 3F33056A10D60697C1997FAA /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* redux_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 3F33056A10D60697C1997FAA /* Pods */ = { + isa = PBXGroup; + children = ( + FAC92A148E980EF9EB335838 /* Pods-Runner.debug.xcconfig */, + E06C0629C74FBC0EAE5BF142 /* Pods-Runner.release.xcconfig */, + CDEE05271C042EC7B7FD482F /* Pods-Runner.profile.xcconfig */, + 5789A6CDB481FE81A6246B2F /* Pods-RunnerTests.debug.xcconfig */, + 82CC2E6BD01825E3FB46470C /* Pods-RunnerTests.release.xcconfig */, + 90E611559D867180A313A29C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6966F0123F3819531B0BAA60 /* Pods_Runner.framework */, + 59DA7F3F064D5DB0DA14E03A /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 68449A94B5081A8EA73F9946 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + C31C8F99AAE62C9EC785713A /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + FE5B6796877EB6F15E0ED952 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* redux_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 68449A94B5081A8EA73F9946 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C31C8F99AAE62C9EC785713A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + FE5B6796877EB6F15E0ED952 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5789A6CDB481FE81A6246B2F /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/redux_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/redux_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 82CC2E6BD01825E3FB46470C /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/redux_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/redux_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 90E611559D867180A313A29C /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/redux_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/redux_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/redux/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/redux/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/redux/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/redux/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/redux/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..30749ce3 --- /dev/null +++ b/redux/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/redux/macos/Runner.xcworkspace/contents.xcworkspacedata b/redux/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/redux/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/redux/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/redux/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/redux/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/redux/macos/Runner/AppDelegate.swift b/redux/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/redux/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K#jR^;j87-Auq zoUlN^K{r-Q+XN;zI ze|?*NFmgt#V#GwrSWaz^2G&@SBmck6ZcIFMww~vE<1E?M2#KUn1CzsB6D2+0SuRV@ zV2kK5HvIGB{HX-hQzs0*AB%5$9RJ@a;)Ahq#p$GSP91^&hi#6sg*;a~dt}4AclK>h z_3MoPRQ{i;==;*1S-mY<(JFzhAxMI&<61&m$J0NDHdJ3tYx~j0%M-uN6Zl8~_0DOkGXc0001@sz3l12C6Xg{AT~( zm6w64BA|AX`Ve)YY-glyudNN>MAfkXz-T7`_`fEolM;0T0BA)(02-OaW z0*cW7Z~ec94o8&g0D$N>b!COu{=m}^%oXZ4?T8ZyPZuGGBPBA7pbQMoV5HYhiT?%! zcae~`(QAN4&}-=#2f5fkn!SWGWmSeCISBcS=1-U|MEoKq=k?_x3apK>9((R zuu$9X?^8?@(a{qMS%J8SJPq))v}Q-ZyDm6Gbie0m92=`YlwnQPQP1kGSm(N2UJ3P6 z^{p-u)SSCTW~c1rw;cM)-uL2{->wCn2{#%;AtCQ!m%AakVs1K#v@(*-6QavyY&v&*wO_rCJXJuq$c$7ZjsW+pJo-$L^@!7X04CvaOpPyfw|FKvu;e(&Iw>Tbg zL}#8e^?X%TReXTt>gsBByt0kSU20oQx*~P=4`&tcZ7N6t-6LiK{LxX*p6}9c<0Pu^ zLx1w_P4P2V>bX=`F%v$#{sUDdF|;rbI{p#ZW`00Bgh(eB(nOIhy8W9T>3aQ=k8Z9% zB+TusFABF~J?N~fAd}1Rme=@4+1=M{^P`~se7}e3;mY0!%#MJf!XSrUC{0uZqMAd7%q zQY#$A>q}noIB4g54Ue)x>ofVm3DKBbUmS4Z-bm7KdKsUixva)1*&z5rgAG2gxG+_x zqT-KNY4g7eM!?>==;uD9Y4iI(Hu$pl8!LrK_Zb}5nv(XKW{9R144E!cFf36p{i|8pRL~p`_^iNo z{mf7y`#hejw#^#7oKPlN_Td{psNpNnM?{7{R-ICBtYxk>?3}OTH_8WkfaTLw)ZRTfxjW+0>gMe zpKg~`Bc$Y>^VX;ks^J0oKhB#6Ukt{oQhN+o2FKGZx}~j`cQB%vVsMFnm~R_1Y&Ml? zwFfb~d|dW~UktY@?zkau>Owe zRroi(<)c4Ux&wJfY=3I=vg)uh;sL(IYY9r$WK1$F;jYqq1>xT{LCkIMb3t2jN8d`9 z=4(v-z7vHucc_fjkpS}mGC{ND+J-hc_0Ix4kT^~{-2n|;Jmn|Xf9wGudDk7bi*?^+ z7fku8z*mbkGm&xf&lmu#=b5mp{X(AwtLTf!N`7FmOmX=4xwbD=fEo8CaB1d1=$|)+ z+Dlf^GzGOdlqTO8EwO?8;r+b;gkaF^$;+#~2_YYVH!hD6r;PaWdm#V=BJ1gH9ZK_9 zrAiIC-)z)hRq6i5+$JVmR!m4P>3yJ%lH)O&wtCyum3A*})*fHODD2nq!1@M>t@Za+ zH6{(Vf>_7!I-APmpsGLYpl7jww@s5hHOj5LCQXh)YAp+y{gG(0UMm(Ur z3o3n36oFwCkn+H*GZ-c6$Y!5r3z*@z0`NrB2C^q#LkOuooUM8Oek2KBk}o1PU8&2L z4iNkb5CqJWs58aR394iCU^ImDqV;q_Pp?pl=RB2372(Io^GA^+oKguO1(x$0<7w3z z)j{vnqEB679Rz4i4t;8|&Zg77UrklxY9@GDq(ZphH6=sW`;@uIt5B?7Oi?A0-BL}(#1&R;>2aFdq+E{jsvpNHjLx2t{@g1}c~DQcPNmVmy| zNMO@ewD^+T!|!DCOf}s9dLJU}(KZy@Jc&2Nq3^;vHTs}Hgcp`cw&gd7#N}nAFe3cM1TF%vKbKSffd&~FG9y$gLyr{#to)nxz5cCASEzQ}gz8O)phtHuKOW6p z@EQF(R>j%~P63Wfosrz8p(F=D|Mff~chUGn(<=CQbSiZ{t!e zeDU-pPsLgtc#d`3PYr$i*AaT!zF#23htIG&?QfcUk+@k$LZI}v+js|yuGmE!PvAV3 ztzh90rK-0L6P}s?1QH`Ot@ilbgMBzWIs zIs6K<_NL$O4lwR%zH4oJ+}JJp-bL6~%k&p)NGDMNZX7)0kni&%^sH|T?A)`z z=adV?!qnWx^B$|LD3BaA(G=ePL1+}8iu^SnnD;VE1@VLHMVdSN9$d)R(Wk{JEOp(P zm3LtAL$b^*JsQ0W&eLaoYag~=fRRdI>#FaELCO7L>zXe6w*nxN$Iy*Q*ftHUX0+N- zU>{D_;RRVPbQ?U+$^%{lhOMKyE5>$?U1aEPist+r)b47_LehJGTu>TcgZe&J{ z{q&D{^Ps~z7|zj~rpoh2I_{gAYNoCIJmio3B}$!5vTF*h$Q*vFj~qbo%bJCCRy509 zHTdDh_HYH8Zb9`}D5;;J9fkWOQi%Y$B1!b9+ESj+B@dtAztlY2O3NE<6HFiqOF&p_ zW-K`KiY@RPSY-p9Q99}Hcd05DT79_pfb{BV7r~?9pWh=;mcKBLTen%THFPo2NN~Nf zriOtFnqx}rtO|A6k!r6 zf-z?y-UD{dT0kT9FJ`-oWuPHbo+3wBS(}?2ql(+e@VTExmfnB*liCb zmeI+v5*+W_L;&kQN^ChW{jE0Mw#0Tfs}`9bk3&7UjxP^Ke(%eJu2{VnW?tu7Iqecm zB5|=-QdzK$=h50~{X3*w4%o1FS_u(dG2s&427$lJ?6bkLet}yYXCy)u_Io1&g^c#( z-$yYmSpxz{>BL;~c+~sxJIe1$7eZI_9t`eB^Pr0)5CuA}w;;7#RvPq|H6!byRzIJG ziQ7a4y_vhj(AL`8PhIm9edCv|%TX#f50lt8+&V+D4<}IA@S@#f4xId80oH$!_!q?@ zFRGGg2mTv&@76P7aTI{)Hu%>3QS_d)pQ%g8BYi58K~m-Ov^7r8BhX7YC1D3vwz&N8{?H*_U7DI?CI)+et?q|eGu>42NJ?K4SY zD?kc>h@%4IqNYuQ8m10+8xr2HYg2qFNdJl=Tmp&ybF>1>pqVfa%SsV*BY$d6<@iJA ziyvKnZ(~F9xQNokBgMci#pnZ}Igh0@S~cYcU_2Jfuf|d3tuH?ZSSYBfM(Y3-JBsC|S9c;# zyIMkPxgrq};0T09pjj#X?W^TFCMf1-9P{)g88;NDI+S4DXe>7d3Mb~i-h&S|Jy{J< zq3736$bH?@{!amD!1Ys-X)9V=#Z={fzsjVYMX5BG6%}tkzwC#1nQLj1y1f#}8**4Y zAvDZHw8)N)8~oWC88CgzbwOrL9HFbk4}h85^ptuu7A+uc#$f^9`EWv1Vr{5+@~@Uv z#B<;-nt;)!k|fRIg;2DZ(A2M2aC65kOIov|?Mhi1Sl7YOU4c$T(DoRQIGY`ycfkn% zViHzL;E*A{`&L?GP06Foa38+QNGA zw3+Wqs(@q+H{XLJbwZzE(omw%9~LPZfYB|NF5%j%E5kr_xE0u;i?IOIchn~VjeDZ) zAqsqhP0vu2&Tbz3IgJvMpKbThC-@=nk)!|?MIPP>MggZg{cUcKsP8|N#cG5 zUXMXxcXBF9`p>09IR?x$Ry3;q@x*%}G#lnB1}r#!WL88I@uvm}X98cZ8KO&cqT1p> z+gT=IxPsq%n4GWgh-Bk8E4!~`r@t>DaQKsjDqYc&h$p~TCh8_Mck5UB84u6Jl@kUZCU9BA-S!*bf>ZotFX9?a_^y%)yH~rsAz0M5#^Di80_tgoKw(egN z`)#(MqAI&A84J#Z<|4`Co8`iY+Cv&iboMJ^f9ROUK0Lm$;-T*c;TCTED_0|qfhlcS zv;BD*$Zko#nWPL}2K8T-?4}p{u)4xon!v_(yVW8VMpxg4Kh^J6WM{IlD{s?%XRT8P|yCU`R&6gwB~ zg}{At!iWCzOH37!ytcPeC`(({ovP7M5Y@bYYMZ}P2Z3=Y_hT)4DRk}wfeIo%q*M9UvXYJq!-@Ly79m5aLD{hf@BzQB>FdQ4mw z6$@vzSKF^Gnzc9vbccii)==~9H#KW<6)Uy1wb~auBn6s`ct!ZEos`WK8e2%<00b%# zY9Nvnmj@V^K(a_38dw-S*;G-(i(ETuIwyirs?$FFW@|66a38k+a%GLmucL%Wc8qk3 z?h_4!?4Y-xt)ry)>J`SuY**fuq2>u+)VZ+_1Egzctb*xJ6+7q`K$^f~r|!i?(07CD zH!)C_uerf-AHNa?6Y61D_MjGu*|wcO+ZMOo4q2bWpvjEWK9yASk%)QhwZS%N2_F4& z16D18>e%Q1mZb`R;vW{+IUoKE`y3(7p zplg5cBB)dtf^SdLd4n60oWie|(ZjgZa6L*VKq02Aij+?Qfr#1z#fwh92aV-HGd^_w zsucG24j8b|pk>BO7k8dS86>f-jBP^Sa}SF{YNn=^NU9mLOdKcAstv&GV>r zLxKHPkFxpvE8^r@MSF6UA}cG`#yFL8;kA7ccH9D=BGBtW2;H>C`FjnF^P}(G{wU;G z!LXLCbPfsGeLCQ{Ep$^~)@?v`q(uI`CxBY44osPcq@(rR-633!qa zsyb>?v%@X+e|Mg`+kRL*(;X>^BNZz{_kw5+K;w?#pReiw7eU8_Z^hhJ&fj80XQkuU z39?-z)6Fy$I`bEiMheS(iB6uLmiMd1i)cbK*9iPpl+h4x9ch7x- z1h4H;W_G?|)i`z??KNJVwgfuAM=7&Apd3vm#AT8uzQZ!NII}}@!j)eIfn53h{NmN7 zAKG6SnKP%^k&R~m5#@_4B@V?hYyHkm>0SQ@PPiw*@Tp@UhP-?w@jW?nxXuCipMW=L zH*5l*d@+jXm0tIMP_ec6Jcy6$w(gKK@xBX8@%oPaSyG;13qkFb*LuVx3{AgIyy&n3 z@R2_DcEn|75_?-v5_o~%xEt~ONB>M~tpL!nOVBLPN&e5bn5>+7o0?Nm|EGJ5 zmUbF{u|Qn?cu5}n4@9}g(G1JxtzkKv(tqwm_?1`?YSVA2IS4WI+*(2D*wh&6MIEhw z+B+2U<&E&|YA=3>?^i6)@n1&&;WGHF-pqi_sN&^C9xoxME5UgorQ_hh1__zzR#zVC zOQt4q6>ME^iPJ37*(kg4^=EFqyKH@6HEHXy79oLj{vFqZGY?sVjk!BX^h$SFJlJnv z5uw~2jLpA)|0=tp>qG*tuLru?-u`khGG2)o{+iDx&nC}eWj3^zx|T`xn5SuR;Aw8U z`p&>dJw`F17@J8YAuW4=;leBE%qagVTG5SZdh&d)(#ZhowZ|cvWvGMMrfVsbg>_~! z19fRz8CSJdrD|Rl)w!uznBF&2-dg{>y4l+6(L(vzbLA0Bk&`=;oQQ>(M8G=3kto_) zP8HD*n4?MySO2YrG6fwSrVmnesW+D&fxjfEmp=tPd?RKLZJcH&K(-S+x)2~QZ$c(> zru?MND7_HPZJVF%wX(49H)+~!7*!I8w72v&{b={#l9yz+S_aVPc_So%iF8>$XD1q1 zFtucO=rBj0Ctmi0{njN8l@}!LX}@dwl>3yMxZ;7 z0Ff2oh8L)YuaAGOuZ5`-p%Z4H@H$;_XRJQ|&(MhO78E|nyFa158gAxG^SP(vGi^+< zChY}o(_=ci3Wta#|K6MVljNe0T$%Q5ylx-v`R)r8;3+VUpp-)7T`-Y&{Zk z*)1*2MW+_eOJtF5tCMDV`}jg-R(_IzeE9|MBKl;a7&(pCLz}5<Zf+)T7bgNUQ_!gZtMlw=8doE}#W+`Xp~1DlE=d5SPT?ymu!r4z%&#A-@x^=QfvDkfx5-jz+h zoZ1OK)2|}_+UI)i9%8sJ9X<7AA?g&_Wd7g#rttHZE;J*7!e5B^zdb%jBj&dUDg4&B zMMYrJ$Z%t!5z6=pMGuO-VF~2dwjoXY+kvR>`N7UYfIBMZGP|C7*O=tU z2Tg_xi#Q3S=1|=WRfZD;HT<1D?GMR%5kI^KWwGrC@P2@R>mDT^3qsmbBiJc21kip~ zZp<7;^w{R;JqZ)C4z-^wL=&dBYj9WJBh&rd^A^n@07qM$c+kGv^f+~mU5_*|eePF| z3wDo-qaoRjmIw<2DjMTG4$HP{z54_te_{W^gu8$r=q0JgowzgQPct2JNtWPUsjF8R zvit&V8$(;7a_m%%9TqPkCXYUp&k*MRcwr*24>hR! z$4c#E=PVE=P4MLTUBM z7#*RDe0}=B)(3cvNpOmWa*eH#2HR?NVqXdJ=hq);MGD07JIQQ7Y0#iD!$C+mk7x&B zMwkS@H%>|fmSu#+ zI!}Sb(%o29Vkp_Th>&&!k7O>Ba#Om~B_J{pT7BHHd8(Ede(l`7O#`_}19hr_?~JP9 z`q(`<)y>%)x;O7)#-wfCP{?llFMoH!)ZomgsOYFvZ1DxrlYhkWRw#E-#Qf*z@Y-EQ z1~?_=c@M4DO@8AzZ2hKvw8CgitzI9yFd&N1-{|vP#4IqYb*#S0e3hrjsEGlnc4xwk z4o!0rxpUt8j&`mJ8?+P8G{m^jbk)bo_UPM+ifW*y-A*et`#_Ja_3nYyRa9fAG1Xr5 z>#AM_@PY|*u)DGRWJihZvgEh#{*joJN28uN7;i5{kJ*Gb-TERfN{ERe_~$Es~NJCpdKLRvdj4658uYYx{ng7I<6j~w@p%F<7a(Ssib|j z51;=Py(Nu*#hnLx@w&8X%=jrADn3TW>kplnb zYbFIWWVQXN7%Cwn6KnR)kYePEBmvM45I)UJb$)ninpdYg3a5N6pm_7Q+9>!_^xy?k za8@tJ@OOs-pRAAfT>Nc2x=>sZUs2!9Dwa%TTmDggH4fq(x^MW>mcRyJINlAqK$YQCMgR8`>6=Sg$ zFnJZsA8xUBXIN3i70Q%8px@yQPMgVP=>xcPI38jNJK<=6hC={a07+n@R|$bnhB)X$ z(Zc%tadp70vBTnW{OUIjTMe38F}JIH$#A}PB&RosPyFZMD}q}5W%$rh>5#U;m`z2K zc(&WRxx7DQLM-+--^w*EWAIS%bi>h587qkwu|H=hma3T^bGD&Z!`u(RKLeNZ&pI=q$|HOcji(0P1QC!YkAp*u z3%S$kumxR}jU<@6`;*-9=5-&LYRA<~uFrwO3U0k*4|xUTp4ZY7;Zbjx|uw&BWU$zK(w55pWa~#=f$c zNDW0O68N!xCy>G}(CX=;8hJLxAKn@Aj(dbZxO8a$+L$jK8$N-h@4$i8)WqD_%Snh4 zR?{O%k}>lr>w$b$g=VP8mckcCrjnp>uQl5F_6dPM8FWRqs}h`DpfCv20uZhyY~tr8 zkAYW4#yM;*je)n=EAb(q@5BWD8b1_--m$Q-3wbh1hM{8ihq7UUQfg@)l06}y+#=$( z$x>oVYJ47zAC^>HLRE-!HitjUixP6!R98WU+h>zct7g4eD;Mj#FL*a!VW!v-@b(Jv zj@@xM5noCp5%Vk3vY{tyI#oyDV7<$`KG`tktVyC&0DqxA#>V;-3oH%NW|Q&=UQ&zU zXNIT67J4D%5R1k#bW0F}TD`hlW7b)-=-%X4;UxQ*u4bK$mTAp%y&-(?{sXF%e_VH6 zTkt(X)SSN|;8q@8XX6qfR;*$r#HbIrvOj*-5ND8RCrcw4u8D$LXm5zlj@E5<3S0R# z??=E$p{tOk96$SloZ~ARe5`J=dB|Nj?u|zy2r(-*(q^@YwZiTF@QzQyPx_l=IDKa) zqD@0?IHJqSqZ_5`)81?4^~`yiGh6>7?|dKa8!e|}5@&qV!Iu9<@G?E}Vx9EzomB3t zEbMEm$TKGwkHDpirp;FZD#6P5qIlQJ8}rf;lHoz#h4TFFPYmS3+8(13_Mx2`?^=8S z|0)0&dQLJTU6{b%*yrpQe#OKKCrL8}YKw+<#|m`SkgeoN69TzIBQOl_Yg)W*w?NW) z*WxhEp$zQBBazJSE6ygu@O^!@Fr46j=|K`Mmb~xbggw7<)BuC@cT@Bwb^k?o-A zKX^9AyqR?zBtW5UA#siILztgOp?r4qgC`9jYJG_fxlsVSugGprremg-W(K0{O!Nw-DN%=FYCyfYA3&p*K>+|Q}s4rx#CQK zNj^U;sLM#q8}#|PeC$p&jAjqMu(lkp-_50Y&n=qF9`a3`Pr9f;b`-~YZ+Bb0r~c+V z*JJ&|^T{}IHkwjNAaM^V*IQ;rk^hnnA@~?YL}7~^St}XfHf6OMMCd9!vhk#gRA*{L zp?&63axj|Si%^NW05#87zpU_>QpFNb+I00v@cHwvdBn+Un)n2Egdt~LcWOeBW4Okm zD$-e~RD+W|UB;KQ;a7GOU&%p*efGu2$@wR74+&iP8|6#_fmnh^WcJLs)rtz{46);F z4v0OL{ZP9550>2%FE(;SbM*#sqMl*UXOb>ch`fJ|(*bOZ9=EB1+V4fkQ)hjsm3-u^Pk-4ji_uDDHdD>84tER!MvbH`*tG zzvbhBR@}Yd`azQGavooV=<WbvWLlO#x`hyO34mKcxrGv=`{ssnP=0Be5#1B;Co9 zh{TR>tjW2Ny$ZxJpYeg57#0`GP#jxDCU0!H15nL@@G*HLQcRdcsUO3sO9xvtmUcc{F*>FQZcZ5bgwaS^k-j5mmt zI7Z{Xnoml|A(&_{imAjK!kf5>g(oDqDI4C{;Bv162k8sFNr;!qPa2LPh>=1n z=^_9)TsLDvTqK7&*Vfm5k;VXjBW^qN3Tl&}K=X5)oXJs$z3gk0_+7`mJvz{pK|FVs zHw!k&7xVjvY;|(Py<;J{)b#Yjj*LZO7x|~pO4^MJ2LqK3X;Irb%nf}L|gck zE#55_BNsy6m+W{e zo!P59DDo*s@VIi+S|v93PwY6d?CE=S&!JLXwE9{i)DMO*_X90;n2*mPDrL%{iqN!?%-_95J^L z=l<*{em(6|h7DR4+4G3Wr;4*}yrBkbe3}=p7sOW1xj!EZVKSMSd;QPw>uhKK z#>MlS@RB@-`ULv|#zI5GytO{=zp*R__uK~R6&p$q{Y{iNkg61yAgB8C^oy&``{~FK z8hE}H&nIihSozKrOONe5Hu?0Zy04U#0$fB7C6y~?8{or}KNvP)an=QP&W80mj&8WL zEZQF&*FhoMMG6tOjeiCIV;T{I>jhi9hiUwz?bkX3NS-k5eWKy)Mo_orMEg4sV6R6X&i-Q%JG;Esl+kLpn@Bsls9O|i9z`tKB^~1D5)RIBB&J<6T@a4$pUvh$IR$%ubH)joi z!7>ON0DPwx=>0DA>Bb^c?L8N0BBrMl#oDB+GOXJh;Y&6I)#GRy$W5xK%a;KS8BrER zX)M>Rdoc*bqP*L9DDA3lF%U8Yzb6RyIsW@}IKq^i7v&{LeIc=*ZHIbO68x=d=+0T( zev=DT9f|x!IWZNTB#N7}V4;9#V$%Wo0%g>*!MdLOEU>My0^gni9ocID{$g9ytD!gy zKRWT`DVN(lcYjR|(}f0?zgBa3SwunLfAhx><%u0uFkrdyqlh8_g zDKt#R6rA2(Vm2LW_>3lBNYKG_F{TEnnKWGGC15y&OebIRhFL4TeMR*v9i0wPoK#H< zu4){s4K&K)K(9~jgGm;H7lS7y_RYfS;&!Oj5*eqbvEcW^a*i67nevzOZxN6F+K~A%TYEtsAVsR z@J=1hc#Dgs7J2^FL|qV&#WBFQyDtEQ2kPO7m2`)WFhqAob)Y>@{crkil6w9VoA?M6 zADGq*#-hyEVhDG5MQj677XmcWY1_-UO40QEP&+D)rZoYv^1B_^w7zAvWGw&pQyCyx zD|ga$w!ODOxxGf_Qq%V9Z7Q2pFiUOIK818AGeZ-~*R zI1O|SSc=3Z?#61Rd|AXx2)K|F@Z1@x!hBBMhAqiU)J=U|Y)T$h3D?ZPPQgkSosnN! zIqw-t$0fqsOlgw3TlHJF*t$Q@bg$9}A3X=cS@-yU3_vNG_!#9}7=q7!LZ?-%U26W4 z$d>_}*s1>Ac%3uFR;tnl*fNlylJ)}r2^Q3&@+is3BIv<}x>-^_ng;jhdaM}6Sg3?p z0jS|b%QyScy3OQ(V*~l~bK>VC{9@FMuW_JUZO?y(V?LKWD6(MXzh}M3r3{7b4eB(#`(q1m{>Be%_<9jw8HO!x#yF6vez$c#kR+}s zZO-_;25Sxngd(}){zv?ccbLqRAlo;yog>4LH&uZUK1n>x?u49C)Y&2evH5Zgt~666 z_2_z|H5AO5Iqxv_Bn~*y1qzRPcob<+Otod5Xd2&z=C;u+F}zBB@b^UdGdUz|s!H}M zXG%KiLzn3G?FZgdY&3pV$nSeY?ZbU^jhLz9!t0K?ep}EFNqR1@E!f*n>x*!uO*~JF zW9UXWrVgbX1n#76_;&0S7z}(5n-bqnII}_iDsNqfmye@)kRk`w~1 z6j4h4BxcPe6}v)xGm%=z2#tB#^KwbgMTl2I*$9eY|EWAHFc3tO48Xo5rW z5oHD!G4kb?MdrOHV=A+8ThlIqL8Uu+7{G@ zb)cGBm|S^Eh5= z^E^SZ=yeC;6nNCdztw&TdnIz}^Of@Ke*@vjt)0g>Y!4AJvWiL~e7+9#Ibhe)> ziNwh>gWZL@FlWc)wzihocz+%+@*euwXhW%Hb>l7tf8aJe5_ZSH1w-uG|B;9qpcBP0 zM`r1Hu#htOl)4Cl1c7oY^t0e4Jh$-I(}M5kzWqh{F=g&IM#JiC`NDSd@BCKX#y<P@Gwl$3a3w z6<(b|K(X5FIR22M)sy$4jY*F4tT{?wZRI+KkZFb<@j@_C316lu1hq2hA|1wCmR+S@ zRN)YNNE{}i_H`_h&VUT5=Y(lN%m?%QX;6$*1P}K-PcPx>*S55v)qZ@r&Vcic-sjkm z! z=nfW&X`}iAqa_H$H%z3Tyz5&P3%+;93_0b;zxLs)t#B|up}JyV$W4~`8E@+BHQ+!y zuIo-jW!~)MN$2eHwyx-{fyGjAWJ(l8TZtUp?wZWBZ%}krT{f*^fqUh+ywHifw)_F> zp76_kj_B&zFmv$FsPm|L7%x-j!WP>_P6dHnUTv!9ZWrrmAUteBa`rT7$2ixO;ga8U z3!91micm}{!Btk+I%pMgcKs?H4`i+=w0@Ws-CS&n^=2hFTQ#QeOmSz6ttIkzmh^`A zYPq)G1l3h(E$mkyr{mvz*MP`x+PULBn%CDhltKkNo6Uqg!vJ#DA@BIYr9TQ`18Un2 zv$}BYzOQuay9}w(?JV63F$H6WmlYPPpH=R|CPb%C@BCv|&Q|&IcW7*LX?Q%epS z`=CPx{1HnJ9_46^=0VmNb>8JvMw-@&+V8SDLRYsa>hZXEeRbtf5eJ>0@Ds47zIY{N z42EOP9J8G@MXXdeiPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$?lu1NER9Fe^SItioK@|V(ZWmgL zZT;XwPgVuWM>O%^|Dc$VK;n&?9!&g5)aVsG8cjs5UbtxVVnQNOV~7Mrg3+jnU;rhE z6fhW6P)R>_eXrXo-RW*y6RQ_qcb^s1wTu$TwriZ`=JUws>vRi}5x}MW1MR#7p|gIWJlaLK;~xaN}b< z<-@=RX-%1mt`^O0o^~2=CD7pJ<<$Rp-oUL-7PuG>do^5W_Mk#unlP}6I@6NPxY`Q} zuXJF}!0l)vwPNAW;@5DjPRj?*rZxl zwn;A(cFV!xe^CUu+6SrN?xe#mz?&%N9QHf~=KyK%DoB8HKC)=w=3E?1Bqj9RMJs3U z5am3Uv`@+{jgqO^f}Lx_Jp~CoP3N4AMZr~4&d)T`R?`(M{W5WWJV^z~2B|-oih@h^ zD#DuzGbl(P5>()u*YGo*Och=oRr~3P1wOlKqI)udc$|)(bacG5>~p(y>?{JD7nQf_ z*`T^YL06-O>T(s$bi5v~_fWMfnE7Vn%2*tqV|?~m;wSJEVGkNMD>+xCu#um(7}0so zSEu7?_=Q64Q5D+fz~T=Rr=G_!L*P|(-iOK*@X8r{-?oBlnxMNNgCVCN9Y~ocu+?XA zjjovJ9F1W$Nf!{AEv%W~8oahwM}4Ruc+SLs>_I_*uBxdcn1gQ^2F8a*vGjgAXYyh? zWCE@c5R=tbD(F4nL9NS?$PN1V_2*WR?gjv3)4MQeizuH`;sqrhgykEzj z593&TGlm3h`sIXy_U<7(dpRXGgp0TB{>s?}D{fwLe>IV~exweOfH!qM@CV5kib!YA z6O0gvJi_0J8IdEvyP#;PtqP*=;$iI2t(xG2YI-e!)~kaUn~b{6(&n zp)?iJ`z2)Xh%sCV@BkU`XL%_|FnCA?cVv@h*-FOZhY5erbGh)%Q!Av#fJM3Csc_g zC2I6x%$)80`Tkz#KRA!h1FzY`?0es3t!rKDT5EjPe6B=BLPr7s0GW!if;Ip^!AmGW zL;$`Vdre+|FA!I4r6)keFvAx3M#1`}ijBHDzy)3t0gwjl|qC2YB`SSxFKHr(oY#H$)x{L$LL zBdLKTlsOrmb>T0wd=&6l3+_Te>1!j0OU8%b%N342^opKmT)gni(wV($s(>V-fUv@0p8!f`=>PxC|9=nu ze{ToBBj8b<{PLfXV$h8YPgA~E!_sF9bl;QOF{o6t&JdsX?}rW!_&d`#wlB6T_h;Xf zl{4Tz5>qjF4kZgjO7ZiLPRz_~U@k5%?=30+nxEh9?s78gZ07YHB`FV`4%hlQlMJe@J`+e(qzy+h(9yY^ckv_* zb_E6o4p)ZaWfraIoB2)U7_@l(J0O%jm+Or>8}zSSTkM$ASG^w3F|I? z$+eHt7T~04(_WfKh27zqS$6* zzyy-ZyqvSIZ0!kkSvHknm_P*{5TKLQs8S6M=ONuKAUJWtpxbL#2(_huvY(v~Y%%#~ zYgsq$JbLLprKkV)32`liIT$KKEqs$iYxjFlHiRNvBhxbDg*3@Qefw4UM$>i${R5uB zhvTgmqQsKA{vrKN;TSJU2$f9q=y{$oH{<)woSeV>fkIz6D8@KB zf4M%v%f5U2?<8B(xn}xV+gWP?t&oiapJhJbfa;agtz-YM7=hrSuxl8lAc3GgFna#7 zNjX7;`d?oD`#AK+fQ=ZXqfIZFEk{ApzjJF0=yO~Yj{7oQfXl+6v!wNnoqwEvrs81a zGC?yXeSD2NV!ejp{LdZGEtd1TJ)3g{P6j#2jLR`cpo;YX}~_gU&Gd<+~SUJVh+$7S%`zLy^QqndN<_9 zrLwnXrLvW+ew9zX2)5qw7)zIYawgMrh`{_|(nx%u-ur1B7YcLp&WFa24gAuw~& zKJD3~^`Vp_SR$WGGBaMnttT)#fCc^+P$@UHIyBu+TRJWbcw4`CYL@SVGh!X&y%!x~ zaO*m-bTadEcEL6V6*{>irB8qT5Tqd54TC4`h`PVcd^AM6^Qf=GS->x%N70SY-u?qr>o2*OV7LQ=j)pQGv%4~z zz?X;qv*l$QSNjOuQZ>&WZs2^@G^Qas`T8iM{b19dS>DaXX~=jd4B2u`P;B}JjRBi# z_a@&Z5ev1-VphmKlZEZZd2-Lsw!+1S60YwW6@>+NQ=E5PZ+OUEXjgUaXL-E0fo(E* zsjQ{s>n33o#VZm0e%H{`KJi@2ghl8g>a~`?mFjw+$zlt|VJhSU@Y%0TWs>cnD&61fW4e0vFSaXZa4-c}U{4QR8U z;GV3^@(?Dk5uc@RT|+5C8-24->1snH6-?(nwXSnPcLn#X_}y3XS)MI_?zQ$ZAuyg+ z-pjqsw}|hg{$~f0FzmmbZzFC0He_*Vx|_uLc!Ffeb8#+@m#Z^AYcWcZF(^Os8&Z4g zG)y{$_pgrv#=_rV^D|Y<_b@ICleUv>c<0HzJDOsgJb#Rd-Vt@+EBDPyq7dUM9O{Yp zuGUrO?ma2wpuJuwl1M=*+tb|qx7Doj?!F-3Z>Dq_ihFP=d@_JO;vF{iu-6MWYn#=2 zRX6W=`Q`q-+q@Db|6_a1#8B|#%hskH82lS|9`im0UOJn?N#S;Y0$%xZw3*jR(1h5s z?-7D1tnIafviko>q6$UyqVDq1o@cwyCb*})l~x<@s$5D6N=-Uo1yc49p)xMzxwnuZ zHt!(hu-Ek;Fv4MyNTgbW%rPF*dB=;@r3YnrlFV{#-*gKS_qA(G-~TAlZ@Ti~Yxw;k za1EYyX_Up|`rpbZ0&Iv#$;eC|c0r4XGaQ-1mw@M_4p3vKIIpKs49a8Ns#ni)G314Z z8$Ei?AhiT5dQGWUYdCS|IC7r z=-8ol>V?u!n%F*J^^PZ(ONT&$Ph;r6X;pj|03HlDY6r~0g~X#zuzVU%a&!fs_f|m?qYvg^Z{y?9Qh7Rn?T*F%7lUtA6U&={HzhYEzA`knx1VH> z{tqv?p@I(&ObD5L4|YJV$QM>Nh-X3cx{I&!$FoPC_2iIEJfPk-$;4wz>adRu@n`_y z_R6aN|MDHdK;+IJmyw(hMoDCFCQ(6?hCAG5&7p{y->0Uckv# zvooVuu04$+pqof777ftk<#42@KQ((5DPcSMQyzGOJ{e9H$a9<2Qi_oHjl{#=FUL9d z+~0^2`tcvmp0hENwfHR`Ce|<1S@p;MNGInXCtHnrDPXCKmMTZQ{HVm_cZ>@?Wa6}O zHsJc7wE)mc@1OR2DWY%ZIPK1J2p6XDO$ar`$RXkbW}=@rFZ(t85AS>>U0!yt9f49^ zA9@pc0P#k;>+o5bJfx0t)Lq#v4`OcQn~av__dZ-RYOYu}F#pdsl31C^+Qgro}$q~5A<*c|kypzd} ziYGZ~?}5o`S5lw^B{O@laad9M_DuJle- z*9C7o=CJh#QL=V^sFlJ0c?BaB#4bV^T(DS6&Ne&DBM_3E$S^S13qC$7_Z?GYXTpR@wqr70wu$7+qvf-SEUa5mdHvFbu^7ew!Z1a^ zo}xKOuT*gtGws-a{Tx}{#(>G~Y_h&5P@Q8&p!{*s37^QX_Ibx<6XU*AtDOIvk|^{~ zPlS}&DM5$Ffyu-T&0|KS;Wnaqw{9DB&B3}vcO14wn;)O_e@2*9B&0I_ zZz{}CMxx`hv-XouY>^$Y@J(_INeM>lIQI@I>dBAqq1)}?Xmx(qRuX^i4IV%=MF306 z9g)i*79pP%_7Ex?m6ag-4Tlm=Z;?DQDyC-NpUIb#_^~V_tsL<~5<&;Gf2N+p?(msn zzUD~g>OoW@O}y0@Z;RN)wjam`CipmT&O7a|YljZqU=U86 zedayEdY)2F#BJ6xvmW8K&ffdS*0!%N<%RB!2~PAT4AD*$W7yzHbX#Eja9%3aD+Ah2 zf#T;XJW-GMxpE=d4Y>}jE=#U`IqgSoWcuvgaWQ9j1CKzG zDkoMDDT)B;Byl3R2PtC`ip=yGybfzmVNEx{xi_1|Cbqj>=FxQc{g`xj6fIfy`D8fA z##!-H_e6o0>6Su&$H2kQTujtbtyNFeKc}2=|4IfLTnye#@$Au7Kv4)dnA;-fz@D_8 z)>irG$)dkBY~zX zC!ZXLy*L3xr6cb70QqfN#Q>lFIc<>}>la4@3%7#>a1$PU&O^&VszpxLC%*!m-cO{B z-Y}rQr4$84(hvy#R69H{H zJ*O#uJh)TF6fbXy;fZkk%X=CjsTK}o5N1a`d7kgYYZLPxsHx%9*_XN8VWXEkVJZ%A z1A+5(B;0^{T4aPYr8%i@i32h)_)|q?9vws)r+=5u)1YNftF5mknwfd*%jXA2TeP}Z zQ!m?xJ3?9LpPM?_A3$hQ1QxNbR&}^m z!F999s?p^ak#C4NM_x2p9FoXWJ$>r?lJ)2bG)sX{gExgLA2s5RwHV!h6!C~d_H||J z>9{E{mEv{Z1z~65Vix@dqM4ZqiU|!)eWX$mwS5mLSufxbpBqqS!jShq1bmwCR6 z4uBri7ezMeS6ycaXPVu(i2up$L; zjpMtB`k~WaNrdgM_R=e#SN?Oa*u%nQy01?()h4A(jyfeNfx;5o+kX?maO4#1A^L}0 zYNyIh@QVXIFiS0*tE}2SWTrWNP3pH}1Vz1;E{@JbbgDFM-_Mky^7gH}LEhl~Ve5PexgbIyZ(IN%PqcaV@*_`ZFb=`EjspSz%5m2E34BVT)d=LGyHVz@-e%9Ova*{5@RD;7=Ebkc2GP%pIP^P7KzKapnh`UpH?@h z$RBpD*{b?vhohOKf-JG3?A|AX|2pQ?(>dwIbWhZ38GbTm4AImRNdv_&<99ySX;kJ| zo|5YgbHZC#HYgjBZrvGAT4NZYbp}qkVSa;C-LGsR26Co+i_HM&{awuO9l)Ml{G8zD zs$M8R`r+>PT#Rg!J(K6T4xHq7+tscU(}N$HY;Yz*cUObX7J7h0#u)S7b~t^Oj}TBF zuzsugnst;F#^1jm>22*AC$heublWtaQyM6RuaquFd8V#hJ60Z3j7@bAs&?dD#*>H0SJaDwp%U~27>zdtn+ z|8sZzklZy$%S|+^ie&P6++>zbrq&?+{Yy11Y>@_ce@vU4ZulS@6yziG6;iu3Iu`M= zf3rcWG<+3F`K|*(`0mE<$89F@jSq;j=W#E>(R}2drCB7D*0-|D;S;(;TwzIJkGs|q z2qH{m_zZ+el`b;Bv-#bQ>}*VPYC|7`rgBFf2oivXS^>v<&HHTypvd4|-zn|=h=TG{ z05TH2+{T%EnADO>3i|CB zCu60#qk`}GW{n4l-E$VrqgZGbI zbQW690KgZt4U3F^5@bdO1!xu~p@7Y~*_FfWg2CdvED5P5#w#V46LH`<&V0{t&Ml~4 zHNi7lIa+#i+^Z6EnxO7KJQw)wD)4~&S-Ki8)3=jpqxmx6c&zU&<&h%*c$I(5{1HZT zc9WE}ijcWJiVa^Q^xC|WX0habl89qycOyeViIbi(LFsEY_8a|+X^+%Qv+W4vzj>`y zpuRnjc-eHNkvXvI_f{=*FX=OKQzT?bck#2*qoKTHmDe>CDb&3AngA1O)1b}QJ1Tun z_<@yVEM>qG7664Pa@dzL@;DEh`#?yM+M|_fQS<7yv|i*pw)|Z8)9IR+QB7N3v3K(wv4OY*TXnH&X0nQB}?|h2XQeGL^q~N7N zDFa@x0E(UyN7k9g%IFq7Sf+EAfE#K%%#`)!90_)Dmy3Bll&e1vHQyPA87TaF(xbqMpDntVp?;8*$87STop$!EAnGhZ?>mqPJ(X zFsr336p3P{PpZCGn&^LP(JjnBbl_3P3Kcq+m}xVFMVr1zdCPJMDIV_ki#c=vvTwbU z*gKtfic&{<5ozL6Vfpx>o2Tts?3fkhWnJD&^$&+Mh5WGGyO7fG@6WDE`tEe(8<;+q z@Ld~g08XDzF8xtmpIj`#q^(Ty{Hq>t*v`pedHnuj(0%L(%sjkwp%s}wMd!a<*L~9T z9MM@s)Km~ogxlqEhIw5(lc46gCPsSosUFsgGDr8H{mj%OzJz{N#;bQ;KkV+ZWA1(9 zu0PXzyh+C<4OBYQ0v3z~Lr;=C@qmt8===Ov2lJ1=DeLfq*#jgT{YQCuwz?j{&3o_6 zsqp2Z_q-YWJg?C6=!Or|b@(zxTlg$ng2eUQzuC<+o)k<6^9ju_Z*#x+oioZ5T8Z_L zz9^A1h2eFS0O5muq8;LuDKwOv4A9pxmOjgb6L*i!-(0`Ie^d5Fsgspon%X|7 zC{RRXEmYn!5zP9XjG*{pLa)!2;PJB2<-tH@R7+E1cRo=Wz_5Ko8h8bB$QU%t9#vol zAoq?C$~~AsYC|AQQ)>>7BJ@{Cal)ZpqE=gjT+Juf!RD-;U0mbV1ED5PbvFD6M=qj1 zZ{QERT5@(&LQ~1X9xSf&@%r|3`S#ZCE=sWD`D4YQZ`MR`G&s>lN{y2+HqCfvgcw3E z-}Kp(dfGG?V|97kAHQX+OcKCZS`Q%}HD6u*e$~Ki&Vx53&FC!x94xJd4F2l^qQeFO z?&JdmgrdVjroKNJx64C!H&Vncr^w zzR#XI}Dn&o8jB~_YlVM^+#0W(G1LZH5K^|uYT@KSR z^Y5>^*Bc45E1({~EJB(t@4n9gb-eT#s@@7)J^^<_VV`Pm!h7av8XH6^5zO zOcQBhTGr;|MbRsgxCW69w{bl4EW#A~);L?d4*y#j8Ne=Z@fmJP0k4{_cQ~KA|Y#_#BuUiYx8y*za3_6Y}c=GSe7(2|KAfhdzud!Zq&}j)=o4 z7R|&&oX7~e@~HmyOOsCCwy`AR+deNjZ3bf6ijI_*tKP*_5JP3;0d;L_p(c>W1b%sG zJ*$wcO$ng^aW0E(5ldckV9unU7}OB7s?Wx(761?1^&8tA5y0_(ieV>(x-e@}1`lWC z-YH~G$D>#ud!SxK2_Iw{K%92=+{4yb-_XC>ji&j7)1ofp(OGa4jjF;Hd*`6YQL+Jf zffg+6CPc8F@EDPN{Kn96yip;?g@)qgkPo^nVKFqY?8!=h$G$V=<>%5J&iVjwR!7H0 z$@QL|_Q81I;Bnq8-5JyNRv$Y>`sWl{qhq>u+X|)@cMlsG!{*lu?*H`Tp|!uv z9oEPU1jUEj@ueBr}%Y)7Luyi)REaJV>eQ{+uy4uh0ep0){t;OU8D*RZ& zE-Z-&=BrWQLAD^A&qut&4{ZfhqK1ZQB0fACP)=zgx(0(o-`U62EzTkBkG@mXqbjXm z>w`HNeQM?Is&4xq@BB(K;wv5nI6EXas)XXAkUuf}5uSrZLYxRCQPefn-1^#OCd4aO zzF=dQ*CREEyWf@n6h7(uXLNgJIwGp#Xrsj6S<^bzQ7N0B0N{XlT;`=m9Olg<>KL}9 zlp>EKTx-h|%d1Ncqa=wnQEuE;sIO-f#%Bs?g4}&xS?$9MG?n$isHky0caj za8W+B^ERK#&h?(x)7LLpOqApV5F>sqB`sntV%SV>Q1;ax67qs+WcssfFeF3Xk=e4^ zjR2^(%K1oBq%0%Rf!y&WT;lu2Co(rHi|r1_uW)n{<7fGc-c=ft7Z0Q}r4W$o$@tQF#i?jDBwZ8h+=SC}3?anUp3mtRVv9l#H?-UD;HjTF zQ*>|}e=6gDrgI9p%c&4iMUkQa4zziS$bO&i#DI$Wu$7dz7-}XLk%!US^XUIFf2obO zFCTjVEtkvYSKWB;<0C;_B{HHs~ax_48^Cml*mjfBC5*7^HJZiLDir(3k&BerVIZF8zF;0q80eX8c zPN4tc+Dc5DqEAq$Y3B3R&XPZ=AQfFMXv#!RQnGecJONe0H;+!f^h5x0wS<+%;D}MpUbTNUBA}S2n&U59-_5HKr{L^jPsV8B^%NaH|tUr)mq=qCBv_- ziZ1xUp(ZzxUYTCF@C}To;u60?RIfTGS?#JnB8S8@j`TKPkAa)$My+6ziGaBcA@){d z91)%+v2_ba7gNecdj^8*I4#<11l!{XKl6s0zkXfJPxhP+@b+5ev{a>p*W-3*25c&} zmCf{g9mPWVQ$?Sp*4V|lT@~>RR)9iNdN^7KT@>*MU3&v^3e?=NTbG9!h6C|9zO097 zN{Qs6YwR-5$)~ z`b~qs`a1Dbx8P>%V=1XGjBptMf%P~sl1qbHVm1HYpY|-Z^Dar8^HqjIw}xaeRlsYa zJ_@Apy-??`gxPmb`m`0`z`#G7*_C}qiSZe~l2z65tE~IwMw$1|-u&t|z-8SxliH00 zlh1#kuqB56s+E&PWQ7Nz17?c}pN+A@-c^xLqh(j;mS|?>(Pf7(?qd z5q@jkc^nA&!K-}-1P=Ry0yyze0W!+h^iW}7jzC1{?|rEFFWbE^Yu7Y}t?jmP-D$f+ zmqFT7nTl0HL|4jwGm7w@a>9 zKD)V~+g~ysmei$OT5}%$&LK8?ib|8aY|>W3;P+0B;=oD=?1rg+PxKcP(d;OEzq1CKA&y#boc51P^ZJPPS)z5 zAZ)dd2$glGQXFj$`XBBJyl2y-aoBA8121JC9&~|_nY>nkmW>TLi%mWdn-^Jks-Jv| zSR*wij;A3Fcy8KsDjQ15?Z9oOj|Qw2;jgJiq>dxG(2I2RE- z$As!#zSFIskebqU2bnoM^N<4VWD2#>!;saPSsY8OaCCQqkCMdje$C?Sp%V}f2~tG5 z0whMYk6tcaABwu*x)ak@n4sMElGPX1_lmv@bgdI2jPdD|2-<~Jf`L`@>Lj7{<-uLQ zE3S_#3e10q-ra=vaDQ42QUY^@edh>tnTtpBiiDVUk5+Po@%RmuTntOlE29I4MeJI?;`7;{3e4Qst#i-RH6s;>e(Sc+ubF2_gwf5Qi%P!aa89fx6^{~A*&B4Q zKTF|Kx^NkiWx=RDhe<{PWXMQ;2)=SC=yZC&mh?T&CvFVz?5cW~ritRjG2?I0Av_cI z)=s!@MXpXbarYm>Kj0wOxl=eFMgSMc?62U#2gM^li@wKPK9^;;0_h7B>F>0>I3P`{ zr^ygPYp~WVm?Qbp6O3*O2)(`y)x>%ZXtztz zMAcwKDr=TCMY!S-MJ8|2MJCVNUBI0BkJV6?(!~W!_dC{TS=eh}t#X+2D>Kp&)ZN~q zvg!ogxUXu^y(P*;Q+y_rDoGeSCYxkaGPldDDx)k;ocJvvGO#1YKoQLHUf2h_pjm&1 zqh&!_KFH03FcJvSdfgUYMp=5EpigZ*8}7N_W%Ms^WSQ4hH`9>3061OEcxmf~TcYn5_oHtscWn zo5!ayj<_fZ)vHu3!A!7M;4y1QIr8YGy$P2qDD_4+T8^=^dB6uNsz|D>p~4pF3Nrb6 zcpRK*($<~JUqOya#M1=#IhOZ zG)W+rJS-x(6EoVz)P zsSo>JtnChdj9^);su%SkFG~_7JPM zEDz3gk2T7Y%x>1tWyia|op(ilEzvAujW?Xwlw>J6d7yEi8E zv30riR|a_MM%ZZX&n!qm0{2agq(s?x9E@=*tyT$nND+{Djpm7Rsy!+c$j+wqMwTOF zZL8BQ|I`<^bGW)5apO{lh(Asqen?_U`$_n0-Ob~Yd%^89oEe%9yGumQ_8Be+l2k+n zCxT%s?bMpv|AdWP7M1LQwLm|x+igA~;+iK-*+tClF&ueX_V}>=4gvZ01xpubQWXD_ zi?Un>&3=$fu)dgk-Z;0Ll}HK5_YM->l^Czrd0^cJ))(DwL2g3aZuza7ga9^|mT_70 z))}A}r1#-(9cxtn<9jGRwOB4hb9kK@YCgjfOM-90I$8@l=H^`K$cyhe2mTM|FY9vW znH~h)I<_aa#V1xmhk?Ng@$Jw-s%a!$BI4Us+Df+?J&gKAF-M`v}j`OWKP3>6`X`tEmhe#y*(Xm$_^Ybbs=%;L7h zp7q^C*qM}Krqsinq|WolR99>_!GL#Z71Hhz|IwQQv<>Ds09B?Je(lhI1(FInO8mc} zl$RyKCUmfku+Cd^8s0|t+e}5g7M{ZPJQH=UB3(~U&(w#Bz#@DTDHy>_UaS~AtN>4O zJ-I#U@R($fgupHebcpuEBX`SZ>kN!rW$#9>s{^3`86ZRQRtYTY)hiFm_9wU3c`SC8 z-5M%g)h}3Pt|wyj#F%}pGC@VL`9&>9P+_UbudCkS%y2w&*o})hBplrB*@Z?gel5q+ z%|*59(sR9GMk3xME}wd%&k?7~J)OL`rK#4d-haC7uaU8-L@?$K6(r<0e<;y83rK&` z3Q!1rD9WkcB8WBQ|WT|$u^lkr0UL4WH4EQTJyk@5gzHb18cOte4w zS`fLv8q;PvAZyY;*Go3Qw1~5#gP0D0ERla6M6#{; zr1l?bR}Nh+OC7)4bfAs(0ZD(axaw6j9v`^jh5>*Eo&$dAnt?c|Y*ckEORIiJXfGcM zEo`bmIq6rJm`XhkXR-^3d8^RTK2;nmVetHfUNugJG(4XLOu>HJA;0EWb~?&|0abr6 zxqVp@p=b3MN^|~?djPe!=eex(u!x>RYFAj|*T$cTi*Sd3Bme7Pri1tkK9N`KtRmXf zZYNBNtik97ct1R^vamQBfo9ZUR@k*LhIg8OR9d_{iv#t)LQV91^5}K5u{eyxwOFoU zHMVq$C>tfa@uNDW^_>EmO~WYQd(@!nKmAvSSIb&hPO|}g-3985t?|R&WZXvxS}Kt2i^eRe>WHb_;-K5cM4=@AN1>E&1c$k!w4O*oscx(f=<1K6l#8Exi)U(ZiZ zdr#YTP6?m1e1dOKysUjQ^>-MR={OuD00g6+(a^cvcmn#A_%Fh3Of%(qP5nvjS1=(> z|Ld8{u%(J}%2SY~+$4pjy{()5HN2MYUjg1X9umxOMFFPdM+IwOVEs4Z(olynvT%G) zt9|#VR}%O2@f6=+6uvbZv{3U)l;C{tuc zZ{K$rut=eS%3_~fQv^@$HV6#9)K9>|0qD$EV2$G^XUNBLM|5-ZmFF!KV)$4l^KVj@ zZ4fI}Knv*K%zPqK77}B-h_V{66VrmoZP2>@^euu8Rc}#qwRwt5uEBWcJJE5*5rT2t zA4Jpx`QQ~1Sh_n_a9x%Il!t1&B~J6p54zxAJx`REov${jeuL8h8x-z=?qwMAmPK5i z_*ES)BW(NZluu#Bmn1-NUKQip_X&_WzJy~J`WYxEJQ&Gu7DD< z&F9urE;}8S{x4{yB zaq~1Zrz%8)<`prSQv$eu5@1RY2WLu=waPTrn`WK%;G5(jt^FeM;gOdvXQjYhax~_> z{bS_`;t#$RYMu-;_Dd&o+LD<5Afg6v{NK?0d8dD5ohAN?QoocETBj?y{MB)jQ%UQ}#t3j&iL!qr@#6JEajR3@^k5wgLfI9S9dT2^f`2wd z%I#Q*@Ctk@w=(u)@QC}yBvUP&fFRR-uYKJ){Wp3&$s(o~W7OzgsUIPx0|ph2L1(r*_Pa@T@mcH^JxBjh09#fgo|W#gG7}|)k&uD1iZxb0 z@|Y)W79SKj9sS&EhmTD;uI#)FE6VwQ*YAr&foK$RI5H8_ripb$^=;U%gWbrrk4!5P zXDcyscEZoSH~n6VJu8$^6LE6)>+=o#Q-~*jmob^@191+Ot1w454e3)WMliLtY6~^w zW|n#R@~{5K#P+(w+XC%(+UcOrk|yzkEes=!qW%imu6>zjdb!B#`efaliKtN}_c!Jp zfyZa`n+Nx8;*AquvMT2;c8fnYszdDA*0(R`bsof1W<#O{v%O!1IO4WZe=>XBu_D%d zOwWDaEtX%@B>4V%f1+dKqcXT>m2!|&?}(GK8e&R=&w?V`*Vj)sCetWp9lr@@{xe6a zE)JL&;p}OnOO}Nw?vFyoccXT*z*?r}E8{uPtd;4<(hmX;d$rqJhEF}I+kD+m(ke;J z7Cm$W*CSdcD=RYEBhedg>tuT{PHqwCdDP*NkHv4rvQTXkzEn*Mb0oJz&+WfWIOS4@ zzpPJ|e%a-PIwOaOC7uQcHQ-q(SE(e@fj+7oC@34wzaBNaP;cw&gm{Z8yYX?V(lIv5 zKbg*zo1m5aGA4^lwJ|bAU=j3*d8S{vp!~fLFcK8s6%Ng55_qW_d*3R%e=34aDZPfD z&Le39j|ahp6E7B0*9OVdeMNrTErFatiE+=Z!XZ^tv0y%zZKXRTBuPyP&C{5(H?t)S zKV24_-TKpOmCPzU&by8R1Q5HY^@IDoeDA9MbgizgQ*F1Er~HVmvSU>vx}pZVQ&tr| zOtZl8vfY2#L<)gZ=ba&wG~EI*Vd?}lRMCf+!b5CDz$8~be-HKMo5omk$w7p4`Mym*IR8WiTz4^kKcUo^8Hkcsu14u z`Pkg`#-Y^A%CqJ0O@UF|caAulf68@(zhqp~YjzInh7qSN7Ov%Aj(Qz%{3zW|xubJ- ztNE_u_MO7Q_585r;xD?e=Er}@U1G@BKW5v$UM((eByhH2p!^g9W}99OD8VV@7d{#H zv)Eam+^K(5>-Ot~U!R$Um3prQmM)7DyK=iM%vy>BRX4#aH7*oCMmz07YB(EL!^%F7?CA#>zXqiYDhS;e?LYPTf(bte6B ztrfvDXYG*T;ExK-w?Knt{jNv)>KMk*sM^ngZ-WiUN;=0Ev^GIDMs=AyLg2V@3R z7ugNc45;4!RPxvzoT}3NCMeK$7j#q3r_xV(@t@OPRyoKBzHJ#IepkDsm$EJRxL)A* zf{_GQYttu^OXr$jHQn}zs$Eh|s|Z!r?Yi+bS-bi+PE*lH zo|6ztu6$r_?|B~S#m>imI!kQP9`6X426uHRri!wGcK;J;`%sFM(D#*Le~W*t2uH`Q z(HEO9-c_`mhA@4QhbW+tgtt9Pzx=_*3Kh~TB$SKmU4yx-Ay&)n%PZPKg#rD4H{%Ke zdMY@rf5EAFfqtrf?Vmk&N(_d-<=bvfOdPrYwY*;5%j@O6@O#Qj7LJTk-x3LN+dEKy+X z>~U8j3Ql`exr1jR>+S4nEy+4c2f{-Q!3_9)yY758tLGg7k^=nt<6h$YE$ltA+13S<}uOg#XHe6 zZHKdNsAnMQ_RIuB;mdoZ%RWpandzLR-BnjN2j@lkBbBd+?i ze*!5mC}!Qj(Q!rTu`KrRRqp22c=hF6<^v&iCDB`n7mHl;vdclcer%;{;=kA(PwdGG zdX#BWoC!leBC4);^J^tPkPbIe<)~nYb6R3u{HvC!NOQa?DC^Q`|_@ zcz;rk`a!4rSLAS>_=b@g?Yab4%=J3Cc7pRv8?_rHMl_aK*HSPU%0pG2Fyhef_biA!aW|-(( z*RIdG&Lmk(=(nk28Q1k1Oa$8Oa-phG%Mc6dT3>JIylcMMIc{&FsBYBD^n@#~>C?HG z*1&FpYVvXOU@~r2(BUa+KZv;tZ15#RewooEM0LFb>guQN;Z0EBFMFMZ=-m$a3;gVD z)2EBD4+*=6ZF?+)P`z@DOT;azK0Q4p4>NfwDR#Pd;no|{q_qB!zk1O8QojE;>zhPu z1Q=1z^0MYHo1*``H3ex|bW-Zy==5J4fE2;g6sq6YcXMYK5i|S^9(OSw#v!3^!EB<% zZF~J~CleS`V-peStyf*I%1^R88D;+8{{qN6-t!@gTARDg^w2`uSzFZbPQ!)q^oC}m zPo8VOQxq2BaIN`pAVFGu8!{p3}(+iZ`f4ck2ygVpEZMQW38nLpj3NQx+&sAkb8`}P3- zc>N*k6AG?r}bfO6_vccTuKX+*- z7W4Q#2``P0jIHYs)F>uG#AM#I6W2)!Nu2nD5{CRV_PmkDS2ditmbd#pggqEgAo%5oC?|CP zGa0CV)wA*ko!xC7pZYkqo{10CN_e00FX5SjWkI3?@XG}}bze!(&+k2$C-C`6temSk z_YyYpB^wh3woo`B zrMSTd4T?(X-jh`FeO76C(3xsOm9s2BP_b%ospg^!#*2*o9N;tf4(X9$qc_d(()yz5 zDk@1}u_Xd+86vy5RBs?LQCuYKCGPS;E4uFOi@V%1JTK&|eRf~lp$AV#;*#O}iRI2=i3rFL8{ zA^ptDZ0l6k-mq=hUJ0x$Y@J>UNfz~I5l63H(`~*v;qX`Z{zwsQQD-!wp0D&hyB8&Z z7$R07gIKGJ^%AvQ{4KM0edM39iFRx=P^6`!<1(s0t|JbB2tXs_B_IH9#ajH0C=-n+ z`nz`fKMBKLlf?2AC+|83M+0rqR%uhNGD;uKA6jOjp7YDe^4%0fRB<^bcjlS2KF~F; zu09wh1x0&4pG&76M;x8$u`b134t=dEPBn6PV|X29<#T4F1mxGF*HOgiWU8tN@cguI z_F@o+XL7FJztR63wC|j4x_DANzcX94r7Iz-O2x$({&qd*mdLG=-Rv)uZ}UlMR+F&q zU}=lkfb0p1>1Ho){o$@}mSKIV;h*$AND7~Dl)QzpFBlSM99Kx+F7GsVK5xcR? z_4Q(Z%cgk8ST}U;;=!LwyZVu^S$>B-Waeik%wzcKTIqeX=0FP(TGQ=nxi=dsS5BYF zl@?}NT!Y!Iyos^@v7XWXA{_bV~1lxz7gC?xuXxy0_?GaN!AhRRM5>)^t%&ODd;@HN5L{MD3 zc>i2keQZVm#?NrDwbfd}_<*5^U&w0zv~n-y8=GGN-!=_`FU^cM8oVCWRFxw?BM^YD zi=Vxz4q|jwPTg+?q7_XI)-S@gQkh>w0ZUB}a{^ z_i;`Y(~fvpI!vmW*A^|P7(6+@C4UeL2WATf{P1?H5rk`5{TL zcf!CgP6Mi{MvjZS)rfo7JLDZK7M7ANd$3`{j9baD*7{#Zu-33fOYUzjvtKzR2)_T1I1s7fe&z|=)QkX;=`zX8!Byw-veM#yr;|wjO^II>!B*B z0+w%;0(=*G3V@88t!}~zx)&do(uF=073Yeh*fEhZb3Vn>t!m(9p~Y_FdV3IgR)9eT z)~e9xpI%2deTWyHlXA(7srrfc_`7ACm!R>SoIgkuF8 z!wkOhrixFy9y@)GdxAntd!!7@=L_tFD2T5OdSUO)I%yj02le`qeQ=yKq$g^h)NG;# za(0J@#VBi^5YI|QI=rq{KlxwGabZJ0dKmfWDROkcM}lUN$@DV`K7fU?8CP2H23QPi zG?YF*=Vn=kTK*#Y_{AQN&oLju|0#E=fx%YVh>S{puu&K$b;BN*jIo@VYhqPiJPzzM>#kxoy0vW9i;ne2_BIG0zyRFp<3M(iY(%*M_>q0ulV2K}Tg zkG{EWKS{i%4DUuHi%DVKy%e+Q!~Uf`>>F6NgD{{I8~nO4!VgOvtFOc7(O)X`|7n*f zxBa4CJ-v9fUUH+`7sPVvpM_C*udZ@OTGTzx56QM5y~OlrZc&w9=)B?nmd@keRn+^= zvm~4sa5987LFDnU{(N|N zJAR8H@}p1fC+H(yTI4n#%~TbImMpuqYn9cQ<0QQ%=PzZItLkC*ef9WJUvfITKWh#D zc#__8`4am9%#NslIUw+<82#SR8AYG|woLfBg#!-&dqq}@P>|I0%lbdy0lSMmNe+}o zj0zZuFr6Wb?Y{Qy-S=|r`bdrDmhnmvkRnkdn`YCleU>Q$=je}LGhh>_QAj6aa_0Oc z%Swsmui;IRx7bN*=AAS@5yW&Y2hy;3&|HAiA8}!HT6!Z!RVn~MZg`RmI6&%#tBZDx zfD+y@Z~NWlk*4l13vmt3AK2wP!fQlnBbECL>?p)F?T)<`w&QN>cP_V>r7UTcsTaaP zTOb$f!P@zf$6>890NVKbIkG8rE?9!Y97sMSZjfF?A zYR8lp`LMoz~O?iaZN;gcX;LC-%Ia*R%A&SLx!YIf29?P+=XAAojK8!^OU*@?R&DK!#G_lsn!#;S375uZ&B0HH1|BO0R90$U>qs zSvHv>H~mAgNCcjo-e+;RjY6B9NCbQrZ|BHjTkehaU<9CSkdd>Vl*ifA2LNOP&R2Qdy3k3-TQ+ zbq=#vI43x`s=%~cGyN&y4Y!FxhwgDe@i6uv8^BLL&3z*SO=D0aLjih?gY4-9uWp5or)H+v~w6n5X#F-I52z=Z_p4JB(;M| zeaVFhuR2|3UD2MzVc~^nSoD2(dD#uL_1PdnIxeA{V5n`#3xf1Zx@4lw(DsQ&H$h zw#%3O<1173hjg2_nhKi!d1ej=h7y`hVjCNB6|HTnx>SWuCE-kgTnfT+YGX4_Lun({ zDv2`>d3vrS)tTf7ps_vvh!Cx^e1BFuWnEAh0(7fkNk|-3oU|iRWdsC6U)?Raft~HN z;^$U}vZK5O8|LV$>6X5T(uYkblv{zwPxnQBh(BQ5tA~J!vGiAMYP^_ki~pkIxDfOZ zUJDwq%O~WueeV6%uN<54&u*c&E4y431cklBNrb06zGOOy4XNT~JS-q(s6@)F@ovbe ze`fial(O4(-su%6@@1+V0MsdLLMyE8;)nou(7}czU(5ASaZYDT(kUZ0L(&g$nF^n9 z9-Pi`ZZLX&)^*M6As4_2Mmc9S7OT)F8KkL2NJ)KJcnCuWU=Wy402A&45#Q9Id~BBH z0cY*xlv!uXzKrXLH!xQu(OtJvEj|0-DmRj1vjFz{c*I4$Pe(+_V|^b~S!0xm{8lq= zZv)@NlcyL3Xdz+*|L137F7y6L-2VsrKw=q^S>F6i%<{Fr8zk06$Ay-(!L$fY@7mcng!2}L0t zgi|KxfB63Xtk_Q8#ZPipQ@!zgjdpEIbK_?q17Hoi4Eiyun$hrc>T(7pOLVLQE=lgGwA+A308p& z7@=09(|$>eLy5gLe{*|3b(M;1n;C^~v?o88jYib48eR4$QGsBFzd}3QuwO^_XE(=B zq+hMi0UFC|dB{LCwch7;zYT=NK})O%sgi0k#yV;My@24^B1+CuZmYOh0^b)5Ba_)) zC%i#_Iev&nsu%I|1N5=MVc#PrlunKAs&hY|3s5;@}`>sB>}gzxuB zB=2vrRyB3uiyW(hkDUNe1@&(b`;>ZvGgw|@s{zVC#_`HXIN_^J@Etb zA7A+F?ot37T{<-vTy8h&b3e+WKHE1oh;pUQrN4yRRrx?mT_9jRa2i4l1fUnLW^Cbl z!I1>VzyFe?VELWWhM?@?t-YPZkD-Qjo@bC2(o#ZtZmr{KZsdFWItV`rs$gp{724@C zL8K5}E0+DHcWcL^{BGei4>@J-3%a#$y6;I}=upc};-NDv-z#kPX26ylOpH)Ov1uU{ zkLj6oiH6l_s+B~_z;|Jc2oi?naS7#3H63~~lWj4rUnd=fCnKdkik<@R&kch9q##G{ z4u!%=rlM~Yp3jk*t8}1B`Sv6<%Z^}~1e@aq zg|JQ`QO2pSjAm-g*?IrNc$^~sIrNBo2$m|Sxanr?Mfs>2@Auu49 zGXlsS<9XS1&8h(dD*Hl&5HBDG!^pJ*lkau_Ur+7`7z;rcs$hT4we?3bT=7Fe<>{5( z2m2(c+hUz2BTHM8dCe*Z3XX&Av;b~a=$6EF>&^E8%nyxO@m_n!q&XD^A{SRjRZQ0L~qDeC=j&0$j6=LNIz@`ni^>ch|sv}^6 zlm>?28yPl@WmDPR?Y-A9X{U9Dv_IsbXJnzKCjkRksLOg#42uG2mE_acbTQ4)J|1V>%U@K(FP3AYhL0U zdeOCPN1qLv!|#c=p!_+%VNV(GHt`RuLRV^vz<5tt-r)yOK**kUWPspVAf|}ZL{LS= z@k(@@!P&W!>wwe`x{+GrFSWhHov7hu?{KuuT%kl#WO@*WX$i_@retlhQBj++SVNCx z5$78LxP>Z=^aJ)D280r_jj=zFfMJFXCIe^B{~V@d1rl_F(qo&AB4bC-vYL>x2jSKX zpuTG-6kgp3e^T&+dtV*i6a~)v@n?n*MffN59y}<0djUX zt27R+SE#hp8bzc#;rk$jw3r4)Q@eI$*`_)=Pvge8@8|8>H3X)<9YX6cXa=ii#Le;(qKm@%0-7$>2ShnYc`j#zJ7gu_FE^?uAkL|H)UIH#gPu^40!6^J=^ zr`}iwa^!4tzW~vOMZAaKF>*8A{^8m$i(VK)>?=#l`xrVe>wseSvM_aF zATNkY>kM_P3?1kE`uIq#mvr-wuTgUH0N<&JhF=(E9%^NS*HLm!4GZ4_XI zL=R5tlG5Mk_1rPfg)sk^llFuKPMPBhuU|L5q#yP_mzxp1o&pAzi-X31sgFpIHn@($ z_>=`AB5(8tP6p2zS5VEvH5J$M` z_much3>S7t3Yo`Yx!>83-hW9LYzDKP?mKdkD#QAK8*M((sx{eBQdrR<^3ZhFP81+& zBnJMUefQyNBji~$5d88Wfw1Lv59aJN9t2!pABLg;ewJ#LXL-10;QcJl+Y4Mtngb)k6JZlCf)3uD_u)J3sYyN;NN5hNbg$%W!i-GK%e&!Us)2IExWSss$YG(hm3kJ-h%yD z>8q^n$+4I(_y_mbT{du4P%h1j3oSpjhY97{+IZ`aA4ug!vNJ6*p?<2H(2w+GD3j$I z1TUXGyNzdf>_yB3grP~FZUs<2Quw;eEi*7s(-MiIkQ%@J^+WGdQvYSUN+TRiD-xto zJ=OUU+kxGYc!HCLNbCvR4lGTp~#L;DFzGd-#gJe*xf(P3hDQz|y)?b9mwU3WUVnpcqXM<@w%r-k*Wr^gzAv)8T^sqA=Ye z!7qy&exJmAcAt~CwS#@yNmjr8*T*!A6w4~E*ibaLRs0CFo(;R3=ODhDt6zWNodmo0 zXx&bT$6&+5c>a|WJ)F4G-^GjY0H#*tY=UNyYr_q5fsrcjk(c^~e*7Lf`!Jd`)p412 zn|^*hV= zFI4UbwA%X@smDd$cQOiMC%jfitTxTb+#`9`G=2rJDfK!E=5ra|So>lc{X1$~w28i+ z4p&cTGwZ#5VueiXS9O8#;RR$yg7tL9!^)Sz&pZYIzlSh}0}V{LxL$Cu%B4U5_}k}- zm~|CsD<076x@<>m=6w6N?WaThIBP`!u{-;WF)xc=2otx*lwf|5+MkdJePjh(B z9SH+%cHGCMAXNxB{_3^otDWdsV7Ob6n{0 z+&!(;iaHOX__5z_$Qk{%xYV%Ig@7iokGBwR`3642ZP#H#v9QGbWl8<|MS*=@qO@Uj z6+SZ_v9`1paUe5tFN~v(b#J3a_Lx0+;r9giZIx-A5TxdbG>xi#AZ5_z1V}B^n)sxT zz49}eK7EWb6wR!6-qQOrHQHkUvshvq%=G2d&@(#XM*Am1;WbnJ{X_!a{ZkphD$^TQ z=Iskb&}=lBm(RHiwJoGg`*NiQ6#RB$T#LF+>#ef;Jne&MxKPX!#r`&TVEFsp2jnNx>dClzpcPy&G&13a_<0qaR3i+k212~hoQ z8nMk{JP-t04I{GW5gUBqcJW-jSMrlw}>p)ptx?WKuCUV77taMiV zHok9V=6yv+Uts@fMY&A}amC=!Yj}eL@=e%XJ#%?agkt1jWF+10{(E9mHLDa>Ll7Vj zG=3cp%ljIB-6pC}6&`xJ*6WCP|IlglLWJ^?yviI8Ve)?V_i4%n;olzny62_`-|IGi z^=}p_O>Z8M;c4|RExu70E7ePW(HWVS&E$+LL6xSQgB`QfMQJ|4pCTFowA39p5P-|$ zUtM_H2HnP8_RoS~Vwk(FhbG zH41licj%=0a;Ln2STFBvU}Ne&O&%8bYKj!h1FA#sNM`232fX|U3QPp#3C?mN2;hE9 z;)!@5ixSPl<89^7gwhHc2YAX1KJK$#*3`KOMIQ253q7-*RJ5k)zp9GBO|Ga~X*^}US5oN@aG&waHV%vi~r{t^`ptTxb zL}q1W8S7*>7oWwvgV4uFLZ(@k`R*=LO_|Gu`prs~!WQXj-NLIa^2(7IHg>BG^N zc|i{-^=&Cek9dkJFQys|sjG9i>LLz|;yCv{^1i%c*h>8zF91kLvS9HBQi~ZU!JL`B zK8N+U0fr1*6??Ium)AF!6tc1eGhXIYL6IRT7rmKp7+>?%5Pa6zC5)KY$ycF0ZJ`G5nEQDG100U-jLkH8^UE4g6wq?sg%pP=-$&G#bcN`^?w3a6 z((s$6eRKcSEIslW-kk5Qi|5Mg-(xdLF}PxxVh$PuO}#aR6pW1kV4Af!Bqh*btXNNZ z>-4(IUl+L4dw+3LcpGut=qB45O+W)Q5?*zZ2A6rJcg`qkSvWA!j^r2mqKuCm6`Py? z@^T#Ux04HemPGd!Hs7NkZdVn1}8_j`o?)*OKZGS!`ff)gF zG?v-lj$wWNWCcw2Mg2o18D~1?3_b0XzdiKBNkYSDpcv@&kp0POmweJE2ZkIQ3B!a! zIgIoE+Xv?;34kyo^QYjZk+tEqZvq^#QG(OzX4~X+KtsoQoddTWUR(yo8R+ObEF1j<-syWOb>)JQ&Zbdu(sctU%Mt zW&YR0{ttY2TTXYZ?~WNU&cES1Z2q(7SrWDh``!J(JM+Nk$!hu&Y;(7E`ZNKTe0w+% zJc?Qnw2B+%UR}0;cB0Rufa(7-3FF}?629@LgTiEC&2uyL6NxexOp?AKT^aAx3gi(W zao>r>MPw0eQ3>IV02uLsC@>yK_epX6GRg4{NEL2wPPF9=*L2RV3yyK8DhuEK>rmmV z`&Q~#c`lgR&93TdOCja|ewOXmPNRh7!&dMT(1ett#iDr8HZW~VqWW@7fe9B6;7S+? zbC`d4@MEau&mKlOPKd>*10q0c{~^baw6!a*w^sY#0Xim{oOsiXiDOhbG&kl3c$$n1 zMRrD83&QucDSEcV*7LIp8VTA@F<%qe+_c`L;6on(>SjAU^}5c9!BCffT>$VQhe=)z z8(=Ej{5>jhmjB3{xDfj2R@VmHQ!CqjlO4KnuOmvHy3K#po$yp_V;p_MKjh1`(rzj6 zHW956k1yvntz{_g?Xbs`avK(IjlTnsu%htO;D7 z?J#x^EzuvVn&NA=!MEj7cwe5A-Z$Zk2LBZH$~%E* zf`((xH0?`}hs|HA%mtwfOEsZJxxrennkTYcwP#FKO5%Lpc^JXhSpV|ZH$Wr;`}`_( zIP==gd3LYyVtwD|*ZJGi{7~x8{=^bGVqu0RJ`n_BZH9+}kz%-4ZRsImi@rx%=ZEKs zcPnUXo6hbJV>fH;@1|bAHIe0ijYI*&kdT|HkDS$9No9 zCHo=*HWb~U+Dtzxr+Esao}6@|;Pf+E$ay0$kQp#s{wlw+7aIKbMdf`OqhoG*;Tco0 zjrP}VQG#Y2cJuqoJg&5({)S(BA}q9T1lGeWRyu=Je|)I!6a+aj!IP^1({)ZYe&x6w zt3a)Dq^TB+A7CdB0-}#z2Ur$W&h3YVw8==!xONy$uQmDWh-@15iEOt!q2m&?ZLA|w z8loSb(0}7y6Xu0?M5Uf4>VZGluB`wMf2oh;m)ghxVda>3m}4%V)r^0nVQ5V6f3>*) z0&VN!N0~GC^P}vj$`EDMZEmVV;N&RISY2C;$0;2(<{Lt&PKzqRByQdiEHGAbwtbS zPj`Da5%U6k1oEtVzI}QNw;!hT6F+~|@=c@$C4NtO@=xgP?|5MyZAyuCzcvq4rdAv@C06%gZ`9%I);R6UGiGJobfux+<0DLS&|MSG4UH z_~o{^^9>ixMg~mY!-@Fai{xaE4^;qy9iZN15Gbn5ZqHWf>Jc5Rv6(#n8`1NcCsdmG zab*dSXVPaE?)wCalD;$ivF%@nB#7D`@YG04p6ed9m}4iJW|pfVMLE<-c{=-8$e?cH zUdU#mCj4gb zZKA^b9p*9S(}8@tw~1RNPHr7tQr;P+-)D8|sq=*o)G%RGqt> zzP5yf`pVxb)I51D_G~Xp^GNK zVI6sAX)a9s)e{8N3?35YA6aQTXuyszK3ah~CemzA&CII#8F&F#KN41~8I^&_%}6MCNb{W87qAF`zj_Y^szhb> z3p3}KbOxotY|(lD=;)`fYE_*{S}x;f^SW#)SU&5X#o|-R|trpa|L5PS5aa0 zTHw8%SDSVtU4?vyrhnq+^@dgFS)|(y{~(4j%3UEiO-rBM9%`)8(dh33pMLiuurNY# z#10AsQ7%*0Cu_DSAU}P;X(JwA64~Q_^R%d_zSm^6Aux?Pn70PM>9EvLeOX z&w9c)pGmcL22;MO3C_B>=NC0RJpMp8?#ZUf=GWRvy z6RHq3B}=MGVg?9@iKFBpsvnkVh3{Vpp=`CcD=u~@ql{my|6?3ssi3mCOPnjI&E}VC zc@X+Yl>;;DNo0W0`0th!X{?luDhOC{E8N=?!w}K1{V=)+1={m(f`Oc|N=07>}3;z{-(A zm{JL=j?Sro5iecmE2-pWlRf(r%|HEQ7kgwQ9+kt=NBhtQI7OwcZ#3%$Uf%^r2nhjY zoQ08MfC%_X{O9~WcirMZMhn#z^ux4Erx-tf-6bHD)9eH&^L>^jvAd^9A^DCDs?0;k zkm7LE*KjP6`2d17MrQaaLqd_Rka}J$csvUec#hw78<=s(hyR>065~YCVCA9+#Q+; za(*L0IEw!r5P|@-;x33L$Lv9 zcuN8YG&g{<(SeJG18~(b!5yywSqQiLAX0;---;}mF5&b4lg|T?LwKREa{9YX_-zL@ZE?Zqi@HxK^2KO1>0LATu{te=T zprmHtY)bDVfxI1S}KBE7V zznP7KQ8HekWU#W6mw`dr-boV}pMQR==&5=Q5T=_q091jfc;R*jX#&=MQ%~@E@9^?`$v48ks<>(fI(F6L(5ppKy|$HWng*bKOb(4|cMUB&z$#ob#XV z5-mg)gmFIybZf=znm3ZPyUO^GJfxt0kmHjaTZ|sthsxXw&}Y)fOUSg=JhRSR^UjZ- zhqqb}Wsyw4zdnj6@#BAJa#-PdI4_dgafFXh85DsEQ_cT+5)XpZq$fZlBA_9UsE9r6 zEFec5?uqN@QhJ^IzwZrwl-5J`CmVPv{(YDTqEqWR^dI;5hXc~cxP%B3v&~s0`Ct89 z@S`i~a^c%V^N81dDT*ItFS*&IN;@O$EgzX0e7x&}TD=!zS}hTpezBLS>mdX(5< z)8DEI(-o_D)c-UX@dA1MuJ*yc>Hf4|`*B2S_O>w*-tbUwtiu`;W(Ud{HTty@(&x(T(F&;M zJ=?H>6`B7nf-90e8V`WSVp|0oEKB-P2M{}4ZDawzvM&a!y>`Y#jCsD%T_l``@ah(I2nJs~Q|%uSKu@k!m~*8B*IoA{*TgtF<(5sHCGG;n@NE%~Xt(G$^&<87u;}Na zx-8cq0g`uA(&RBFo=-4Y1GUZ<``Zw{xL4jfHkZw~%~wvtGueszcXt)_QwH8g!; z%s&3kSa~R$dO$-%L-)c@_hi7&>{6L_M>OZFkUQu;{sL_bUMStNrt{{&O(Wn~*zPOk zB>dnfszb29NSTf2pqIs68k|p-UrSrxgLHqi?3N-UFa!LHy9n1)=s>`yS+J{MEzS@ zNlfGtpma7kG&LR3JE@wB%rFA*h~~KitlO=IP)ZjN6dQLM6qsry zHkB#cyNh#n`)}bCrN1My*;k)^@>e4gJ`LJK?2)Pwp?4Tl4)4FA0(tvY+#1jOUM)xw zlMz4x-f@g^+yKUN`?Vu)|AwujArnM~Pa@y*Q9S8eS(u{-S%(Z5=R~pRl5ZGDjdqH% zC8rW&{##wOpU_oTIG4WXMk4&%2t1;lWcW5&!yxmOT*!hBcKyTqEcNoO+R2;Q?Yj+W z1-Y4?59fijz4(MIDwGe4-baYf08UCs;r|YefD-Md2ST;=cxwpgW=tR76-dQVAhn^= zG9Wk5lQk%jIR@KNU!UMp6@BfU;r+;y4VQ)D2!Il9HX%yW-9nOzV+m$YKzVaO`B8S7t z$!S2Mz`xw>V(RjE`0>bQp<0y&h~Y=M#jpy!#=dE>`=e_AjSZq6u!Dy1xJf~-7|0F! zPR9|n`e_7D2DIV2H(CESQ}hA>U>n|6`%z?YKEA~)BOVY%y=jPV zT=44R!L?J)736X#csn|lfBJ)o8ixaZclguWgrGO<`TN2FMfO}7;5}d+BlK0yTSH3* z4!=;5rOh85&2|x=46hkNaz?)U8&=bcfh=N_#8BNpZ2v$aVBo;sk^*X`v;4-LU;D>! zM*h12MxXIQy)SfAqE4;jY)wgnppazZkdNNVVF;(PLf^qK$FgY9+VFyBKE7UC|f z`R|?&egV11K3s$rJ6!GvoeW=jV*!-e(wA;x(2=d0E_e_%0x--0o8#~m^H1%AH5Z^B zn!TNPn927*bvaf0pt}zhK0o^V@WlGwwKo(*nQ|Q~4_;>~-8y20`HP>@UJa)3nEnGG z5Hwhs|FcmFG16ZVNb5hL`2Gc1{zWIMM{_OiKewV!hCi}U!VuE?s9wU-QbZ!)+Y^tS zGzp5OSi5iq6hmEr$w}&9DFgoB+i*`q`8TBi^MVS{SKEb8Aw%@K7@XCo(De2A`6%mf&a2#~y1N)+kJLD$1HCP!22)(U}xo2|j?WRzt(11j8Z_*v;P$R+Ug*Gy3VxV4K; zGGUGabnW*`Z}~`ydXL-l9e=GC$pY#z|63vy>E*m=$=j}iWP{sRTh0%H54`t>2xYH% zsk+M&u&pNgMCM@3e)Xc?jBWX-TIR_cQ1Z!RW7!B zBjZX=+^3}?SE)B+$EP+0oi1Fp5blDT?*}nsP>filqXH{ms zxU<$hetC`u)Wi+x|EKL-`y^#aQX+sDYIa{M;V%LqLrOk~lR>u0Q!+pyQSU4zY`?E^ z|5@)C)w6G_=i5YYC5SE_u(7hDNYr}uKT|@DSqF%S++lTIbIk^$a>{~0IH8KNFEy%+ zW#$&!ynpgNJh>6uR~?2c)ZMW+h0OKu231(7L_vETPaR+(P)Zy%0~yGm>E9?@@x!Jy z3PYgS}Q@b}x}E#F27@F+j}0=&Ql4gES&f8acMrPAVlVs9$97`FR))R5wI zc&}KFI1UIewh>3PkhnB7u zS3AT8_*|nexznG|Z*DU0c!K@jsI4J)5#DyNi#|e#`l1Vv1`1)*NVcy0LZ``aL0n8B zecupJ(rhq3u8bW0NIRhKYq$v1li+jp*4hfAd&wxYDE8vn1TQ7S@bTM|I2Ob z8vMOIxA7&_j{AKmD+O@EyXT`|dElt0pED^@IV0m)RPBUs*5jW60>>w1!@_G3aBKzG z_f(KfAPBk}-jQtR*Sroq!*3rbQ_m27e+YdzQjUb<_*k8vc_C)y!@cj5E>NxUhPu&g z@Z2<~esU`)ih+4opWe+K7sbN9n*9@n>#@n3*o z?xoROgDuvhq>jJ;Ve{6i<3roQNfgo5^4Q4(|GNExO2Dr7GjgA2zWuKp_K)K0R(6lv z!l$!zW-+T6mb3gQaAFviTQi{|*t%>{(mhTdy+y;Re4qT@kccy#{b z&zWy~kLO@>*WPj2k#H)|7L&gAJ37DmHQAme#@m;(Y8Nu^`D5vf8sZFW#+lA2!HK=( zJ)#hO6JD*`o~&c*&46d}g=Qj@SsoB5ikC z^1V8E+&<-OzuS_C`p5<<(A6fB`LXT(!kV^0_~hL6PpW4={l%|#xgdh?5EIk~lu8{D z2hiyhv3Yxij_#$Wu>P@7SYsl`-~3;}Ktx{34_NL^Kwin&=?!HDv3elQDbcU*qyYpN z(#yw~f1vFGK-t%CC-qa-4FYHbA^h>bag-I&*qaxwn?Qv|idE$<>1H|Gr6JtUu(he2$eg!N z@HTF@dG1)*y;4fxe)4_ZkpaBHH9hXp9p4|gLrRQyuevRd@gSS}JhRnWqrvm|U@>qM z=yl7RQROTKwQtzP3!zUF)_6Ld#NGA6v~2{J9Dd`h6{%+XsU#qGLh%`fB1Hc?wfayK zN`H4BpDp)npVQuu$DVW1qsBS&AJ2eP%6Qw>;k{)Z$8%HL=Q4(a$Ng2_vHw&vA!1L+9zc8vaX2GtqJ{L-;gvF0IR$em zMQ8@{Qp3+3Quk)TJ$?I<8KmwzD*7#(q<@Mc`dchngW}cRG14(Z6K7{T|LhFXwhqUQ;BET;cYqPcAcMgt6M$V9$(?jHo@Sud$an$U&5F zZ1QNh^ztt)E*d#Ij;<43oSKKnd+WNr$_r}+s_O_x6DZSB10*5Q{ourqq>mTl| zx4y^(cy+9;t@R=*j>3_dmm_m)$k$#937V(sllby&5)Xex^UD-|m|q<(jEd#@DV(of zAd7sSdmS*zUDqJ9|K%O2J2OfdUiK{{b{PCy)pi<;hp~7v1CQj&4-10 zgO<3dqhYH1#-Fa}Q{pjql5>>P6gZH21zLfxZ4$SK4T@7b!|`nWF9b*84Bq8&Eht;9 z*P72x&NUCZ7*@B$`FtE=hz5b}S`|c6Ey+j@D1ZibjJaRlR;{cxAWv z?Nqa>QqV*H-*zzaPvpLMHt~nl(x6?vrPpR?zn7~wow?oj*1TKmx4j71>$hvtC$DLD zUrz0^tiP0792U&dxJxNv@r}Elsjn^aSLUu=9#mD{&9n8|ayIL$!H3s>%KEvbchBFW z%cd?VU83mGF#Dar9*s~w&AnmQRQIOvR+uWsuZ?+|a=TzApXO@q^(r%8=}iv#wCnFq z=K9}JbqU@k99Q%j-}NNk+qLCP)jXfmOO|)@?mHcnynd6({mJisP1_}u7k)|eYHXWK z63eQ)E$ufFi!3CWUY2gw%e>omCv}qEX66aH-k&35f9`Q@Us|NPetVqe8=dX*VxJdn ze`q7b=Dn(UA(2sf&g)cOmQFhNJ#<-aMELJZbA#@to>25@kbW<)&!X01 z%NMJt>1ST)tyX)h@?`DxhbgCHr>S4wv}WC&Nw-!{+Z7$2D}74QAcXTvip=M0%Tp_N zor=k`)t|ra^ySr-+(|R9mB(E=`MX#y(wSw)$!iymzB;^c*>%&^*7HxTnRga=soSZT zdDl+9s;r!v8hk6POtzBaig4pRp7eWF(<8gufvNHPu6xs-=e{;mnHzJyGKE+8L0j}; z@%8-e^UCL5HhMiR>sD3Rve&yVZ#{Q1*CO8c+qSr^Z#CN;)(X5>tGG5yUw3<+CfhaL z%bP;hZ?jvgJU67BWyiy74_)6r)_nSxttxn0`0?HE^5(uydHVgP+HE$V?Lv)Leti43 zWA|;f-RqX``95>)^P-fw!Vi{3KNsII-*5f){gdxqd%gVdB1sOBNe=nEW%;i~g_P8J w!5uhoe-Jcg1nPN%MiEAtgE$;km@@t6ukO)1^!cY^83Pb_y85}Sb4q9e0FIsP9{>OV literal 0 HcmV?d00001 diff --git a/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/redux/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/redux/macos/Runner/Configs/AppInfo.xcconfig b/redux/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..bf20e5bd --- /dev/null +++ b/redux/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = redux_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.reduxSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/redux/macos/Runner/Configs/Debug.xcconfig b/redux/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/redux/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/redux/macos/Runner/Configs/Release.xcconfig b/redux/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/redux/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/redux/macos/Runner/Configs/Warnings.xcconfig b/redux/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/redux/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/redux/macos/Runner/DebugProfile.entitlements b/redux/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/redux/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/redux/macos/Runner/Info.plist b/redux/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/redux/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/redux/macos/Runner/MainFlutterWindow.swift b/redux/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/redux/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/redux/macos/Runner/Release.entitlements b/redux/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/redux/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/redux/macos/RunnerTests/RunnerTests.swift b/redux/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/redux/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/redux/pubspec.yaml b/redux/pubspec.yaml index ed270298..c9041e7f 100644 --- a/redux/pubspec.yaml +++ b/redux/pubspec.yaml @@ -12,42 +12,41 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: none environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ^3.9.0 dependencies: flutter: sdk: flutter - meta: '>=1.1.0 <2.0.0' - redux: ^3.0.0 - flutter_redux: ^0.5.3 + flutter_redux: + meta: + redux: + shared_preferences: todos_app_core: path: ../todos_app_core todos_repository_core: path: ../todos_repository_core todos_repository_local_storage: path: ../todos_repository_local_storage - key_value_store_flutter: - key_value_store_web: - shared_preferences: dev_dependencies: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter - test: - mockito: integration_tests: path: ../integration_tests + mockito: + test: # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/redux/test/middleware_test.dart b/redux/test/middleware_test.dart index 0391f06b..795a4631 100644 --- a/redux/test/middleware_test.dart +++ b/redux/test/middleware_test.dart @@ -1,4 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:redux/redux.dart'; import 'package:redux_sample/actions/actions.dart'; @@ -7,8 +8,9 @@ import 'package:redux_sample/models/models.dart'; import 'package:redux_sample/reducers/app_state_reducer.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class MockTodosRepository extends Mock implements TodosRepository {} +import 'middleware_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('Save State Middleware', () { test('should load the todos in response to a LoadTodosAction', () { diff --git a/redux/test/middleware_test.mocks.dart b/redux/test/middleware_test.mocks.dart new file mode 100644 index 00000000..af30ff36 --- /dev/null +++ b/redux/test/middleware_test.mocks.dart @@ -0,0 +1,51 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in redux_sample/test/middleware_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; +import 'package:todos_repository_core/src/todos_repository.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [TodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosRepository extends _i1.Mock implements _i2.TodosRepository { + @override + _i3.Future> loadTodos() => + (super.noSuchMethod( + Invocation.method(#loadTodos, []), + returnValue: _i3.Future>.value( + <_i4.TodoEntity>[], + ), + returnValueForMissingStub: _i3.Future>.value( + <_i4.TodoEntity>[], + ), + ) + as _i3.Future>); + + @override + _i3.Future saveTodos(List<_i4.TodoEntity>? todos) => + (super.noSuchMethod( + Invocation.method(#saveTodos, [todos]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} diff --git a/redux/test/reducer_test.dart b/redux/test/reducer_test.dart index a3bc5130..c2559a8c 100644 --- a/redux/test/reducer_test.dart +++ b/redux/test/reducer_test.dart @@ -30,7 +30,7 @@ void main() { store.dispatch(DeleteTodoAction(todo.id)); - expect(todosSelector(store.state), []); + expect(todosSelector(store.state), []); }); test('should update a todo in response to an UpdateTodoAction', () { diff --git a/redux/test/selectors_test.dart b/redux/test/selectors_test.dart index 9c287417..c548915f 100644 --- a/redux/test/selectors_test.dart +++ b/redux/test/selectors_test.dart @@ -1,7 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:quiver/core.dart'; import 'package:redux_sample/models/models.dart'; import 'package:redux_sample/selectors/selectors.dart'; +import 'package:todos_app_core/todos_app_core.dart'; void main() { group('Selectors', () { @@ -64,7 +64,7 @@ void main() { final todo3 = Todo('c', complete: true); final todos = [todo1, todo2, todo3]; - expect(todoSelector(todos, '2'), Optional.absent()); + expect(todoSelector(todos, '2'), Optional.absent()); }); }); } diff --git a/redux/test_driver/integration_test.dart b/redux/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/redux/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/redux/test_driver/todo_app.dart b/redux/test_driver/todo_app.dart deleted file mode 100644 index 2d0e71be..00000000 --- a/redux/test_driver/todo_app.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:redux_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/redux/test_driver/todo_app_test.dart b/redux/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/redux/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/redux/web/favicon.png b/redux/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/redux/web/icons/Icon-192.png b/redux/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/redux/web/icons/Icon-512.png b/redux/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/redux/web/icons/Icon-maskable-192.png b/redux/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 zcmdT|`#%%j|KDb2V@0DPm$^(Lx5}lO%Yv(=e*7hl@QqKS50#~#^IQPxBmuh|i9sXnt4ch@VT0F7% zMtrs@KWIOo+QV@lSs66A>2pz6-`9Jk=0vv&u?)^F@HZ)-6HT=B7LF;rdj zskUyBfbojcX#CS>WrIWo9D=DIwcXM8=I5D{SGf$~=gh-$LwY?*)cD%38%sCc?5OsX z-XfkyL-1`VavZ?>(pI-xp-kYq=1hsnyP^TLb%0vKRSo^~r{x?ISLY1i7KjSp z*0h&jG(Rkkq2+G_6eS>n&6>&Xk+ngOMcYrk<8KrukQHzfx675^^s$~<@d$9X{VBbg z2Fd4Z%g`!-P}d#`?B4#S-9x*eNlOVRnDrn#jY@~$jfQ-~3Od;A;x-BI1BEDdvr`pI z#D)d)!2_`GiZOUu1crb!hqH=ezs0qk<_xDm_Kkw?r*?0C3|Io6>$!kyDl;eH=aqg$B zsH_|ZD?jP2dc=)|L>DZmGyYKa06~5?C2Lc0#D%62p(YS;%_DRCB1k(+eLGXVMe+=4 zkKiJ%!N6^mxqM=wq`0+yoE#VHF%R<{mMamR9o_1JH8jfnJ?NPLs$9U!9!dq8 z0B{dI2!M|sYGH&9TAY34OlpIsQ4i5bnbG>?cWwat1I13|r|_inLE?FS@Hxdxn_YZN z3jfUO*X9Q@?HZ>Q{W0z60!bbGh557XIKu1?)u|cf%go`pwo}CD=0tau-}t@R2OrSH zQzZr%JfYa`>2!g??76=GJ$%ECbQh7Q2wLRp9QoyiRHP7VE^>JHm>9EqR3<$Y=Z1K^SHuwxCy-5@z3 zVM{XNNm}yM*pRdLKp??+_2&!bp#`=(Lh1vR{~j%n;cJv~9lXeMv)@}Odta)RnK|6* zC+IVSWumLo%{6bLDpn)Gz>6r&;Qs0^+Sz_yx_KNz9Dlt^ax`4>;EWrIT#(lJ_40<= z750fHZ7hI{}%%5`;lwkI4<_FJw@!U^vW;igL0k+mK)-j zYuCK#mCDK3F|SC}tC2>m$ZCqNB7ac-0UFBJ|8RxmG@4a4qdjvMzzS&h9pQmu^x&*= zGvapd1#K%Da&)8f?<9WN`2H^qpd@{7In6DNM&916TRqtF4;3`R|Nhwbw=(4|^Io@T zIjoR?tB8d*sO>PX4vaIHF|W;WVl6L1JvSmStgnRQq zTX4(>1f^5QOAH{=18Q2Vc1JI{V=yOr7yZJf4Vpfo zeHXdhBe{PyY;)yF;=ycMW@Kb>t;yE>;f79~AlJ8k`xWucCxJfsXf2P72bAavWL1G#W z;o%kdH(mYCM{$~yw4({KatNGim49O2HY6O07$B`*K7}MvgI=4x=SKdKVb8C$eJseA$tmSFOztFd*3W`J`yIB_~}k%Sd_bPBK8LxH)?8#jM{^%J_0|L z!gFI|68)G}ex5`Xh{5pB%GtlJ{Z5em*e0sH+sU1UVl7<5%Bq+YrHWL7?X?3LBi1R@_)F-_OqI1Zv`L zb6^Lq#H^2@d_(Z4E6xA9Z4o3kvf78ZDz!5W1#Mp|E;rvJz&4qj2pXVxKB8Vg0}ek%4erou@QM&2t7Cn5GwYqy%{>jI z)4;3SAgqVi#b{kqX#$Mt6L8NhZYgonb7>+r#BHje)bvaZ2c0nAvrN3gez+dNXaV;A zmyR0z@9h4@6~rJik-=2M-T+d`t&@YWhsoP_XP-NsVO}wmo!nR~QVWU?nVlQjNfgcTzE-PkfIX5G z1?&MwaeuzhF=u)X%Vpg_e@>d2yZwxl6-r3OMqDn8_6m^4z3zG##cK0Fsgq8fcvmhu z{73jseR%X%$85H^jRAcrhd&k!i^xL9FrS7qw2$&gwAS8AfAk#g_E_tP;x66fS`Mn@SNVrcn_N;EQm z`Mt3Z%rw%hDqTH-s~6SrIL$hIPKL5^7ejkLTBr46;pHTQDdoErS(B>``t;+1+M zvU&Se9@T_BeK;A^p|n^krIR+6rH~BjvRIugf`&EuX9u69`9C?9ANVL8l(rY6#mu^i z=*5Q)-%o*tWl`#b8p*ZH0I}hn#gV%|jt6V_JanDGuekR*-wF`u;amTCpGG|1;4A5$ zYbHF{?G1vv5;8Ph5%kEW)t|am2_4ik!`7q{ymfHoe^Z99c|$;FAL+NbxE-_zheYbV z3hb0`uZGTsgA5TG(X|GVDSJyJxsyR7V5PS_WSnYgwc_D60m7u*x4b2D79r5UgtL18 zcCHWk+K6N1Pg2c;0#r-)XpwGX?|Iv)^CLWqwF=a}fXUSM?n6E;cCeW5ER^om#{)Jr zJR81pkK?VoFm@N-s%hd7@hBS0xuCD0-UDVLDDkl7Ck=BAj*^ps`393}AJ+Ruq@fl9 z%R(&?5Nc3lnEKGaYMLmRzKXow1+Gh|O-LG7XiNxkG^uyv zpAtLINwMK}IWK65hOw&O>~EJ}x@lDBtB`yKeV1%GtY4PzT%@~wa1VgZn7QRwc7C)_ zpEF~upeDRg_<#w=dLQ)E?AzXUQpbKXYxkp>;c@aOr6A|dHA?KaZkL0svwB^U#zmx0 zzW4^&G!w7YeRxt<9;d@8H=u(j{6+Uj5AuTluvZZD4b+#+6Rp?(yJ`BC9EW9!b&KdPvzJYe5l7 zMJ9aC@S;sA0{F0XyVY{}FzW0Vh)0mPf_BX82E+CD&)wf2!x@{RO~XBYu80TONl3e+ zA7W$ra6LcDW_j4s-`3tI^VhG*sa5lLc+V6ONf=hO@q4|p`CinYqk1Ko*MbZ6_M05k zSwSwkvu;`|I*_Vl=zPd|dVD0lh&Ha)CSJJvV{AEdF{^Kn_Yfsd!{Pc1GNgw}(^~%)jk5~0L~ms|Rez1fiK~s5t(p1ci5Gq$JC#^JrXf?8 z-Y-Zi_Hvi>oBzV8DSRG!7dm|%IlZg3^0{5~;>)8-+Nk&EhAd(}s^7%MuU}lphNW9Q zT)DPo(ob{tB7_?u;4-qGDo!sh&7gHaJfkh43QwL|bbFVi@+oy;i;M zM&CP^v~lx1U`pi9PmSr&Mc<%HAq0DGH?Ft95)WY`P?~7O z`O^Nr{Py9M#Ls4Y7OM?e%Y*Mvrme%=DwQaye^Qut_1pOMrg^!5u(f9p(D%MR%1K>% zRGw%=dYvw@)o}Fw@tOtPjz`45mfpn;OT&V(;z75J*<$52{sB65$gDjwX3Xa!x_wE- z!#RpwHM#WrO*|~f7z}(}o7US(+0FYLM}6de>gQdtPazXz?OcNv4R^oYLJ_BQOd_l172oSK$6!1r@g+B@0ofJ4*{>_AIxfe-#xp>(1 z@Y3Nfd>fmqvjL;?+DmZk*KsfXJf<%~(gcLwEez%>1c6XSboURUh&k=B)MS>6kw9bY z{7vdev7;A}5fy*ZE23DS{J?8at~xwVk`pEwP5^k?XMQ7u64;KmFJ#POzdG#np~F&H ze-BUh@g54)dsS%nkBb}+GuUEKU~pHcYIg4vSo$J(J|U36bs0Use+3A&IMcR%6@jv$ z=+QI+@wW@?iu}Hpyzlvj-EYeop{f65GX0O%>w#0t|V z1-svWk`hU~m`|O$kw5?Yn5UhI%9P-<45A(v0ld1n+%Ziq&TVpBcV9n}L9Tus-TI)f zd_(g+nYCDR@+wYNQm1GwxhUN4tGMLCzDzPqY$~`l<47{+l<{FZ$L6(>J)|}!bi<)| zE35dl{a2)&leQ@LlDxLQOfUDS`;+ZQ4ozrleQwaR-K|@9T{#hB5Z^t#8 zC-d_G;B4;F#8A2EBL58s$zF-=SCr`P#z zNCTnHF&|X@q>SkAoYu>&s9v@zCpv9lLSH-UZzfhJh`EZA{X#%nqw@@aW^vPcfQrlPs(qQxmC|4tp^&sHy!H!2FH5eC{M@g;ElWNzlb-+ zxpfc0m4<}L){4|RZ>KReag2j%Ot_UKkgpJN!7Y_y3;Ssz{9 z!K3isRtaFtQII5^6}cm9RZd5nTp9psk&u1C(BY`(_tolBwzV_@0F*m%3G%Y?2utyS zY`xM0iDRT)yTyYukFeGQ&W@ReM+ADG1xu@ruq&^GK35`+2r}b^V!m1(VgH|QhIPDE X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/redux/web/icons/Icon-maskable-512.png b/redux/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/redux/web/index.html b/redux/web/index.html index 1f91a874..e90a99cc 100644 --- a/redux/web/index.html +++ b/redux/web/index.html @@ -1,10 +1,38 @@ + + + - redux + + + + + + + + + + + + + redux_sample + - + diff --git a/redux/web/manifest.json b/redux/web/manifest.json new file mode 100644 index 00000000..4895a337 --- /dev/null +++ b/redux/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "redux_sample", + "short_name": "redux_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/redux/windows/.gitignore b/redux/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/redux/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/redux/windows/CMakeLists.txt b/redux/windows/CMakeLists.txt new file mode 100644 index 00000000..da0a4cb9 --- /dev/null +++ b/redux/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(redux_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "redux_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/redux/windows/flutter/CMakeLists.txt b/redux/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/redux/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/redux/windows/flutter/generated_plugin_registrant.cc b/redux/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/redux/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/redux/windows/flutter/generated_plugin_registrant.h b/redux/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/redux/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/redux/windows/flutter/generated_plugins.cmake b/redux/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/redux/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/redux/windows/runner/CMakeLists.txt b/redux/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/redux/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/redux/windows/runner/Runner.rc b/redux/windows/runner/Runner.rc new file mode 100644 index 00000000..2335f91e --- /dev/null +++ b/redux/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "redux_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "redux_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "redux_sample.exe" "\0" + VALUE "ProductName", "redux_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/redux/windows/runner/flutter_window.cpp b/redux/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/redux/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/redux/windows/runner/flutter_window.h b/redux/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/redux/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/redux/windows/runner/main.cpp b/redux/windows/runner/main.cpp new file mode 100644 index 00000000..2435434f --- /dev/null +++ b/redux/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"redux_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/redux/windows/runner/resource.h b/redux/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/redux/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/redux/windows/runner/resources/app_icon.ico b/redux/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/redux/windows/runner/runner.exe.manifest b/redux/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/redux/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/redux/windows/runner/utils.cpp b/redux/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/redux/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/redux/windows/runner/utils.h b/redux/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/redux/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/redux/windows/runner/win32_window.cpp b/redux/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/redux/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/redux/windows/runner/win32_window.h b/redux/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/redux/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 93c41764fd27d45864512ee27e2e73e2ec68cfd4 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 19:53:35 +0100 Subject: [PATCH 63/89] Update mvi_base --- mvi_base/analysis_options.yaml | 44 +++-- mvi_base/lib/mvi_base.dart | 2 +- mvi_base/lib/src/models/todo.dart | 9 +- mvi_base/lib/src/models/user.dart | 8 +- mvi_base/lib/src/mvi_core.dart | 52 ++--- mvi_base/lib/src/mvi_stats.dart | 2 +- mvi_base/lib/src/mvi_todo.dart | 13 +- mvi_base/lib/src/mvi_todos_list.dart | 42 ++-- ...eractor.dart => todo_list_interactor.dart} | 12 +- mvi_base/lib/src/user_interactor.dart | 3 +- mvi_base/pubspec.yaml | 8 +- mvi_base/test/all_tests.dart | 13 -- mvi_base/test/mvi_stats_test.dart | 6 +- mvi_base/test/mvi_stats_test.mocks.dart | 135 +++++++++++++ mvi_base/test/mvi_todo_test.dart | 23 ++- mvi_base/test/mvi_todo_test.mocks.dart | 185 ++++++++++++++++++ mvi_base/test/mvi_todos_list_test.dart | 46 ++--- mvi_base/test/mvi_todos_list_test.mocks.dart | 158 +++++++++++++++ mvi_base/test/todos_interactor_test.dart | 29 +-- .../test/todos_interactor_test.mocks.dart | 67 +++++++ mvi_base/test/user_interactor_test.dart | 14 +- mvi_base/test/user_interactor_test.mocks.dart | 48 +++++ 22 files changed, 768 insertions(+), 151 deletions(-) rename mvi_base/lib/src/{todos_interactor.dart => todo_list_interactor.dart} (88%) delete mode 100644 mvi_base/test/all_tests.dart create mode 100644 mvi_base/test/mvi_stats_test.mocks.dart create mode 100644 mvi_base/test/mvi_todo_test.mocks.dart create mode 100644 mvi_base/test/mvi_todos_list_test.mocks.dart create mode 100644 mvi_base/test/todos_interactor_test.mocks.dart create mode 100644 mvi_base/test/user_interactor_test.mocks.dart diff --git a/mvi_base/analysis_options.yaml b/mvi_base/analysis_options.yaml index 97d4b470..f798e77a 100644 --- a/mvi_base/analysis_options.yaml +++ b/mvi_base/analysis_options.yaml @@ -1,14 +1,32 @@ +# This file configures the static analysis results for your project (errors, +# warnings, and lints). +# +# This enables the 'recommended' set of lints from `package:lints`. +# This set helps identify many issues that may lead to problems when running +# or consuming Dart code, and enforces writing Dart using a single, idiomatic +# style and format. +# +# If you want a smaller set of lints you can change this to specify +# 'package:lints/core.yaml'. These are just the most critical lints +# (the recommended set includes the core lints). +# The core lints are also what is used by pub.dev for scoring packages. + +include: package:lints/recommended.yaml + +# Uncomment the following section to specify additional rules. + analyzer: -# exclude: -# - path/to/excluded/files/** - -# Lint rules and documentation, see http://dart-lang.github.io/linter/lints -linter: - rules: - - cancel_subscriptions - - hash_and_equals - - iterable_contains_unrelated_type - - list_remove_unrelated_type - - test_types_in_equals - - unrelated_type_equality_checks - - valid_regexps + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +# linter: +# rules: +# - camel_case_types + +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/mvi_base/lib/mvi_base.dart b/mvi_base/lib/mvi_base.dart index ce27faad..e9855fdc 100644 --- a/mvi_base/lib/mvi_base.dart +++ b/mvi_base/lib/mvi_base.dart @@ -5,5 +5,5 @@ export 'src/mvi_core.dart'; export 'src/mvi_stats.dart'; export 'src/mvi_todo.dart'; export 'src/mvi_todos_list.dart'; -export 'src/todos_interactor.dart'; +export 'src/todo_list_interactor.dart'; export 'src/user_interactor.dart'; diff --git a/mvi_base/lib/src/models/todo.dart b/mvi_base/lib/src/models/todo.dart index c7ee622a..294e5833 100644 --- a/mvi_base/lib/src/models/todo.dart +++ b/mvi_base/lib/src/models/todo.dart @@ -9,11 +9,10 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, String note = '', String id}) - : this.note = note ?? '', - this.id = id ?? Uuid().generateV4(); + Todo(this.task, {this.complete = false, this.note = '', String? id}) + : id = id ?? Uuid().generateV4(); - Todo copyWith({bool complete, String id, String note, String task}) { + Todo copyWith({bool? complete, String? id, String? note, String? task}) { return Todo( task ?? this.task, complete: complete ?? this.complete, @@ -48,7 +47,7 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, id: entity.id ?? Uuid().generateV4(), ); diff --git a/mvi_base/lib/src/models/user.dart b/mvi_base/lib/src/models/user.dart index b691c873..97190a6c 100644 --- a/mvi_base/lib/src/models/user.dart +++ b/mvi_base/lib/src/models/user.dart @@ -5,11 +5,13 @@ import 'package:todos_repository_core/todos_repository_core.dart'; class User { final String displayName; - User(this.displayName); + User({required this.displayName}); - UserEntity toEntity() => UserEntity(displayName: displayName); + UserEntity toEntity() => + UserEntity(displayName: displayName, id: '', photoUrl: ''); - static User fromEntity(UserEntity entity) => User(entity.displayName); + static User fromEntity(UserEntity entity) => + User(displayName: entity.displayName); @override String toString() { diff --git a/mvi_base/lib/src/mvi_core.dart b/mvi_base/lib/src/mvi_core.dart index 491e6f3b..f0f62e55 100644 --- a/mvi_base/lib/src/mvi_core.dart +++ b/mvi_base/lib/src/mvi_core.dart @@ -4,7 +4,7 @@ import 'package:meta/meta.dart'; import 'package:rxdart/rxdart.dart'; abstract class MviDisposable { - Future tearDown(); + Future tearDown(); } // A class that should contain a number of broadcast StreamControllers. These @@ -21,7 +21,7 @@ class MviPresenter extends Stream final BehaviorSubject _subject; final List> subscriptions = []; - MviPresenter({@required Stream stream, ViewModel initialModel}) + MviPresenter({required Stream stream, ViewModel? initialModel}) : _subject = _createSubject(stream, initialModel); // Get the current state. Useful for initial renders or re-renders when we @@ -30,29 +30,29 @@ class MviPresenter extends Stream void setUp() {} + @override @mustCallSuper - Future tearDown() => Future.wait( - [_subject.close()]..addAll(subscriptions.map((s) => s.cancel())), - ); + Future tearDown() => + Future.wait([_subject.close(), ...subscriptions.map((s) => s.cancel())]); - static _createSubject( + static BehaviorSubject _createSubject( Stream model, - ViewState initialState, + ViewState? initialState, ) { - StreamSubscription subscription; - BehaviorSubject _subject; + late StreamSubscription subscription; + late BehaviorSubject subject; + void onListen() { subscription = model.listen( - _subject.add, - onError: _subject.addError, - onDone: _subject.close, + subject.add, + onError: subject.addError, + onDone: subject.close, ); } - ; void onCancel() => subscription.cancel(); - _subject = initialState == null + subject = initialState == null ? BehaviorSubject( onListen: onListen, onCancel: onCancel, @@ -64,19 +64,21 @@ class MviPresenter extends Stream onCancel: onCancel, ); - return _subject; + return subject; } @override StreamSubscription listen( - void Function(ViewModel event) onData, { - Function onError, - void Function() onDone, - bool cancelOnError, - }) => _subject.stream.listen( - onData, - onError: onError, - onDone: onDone, - cancelOnError: cancelOnError, - ); + void Function(ViewModel event)? onData, { + Function? onError, + void Function()? onDone, + bool? cancelOnError, + }) { + return _subject.stream.listen( + onData, + onError: onError, + onDone: onDone, + cancelOnError: cancelOnError, + ); + } } diff --git a/mvi_base/lib/src/mvi_stats.dart b/mvi_base/lib/src/mvi_stats.dart index 45405ed9..fd135a3e 100644 --- a/mvi_base/lib/src/mvi_stats.dart +++ b/mvi_base/lib/src/mvi_stats.dart @@ -3,7 +3,7 @@ import 'package:mvi_base/src/mvi_core.dart'; import 'package:rxdart/rxdart.dart'; class StatsPresenter extends MviPresenter { - StatsPresenter(TodosInteractor interactor) + StatsPresenter(TodoListInteractor interactor) : super( stream: Rx.combineLatest2( interactor.todos.map(_numActive), diff --git a/mvi_base/lib/src/mvi_todo.dart b/mvi_base/lib/src/mvi_todo.dart index 0703a477..af7ef2e0 100644 --- a/mvi_base/lib/src/mvi_todo.dart +++ b/mvi_base/lib/src/mvi_todo.dart @@ -1,9 +1,8 @@ import 'dart:async'; -import 'package:meta/meta.dart'; import 'package:mvi_base/src/models/models.dart'; import 'package:mvi_base/src/mvi_core.dart'; -import 'package:mvi_base/src/todos_interactor.dart'; +import 'package:mvi_base/src/todo_list_interactor.dart'; mixin DetailView implements MviView { final deleteTodo = StreamController.broadcast(sync: true); @@ -11,19 +10,19 @@ mixin DetailView implements MviView { final updateTodo = StreamController.broadcast(sync: true); @override - Future tearDown() { + Future tearDown() { return Future.wait([deleteTodo.close(), updateTodo.close()]); } } class DetailPresenter extends MviPresenter { final DetailView _view; - final TodosInteractor _interactor; + final TodoListInteractor _interactor; DetailPresenter({ - @required String id, - @required DetailView view, - @required TodosInteractor interactor, + required String id, + required DetailView view, + required TodoListInteractor interactor, }) : _view = view, _interactor = interactor, super(stream: interactor.todo(id)); diff --git a/mvi_base/lib/src/mvi_todos_list.dart b/mvi_base/lib/src/mvi_todos_list.dart index 1b1ac4e9..687d5b3e 100644 --- a/mvi_base/lib/src/mvi_todos_list.dart +++ b/mvi_base/lib/src/mvi_todos_list.dart @@ -1,10 +1,9 @@ import 'dart:async'; -import 'package:meta/meta.dart'; +import 'package:collection/equality.dart'; import 'package:mvi_base/src/models/models.dart'; -import 'package:mvi_base/src/models/user.dart'; import 'package:mvi_base/src/mvi_core.dart'; -import 'package:mvi_base/src/todos_interactor.dart'; +import 'package:mvi_base/src/todo_list_interactor.dart'; import 'package:mvi_base/src/user_interactor.dart'; import 'package:rxdart/rxdart.dart'; @@ -17,15 +16,22 @@ class TodosListModel { final User user; TodosListModel({ - this.activeFilter, - this.allComplete, - this.hasCompletedTodos, - this.visibleTodos, - this.loading, - this.user, + required this.activeFilter, + required this.allComplete, + required this.hasCompletedTodos, + required this.visibleTodos, + required this.loading, + required this.user, }); - factory TodosListModel.initial() => TodosListModel(loading: true); + factory TodosListModel.initial() => TodosListModel( + loading: true, + activeFilter: VisibilityFilter.all, + allComplete: false, + hasCompletedTodos: false, + visibleTodos: [], + user: User(displayName: ''), + ); @override String toString() { @@ -40,7 +46,7 @@ class TodosListModel { activeFilter == other.activeFilter && allComplete == other.allComplete && hasCompletedTodos == other.hasCompletedTodos && - visibleTodos == other.visibleTodos && + const ListEquality().equals(visibleTodos, other.visibleTodos) && loading == other.loading && user == other.user; @@ -69,7 +75,8 @@ class TodosListView implements MviView { VisibilityFilter.all, ); - Future> tearDown() { + @override + Future tearDown() { return Future.wait([ addTodo.close(), deleteTodo.close(), @@ -83,12 +90,12 @@ class TodosListView implements MviView { class TodosListPresenter extends MviPresenter { final TodosListView _view; - final TodosInteractor _interactor; + final TodoListInteractor _interactor; TodosListPresenter({ - @required TodosListView view, - @required TodosInteractor todosInteractor, - @required UserInteractor userInteractor, + required TodosListView view, + required TodoListInteractor todosInteractor, + required UserInteractor userInteractor, }) : _view = view, _interactor = todosInteractor, super( @@ -109,7 +116,7 @@ class TodosListPresenter extends MviPresenter { static Stream _buildStream( TodosListView view, - TodosInteractor interactor, + TodoListInteractor interactor, UserInteractor repository, ) { return Rx.defer(() async* { @@ -145,7 +152,6 @@ class TodosListPresenter extends MviPresenter { case VisibilityFilter.completed: return todos.where((todo) => todo.complete).toList(); case VisibilityFilter.all: - default: return todos; } } diff --git a/mvi_base/lib/src/todos_interactor.dart b/mvi_base/lib/src/todo_list_interactor.dart similarity index 88% rename from mvi_base/lib/src/todos_interactor.dart rename to mvi_base/lib/src/todo_list_interactor.dart index 207dda38..9e3f63a7 100644 --- a/mvi_base/lib/src/todos_interactor.dart +++ b/mvi_base/lib/src/todo_list_interactor.dart @@ -1,12 +1,14 @@ import 'dart:async'; +import 'package:collection/collection.dart'; import 'package:mvi_base/mvi_base.dart'; +import 'package:rxdart/rxdart.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class TodosInteractor { +class TodoListInteractor { final ReactiveTodosRepository repository; - TodosInteractor(this.repository); + TodoListInteractor(this.repository); Stream> get todos { return repository.todos().map( @@ -16,10 +18,8 @@ class TodosInteractor { Stream todo(String id) { return todos - .map((todos) { - return todos.firstWhere((todo) => todo.id == id, orElse: () => null); - }) - .where((todo) => todo != null); + .map((todos) => todos.firstWhereOrNull((todo) => todo.id == id)) + .whereNotNull(); } Stream get allComplete => todos.map(_allComplete); diff --git a/mvi_base/lib/src/user_interactor.dart b/mvi_base/lib/src/user_interactor.dart index 96129df0..257207e4 100644 --- a/mvi_base/lib/src/user_interactor.dart +++ b/mvi_base/lib/src/user_interactor.dart @@ -8,5 +8,6 @@ class UserInteractor { UserInteractor(UserRepository repository) : _repository = repository; - Future login() async => User((await _repository.login()).displayName); + Future login() async => + User(displayName: (await _repository.login()).displayName); } diff --git a/mvi_base/pubspec.yaml b/mvi_base/pubspec.yaml index 6097d278..47553ece 100644 --- a/mvi_base/pubspec.yaml +++ b/mvi_base/pubspec.yaml @@ -2,13 +2,17 @@ name: mvi_base description: The MI parts of an MVI app. environment: - sdk: '>=2.0.0-dev.28.0 <3.0.0' + sdk: ^3.9.0 dependencies: + collection: + meta: + rxdart: todos_repository_core: path: ../todos_repository_core - rxdart: ^0.23.1 dev_dependencies: + lints: test: mockito: + build_runner: diff --git a/mvi_base/test/all_tests.dart b/mvi_base/test/all_tests.dart deleted file mode 100644 index 04018209..00000000 --- a/mvi_base/test/all_tests.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'mvi_stats_test.dart' as mviStats; -import 'mvi_todo_test.dart' as mviTodo; -import 'mvi_todos_list_test.dart' as mviTodosList; -import 'todos_interactor_test.dart' as todosInteractor; -import 'user_interactor_test.dart' as userInteractor; - -void main() { - mviStats.main(); - mviTodo.main(); - mviTodosList.main(); - todosInteractor.main(); - userInteractor.main(); -} diff --git a/mvi_base/test/mvi_stats_test.dart b/mvi_base/test/mvi_stats_test.dart index 097e9696..a7b44bd1 100644 --- a/mvi_base/test/mvi_stats_test.dart +++ b/mvi_base/test/mvi_stats_test.dart @@ -1,15 +1,17 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:test/test.dart'; -class MockTodosInteractor extends Mock implements TodosInteractor {} +import 'mvi_stats_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('MviStats', () { test('should stream the number of active and completed todos', () { - final interactor = MockTodosInteractor(); + final interactor = MockTodoListInteractor(); final todos = [ Todo('Hi', complete: true), Todo('There', complete: true), diff --git a/mvi_base/test/mvi_stats_test.mocks.dart b/mvi_base/test/mvi_stats_test.mocks.dart new file mode 100644 index 00000000..86c07709 --- /dev/null +++ b/mvi_base/test/mvi_stats_test.mocks.dart @@ -0,0 +1,135 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in mvi_base/test/mvi_stats_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:mvi_base/mvi_base.dart' as _i3; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodoListInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodoListInteractor extends _i1.Mock + implements _i3.TodoListInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} diff --git a/mvi_base/test/mvi_todo_test.dart b/mvi_base/test/mvi_todo_test.dart index e61ad083..a61a2739 100644 --- a/mvi_base/test/mvi_todo_test.dart +++ b/mvi_base/test/mvi_todo_test.dart @@ -1,19 +1,20 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:mvi_base/mvi_base.dart'; -import 'package:mvi_base/src/models/models.dart'; import 'package:test/test.dart'; -class MockTodosInteractor extends Mock implements TodosInteractor {} +import 'mvi_todo_test.mocks.dart'; -class MockView extends Object with DetailView {} +class MockDetailView extends Mock with DetailView {} +@GenerateNiceMocks([MockSpec()]) void main() { group('MviTodo', () { group('Presenter', () { test('should load a todo', () { - final interactor = MockTodosInteractor(); + final interactor = MockTodoListInteractor(); final todo = Todo('Hallo'); when( @@ -22,7 +23,7 @@ void main() { final presenter = DetailPresenter( id: todo.id, - view: MockView(), + view: MockDetailView(), interactor: interactor, ); @@ -30,14 +31,16 @@ void main() { }); test('should send deletions to the interactor', () async { - final interactor = MockTodosInteractor(); + final interactor = MockTodoListInteractor(); final todo = Todo('Hallo'); - final view = MockView(); + final view = MockDetailView(); when( interactor.todo(todo.id), ).thenAnswer((_) => Stream.fromIterable([todo])); + when(interactor.deleteTodo(todo.id)).thenAnswer((_) => Future.value()); + final presenter = DetailPresenter( id: todo.id, view: view, @@ -50,9 +53,9 @@ void main() { }); test('should send updates to the interactor', () async { - final interactor = MockTodosInteractor(); + final interactor = MockTodoListInteractor(); final todo = Todo('Hallo'); - final view = MockView(); + final view = MockDetailView(); when( interactor.todo(todo.id), @@ -72,7 +75,7 @@ void main() { group('View', () { test('should clean up after itself', () async { - final view = MockView(); + final view = MockDetailView(); view.tearDown(); diff --git a/mvi_base/test/mvi_todo_test.mocks.dart b/mvi_base/test/mvi_todo_test.mocks.dart new file mode 100644 index 00000000..7bfca2bf --- /dev/null +++ b/mvi_base/test/mvi_todo_test.mocks.dart @@ -0,0 +1,185 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in mvi_base/test/mvi_todo_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:mvi_base/mvi_base.dart' as _i4; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeStreamController_1 extends _i1.SmartFake + implements _i3.StreamController { + _FakeStreamController_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodoListInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodoListInteractor extends _i1.Mock + implements _i4.TodoListInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i3.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i3.Stream.empty(), + returnValueForMissingStub: _i3.Stream.empty(), + ) + as _i3.Stream); + + @override + _i3.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i3.Stream.empty(), + returnValueForMissingStub: _i3.Stream.empty(), + ) + as _i3.Stream); + + @override + _i3.Stream<_i4.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i3.Stream<_i4.Todo>.empty(), + returnValueForMissingStub: _i3.Stream<_i4.Todo>.empty(), + ) + as _i3.Stream<_i4.Todo>); + + @override + _i3.Future updateTodo(_i4.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future addNewTodo(_i4.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i3.Future>.value([]), + returnValueForMissingStub: _i3.Future>.value( + [], + ), + ) + as _i3.Future>); +} + +/// A class which mocks [DetailView]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockDetailView extends _i1.Mock implements _i4.DetailView { + @override + _i3.StreamController get deleteTodo => + (super.noSuchMethod( + Invocation.getter(#deleteTodo), + returnValue: _FakeStreamController_1( + this, + Invocation.getter(#deleteTodo), + ), + returnValueForMissingStub: _FakeStreamController_1( + this, + Invocation.getter(#deleteTodo), + ), + ) + as _i3.StreamController); + + @override + _i3.StreamController<_i4.Todo> get updateTodo => + (super.noSuchMethod( + Invocation.getter(#updateTodo), + returnValue: _FakeStreamController_1<_i4.Todo>( + this, + Invocation.getter(#updateTodo), + ), + returnValueForMissingStub: _FakeStreamController_1<_i4.Todo>( + this, + Invocation.getter(#updateTodo), + ), + ) + as _i3.StreamController<_i4.Todo>); + + @override + _i3.Future tearDown() => + (super.noSuchMethod( + Invocation.method(#tearDown, []), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} diff --git a/mvi_base/test/mvi_todos_list_test.dart b/mvi_base/test/mvi_todos_list_test.dart index edd0b435..0c8e409c 100644 --- a/mvi_base/test/mvi_todos_list_test.dart +++ b/mvi_base/test/mvi_todos_list_test.dart @@ -1,17 +1,13 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:mvi_base/mvi_base.dart'; -import 'package:mvi_base/src/models/models.dart'; import 'package:test/test.dart'; -class MockTodosListInteractor extends Mock implements TodosInteractor {} - -class MockUserInteractor implements UserInteractor { - @override - Future login() => Future.sync(() => User('Erica')); -} +import 'mvi_todos_list_test.mocks.dart'; +@GenerateNiceMocks([MockSpec(), MockSpec()]) void main() { group('MviTodosList', () { group('View', () { @@ -31,7 +27,7 @@ void main() { group('Presenter', () { test('should have an initial state', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final presenter = TodosListPresenter( @@ -44,7 +40,7 @@ void main() { }); test('should show all todos by default', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [Todo('Hi')]; @@ -71,7 +67,7 @@ void main() { }); test('should display completed todos', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -97,7 +93,7 @@ void main() { }); test('should display active todos', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -123,7 +119,7 @@ void main() { }); test('allComplete should stream state of interactor', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -148,7 +144,7 @@ void main() { }); test('hasCompletedTodos should reflect the interactor', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -173,7 +169,7 @@ void main() { }); test('should add todos to the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -200,7 +196,7 @@ void main() { }); test('should send deletions to the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -227,7 +223,7 @@ void main() { }); test('should remove completed todos from the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -254,7 +250,7 @@ void main() { }); test('should toggle complete', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodoListInteractor(); final view = TodosListView(); final todos = [ Todo('Hallo', complete: false), @@ -284,11 +280,11 @@ void main() { } class ModelWith extends Matcher { - final VisibilityFilter activeFilter; - final bool allComplete; - final bool hasCompletedTodos; - final List visibleTodos; - final bool loading; + final VisibilityFilter? activeFilter; + final bool? allComplete; + final bool? hasCompletedTodos; + final List? visibleTodos; + final bool? loading; String errors = ''; ModelWith({ @@ -305,11 +301,11 @@ class ModelWith extends Matcher { } @override - bool matches(dynamic item, Map matchState) { + bool matches(dynamic item, Map matchState) { if (item is TodosListModel) { bool match = true; if (visibleTodos != null) { - match = _listsEqual(visibleTodos, item.visibleTodos); + match = _listsEqual(visibleTodos!, item.visibleTodos); errors += ' visibleTodos'; } @@ -340,7 +336,7 @@ class ModelWith extends Matcher { } static bool _listsEqual(List first, List second) { - if (first.length != second?.length) return false; + if (first.length != second.length) return false; for (int i = 0; i < first.length; i++) { if (first[i] != second[i]) { diff --git a/mvi_base/test/mvi_todos_list_test.mocks.dart b/mvi_base/test/mvi_todos_list_test.mocks.dart new file mode 100644 index 00000000..30dff54b --- /dev/null +++ b/mvi_base/test/mvi_todos_list_test.mocks.dart @@ -0,0 +1,158 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in mvi_base/test/mvi_todos_list_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:mvi_base/mvi_base.dart' as _i3; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeUser_1 extends _i1.SmartFake implements _i3.User { + _FakeUser_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodoListInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodoListInteractor extends _i1.Mock + implements _i3.TodoListInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} + +/// A class which mocks [UserInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserInteractor extends _i1.Mock implements _i3.UserInteractor { + @override + _i4.Future<_i3.User> login() => + (super.noSuchMethod( + Invocation.method(#login, []), + returnValue: _i4.Future<_i3.User>.value( + _FakeUser_1(this, Invocation.method(#login, [])), + ), + returnValueForMissingStub: _i4.Future<_i3.User>.value( + _FakeUser_1(this, Invocation.method(#login, [])), + ), + ) + as _i4.Future<_i3.User>); +} diff --git a/mvi_base/test/todos_interactor_test.dart b/mvi_base/test/todos_interactor_test.dart index 64c94935..9783966d 100644 --- a/mvi_base/test/todos_interactor_test.dart +++ b/mvi_base/test/todos_interactor_test.dart @@ -1,19 +1,20 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:rxdart/rxdart.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class MockReactiveTodosRepository extends Mock - implements ReactiveTodosRepository {} +import 'todos_interactor_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('TodosListInteractor', () { test('should convert repo entities into Todos', () { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todos = [TodoEntity('Hallo', '1', "Note", false)]; when(repository.todos()).thenAnswer((_) => Stream.fromIterable([todos])); @@ -23,7 +24,7 @@ void main() { test('allComplete should stream false if some todos incomplete', () { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todos = [ TodoEntity('Hallo', '1', "Note", false), TodoEntity('Friend', '2', "Note", true), @@ -36,7 +37,7 @@ void main() { test('allComplete should stream true when all todos are complete', () { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todos = [ TodoEntity('Hallo', '1', "Note", true), TodoEntity('Friend', '2', "Note", true), @@ -48,7 +49,7 @@ void main() { test('hasCompletedTodos should be true when all todos are complete', () { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todos = [ TodoEntity('Hallo', '1', "Note", true), TodoEntity('Friend', '2', "Note", true), @@ -61,7 +62,7 @@ void main() { test('hasCompletedTodos should be true when some todos are complete', () { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todos = [ TodoEntity('Hallo', '1', "Note", false), TodoEntity('Friend', '2', "Note", true), @@ -74,7 +75,7 @@ void main() { test('hasCompletedTodos should be false when all todos are incomplete', () { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todos = [ TodoEntity('Hallo', '1', "Note", false), TodoEntity('Friend', '2', "Note", false), @@ -87,7 +88,7 @@ void main() { test('should add todos to the repo', () async { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todo = Todo("AddMe"); when(repository.todos()).thenAnswer((_) => Stream.empty()); @@ -102,7 +103,7 @@ void main() { test('should send deletions to the repo', () async { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); when(repository.todos()).thenAnswer((_) => Stream.empty()); when(repository.deleteTodo(['1'])).thenAnswer((_) => Future.value()); @@ -114,7 +115,7 @@ void main() { test('should remove completed todos from the repo', () async { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final todos = [ TodoEntity('Hallo', '1', "Note", false), TodoEntity('Friend', '2', "Note", true), @@ -130,7 +131,7 @@ void main() { test('if some todos incomplete, should toggle todos complete', () async { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final e1 = TodoEntity('Hallo', '1', "Note", false); final e1Update = TodoEntity('Hallo', '1', "Note", true); final e2 = TodoEntity('Friend', '2', "Note", true); @@ -152,7 +153,7 @@ void main() { test('if all todos incomplete, should toggle all todos complete', () async { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final e1 = TodoEntity('Hallo', '1', "Note", false); final e1Update = TodoEntity('Hallo', '1', "Note", true); final e2 = TodoEntity('Friend', '2', "Note", false); @@ -179,7 +180,7 @@ void main() { test('if all todos complete, should toggle todos incomplete', () async { final repository = MockReactiveTodosRepository(); - final interactor = TodosInteractor(repository); + final interactor = TodoListInteractor(repository); final e1 = TodoEntity('Hallo', '1', "Note", true); final e1Update = TodoEntity('Hallo', '1', "Note", false); final e2 = TodoEntity('Friend', '2', "Note", true); diff --git a/mvi_base/test/todos_interactor_test.mocks.dart b/mvi_base/test/todos_interactor_test.mocks.dart new file mode 100644 index 00000000..14b3d153 --- /dev/null +++ b/mvi_base/test/todos_interactor_test.mocks.dart @@ -0,0 +1,67 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in mvi_base/test/todos_interactor_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/reactive_repository.dart' as _i2; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +/// A class which mocks [ReactiveTodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockReactiveTodosRepository extends _i1.Mock + implements _i2.ReactiveTodosRepository { + @override + _i3.Future addNewTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(List? idList) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [idList]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Stream> todos() => + (super.noSuchMethod( + Invocation.method(#todos, []), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Future updateTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} diff --git a/mvi_base/test/user_interactor_test.dart b/mvi_base/test/user_interactor_test.dart index c71b3e8e..6d88cf0c 100644 --- a/mvi_base/test/user_interactor_test.dart +++ b/mvi_base/test/user_interactor_test.dart @@ -1,23 +1,27 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class MockUserRepository extends Mock implements UserRepository {} +import 'user_interactor_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('UserInteractor', () { test('should convert repo entities into Todos', () async { final repository = MockUserRepository(); final interactor = UserInteractor(repository); - when( - repository.login(), - ).thenAnswer((_) => Future.value(UserEntity(displayName: 'Frida'))); + when(repository.login()).thenAnswer( + (_) => Future.value( + UserEntity(displayName: 'Frida', id: '', photoUrl: ''), + ), + ); - expect(await interactor.login(), User('Frida')); + expect(await interactor.login(), User(displayName: 'Frida')); }); }); } diff --git a/mvi_base/test/user_interactor_test.mocks.dart b/mvi_base/test/user_interactor_test.mocks.dart new file mode 100644 index 00000000..bfb23b3a --- /dev/null +++ b/mvi_base/test/user_interactor_test.mocks.dart @@ -0,0 +1,48 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in mvi_base/test/user_interactor_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/user_entity.dart' as _i2; +import 'package:todos_repository_core/src/user_repository.dart' as _i3; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +class _FakeUserEntity_0 extends _i1.SmartFake implements _i2.UserEntity { + _FakeUserEntity_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [UserRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserRepository extends _i1.Mock implements _i3.UserRepository { + @override + _i4.Future<_i2.UserEntity> login() => + (super.noSuchMethod( + Invocation.method(#login, []), + returnValue: _i4.Future<_i2.UserEntity>.value( + _FakeUserEntity_0(this, Invocation.method(#login, [])), + ), + returnValueForMissingStub: _i4.Future<_i2.UserEntity>.value( + _FakeUserEntity_0(this, Invocation.method(#login, [])), + ), + ) + as _i4.Future<_i2.UserEntity>); +} From de9edc17d33e0f701448b0354190ca6eec6ff041 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 21:16:38 +0100 Subject: [PATCH 64/89] mvi app compelte --- mvi_base/lib/mvi_base.dart | 2 - mvi_base/lib/src/models/todo.dart | 2 +- mvi_base/lib/src/mvi_stats.dart | 17 +- mvi_base/lib/src/mvi_todos_list.dart | 28 +- mvi_base/test/mvi_stats_test.dart | 5 +- mvi_base/test/mvi_todos_list_test.dart | 46 +- mvi_flutter/.metadata | 39 +- mvi_flutter/analysis_options.yaml | 34 + mvi_flutter/android/.gitignore | 7 + mvi_flutter/android/app/build.gradle | 68 -- mvi_flutter/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 33 +- .../com/example/mvi_flutter/MainActivity.kt | 12 - .../mvi_flutter_sample/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- mvi_flutter/android/build.gradle | 31 - mvi_flutter/android/build.gradle.kts | 24 + mvi_flutter/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- mvi_flutter/android/settings.gradle | 15 - mvi_flutter/android/settings.gradle.kts | 26 + mvi_flutter/integration_test/app_test.dart | 26 + mvi_flutter/ios/.gitignore | 2 + .../ios/Flutter/AppFrameworkInfo.plist | 4 +- mvi_flutter/ios/Flutter/Debug.xcconfig | 2 +- mvi_flutter/ios/Flutter/Release.xcconfig | 2 +- mvi_flutter/ios/Podfile | 83 +- .../ios/Runner.xcodeproj/project.pbxproj | 217 +++-- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + mvi_flutter/ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../ios/Runner/GoogleService-Info.plist | 40 - mvi_flutter/ios/Runner/Info.plist | 10 +- .../ios/Runner/Runner-Bridging-Header.h | 2 +- mvi_flutter/ios/RunnerTests/RunnerTests.swift | 12 + .../lib/anonymous_user_repository.dart | 10 + mvi_flutter/lib/dependency_injection.dart | 21 +- mvi_flutter/lib/localization.dart | 2 +- mvi_flutter/lib/main.dart | 16 +- mvi_flutter/lib/main_firebase.dart | 22 - mvi_flutter/lib/main_web.dart | 36 - mvi_flutter/lib/mvi_app.dart | 11 +- mvi_flutter/lib/screens/add_edit_screen.dart | 48 +- mvi_flutter/lib/screens/detail_screen.dart | 22 +- mvi_flutter/lib/screens/home_screen.dart | 45 +- .../lib/widgets/extra_actions_button.dart | 6 +- mvi_flutter/lib/widgets/filter_button.dart | 26 +- mvi_flutter/lib/widgets/loading.dart | 2 +- mvi_flutter/lib/widgets/stats_counter.dart | 93 +- mvi_flutter/lib/widgets/todo_item.dart | 14 +- mvi_flutter/lib/widgets/todo_list.dart | 61 +- mvi_flutter/linux/.gitignore | 1 + mvi_flutter/linux/CMakeLists.txt | 128 +++ mvi_flutter/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + mvi_flutter/linux/runner/CMakeLists.txt | 26 + mvi_flutter/linux/runner/main.cc | 6 + mvi_flutter/linux/runner/my_application.cc | 144 ++++ mvi_flutter/linux/runner/my_application.h | 18 + mvi_flutter/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + mvi_flutter/macos/Podfile | 42 + mvi_flutter/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + mvi_flutter/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + mvi_flutter/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + mvi_flutter/macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + mvi_flutter/pubspec.yaml | 26 +- mvi_flutter/test/detail_screen_test.dart | 10 +- mvi_flutter/test_driver/integration_test.dart | 3 + mvi_flutter/test_driver/todo_app.dart | 8 - mvi_flutter/test_driver/todo_app_test.dart | 5 - mvi_flutter/web/favicon.png | Bin 0 -> 917 bytes mvi_flutter/web/icons/Icon-192.png | Bin 0 -> 5292 bytes mvi_flutter/web/icons/Icon-512.png | Bin 0 -> 8252 bytes mvi_flutter/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes mvi_flutter/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes mvi_flutter/web/index.html | 32 +- mvi_flutter/web/manifest.json | 35 + mvi_flutter/windows/.gitignore | 17 + mvi_flutter/windows/CMakeLists.txt | 108 +++ mvi_flutter/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + mvi_flutter/windows/runner/CMakeLists.txt | 40 + mvi_flutter/windows/runner/Runner.rc | 121 +++ mvi_flutter/windows/runner/flutter_window.cpp | 71 ++ mvi_flutter/windows/runner/flutter_window.h | 33 + mvi_flutter/windows/runner/main.cpp | 43 + mvi_flutter/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + mvi_flutter/windows/runner/utils.cpp | 65 ++ mvi_flutter/windows/runner/utils.h | 19 + mvi_flutter/windows/runner/win32_window.cpp | 288 +++++++ mvi_flutter/windows/runner/win32_window.h | 102 +++ .../lib/src/reactive_repository.dart | 2 +- vanilla/pubspec.yaml | 9 +- 156 files changed, 3985 insertions(+), 660 deletions(-) create mode 100644 mvi_flutter/analysis_options.yaml delete mode 100644 mvi_flutter/android/app/build.gradle create mode 100644 mvi_flutter/android/app/build.gradle.kts delete mode 100644 mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter/MainActivity.kt create mode 100644 mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter_sample/MainActivity.kt create mode 100644 mvi_flutter/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 mvi_flutter/android/app/src/main/res/values-night/styles.xml delete mode 100644 mvi_flutter/android/build.gradle create mode 100644 mvi_flutter/android/build.gradle.kts delete mode 100644 mvi_flutter/android/settings.gradle create mode 100644 mvi_flutter/android/settings.gradle.kts create mode 100644 mvi_flutter/integration_test/app_test.dart create mode 100644 mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mvi_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mvi_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 mvi_flutter/ios/Runner/GoogleService-Info.plist create mode 100644 mvi_flutter/ios/RunnerTests/RunnerTests.swift create mode 100644 mvi_flutter/lib/anonymous_user_repository.dart delete mode 100644 mvi_flutter/lib/main_firebase.dart delete mode 100644 mvi_flutter/lib/main_web.dart create mode 100644 mvi_flutter/linux/.gitignore create mode 100644 mvi_flutter/linux/CMakeLists.txt create mode 100644 mvi_flutter/linux/flutter/CMakeLists.txt create mode 100644 mvi_flutter/linux/flutter/generated_plugin_registrant.cc create mode 100644 mvi_flutter/linux/flutter/generated_plugin_registrant.h create mode 100644 mvi_flutter/linux/flutter/generated_plugins.cmake create mode 100644 mvi_flutter/linux/runner/CMakeLists.txt create mode 100644 mvi_flutter/linux/runner/main.cc create mode 100644 mvi_flutter/linux/runner/my_application.cc create mode 100644 mvi_flutter/linux/runner/my_application.h create mode 100644 mvi_flutter/macos/.gitignore create mode 100644 mvi_flutter/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 mvi_flutter/macos/Flutter/Flutter-Release.xcconfig create mode 100644 mvi_flutter/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 mvi_flutter/macos/Podfile create mode 100644 mvi_flutter/macos/Podfile.lock create mode 100644 mvi_flutter/macos/Runner.xcodeproj/project.pbxproj create mode 100644 mvi_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mvi_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mvi_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mvi_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mvi_flutter/macos/Runner/AppDelegate.swift create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 mvi_flutter/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 mvi_flutter/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 mvi_flutter/macos/Runner/Configs/Debug.xcconfig create mode 100644 mvi_flutter/macos/Runner/Configs/Release.xcconfig create mode 100644 mvi_flutter/macos/Runner/Configs/Warnings.xcconfig create mode 100644 mvi_flutter/macos/Runner/DebugProfile.entitlements create mode 100644 mvi_flutter/macos/Runner/Info.plist create mode 100644 mvi_flutter/macos/Runner/MainFlutterWindow.swift create mode 100644 mvi_flutter/macos/Runner/Release.entitlements create mode 100644 mvi_flutter/macos/RunnerTests/RunnerTests.swift create mode 100644 mvi_flutter/test_driver/integration_test.dart delete mode 100644 mvi_flutter/test_driver/todo_app.dart delete mode 100644 mvi_flutter/test_driver/todo_app_test.dart create mode 100644 mvi_flutter/web/favicon.png create mode 100644 mvi_flutter/web/icons/Icon-192.png create mode 100644 mvi_flutter/web/icons/Icon-512.png create mode 100644 mvi_flutter/web/icons/Icon-maskable-192.png create mode 100644 mvi_flutter/web/icons/Icon-maskable-512.png create mode 100644 mvi_flutter/web/manifest.json create mode 100644 mvi_flutter/windows/.gitignore create mode 100644 mvi_flutter/windows/CMakeLists.txt create mode 100644 mvi_flutter/windows/flutter/CMakeLists.txt create mode 100644 mvi_flutter/windows/flutter/generated_plugin_registrant.cc create mode 100644 mvi_flutter/windows/flutter/generated_plugin_registrant.h create mode 100644 mvi_flutter/windows/flutter/generated_plugins.cmake create mode 100644 mvi_flutter/windows/runner/CMakeLists.txt create mode 100644 mvi_flutter/windows/runner/Runner.rc create mode 100644 mvi_flutter/windows/runner/flutter_window.cpp create mode 100644 mvi_flutter/windows/runner/flutter_window.h create mode 100644 mvi_flutter/windows/runner/main.cpp create mode 100644 mvi_flutter/windows/runner/resource.h create mode 100644 mvi_flutter/windows/runner/resources/app_icon.ico create mode 100644 mvi_flutter/windows/runner/runner.exe.manifest create mode 100644 mvi_flutter/windows/runner/utils.cpp create mode 100644 mvi_flutter/windows/runner/utils.h create mode 100644 mvi_flutter/windows/runner/win32_window.cpp create mode 100644 mvi_flutter/windows/runner/win32_window.h diff --git a/mvi_base/lib/mvi_base.dart b/mvi_base/lib/mvi_base.dart index e9855fdc..78b47d53 100644 --- a/mvi_base/lib/mvi_base.dart +++ b/mvi_base/lib/mvi_base.dart @@ -1,5 +1,3 @@ -library blocs; - export 'src/models/models.dart'; export 'src/mvi_core.dart'; export 'src/mvi_stats.dart'; diff --git a/mvi_base/lib/src/models/todo.dart b/mvi_base/lib/src/models/todo.dart index 294e5833..ccbe5a6e 100644 --- a/mvi_base/lib/src/models/todo.dart +++ b/mvi_base/lib/src/models/todo.dart @@ -49,7 +49,7 @@ class Todo { entity.task, complete: entity.complete, note: entity.note, - id: entity.id ?? Uuid().generateV4(), + id: entity.id, ); } } diff --git a/mvi_base/lib/src/mvi_stats.dart b/mvi_base/lib/src/mvi_stats.dart index fd135a3e..d3c8d643 100644 --- a/mvi_base/lib/src/mvi_stats.dart +++ b/mvi_base/lib/src/mvi_stats.dart @@ -1,14 +1,15 @@ import 'package:mvi_base/mvi_base.dart'; -import 'package:mvi_base/src/mvi_core.dart'; import 'package:rxdart/rxdart.dart'; class StatsPresenter extends MviPresenter { StatsPresenter(TodoListInteractor interactor) : super( + initialModel: StatsModelLoading(), stream: Rx.combineLatest2( interactor.todos.map(_numActive), interactor.todos.map(_numComplete), - (numActive, numComplete) => StatsModel(numActive, numComplete), + (numActive, numComplete) => + StatsModelLoaded(numActive: numActive, numComplete: numComplete), ), ); @@ -21,16 +22,20 @@ class StatsPresenter extends MviPresenter { } } -class StatsModel { +sealed class StatsModel {} + +class StatsModelLoading implements StatsModel {} + +class StatsModelLoaded implements StatsModel { final int numActive; final int numComplete; - StatsModel(this.numActive, this.numComplete); + StatsModelLoaded({required this.numActive, required this.numComplete}); @override bool operator ==(Object other) => identical(this, other) || - other is StatsModel && + other is StatsModelLoaded && runtimeType == other.runtimeType && numActive == other.numActive && numComplete == other.numComplete; @@ -40,6 +45,6 @@ class StatsModel { @override String toString() { - return 'StatsModel{numActive: $numActive, numComplete: $numComplete}'; + return 'StatsModelLoaded{numActive: $numActive, numComplete: $numComplete}'; } } diff --git a/mvi_base/lib/src/mvi_todos_list.dart b/mvi_base/lib/src/mvi_todos_list.dart index 687d5b3e..b2b2ba60 100644 --- a/mvi_base/lib/src/mvi_todos_list.dart +++ b/mvi_base/lib/src/mvi_todos_list.dart @@ -1,13 +1,13 @@ import 'dart:async'; -import 'package:collection/equality.dart'; +import 'package:collection/collection.dart'; import 'package:mvi_base/src/models/models.dart'; import 'package:mvi_base/src/mvi_core.dart'; import 'package:mvi_base/src/todo_list_interactor.dart'; import 'package:mvi_base/src/user_interactor.dart'; import 'package:rxdart/rxdart.dart'; -class TodosListModel { +class TodoListModel { final VisibilityFilter activeFilter; final bool allComplete; final bool hasCompletedTodos; @@ -15,7 +15,7 @@ class TodosListModel { final bool loading; final User user; - TodosListModel({ + TodoListModel({ required this.activeFilter, required this.allComplete, required this.hasCompletedTodos, @@ -24,7 +24,7 @@ class TodosListModel { required this.user, }); - factory TodosListModel.initial() => TodosListModel( + factory TodoListModel.initial() => TodoListModel( loading: true, activeFilter: VisibilityFilter.all, allComplete: false, @@ -41,7 +41,7 @@ class TodosListModel { @override bool operator ==(Object other) => identical(this, other) || - other is TodosListModel && + other is TodoListModel && runtimeType == other.runtimeType && activeFilter == other.activeFilter && allComplete == other.allComplete && @@ -60,7 +60,7 @@ class TodosListModel { user.hashCode; } -class TodosListView implements MviView { +mixin class TodoListView implements MviView { final addTodo = StreamController.broadcast(sync: true); final deleteTodo = StreamController.broadcast(sync: true); @@ -88,18 +88,18 @@ class TodosListView implements MviView { } } -class TodosListPresenter extends MviPresenter { - final TodosListView _view; +class TodoListPresenter extends MviPresenter { + final TodoListView _view; final TodoListInteractor _interactor; - TodosListPresenter({ - required TodosListView view, + TodoListPresenter({ + required TodoListView view, required TodoListInteractor todosInteractor, required UserInteractor userInteractor, }) : _view = view, _interactor = todosInteractor, super( - initialModel: TodosListModel.initial(), + initialModel: TodoListModel.initial(), stream: _buildStream(view, todosInteractor, userInteractor), ); @@ -114,8 +114,8 @@ class TodosListPresenter extends MviPresenter { ]); } - static Stream _buildStream( - TodosListView view, + static Stream _buildStream( + TodoListView view, TodoListInteractor interactor, UserInteractor repository, ) { @@ -132,7 +132,7 @@ class TodosListPresenter extends MviPresenter { _filterTodos, ), (activeFilter, allComplete, hasCompletedTodos, visibleTodos) { - return TodosListModel( + return TodoListModel( user: user, activeFilter: activeFilter, allComplete: allComplete, diff --git a/mvi_base/test/mvi_stats_test.dart b/mvi_base/test/mvi_stats_test.dart index a7b44bd1..b76eef0f 100644 --- a/mvi_base/test/mvi_stats_test.dart +++ b/mvi_base/test/mvi_stats_test.dart @@ -22,7 +22,10 @@ void main() { final presenter = StatsPresenter(interactor); - expect(presenter, emitsThrough(StatsModel(1, 2))); + expect( + presenter, + emitsThrough(StatsModelLoaded(numActive: 1, numComplete: 2)), + ); }); }); } diff --git a/mvi_base/test/mvi_todos_list_test.dart b/mvi_base/test/mvi_todos_list_test.dart index 0c8e409c..01bc34ec 100644 --- a/mvi_base/test/mvi_todos_list_test.dart +++ b/mvi_base/test/mvi_todos_list_test.dart @@ -12,7 +12,7 @@ void main() { group('MviTodosList', () { group('View', () { test('should clean up after itself', () { - final view = TodosListView(); + final view = TodoListView(); view.tearDown(); @@ -28,20 +28,20 @@ void main() { group('Presenter', () { test('should have an initial state', () { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), ); - expect(presenter.latest, TodosListModel.initial()); + expect(presenter.latest, TodoListModel.initial()); }); test('should show all todos by default', () { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [Todo('Hi')]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); @@ -52,7 +52,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([false])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -68,7 +68,7 @@ void main() { test('should display completed todos', () { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -82,7 +82,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([false])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -94,7 +94,7 @@ void main() { test('should display active todos', () { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -108,7 +108,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([false])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -120,7 +120,7 @@ void main() { test('allComplete should stream state of interactor', () { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -134,7 +134,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([false])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -145,7 +145,7 @@ void main() { test('hasCompletedTodos should reflect the interactor', () { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -159,7 +159,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([true])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -170,7 +170,7 @@ void main() { test('should add todos to the interactor', () async { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -184,7 +184,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([true])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -197,7 +197,7 @@ void main() { test('should send deletions to the interactor', () async { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -211,7 +211,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([true])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -224,7 +224,7 @@ void main() { test('should remove completed todos from the interactor', () async { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -238,7 +238,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([true])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -251,7 +251,7 @@ void main() { test('should toggle complete', () async { final interactor = MockTodoListInteractor(); - final view = TodosListView(); + final view = TodoListView(); final todos = [ Todo('Hallo', complete: false), Todo('Friend', complete: true), @@ -265,7 +265,7 @@ void main() { interactor.hasCompletedTodos, ).thenAnswer((_) => Stream.fromIterable([true])); - final presenter = TodosListPresenter( + final presenter = TodoListPresenter( view: view, todosInteractor: interactor, userInteractor: MockUserInteractor(), @@ -302,7 +302,7 @@ class ModelWith extends Matcher { @override bool matches(dynamic item, Map matchState) { - if (item is TodosListModel) { + if (item is TodoListModel) { bool match = true; if (visibleTodos != null) { match = _listsEqual(visibleTodos!, item.visibleTodos); diff --git a/mvi_flutter/.metadata b/mvi_flutter/.metadata index 1b5cec02..05a8ab44 100644 --- a/mvi_flutter/.metadata +++ b/mvi_flutter/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/mvi_flutter/analysis_options.yaml b/mvi_flutter/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/mvi_flutter/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/mvi_flutter/android/.gitignore b/mvi_flutter/android/.gitignore index bc2100d8..be3943c9 100644 --- a/mvi_flutter/android/.gitignore +++ b/mvi_flutter/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/mvi_flutter/android/app/build.gradle b/mvi_flutter/android/app/build.gradle deleted file mode 100644 index fda8349b..00000000 --- a/mvi_flutter/android/app/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.mvi_flutter" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - multiDexEnabled true - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/mvi_flutter/android/app/build.gradle.kts b/mvi_flutter/android/app/build.gradle.kts new file mode 100644 index 00000000..e9bcedb0 --- /dev/null +++ b/mvi_flutter/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.mvi_flutter_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.mvi_flutter_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/mvi_flutter/android/app/src/debug/AndroidManifest.xml b/mvi_flutter/android/app/src/debug/AndroidManifest.xml index 3a0d609d..399f6981 100644 --- a/mvi_flutter/android/app/src/debug/AndroidManifest.xml +++ b/mvi_flutter/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/mvi_flutter/android/app/src/main/AndroidManifest.xml b/mvi_flutter/android/app/src/main/AndroidManifest.xml index b16c8962..7fa5a973 100644 --- a/mvi_flutter/android/app/src/main/AndroidManifest.xml +++ b/mvi_flutter/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter/MainActivity.kt b/mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter/MainActivity.kt deleted file mode 100644 index 8ed35f5d..00000000 --- a/mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.mvi_flutter - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter_sample/MainActivity.kt b/mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter_sample/MainActivity.kt new file mode 100644 index 00000000..06249821 --- /dev/null +++ b/mvi_flutter/android/app/src/main/kotlin/com/example/mvi_flutter_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.mvi_flutter_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/mvi_flutter/android/app/src/main/res/drawable-v21/launch_background.xml b/mvi_flutter/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/mvi_flutter/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mvi_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mvi_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/mvi_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mvi_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 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 literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/mvi_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mvi_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/mvi_flutter/android/app/src/main/res/values/styles.xml b/mvi_flutter/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/mvi_flutter/android/app/src/main/res/values/styles.xml +++ b/mvi_flutter/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/mvi_flutter/android/app/src/profile/AndroidManifest.xml b/mvi_flutter/android/app/src/profile/AndroidManifest.xml index 3a0d609d..399f6981 100644 --- a/mvi_flutter/android/app/src/profile/AndroidManifest.xml +++ b/mvi_flutter/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/mvi_flutter/android/build.gradle b/mvi_flutter/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/mvi_flutter/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/mvi_flutter/android/build.gradle.kts b/mvi_flutter/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/mvi_flutter/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/mvi_flutter/android/gradle.properties b/mvi_flutter/android/gradle.properties index 38c8d454..f018a618 100644 --- a/mvi_flutter/android/gradle.properties +++ b/mvi_flutter/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/mvi_flutter/android/gradle/wrapper/gradle-wrapper.properties b/mvi_flutter/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/mvi_flutter/android/gradle/wrapper/gradle-wrapper.properties +++ b/mvi_flutter/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/mvi_flutter/android/settings.gradle b/mvi_flutter/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/mvi_flutter/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/mvi_flutter/android/settings.gradle.kts b/mvi_flutter/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/mvi_flutter/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/mvi_flutter/integration_test/app_test.dart b/mvi_flutter/integration_test/app_test.dart new file mode 100644 index 00000000..5292d703 --- /dev/null +++ b/mvi_flutter/integration_test/app_test.dart @@ -0,0 +1,26 @@ +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:mvi_base/mvi_base.dart'; +import 'package:mvi_flutter_sample/anonymous_user_repository.dart'; +import 'package:mvi_flutter_sample/mvi_app.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return MviApp( + todoListInteractor: TodoListInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'mvi_flutter_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ), + ), + userInteractor: UserInteractor(AnonymousUserRepository()), + ); + }, + ); +} diff --git a/mvi_flutter/ios/.gitignore b/mvi_flutter/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/mvi_flutter/ios/.gitignore +++ b/mvi_flutter/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/mvi_flutter/ios/Flutter/AppFrameworkInfo.plist b/mvi_flutter/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..1dc6cf76 100644 --- a/mvi_flutter/ios/Flutter/AppFrameworkInfo.plist +++ b/mvi_flutter/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 13.0 diff --git a/mvi_flutter/ios/Flutter/Debug.xcconfig b/mvi_flutter/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/mvi_flutter/ios/Flutter/Debug.xcconfig +++ b/mvi_flutter/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/mvi_flutter/ios/Flutter/Release.xcconfig b/mvi_flutter/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/mvi_flutter/ios/Flutter/Release.xcconfig +++ b/mvi_flutter/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/mvi_flutter/ios/Podfile b/mvi_flutter/ios/Podfile index b30a428b..620e46eb 100644 --- a/mvi_flutter/ios/Podfile +++ b/mvi_flutter/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/mvi_flutter/ios/Runner.xcodeproj/project.pbxproj b/mvi_flutter/ios/Runner.xcodeproj/project.pbxproj index f7a07b0b..47a28a21 100644 --- a/mvi_flutter/ios/Runner.xcodeproj/project.pbxproj +++ b/mvi_flutter/ios/Runner.xcodeproj/project.pbxproj @@ -3,23 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 4EEE3E9323C493FB0065A5A2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4EEE3E9223C493FB0065A5A2 /* GoogleService-Info.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -27,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -38,15 +42,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 4EEE3E9223C493FB0065A5A2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -59,20 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -86,6 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -93,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -100,12 +109,10 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - 4EEE3E9223C493FB0065A5A2 /* GoogleService-Info.plist */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -114,16 +121,26 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -150,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -160,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -173,18 +195,25 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 4EEE3E9323C493FB0065A5A2 /* GoogleService-Info.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); @@ -195,20 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -224,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -235,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -257,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -289,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -297,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -313,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -332,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -366,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -380,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -390,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -422,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -430,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -447,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -474,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -496,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mvi_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mvi_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mvi_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/mvi_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/mvi_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mvi_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mvi_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mvi_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mvi_flutter/ios/Runner/AppDelegate.swift b/mvi_flutter/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/mvi_flutter/ios/Runner/AppDelegate.swift +++ b/mvi_flutter/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 zcmeHN2~<R zh`|8`A_PQ1nSu(UMFx?8j8PC!!VDphaL#`F42fd#7Vlc`zIE4n%Y~eiz4y1j|NDpi z?<@|pSJ-HM`qifhf@m%MamgwK83`XpBA<+azdF#2QsT{X@z0A9Bq>~TVErigKH1~P zRX-!h-f0NJ4Mh++{D}J+K>~~rq}d%o%+4dogzXp7RxX4C>Km5XEI|PAFDmo;DFm6G zzjVoB`@qW98Yl0Kvc-9w09^PrsobmG*Eju^=3f?0o-t$U)TL1B3;sZ^!++3&bGZ!o-*6w?;oOhf z=A+Qb$scV5!RbG+&2S}BQ6YH!FKb0``VVX~T$dzzeSZ$&9=X$3)_7Z{SspSYJ!lGE z7yig_41zpQ)%5dr4ff0rh$@ky3-JLRk&DK)NEIHecf9c*?Z1bUB4%pZjQ7hD!A0r-@NF(^WKdr(LXj|=UE7?gBYGgGQV zidf2`ZT@pzXf7}!NH4q(0IMcxsUGDih(0{kRSez&z?CFA0RVXsVFw3^u=^KMtt95q z43q$b*6#uQDLoiCAF_{RFc{!H^moH_cmll#Fc^KXi{9GDl{>%+3qyfOE5;Zq|6#Hb zp^#1G+z^AXfRKaa9HK;%b3Ux~U@q?xg<2DXP%6k!3E)PA<#4$ui8eDy5|9hA5&{?v z(-;*1%(1~-NTQ`Is1_MGdQ{+i*ccd96ab$R$T3=% zw_KuNF@vI!A>>Y_2pl9L{9h1-C6H8<)J4gKI6{WzGBi<@u3P6hNsXG=bRq5c+z;Gc3VUCe;LIIFDmQAGy+=mRyF++u=drBWV8-^>0yE9N&*05XHZpPlE zxu@?8(ZNy7rm?|<+UNe0Vs6&o?l`Pt>P&WaL~M&#Eh%`rg@Mbb)J&@DA-wheQ>hRV z<(XhigZAT z>=M;URcdCaiO3d^?H<^EiEMDV+7HsTiOhoaMX%P65E<(5xMPJKxf!0u>U~uVqnPN7T!X!o@_gs3Ct1 zlZ_$5QXP4{Aj645wG_SNT&6m|O6~Tsl$q?nK*)(`{J4b=(yb^nOATtF1_aS978$x3 zx>Q@s4i3~IT*+l{@dx~Hst21fR*+5}S1@cf>&8*uLw-0^zK(+OpW?cS-YG1QBZ5q! zgTAgivzoF#`cSz&HL>Ti!!v#?36I1*l^mkrx7Y|K6L#n!-~5=d3;K<;Zqi|gpNUn_ z_^GaQDEQ*jfzh;`j&KXb66fWEk1K7vxQIMQ_#Wu_%3 z4Oeb7FJ`8I>Px;^S?)}2+4D_83gHEq>8qSQY0PVP?o)zAv3K~;R$fnwTmI-=ZLK`= zTm+0h*e+Yfr(IlH3i7gUclNH^!MU>id$Jw>O?2i0Cila#v|twub21@e{S2v}8Z13( zNDrTXZVgris|qYm<0NU(tAPouG!QF4ZNpZPkX~{tVf8xY690JqY1NVdiTtW+NqyRP zZ&;T0ikb8V{wxmFhlLTQ&?OP7 z;(z*<+?J2~z*6asSe7h`$8~Se(@t(#%?BGLVs$p``;CyvcT?7Y!{tIPva$LxCQ&4W z6v#F*);|RXvI%qnoOY&i4S*EL&h%hP3O zLsrFZhv&Hu5tF$Lx!8(hs&?!Kx5&L(fdu}UI5d*wn~A`nPUhG&Rv z2#ixiJdhSF-K2tpVL=)5UkXRuPAFrEW}7mW=uAmtVQ&pGE-&az6@#-(Te^n*lrH^m@X-ftVcwO_#7{WI)5v(?>uC9GG{lcGXYJ~Q8q zbMFl7;t+kV;|;KkBW2!P_o%Czhw&Q(nXlxK9ak&6r5t_KH8#1Mr-*0}2h8R9XNkr zto5-b7P_auqTJb(TJlmJ9xreA=6d=d)CVbYP-r4$hDn5|TIhB>SReMfh&OVLkMk-T zYf%$taLF0OqYF?V{+6Xkn>iX@TuqQ?&cN6UjC9YF&%q{Ut3zv{U2)~$>-3;Dp)*(? zg*$mu8^i=-e#acaj*T$pNowo{xiGEk$%DusaQiS!KjJH96XZ-hXv+jk%ard#fu=@Q z$AM)YWvE^{%tDfK%nD49=PI|wYu}lYVbB#a7wtN^Nml@CE@{Gv7+jo{_V?I*jkdLD zJE|jfdrmVbkfS>rN*+`#l%ZUi5_bMS<>=MBDNlpiSb_tAF|Zy`K7kcp@|d?yaTmB^ zo?(vg;B$vxS|SszusORgDg-*Uitzdi{dUV+glA~R8V(?`3GZIl^egW{a919!j#>f` znL1o_^-b`}xnU0+~KIFLQ)$Q6#ym%)(GYC`^XM*{g zv3AM5$+TtDRs%`2TyR^$(hqE7Y1b&`Jd6dS6B#hDVbJlUXcG3y*439D8MrK!2D~6gn>UD4Imctb z+IvAt0iaW73Iq$K?4}H`7wq6YkTMm`tcktXgK0lKPmh=>h+l}Y+pDtvHnG>uqBA)l zAH6BV4F}v$(o$8Gfo*PB>IuaY1*^*`OTx4|hM8jZ?B6HY;F6p4{`OcZZ(us-RVwDx zUzJrCQlp@mz1ZFiSZ*$yX3c_#h9J;yBE$2g%xjmGF4ca z&yL`nGVs!Zxsh^j6i%$a*I3ZD2SoNT`{D%mU=LKaEwbN(_J5%i-6Va?@*>=3(dQy` zOv%$_9lcy9+(t>qohkuU4r_P=R^6ME+wFu&LA9tw9RA?azGhjrVJKy&8=*qZT5Dr8g--d+S8zAyJ$1HlW3Olryt`yE zFIph~Z6oF&o64rw{>lgZISC6p^CBer9C5G6yq%?8tC+)7*d+ib^?fU!JRFxynRLEZ zj;?PwtS}Ao#9whV@KEmwQgM0TVP{hs>dg(1*DiMUOKHdQGIqa0`yZnHk9mtbPfoLx zo;^V6pKUJ!5#n`w2D&381#5#_t}AlTGEgDz$^;u;-vxDN?^#5!zN9ngytY@oTv!nc zp1Xn8uR$1Z;7vY`-<*?DfPHB;x|GUi_fI9@I9SVRv1)qETbNU_8{5U|(>Du84qP#7 z*l9Y$SgA&wGbj>R1YeT9vYjZuC@|{rajTL0f%N@>3$DFU=`lSPl=Iv;EjuGjBa$Gw zHD-;%YOE@<-!7-Mn`0WuO3oWuL6tB2cpPw~Nvuj|KM@))ixuDK`9;jGMe2d)7gHin zS<>k@!x;!TJEc#HdL#RF(`|4W+H88d4V%zlh(7#{q2d0OQX9*FW^`^_<3r$kabWAB z$9BONo5}*(%kx zOXi-yM_cmB3>inPpI~)duvZykJ@^^aWzQ=eQ&STUa}2uT@lV&WoRzkUoE`rR0)`=l zFT%f|LA9fCw>`enm$p7W^E@U7RNBtsh{_-7vVz3DtB*y#*~(L9+x9*wn8VjWw|Q~q zKFsj1Yl>;}%MG3=PY`$g$_mnyhuV&~O~u~)968$0b2!Jkd;2MtAP#ZDYw9hmK_+M$ zb3pxyYC&|CuAbtiG8HZjj?MZJBFbt`ryf+c1dXFuC z0*ZQhBzNBd*}s6K_G}(|Z_9NDV162#y%WSNe|FTDDhx)K!c(mMJh@h87@8(^YdK$&d*^WQe8Z53 z(|@MRJ$Lk-&ii74MPIs80WsOFZ(NX23oR-?As+*aq6b?~62@fSVmM-_*cb1RzZ)`5$agEiL`-E9s7{GM2?(KNPgK1(+c*|-FKoy}X(D_b#etO|YR z(BGZ)0Ntfv-7R4GHoXp?l5g#*={S1{u-QzxCGng*oWr~@X-5f~RA14b8~B+pLKvr4 zfgL|7I>jlak9>D4=(i(cqYf7#318!OSR=^`xxvI!bBlS??`xxWeg?+|>MxaIdH1U~#1tHu zB{QMR?EGRmQ_l4p6YXJ{o(hh-7Tdm>TAX380TZZZyVkqHNzjUn*_|cb?T? zt;d2s-?B#Mc>T-gvBmQZx(y_cfkXZO~{N zT6rP7SD6g~n9QJ)8F*8uHxTLCAZ{l1Y&?6v)BOJZ)=R-pY=Y=&1}jE7fQ>USS}xP#exo57uND0i*rEk@$;nLvRB@u~s^dwRf?G?_enN@$t* zbL%JO=rV(3Ju8#GqUpeE3l_Wu1lN9Y{D4uaUe`g>zlj$1ER$6S6@{m1!~V|bYkhZA z%CvrDRTkHuajMU8;&RZ&itnC~iYLW4DVkP<$}>#&(`UO>!n)Po;Mt(SY8Yb`AS9lt znbX^i?Oe9r_o=?})IHKHoQGKXsps_SE{hwrg?6dMI|^+$CeC&z@*LuF+P`7LfZ*yr+KN8B4{Nzv<`A(wyR@!|gw{zB6Ha ziwPAYh)oJ(nlqSknu(8g9N&1hu0$vFK$W#mp%>X~AU1ay+EKWcFdif{% z#4!4aoVVJ;ULmkQf!ke2}3hqxLK>eq|-d7Ly7-J9zMpT`?dxo6HdfJA|t)?qPEVBDv z{y_b?4^|YA4%WW0VZd8C(ZgQzRI5(I^)=Ub`Y#MHc@nv0w-DaJAqsbEHDWG8Ia6ju zo-iyr*sq((gEwCC&^TYBWt4_@|81?=B-?#P6NMff(*^re zYqvDuO`K@`mjm_Jd;mW_tP`3$cS?R$jR1ZN09$YO%_iBqh5ftzSpMQQtxKFU=FYmP zeY^jph+g<4>YO;U^O>-NFLn~-RqlHvnZl2yd2A{Yc1G@Ga$d+Q&(f^tnPf+Z7serIU};17+2DU_f4Z z@GaPFut27d?!YiD+QP@)T=77cR9~MK@bd~pY%X(h%L={{OIb8IQmf-!xmZkm8A0Ga zQSWONI17_ru5wpHg3jI@i9D+_Y|pCqVuHJNdHUauTD=R$JcD2K_liQisqG$(sm=k9;L* z!L?*4B~ql7uioSX$zWJ?;q-SWXRFhz2Jt4%fOHA=Bwf|RzhwqdXGr78y$J)LR7&3T zE1WWz*>GPWKZ0%|@%6=fyx)5rzUpI;bCj>3RKzNG_1w$fIFCZ&UR0(7S?g}`&Pg$M zf`SLsz8wK82Vyj7;RyKmY{a8G{2BHG%w!^T|Njr!h9TO2LaP^_f22Q1=l$QiU84ao zHe_#{S6;qrC6w~7{y(hs-?-j?lbOfgH^E=XcSgnwW*eEz{_Z<_Gw7hsN~k)CYt4dQDFxbs5*_&e@Hj)wtt(&JE<3Eq*D z;_gQLvqXoKv=I*gWqM9C(Tvu0>=?hTbOp9!6k6AF;>f6|S5%jGEE}TA9h)e`Yuiu8 d7)l?o1NFcJg%EAfM$P~L002ovPDHLkV1h-^nydf- delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 zcmV;k0ZjhN6T$GM-ShrilfUZt{^9lhT*&z4_x{-O{Rv#2V9EI}xb^~1iQe@7)8g(7UZ4B@ z|4zgB>+<*9=;^^)>d)H7pzGjuM>Jnezy3`@G2r z?{~a!Fj;`+8Gq^x2Jl;?IEV8)=fG217*|@)CCYgFze-x?IFODUIA>nWKpE+bn~n7; z-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGrXPIdeRE&b2Thd#{MtDK$ zpx*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{HY|nMnXd&JOovdH8X7Z*FU!m{%*@P8VRsLNIdO-bn8LBcq}8jNvvE!9=H589 zS1q{F% z25_7w7rzc6_W!D9OuwF9IP!hcRh72%UTx5Ve2G1JF&R7ItnWOsxG;yFhdp@D-v_7k z&fdOmnO#2ee(9>pVtq010kWwNld+dE83*wHn9tfxBT2o#zpv%fYznjAHBY*l!u|2m zSf4hSMNGyg$1xwm-`9dY9-PW*J`_Ic{nAyH#QK&>FZOFo43jar5Bt!M3$uIOIUl>v zb9b5X3#kSD-cQS%Eqv6xMP zE1Yp6YpT=?fig_Kh{=PPj6E)4GIp-ZS?ri68GBT|J*YdD^7L~SW~Sf$s_d;n?I9a6 z86O}SlW`cF=fmCqsn)n2%B|DQU3h+l{eDQ{AqgImvG6u_z#8VP?>ut&`^aBtAJJ25 zoAf%WFtdD7GVuJ{!xnPrg0dHT=P{^0c=^-k#J?H&4rDa;IKAL**R;Bg+qyI7Dl?6?0iCgVW32mf*?q1Sfz z=n}fHUmsBNpsPIOBJ3dV4(?VgItv@Fu4~cXjdeNJ4Q-=X zkTvW(53?5w_f601lYAaaEi%u8TyU>q(bA3&^YwMj`h}NX(m!eGVBcXuOvdhcvL<%! ze>SspqOvb!mSs*L%6rh56AHih;)|A_H@E4+{TDD9A2AP;%Z=;jb0;eMNOFOB*o`eL zkL(y1%$N88ldrF9p|It5P46;5*0JRRCYv=(#zJ-Hgl=74E4rxsvheoAymLMogSucY z<-wA%;3_Qqt>G;*$gX227ciKa_|rX8dLX}1blF`~_UegQ<_E&Pw(wC<7~tyqm@cY8;W|KtwlU@|6uqkmeb zH@Ax}D?b_e=>MVDRK+0{Qa zGY;R24>BfWFnyGF7!ufW!Q|`fW4>kK-q-7OZRfb`_vPm!8NIr@S9IC=?H&Eyp`=&P zL*9tV*omA~}ZeJWoy5HD~$=HdkNnt5A zV=2cVg&Qu0Dhp4(@~Zx7`-nY%PkLGJpP=mE>Zblof3o0x)7Z;>GuWdSyY~yq+njVF zYd0LDFg*Y2YdV&i)hGFMdBe;2{~qZ!dO)F8jg@FX&V%1x1y9 zZDCDUN(sv10C;;)A5}S!)_zo&&EmhbwEC8O`st_jLk~TqpM3I3ie6EAZEY=7*{A37 z@3|k7aoF{g#$;tTvvCj~X8hM!8zsS(y!F;w^}`Q8OhG>aOW&W(9o&}@lW}2o7i1r{ zkPmw(`^6AsF&SI_5^J|b;kxUt(+@oGKww!|U0uDRsQm86&8Zc6nB0ZQ*v$|oW5GR7 zNeD}o;V+juY+3o&_`wGslz(MIm4$phuleklvj3V{4u3x;8O;oh`a>Hk*|{ z*FAE+h3xweWDa|nj5&)z5khf!UgL;iGIRXWnM_9C7*F`zF^}D_R>XVBN(NM4_Nc;S z?6V$;hcC@P*}n}=1i8bDSr6nA{Jx=_VVZ=F3f?YGp6iMhm%|?7UV2u9_DTw{2qZ!K}_qW+HdAyG7cc*d6O|2^A=3T($S!#tom$9pNdZ9^Kv*c znLivji9I5iJb?>y@#}7ipAXTgT>i7E+$n=n@)sdGx%LeyTSyJ|A%X*8Zw`~Odp{;m zVKR2Vhb-L;N>BtLl32UN8@4LQ0Zhg|2dW zA%Z~$U>6B&k+WEkHSFAPXJhuAV83+vgVrB5C?J3(I=%6Y==6G?K@gqBu#N>;!=Z>` zGKPTr$*hCCT{;*P00F@JA6atqAGI?Zc?v}^8M}Gk_sd)5&GL4GazXG#e(b7EZI(u6 zHm|NtZp0!p8}aDO=2CQK!(M`250o_w;5bhXyML)RxoO_A5i{?*THYvcHK?QbFVbTr U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 zcmV;w0YLul63zpV8Gi!+007oyx*7lg0G3cpR7L;)|5U~J0au$Tw)URh`@-w}Xw3Np zS)Ix4{k7)&ujKrh-TO(x_}20L&+q+}+xr1ilg8}*yXgGl_5RcF{f*iBEV%Z~-t4>5 ziGV;=={^- z?sLQGb)?A{hr$_!z8HbH7kH=vM0x-*R~t>;jsO4v^GQTOR7l6|(&r9>FcgO2dg?%> z;=sK?5%;?Pn^T7LL?Y$@5u?06NuIR*0?Yf$Hf5Afk+lM<^ch*jvO$sU*m9J?JI7eI zGFV6+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9R%3*Q+)t%S!MU_`id^@& zY{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&p6kME1_Z%?`+u)^el0!1<0sd p?Eyu!OMLDifi)An*I;?S-wj=m4RYIt!kPd8002ovPDHLkV1kmX^l<oW>oh3TRvgw{P=1#Z!?x zn}<4_r7Pm;=Y`DtGT(NS>r;5D@nGKZ`u{t6qW0CJC+ZrH9j{FtJ6^YX^mwhD|Xp)~1f0tZURa<(;bkKYgRc>_+H9{>i38M^DyQ+j3%uW;lVN7JG5` zC`W9@WE=_hdgs?y>zggc2O&#AZ|^NfPt`r;F9xjD;{e@@m18#JAY*W6xOe%^lXJ|^ zJK6B0cCZ*1LO|a6jstn88fuT7Y7j*a;!MV5>?eHx&7G$m^3K;Euo%dO2hR-Nns=(P z_NbN&;V33!IE~3TBL4Ha*M0A^UEE(;L&!Vb^i*a*qo~Q)N3Q*PAtqxlx`v$`_kQhU zF-q`5{@J!e$IdiKo&_tq8GB((9ngr$*xl1kcKeS*n z-jy#mbnp5e?P&7OxBQ=8?&T~d;|%$jjN{FN@SkY1Gw(-jgEG6evFkkTX!6gszM6mj zx+r-#jB}33*quQ>hsoG?AG4zG|6Ny7Hn+EBabr^p=^FmeeD3pJTCtm* zBCVK=UHrwFyHE2U>mL<9TGY3nTyVav(G*;0O>uE<+OV5*uE(11fwk9C6Lh5LuJ0+h z(3Y}A+gI~1wn-!|U_Y#R_j}e0F1BMghn_FA`J=HJwL{US2JkFemb$Dd)2=4WbDDS-|^?02V`n(BUeX? z=A3T|uXf9RQGm&qY%j%R?C$+W+psLy$4B^3)N`NZTGqDcwI0s`*fq>POvbrkmUljU zzbh>(n_IG%&(h|m=Y5`{MYX*FnsGp_{W@bs*RW?lIsW=@`o?5qYkMypDe9l^*c8?E zW*0PLMK}EZKI|JTrjY;SK%oR9ul&UK$D3`+HR(G73ad?1g0d`il% zb@M&-zVgz@w8Z^PuW!f~+mbo&Fh%wKvKw0T{rBIOr#?CV05~+Cy0yaW;F4 zD*FBZzuGP(oQ=SPttm;atj8{Sd3H(4o89+e@B8&_Sc}@wJgnGFIGZWz z!aI=F`U{q|n9}QZ0a|c2M=ABvRlm*=hp!~dS1k*)1`B{%K4KcuF4gEgdZfW93E8GA4#tvYOE2lCDZF^X1K zS4(>`Epb07XP`O-)5EJHN3d-{_x| z(ssRfOwl*sos7vi7g|(@c4Q!{gS_Kkg_M2s%{S$_=bn=nUwlzUMn)*O=dzRQoAQO; z2`#DjsmYl4U^3?IID^gDly%&YaK^I!)rH#s`c?ef-~J{~J@pi&LYbVL3@tmdwjux5 zGr^tvN@?(ZHASHllW~S$UZ~3!ee%gC<B5QU1~ zX{_w2Y-cJhiS7woY&yz(FYX?NS!yzN_i9IDzeq7C7v&i2(A%wtZ;Xc))IZD3!zoF) zGqTKJH;3Lw4qu4>iV4){>)bQB_%NseBWBpy?7_%X!F6pUm<^Le$~Lj|Cz+V%E1b~oW}%) zdF+KXx5ypVf9b#BmI^IO4!@5ac77gv_k(uSq9!r4P@NdeY{roo#9=I8Cu7b=o9ExZ zfJ5hNH;d7d=8ojjA>B|pv>=#_ZwBG_`5#W+%Y5x-FH(QJk zLMV5St{kiyUHQMN^vbJMBdd*7>E%>adUe%)EdY8UCS#@2X6$DFdEJBE{VRHRO5dVy g(zodwEoL|V4a+}H#QmXIKmY&$07*qoM6N<$g7_o&$^ZZW diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 zcmV;Y6S@Zd)tf5EkN6?7ySE;%oFnVHFUn3e_v* za%}g}ss*bzcO9*yRQS@-3Ia>*T@M@+EVZj2)&)!LJ`bqc+F{``yZt{*+ zKErp#cgA;TVYU(wUdTUI_3w7@L)J{wm#hix0<;Tq2cYaf2F|P=+C7hiz8}ccKY#gc z_)UD5e5V%17a4CPqQBdHyn2rvtk!-LDL^F{8myoatN?47_2V)G0{Oc7Q2TQ$$^||qHgRYc8XD{Hq6IK7S`?w8Oxez-9 zSZd|M!tWQ5dm{)u8vlIvoPmW&7Z7Qn=DNJ&HSt}+;c@_VKpq|}b@&SaY%LglFV$bL z*qeSJ(4tqw{<%KRSy-5K;4JvlDf-8}lQj==b3iu?cCTmD?*tec?1X#2V|}~%=S(;o z3v(%4a`BpqmVe!SvgXV#9C8B8;Dc(w3|<2#*F%F*3zj$;`{emEe4qlDQw;;U0cp@1j(J#vp}{(~yMNAzvkLtL^FIREynt;62F`;S zyvD3vAauIxj`N`%fq9(2L;Q1A7A6%;%7xQ4*QGMRhl2wx*j*2eb-73O((3_tfA@tu z=GkffwcmIJLgH-Q|Ky#ljk^uI*If_+K!YWG&-3WFbNq8=oSlV{fM5hKF;3OiY6s+< zss%%X1F!}|gPq`7Fi;DY{q%Zh_q-15O#hr6XQ;mDumyW82*?xcz98p?V>rD(SQ>I) zpc(+54R*}~?0Ek{h6aELp5D`SwK%|O7+POn`x_{14KE*~py?LkW5{1mr zV1{Eo9Q1xJLlMlgv;51a*g)8YT9=`0BkcKGJ?|IDf31aKn1nc6{~sxvoT&#(tse-M z+P&^R&$T}bh}wT)NfX^%*^;sU{4;g`Zea}nl6R)@P$mYr7A*Fw7X;`R#u|(oiwyhA z8C@5;o&0~LG)6rO%XBE#>*1d>Z8U~|`SRKNCM;wX?g72({Sm$Y>nd7kWO;@7b12r6 zv476gBKU8p^3FDFrY>v{EVSCR0Spb6@Yt`<gGqY6et8z_~^+gV(_BfkdsozYz=# z7SQ`)HdkO#`oFtvfYvuRDb?q&4cNzjzRlL;pKCmgA2@MVusl#XK*Aj$dh6#wr`aFc z*)J;pPj-(WOD$k8|D3I{Kj>072o_q@G=Uks2A1_=05CLI!d>s4FJ!+6{J%Lcp$04e z5$)lh1McD{c>K%7O~l|IGHV8))%9YqyPt&GU-po_)2z=6v>p)ZbLjsv%ST72D4oyY zmVO`qtjCQN3+@5k7cQap1N8nLhQb5=bLIcak{Fdu&bgD70sHx1Fkdc-ZKiu6`Nc7? z)M>A~5fh9aF}M?x4tpncv&F2f6!BVHW9v*r>x1kX8`1SMf|LxjNn#8Ne3+bXY>vd$u|4$owXdbT~eFOIJZ}baiw188CYr)(c3|$JAT3?svN$uV*;s1s6 z_5X+Feu}SekniVk+km%!qh6>44gfQPTClR;aY4TIWi8-~8tnFiwXODlNBfX`_2?P! zptpa6A4(`2pp|t%srT=f{qsHjKh`r!oBrX-fW7^jOB-$lGkA?zt-s8!fuX@}xcBSp z{sH>>e`QdA_2?6@uYZ#$DsN2yS~JLNU{UW85E#H&{$BtIwH_Wk{9kVQ+^>D z0{^acke2c4F^8X9I!3(x8x~3+(3iZRgCz}ARMzZ1P-?9|IK#l8!}rtu-`Y7sYa5$6 z4;N3cuYZ#;QWXH2IT>0YKRA1yUi$bmI$%RiUgut5soh^FWxc8sEVa5H(EBm#{vYZc zrwzP%j3nR@Z~sPIc(74vpdIjobLZ)U4?dt*Kl+5eUK&HK3yy)^0l4=AN}%wq_m;B#6JR7P~8Pi4Gy@tHW4oH&W9h-&BgU1AV+}8dC=fofG_p*Y2qz!+mRHddvMA z(LfYIgLTL!SmHg4pPsEjT_i}?&;HsTYMEb-G~8zfC$r+;T(Y318!WXuV1eJBsUrQ1 zZoxRCTRqP`Pk0=x@1?$_mB@nS-=#m$JCQa2Ms3J|X672fj3D4TgsI}sr^-?f2nKML z{}&)7WDmy8P5m?$UyUr>H5=}2-D6qxZy+Sp006P(3K+QUM6u{AdZ%?hbPrf+tsivC z^&hqj(#-05WZ^DvY|tM&MzZeTU{NX14`7_{aR)4L@9{HqRki46_k)E_cO6jcF=O(D z{JL$J7S}f-3wObu{j=7gocK2^G69PB>L zr>0id>3hwCIrASf;9hWm+Fl!Qy%MI5CqFwug*9F1o8kG;U^njXo1pawUppfsJ#}gbH&whH0_EvRpKXu?M?HV|t!OA?)sn(wznxZH_{mZL# zZPNfL_nkHWMjpVM!BVS%bHJr|g2UsbPd=lsRd?w9C7fSC9q)|IMjCGWVw}F((2sDG z`^}1f4!Dm+TDY>V4-8E|EN#drT;SD@KcRzFZ5NIAff;-T80Udg)(h;IC&Z`3!Zwt1jwab&kNdSA)FnsdK94<&Gu zXxPX|6k1jqqE6OZ{iE`xtcD9ba{LSx*r9O&PYut|W`yC+uC3FLJH~Ji3~22>p~X5F zK-igm0c3x`T-7)velP@Pa5Hd9aP1Efa1QX~(UVkI*Gq4V&ry`03#;q&owiXCk^@Sh z&}zNlKo5bFveM5pyg>;V&9nm;c!G0+W5m44GC|a`(ond0~aV(mVqHsev_j0J2uu@4A2YdAw%$ zm#Z0E2o8boSGHs=*tg$)n~IBzInb0C85zk*$TjnEDvH5#?r?PsEcGSo!O;8!%MH$k z(9A;Lex`iu-bcUtF1_)_8}!O6uTV)zi5jj9IUbK^E!^VSB`Szr(tn7+M!?Wu&;B|L zAAp7~1hry7!MB~M$o&2Dd+*VkZ@x*dzWOS?_~MK7?6c2OMMZ@(Tp9B6^7594`{~po zU7e+FPL%L*>EAh|Ni^*+H0@TOE0}d&p-b>J@wR6 z^w?vMQB6$^!iy~Aw#x((Pd`nMKmIs9{P4qc|NZwh3=ZmRdcZ zVNfig1rDvRGrL2^KbASz2OfBU?z!h4y7SIEsima_VMP)$|8FD@56}AgPd7k>o&I^Y z7A&>?1>%5PM4(`3a0a;bT;(ML=6~06sJGsFE8TY6ZPec0?j5cSd2w+u^#4Y3`@pon ze~A__G}ssJyl|EXSPlVR4Dz( z~0ut0QEwS6xZ;dc|F7O54k_SM%UYLF>j9iLpuWs{{_Hcp>VSig$0u?c?$F36-PF{NSt7yJ zU}$g_5ia2N3*ZE<5zOEw9d-^4*7e<5$a=W1#X2rtj>kMv z`wwwGyn?01dO_FpGp3+(_V-EyE&yNDV0~a8$n$ROopFYYaGz@Gl=Jvsc=Y~-&fHHy z=k)JQQRi&FZU9gWaV;48#D3XRLOoCRaD7RkU_%;DbB)Q$R-5FVsf=i7$vo1wZEC zKnqT;hX!Y(-wnMpbbZH!ww?@mhB!M5^G4Cn;h!_LFdS}xp4nP#R0m4FpdK*v3|JWm z2({m19&md5zaai?xU;nuhG8HId*=2O^vnfC%u*{C<{UVwAFqMk_0V7qTA%l=xufLwFeD{!3;y;J>jc6fRL z0|D$ESo)uW-uXChuuNb^Avi<8oI3#beyR0!S3fWyJ?}LC3vtfQ!blhhiK706>k^y# zEWj3Q4lJNt0JOd?`%CTEudic9=e%-FKYu6r=gcfjG6InTh5d^U{{Mj%z!$+93=MVy zy*&D-wXO!lYhbCdzEk`c*{m!~Dj03yPelJ%*gt>9f8mUJ0sUa9<@zF6>U8%59`%c01z2za2#b zOZ<-jN&+7M_BAMbW!hf`ra;t)y;{E_!Q06{{;{k+xdISQ6!kA(XNQYh=mUY%y&$jx ztf~D6z!w4S-(P*=qxZiQ=PWEtI)F$EdqWe zz@op>4|VSPsQm98T&%?(h0+B?+TcG(@9SUO69g>>bfXXq4fcj|LD0&1zV$isZ-ZT` z-8a0l2QM+g03s9o9Ur=PXsK4c5HR#0_#&W{dce`&d13lI%V4SXesX5vC0qWBJc0!v zys&?G^*{CwFCQuzSZ*pBif>}z#KkEW2n|jNtSSAV{m*lsFOao)`0gy4_%8WQEsQT9 zwhUjLp?}^#63^c^xbpj=;pJ!d4lbWA8jN@C9aXtZ4c`&p72g@(orT#-{2zd-CsMBPpaB2?002ovPDHLkV1nbV^cVmD diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 zcmW+)cQ~8f8%|=?Y^hlkUu_brN^7*JR?XC=5kZvNL~D;~QKd!HCRS}?)d*4)A8JJH z5~D3*##gh%_@%%1y3YIlai04*_qm_@JlDD2IH>VMR;FuA004mXk=}h%>NoK3xI|BV z-$vdV0|2-i9^Kb64+K`FXklmNId#XyPK!@~pXIghLdrF8WQlXmx>inRvYwH6eLdGz6!){BxQ6=ffLru4 z*R`IOEWW`gmF2jkZUbH97lVKDeXlEH#LfJE8nIx*=wr`%Xc_LiPkhQ|3AudBCS1b6 zr8R}CN$HP6N)6lkkxAm$L@)c?UvQON>G$cP-Xk-f5%b6j*M}9Z^xmz>6(@V3LYFVU z6qY}QzUzC+Yhw5=FgL@Ma=E-DKdK;K{vm7kIS<>QZ*wT6%)#1&;a0ap7*S(U;KQ&( zZufTg9Z3&8UKLRWfec5bHzC=>HCX#k%Ic@)=izkUiil@A?%NE>+&hzfwZ-=sn zv>akDS4P#o?T&eQ^%lG?K+isJDEl_v{=)sre7C*r&@ag**-M4quNfA3WdGPkF$PAl z2Py?y7ClL@El`NEyV!`*d@LaCCCtNTL%Eu1aimBz1@X%R-NYvT6UX0!C#3Mp=Pm%= z(4>8`y(me63#V91s0cj%W?a*CtDLTOT#eSfGva!T(6#+>VEDmas7zOQ`XdWBhEx{l z4w1V)zuvpMEq6{!94Cf1{|y#yL)#55;C^)Li#IkK?BoHJIY$JNtae=b8n%zWTe`MZ z^U7{c21JnQN8^(s6;mwL?@1U+w1B`$2wyjxXof94IlB^XVC(C4tbdSyB7~=_GBW_% zmtQv*D~}wW_&MR5`Pit!G~T-t6wG?O_Veu2RpsXV0~Wnmio?M{<<12$;*n#ybNiHU zHIhh~#Ms`!s}4MOoQu!Y|Mw9D;XCd72LD9l21h)N<@)4^=T&}q7aAT3;v0THes{#= z=*Y6NMrT})CHF=6*@X?@EN-?in^+zUcpv^b-JUM3N6I3DkP0rhittI?WND1OCc z7u93NIBrt#Lo1rb!bBwUd~^99Eis%}BLEVotM5tSbQH&V3Kj)OnLb%{;%I*iFzzoB zRkF4j%$%V$4F28*+IsbMz?mLfv%<-cni799Q3BxK?alcI7uicUHDIBeV%bh-;Fz2! z)y}|wz18L$03I^++;yV|`hg)ez^lKHGbvV$=QyKvazvTfMuv6M`FvDvuR(?(@&k-( zr1?~!)Aa!m>7;K8=LIDJ7#|&p+Yz=Ha*TMqLs2MGZzJplcp#OfF?hbQHLKD4IXGou zmnGODrP6Jx5tgeTu7Q1uj<@Ou{vLj}ToMWm+G))K>ww8UB`FI`x3p@)e1q%GcBo#c zaJ;l4@!&J+d*jEMRKvHiJM$IiG~FT7(~28+<@KubE%QIBm~NI{DF?SrSqvGv1u>nm zEotI9>B>TLU}Kf~Y-NGbr@rC0_FOJ?+XA0aq9Lnu=f>-lIx>v0h0Ei1MW_Np|8?vU z_Op-*NH&#tW-PKje==gUp6gya+ZIfUkzVGmI)otj`_tbZ-{g{ld&-$K>x@5OnI4;q zn&fY;aS^i|`^RBQD=o65xANP%HdVgcEV4$oHiJ-TKXvKD{FUe{VVqCfQpTwXjDXV z5cZ_R10>Yjxb~&1qE0sdOJn?3x3UlffV{$iKndStlUN>%S6A+7`6KjeHD^!and~MB z2gfjXN=v~VFLi1MvP4a3R2H3gY5go#MLG8ictEBvgkuXMZuanAICVbxxq_P_;m}T8 zF54Z;={)FHNB6I}j=pB@6e#;1?GCgu1^K~|aU%cz5jq!(u?xbclceXFYuC`m7AoUO zQ6XH2N?LP~b2Zog)0hpp=?4030t&BgbtWk)OkuUF@)py5gouq5Pyq7J^CYkt4|$%` z{1WOfmL?qR!g`&cX+fDx$h$=pBf$@=v1?~`ST%q_5&h){?U;JT0a-&AY?j$T};{{G{V#qA2He2^b)K5NV4 zlgqIJ34%+J-gi<+!9nB?h}Zwv;cv#EbC_#28Kqyd3yRrGzDVH{`j}pH_QHux6)N`+uoGO{bFsIhl85$BRF$jhgPf2$aBbK(8~H;lO!je0d^9n&xLmc2pl zFVhR&lVWTtT29qk(;J680@VVBw+5)fr*{Om&(9cJruuktCf(N4d*S^iUQN|_Xb@FR zKq>i2uQ#U|*Vo6i_dr$CX^iwDS0nN2)3fRU+QwX5O#vyBVj3i-X%JSF4EuqQBQ(kq z!en?$DzNbS0!|l5=NG&Wn6?v+aesuNz{6j=g`D)4pgSvsyK!shr>X#n|Et6k?dwL} z%(h=Gi}m#ZRn%~V1Ry(C?EeyNQ6<_E5^i&E=@ahY?Q5s0FF$p2gk#js)dOsTzz1wB zrqcS)o#>H~D}snHz}5=x*C0y8YI3}DNw~O7l%yTbSfLsK*QX**ZdVb_g54;(L zGO8^!KtyMxlQvdxcPBn2(TL?XkM%M^zwJ5qdwBdc?MXs7zTjPsBp_zVGU4ex%R7Pl zf1Ne{u4Ts;#cEq!R~ExiUVC8n4kPh?pNao?ph*tXP_sRcGfwsK6K$ z7dG{t(!6@W*BX^)-_E<2X_nJf31K(n47qYOmSZ@u%CATIcK0AT%ycXYf5YTdo(-mf zKY8o`cNc?C##V9TQS5I6j?nxYkKK8QGP%t#9YKD*POkh+FU+9e5D-;8i%%T$ev0=G zB1=R+cH7#PP?>mF!lqAS*qPb|!umjh9l+GgJZv#jTSTK8Sjg_!GH#KpuN)r{NrZOX z{Pb(8Dl|?cj)o5QhGuFA^#k!}vuWoeqm|I-|ANScW7jtLctuqv;%294p+GLgFa4G) zIq@U@doZB&)W6$muDiVdN>u>Ec^D-uq#$R6u`L&cob2^cPSg|6am zBseQ%G1D#6!ph3tXLw;MHD67hoDzeqR&g&&x%L5b`)pS3i-0f-OBD}{+C<|TFsCtz zF#|AlxwAD0BA{*=hT3H~Nsr%!eKyLA_Y97$ENITtl&%(3ARLtER$d#vvIMGqfT?8U z%?jIMIos5F`74P0k*F`dy(Xe!UR9b{!ZZCojif)a!qgwB%Y!iD0@cDXm8`s35r1fp zRgtl~M5!)$UAx_ly28rz1?eh24MJ*eWt2=l+xlN89RQiZnm(^jkM_(kr0@)(f|CVJ zKOHXr{n6J^8+9u|sy>WC>I^RF97LX`cAU*k2^Dk8Cn|Wf z&~!ga*XIf}0jbKZSTL21Z_yMfNhkSrHUr&>wv8@A&I<#L8iZW?x1PbIO)mq9;@JH? z7=WwDW*cq;x=E!{3fH?Xul;t~OS2J7u(NwiRikgy)QN%a-%L_Pm-cR^OlKC^NU4Wv z2Gtp+>czSg@%hu?UG)H$77V=|=*Yv4pWzNxoyRosX=BK3bHJ)&D+M>DYRx9K(0%b=XllvfWKIJ?*;vk<+zw^xf^+*`lHueUHkB^iz$#8> zJ|63j_3@#JWoB^SCOO`pD@ly_T#-t8dd;W7R&9WFQbS&kS(^QtbqeYI+JfV;w%F1X zb7vL>2k@x;{O8Bdj9nt*?NsyER5Qd!tSS|?V-k@vd$3}s$s{@$8~5K`naP1_@h9Yc z6F_CVHU6DvFps&J{oOE2+d&6g3<w|G zUvwI!hv*(+;=?ZY3jGPoOH)V8eYVP!q9hYFY&R5-?ogkCWjXIr0T(PKK~NufNo zW_>cm`G-54mNZr1AZ%5zzp8aVElVw^b~PL#kYftI9r$4k^I>!gtxA=x20a4L^7zuI zOgKpNFW`WR(FMwR8opU4lkNZm``!z3%1W1vcm*JFLEH2Dwm`&e772ts*;I{SiSQg$H=<}MS$DV z%UCRgGOY)gdZ}*3$Q|`cAq|*TSrs?NTKAhw^6RgpLvFLTd(GdmZFJ)T+kejCmV+Da zkqD(av22e3eN4E9hVe9I^g*(C=W|Jd#bO%Jas|%D6&d6*utj=G93GEiX%W~!iy63f zMbX`K84<`*aH1Dfd%-d)5R;&cre~Y@taoZn zJF3*MtlKE@Fv@oG{z|(27!E}O$Vl}I3JRuGB@bccb!b$UaqTiN=FY!I0N~L}#hzWM zUTE+(B(ESkPBvstwi*a)MTwe)_7P`XNmW;bB^n=m(P|YXa6!2cA_-1!UKuHUfR6y5 ze9FuAl~a{QhR2;OrOJ_3=Uwa*H#HaOi?(E(;A zt}tE|he~pSB0rQhHa_oBM#s^qde2kaPhUL?kG>2ItSmaij)IF!$llwm=`il??UjmV zZv6DAY+BF9;DtBFT|Zn+49ES&JCZBXlSmj2wbqki?LWQU+}=)PZ-JsvN(JOw@yZ;{ zBpg6CuTi>8`&lFm*m;X;IR2zO5q3YQ&+fad2fNwWFcIoKswrUV-g|+^yk0u+70>&ls#>1Xn$4{ zvO3@;Zq?{2X6;sF&9o4Ip?O5%C+pnL?(s_#fVX-KI=pTog7;tt;hXsr2hW`h#FM+< zw4A_CFVf~jGyP1A2s5T)by@+#C=t%dhQ;#^u_8r$+3(!eJEL9wnl9w$>)Jr$N?oFTvpf-QGSHSn^ft!C&Oq`=8{_qI_zLB|GJf;R{Om`=Ba3;JW`i43 zAkm8}a%Q{6;zyNNNux1s5tzY=`d#^A4ugTHly=P0DL;GY_PpTdyVEqireylN_dm4X z@asVOg*aj2Hw>zS1q){!qXvDq?Uej~&z=jm-L(?Sh>J$NO}&$RN4m^#w`p#-O+x3= zc5x6^zXn}lHbiT+odF$jqYQTqENdlOF2+$%%DOm1x!$ORgV;c|kX>{bX@Yk7kf?4| z+AP^bThI#DflNJuM~Kv2z818UuZ$n2pmImsnvmcrx#PaTVrSeRy4AT-agpZfRov@G zlk3HZug>7o<4*{d>pDDMq4l{G)V#x6M~h&yuP;oc(r8omyub&2$e?k*aoGm%+^m8b zcn+x^yg9DuHk3AGtB-t_HKoa(&~>A%C(-NoIqa<^T53Wjjmz|9N6;8c(*t(pj zj&{Mq8ws!$wmSS>g6E6;x00#VnI9Y3yJ~f5+_yFSe3(>xBe3RRUar6%OGzFmWKL10 zmkFV>%d`^HfNC<2^B9%egXO~BOqDy+LGV6OyparAZ?mZuuz%S?;(q3ru}j7oLV7DU zheVFoww#}28H#+$Tg73{njT}_2XRXqN@#eOMm*kA5HkIz_IE4dCd@TT{|;L+yiOX2Y1&#ueMejPm3~jlgoU|;T@0h*IAqH9 z(;8-55TQN=$DOm3Scv#TvLfN2Bs~Nywn=00E1cOsINmczo=^;n2o_NrPV7vj#{O{f z_d0h-4(U-M6q}n$>3cSjAc*SOTKyds-XWCK2gk_*>A}QyMQ$- zTy%Wy&**_Cm%oZZDX-R#19X>~yC!}*lus99^@pSH^d8Qst6--Les8yPT3CsdPp>3i qj{nbl(D%UZ^d4JB0mqQ>t`JfW&3MbB4N3ir4S1w$d>^Zgi25IS_L{8# diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! 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 K)eG-g1^+*MxH5nM diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 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 diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 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 diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/mvi_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mvi_flutter/macos/Runner/Configs/AppInfo.xcconfig b/mvi_flutter/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..28932bba --- /dev/null +++ b/mvi_flutter/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = mvi_flutter_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/mvi_flutter/macos/Runner/Configs/Debug.xcconfig b/mvi_flutter/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/mvi_flutter/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/mvi_flutter/macos/Runner/Configs/Release.xcconfig b/mvi_flutter/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/mvi_flutter/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/mvi_flutter/macos/Runner/Configs/Warnings.xcconfig b/mvi_flutter/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/mvi_flutter/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/mvi_flutter/macos/Runner/DebugProfile.entitlements b/mvi_flutter/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/mvi_flutter/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/mvi_flutter/macos/Runner/Info.plist b/mvi_flutter/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/mvi_flutter/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/mvi_flutter/macos/Runner/MainFlutterWindow.swift b/mvi_flutter/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/mvi_flutter/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/mvi_flutter/macos/Runner/Release.entitlements b/mvi_flutter/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/mvi_flutter/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/mvi_flutter/macos/RunnerTests/RunnerTests.swift b/mvi_flutter/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/mvi_flutter/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/mvi_flutter/pubspec.yaml b/mvi_flutter/pubspec.yaml index 2a9d57e4..4660f380 100644 --- a/mvi_flutter/pubspec.yaml +++ b/mvi_flutter/pubspec.yaml @@ -12,32 +12,33 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: "none" environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ^3.9.0 dependencies: flutter: sdk: flutter - todos_repository_local_storage: - path: ../todos_repository_local_storage - firebase_flutter_repository: - path: ../firebase_flutter_repository - todos_app_core: - path: ../todos_app_core mvi_base: path: ../mvi_base - rxdart: ^0.23.1 - key_value_store_flutter: - key_value_store_web: + rxdart: + rxdart_flutter: shared_preferences: + todos_app_core: + path: ../todos_app_core + todos_repository_core: + path: ../todos_repository_core + todos_repository_local_storage: + path: ../todos_repository_local_storage dev_dependencies: + build_runner: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter - test: integration_tests: path: ../integration_tests mockito: @@ -47,7 +48,6 @@ dev_dependencies: # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/mvi_flutter/test/detail_screen_test.dart b/mvi_flutter/test/detail_screen_test.dart index dbb45749..14488515 100644 --- a/mvi_flutter/test/detail_screen_test.dart +++ b/mvi_flutter/test/detail_screen_test.dart @@ -1,11 +1,11 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; +import 'package:flutter_test/flutter_test.dart' as test; import 'package:flutter_test/flutter_test.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/screens/detail_screen.dart'; -import 'package:test/test.dart' as test; +import 'package:todos_app_core/todos_app_core.dart'; void main() { test.group('DetailScreen', () { @@ -81,7 +81,7 @@ void main() { // Expect that the deleteTodoStream emits the current id. The Presenter // is responsible for listening to this stream and doing work with it! - expect(key.currentState.deleteTodo.stream, test.emits(todo.id)); + expect(key.currentState!.deleteTodo.stream, test.emits(todo.id)); }); testWidgets('should update a todo', (tester) async { @@ -108,7 +108,7 @@ void main() { // Expect that the deleteTodoStream emits the current id. The Presenter // is responsible for listening to this stream and doing work with it! expect( - key.currentState.updateTodo.stream, + key.currentState!.updateTodo.stream, test.emits(todo.copyWith(complete: true)), ); }); @@ -140,7 +140,7 @@ class CheckedMatcher extends test.Matcher { } @override - bool matches(item, Map matchState) { + bool matches(item, Map matchState) { if (item is Checkbox) { return item.value == checked; } else { diff --git a/mvi_flutter/test_driver/integration_test.dart b/mvi_flutter/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/mvi_flutter/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/mvi_flutter/test_driver/todo_app.dart b/mvi_flutter/test_driver/todo_app.dart deleted file mode 100644 index 869b9a39..00000000 --- a/mvi_flutter/test_driver/todo_app.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:mvi_flutter_sample/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/mvi_flutter/test_driver/todo_app_test.dart b/mvi_flutter/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/mvi_flutter/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/mvi_flutter/web/favicon.png b/mvi_flutter/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/mvi_flutter/web/icons/Icon-192.png b/mvi_flutter/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/mvi_flutter/web/icons/Icon-512.png b/mvi_flutter/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/mvi_flutter/web/icons/Icon-maskable-192.png b/mvi_flutter/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/mvi_flutter/web/icons/Icon-maskable-512.png b/mvi_flutter/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/mvi_flutter/web/index.html b/mvi_flutter/web/index.html index 5dad3de1..8b82f0e1 100644 --- a/mvi_flutter/web/index.html +++ b/mvi_flutter/web/index.html @@ -1,10 +1,38 @@ + + + - mvi_flutter + + + + + + + + + + + + + mvi_flutter_sample + - + diff --git a/mvi_flutter/web/manifest.json b/mvi_flutter/web/manifest.json new file mode 100644 index 00000000..e3854a52 --- /dev/null +++ b/mvi_flutter/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "mvi_flutter_sample", + "short_name": "mvi_flutter_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/mvi_flutter/windows/.gitignore b/mvi_flutter/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/mvi_flutter/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/mvi_flutter/windows/CMakeLists.txt b/mvi_flutter/windows/CMakeLists.txt new file mode 100644 index 00000000..c338cda6 --- /dev/null +++ b/mvi_flutter/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(mvi_flutter_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "mvi_flutter_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/mvi_flutter/windows/flutter/CMakeLists.txt b/mvi_flutter/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/mvi_flutter/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/mvi_flutter/windows/flutter/generated_plugin_registrant.cc b/mvi_flutter/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/mvi_flutter/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/mvi_flutter/windows/flutter/generated_plugin_registrant.h b/mvi_flutter/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/mvi_flutter/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/mvi_flutter/windows/flutter/generated_plugins.cmake b/mvi_flutter/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/mvi_flutter/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/mvi_flutter/windows/runner/CMakeLists.txt b/mvi_flutter/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/mvi_flutter/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/mvi_flutter/windows/runner/Runner.rc b/mvi_flutter/windows/runner/Runner.rc new file mode 100644 index 00000000..87076f0d --- /dev/null +++ b/mvi_flutter/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "mvi_flutter_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "mvi_flutter_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "mvi_flutter_sample.exe" "\0" + VALUE "ProductName", "mvi_flutter_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/mvi_flutter/windows/runner/flutter_window.cpp b/mvi_flutter/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/mvi_flutter/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/mvi_flutter/windows/runner/flutter_window.h b/mvi_flutter/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/mvi_flutter/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/mvi_flutter/windows/runner/main.cpp b/mvi_flutter/windows/runner/main.cpp new file mode 100644 index 00000000..f1f08a76 --- /dev/null +++ b/mvi_flutter/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"mvi_flutter_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/mvi_flutter/windows/runner/resource.h b/mvi_flutter/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/mvi_flutter/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mvi_flutter/windows/runner/resources/app_icon.ico b/mvi_flutter/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 zcmeHQc|26z|35SKE&G-*mXah&B~fFkXr)DEO&hIfqby^T&>|8^_Ub8Vp#`BLl3lbZ zvPO!8k!2X>cg~Elr=IVxo~J*a`+9wR=A83c-k-DFd(XM&UI1VKCqM@V;DDtJ09WB} zRaHKiW(GT00brH|0EeTeKVbpbGZg?nK6-j827q-+NFM34gXjqWxJ*a#{b_apGN<-L_m3#8Z26atkEn& ze87Bvv^6vVmM+p+cQ~{u%=NJF>#(d;8{7Q{^rWKWNtf14H}>#&y7$lqmY6xmZryI& z($uy?c5-+cPnt2%)R&(KIWEXww>Cnz{OUpT>W$CbO$h1= z#4BPMkFG1Y)x}Ui+WXr?Z!w!t_hjRq8qTaWpu}FH{MsHlU{>;08goVLm{V<&`itk~ zE_Ys=D(hjiy+5=?=$HGii=Y5)jMe9|wWoD_K07(}edAxh`~LBorOJ!Cf@f{_gNCC| z%{*04ViE!#>@hc1t5bb+NO>ncf@@Dv01K!NxH$3Eg1%)|wLyMDF8^d44lV!_Sr}iEWefOaL z8f?ud3Q%Sen39u|%00W<#!E=-RpGa+H8}{ulxVl4mwpjaU+%2pzmi{3HM)%8vb*~-M9rPUAfGCSos8GUXp02|o~0BTV2l#`>>aFV&_P$ejS;nGwSVP8 zMbOaG7<7eKD>c12VdGH;?2@q7535sa7MN*L@&!m?L`ASG%boY7(&L5imY#EQ$KrBB z4@_tfP5m50(T--qv1BJcD&aiH#b-QC>8#7Fx@3yXlonJI#aEIi=8&ChiVpc#N=5le zM*?rDIdcpawoc5kizv$GEjnveyrp3sY>+5_R5;>`>erS%JolimF=A^EIsAK zsPoVyyUHCgf0aYr&alx`<)eb6Be$m&`JYSuBu=p8j%QlNNp$-5C{b4#RubPb|CAIS zGE=9OFLP7?Hgc{?k45)84biT0k&-C6C%Q}aI~q<(7BL`C#<6HyxaR%!dFx7*o^laG z=!GBF^cwK$IA(sn9y6>60Rw{mYRYkp%$jH z*xQM~+bp)G$_RhtFPYx2HTsWk80+p(uqv9@I9)y{b$7NK53rYL$ezbmRjdXS?V}fj zWxX_feWoLFNm3MG7pMUuFPs$qrQWO9!l2B(SIuy2}S|lHNbHzoE+M2|Zxhjq9+Ws8c{*}x^VAib7SbxJ*Q3EnY5lgI9 z=U^f3IW6T=TWaVj+2N%K3<%Un;CF(wUp`TC&Y|ZjyFu6co^uqDDB#EP?DV5v_dw~E zIRK*BoY9y-G_ToU2V_XCX4nJ32~`czdjT!zwme zGgJ0nOk3U4@IE5JwtM}pwimLjk{ln^*4HMU%Fl4~n(cnsLB}Ja-jUM>xIB%aY;Nq8 z)Fp8dv1tkqKanv<68o@cN|%thj$+f;zGSO7H#b+eMAV8xH$hLggtt?O?;oYEgbq@= zV(u9bbd12^%;?nyk6&$GPI%|+<_mEpJGNfl*`!KV;VfmZWw{n{rnZ51?}FDh8we_L z8OI9nE31skDqJ5Oa_ybn7|5@ui>aC`s34p4ZEu6-s!%{uU45$Zd1=p$^^dZBh zu<*pDDPLW+c>iWO$&Z_*{VSQKg7=YEpS3PssPn1U!lSm6eZIho*{@&20e4Y_lRklKDTUCKI%o4Pc<|G^Xgu$J^Q|B87U;`c1zGwf^-zH*VQ^x+i^OUWE0yd z;{FJq)2w!%`x7yg@>uGFFf-XJl4H`YtUG%0slGKOlXV`q?RP>AEWg#x!b{0RicxGhS!3$p7 zij;{gm!_u@D4$Ox%>>bPtLJ> zwKtYz?T_DR1jN>DkkfGU^<#6sGz|~p*I{y`aZ>^Di#TC|Z!7j_O1=Wo8thuit?WxR zh9_S>kw^{V^|g}HRUF=dcq>?q(pHxw!8rx4dC6vbQVmIhmICF#zU!HkHpQ>9S%Uo( zMw{eC+`&pb=GZRou|3;Po1}m46H6NGd$t<2mQh}kaK-WFfmj_66_17BX0|j-E2fe3Jat}ijpc53 zJV$$;PC<5aW`{*^Z6e5##^`Ed#a0nwJDT#Qq~^e8^JTA=z^Kl>La|(UQ!bI@#ge{Dzz@61p-I)kc2?ZxFt^QQ}f%ldLjO*GPj(5)V9IyuUakJX=~GnTgZ4$5!3E=V#t`yOG4U z(gphZB6u2zsj=qNFLYShhg$}lNpO`P9xOSnO*$@@UdMYES*{jJVj|9z-}F^riksLK zbsU+4-{281P9e2UjY6tse^&a)WM1MFw;p#_dHhWI7p&U*9TR0zKdVuQed%6{otTsq z$f~S!;wg#Bd9kez=Br{m|66Wv z#g1xMup<0)H;c2ZO6su_ii&m8j&+jJz4iKnGZ&wxoQX|5a>v&_e#6WA!MB_4asTxLRGQCC5cI(em z%$ZfeqP>!*q5kU>a+BO&ln=4Jm>Ef(QE8o&RgLkk%2}4Tf}U%IFP&uS7}&|Q-)`5< z+e>;s#4cJ-z%&-^&!xsYx777Wt(wZY9(3(avmr|gRe4cD+a8&!LY`1^T?7x{E<=kdY9NYw>A;FtTvQ=Y&1M%lyZPl$ss1oY^Sl8we}n}Aob#6 zl4jERwnt9BlSoWb@3HxYgga(752Vu6Y)k4yk9u~Kw>cA5&LHcrvn1Y-HoIuFWg~}4 zEw4bR`mXZQIyOAzo)FYqg?$5W<;^+XX%Uz61{-L6@eP|lLH%|w?g=rFc;OvEW;^qh z&iYXGhVt(G-q<+_j}CTbPS_=K>RKN0&;dubh0NxJyDOHFF;<1k!{k#7b{|Qok9hac z;gHz}6>H6C6RnB`Tt#oaSrX0p-j-oRJ;_WvS-qS--P*8}V943RT6kou-G=A+7QPGQ z!ze^UGxtW3FC0$|(lY9^L!Lx^?Q8cny(rR`es5U;-xBhphF%_WNu|aO<+e9%6LuZq zt(0PoagJG<%hyuf;te}n+qIl_Ej;czWdc{LX^pS>77s9t*2b4s5dvP_!L^3cwlc)E!(!kGrg~FescVT zZCLeua3f4;d;Tk4iXzt}g}O@nlK3?_o91_~@UMIl?@77Qc$IAlLE95#Z=TES>2E%z zxUKpK{_HvGF;5%Q7n&vA?`{%8ohlYT_?(3A$cZSi)MvIJygXD}TS-3UwyUxGLGiJP znblO~G|*uA^|ac8E-w#}uBtg|s_~s&t>-g0X%zIZ@;o_wNMr_;{KDg^O=rg`fhDZu zFp(VKd1Edj%F zWHPl+)FGj%J1BO3bOHVfH^3d1F{)*PL&sRX`~(-Zy3&9UQX)Z;c51tvaI2E*E7!)q zcz|{vpK7bjxix(k&6=OEIBJC!9lTkUbgg?4-yE{9+pFS)$Ar@vrIf`D0Bnsed(Cf? zObt2CJ>BKOl>q8PyFO6w)+6Iz`LW%T5^R`U_NIW0r1dWv6OY=TVF?N=EfA(k(~7VBW(S;Tu5m4Lg8emDG-(mOSSs=M9Q&N8jc^Y4&9RqIsk(yO_P(mcCr}rCs%1MW1VBrn=0-oQN(Xj!k%iKV zb%ricBF3G4S1;+8lzg5PbZ|$Se$)I=PwiK=cDpHYdov2QO1_a-*dL4KUi|g&oh>(* zq$<`dQ^fat`+VW?m)?_KLn&mp^-@d=&7yGDt<=XwZZC=1scwxO2^RRI7n@g-1o8ps z)&+et_~)vr8aIF1VY1Qrq~Xe``KJrQSnAZ{CSq3yP;V*JC;mmCT6oRLSs7=GA?@6g zUooM}@tKtx(^|aKK8vbaHlUQqwE0}>j&~YlN3H#vKGm@u)xxS?n9XrOWUfCRa< z`20Fld2f&;gg7zpo{Adh+mqNntMc-D$N^yWZAZRI+u1T1zWHPxk{+?vcS1D>08>@6 zLhE@`gt1Y9mAK6Z4p|u(5I%EkfU7rKFSM=E4?VG9tI;a*@?6!ey{lzN5=Y-!$WFSe z&2dtO>^0@V4WRc#L&P%R(?@KfSblMS+N+?xUN$u3K4Ys%OmEh+tq}fnU}i>6YHM?< zlnL2gl~sF!j!Y4E;j3eIU-lfa`RsOL*Tt<%EFC0gPzoHfNWAfKFIKZN8}w~(Yi~=q z>=VNLO2|CjkxP}RkutxjV#4fWYR1KNrPYq5ha9Wl+u>ipsk*I(HS@iLnmGH9MFlTU zaFZ*KSR0px>o+pL7BbhB2EC1%PJ{67_ z#kY&#O4@P=OV#-79y_W>Gv2dxL*@G7%LksNSqgId9v;2xJ zrh8uR!F-eU$NMx@S*+sk=C~Dxr9Qn7TfWnTupuHKuQ$;gGiBcU>GF5sWx(~4IP3`f zWE;YFO*?jGwYh%C3X<>RKHC-DZ!*r;cIr}GLOno^3U4tFSSoJp%oHPiSa%nh=Zgn% z14+8v@ygy0>UgEN1bczD6wK45%M>psM)y^)IfG*>3ItX|TzV*0i%@>L(VN!zdKb8S?Qf7BhjNpziA zR}?={-eu>9JDcl*R=OP9B8N$IcCETXah9SUDhr{yrld{G;PnCWRsPD7!eOOFBTWUQ=LrA_~)mFf&!zJX!Oc-_=kT<}m|K52 z)M=G#;p;Rdb@~h5D{q^K;^fX-m5V}L%!wVC2iZ1uu401Ll}#rocTeK|7FAeBRhNdQ zCc2d^aQnQp=MpOmak60N$OgS}a;p(l9CL`o4r(e-nN}mQ?M&isv-P&d$!8|1D1I(3-z!wi zTgoo)*Mv`gC?~bm?S|@}I|m-E2yqPEvYybiD5azInexpK8?9q*$9Yy9-t%5jU8~ym zgZDx>!@ujQ=|HJnwp^wv-FdD{RtzO9SnyfB{mH_(c!jHL*$>0o-(h(eqe*ZwF6Lvu z{7rkk%PEqaA>o+f{H02tzZ@TWy&su?VNw43! z-X+rN`6llvpUms3ZiSt)JMeztB~>9{J8SPmYs&qohxdYFi!ra8KR$35Zp9oR)eFC4 zE;P31#3V)n`w$fZ|4X-|%MX`xZDM~gJyl2W;O$H25*=+1S#%|53>|LyH za@yh+;325%Gq3;J&a)?%7X%t@WXcWL*BaaR*7UEZad4I8iDt7^R_Fd`XeUo256;sAo2F!HcIQKk;h})QxEsPE5BcKc7WyerTchgKmrfRX z!x#H_%cL#B9TWAqkA4I$R^8{%do3Y*&(;WFmJ zU7Dih{t1<{($VtJRl9|&EB?|cJ)xse!;}>6mSO$o5XIx@V|AA8ZcoD88ZM?C*;{|f zZVmf94_l1OmaICt`2sTyG!$^UeTHx9YuUP!omj(r|7zpm5475|yXI=rR>>fteLI+| z)MoiGho0oEt=*J(;?VY0QzwCqw@cVm?d7Y!z0A@u#H?sCJ*ecvyhj& z-F77lO;SH^dmf?L>3i>?Z*U}Em4ZYV_CjgfvzYsRZ+1B!Uo6H6mbS<-FFL`ytqvb& zE7+)2ahv-~dz(Hs+f})z{*4|{)b=2!RZK;PWwOnO=hG7xG`JU5>bAvUbdYd_CjvtHBHgtGdlO+s^9ca^Bv3`t@VRX2_AD$Ckg36OcQRF zXD6QtGfHdw*hx~V(MV-;;ZZF#dJ-piEF+s27z4X1qi5$!o~xBnvf=uopcn7ftfsZc zy@(PuOk`4GL_n(H9(E2)VUjqRCk9kR?w)v@xO6Jm_Mx})&WGEl=GS0#)0FAq^J*o! zAClhvoTsNP*-b~rN{8Yym3g{01}Ep^^Omf=SKqvN?{Q*C4HNNAcrowIa^mf+3PRy! z*_G-|3i8a;+q;iP@~Of_$(vtFkB8yOyWt2*K)vAn9El>=D;A$CEx6b*XF@4y_6M+2 zpeW`RHoI_p(B{%(&jTHI->hmNmZjHUj<@;7w0mx3&koy!2$@cfX{sN19Y}euYJFn& z1?)+?HCkD0MRI$~uB2UWri})0bru_B;klFdwsLc!ne4YUE;t41JqfG# zZJq6%vbsdx!wYeE<~?>o4V`A3?lN%MnKQ`z=uUivQN^vzJ|C;sdQ37Qn?;lpzg})y z)_2~rUdH}zNwX;Tp0tJ78+&I=IwOQ-fl30R79O8@?Ub8IIA(6I`yHn%lARVL`%b8+ z4$8D-|MZZWxc_)vu6@VZN!HsI$*2NOV&uMxBNzIbRgy%ob_ zhwEH{J9r$!dEix9XM7n&c{S(h>nGm?el;gaX0@|QnzFD@bne`el^CO$yXC?BDJ|Qg z+y$GRoR`?ST1z^e*>;!IS@5Ovb7*RlN>BV_UC!7E_F;N#ky%1J{+iixp(dUJj93aK zzHNN>R-oN7>kykHClPnoPTIj7zc6KM(Pnlb(|s??)SMb)4!sMHU^-ntJwY5Big7xv zb1Ew`Xj;|D2kzGja*C$eS44(d&RMU~c_Y14V9_TLTz0J#uHlsx`S6{nhsA0dWZ#cG zJ?`fO50E>*X4TQLv#nl%3GOk*UkAgt=IY+u0LNXqeln3Z zv$~&Li`ZJOKkFuS)dJRA>)b_Da%Q~axwA_8zNK{BH{#}#m}zGcuckz}riDE-z_Ms> zR8-EqAMcfyGJCtvTpaUVQtajhUS%c@Yj}&6Zz;-M7MZzqv3kA7{SuW$oW#=0az2wQ zg-WG@Vb4|D`pl~Il54N7Hmsauc_ne-a!o5#j3WaBBh@Wuefb!QJIOn5;d)%A#s+5% zuD$H=VNux9bE-}1&bcYGZ+>1Fo;3Z@e&zX^n!?JK*adSbONm$XW9z;Q^L>9U!}Toj2WdafJ%oL#h|yWWwyAGxzfrAWdDTtaKl zK4`5tDpPg5>z$MNv=X0LZ0d6l%D{(D8oT@+w0?ce$DZ6pv>{1&Ok67Ix1 zH}3=IEhPJEhItCC8E=`T`N5(k?G=B4+xzZ?<4!~ ze~z6Wk9!CHTI(0rLJ4{JU?E-puc;xusR?>G?;4vt;q~iI9=kDL=z0Rr%O$vU`30X$ zDZRFyZ`(omOy@u|i6h;wtJlP;+}$|Ak|k2dea7n?U1*$T!sXqqOjq^NxLPMmk~&qI zYg0W?yK8T(6+Ea+$YyspKK?kP$+B`~t3^Pib_`!6xCs32!i@pqXfFV6PmBIR<-QW= zN8L{pt0Vap0x`Gzn#E@zh@H)0FfVfA_Iu4fjYZ+umO1LXIbVc$pY+E234u)ttcrl$ z>s92z4vT%n6cMb>=XT6;l0+9e(|CZG)$@C7t7Z7Ez@a)h)!hyuV&B5K%%)P5?Lk|C zZZSVzdXp{@OXSP0hoU-gF8s8Um(#xzjP2Vem zec#-^JqTa&Y#QJ>-FBxd7tf`XB6e^JPUgagB8iBSEps;92KG`!#mvVcPQ5yNC-GEG zTiHEDYfH+0O15}r^+ z#jxj=@x8iNHWALe!P3R67TwmhItn**0JwnzSV2O&KE8KcT+0hWH^OPD1pwiuyx=b@ zNf5Jh0{9X)8;~Es)$t@%(3!OnbY+`@?i{mGX7Yy}8T_*0a6g;kaFPq;*=px5EhO{Cp%1kI<0?*|h8v!6WnO3cCJRF2-CRrU3JiLJnj@6;L)!0kWYAc_}F{2P))3HmCrz zQ&N&gE70;`!6*eJ4^1IR{f6j4(-l&X!tjHxkbHA^Zhrnhr9g{exN|xrS`5Pq=#Xf& zG%P=#ra-TyVFfgW%cZo5OSIwFL9WtXAlFOa+ubmI5t*3=g#Y zF%;70p5;{ZeFL}&}yOY1N1*Q;*<(kTB!7vM$QokF)yr2FlIU@$Ph58$Bz z0J?xQG=MlS4L6jA22eS42g|9*9pX@$#*sUeM(z+t?hr@r5J&D1rx}2pW&m*_`VDCW zUYY@v-;bAO0HqoAgbbiGGC<=ryf96}3pouhy3XJrX+!!u*O_>Si38V{uJmQ&USptX zKp#l(?>%^7;2%h(q@YWS#9;a!JhKlkR#Vd)ERILlgu!Hr@jA@V;sk4BJ-H#p*4EqC zDGjC*tl=@3Oi6)Bn^QwFpul18fpkbpg0+peH$xyPBqb%`$OUhPKyWb32o7clB*9Z< zN=i~NLjavrLtwgJ01bufP+>p-jR2I95|TpmKpQL2!oV>g(4RvS2pK4*ou%m(h6r3A zX#s&`9LU1ZG&;{CkOK!4fLDTnBys`M!vuz>Q&9OZ0hGQl!~!jSDg|~s*w52opC{sB ze|Cf2luD(*G13LcOAGA!s2FjSK8&IE5#W%J25w!vM0^VyQM!t)inj&RTiJ!wXzFgz z3^IqzB7I0L$llljsGq})thBy9UOyjtFO_*hYM_sgcMk>44jeH0V1FDyELc{S1F-;A zS;T^k^~4biG&V*Irq}O;e}j$$+E_#G?HKIn05iP3j|87TkGK~SqG!-KBg5+mN(aLm z8ybhIM`%C19UX$H$KY6JgXbY$0AT%rEpHC;u`rQ$Y=rxUdsc5*Kvc8jaYaO$^)cI6){P6K0r)I6DY4Wr4&B zLQUBraey#0HV|&c4v7PVo3n$zHj99(TZO^3?Ly%C4nYvJTL9eLBLHsM3WKKD>5!B` zQ=BsR3aR6PD(Fa>327E2HAu5TM~Wusc!)>~(gM)+3~m;92Jd;FnSib=M5d6;;5{%R zb4V7DEJ0V!CP-F*oU?gkc>ksUtAYP&V4ND5J>J2^jt*vcFflQWCrB&fLdT%O59PVJ zhid#toR=FNgD!q3&r8#wEBr`!wzvQu5zX?Q>nlSJ4i@WC*CN*-xU66F^V5crWevQ9gsq$I@z1o(a=k7LL~ z7m_~`o;_Ozha1$8Q}{WBehvAlO4EL60y5}8GDrZ< zXh&F}71JbW2A~8KfEWj&UWV#4+Z4p`b{uAj4&WC zha`}X@3~+Iz^WRlOHU&KngK>#j}+_o@LdBC1H-`gT+krWX3-;!)6?{FBp~%20a}FL zFP9%Emqcwa#(`=G>BBZ0qZDQhmZKJg_g8<=bBFKWr!dyg(YkpE+|R*SGpDVU!+VlU zFC54^DLv}`qa%49T>nNiA9Q7Ips#!Xx90tCU2gvK`(F+GPcL=J^>No{)~we#o@&mUb6c$ zCc*<|NJBk-#+{j9xkQ&ujB zI~`#kN~7W!f*-}wkG~Ld!JqZ@tK}eeSnsS5J1fMFXm|`LJx&}5`@dK3W^7#Wnm+_P zBZkp&j1fa2Y=eIjJ0}gh85jt43kaIXXv?xmo@eHrka!Z|vQv12HN#+!I5E z`(fbuW>gFiJL|uXJ!vKt#z3e3HlVdboH7;e#i3(2<)Fg-I@BR!qY#eof3MFZ&*Y@l zI|KJf&ge@p2Dq09Vu$$Qxb7!}{m-iRk@!)%KL)txi3;~Z4Pb}u@GsW;ELiWeG9V51 znX#}B&4Y2E7-H=OpNE@q{%hFLxwIpBF2t{vPREa8_{linXT;#1vMRWjOzLOP$-hf( z>=?$0;~~PnkqY;~K{EM6Vo-T(0K{A0}VUGmu*hR z{tw3hvBN%N3G3Yw`X5Te+F{J`(3w1s3-+1EbnFQKcrgrX1Jqvs@ADGe%M0s$EbK$$ zK)=y=upBc6SjGYAACCcI=Y*6Fi8_jgwZlLxD26fnQfJmb8^gHRN5(TemhX@0e=vr> zg`W}6U>x6VhoA3DqsGGD9uL1DhB3!OXO=k}59TqD@(0Nb{)Ut_luTioK_>7wjc!5C zIr@w}b`Fez3)0wQfKl&bae7;PcTA7%?f2xucM0G)wt_KO!Ewx>F~;=BI0j=Fb4>pp zv}0R^xM4eti~+^+gE$6b81p(kwzuDti(-K9bc|?+pJEl@H+jSYuxZQV8rl8 zjp@M{#%qItIUFN~KcO9Hed*`$5A-2~pAo~K&<-Q+`9`$CK>rzqAI4w~$F%vs9s{~x zg4BP%Gy*@m?;D6=SRX?888Q6peF@_4Z->8wAH~Cn!R$|Hhq2cIzFYqT_+cDourHbY z0qroxJnrZ4Gh+Ay+F`_c%+KRT>y3qw{)89?=hJ@=KO=@ep)aBJ$c!JHfBMJpsP*3G za7|)VJJ8B;4?n{~ldJF7%jmb`-ftIvNd~ekoufG(`K(3=LNc;HBY& z(lp#q8XAD#cIf}k49zX_i`*fO+#!zKA&%T3j@%)R+#yag067CU%yUEe47>wzGU8^` z1EXFT^@I!{J!F8!X?S6ph8J=gUi5tl93*W>7}_uR<2N2~e}FaG?}KPyugQ=-OGEZs z!GBoyYY+H*ANn4?Z)X4l+7H%`17i5~zRlRIX?t)6_eu=g2Q`3WBhxSUeea+M-S?RL zX9oBGKn%a!H+*hx4d2(I!gsi+@SQK%<{X22M~2tMulJoa)0*+z9=-YO+;DFEm5eE1U9b^B(Z}2^9!Qk`!A$wUE z7$Ar5?NRg2&G!AZqnmE64eh^Anss3i!{}%6@Et+4rr!=}!SBF8eZ2*J3ujCWbl;3; z48H~goPSv(8X61fKKdpP!Z7$88NL^Z?j`!^*I?-P4X^pMxyWz~@$(UeAcTSDd(`vO z{~rc;9|GfMJcApU3k}22a!&)k4{CU!e_ny^Y3cO;tOvOMKEyWz!vG(Kp*;hB?d|R3`2X~=5a6#^o5@qn?J-bI8Ppip{-yG z!k|VcGsq!jF~}7DMr49Wap-s&>o=U^T0!Lcy}!(bhtYsPQy z4|EJe{12QL#=c(suQ89Mhw9<`bui%nx7Nep`C&*M3~vMEACmcRYYRGtANq$F%zh&V zc)cEVeHz*Z1N)L7k-(k3np#{GcDh2Q@ya0YHl*n7fl*ZPAsbU-a94MYYtA#&!c`xGIaV;yzsmrjfieTEtqB_WgZp2*NplHx=$O{M~2#i_vJ{ps-NgK zQsxKK_CBM2PP_je+Xft`(vYfXXgIUr{=PA=7a8`2EHk)Ym2QKIforz# tySWtj{oF3N9@_;i*Fv5S)9x^z=nlWP>jpp-9)52ZmLVA=i*%6g{{fxOO~wEK literal 0 HcmV?d00001 diff --git a/mvi_flutter/windows/runner/runner.exe.manifest b/mvi_flutter/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/mvi_flutter/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/mvi_flutter/windows/runner/utils.cpp b/mvi_flutter/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/mvi_flutter/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/mvi_flutter/windows/runner/utils.h b/mvi_flutter/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/mvi_flutter/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/mvi_flutter/windows/runner/win32_window.cpp b/mvi_flutter/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/mvi_flutter/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/mvi_flutter/windows/runner/win32_window.h b/mvi_flutter/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/mvi_flutter/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/todos_repository_local_storage/lib/src/reactive_repository.dart b/todos_repository_local_storage/lib/src/reactive_repository.dart index 545c271f..dd445161 100644 --- a/todos_repository_local_storage/lib/src/reactive_repository.dart +++ b/todos_repository_local_storage/lib/src/reactive_repository.dart @@ -51,7 +51,7 @@ class ReactiveLocalStorageRepository implements ReactiveTodosRepository { _repository.loadTodos().then((entities) { _subject.add(List.unmodifiable([ - ..._subject.value, + if (_subject.hasValue) ..._subject.value, ...entities, ])); }); diff --git a/vanilla/pubspec.yaml b/vanilla/pubspec.yaml index e3e96d28..763df0c5 100644 --- a/vanilla/pubspec.yaml +++ b/vanilla/pubspec.yaml @@ -2,7 +2,7 @@ name: vanilla description: "A new Flutter project." # The following line prevents the package from being accidentally published to # pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev +publish_to: "none" # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -30,13 +30,13 @@ environment: dependencies: flutter: sdk: flutter + shared_preferences: todos_app_core: path: ../todos_app_core todos_repository_core: path: ../todos_repository_core todos_repository_local_storage: path: ../todos_repository_local_storage - shared_preferences: dev_dependencies: flutter_lints: @@ -44,17 +44,16 @@ dev_dependencies: sdk: flutter integration_test: sdk: flutter - test: - mockito: integration_tests: path: ../integration_tests + mockito: + test: # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter packages. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. From 385b85d4c1bcaa6b0a7d0b2d1a7db32cf5f97d0a Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 21:34:54 +0100 Subject: [PATCH 65/89] Update CI --- .../dart_analysis_and_tests/action.yml | 45 ++++++ .../workflows/static_analysis_and_tests.yml | 133 ++++++++++++++++-- 2 files changed, 167 insertions(+), 11 deletions(-) create mode 100644 .github/actions/dart_analysis_and_tests/action.yml diff --git a/.github/actions/dart_analysis_and_tests/action.yml b/.github/actions/dart_analysis_and_tests/action.yml new file mode 100644 index 00000000..b4b14b26 --- /dev/null +++ b/.github/actions/dart_analysis_and_tests/action.yml @@ -0,0 +1,45 @@ +name: "Validate" +description: "Runs lint, format, and test on an app" +inputs: + working-directory: + description: "Directory to run validation in" + required: true + run-integration-tests: + description: "Run integration tests" + required: false + default: "true" + +runs: + using: "composite" + steps: + - name: Set up flutter + uses: kuhnroyal/flutter-fvm-config-action/setup@v3 + + - name: Get dependencies + shell: bash + run: dart pub get + working-directory: ${{ inputs.working-directory }} + + - name: Check dart formatting + shell: bash + run: dart format -o none --set-exit-if-changed . + working-directory: ${{ inputs.working-directory }} + + - name: Check dart analysis + shell: bash + run: dart analyze --fatal-infos --fatal-warnings . + working-directory: ${{ inputs.working-directory }} + + - name: Run unit tests and prepare coverage + shell: bash + run: | + dart test --coverage + # Extract directory name for artifact naming + echo "DIR_NAME=$(basename "${{ inputs.working-directory }}")" >> $GITHUB_ENV + working-directory: ${{ inputs.working-directory }} + + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-lcov-${{ env.DIR_NAME }} + path: ${{ inputs.working-directory }}/coverage/lcov.info diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 935f80c8..a90076e3 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -8,8 +8,8 @@ on: - refresh jobs: - todos_repository_local_storage: - name: Todos Repository Local Storage + change_notifier_provider: + name: change_notifier_provider runs-on: ubuntu-latest steps: - name: Checkout repository @@ -18,10 +18,9 @@ jobs: - name: Static Analysis & Tests uses: ./.github/actions/flutter_analysis_and_tests with: - working-directory: ./todos_repository_local_storage - run-integration-tests: false - vanilla: - name: Vanilla + working-directory: ./change_notifier_provider + inherited_widget: + name: inherited_widget runs-on: ubuntu-latest steps: - name: Checkout repository @@ -30,9 +29,9 @@ jobs: - name: Static Analysis & Tests uses: ./.github/actions/flutter_analysis_and_tests with: - working-directory: ./vanilla - inherited_widget: - name: Inherited Widget + working-directory: ./inherited_widget + mobx: + name: mobx runs-on: ubuntu-latest steps: - name: Checkout repository @@ -41,11 +40,123 @@ jobs: - name: Static Analysis & Tests uses: ./.github/actions/flutter_analysis_and_tests with: - working-directory: ./inherited_widget + working-directory: ./mobx + mvi_base: + name: mvi_base + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/dart_analysis_and_tests + with: + working-directory: ./mvi_base + mvi_flutter: + name: mvi_flutter + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./mvi_flutter + redux: + name: redux + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./redux + scoped_model: + name: scoped_model + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./scoped_model + signals: + name: signals + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./signals + simple_bloc_flutter: + name: simple_bloc_flutter + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./simple_bloc_flutter + simple_blocs: + name: simple_blocs + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/dart_analysis_and_tests + with: + working-directory: ./simple_blocs + todos_repository_local_storage: + name: todos_repository_local_storage + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./todos_repository_local_storage + run-integration-tests: false + vanilla: + name: vanilla + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./vanilla read_coverage: name: Read Combined Coverage Files runs-on: ubuntu-latest - needs: [todos_repository_local_storage, vanilla, inherited_widget] + needs: + - change_notifier_provider + - inherited_widget + - mobx + - mvi_base + - mvi_flutter + - redux + - scoped_model + - signals + - simple_bloc_flutter + - simple_blocs + - todos_repository_local_storage + - vanilla steps: - name: Checkout repository uses: actions/checkout@v4 From 7b87f1dcaa20b8f67fbe6df6be56c33ed733b8be Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 21:45:16 +0100 Subject: [PATCH 66/89] Fix CI issues --- change_notifier_provider/test/mock_repository.dart | 2 +- mvi_flutter/lib/widgets/extra_actions_button.dart | 2 +- mvi_flutter/lib/widgets/filter_button.dart | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/change_notifier_provider/test/mock_repository.dart b/change_notifier_provider/test/mock_repository.dart index 6a4b2cc1..3069d88a 100644 --- a/change_notifier_provider/test/mock_repository.dart +++ b/change_notifier_provider/test/mock_repository.dart @@ -8,7 +8,7 @@ class MockRepository extends TodosRepository { int saveCount = 0; MockRepository([List todos = const []]) - : entities = todos.map((it) => it.toEntity()).toList(); + : entities = todos.map((it) => it.toEntity()).toList(); @override Future> loadTodos() async => entities; diff --git a/mvi_flutter/lib/widgets/extra_actions_button.dart b/mvi_flutter/lib/widgets/extra_actions_button.dart index e7966fa4..4449cb90 100644 --- a/mvi_flutter/lib/widgets/extra_actions_button.dart +++ b/mvi_flutter/lib/widgets/extra_actions_button.dart @@ -6,7 +6,7 @@ class ExtraActionsButton extends StatelessWidget { final bool allComplete; final bool hasCompletedTodos; - ExtraActionsButton({ + const ExtraActionsButton({ super.key, required this.onSelected, this.allComplete = false, diff --git a/mvi_flutter/lib/widgets/filter_button.dart b/mvi_flutter/lib/widgets/filter_button.dart index ef92c6cb..e36c7593 100644 --- a/mvi_flutter/lib/widgets/filter_button.dart +++ b/mvi_flutter/lib/widgets/filter_button.dart @@ -7,7 +7,7 @@ class FilterButton extends StatelessWidget { final VisibilityFilter activeFilter; final bool isActive; - FilterButton({ + const FilterButton({ super.key, required this.onSelected, required this.activeFilter, From 7a24814dd75a73d68719bdeb7064383e27d77c4f Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 21:50:28 +0100 Subject: [PATCH 67/89] More CI fixes --- .github/actions/dart_analysis_and_tests/action.yml | 4 +++- .github/actions/flutter_analysis_and_tests/action.yml | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/actions/dart_analysis_and_tests/action.yml b/.github/actions/dart_analysis_and_tests/action.yml index b4b14b26..c2459e4b 100644 --- a/.github/actions/dart_analysis_and_tests/action.yml +++ b/.github/actions/dart_analysis_and_tests/action.yml @@ -33,7 +33,9 @@ runs: - name: Run unit tests and prepare coverage shell: bash run: | - dart test --coverage + dart pub global activate coverage + dart run test --coverage=coverage + dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib # Extract directory name for artifact naming echo "DIR_NAME=$(basename "${{ inputs.working-directory }}")" >> $GITHUB_ENV working-directory: ${{ inputs.working-directory }} diff --git a/.github/actions/flutter_analysis_and_tests/action.yml b/.github/actions/flutter_analysis_and_tests/action.yml index cdb493ec..14dc8edc 100644 --- a/.github/actions/flutter_analysis_and_tests/action.yml +++ b/.github/actions/flutter_analysis_and_tests/action.yml @@ -32,6 +32,7 @@ runs: - name: Run unit tests and prepare coverage shell: bash + if: '[ -d "${{ inputs.working-directory }}/test" ]' run: | flutter test --coverage # Extract directory name for artifact naming From 4be72efecf642f8c447528b970e2c46936fa4697 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 21:54:40 +0100 Subject: [PATCH 68/89] Fix simple_blocs analysis issues --- simple_blocs/lib/simple_blocs.dart | 2 -- simple_blocs/lib/src/user_bloc.dart | 2 +- simple_blocs/pubspec.yaml | 1 + simple_blocs/test/todo_bloc_test.dart | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/simple_blocs/lib/simple_blocs.dart b/simple_blocs/lib/simple_blocs.dart index 0bb621ae..4448606d 100644 --- a/simple_blocs/lib/simple_blocs.dart +++ b/simple_blocs/lib/simple_blocs.dart @@ -1,5 +1,3 @@ -library blocs; - export 'src/models/models.dart'; export 'src/stats_bloc.dart'; export 'src/todo_bloc.dart'; diff --git a/simple_blocs/lib/src/user_bloc.dart b/simple_blocs/lib/src/user_bloc.dart index 61cda371..2dc34359 100644 --- a/simple_blocs/lib/src/user_bloc.dart +++ b/simple_blocs/lib/src/user_bloc.dart @@ -9,5 +9,5 @@ class UserBloc { Stream login() => _repository.login().asStream().asBroadcastStream(); - UserBloc(UserRepository repository) : this._repository = repository; + UserBloc(UserRepository repository) : _repository = repository; } diff --git a/simple_blocs/pubspec.yaml b/simple_blocs/pubspec.yaml index 635a7ed7..abe45292 100644 --- a/simple_blocs/pubspec.yaml +++ b/simple_blocs/pubspec.yaml @@ -8,6 +8,7 @@ environment: dependencies: collection: ^1.15.0 + meta: ^1.15.0 rxdart: ^0.28.0 todos_repository_core: path: ../todos_repository_core diff --git a/simple_blocs/test/todo_bloc_test.dart b/simple_blocs/test/todo_bloc_test.dart index 7f343787..bf6574ff 100644 --- a/simple_blocs/test/todo_bloc_test.dart +++ b/simple_blocs/test/todo_bloc_test.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:mockito/mockito.dart'; import 'package:simple_blocs/simple_blocs.dart'; -import 'package:simple_blocs/src/models/models.dart'; import 'package:test/test.dart'; class MockTodosInteractor extends Mock implements TodosInteractor {} From f8532710666b04fe55ad2958a66f45bfb480a408 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 21:58:07 +0100 Subject: [PATCH 69/89] Fix change_notifier_provider test --- change_notifier_provider/test/home_screen_test.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/change_notifier_provider/test/home_screen_test.dart b/change_notifier_provider/test/home_screen_test.dart index 16655bcc..29f05026 100644 --- a/change_notifier_provider/test/home_screen_test.dart +++ b/change_notifier_provider/test/home_screen_test.dart @@ -112,10 +112,11 @@ class _TestWidget extends StatelessWidget { Matcher isChecked(bool isChecked) { return matchesSemantics( isChecked: isChecked, + hasTapAction: true, + hasFocusAction: true, hasCheckedState: true, + isFocusable: true, hasEnabledState: true, isEnabled: true, - isFocusable: true, - hasTapAction: true, ); } From 8b454331d03b87acd43c595f6aa4330c7018b756 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Thu, 4 Sep 2025 22:04:59 +0100 Subject: [PATCH 70/89] fix simple_blocs tests --- simple_blocs/pubspec.yaml | 1 + simple_blocs/test/all_tests.dart | 11 -- simple_blocs/test/stats_bloc_test.dart | 4 +- simple_blocs/test/stats_bloc_test.mocks.dart | 133 ++++++++++++++++++ simple_blocs/test/todo_bloc_test.dart | 4 +- simple_blocs/test/todo_bloc_test.mocks.dart | 133 ++++++++++++++++++ simple_blocs/test/todos_interactor_test.dart | 5 +- .../test/todos_interactor_test.mocks.dart | 66 +++++++++ 8 files changed, 342 insertions(+), 15 deletions(-) delete mode 100644 simple_blocs/test/all_tests.dart create mode 100644 simple_blocs/test/stats_bloc_test.mocks.dart create mode 100644 simple_blocs/test/todo_bloc_test.mocks.dart create mode 100644 simple_blocs/test/todos_interactor_test.mocks.dart diff --git a/simple_blocs/pubspec.yaml b/simple_blocs/pubspec.yaml index abe45292..85d72d76 100644 --- a/simple_blocs/pubspec.yaml +++ b/simple_blocs/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: path: ../todos_repository_core dev_dependencies: + build_runner: ^2.4.13 lints: ^6.0.0 test: ^1.25.6 mockito: ^5.5.0 diff --git a/simple_blocs/test/all_tests.dart b/simple_blocs/test/all_tests.dart deleted file mode 100644 index 38be15df..00000000 --- a/simple_blocs/test/all_tests.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'stats_bloc_test.dart' as stats_bloc_test; -import 'todo_bloc_test.dart' as todo_bloc_test; -import 'todos_bloc_test.dart' as todos_bloc_test; -import 'todos_interactor_test.dart' as todos_interactor_test; - -void main() { - stats_bloc_test.main(); - todo_bloc_test.main(); - todos_bloc_test.main(); - todos_interactor_test.main(); -} diff --git a/simple_blocs/test/stats_bloc_test.dart b/simple_blocs/test/stats_bloc_test.dart index 90416cae..e72bf8b8 100644 --- a/simple_blocs/test/stats_bloc_test.dart +++ b/simple_blocs/test/stats_bloc_test.dart @@ -1,10 +1,12 @@ +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:rxdart/rxdart.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:test/test.dart'; -class MockTodosInteractor extends Mock implements TodosInteractor {} +import 'stats_bloc_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('StatsBloc', () { test('should stream the number of active todos', () { diff --git a/simple_blocs/test/stats_bloc_test.mocks.dart b/simple_blocs/test/stats_bloc_test.mocks.dart new file mode 100644 index 00000000..4767ab7e --- /dev/null +++ b/simple_blocs/test/stats_bloc_test.mocks.dart @@ -0,0 +1,133 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in simple_blocs/test/stats_bloc_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:simple_blocs/simple_blocs.dart' as _i3; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} diff --git a/simple_blocs/test/todo_bloc_test.dart b/simple_blocs/test/todo_bloc_test.dart index bf6574ff..3781f10c 100644 --- a/simple_blocs/test/todo_bloc_test.dart +++ b/simple_blocs/test/todo_bloc_test.dart @@ -1,11 +1,13 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:test/test.dart'; -class MockTodosInteractor extends Mock implements TodosInteractor {} +import 'todo_bloc_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('TodoBloc', () { test('should get the todo from the interactor', () { diff --git a/simple_blocs/test/todo_bloc_test.mocks.dart b/simple_blocs/test/todo_bloc_test.mocks.dart new file mode 100644 index 00000000..f42433c7 --- /dev/null +++ b/simple_blocs/test/todo_bloc_test.mocks.dart @@ -0,0 +1,133 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in simple_blocs/test/todo_bloc_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:simple_blocs/simple_blocs.dart' as _i3; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} diff --git a/simple_blocs/test/todos_interactor_test.dart b/simple_blocs/test/todos_interactor_test.dart index eb2307c8..e9eb89a8 100644 --- a/simple_blocs/test/todos_interactor_test.dart +++ b/simple_blocs/test/todos_interactor_test.dart @@ -1,14 +1,15 @@ import 'dart:async'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:rxdart/rxdart.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class MockReactiveTodosRepository extends Mock - implements ReactiveTodosRepository {} +import 'todos_interactor_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('TodosListInteractor', () { test('should convert repo entities into Todos', () { diff --git a/simple_blocs/test/todos_interactor_test.mocks.dart b/simple_blocs/test/todos_interactor_test.mocks.dart new file mode 100644 index 00000000..cca76ee1 --- /dev/null +++ b/simple_blocs/test/todos_interactor_test.mocks.dart @@ -0,0 +1,66 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in simple_blocs/test/todos_interactor_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/reactive_repository.dart' as _i2; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [ReactiveTodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockReactiveTodosRepository extends _i1.Mock + implements _i2.ReactiveTodosRepository { + @override + _i3.Future addNewTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(List? idList) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [idList]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Stream> todos() => + (super.noSuchMethod( + Invocation.method(#todos, []), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Future updateTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} From 8e4710efbb1a957c860a5c4aa8dcf48c6b65b2d9 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 13:22:36 +0100 Subject: [PATCH 71/89] Add test for simple_bloc_flutter --- simple_bloc_flutter/lib/app.dart | 5 +- simple_bloc_flutter/lib/localization.dart | 19 +- .../lib/screens/home_screen.dart | 2 +- simple_bloc_flutter/pubspec.yaml | 1 + .../test/home_screen_test.dart | 171 ++++++++++++++++++ .../test/home_screen_test.mocks.dart | 156 ++++++++++++++++ 6 files changed, 343 insertions(+), 11 deletions(-) create mode 100644 simple_bloc_flutter/test/home_screen_test.dart create mode 100644 simple_bloc_flutter/test/home_screen_test.mocks.dart diff --git a/simple_bloc_flutter/lib/app.dart b/simple_bloc_flutter/lib/app.dart index 5b9be22f..53656720 100644 --- a/simple_bloc_flutter/lib/app.dart +++ b/simple_bloc_flutter/lib/app.dart @@ -26,11 +26,12 @@ class SimpleBlocApp extends StatelessWidget { child: TodosBlocProvider( bloc: TodosListBloc(todosInteractor), child: MaterialApp( - onGenerateTitle: (context) => BlocLocalizations.of(context).appTitle, + onGenerateTitle: (context) => + SimpleBlocLocalizations.of(context).appTitle, theme: ArchSampleTheme.theme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), - InheritedWidgetLocalizationsDelegate(), + SimpleBlocLocalizationsDelegate(), ], routes: { ArchSampleRoutes.home: (context) { diff --git a/simple_bloc_flutter/lib/localization.dart b/simple_bloc_flutter/lib/localization.dart index 9672bc2d..b1658f40 100644 --- a/simple_bloc_flutter/lib/localization.dart +++ b/simple_bloc_flutter/lib/localization.dart @@ -2,22 +2,25 @@ import 'dart:async'; import 'package:flutter/material.dart'; -class BlocLocalizations { - static BlocLocalizations of(BuildContext context) { - return Localizations.of(context, BlocLocalizations)!; +class SimpleBlocLocalizations { + static SimpleBlocLocalizations of(BuildContext context) { + return Localizations.of( + context, + SimpleBlocLocalizations, + )!; } String get appTitle => 'Simple Bloc Example'; } -class InheritedWidgetLocalizationsDelegate - extends LocalizationsDelegate { +class SimpleBlocLocalizationsDelegate + extends LocalizationsDelegate { @override - Future load(Locale locale) => - Future(() => BlocLocalizations()); + Future load(Locale locale) => + Future(() => SimpleBlocLocalizations()); @override - bool shouldReload(InheritedWidgetLocalizationsDelegate old) => false; + bool shouldReload(SimpleBlocLocalizationsDelegate old) => false; @override bool isSupported(Locale locale) => diff --git a/simple_bloc_flutter/lib/screens/home_screen.dart b/simple_bloc_flutter/lib/screens/home_screen.dart index a0d7c923..d485d313 100644 --- a/simple_bloc_flutter/lib/screens/home_screen.dart +++ b/simple_bloc_flutter/lib/screens/home_screen.dart @@ -56,7 +56,7 @@ class HomeScreenState extends State { builder: (context, activeTabSnapshot) { return Scaffold( appBar: AppBar( - title: Text(BlocLocalizations.of(context).appTitle), + title: Text(SimpleBlocLocalizations.of(context).appTitle), actions: _buildActions( todosBloc, activeTabSnapshot, diff --git a/simple_bloc_flutter/pubspec.yaml b/simple_bloc_flutter/pubspec.yaml index c715c260..6333104e 100644 --- a/simple_bloc_flutter/pubspec.yaml +++ b/simple_bloc_flutter/pubspec.yaml @@ -39,6 +39,7 @@ dev_dependencies: sdk: flutter test: mockito: + build_runner: integration_tests: path: ../integration_tests diff --git a/simple_bloc_flutter/test/home_screen_test.dart b/simple_bloc_flutter/test/home_screen_test.dart new file mode 100644 index 00000000..8114d872 --- /dev/null +++ b/simple_bloc_flutter/test/home_screen_test.dart @@ -0,0 +1,171 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:simple_bloc_flutter_sample/anonymous_user_repository.dart'; +import 'package:simple_bloc_flutter_sample/dependency_injection.dart'; +import 'package:simple_bloc_flutter_sample/localization.dart'; +import 'package:simple_bloc_flutter_sample/screens/home_screen.dart'; +import 'package:simple_bloc_flutter_sample/widgets/todos_bloc_provider.dart'; +import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; +import 'package:todos_repository_core/todos_repository_core.dart'; + +import 'home_screen_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec(), MockSpec()]) +void main() { + group('HomeScreen', () { + final todoListFinder = find.byKey(ArchSampleKeys.todoList); + final todoItem1Finder = find.byKey(ArchSampleKeys.todoItem('1')); + final todoItem2Finder = find.byKey(ArchSampleKeys.todoItem('2')); + final todoItem3Finder = find.byKey(ArchSampleKeys.todoItem('3')); + + testWidgets('should render loading indicator at first', (tester) async { + await tester.pumpWidget( + _TestWidget( + todosInteractor: MockTodosInteractor(), + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pump(Duration.zero); + + expect(find.byKey(ArchSampleKeys.todosLoading), findsOneWidget); + }); + + testWidgets('should display a list after loading todos', (tester) async { + final handle = tester.ensureSemantics(); + final interactor = MockTodosInteractor(); + + when( + interactor.todos, + ).thenAnswer((_) => Stream.fromIterable([_TestWidget._defaultTodos])); + + await tester.pumpWidget( + _TestWidget( + todosInteractor: interactor, + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pumpAndSettle(); + + final checkbox1 = find.descendant( + of: find.byKey(ArchSampleKeys.todoItemCheckbox('1')), + matching: find.byType(Focus), + ); + final checkbox2 = find.descendant( + of: find.byKey(ArchSampleKeys.todoItemCheckbox('2')), + matching: find.byType(Focus), + ); + final checkbox3 = find.descendant( + of: find.byKey(ArchSampleKeys.todoItemCheckbox('3')), + matching: find.byType(Focus), + ); + + expect(todoListFinder, findsOneWidget); + expect(todoItem1Finder, findsOneWidget); + expect(find.text('T1'), findsOneWidget); + expect(find.text('N1'), findsOneWidget); + expect(tester.getSemantics(checkbox1), isChecked(false)); + expect(todoItem2Finder, findsOneWidget); + expect(find.text('T2'), findsOneWidget); + expect(tester.getSemantics(checkbox2), isChecked(false)); + expect(todoItem3Finder, findsOneWidget); + expect(find.text('T3'), findsOneWidget); + expect(tester.getSemantics(checkbox3), isChecked(true)); + + handle.dispose(); + }); + + testWidgets('should remove todos using a dismissible', (tester) async { + final interactor = MockTodosInteractor(); + + when( + interactor.todos, + ).thenAnswer((_) => Stream.fromIterable([_TestWidget._defaultTodos])); + + await tester.pumpWidget( + _TestWidget( + todosInteractor: interactor, + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pumpAndSettle(); + await tester.drag(todoItem1Finder, Offset(-1000, 0)); + await tester.pumpAndSettle(Duration(seconds: 5)); + + expect(todoItem1Finder, findsNothing); + expect(todoItem2Finder, findsOneWidget); + expect(todoItem3Finder, findsOneWidget); + }); + + testWidgets('should display stats when switching tabs', (tester) async { + final interactor = MockTodosInteractor(); + + when( + interactor.todos, + ).thenAnswer((_) => Stream.fromIterable([_TestWidget._defaultTodos])); + + await tester.pumpWidget( + _TestWidget( + todosInteractor: interactor, + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pumpAndSettle(); + await tester.tap(find.byKey(ArchSampleKeys.statsTab)); + await tester.pump(); + + expect(find.byKey(ArchSampleKeys.statsNumActive), findsOneWidget); + expect(find.byKey(ArchSampleKeys.statsNumActive), findsOneWidget); + }); + }); +} + +class _TestWidget extends StatelessWidget { + const _TestWidget({ + required this.todosInteractor, + required this.userRepository, + }); + + final TodosInteractor todosInteractor; + final UserRepository userRepository; + + @override + Widget build(BuildContext context) { + return Injector( + todosInteractor: todosInteractor, + userRepository: userRepository, + child: TodosBlocProvider( + bloc: TodosListBloc(todosInteractor), + child: MaterialApp( + localizationsDelegates: [ + SimpleBlocLocalizationsDelegate(), + ArchSampleLocalizationsDelegate(), + ], + home: const HomeScreen(), + ), + ), + ); + } + + static List get _defaultTodos { + return [ + Todo('T1', id: '1', note: 'N1'), + Todo('T2', id: '2'), + Todo('T3', id: '3', complete: true), + ]; + } +} + +Matcher isChecked(bool isChecked) { + return matchesSemantics( + isChecked: isChecked, + hasTapAction: true, + hasFocusAction: true, + hasCheckedState: true, + isFocusable: true, + hasEnabledState: true, + isEnabled: true, + ); +} diff --git a/simple_bloc_flutter/test/home_screen_test.mocks.dart b/simple_bloc_flutter/test/home_screen_test.mocks.dart new file mode 100644 index 00000000..a3a33aa8 --- /dev/null +++ b/simple_bloc_flutter/test/home_screen_test.mocks.dart @@ -0,0 +1,156 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in simple_bloc_flutter_sample/test/home_screen_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:simple_blocs/simple_blocs.dart' as _i3; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeUserEntity_1 extends _i1.SmartFake implements _i2.UserEntity { + _FakeUserEntity_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} + +/// A class which mocks [UserRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserRepository extends _i1.Mock implements _i2.UserRepository { + @override + _i4.Future<_i2.UserEntity> login() => + (super.noSuchMethod( + Invocation.method(#login, []), + returnValue: _i4.Future<_i2.UserEntity>.value( + _FakeUserEntity_1(this, Invocation.method(#login, [])), + ), + returnValueForMissingStub: _i4.Future<_i2.UserEntity>.value( + _FakeUserEntity_1(this, Invocation.method(#login, [])), + ), + ) + as _i4.Future<_i2.UserEntity>); +} From 97d11146e179bb56b1c269d4a26ca74559214ea0 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 15:02:12 +0100 Subject: [PATCH 72/89] Update bloc sample --- bloc_flutter/.metadata | 39 +- bloc_flutter/analysis_options.yaml | 34 + bloc_flutter/android/.gitignore | 7 + bloc_flutter/android/app/build.gradle | 68 -- bloc_flutter/android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 33 +- .../com/example/bloc_flutter/MainActivity.kt | 12 - .../bloc_flutter_sample/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 1345 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 927 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 1908 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 2950 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 4067 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 14 +- .../app/src/profile/AndroidManifest.xml | 6 +- bloc_flutter/android/build.gradle | 31 - bloc_flutter/android/build.gradle.kts | 24 + bloc_flutter/android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- bloc_flutter/android/settings.gradle | 15 - bloc_flutter/android/settings.gradle.kts | 26 + bloc_flutter/integration_test/app_test.dart | 26 + bloc_flutter/ios/.gitignore | 2 + .../ios/Flutter/AppFrameworkInfo.plist | 4 +- bloc_flutter/ios/Flutter/Debug.xcconfig | 2 +- bloc_flutter/ios/Flutter/Release.xcconfig | 2 +- bloc_flutter/ios/Podfile | 83 +- .../ios/Runner.xcodeproj/project.pbxproj | 269 +++--- .../contents.xcworkspacedata | 2 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../contents.xcworkspacedata | 3 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + bloc_flutter/ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Contents.json | 6 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 715 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1591 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2506 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1068 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 2414 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3810 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1582 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 3462 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 5543 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@1x.png | Bin 2798 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 5868 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 9605 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 3390 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 7082 -> 1226 bytes .../AppIcon.appiconset/Icon-App-76x76@3x.png | Bin 10960 -> 0 bytes .../Icon-App-83.5x83.5@1x.png | Bin 3834 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 8074 -> 1418 bytes .../Icon-App-83.5x83.5@3x.png | Bin 12001 -> 0 bytes .../ios/Runner/GoogleService-Info.plist | 40 - bloc_flutter/ios/Runner/Info.plist | 10 +- .../ios/Runner/Runner-Bridging-Header.h | 2 +- .../ios/RunnerTests/RunnerTests.swift | 12 + .../lib/anonymous_user_repository.dart | 7 + bloc_flutter/lib/app.dart | 13 +- bloc_flutter/lib/dependency_injection.dart | 19 +- bloc_flutter/lib/localization.dart | 6 +- bloc_flutter/lib/main.dart | 12 +- bloc_flutter/lib/main_firebase.dart | 20 - bloc_flutter/lib/main_web.dart | 36 - bloc_flutter/lib/screens/add_edit_screen.dart | 52 +- bloc_flutter/lib/screens/detail_screen.dart | 18 +- bloc_flutter/lib/screens/home_screen.dart | 29 +- .../lib/widgets/extra_actions_button.dart | 9 +- bloc_flutter/lib/widgets/filter_button.dart | 27 +- bloc_flutter/lib/widgets/loading.dart | 2 +- bloc_flutter/lib/widgets/stats_counter.dart | 10 +- bloc_flutter/lib/widgets/todo_item.dart | 13 +- bloc_flutter/lib/widgets/todo_list.dart | 10 +- .../lib/widgets/todos_bloc_provider.dart | 13 +- bloc_flutter/linux/.gitignore | 1 + bloc_flutter/linux/CMakeLists.txt | 128 +++ bloc_flutter/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + bloc_flutter/linux/runner/CMakeLists.txt | 26 + bloc_flutter/linux/runner/main.cc | 6 + bloc_flutter/linux/runner/my_application.cc | 144 ++++ bloc_flutter/linux/runner/my_application.h | 18 + bloc_flutter/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + bloc_flutter/macos/Podfile | 42 + bloc_flutter/macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + bloc_flutter/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + bloc_flutter/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + bloc_flutter/pubspec.yaml | 20 +- bloc_flutter/test/home_screen_test.dart | 171 ++++ bloc_flutter/test/home_screen_test.mocks.dart | 156 ++++ .../test_driver/integration_test.dart | 3 + bloc_flutter/test_driver/todo_app.dart | 9 - bloc_flutter/test_driver/todo_app_test.dart | 5 - bloc_flutter/web/favicon.png | Bin 0 -> 917 bytes bloc_flutter/web/icons/Icon-192.png | Bin 0 -> 5292 bytes bloc_flutter/web/icons/Icon-512.png | Bin 0 -> 8252 bytes bloc_flutter/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes bloc_flutter/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes bloc_flutter/web/index.html | 32 +- bloc_flutter/web/manifest.json | 35 + bloc_flutter/windows/.gitignore | 17 + bloc_flutter/windows/CMakeLists.txt | 108 +++ bloc_flutter/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + bloc_flutter/windows/runner/CMakeLists.txt | 40 + bloc_flutter/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ bloc_flutter/windows/runner/flutter_window.h | 33 + bloc_flutter/windows/runner/main.cpp | 43 + bloc_flutter/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + bloc_flutter/windows/runner/utils.cpp | 65 ++ bloc_flutter/windows/runner/utils.h | 19 + bloc_flutter/windows/runner/win32_window.cpp | 288 +++++++ bloc_flutter/windows/runner/win32_window.h | 102 +++ blocs/analysis_options.yaml | 44 +- blocs/lib/src/models/todo.dart | 11 +- blocs/lib/src/todos_interactor.dart | 8 +- blocs/lib/src/todos_list_bloc.dart | 1 - blocs/pubspec.yaml | 14 +- blocs/test/all_tests.dart | 11 - blocs/test/stats_bloc_test.dart | 4 +- blocs/test/stats_bloc_test.mocks.dart | 134 +++ blocs/test/todo_bloc_test.dart | 4 +- blocs/test/todo_bloc_test.mocks.dart | 134 +++ blocs/test/todos_bloc_test.dart | 107 ++- blocs/test/todos_bloc_test.mocks.dart | 177 ++++ blocs/test/todos_interactor_test.dart | 5 +- blocs/test/todos_interactor_test.mocks.dart | 67 ++ vanilla/lib/widgets/filter_button.dart | 4 +- 166 files changed, 4784 insertions(+), 703 deletions(-) create mode 100644 bloc_flutter/analysis_options.yaml delete mode 100644 bloc_flutter/android/app/build.gradle create mode 100644 bloc_flutter/android/app/build.gradle.kts delete mode 100644 bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter/MainActivity.kt create mode 100644 bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter_sample/MainActivity.kt create mode 100644 bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 bloc_flutter/android/app/src/main/res/values-night/styles.xml delete mode 100644 bloc_flutter/android/build.gradle create mode 100644 bloc_flutter/android/build.gradle.kts delete mode 100644 bloc_flutter/android/settings.gradle create mode 100644 bloc_flutter/android/settings.gradle.kts create mode 100644 bloc_flutter/integration_test/app_test.dart create mode 100644 bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 bloc_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png delete mode 100644 bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png delete mode 100644 bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png delete mode 100644 bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png delete mode 100644 bloc_flutter/ios/Runner/GoogleService-Info.plist create mode 100644 bloc_flutter/ios/RunnerTests/RunnerTests.swift create mode 100644 bloc_flutter/lib/anonymous_user_repository.dart delete mode 100644 bloc_flutter/lib/main_firebase.dart delete mode 100644 bloc_flutter/lib/main_web.dart create mode 100644 bloc_flutter/linux/.gitignore create mode 100644 bloc_flutter/linux/CMakeLists.txt create mode 100644 bloc_flutter/linux/flutter/CMakeLists.txt create mode 100644 bloc_flutter/linux/flutter/generated_plugin_registrant.cc create mode 100644 bloc_flutter/linux/flutter/generated_plugin_registrant.h create mode 100644 bloc_flutter/linux/flutter/generated_plugins.cmake create mode 100644 bloc_flutter/linux/runner/CMakeLists.txt create mode 100644 bloc_flutter/linux/runner/main.cc create mode 100644 bloc_flutter/linux/runner/my_application.cc create mode 100644 bloc_flutter/linux/runner/my_application.h create mode 100644 bloc_flutter/macos/.gitignore create mode 100644 bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 bloc_flutter/macos/Flutter/Flutter-Release.xcconfig create mode 100644 bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 bloc_flutter/macos/Podfile create mode 100644 bloc_flutter/macos/Podfile.lock create mode 100644 bloc_flutter/macos/Runner.xcodeproj/project.pbxproj create mode 100644 bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_flutter/macos/Runner/AppDelegate.swift create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 bloc_flutter/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 bloc_flutter/macos/Runner/Configs/Debug.xcconfig create mode 100644 bloc_flutter/macos/Runner/Configs/Release.xcconfig create mode 100644 bloc_flutter/macos/Runner/Configs/Warnings.xcconfig create mode 100644 bloc_flutter/macos/Runner/DebugProfile.entitlements create mode 100644 bloc_flutter/macos/Runner/Info.plist create mode 100644 bloc_flutter/macos/Runner/MainFlutterWindow.swift create mode 100644 bloc_flutter/macos/Runner/Release.entitlements create mode 100644 bloc_flutter/macos/RunnerTests/RunnerTests.swift create mode 100644 bloc_flutter/test/home_screen_test.dart create mode 100644 bloc_flutter/test/home_screen_test.mocks.dart create mode 100644 bloc_flutter/test_driver/integration_test.dart delete mode 100644 bloc_flutter/test_driver/todo_app.dart delete mode 100644 bloc_flutter/test_driver/todo_app_test.dart create mode 100644 bloc_flutter/web/favicon.png create mode 100644 bloc_flutter/web/icons/Icon-192.png create mode 100644 bloc_flutter/web/icons/Icon-512.png create mode 100644 bloc_flutter/web/icons/Icon-maskable-192.png create mode 100644 bloc_flutter/web/icons/Icon-maskable-512.png create mode 100644 bloc_flutter/web/manifest.json create mode 100644 bloc_flutter/windows/.gitignore create mode 100644 bloc_flutter/windows/CMakeLists.txt create mode 100644 bloc_flutter/windows/flutter/CMakeLists.txt create mode 100644 bloc_flutter/windows/flutter/generated_plugin_registrant.cc create mode 100644 bloc_flutter/windows/flutter/generated_plugin_registrant.h create mode 100644 bloc_flutter/windows/flutter/generated_plugins.cmake create mode 100644 bloc_flutter/windows/runner/CMakeLists.txt create mode 100644 bloc_flutter/windows/runner/Runner.rc create mode 100644 bloc_flutter/windows/runner/flutter_window.cpp create mode 100644 bloc_flutter/windows/runner/flutter_window.h create mode 100644 bloc_flutter/windows/runner/main.cpp create mode 100644 bloc_flutter/windows/runner/resource.h create mode 100644 bloc_flutter/windows/runner/resources/app_icon.ico create mode 100644 bloc_flutter/windows/runner/runner.exe.manifest create mode 100644 bloc_flutter/windows/runner/utils.cpp create mode 100644 bloc_flutter/windows/runner/utils.h create mode 100644 bloc_flutter/windows/runner/win32_window.cpp create mode 100644 bloc_flutter/windows/runner/win32_window.h delete mode 100644 blocs/test/all_tests.dart create mode 100644 blocs/test/stats_bloc_test.mocks.dart create mode 100644 blocs/test/todo_bloc_test.mocks.dart create mode 100644 blocs/test/todos_bloc_test.mocks.dart create mode 100644 blocs/test/todos_interactor_test.mocks.dart diff --git a/bloc_flutter/.metadata b/bloc_flutter/.metadata index 1b5cec02..05a8ab44 100644 --- a/bloc_flutter/.metadata +++ b/bloc_flutter/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/bloc_flutter/analysis_options.yaml b/bloc_flutter/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/bloc_flutter/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/bloc_flutter/android/.gitignore b/bloc_flutter/android/.gitignore index bc2100d8..be3943c9 100644 --- a/bloc_flutter/android/.gitignore +++ b/bloc_flutter/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/bloc_flutter/android/app/build.gradle b/bloc_flutter/android/app/build.gradle deleted file mode 100644 index b0d80781..00000000 --- a/bloc_flutter/android/app/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.bloc_flutter" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - multiDexEnabled true - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/bloc_flutter/android/app/build.gradle.kts b/bloc_flutter/android/app/build.gradle.kts new file mode 100644 index 00000000..f8e5e923 --- /dev/null +++ b/bloc_flutter/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.bloc_flutter_sample" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.bloc_flutter_sample" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/bloc_flutter/android/app/src/debug/AndroidManifest.xml b/bloc_flutter/android/app/src/debug/AndroidManifest.xml index 0e7c814b..399f6981 100644 --- a/bloc_flutter/android/app/src/debug/AndroidManifest.xml +++ b/bloc_flutter/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/bloc_flutter/android/app/src/main/AndroidManifest.xml b/bloc_flutter/android/app/src/main/AndroidManifest.xml index 02fd0f47..9866d0a0 100644 --- a/bloc_flutter/android/app/src/main/AndroidManifest.xml +++ b/bloc_flutter/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,25 @@ - - + + + @@ -27,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter/MainActivity.kt b/bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter/MainActivity.kt deleted file mode 100644 index 4a5aea1c..00000000 --- a/bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.bloc_flutter - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter_sample/MainActivity.kt b/bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter_sample/MainActivity.kt new file mode 100644 index 00000000..c525aee6 --- /dev/null +++ b/bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter_sample/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.bloc_flutter_sample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml b/bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/bloc_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/bloc_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index a3f285f9e5f45e0961f6e7c2d46032087e550a7f..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ delta 1337 zcmV-91;+ZI1i=cB8Gi-<0033(vqt~`1qew*K~#7F?b!p69Z47m@P0VkwryLnGyP)Q zwvF}1m_6IJeX*0e^>)uXPNv_!p3;7Mx~q@wEg*1JNCDuEFfT zBp4cq=D}r@iwzP84b*~(8x3x!N)R+q3#;H>%IzEpfCg%rX+Ldnu~Ra54HU3~O$;W4 zWZ)Vo!0pbIi+_ERL2IA@7ekLTU=2jMm@OHo2BH8yg9lB?AT>}wfRiW}AIb-*2s!8_Z`J0aSdqWHt5tUJPJ$^55SD*-LM#Ayh~gM5 zI93e|;(v$~nj@|!nDPL^@XVKDClh&;0pT@Z!zs}(mw#$cx6Or1C=+W{;<($^-M&N~)j(Kg z%1P0$mguR_B3oQ%Fp;G8%n@_(saugixRNqYjClFZ;^7qB<=#V-ZY#^4N-&iG2$8n= zBg{t%?W?TN6O@VVN^zJNOfZ!Q2y2gjwpr^qUpgC5CibfA$lWg+1XKBdu*{$@GU15s zn15OY?F=qLDm(Ik6>Ls0l^6(Xzk}43I58|S(7_2STsgb3Bd;<*SWm4;S)us6*-BXm z&%LSz^u*u)!V9a@q5kF^RULUIcH~tB2yfW%%<|*|I9T;JWvlPVl>vKRDRAbbSa^O_8bTCW^)_TebGBDOM_!4LJQHKVGiU;M z`i_QkC&fUm)rH|mR?-G{CGAz;kt^PAqog=97lWtIDDZR{2p3O|D-@z|Bxfb17k>-s zRY^x)d65omtJdA&ikWkvRw;3?>a4Szm9$5FN3QnqZ;m_ysBKTUE^0C2l(}lJ7EaMD0dvJT5Gwx-Bfnu>hsjH zr1h$RURawEc7FdGq^jqse-g_bsejfQ7JmGnqcs+5gzGGzYG zmM4}c6^*nequ}Wk8L}5$8tM5p8TLc#k}o1PICyZcItFKT`mS1QvQ8s9crs5qg!J61 vw0sKSBRWSTC9ZsWMG8C4>k1tm9i9IG=%)ZpcS>ov00000NkvXXu0mjfmpO2S diff --git a/bloc_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/bloc_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6f3ac6f7ca7ab1474c50255db0947a4f236568..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be 100644 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U`k?fA*g5qRvNSt%7O?fnt+wEpNPz&2q>BWp~1GrU_uE1 zfPqjp2%$t1=mcO^K_(Of=@u~ewe@JkPU44NQIPBRc^Y8xsDjgK!Cv zm5qAftup(sN`HY<5|bYvz0=YlGw+9MB+BA>!SR-IE8k(Wss)NAY>RFfF#X*6g#X0H zZd2j2x#97B2oh{oi$Jl&`b$Sozqmf&KlTM5BC_J)-ZnBjZgsP_v6)r@tiJZ$7xW!} zmA*t7enFz_AUC}F-;d<*bJ(oT0w`fiKX>r>n|RP3MQlZL{DjfO9y|c?57JV#a>9Ux*(rATnF7Z`&x7iozWS zHn#xQ1;eJmyD7c{y5QYx1V{eTFL242nebM8A-uV_0Nzgv@CtOVx2&RWiS}B+4c$k= z6~iXOoACt*kA)I`-HB4aL_b@*DxrIi1w-c{V1H=U3$7hHz8Jnzy_f3OlqiX;e9KSC zAz|n=7!1F)ft!Z7$^us{k>UfXu=+$vJV8l24fl3(v@JLLKl}@K44Z&}TI$^tuPSju zd!lSe2}7GcaPR0T#c zV}CDg&#~%;&@YjbT37hD6KM4L9XW5tHJ9nu@^}YG~34p2i qJAov!lV07GM*+YPcV?WX<0QCSHeyl2O%2ch0000y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ delta 1904 zcmV-$2aovC1@sP(8Gi-<0082ccQ^n52RlhbK~#9!?VWpUQ&k+tcegQKLJ$ckqM|5K zL4!ewI+#ot2>hXpbqoZ;L&Zph2n;rq$2Nhn7KcM5$l69kq9g_2tE~{1bjEQ5NG}^A@HdH+2MOLg@UI7WGnz+QdurvEPN_J zhFS*@t7AR8LV-^ONZsiGbjL*VK&bGk00}ksD)iC0Jby}oPX&ZJ^K0QjOf>CM;Zp%2 z)XW<03EbnC$pN1V5Lq*7yw79Xsgesm6(FKgT@CTrc7LwQ37-lO+ViWpDcE-E<%UlM z2$}hA?=0MEHYfp~3g~F&ySXI@zfmdpR6u+1U7jo@!BYWkM+?!IXl_>nJ{53pv=E1H zu)bFdJ{8cSW>-T`%<+Fw6FwCXocaGkUxaZ?ZTNx&#O9fDA{qYMS6~p%{4*rr3lb2W zR|qi%<9`?YONU5>^eD72Y)i`4C@#iWS zZ%h+>!FLPrOVAhEdKvcg)8OfL0YCc)&iotv4}Z2qU36;#{6lX%+r41-Anm~C(n&71 zIP?F}u????zVJ2$1V%;I&0h}`(AFs{WKjHAN|{#<}=c=P)S!#|_D3=d1X5rG2uC!rn>Y?H#| zbbs3$cREMN_I!_J4hs)Rz8S#+{1OU%xI;=K9IExlnRlG4wK}=AS3rc7EjBpKLc3f`F!B%uo~lj4JOieC%10@Ns;@|5jAi8w*`PA;jv9 zd8&kJ)xMVz{uRPAf2$&ar4#{y=%R2Z|9_fKv0TT^P2^9QB;lvJJ<3J)QUx?g*gI_R z-Z=RWSl%>T@O&f_O`HH9Df)QJAs~<+84nKJaiE8cr`r$2d@MUK&~#R?_uR5)Kq%MZ{}jl@6%bx*#V49!C4V3w zp|o4Rd9ax4cn_cphFaf}PBi%)m#T*wMFa$*3pUPRdR7p8H}t>*)=!#EG{aIr;IMYN zi^2R-yQkZ0a6c|~M+vu`3z8De@D<>fP#3$|nAqCCJ?j!Ygpd76(uro;B^XF7+)`eE ze@)E#U)3`M`Xvhxk8Ew+lZwCY`B*X>7eBi6-{^xlvlEP$e)McL4M0Hel9n zLFfixGIAj%V*?}{Ju3))aJ<1waMo)x(UfmJFlLBuHLEuRler0)^!30j&4Re}97wd3 zih|!P;WSF9td}Lx#07VJlz$dWj09#awwh(xz${q<%%V)_u{;~b*&HFkzb(NH$(8?U zE72q&!9V*Ke*(<=D}Z@-8T4A71LKR!CBbi&aLR>G!VT>tn#!yRg)7??z_*Pzffus_7;0MRVQ>>^bfoP(swgms|pSKv8w0B^@s$7^LBltTcoPTsda>WfHTg}r% z6HR5?k!i&}0#tfloB? z&x_p`)fozt%=BRIfBJK?D&X%J7~)MWuWQ+Me&GMNim1+1yo49_9a0~D3kh#stP8(H zQ_UJLeuCosF+q9luiA zZM7rog<>V)Cs;3hM=5u>CX~r9!Ok`&*c{s^UEvar%Xs>2Oengzj#3rfjvO}00(kh= z@)&aVqQn|)aahH-9oMaRYef>JCzphxGHI)bnSV3B$nhejCjY{0 z5wO+ty=to*LTM?tFc-BAzml6^ukKGNDKFvJy`fs=^^y2x45g!%greIL#uZmw>9lb& qSqY`b5{t`eoJ@-rEn2iXW&ICk*P-_82Zx0K0000{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 2950 zcmV;13wiX3P)YSJ3@tr0O=@`9dH+} zcfJZG9s;D3B>o6L$A?)MYCHr;4|vW&AG|?$LJK?ui1Q>{rC(!3{ft(42oTSBZ0<*K z!Ca>$9s>DFiAGovse_BSinPoc*7$)r{RM68Y_4R5J$mLX8}ua z2oO(Oby3P-5f1@k9S%S^7Ddgh;vql`NBNYTD1FW{9szn5s-I?AWyL}?Sxc;u@j@|6<5JE0>$&Fy6O?CpJsNykw>B_}#R z;(X+}l45l}6;Maq0uVOy4|imL*pIlho3ijza=7OC7uR_3m_a^n2)HwD4M=H@$Sm_f zV&lowi|{kNyS$(8Y0GI#cDQ~Qln(I%5Om2jUyR7gi#9r*N%imx9C^w(U-O)vcvkvV z&^pB{K%RCr!jw0{um^-^rAOq>=NgYF9hd(Ig4!`Y0Fu{4uJDZ9MC0Lc55#H9!TFk} zNPgor=$+#mAf;W$Q|lKEQ`fRJ4#8>b66Yh&Zu#deRp}r<0JW@(7U_QEu}V*?^(na! zZq+}RZ$qlqNqz&8i?AlMZhvPy(dM44=BMOB(rnIc@;z)-J1P)Bo+51SR{0}Hdcu=n zlhV}wl$`o&9%*ApZde2g$W!{r-7zTVP^2F4B-xy+IX~mUY0J4PWE~a^K+V@dzI-6( zi#s_kO?1J(+8oXo%l=i=Spd|GXkX8qf_peDO>{*(|1fMtofSZy-C6F@9+@BX;sy_H zZ?W@t8M>m*6d=!mV?{Sp?nA8OnPP=|@qq21;VbIw0aBW!t0{i~t9YI}55L6DKgoMV zJ<;y|qoy6HA|QD>tB*8o8^qkSB})Bqr&7avMLpH-`mN@jsVX4Pbapu+JMT$$N)ztK z5Klc-)VTqqAaaIh=0BtP$m4JhXXR6J0UQt>3wlMJeLzZU4A0D)q}>6bYXVE3lJm0_ zs!~zs1dv>SZR(PlH#_vD3Fi#fJ|)LgMV%W!EzOj>EMy~(=t}3mG$DPaYDJwpKyoEN zBR5;kVxRnPED5b<>RZam}pmiLOf{L_})RH9h` z)I1Uu-kn|G_ZBtvEcC{a=P2(L^#r?n3RhPdSOL`Bj^Fu~`2n9#m+j7nalKHZo0a%*y{$r+94ANL+AU*@RnqaY_u6sb(q7RhA=u>sP z7e#k5Sy9(BAgq_c(Bjh&S5m9A(f_TZiaG)Eu651c2E&h>X~olu=;T>Qu<(S(mCtlV zU5|jeZ~h2k+rhaRkpmI^#C}oKDs9m9uK=)wM)=!%Agp^AqPFaSxKc}}cv{-16Lz){ z;i5lG@4-{wbj{(c-wMLocR+aKE$F%VL$C0(w2{XdL?jOP&Koxaur!(`SpyFA5V~P@%W-6nNuy`#93*G=>-bxto@jv~VwmL;r zW`*%JAs&fD=Q*w`>Z~GCrmLl%DN0CR2g1TNAk1F{LfUc=W-oz(1-pUbC!WH>opMmx)=uS+@}hjwj^ zzXCD)PlgmvDbbr_Y1oMHQOhxiJ#e z!r1B`13l;YRF@U?5bnSwS+5T-vy7rA#}uMU zE)d0+TCc^Qa6C>=j73C+mESWBsMOjx@|4)0o)puFD!ylQ!7Pn9Sxz5Twu@zz8K%J*x8r<{6UKMU)9 zp~N%nNKG;Iy6(=2D!x;Hn~tZ;N2Q81)*Z{Ydo9Z4s4P+%bo%`cZFD zIz<%U38L7N8Y#NU(TjSCa+@uF#qRcqu%dn?rmn6B^$x|$k*H!<3nKj4gYz>1BB@s> wz9Ra1*x{O5x{g7iP$(1%g+ifFC=_GlfBd#Up;Q@lA^-pY07*qoM6N<$f*w(RrvLx| diff --git a/bloc_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/bloc_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index d5614ac831d924f5e49e16a3d4391be8964fcdf3..4d6372eebdb28e45604e46eeda8dd24651419bc0 100644 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 4067 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 + + + + + + diff --git a/bloc_flutter/android/app/src/main/res/values/styles.xml b/bloc_flutter/android/app/src/main/res/values/styles.xml index 00fa4417..cb1ef880 100644 --- a/bloc_flutter/android/app/src/main/res/values/styles.xml +++ b/bloc_flutter/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ - + + diff --git a/bloc_flutter/android/app/src/profile/AndroidManifest.xml b/bloc_flutter/android/app/src/profile/AndroidManifest.xml index 0e7c814b..399f6981 100644 --- a/bloc_flutter/android/app/src/profile/AndroidManifest.xml +++ b/bloc_flutter/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/bloc_flutter/android/build.gradle b/bloc_flutter/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/bloc_flutter/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/bloc_flutter/android/build.gradle.kts b/bloc_flutter/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/bloc_flutter/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/bloc_flutter/android/gradle.properties b/bloc_flutter/android/gradle.properties index 38c8d454..f018a618 100644 --- a/bloc_flutter/android/gradle.properties +++ b/bloc_flutter/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties b/bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties +++ b/bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/bloc_flutter/android/settings.gradle b/bloc_flutter/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/bloc_flutter/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/bloc_flutter/android/settings.gradle.kts b/bloc_flutter/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/bloc_flutter/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/bloc_flutter/integration_test/app_test.dart b/bloc_flutter/integration_test/app_test.dart new file mode 100644 index 00000000..8a44588c --- /dev/null +++ b/bloc_flutter/integration_test/app_test.dart @@ -0,0 +1,26 @@ +import 'package:bloc_flutter_sample/anonymous_user_repository.dart'; +import 'package:bloc_flutter_sample/app.dart'; +import 'package:blocs/blocs.dart'; +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return BlocApp( + todosInteractor: TodosInteractor( + ReactiveLocalStorageRepository( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'simple_bloc_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ), + ), + userRepository: AnonymousUserRepository(), + ); + }, + ); +} diff --git a/bloc_flutter/ios/.gitignore b/bloc_flutter/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/bloc_flutter/ios/.gitignore +++ b/bloc_flutter/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/bloc_flutter/ios/Flutter/AppFrameworkInfo.plist b/bloc_flutter/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..1dc6cf76 100644 --- a/bloc_flutter/ios/Flutter/AppFrameworkInfo.plist +++ b/bloc_flutter/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 13.0 diff --git a/bloc_flutter/ios/Flutter/Debug.xcconfig b/bloc_flutter/ios/Flutter/Debug.xcconfig index e8efba11..ec97fc6f 100644 --- a/bloc_flutter/ios/Flutter/Debug.xcconfig +++ b/bloc_flutter/ios/Flutter/Debug.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/bloc_flutter/ios/Flutter/Release.xcconfig b/bloc_flutter/ios/Flutter/Release.xcconfig index 399e9340..c4855bfe 100644 --- a/bloc_flutter/ios/Flutter/Release.xcconfig +++ b/bloc_flutter/ios/Flutter/Release.xcconfig @@ -1,2 +1,2 @@ -#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/bloc_flutter/ios/Podfile b/bloc_flutter/ios/Podfile index b30a428b..620e46eb 100644 --- a/bloc_flutter/ios/Podfile +++ b/bloc_flutter/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -10,81 +10,34 @@ project 'Runner', { 'Release' => :release, } -def parse_KV_file(file, separator='=') - file_abs_path = File.expand_path(file) - if !File.exists? file_abs_path - return []; +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - generated_key_values = {} - skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) do |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - generated_key_values[podname] = podpath - else - puts "Invalid plugin specification: #{line}" - end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches end - generated_key_values + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end -target 'Runner' do - use_frameworks! - use_modular_headers! - - # Flutter Pod - - copied_flutter_dir = File.join(__dir__, 'Flutter') - copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') - copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') - unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) - # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. - # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. - # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. - - generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') - unless File.exist?(generated_xcode_build_settings_path) - raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" - end - generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) - cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - unless File.exist?(copied_framework_path) - FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) - end - unless File.exist?(copied_podspec_path) - FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) - end - end - - # Keep pod path relative so it can be checked into Podfile.lock. - pod 'Flutter', :path => 'Flutter' +flutter_ios_podfile_setup - # Plugin Pods +target 'Runner' do + use_frameworks! - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.each do |name, path| - symlink = File.join('.symlinks', 'plugins', name) - File.symlink(path, symlink) - pod name, :path => File.join(symlink, 'ios') + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths end end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true - post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end + flutter_additional_ios_build_settings(target) end end diff --git a/bloc_flutter/ios/Runner.xcodeproj/project.pbxproj b/bloc_flutter/ios/Runner.xcodeproj/project.pbxproj index a861f735..92c13a07 100644 --- a/bloc_flutter/ios/Runner.xcodeproj/project.pbxproj +++ b/bloc_flutter/ios/Runner.xcodeproj/project.pbxproj @@ -3,24 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2366E5FF7225C36570C36ADF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B18CA89E2996A6B263F66545 /* Pods_Runner.framework */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 4EEE3E8F23C4927D0065A5A2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4EEE3E8E23C4927D0065A5A2 /* GoogleService-Info.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -28,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -39,24 +42,19 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3219E38D9738F4AC7121FB7B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; - 4EEE3E8E23C4927D0065A5A2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B18CA89E2996A6B263F66545 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DD8741825F163AC04489B25F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EB174B8697ECB290E7346D6E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -64,40 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, - 2366E5FF7225C36570C36ADF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 4DEAD570AC93508D92C128F4 /* Pods */ = { - isa = PBXGroup; - children = ( - EB174B8697ECB290E7346D6E /* Pods-Runner.debug.xcconfig */, - 3219E38D9738F4AC7121FB7B /* Pods-Runner.release.xcconfig */, - DD8741825F163AC04489B25F /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - 65314717153277BBBD59EF57 /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - B18CA89E2996A6B263F66545 /* Pods_Runner.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -108,12 +90,10 @@ 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( - 4EEE3E8E23C4927D0065A5A2 /* GoogleService-Info.plist */, 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 4DEAD570AC93508D92C128F4 /* Pods */, - 65314717153277BBBD59EF57 /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -121,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -132,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -141,28 +121,36 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B4149F1FCA3B6359C6408BDA /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 7D98778AC99E43569AB862F5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -179,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "The Chromium Authors"; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -189,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -202,18 +195,25 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 4EEE3E8F23C4927D0065A5A2 /* GoogleService-Info.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); @@ -224,35 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; - }; - 7D98778AC99E43569AB862F5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -265,31 +253,17 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - B4149F1FCA3B6359C6408BDA /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -301,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -323,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -355,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -363,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -379,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -398,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -432,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -446,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -456,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -488,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -496,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -513,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -540,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -562,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - - - diff --git a/bloc_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/bloc_flutter/ios/Runner/AppDelegate.swift b/bloc_flutter/ios/Runner/AppDelegate.swift index 70693e4a..62666446 100644 --- a/bloc_flutter/ios/Runner/AppDelegate.swift +++ b/bloc_flutter/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ -import UIKit import Flutter +import UIKit -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d22f10b2..d36b1fab 100644 --- a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -107,6 +107,12 @@ "idiom" : "ipad", "filename" : "Icon-App-83.5x83.5@2x.png", "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" } ], "info" : { diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 delta 702 zcmV;v0zv(!0?P%E8Gi-<0051N9Sr~g0+LBYK~#7FjgAA4v{?{^@8X}0Z3k<6w}Z9f z><^e=txv(&M%%VAwr9?F>vmVhsN~6W`o2{sEoi=<#LK0lCQZqxL0d9r+%6u~gOI=3 z1@vqM?Uu?Lx}}cuvI+Bi$+!un5@lwBeI@hm1yhGAEuXSz%6}#;AWGQ}p_jmL_k5`*hG^t29&16wmtl!G&hC8QE+W zM@L8C**iJKSK$@ZxzYsPu{p~^cNTS?Ja3tUc-Gs8xw$!{(`f~lZpyOHsmzl@oxCAx zFPO8a^M5X(-nXov{EaPyOeUksm|QN0k3+O0;eF2RLKY2y)$Mx!DhQdC|BhyH@gII4 zNXz#X^_|U`t+Ic0TQr3?w2h&45Dmd||07E?vP=`mqJiFSppnhUF3}X-(lkakaT86E zEp{QZnN7B$DZHf--vci<$9CtNVmoMxZG(LijW+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f|p>|a{vGU delta 1585 zcmV-12G04G1Gfy28Gi-<004~sxNQIc1^!7yK~#7Fy_N-YBS{j4>j%w`xFItNj+vR6 z8Gs?2`F7P_Z(XzBXxfrY=d3@#Y# zT+86%#qGfb;!H3yYzxaw%fP}p@6WM~mZ62e$#*gW00fhk(SNmTEkldbw}%!<(lWFJ zs|4w~F&a|hXl5fbyG zQ??#4sx2ccRL?Su3@dm!ti^hV;g`e6FzzB(WG6-l`O!LJOq&Oz49v8S8n8s3!3tz) z+%b&|gB94C^?&nY#xx^D>)7gbh8TGWBf|hRzyCJ&b&jv;?q3&e<7axnT(Y$hS>y zkYW=?hIQ}~7#Y^@lV`Bx;aHCF{4bPleE-x&PP9*NU4OJqZIV5><$Z##g8a})jAYbJWeY6GD zyhj>vL4WgQK3lZIfM;Rsfvx!yD?y4M9#gaD|IwV9n`bQZqGR4qoeK(N_PYb``qEm2 z3MZ%N(WGErw}T5V1PFB2{IyAgJ~F#y{V|mngD^6z<=b0v+B-WZJI`Ok+1kGPKB99e zM4d}Pla58@pNuciV=uizpP1p2s*E0v?^(edjQM}Xi*#{$bvb$GAF%>TIr zxqtOOFMuTvq|0RIIpcDF4(AB7`h6(48ncv()e0^X%7N#ZA50n4ZN1MKem=i%tK8AW z1^qH8%f;j_xB;Ar?$tPTuPM4z))oXmpIjo`m$QBBv2xW`xytzk{lK5G%)^Q?uPhfo zKBZ54vuZcL999_yX@Zf38MZPe$nNz7-90eeQ0&PkpQM3-0kd2>oi-_zN^e@ue}8yN zAM<1y_M<>AXBZgQW4xps@ZM*eZub$9{ygBT% zNd`vdf*xMt$(r4O!r0Ic8)1JUQr zQ*RU8{4*I^SVWO4OHS<^kb~#?G=KEM8gK>!(d#WxpRYOJ4dyAE%UxN}pG=d(lgAwO zTC6e*iZC(^Nc0Cv=l%W?N&5UnxPk99DJlP4ZY5IWP5AKkn3?swH^xbf&u7Bi2G>P*D z93dFF%x=0LR)ls9F1Yu%ejZZn!X}O|T+jETCCX&8^lBtgyR)Ok!Lu+jtOL979@$Me zqLu58$R3%5VXzCUVT)brjI*+q2&_fzg|P=_T#?EL1b+x;bbs0r*(Wx^$nd*OllQ^X zj1cnUL-EQrXRKOvMl0lCoPQt&OVk-GX}n*BkzwoICiBX!c%>pcF+!Fz`C#I>!xcZM zGI&8FdiA&t=(;O)_%|+VxRZx@9z1vQV*Z+x!4a(BGgxKVnktpuywjaJ%JY81 jl{)_02Qx?483DlSqvj_&)3(Fn00000NkvXXu0mjf(U=kd diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 75e84cd172d55b1b20971fb3142ff6876ecd45c2..6ed2d933e1120817fe9182483a228007b18ab6ae 100644 GIT binary patch delta 435 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 U2?md5F8}}l07*qoM6N<$g7bj+?EnA( diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 03ab8a84f141a4464654d46362eb539fffd7d067..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmc@2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~f)03vrT_o{ delta 1058 zcmV+-1l{|Z0;~v-8Gi-<0035#XAb}X1M^8lK~#7FVn7CNfXc^0Hn4vJGdLcVNZ1 zvYv4l_tB$DE4pSLFYlU?2PcW`Mww=SUAE06TV*ytkHD*u|9VBwv{lhPO-{<$diI_( z-uto#eWJ2&?$h#~83Gk-rgxSNFk^FOyVEmE&n`z{8@XHAJNK!m?4L6#`{oH$^vx;T zna#{=KK1?wMt_Qmhlf-)O!=h?vnH0lp57Z8`qzvkZS7>N+kMw7uRDHh$ z%Tl>mJz^s>+X2sf%1&Cw12ngr*ZWkd^S-Da^;6B54SzEGIGi_WP%vkr!?o18FKWhv zR6P~|g#2vh0M$wJ@6I`!^JTLUN}5ITdNaFuxf>vxAS_EK4AS}O*Wc*%_Fk&Pl4Djo z8Bzwsgl0CrO7(orGgCvVSbgwGjXLYw<0rvv0s!hB+r-S-Oy- zhQ&0X`o$DI**~tA(GNfTK+$NFQmGVWGMST#t-~XFCbp%%XLDxjh=!#MDVA+NIWU1j z`t;LJDH4gG5UAo}u}FA@!$W!~vW0JsgDhQHlVz)bIK$7$;#e%E%5>7{H0=}$bQcQc zet)CfccVd>v2Tk;-#Rt=Hvn;lK_HcJEyaKPQXuKr2OG+q+4`<%4sM!FflYEjE^SgU zojIxS34aPRwWIdgj?8nEqE9p%+o7i57X1&hcvThN8%S%jZ8m4N7qWEQ5KW=oPn$zK zbSfqjX}Tq_hD=R{D?Ec8@NAn}!n>b}bAMvll9q7RY7XyFb9k57u4p@;MVa$1+iTxK zpTKL45cv$Hbl1lpFae c?&>}N0zG=}64@tp&j0`b07*qoM6N<$f{X7IR{#J2 diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index a03431cbe242fa525ee3ec790c46c990a03d717a..fe730945a01f64a61e2235dbe3f45b08f7729182 100644 GIT binary patch delta 447 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 diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index f47613ee46814496f40d58ae909b756976d765e5..321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10 100644 GIT binary patch delta 691 zcmV;k0!;nl9l!;U8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P! z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1 Zxpx7IC@PekH?;r&002ovPDHLkV1kbsYmWc` literal 3810 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 Y0j*fAbhL&TLI3~&07*qoM6N<$g0e}{=l}o! diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 7f2230a978c8a2f82d02bf6ca32497c15669e48f..797d452e458972bab9d994556c8305db4c827017 100644 GIT binary patch delta 390 zcmV;10eSwe43-0s8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6 z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f{CivY5)KL delta 1576 zcmV+@2G{wP1Fj5^8Gi-<004~sxNQIc1@%cpK~#7Ft(JvyD@PDT=Y!ry|_8 zU}V?~UIHV-=KJ^z*7+=yB7ENT#Y^8GUQCJV5!-&%@P86n!v^bA!^nIFm!q2bHIYL% zRnVU>nX~PQsu5m3VpkwbBf|`4*($>p=8@}0Z8VfwMK5DP>|`)6sz)7EJ!)4VOEXoR zVPqJyuoareoiw{#B(u+(fu!kvQ9b6Qzj46Guujc5j0_)U*o5<@Jme~Dn3h99b>ATk zxS;-+%YPEpFyOl|_P`S4i)XzQ-q@mYpSOZ3b#KCDxG!oZ+*CWMKxY3x@UCm;1C-g` zDN_vv)22H_&7_Aw?V)cR(&+p#o8fnQp7O%Tuqn6M!nC@(M^-*B_>+hGjD1Ayw2x}1 zy*f2h%J&aU(wD#fP8W~b)bEah@50FNgRU5D?tkrDD))6ff8-ln(2oZI7o4J>fBu=i z{q;AxVr+@(X8fk`ENtLeUy^qA4=j~?Ka#~g!%k#TD}R^`C=T-jgQ}q9`(J*gYeyG| z=M3N;jQg*Kv$TJ3d^tJuawvlx622dR6?`V@W`k6x8F^r68U=NJ`1u#Qd1PKcGtBb> zSby?yJWp0WyIk%$e+qYx*oT61Aq+5_^@1}f2k0l}?qQAUF)!f^|CC;{RBm&BpC0kb zav^;e3;@nV{al#p=M{A-n-&BQ4NV*7o7jE%qNQ?$y?wgdoxpuA0W0_q6h`KP3lRbh zhkkH)*0daWa$tfNN2ql%O4F+wmdfRK_J8PRS5mz-uiy-qfHN)_CD5>_{NM-*9?je1 zGvrv`wp1>)y-U})5{5Taj={(VE|1C&T4D4)+CTQ0n{Lzg*| zYBxU)s|+C5h_RTlnP-kbSUM?Pw>*R8|Bg?rrcIZM!!hg6Q zW*Rxe$S@F%c0RNxOXygNamikkqYpp)kbe2)7nB1iDgU?KP;Q~PP3JnXFQMQJo0EW% zxu7FOjgF*F6K7b`epvF`Z@;A0Rf*_|UvlRFESaC@1O^6yJqBt|W2mUn<0Tz)_9!GODo7EeCSffRXIr-?Hx zxx<$+Ejb;Es#yj`hD*TiGVir`b1Bj4U(uSq%cRJ|$S^Y9;m;XL4hEw*FMpxM2P5a% zW%t7h--^ZsS6^(Fm-Hnou)+@;xht5XL^4T#1S0y+xDQPBA;YF%7v7QGL`$%6vL&!e zI(`_e!0Ivsx2ZGE%BBQhQ`BALVlea zE}Uo$6^pIG0<|!$AOtJ;41d-soiD=1Y@97~U%4$@D9BEXkmYnbB3m_W;q@Ye2TH*i z8yQv^HfAgL0l#19h^*HzLZW|xbCcUA+M*jHZIKOPCKd#${fe2}`P9@|Xwej%+bw)J91V)G;; a0Qd{3;U_gGeXtV%0000k}=8_EQb8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ*el;Ed literal 3462 zcmV;14SDj3P)}00b^74z_|aGC)>rXiR;Q;~6~{lQNx80UE~{HruBZFC zC$mmZnEgR!$K0RfE%GLL8*n9L8$;bKW_7nh^Jg?2e-cS$_>*#-bxv9N`3Y+J^QcIL zb;R4^O5O@w4*xXFoAeG#i^pNnOqFY>&6?DJJQ???&d!gjyxgpOXq2}D_cvZWxazud zze!8K?r5lvlkA{L-qYvBZe&NmDUSc++kUCT0lmZl zstj>Q%5~3_-k&@VVK1D&5q3ZI_e!4wC)|8p zgzf#&pvtwVfG|}aFx$`HtbU%<^fMXx{EaaErSF%&Sm2!e_}%?yuO=RlwD>#&->PzL zd#Cp+%X|OjTUNjMZodM~T^|l-VY`2}o9s!!j&ur=^`khm;Ev-;qHrHv_!awK!m><) zWoBk(hA=ae;xL)QXl7fom}W*WVi=9kwOwv~o9C07aZS6E)j8kZYrT5)s;+T1r~zlr z`*_E>uip<2cSz6Nf^+{9Wz8+)UH~7f@)l}yIcgKu&E#WaGrPWW|IZ!hl>XA9c)rF6(7Atf z#h%l`H}I;87Nb@JKW1R~O7G*H=k|MFJJKa1z+xGJLxzbtoPMYVC#f3^n`d8EOTnXDA*u;mnxtm#qU*T3IER zngXn4|Hux^rfwfU^Un9w(4=JXHMX=|)BZ_-2fEhj6ja#|dsNX{G!+NXbp6Bo`1)91F3zxj z1_7=(=Oe)NLyA$tM3tYsbyzj1NAai+`@a8t^TBS}%SW^917!cI^F`+j7!QQvQRT56 zyX3F0?Xk}NxZhKchCb1z!##3xc0scKdSz^;@;t`8ks7E&1CJ^i;0rIjAXmQnj@0x0 z4Dh}WpF7$oJ*CCW!`oS$k$T7bA<>3IJ!%rvqXq=1T>tW$vgu$KcS7ub_zSH6+VOrF zDlcaq-jl=tuMVUTMkuzupY&u4y^m%Yt6~T@=E66-Ip8JcTy2;INU4s z70@$OA;6HkcD*7E2RhB>dKV47_dMhm?FE@zS$A|MqK>^qoi~!+* zT`x;>9Af>EKCM#?y?dZa_y5v0EQ@PvnTEF#hxhN^QSt9@&aVOXF|d9U#iNQDAUv{j zw|w?sC-t6wP_bTTySlH)N3+bn%4=)#$F7m&UG`5oZ&ZJzU!eXditj_K1_;}B?36F; zZx0^nNAW0tS$|hqa+t+3cd|!w z(92^x(*>yf?alqkqbJT?=qqgn$$bDH&Gt<%NaK2Vn@;3n)T8MLd*Gww8+k>SL-DAR zIzYJcjXkm{evkg&>ll%-58$KOYm+6}V(g>4qU`P5-#8~gJv^!C0cxQE?oJ&Z-1yo% zvh`$6e%?JQvny+vhxh#09Q(w}q6C13yZZO%EbJetd5?mi%Es8EN)`bs2im)&w37X= zyq3`!=1n+(+5v!Xe|&hZ0iGI?O{WSm`VAD1CS(y{cXzi84Gl@LSd_JlKHuu6l{<%~ zWfOD5DHMj#(7X2!d*TVud|-2+O3MWV_}p{PNpEkjXn3F@uCA_LPJPHK3xpi0+ysE`_4t40K40mYHKmWWu@x&9dZQC~K@9&o|JQy7vO&#L$+8O!# zzy$Nh3BK?2Jx z#D�`CZ?{`{r})lR-T`+T2#9VcQ6*=$UHO5TAYaS-Iz)d*s$zZaowAOHA= z{_3;CbB4IQY=1Ht(*H-Ls~F5Uf`;ClACE%H{W&ARbZm+FRuH28meuh5f%!x1E3e2G zJB!ulX)mI9G-KFb1JuWyY(_yF#i}7by?whp{P4pvJUmPgnT6Q4uq>bL91CYKA+U;p zqIfj@{sd?jK*a|;#svNK(N4n44DHuFIW5f{ygP=5-Vul+z?Az(`afCmT45~H5C`L4 zpKmQxezP6LqY1h!ibu0S1MD0Zet=iSqY2}J;!$`dU(6)L-a)i#{Pl8*h-?oWVD zwxXdo&R@NNUx|9JeK04@?W4S7zh}{bDq4#=?x);8ip|{Ct_e}LbfS0^KaQS{RKK0I z{`f#n8aj#<7MMWsXgHgDUe40)uh~Ugx+Z(g1`1x48dWE?hPc0XKpKMkyp{HSaP>>E ze?y#Iw6$w$|NkE8o1!wj^cr^T#7>2h^ z!!zG=^w%?#I@E$QPrYM*%`R%}nZCH8XId0(h5}d*YAtHq$8#QsIIf}bNki`I7^wOl zXWstc-G{TZ`)hX5m;28Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g4w*u?EnA( literal 5543 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 diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png deleted file mode 100644 index 8c552e237629bdd153144a309f497f1dab0e1fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2798 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 AX#fBK diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 45537513df37c45e8074c7c131c61cec2eac66ec..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih*E#3x@8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$g2ji*Gynhq literal 5868 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 diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 6360ea17a408801185f000acaded313519da49b4..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 zcmV-~27CF1ONtGU8Gi!+000UT_5c6?0S-`1R7L;)|5U~JDYo_jSDRJE`2GI>`u+b> z#Q0do`1}6<{Qdq#!1wR$2T#*AweE>Ub09v4>;QIg_I^_2LtK$20(D{zn_^HL*3Rj70 z%=tLH_b#{gK7W9-03t&#zyHMQ{FK}Jd(rva=I|w|=9#+Ihp*3ip1$;$>j3}&1vg1V zK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}xU&J@bBI>f6w6en+CeI)3 z^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|Vt-;AMv#QX1a!Ta~6|O(zp+Uvg&Aa=+vBNz0Rs{AlWy-99x<(ohfpEcFpW=7o}_1 z>s&Ou*hMLxE-GxhC`Z*r>&|vj>R7LXbI`f|486`~uft__uGhI}_Fc5H63j7aDDIx{dZl^-u)&qKP!qC^RMF(PhHK^33eOuhHu{hoSl0 zKYv6olX!V%A;_nLc2Q<$rqPnk@(F#u5rszb!OdKo$uh%0J)j}CG3VDtWHIM%xMVXV zmTF#h81iB>r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfYn1R5Qnp<{Jq0M1v zX=X&F8g4GYHsMFm8dDG!y@wy0LzrDkP5n}RZ}&a^{lJ!qV}DSMg`_~iho-+ zYhFY`V=ZZN~BQ&RAHmG&4 z!(on%X00A@4(8Rri!ZBBU(}gmP=BAPwO^0~hnWE5<&o5gK6CEuqlcu2V{xeEaUGt9 zX7jznS5T?%9I4$fnuB2<)EHiTmPxeQU>*)T8~uk^)KEOM+F)+AI>Y`eP$PIFuu==9 zE-`OPbnDbc|0)^xP^m`+=GW8BO)yJ!f5Qc}G(Wj}SEB>1?)30sXn)??nxVBC z)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=kL{GMc5{h13 z8)fF5CzHEDM>+FqY)$pdM}M_8rrW{O4m<%Dt1&gzy8K(_+x-vIN$cs;K#LctaW&OA zAuk_42tYgpa$&Njilse`1^L+zfE<)2YpPh<)0mJ;*IFF|TA%1xX3fZ$kxPfoYE=Ci z)BrMgp=;8Y9L43*j@*RFlXvO-jQ`tkm#McyC%N^n#@P}`4hjO2}V z1RP0E%rxTfpJbnekUwBp-VB(r604xuJ$!t8e0+R-e0+R-e0+R-^7#e&>dm?Lo++vT O0000$n9loG4d2wKsisy;>(q4p?ht6ifi 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

$mXuqN7}uZSD=w7ko)>69%HJrp{x1n$RbE! z*yu*-E@T3dqoJkwK+18}@#)AZuW^-g@it}woIK7hoXN264W(iQS{n~kPujP2(BPqp z4vWPKcLrM$1dq!PV~|?Km^AQrTt7{BRQ!;&S-?&G)GukB1Z}o<$lZ7azzE`uJ?)I} zSa!$A)?0d7yTobi1%WG$a4%jEm#H0Gyv5IoLst;(sPW{UNY76qbq?Mj+^z@2t3|TC zkcv4hn}hlpnANfhq43&&haH-ax=^e|q}m<%fDYDqrhm9~ljZjPI=;Kt+pEAlVEe#! z5$?PAj`3(j}J@o*Ldb$M&Wu9;~A*BTb|X2U9!pB5#bY){c&^=bQX;y)iH0v}%g>CTw5VxBM z>JI`-KmN)MGyN5nr0e-ESMVg!$=KGM=<{K%V@XCbG6#U6%Y(UfFxAZ{^a3ZCoocsaB2F zjvM*Jz87^}oY)?1`)l#NK||so!kw>T&J10@u#g_y?~mMDo=o88g7$Z0kQDh+q2=+o zcbBu0NlEkm$0g<1m-6_sZM{FJws_SpV+$BtI@w4rMrsDgW|fxOIRg6HQ1x{SLPsB* z_u`T&6MsC|C0=7OXR%`{Vvq@mAc65DNfFyWSDyQ}gTq$No&O|;O{Soh6e9PCQY8w6 zkEcXEzzNe!XJpAuq&K+5S9GJ=D*Vj!e}?QCTGXh5scN}ln(acaVJO2L5!*1K{hK>H z`2`y|yl7FTW_Umcd1qrq#u@34#E9l!QIN)z>nqWeH60N(tu$rpHs$C1o?E{o)u!GC zJ$!cUIIv-8!XcRh55M9F-Oz4DDRqnmAl+5?&G3P^jRx^^<)qrPqZ?vyi*-IzUzX3& zZg_aH0^w|`V80J@S@jVS8KmijI8YqlexP&HpX@xu^=tHOEh{l75xEe}(i9-7AkON$2h$#9~W>&Z| zs+@FaX)8S9k>`76apEjSaSKs;c*)SqZcLDv(=i)B&ZXyi)aT|qdw3q)!smUfF{gP_ z{&8kOUnPkXZ{lHFD>+lD9dt$#iDI3M{e47Sgn$Y$sQON>)4q5Tb}GLnf3P4+?07-N zWu{ARCj=>Ap+-VGK=wHY?FXfZ`UE%p-ktMgDUj2%Nlwe}B;zgdKEc!y9uG$k2Qa&R zOwv*(&F(NNj^}2z&XDh!-&s^k_w&y@>|0PsmAUzK50pA=l#~QbjTT(#OI70GU~-+F`-h_g>ZLOg)QzQ^AonZcL=x!{rPlz{yH!yt zVl`5eW*S)8QapS{Ma{9}DA)JCANhe1SFzY+V!8PjmkO!Ik!c|64U(ZfXDpdocN0tj zzzUSCyo+CyRdH@dO?cBP+mDvUIn9+LJ?2E$aeLPpCFP~^;+{R>akNJ(yL&-cau?}; z937zf5!AlnxL1>=g#}ccq>Y0Cx{Ba~3jyg3a(09UC>e@LT-~p*dxW5V0lRkJiw}Yh zrdqgy$E&VUC{!U^sDQRW^0FCyU7UnT{%oJ>bTR0a{ zN5P|>wG2$@2m^rrH+#$XU-z<%n(!rmPB-+5%oU`vbHIO~ zw8Yc;8StR1g`kQFM(G9ozZx|L<&qiDsSpjrE*<%N-8MorYEMGveBMYQV;r zw~jyg;J)JmdJR+VRDJI+;KXgRMnn_4^W#OF7kV@FR#9E137P$yi}C3Gf0c7XTfZo# zgn=%n>TX=~Um*R%$B5hYj5O1S>^aq^1XqJfOEvsc6yQ&M`cO+O#BF&HJrxNTMU*ZO zo5oFw0#Jj~{?8b804xL2&Up&<$Mx2Ii*>pYkBOH{HlN^WR2+2+@)GX&S2vYG_AB!$ ziuDqaq)279sPm2G;^Mj)t!-Q$ca9tW5>fj46(=vhb52$IV_FAWaA8`iJ4s1P&Sfms zL3%0s`*+EHLtC+-rXOCRGDHM`M2eLt&|0k&YPbo@7USX4Dh->xx=$WIrcLn7xph4X z>n%3)@8syRFW$rp1y=ydIP8?pN_-h6C9Oy_Z2xh3Vq_$2t@-+p@p8X0LFO>d5&ayM_bctm-tn!a>|4i zlK$aM&32~Ya#v37DhlC8c|EA&xBJgp-t{kJWwbJC!e^cv;zWPC$j*nNK+`!OefrLG zY4FTBmRy}D@KN*r0gea0Q+HgqToYD=S{7LG-xM2ZK>pl4md**3@Swj$QOY z=E=PQWGu0a@ z1kHp_#6smToZ?()7l!U!3JPh_ce9@vh`NYLs96tXx#|~Y^vzTw->4{SGT?xPmkax& zp+VW!soLdCZQKEI<4lYnL~P1FrziQy!?imtCPWnIIU=5iVYtR|sthe40O>MLgWVmm zA}>Zt>=E7e_V$qOvpL`6M0lPbQg(22@rWmHp_*H?jqI6`oL|54pG$Z=OgjA6ieKm! zNF$5;VG^b+>iytiCM9n<#Y|__ES^54|Ce=bslL8m`rF)6mLku@;tb$UgF=4epV6R| za7W!y!LlCHEEtVML%q));9yI5VR{+TFXr{$OkMx5%c90ARC1?nm5CIM>x+;dm6h>X z8?|HI?>;I<`XL*|f;2CU!zA46$V2R@?30}kaF+>Z=YI#rl-ZrzlYCj+Qt#a5JDYqd z0E)FU2_6FiCUsUBbI(`4? zmbVzBD{R`N6xs9GKuNh0j1}HI z%-*rgPAS^7L&#|>>adNu`66L$rJECPl56F4i&pFU-nwRMH$W7AvIvZ=d~ts(x8^#? z9``ALPi(Sj5ROcIwNifa#(NdGW~#}uLUctP%Ng*isWIm3`sLEb&AzT^7qlLfiKwyzxCCa<>18Emsh4W8t8+SiDHv%Y&&<7&=4% z@U0ggcnm@l0V%aw=TX^8A1V@2L8~p6Y4hE9veZ1Lw7tW?2@m5nqP)=7YGW;idUikD z>upK=6Pfn3j#TR$*ns&{&q7&VcE2j;;!#&uceob!7M6&|Kc6c#rw<+8!SOZb37f+X z=;*Rj+=CcQ%s=|k$1Cfvlfw5PS>tJg zB=m0r2RN8|=4z)B!QB~^0zZ_YMqrq%R@!pfk(^FN6#V` z$emvD@NGNbKyYj(I}H9|LJeU;JKm z^tqMurRb%;$8^^>zK^4}{mC7MY8d06%v1k0Q-JW=h+AVLXostIhc#I{xW~uJRrpj+jfI@RGzW2FtTs3tKNmjfc7RxYqWM0Xq~Q4IaIMn&aH z#3O!K&(W<7{$>yoQ3%8br2q#+Q!+O7@r@gouVnO`G97I^9BS6GK;K*jRd;Zbowjfa^Y?DWR3tWqFI7D9=?H3&rdD1~ z4PsnP-FTfg^$}{9axd3ITi^fNoOQs9Nxpb(EI2>SLja9WA?L#0DKz8w7<@%}cODG& zqAIK^#2-*jLcM%`;=b#?K4Zc`P704!qv}m>rfXOq&#cm};)wsP0Yg2gL2eeN;;|{B zC}ccYEQ@JDSHTI)N<)4^T48Cd$W@<_kFYQhWb8;+N`ggzY;<@AhJ+^tCG!L_BX?IRIsg<=mm<_@(M6>)-3oX(?hkIk`J(s zXsD!0mJV;JJdc`x?(cPeWtqA9vK=}rkhhv!IHNL<4@Eo=g_L_C^)5+5N<2`MXthZ1yKQa4W2p1zC5h}? zII!9xuIw%}+uh2Esh+le#P;vJ>TU?=nP3Zd+j|Bpq_+@^w>epDv7KRfPZ0YtO0-Lz z!BFlxx%Bd#DrYSK0(P~lV9C_}jD^YyG~KDEbXVWV-Sh_y8O*E5_EaGNJ8vMOR#YXF zUoBQ8iwR1JZpEd-S#z$^QU5LEjQRyH;iGpzKVXK-w^Rq+LIz?QVtMJICoLpW{kyL8 zHR%izGiCr*ngU7i#to}bG75LaYiF)Ry zRwE^3?!)f*Y_TgFHEyP@+NfMG+}JXCbrAJT#*p$Sb8An^AodHp0;FhcszZ_K-z| z?N|VnHUXw$Ci1|&$b@x#y7@_xT|)XAaDXUfDT#m$3l76E7EAo}1rXg|+N<1jOLdyt zxY#FhA=wyX19pHHLi`}&O@=ko^-IU3Gj9zfS{+l<`1@hMB^$xqwt(o_A^VbjyimG3 zvU6h!+R*$%TJ{`q>3WhVx+H>YsrmecRZ&u+!ay#A0exwrXlSC$3Ws#(d5xLd2dzig zF<|kN^=T|SIG>;I<26_?-)zpPcFvQ;KhZGinyfedn*m8M5Pc2lfR|e)7TjPE`l~Sp zX@S7*a1)9j8-$UZfw595MK2tLpke?+PADiCugEllm zD_)&QC|nwzR#$5hMFZy`;dRWiO+)~i!;%pAeLi)WD;Wve@QK_fhQZ{OXJ!nVhzIPC zc;DIUSTv8Qzx7AP#(ztI&Sgrs_a?(EN7MMAo}b4!4Qa`1D+tC@&6R!P@KpQYdj^#| z21!b~)+R#e@$`q=U{7=#G*|0yFV)lfs1%wgZ1s^T=P}Jv(W(;7Cs0l7fVj`kcA>B! zb+zkK)MpwoQNqQmXO&fX5g&?4%we4_p>Cgpm=d6pb~V%-Nv3Bibut&GFE;Ps%u-1O zQ~(ku84^p3y}lKC4$n((dT5(x>oC2?ctHH*Lb`=VHv;g<9$gY-*I^<%EEe&bs;4SwAQ#!^TsP(FryA67eNGv9^Z zG6q!~4>H~;X+*_<Gg#?J5XG#34*fxKnv8hNuewgndd*uJoPEX- zcj;1%1l1*Y(`FOwkNc)(A?7La;skDp?LCmKiT+5Ia>MEe-flAyZ{%*h{#>m1@VkeX z#k}h_dKR4HyiAg`J^N|EB_tvN+~B@}v!}utO*qngwHp0~`&N#oao!`vm=j*L@wW)T z9Hx+D@}tx(xasF4WCPqBD#207P@){vGCoL`14_}>mK$I63_6a@L(DN^7AlnL6A*AK|+$PVn$_DH|9fK9rEI^+|+t|J_Hpn{D9;8vLus zzw$Mf)-S?7r%wqpPMq@AvrI(}q}ga5DT2Q`-Jw(FzA;x`p&o+W0IT(N30OWwX=M;) zc{dmxkp51PqZI&ngntDDc@*`4XrA(50@WruK69cba;%Jb$fTR`M;cA#e&3UeK#w*2 zlG;-+(8Z7J;B>ujnjR+iW3w5)a>ix7$8#^sE5t0w14p#MTM|wF1keTW7_v+;J3M3L3A|q K)eG-g1^+*MxH5nM diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 152d5e12500b4809d4a5e1bae2d1fa52ebd2757b..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfFf*9@ literal 3390 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 UptyngmjD0&07*qoM6N<$f{32#_W%F@ diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 310b0b8f4f1ed5dec5fe5480c3aaa1ad05efc440..8953cba09064923c5daf2d37e7c3c836ccdd794b 100644 GIT binary patch delta 1217 zcmV;y1U~z!H_8c+8Gi!+001u>&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfRoa8g literal 7082 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 diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png deleted file mode 100644 index 40ac4ea7a9434539521c5b9e693c804e1ef8273f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10960 zcmX9^cQ~8x*SGhqS}j6reOr605wo;vRa>hSqgGM7MnY^_v%@Miiq;lt7qKadq9|&X z)Fy-^k|%Had!Orip8SzB?sLxPocq4dbzWMS8L={5VWOa*V7+5(aG(79=ikdfNB$;R zC#6zQ+{nITp!*<{axYi8@v$mL0=L_yirM_TLs~3*R;A@#Im}^w^vPf7COhx zf)8rT77LrK_GcFwf7h5cfg7y`R7>GiW&7}L(gj;~lhxuA8m*nye9*POQ3N!>^|0_D z=kWbu{$T+$3K|WKfyP4Ppz+WIXri1+v>_D18g>|z$DO@c-I@EUt22v7LyMPZh61hj zT2FxLd$51^izH|L>{&;%CHv<#7+LJ+PzfB)> z4|y*DoHBiL6lSBWiUReNk582z-gAb;2Tp7b`Fh7Swz11Cp>Y6GWzAKhZ9Ve3=KL}B41PXowoFYf9Y^)1F^))F_YnM6$T|wgB zD_o{P()RYR8gSTmY4vRVR_$Yb@q|Y35l2|Z6l@1VJh5L@)y=Vp;T5-E24}J%;#Viw zPBLEjOFm~|9pU}MKcr=u?uERB2FSEr_E;Yd@wg&Gg01j3s6F5=oXD`C$oA=@EJc$$ zTm&*4HiN{2)(b&m$k*Rs@ui1veU_nb*%ciAPz{V5Ret{r{DdExM&8UMvE(X+v;Vr~ zV>}bUo9HZ(_Oz9aQ+W%$Y4iuz+ltam!dsJKNTP>Y2049e2=VDEB&SMH;_>B-posxW z>V3thB3ZK~Y-8!&Ir9{2yFZb5h>>rCT*-P|f5IbQ)BA_}^}!RA9OgZLk7Pccad$lC zXrtgb4*0{2iBcaahhtBcvx>Xz_y`rIeE$&kfA|SiCkS zm#_0zwW?}uw1#9NH&jmT64|@mMV}wrUYTG?w&x0oFnAmIlIUXwR#tKfTo?#5{>sp< zBt+n63tU|eh~7LILH(oCBb^R1Sh)#D{i$JpB=#LJD;B2uL3@6=-*B=ZCOYjVf@~l+ z_Ot4sZ>n4pSK92@hwE39C|Q|kF^4OONw*@wm^z^9tWe4AK$K;jCU7$wB803}Cwd_$ zr^q2okq{UP)y?5LXOb=_3wnr0wG8^E$rC-N?_g>|F9wtZDT;XT&ry*An{S(Mmq8^+fQc&Eg{|;7ZfIzUz^*d`Up<9aH|whUu6$yDH;1nT ztJp%#l+`?~?-j9Pt$_!!&5L-kVtx-8fu>SHTHlJVOWA3|+X3tq+ zkt)~jWxk97$q~W7)NZS3TR7~uL|$YO+^Aff=7-ZSr_CQss24C$;g1Z?FxjuEo7L3t zB>*f23{p2FX(fz!Ma&hNgv&E^q*u4)%Pq77*p^9X@<>UC7_q~k#v4y9#^yu$ic1Fi z&6Mp^7U_s&?_5}x}^!HNW)$y2XiVFccoN3tW zv~HT32iWV~9*Mk4I}_!=oK)jq0w#|}KU}|Zy9NFxibw*1g0iX8xN}1?=EofSV2K~7 z%Hrhd4x~ZC>JWln3E;g0clXS!UFt9t>QgCw4C?Wy zm@=913_q0IC$9Pk-xGD$0?t0hQ7~ee77Yg4}#>hj|Br@CUm+1;QYo z`R9&5LF(%2W9=WA62+g!5@-|`#oXkDum@1BZq9UDn?feCCHBcxLAD)CyvrHy@vJnL zMR?}N__n8!Y6w_?%Fxlii(xJ%hgkqi{mj=)S@KfP;CB-Zk5`Q3;XD?(D_O5 z4#=Ch(p%+6^fZ1*OkftieA(NY(slSaSCBECdKAF&3%G>7-%3 z&;L@40C+M6hXg98PPds$l@oUI?C@R(}A#7GBqvwU$Bl?grFZ1-{+%u&`zGpd;!!EHrWyUx(~MmnX^XGB)| z#P6C+Hng`jU=B;>188;jZtk!3V+gZ@VvU$Wgi6>V|5pABS5I)2I)CEYL9(H6L2^(pZdtEAe?7=?<$e?JDUTAQ^3dh>SNmO8 zNdXTy`ELpPMKtI~`P@I-IJ(UgG&M!7g=+O?3eY<&I{A=&|=b$#2uvp z>$UrG30Hl7;`5@YGm6+Aw*-!@(bEv1G38Ei3=0IiI{obH)V>UH^~%dqz_iv?bAFt`V{|(X{-)zso-BT>YI$zCFyt3#-vkVntoC-$ z$5D%D9&f@lmxb5J&`oC~`{wLlyz3M4DK2KBe>@-Nm}9=UEvFB9+3vKkxrR^3LCOqU<3sZMFw5+ly-6Vm^kPI8@c`N4K>Y;XHki~7cJ z`08(+?QLBz7e}6IDq2=L1Y4JSVyw=;bU4&xvk{N!wO$naIWhc>if6xhodqD^B+>BJ z(%0?c;@`3g)1NKq*C2ak1(wR=iJmpyX!j%mlKag!O2f6iwtjjEcJRz%N9R5{N2%R}(4F3D;pprMhw~K#I^l?* zw;_AX_?EPrDXpZU<&w$wRs7T6uJr_q-8uznVHru$VTjYJ%aXM5>h~|!-&MQev5CEq zG!Prf{Mn-Cvn@zf|NJeLJLf#A2@Y^E?wO%hh7Q+F?B5wfwxK%C@wv9dO-k$MWSFtnyLrTPi>$f++e2ZB9rX+F*H0dwoS1ij^P zG1#e7;E`g_!r96Qr-Fm)IjBzi&xa=d=860onut{%R=o@)J*3|~+eA^X!b?k5Zpm+9 z(kDj0)H6!A@J_}*+~eBLi(i#G1E+H zmxiUDCJV>MOS|1Wi%kFVeeT9_wQiT5_Sz9W?C5xil+{ajmnGF!Vvr~p@wyg?22E0= z$nloOeSj17TOg*w4yz3B!7$Qp?pp2o?PvWD)siDsR6>lpfE&YfHg6#8yJx9p#%Y~! z!1VmFH1B#MVvQww3w0fcExU6!)!a_ZfHt0k?S13kjeH<-p7*A`i#0r6mkpqxH_w>J9wIVd3dO++!nAdg2xTxr ze=O;Vi-f8D3+~#GfcFLE9xq*q+;p@IalKrkN3*}Y8cU0Ghk~oAv1q!)?iG?6Jqr1Q zyi?<;tLR7bT7s&~>m%9}}8#y;+qrOK4tC|SM%wVynVjl|KW6_u%4NU+ITec85 z$nT~-i;A~idsD&{WPL|r7LzC(rn_nF$o5(emMtv%Erwk1C1fY3I>Nhp0wP6@c(2gO zJwudvLMs=$s{DTTZ3KB)a-E4ZW2}vB=&pZb%$s00$hfjnsAe*%YZq$Bk^*NqvF28p z`l)?U+sn~y+Op-yE3KddYO1i;?n zRJoP!=aSb}d&)X}H_7t$pWV7KW2IgNh=4o8QQXt)skuKthjBC$V2dToH>G$^vW5>+ zBxn6v>*}34V8bPv)U5#CjSi6{MEBmd!6IxofCjf`pu$G8 zlte4)!I+o&#LP(!DyIZJ8*@jNlUOa0UuCBnwbt@%t5>eTH(*#S*GnGM;ga{ouV2d& zhv^+Fud9(Gmop?syX5Se??!5Mx83GPGo%us@MT;o`a>p|so%{wp;mKd>oJoM&26yS(>4iUoB3 z2{&j3ZUlCV&)asNJLq^wY8QCvuHVNOp7v+nA6KRUjymUJ*_r=-YTUn(-<5a~`Q+{i zyO78ngppOah%pPd9LJ}}DJoM24yjF?Da-B{|LQPQ&iC4QLQqO+tN zl$<@3{DAoL5-2VXcd6Kdma!w^Al#Vn3r3eBZN3PX>R_7FQa4P0)aVQR{i=0_Uq4jWS=2LCGr3`;>iu;Ij6x_0^hxds(UNGT8TsXy7wO%i~Ps zrn)7W;M!%JA-yVSp5AlYETh|Z$b9;S^oYO_igw!NJhR0jnT$&`{cX?SJBnwz)LktU zYOTVEIq_qg&fapQLYUzijk;XczJ1E)Is=o8?m@WO)B>Ts8+Q_#F1C=*uIPQCzM`sk z6AMuCpMkoB8Jr?*h=<>eM4b3jL?yhn!43ZaYtOtBvoUd`XPWqsWG^3iDlt4twE(f| zp<5xLVVSuc)r+cj8O8jwy4b>ok?g6%u{y>SWLnvNUhs!UMBf4Iufi*ngwFG9{R5-G zq?iO&1dxJM5bmb#osb)kt~V~s*t?I11RbW1=wQ8I%QO41+&Uj{-U7ZKp!!2p0nzvF z!Vj@bX;C^1T7gYUQ_eJJpAV7RLDKcB1i0sZ)6NZnu31vzmO~<`;fCiq*cmN92FKr>q5URP29dUx12k^Y4L5^`W~A`l6t{ zBmBxm823`baOf=|3DK|b9QKk)4NAaX!y&m|qMUu_f|;n4xZ+4$Jj1r6WWvveH#`M8 zv#%g@qp+0g&CN2P4UVUKM>_*CVaJfyXA}0J+|ND26C5h{pJLoOF4Ff^x#BcI!K=ia zQ6L*vrA{BF!xpFq6NpI>Tkgzo?}wXuGIO&m1aq@Nc1cfz6PG{%)F&tmpH$%?DEbsR z2I-L(74GS^PbdQ$IZw= zo97pht-7VS-=%KfddHh|5m8X9&A7rgJ05#^Do9~hDe1AA1POX$q10C+l>B|Jb4EI;YObcIwjUCZ-HdC+m&5==VXzk}JTJoW%U>UHjgirp;NkfUo=qGJIVmwrd+DA$5nP zoXmB-Pkxe|OYW5;b^H3VhrZJ$p#m033h*-O@jQ-LjXUaV0}{hlpUo@-O>VNXvD!-v zPIq2!T&f0+;(=okk9x3E;53;$KSPIK>I9Wbk^FhcQJE)Gc%nedq^723W_EVVF?3$Y zQfOO9p%$qLIRFRhGB9+ISN6Zm2c<#=4s)~rSo1`xuMez0D-VnRwu&rN^NI<-XsbU4WW!Fj{{8PHQ@CLBc)boBJR`*V2G?84z^ zAVB{sbc&L&x3%k*xJlLDv2;d`xCo`XuG3?)44-HAdtlej7yDP@+*2iwn*fOFIj$B= z;}S`Aj8(wm1K^_@x<}SI?^v@wqk3;?SF>c@gP9LsH%e1e0fSe>Zt+u7QzvhE5y9R& z#}K%!9Qx!4*Sb^(i%k0$t5q6A@j9J$V5g?aHO-*E9D-_oQD+CgO$-eUZ#&cAFD_h2 zO+ejTh^!4UJDa@81XAL8gKGbAD)=UWhOc%ti{81K{^3W=I;{OL7!sj*{8Z9E*d!mIS-cF zrgg8qJ`%fKR97eK2H6Fhrauf}!c1feQ~e#{xF|faW*FyjWDM7zh!4JS+pv50z3~{k zZDCk$-bcJR*SNOS32nLFy}#Hpoh5BAU~gqbt!pbb(tP}1c+o9x58@_p0)`|A$np}n zBe!)f5IOInDeSuqsUkJ17tcjIK8Z3~ZV@Kp@k((FA$#+>_ASrLzUQe<52juflvhzw z(lKU!wYn-1@01_Jh}kI z1esPw{hZ`-!cjReQuM-{mN;FbB+7WMo9QR{O@A^?W0MQwdz|RO*5l&vL`^ zl{e4l5tP?TA(6QFNc^@0ek~DnTJf^VPhCGGBt*395?YTWS;JBWpidsl9TAyDZxQRV z+NiqE%@|I$3fLh+*<7ObeiE}z=OFNShV8G1T_wI$OgeDgZrV{WP;d%59UsJ(T9BG2zNC)f1o&L0j{NRPaiovd% z&W*R<(YGgFw}xxxeZ};m>NGF0cu>1anM}mTBX3EM1OtW@16xTJg$XN>7t#?#%-kut z2|nds7;(E0hJINJhR$jfXv*|Ye{9O)s@nl*0n{r znoFD5G32S4mF$_S495MMBQ9qsT@)?`7EZr_8Oq;?x<2yOJyj;jOa2*W7iQM}bnvS0 zEY`uk%aa*945_{ zS2FWxS4ZW{f>Z_xnT#S@bXU9S7$!zHhFz`f3jw96E4u5Dm+xj~rk<6wJVqo}0`=qy zE%g@=j8%dN@v1x!mKp-T+iB5z*P7(;&UjL*?9O5MH`Xqj9T1ePT7i-kyWpJGtPn>- z-J{EFP+>lJvuu-mm`(Plrb_+{9HZ)vl8;p6=3|8JvP#{xT>lz6&XYOmvspvA2NBo> z!GXQFy@YsnFE(`t84AlC^Xt4H_(OS)tHD?dk$I(=wW5L8Mcog})5-zEGUJhx_!I7y`4tAwB8Zi))@Qz`Ta zk?&_)a-*t`d?A?6{e@3%I#>YZU!P#owc$+-pP=5ZrtF@7A>Hq}wwV2fugY*Uv>n6Z z2?`w%@scG_F*DTp0cJ`EyJ1UiJVyXk&%y^EgzL5B7im7Hhz-?3j6qsqZ0n^dMSM*W z%5~S|0G<9_UsiaHVN*l1YHkD-;>gK$cw%&y`u2(I>b_TLe~$O_PblWfz+UnNt|b|6 zYJR^g{aYM~R_zaK2nED`%zr46w$dpKc7l_FCn;QVuJ-aMl1SbO7zBUBw4@K+`5rn@@wqGQm%QN8-|{j%Q#Fp{5RQOo$G|$1TZQN1gKh%V-Rn z4Oxk7%n@sW`^K=(GOgYL3@Cm8H#4l5YqzvBJAcraFtLKiCk`WPLlW&C&Rx8oi#c-A zik8ofT0}AC`C1&|c3SH2Gb1ngWXUl5@G|WPXAdFy;k=|Pe`1L2J5=$i$F zI7&@8-$#}sS%Uc=QV0~q`r9}lZY?YOQkypyPV?8}A8zOz{x|65MT2E1ul$?yWs`Sk z33$u$MLhlNRSHqL)%G@-b>g|(ZfBQXi8>9+rY8}(Y+CY_q|n&%)u>_aL#ILr>7)*c z|7@#d+0-&rAN|2i(%D0ofj8?gka@&844zFwK9P2l^yDM?ulhBI9xM=uUc{Do_L^GU4~^zNqK;h7X~ z?StYZU%hzd%o@i%Mb}k1fUu@-3j=O@lJ}qFb8|)GFUHiKH=33myxA~45xUI~?)T|h zXR%ZY)ZfMQjVDjfU8`wW#3G|kekZcITK@VU7i53GiBDhFa(@>6fGgd`xIDI-SU>Kf z<^1Sgfn4DQasTcFR8l@=lpXY68N3F540zH>4^EDH?GVehSujPoc^|$VBIoP1d2=(r z^cjChLLw=XKN62`iWs`Phs5HmNWhx`zHr;h&$6rZ!@L=+as2&u+a`P~#JHGmK&Q6V z6jBJAp=I_T>7DI*Z!A%wJHSP5gd+ePv~ZG-Th>p!%V+ z!G(A+2O&<6*|Ox&6xCmGs)td)$JchlC^<$MU(by)9zp8J!v^FCY)R1x&#y{j_O|OP zFm-J*lH!eQ|Fc3C%zJ=3G$K}!^oZ=WKgg1FDDEx&g@=8)bUQnK%Y_t&FPu1*{Wn1{ zK!)v?98HF(FnyQSo0aU(6CsEs8nz;w+Nvfcd4hl$4f;vf;yEiNJ|XI8klG{rNl_{4 zTEbmKQ{LOva_y+C4Mc(kd0K&jq~yZWmrIjUs=n0eL^D`QEyz2zubaVN9-@Z>SkCU5 z<-j0hdC4c{if-}(Gy+zhEP#~IeAKlA{fJA~_zGNl$dfIy-Qe$80~`Vy;fVPwNVUqk zS{FsiA=+Yepcyt?T{rR~@q#=OQt0-|ZPb~8ty8W3Dr`})xHsOqIH{QH3OVBRQ{iWt zG2=6GYXEs*<8y8UAMfe9Xj`t4O}US$IB~73hfKVxc}Gs%~^;!ob%=TDrDX2{n9)G+L84m zl(XJudMJ&v6M5#P7;w?h=ee#cd#%pPZK6VH&dxG0K;(Y^q^;w{>o7@^oDz!l2oF#? zvB&{cL8fE{uw=7Gu$j+|W+i zBnlY+vnk!)>)hjol-m`KdxlF_BI(>hW6IJc8=UqwU&~#vj2!eG`BFIOtfC;~=&!j; zx!L_4NN#PzQyb~!F#76u2(yrgCn0}^&)p6GFp_-<3572S0Nu{8B3{`yQqcP|S8B)J zAYP@C9fjlM9GM$MeWxcor?{qx`#pE^F=aGpe~;fk5JTcL*I_1SATw)as&_umu6dS_De-44Vuprn~O?FBxt~ z%p;5TQa^C6qmR7wa9MB#<;G$ft=Iz^GM>Ue5U0R=GCto<(+^d)t@$bhwB#(ZidPcqHcSjlco zDDu$8=-GBCMAj>xx`)KP`cH>O3}Gf?qeJPR;O9_59lffVcF0;l+i?oG8LzeEq zUpG!KYC0v6(*yqJ#HLT=OdI01NKWd>#jBm+{;iA7%}g}*BUfu(zkW2sXO?QTH^0sp zr|A!fMtl7}qz7n&KV<8j)WaZYFgOM*LAv8kZk=`B(RwCt&l=NqlqCfXpR!HoZQu4? ze|{^2so@8M5Npq@$?%2zJdmVSpf6EQQpX*p(a*%rB+tC%QIzEv6U3{cc{Db%B|e-= z+)?f9XO@KbZ|%ljF&-pE0<5I~^NG3E?atd;iSR;yjVQ;(`k?zv z;|_!F+&-4I2<^kIf;lKJs^Ius!zrQt)UPG3qn9vQ1Kvh|%Px1^94&bBSP=QNSY!E% zpL_&LPl9N-WD5TfGz}N~eXOg|`q^ixfwbQ)xP000KjnC3ZyeDowPN-`V5Js@0z-wN o!O&qCFiaR0OxnP^Xd{Y{)%3ZzJNI|Uld2SV49yH`^&DgV4^qiy*#H0l diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@1x.png deleted file mode 100644 index dfc408df0c17b54e2a2e125e64fedb5e4ba7e09a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 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 diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 092b7bfeee1274504bc6b7c25fdcd8ba6bf8e15f..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 100644 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 8074 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

U=w(Q@cUi! z+&tyT;AU;W)5Pa>O|<2h{H+Q-o6qKgkpK3Z1RlF7k+QW@$xRH3qYEj%B+h&Gj5Ryc z^e#`I7$67ENefif=KC2odP_*655CnN-+@NY75q&2hz7MKD!r{)C%V z5%W$1X%?;xVd9y=$fGF8NgB5Fe!X}ig;;Zp%>nK`1|AHtF z9^GQbE)ZP`d_{tS{%OdRaIo#ISYqVjdE7@?ebkOlJ2>8OsnN?)aTn(IV|$utwa>*r zYxhGcf9x%3EZAf66|5zZElh42e&9Tiojc*?3RW??4LT(qi}=p@hyiKKWtpvJ|E&|#(8fPeMFw7oy7RI zY2xSUa0;)xJxh8{V^aIADWt>pfbGKSeY;p_ls)6N1LW6(NhR9Un-Sg~dxU3OBbe6U z6?h3^TrYM=`LYTjo#R(>e6(kP7r>u!zmI0H-pjP|23@~Z!TiV0VtMt(mGaB*`2Pbu Cq9<$s diff --git a/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png b/bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@3x.png deleted file mode 100644 index 521c3e2a6269c88c8d6e6797b53448fe60b6c712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12001 zcmX9^dpuMB|DWqHw{k6)QGJkWrBE&-B;}Iauao2&llx^h*N|J0kTRE05lX0BX1U*! zkX+_|zie~cnC*9bf9LVo_Rs76x;&rH*X#X0J16O$i2)bKSq=~g#ASF}?>_KLJ^8S) z0^jE4-R>Ze;(J3q9g9$gjklJedFrH&y@dGnCOfxpSk2|S%e#at%Kv}uNTs%Fe%kc= z{o|stTd$9e`oC?PBNdUi#J?1m@iUr(6SOgKF2jUb(th28#6TrouiJ*HB9p9NRbTf83FqWj2IpJ3a3UE!AE)dIY(O zLM?_|yIZ^N^>^e-ciTG|6(Ti1_Mi+S)g)8%$-#uX=4IEBK7r{tgVDJIJX$XG@(gqu zT9si*+n)=$w&^u7qSk%Y-q=xN0*<;@+CVK_DAP-o2ElYk?6h~UL_nG)@&nOo29$|h zY;jFs$HFvHZ$9m`@#4eE1S9Nq6e{9%N(|D*Q?@?g`sox2(Sla1BK#&JMpY@~0< zBZ$@G%*=E1?pKINz_$_XlcSw~NXL{|hN12UW`Hpg8{?VV+830Hc3Q!VhONXHrdtm% zNc2hq$43*?qBV^nB;mGOQ|%T*P5cY#Q*A8B7weHjX65tIP-LO<)FT8R-ku+R>07=t z3~xchKFWU@9){KHX}XEVNdchpBYL- z$LM1)>8IPg3uf*wSfdsP`Fmhtp5Kws3{SmOBNN4l2V_L|)3BkACVd!l3Z~F2a`pp{ z{CT%XH~NPiIV{N?avmKJlIFT*ImI_+dU>)u7BnZ6gG7`+JbV38wHV658OgzJly?$e z@z`{7YJ!0IJv@iG5qx0xXk{mjKY@lU)W$%5Z;rE|iB8wmr z>ZOMG1=u}a8A>Ps;1aPx{q~jnNz&h7A{#O(6%~;!=ckKIUkSl5#)%v4FNHW!mS(6$ zge-cn>y9ScMCoi}kjL10kI#@1u2U8DE6T@`5?Tyu3F+xSzsH1H+K(jGpCSN707z%J zdRcyA%EXG`m9ONmi-O3}sQnf*HPy{MW|o`J5`p|-6UsLvC=CbGvoBZAL_(YIUA(}C zq$K|fWu)vCoj_OCV0fig=84)~>a-rL1fIdz)6rQaOv!>%rltZzUb?D%W}1Zc4GP|p z^H%($yryvII&8*cvkO_3a|6_Y3Ne^+^dZAqx&&@H*&jW<)x?7BK+&|>2kb$D(%M>D zK;v4|9Ja~chD+0dRd4AudR=&@TfB%M^b#NZa4vqnusVGTPNf2(*tJBxI)af-OBWbz z{}u9MvaMdJIVK5l37}>h;SU*cMPwmcN)}e1ygHC!bQ_m8IYZ|A(o~$x2-;Q+j*20J zQWJ2U^AN^JAmXdpZ86)xkZjk{4ECU3CG;0O^5|JL;*R-BHc19csy~NL+fwYV_;0)5 z%W;FaUN8;IxStl5tYw=dkzc>E6EOUb$3`0PW3?dN-=J=ErF>D$q7<>AyC(|T3xl9$ zqR32b*C?UXP!nNOAg3%!KwyHQTkUD^Li4IvWDraaCP8C)7O8_(y zlvI*W=vYDt0!2VKTd0xWn;c-m5=1XZ%;AijiCUeL1*OeU_`4O3R#322*R z^YD<>!O3Cv*gToP5Zm2hXcd+5B07IJJ+nsT*XseyIuxdR#iZl-IrKG>Gw42;>yG>( zZy=-m;d~>RyqY|YCCOo5(no2A>Vf+)wX=dO*oOHF4<~sj%}MSf*_RLshs{v=?*6@3 zN$DI=-Zo~KaQaj_uqKLLiMyzdqJ4Q}$4{l;lH6aUJb^8+N;NkgYPayn%b<0hmzJ8j$^?zlvr;Lf*Kh97Su1cHn+;u^#G3O1#u){t7b;o{_u% z=>+J(iSHBQSQU5g$7Te4KxgXbQJQHb+P`ur%3mj?C7IKZk)5wG?F13H)$~L6Wub}! zeH>;z?@d6+)TEY8nBTn8o!gnyHy-i9#WCrfsXS~QfYz1Qu@4?&ni{{k#w(mfg^U?D zqt}*Z;-U=^WA{~7%MVy?K9JWz@^CdHH9D)PJ@ot!vBAEcu&2Ue;S_fDskG>S{g?^;^wD*ohw|s zcpKojY7_RrdLdiP{wj5=vH_Mr=T?@imZZuv8uCP)ISH8ATDE!Ps|R_?QI&%GfL>rN ztuP-Ax}ZYDNxfzi5r-;1zlgYO)x;9-J?C_jXeKERjGcpVjA`G$Ag>`pLxb;1Y+(yS z7dIz0bgp|2fE|AWP=78~R_^g-B2Vtd%paR6r7j5@=`mHAzY={6aH>Fjy3h$$5qsGW(0gH8UKlG?5=vGF9!KVl6&i@&es-AsOp zp9<0)Acph32H!2xa$gk5s8UjLMnx{-E2x8tRvRzM15`=`xnQf`3Yp&?urrCo`kAgI zM15W%Gq&aQU~MVzD;f_62NeGD{|}P9$zQua(SkYqqe-k`$+$(Ol&e~Is>RDat5@Xc zZVTwmzo>{O4~9x7=Vr?qd?jWp{90!cj&MI8jJ@JbIc1ZsFjMGxvI&b;QS+YD#WE8% z_DUW#Feu2P_)K`k@1NuRnGF6(M(S`d;Fcja6jeUDK``_)q_;OX*3N<|bxHdR&YAAD z*plHPZ}S8h219H2;J2voe<42=t1A9-JvJle?K#|&-Iu#PA_TpsEzATI%1_0YVPz*$ z1kGv2C=csRcGhH+)_ce48;hr5S24Cw0gw^Z89B*w*n_80(Q22y^F~~Hu#yJ%BxIOp z;1a&E!g9h;%fV2fMD!5}|0VLD;DAGQ|KrPx_}fx`5SJHh5LP6PyxH(kWr){?5`7V! zN5nrlP_#c>el)QGMCD@Mjb&oEmny_h_H552$)Jx2utx^%TR#FvI(`A6UKq7lmk=2< zg+#~jgyauY9~`}JPCQ~|ElA{U@^(JCptc9{4rzn(CMTA?}7%zePs8T8JhxV`G6qwC*4z#68Gf+qB zN_=xfeZ7f2?#6emFQk~vDjrn0&^ch&q)#^U5#YBw$4`I*pI-7QYD-{g31{zs%;WN_ zzmds((azLSpue_7Z}`|3w!cK{Lf@Hz7^0rl&mita7Zz0gN6Dg(bq+l;uqd(m z4A}4Hq8PN>?aMw*v(ANKV*+%+DLXo!+N!Aa8Jjl(aCP?qa9Ck2`ec?x*rQAa;?5~M zCqF~@Izf)UslNZW!Ch(G>ZE37R%Yhp0!EO`%0rbt!GcDNtrCzk`u>v+6Ng4G`_Di+ znL>>#_8}IH#z=&jqy*uCughf>d*@lowEudn3jmS(%Y%Q%)|C@hK7hXqu}>K3F3f`O zw5q3h+Q1k`V19|R6?*_Bu$({IOj_Tm%d$73sLpb!Z4!eOzJGQV360j~m5V3$k%7Ys zU0@!(xj`-R*#j``=Yo7oN-|zxsUhYbcXm}#5&1VBD=8_C2YUcf z$x)2)Dp5b1B?<~=oEvvRIWZ}za0=e~y4UinY@dd&fCMh^{bdOTPMh*d6eJ3*Vd?;k z0#9=Jm(AY*FVQUThbP*=>zyneu{_5Dh#?+^BnYp3bwEaOJ4|S*s6Vv?qFCDVx6CzCR2LwqBQ$1 z+U73H#K4J)jD(dqTbL>Y6;>4NwSfs>R;_{t0sWInMko#ZjUK;SH+6y#E=HS0u#u%A zbN##=__>h9q0mi=Ilzo(M;Z>E<+J=hfKG;z@5S)s=3Tkd=G7woRa8^xG{RjGUY}P2 zP*)?s#E&b&*fDHNipX^Fw~;Q=v40ylmcG4^`bZBEQgd@#x+L8x>IPg=%57Q!oZfCv zce97Gt*>qQ*M*$hOtTubXj-f6Ga77MMg6|IV=k=*LB>}%S z7z-8KT~#zt_~2~1f*K`Zrd^Kh9;3QcevFvNp|IdxEzo!PUuY;%{eBy4mFg}uavx7% zOC1w@M^z`DUJBANNsR5x3!9aaQyW_*YB)%SX|!me3EU!d_??GWuacrV0wDKkZ_A8M zb3))XR~9G+X`+Sk%T>L^#TaEgCXzzA+DpEI zmFcGF9RdgTZIhAdkvLo&k%tvGmwZb>;EKPPK`dxuixP!|tSm{yz4UI}SnNzRdeEUL zN!Itxac;-5HsJls%%gTW^Lvd@7qHcv8>V~+0oW4_ z?qlBBiDjkEyFxTR@qNd~9l#26^rz*_#*f;I_{%xY)lp##PjF1$ruilA2!Zt{ocmxo zp^8Y_m6$&Ic*>O@6KMvIiUrr9?+*NBnX=LDf8x~tt0p|S#x}3X&o882y}IBTPO};+ zCOWc0`zMd}b*>gJ_avqa*X zKY?wQF-z-BxsE!Pp%yA$Tk+c^eWVt^bVpC5(Vi6oRgol692P_y(l7<8zWh1c21|Tw zG(!Ku!vs1w?BGKo6bPYEUYw90|Ci}C+CW4?M{%X0TKh~zj2-VNnVV-rJ^0OZL%uZM z)$RHL{8!Lp68&Sr>wjS4`^SGOYlDa0rOYhjiPfMPYn;xXbNf)uJ5YEp&Vhd5o`fYH zz9O3{RhEcr$lf(mANixh_xl1p&A*~mo6v$gZ?M`cmn+V#Mh-puijo4qLs61V9g+~w zDtW(Ig}7Trg~VhthF>Uf!Ofj-V&{gn@nmm>!yJyNO_PP@9q1>Iiua}871x#2{kKWl z7WPpq7PUH9l*=enZ%jFp?VGnP#KwzmiO`@^5br%D>-GC1Va{Qe=5|YX!(g0n8`=do zUy{cU5xwn$gb?=)(tC=&WBgEZh}#oX^;?jST0qzI#fX~XNEGpHLJMNK^7nA@J{a;6 zM>_tuth8+~t%SsoO+yoFhKj#mPD6_QGVXku`oufYlKN>h^x*G@D*h@7Yrq7AxP z{rXhr>u>*O5`V|&;z#2ns=Dx-d(o{w6S5@x6J{cD&xVCOeox)sIksI=su+|I>dGXc zFPF!ViVYqOO)hga%U7`L)5NIf!59g?8K`9S2WC|^+)-Rm*}(6bkUMjvXaojJp=Dg7 z)xMFH-9G68Z&Bf*bW*u)Cc4u(1{Xt+bA~c#LAUE?h`;;KgcJACtVi{|n9kv43BihW zcdHf}lz^#rp6+chy?nw}`IbmQy?^=5EVKd7d)8JGh$Jv@6irqLZ4BI5+nnnpL_;}g zgw(nA)iJe1Dom-Oa1_%m8>`8Xp~o!TU1^k2nR`gOE%5JWTT z??o>I5%msT+PIigjx&e&_J;(miuKk~J;Fvwp4=ImF)cd(CmwW2MJk(u*P2F$F-@!( zWSdnj8V>)-Y=iD$=IQ%^OsF6U9mem?O26^jd$Q-sC!Ur1`Y^7h?#H9X1!&9|Q_EU2 zgX9AZWL>@hjwxAjl8qDHc17vZcL^zX%U`u8`6}V4<|A>+9Fa7JPG?4H8&A}On}YIG z4jbgV`WXD6V@XmlB|?VnyEDA&L(v-(4Ox+EdteQeJYt3dc|?1_05&ws-@PgB@;1+T68zXS3gvImteP!ifTz_Dt5>@BL- zTV!omynzXr|6My%xz~r7fFU3+!nYT!&5fb|s|Iz5NM3)pW3)|$90kqEdvM%}(n&+u z5<*v(L^ZR`+@i4#Aigi<&e!1S*80_$>GI+w1|ZAYSGd9i_xs*{)2naMFTS8Hg^%s?Gw zpn^K{;=CJwttC{s<*8~SoM|VmU>Lq`@}!5n!;CZiI)f_rD3a9BG%#xzn=(~ew1O!p@qqy~mjtL`8WJYdBj$!LKP)4F@oW1wa@S!X zk_pGQ2PIG&qM*x+Gb;?WhJD$pEjadG@M#Sk6F5!0#1ye4orJaU^N;pPt~KBo`&U~h z9xm1SHNTyR>w~3B6P_4J&3KXi60aXT2!ajCSva$#XZtoczsR$odC70s?1X7aY3-)# zr}w0JmE|>f6ooMK>>*%uLaL&6ntwHjs;Ao4*=qU~!^iREq{^4&w%s#I(kYAcxd}Up zwYSoH)_l+p!Rqk-D>#=o$A_we*e+>qH2AHk8@L5I8}*yOJ?Qk~`?@N+ICOB?%6#cP zu!YrK8}*gH-Qs`T3*4xI;Zw8yQZ4?WcnM~VIGOm{I2V2TG}#NqB@lFwIa*W|`O$Z1 zKrTP(0hCg`zlNtnp0;47X3HPsDnSdjV2b%`v5)2@$zOj$m#c;@;K{wq^xy{yQzzST z0GfpoVHxl<=EZ{=TK^c>h^#Ko9T%H=ISnjXA|QxqFv`3x1mj5gk1!t*^yj^%tVrbM zFw<-Jw9Fe-b-Y2$d`vZ*?oZomsv)vcpCk-^3TA*$KflgEY58q-qS14jd5){OFlf31 z()_-uSTUgK=6z2u&se|an@w}bSabSHat+L;#%0snvj8q*c5$ z?J(5Y&G!7>E%eRTzy2jWT`ix>k(c16P<_U*6c*eY7&As#YU$@1>J6%Y&9yZ+0jz@2 z&{cAOB|QL_>B7k6O~FRB;{<`6rS(6nF~(f0GHBQvJpAiWmoH7@W_{8H>3PmR(ju#^ z=9#)FZ8GG2rlf;9+p748(z5tI*nI?L8heCyJoC6T*_tG7AA` z%rHp$ir(aWz^mc(BTT)xEeBQ|_6Gn}Zd0sajKk}{=&l(?vw%+{*z44p?HuMf%mv26 zQzy1`lNYDZSsD{E%_u4+98-yDo0IglO>v_QT3;mY?$FO-vi6N#uTF2Cb5itX#PrkPB#KW-IG z0VU(+*^diPYecLrxuG0rgNq~I+KuA`YmSb0b)85?WDPJ_y9C(N`a zk6SC>BBIxw#4J-z5{o#i9{FCnKu}Ptf)ldG1Iwj~WwL+d**D}4Wt89P1P+N9MZEuY z^gYqyLo?t|1V8#(S?S38{vO=n5+SUKNZenCKFl1zn{hL?SPN>&Curo0JzuKfN|(c7 zZUjAhCR_f##G0O~2@r%Xw_l9WkNmIPX>$~PhpgUnioM(V!Wj~)F0iY)58Mk1x;8R0 zVip;x$;EvOx;&B@2eYibV5Li`?o+K&<(}BXT%n~U$mOiEGBeH!QYkyjA4*F*1k`zx z+dZ6}qdL6J(IyeWVVNNey?Zi)_15%@i`yPdt^^Rk%Y)7sm8bn&M`E>KSQc6uj+x9V;>J6dFxUM zN%g=&nv^bY^+#hHr>dxt!}=C{QiC=_#g>SJWIPHLwNvHxZgBof0?#lm7VJr<9e)kk zcKTQAEwuUfbF9C=e@^20A@`uYAqY#*O=X534&vv>_}HxZ0hu+vn%=WJG`Ucim{nVFsGK6qDK6T5m@eB&$D>0yR6%f-;E# zm5)k{Hr9O8FufyFqUZ2mJ^6h8R!5J1vN!M^tthlCxB4DwX=%ypdgs^p_!)9lq@CH= z)+!8%0Y@$sC$@)utA$AVl z6kaR0yV#pO4CvmIIM=?mm7eWfQCM7j-VbQyf{)ieP_oy1%bn%_$Fn~#2o)pZGCvDB z7FW?Y3J<>DRw@1(H@J9bh4=f9Jh>P2qiyW&0UlkBS(m)A?twt?^o?m5mwTA#)B5L` zNTKQ{2rCDd5g9JwsZm$kQdQS~&_lxacD~VGM0RKV$NYj$S;p)FUdq#{Mu9I@CK7I~ ztbZwexrC>O*Vvq3>!(J=7o;S`U$*HVW7pmtZ>DWjqFw3B81zaNmR1C#kz-Luo2rM4 z+3*!Iah}(9=GW-xEfu@@nM;xP|GEB0N3jbx9}rht;LWYQ49>Hyj0et+@B3T*Z+7H_ zo$nOFmD3B%&vgQ9(O1hb9z#X?f%_Y_iE`B*K0YNDb+2iX;oI0-5DJgr@8{STGuIfk znJQu?!0Te9L*>flP@3hN!<9;{FZ9Fps@DH$TaK3=C80)YQ`^kktG&S=k8$_tH;kMo+@ zJ)`NIZVuWvafdbCewXvHQ)`1PdsE1U_ z5ptE?fA6jiXQiu7|32H_-{1U<<`Mzb)8t18`mKx<2wP|&TAYQDb*Y3YFrj0n*w1zVNY{e(l6u2kG8O;me()RZ* z54#REAh5=7Z)7#oX%UC}69`XWbXhn#aet0uH8wWR*TXh^P~RjW0??~1_{;Xyr+}RZ z1e@>PDVutx6ut-B!6SFLBKJnDw+6Sfva)y$W%OZJuDH-@P50h<=Avz&ymx@}!O<6I zGp35I9dZ)l8=F;HXJK+a%%gZ~4TGkAKh$iXoi@4Xi=eX5ZmHDNeFov%Q7QfC#fRdtOIkQyaGw0f^;8V z2sPeyoYLGiHuG88QA&YYQ^f-PbD&X6(&5_r#?^F#%a2`%G=l-#6*Yh62j6ziCaI;r z$WGk6q^zv?G&k3bpVvw6!N8TB*RRHfmj?dW`5ymvwV0?B@eaQGds~+Bx>@#Ev-v;# z@eS*b!Bq}ch~UG#gWX=0s@?SQuSK-^2pMDQ)6-!%7sPWk)48*M3nzCcCMJ$x@dp;p z!5_2gX!FQaz`*ngm_J3xi{ab?znL9o*ERT1hCb7BVN}gop*v@U&rHmtPy$6?hA z{0t+Nl^Ww8wJ-SG2x~7ZwhFE57E0dl7?L+fzdau7Kp<6&9^F+`@fQ;5xyhLfZo4eA z&8q)K=v-P^`hmgFuIoPK@qm-MS>lp49_>hFl_F%I-nCqt;Wg4_R=ujXr192Z!_d?X zlk>JV+f;Ffx^`5RfWL~k*vLhWAFMcv0|!f*L;-nofau02XG;* zA%E1e!3EmWcU@HpYYtpSSnC^q+~~o9lTMc!w)(4@=^SL^8`hLzK9GuhL*nGnVRK3Uk-BCKAZs-HucUw%WHvI+SlV}#|LeL?M8aE+f@Pffrm6zW^LIct|ui30zSSnqE9aViiJf86e9zho% zWRCTJp!D#3aA?n1F@81#{;18Fz6`N=a%$A8iGg=kzHl#>sA0-zYzk96GQuYscMet+ z1ITo*ONGw!i6<(7mOg*VuKLDyU7y#S7Z;Z45`GxDZvd8>Tecnr^1$TGq^jC0+K8VM zFVF|srOO?C5~R#5Q1Sl08pf>@+=DdEAgyI9cHdsh^&W10~U-P^Xm8A z-m2^0h<6#9zELL(!;b#HZ6K}Fe5OC{1IMWVlp>t>`;7_L!}!Oe)0fN=G4O!@$HKN8 z`$qV?PUVYUh!hNykL<0gw+7-_!nVP!PB5{>-rbhRO$4aEW=1OG2wL{}--Wsil{ z@srV6+_B)QUKfuFG@x0Viriv-xij1u@p-j-1D>ApZ%3$(uchi8K$3F&8YDWUFx#RK zRf*JvvV)kHXGNs&Ro+>bH6QMqKE1Vh9iq-YWBunuFhuQ+U%k2IwVAnGW>l^v((B}$ zgyo$U67k(xy{?Pms;JQ45wDN`wp44%HDrTOk52d!=W*q1dL9$I@idCi^8OO&Jnhya z4(8J-?q>rvC=I|PWp#D1%F)qr?0$;Fbp~qB;fd(Qx}L9;6uKM>LuS59nqQ)jUHaQ2 z1tfYPQcK&m<(aFtHP~TQSLN^ijAQ|zpU^*SGzGh!8!315uaC{X>u>?4MdDn{P4Tht zW{t~)2IGJ2W#=B;oi_g zDkWrsBXMEtiZ0?{*z0`M{N^m~gC1#p4a-O?2?t)ydUiaB4!W>UmIrpiZ z(X%N#m(!E6s+W$*qxqX+`FG{9l_yFxrH@V92KM?en|*7wjSz4n^Xy}*-(4D(dL!T3 zeTB345;e;23ztt!gCFa=%kxog;%~|{C!fTIrh#J^Eg=_3b&%EsR^?sF!28K5(GJg5wJ_I#gz_+Xdm zeGOaKjYB;4b2N*jFX5>>@_Z)eUD)Wi(aVV}ZBZ6be+3Oc(f1s3Ght`Rtd|^Z#5%8$Y|N0wh z_xt$cZ=Ym|n3XfkG1|0`8+d9SI{(2>vEF+gz8?<;N>tmPIcZOyeKhjV{q{PDNtRhD zTvOEf!apqBNZ>dRy#qZSbDBLPHTgMFE&u&A4Ww~thHFKY->@AV!^FiS3U<&xsbF}c z*;EaBE=}6AwrbiIQI(36XhGbT)w%?I{I0?-0V<4oC?~rB#HNS4D|m8MO1@hB<3|Kbt<>aW?O#!6Mya30+%zbpWa8^sUY^9@^#QNYCF>kUCnE{`BCC5cm<+Y zRXBDF{EkUhu669)Q|S8;&Amtfo54Tm*XVZ%kuR9Al;McMs?|bCb|^Ga^#SC0W2RLsD1zPVGBV-1pDMN;Lmgow&_DK zI^}DZm?J*+E=;d9EtKoxABLxNes)z5?Gz{$BYjr20`U2OHh=4YZSeGLX;R|q7m6zB zH6`SUY=SmW4KdNOJ$n5p-oo+|G5lc@4j>0Qh^C3rL;~j}T@D}9rjEYSE#54xyD;B8 zcxAaxXgM`|bV?5lEdc!HTv)H#>5IaOz)qcWGnnkD&wK&9aFsz+#tSsKXIr7v7l;P( zyn7t$9`9G9*Y#0Z=6;nYAV+|Dym10v>((B6|omo>`NAs2)3$R

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig b/bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..50b414d2 --- /dev/null +++ b/bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = bloc_flutter_sample + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/bloc_flutter/macos/Runner/Configs/Debug.xcconfig b/bloc_flutter/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/bloc_flutter/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/bloc_flutter/macos/Runner/Configs/Release.xcconfig b/bloc_flutter/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/bloc_flutter/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/bloc_flutter/macos/Runner/Configs/Warnings.xcconfig b/bloc_flutter/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/bloc_flutter/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/bloc_flutter/macos/Runner/DebugProfile.entitlements b/bloc_flutter/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/bloc_flutter/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/bloc_flutter/macos/Runner/Info.plist b/bloc_flutter/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/bloc_flutter/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/bloc_flutter/macos/Runner/MainFlutterWindow.swift b/bloc_flutter/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/bloc_flutter/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/bloc_flutter/macos/Runner/Release.entitlements b/bloc_flutter/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/bloc_flutter/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/bloc_flutter/macos/RunnerTests/RunnerTests.swift b/bloc_flutter/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/bloc_flutter/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/bloc_flutter/pubspec.yaml b/bloc_flutter/pubspec.yaml index 559b2d60..13e379fa 100644 --- a/bloc_flutter/pubspec.yaml +++ b/bloc_flutter/pubspec.yaml @@ -12,33 +12,34 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: "none" environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ^3.9.0 dependencies: flutter: sdk: flutter - todos_repository_local_storage: - path: ../todos_repository_local_storage - firebase_flutter_repository: - path: ../firebase_flutter_repository todos_app_core: path: ../todos_app_core + todos_repository_core: + path: ../todos_repository_core + todos_repository_local_storage: + path: ../todos_repository_local_storage blocs: path: ../blocs - rxdart: ^0.23.1 - key_value_store_flutter: - key_value_store_web: + rxdart: ^0.28.0 shared_preferences: dev_dependencies: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter test: mockito: + build_runner: integration_tests: path: ../integration_tests @@ -47,7 +48,6 @@ dev_dependencies: # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/bloc_flutter/test/home_screen_test.dart b/bloc_flutter/test/home_screen_test.dart new file mode 100644 index 00000000..55bcf018 --- /dev/null +++ b/bloc_flutter/test/home_screen_test.dart @@ -0,0 +1,171 @@ +import 'package:bloc_flutter_sample/anonymous_user_repository.dart'; +import 'package:bloc_flutter_sample/dependency_injection.dart'; +import 'package:bloc_flutter_sample/localization.dart'; +import 'package:bloc_flutter_sample/screens/home_screen.dart'; +import 'package:bloc_flutter_sample/widgets/todos_bloc_provider.dart'; +import 'package:blocs/blocs.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:todos_app_core/todos_app_core.dart'; +import 'package:todos_repository_core/todos_repository_core.dart'; + +import 'home_screen_test.mocks.dart'; + +@GenerateNiceMocks([MockSpec(), MockSpec()]) +void main() { + group('HomeScreen', () { + final todoListFinder = find.byKey(ArchSampleKeys.todoList); + final todoItem1Finder = find.byKey(ArchSampleKeys.todoItem('1')); + final todoItem2Finder = find.byKey(ArchSampleKeys.todoItem('2')); + final todoItem3Finder = find.byKey(ArchSampleKeys.todoItem('3')); + + testWidgets('should render loading indicator at first', (tester) async { + await tester.pumpWidget( + _TestWidget( + todosInteractor: MockTodosInteractor(), + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pump(Duration.zero); + + expect(find.byKey(ArchSampleKeys.todosLoading), findsOneWidget); + }); + + testWidgets('should display a list after loading todos', (tester) async { + final handle = tester.ensureSemantics(); + final interactor = MockTodosInteractor(); + + when( + interactor.todos, + ).thenAnswer((_) => Stream.fromIterable([_TestWidget._defaultTodos])); + + await tester.pumpWidget( + _TestWidget( + todosInteractor: interactor, + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pumpAndSettle(); + + final checkbox1 = find.descendant( + of: find.byKey(ArchSampleKeys.todoItemCheckbox('1')), + matching: find.byType(Focus), + ); + final checkbox2 = find.descendant( + of: find.byKey(ArchSampleKeys.todoItemCheckbox('2')), + matching: find.byType(Focus), + ); + final checkbox3 = find.descendant( + of: find.byKey(ArchSampleKeys.todoItemCheckbox('3')), + matching: find.byType(Focus), + ); + + expect(todoListFinder, findsOneWidget); + expect(todoItem1Finder, findsOneWidget); + expect(find.text('T1'), findsOneWidget); + expect(find.text('N1'), findsOneWidget); + expect(tester.getSemantics(checkbox1), isChecked(false)); + expect(todoItem2Finder, findsOneWidget); + expect(find.text('T2'), findsOneWidget); + expect(tester.getSemantics(checkbox2), isChecked(false)); + expect(todoItem3Finder, findsOneWidget); + expect(find.text('T3'), findsOneWidget); + expect(tester.getSemantics(checkbox3), isChecked(true)); + + handle.dispose(); + }); + + testWidgets('should remove todos using a dismissible', (tester) async { + final interactor = MockTodosInteractor(); + + when( + interactor.todos, + ).thenAnswer((_) => Stream.fromIterable([_TestWidget._defaultTodos])); + + await tester.pumpWidget( + _TestWidget( + todosInteractor: interactor, + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pumpAndSettle(); + await tester.drag(todoItem1Finder, Offset(-1000, 0)); + await tester.pumpAndSettle(Duration(seconds: 5)); + + expect(todoItem1Finder, findsNothing); + expect(todoItem2Finder, findsOneWidget); + expect(todoItem3Finder, findsOneWidget); + }); + + testWidgets('should display stats when switching tabs', (tester) async { + final interactor = MockTodosInteractor(); + + when( + interactor.todos, + ).thenAnswer((_) => Stream.fromIterable([_TestWidget._defaultTodos])); + + await tester.pumpWidget( + _TestWidget( + todosInteractor: interactor, + userRepository: AnonymousUserRepository(), + ), + ); + await tester.pumpAndSettle(); + await tester.tap(find.byKey(ArchSampleKeys.statsTab)); + await tester.pump(); + + expect(find.byKey(ArchSampleKeys.statsNumActive), findsOneWidget); + expect(find.byKey(ArchSampleKeys.statsNumActive), findsOneWidget); + }); + }); +} + +class _TestWidget extends StatelessWidget { + const _TestWidget({ + required this.todosInteractor, + required this.userRepository, + }); + + final TodosInteractor todosInteractor; + final UserRepository userRepository; + + @override + Widget build(BuildContext context) { + return Injector( + todosInteractor: todosInteractor, + userRepository: userRepository, + child: TodosBlocProvider( + bloc: TodosListBloc(todosInteractor), + child: MaterialApp( + localizationsDelegates: [ + BlocLocalizationsDelegate(), + ArchSampleLocalizationsDelegate(), + ], + home: HomeScreen(userRepository: userRepository), + ), + ), + ); + } + + static List get _defaultTodos { + return [ + Todo('T1', id: '1', note: 'N1'), + Todo('T2', id: '2'), + Todo('T3', id: '3', complete: true), + ]; + } +} + +Matcher isChecked(bool isChecked) { + return matchesSemantics( + isChecked: isChecked, + hasTapAction: true, + hasFocusAction: true, + hasCheckedState: true, + isFocusable: true, + hasEnabledState: true, + isEnabled: true, + ); +} diff --git a/bloc_flutter/test/home_screen_test.mocks.dart b/bloc_flutter/test/home_screen_test.mocks.dart new file mode 100644 index 00000000..2c51ada1 --- /dev/null +++ b/bloc_flutter/test/home_screen_test.mocks.dart @@ -0,0 +1,156 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in bloc_flutter_sample/test/home_screen_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:blocs/blocs.dart' as _i3; +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeUserEntity_1 extends _i1.SmartFake implements _i2.UserEntity { + _FakeUserEntity_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} + +/// A class which mocks [UserRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserRepository extends _i1.Mock implements _i2.UserRepository { + @override + _i4.Future<_i2.UserEntity> login() => + (super.noSuchMethod( + Invocation.method(#login, []), + returnValue: _i4.Future<_i2.UserEntity>.value( + _FakeUserEntity_1(this, Invocation.method(#login, [])), + ), + returnValueForMissingStub: _i4.Future<_i2.UserEntity>.value( + _FakeUserEntity_1(this, Invocation.method(#login, [])), + ), + ) + as _i4.Future<_i2.UserEntity>); +} diff --git a/bloc_flutter/test_driver/integration_test.dart b/bloc_flutter/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/bloc_flutter/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/bloc_flutter/test_driver/todo_app.dart b/bloc_flutter/test_driver/todo_app.dart deleted file mode 100644 index 15b09606..00000000 --- a/bloc_flutter/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:bloc_flutter_sample/main.dart' as app; -import 'package:flutter_driver/driver_extension.dart'; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/bloc_flutter/test_driver/todo_app_test.dart b/bloc_flutter/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/bloc_flutter/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/bloc_flutter/web/favicon.png b/bloc_flutter/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/bloc_flutter/web/icons/Icon-192.png b/bloc_flutter/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/bloc_flutter/web/icons/Icon-512.png b/bloc_flutter/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/bloc_flutter/web/icons/Icon-maskable-192.png b/bloc_flutter/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 zcmdT|`#%%j|KDb2V@0DPm$^(Lx5}lO%Yv(=e*7hl@QqKS50#~#^IQPxBmuh|i9sXnt4ch@VT0F7% zMtrs@KWIOo+QV@lSs66A>2pz6-`9Jk=0vv&u?)^F@HZ)-6HT=B7LF;rdj zskUyBfbojcX#CS>WrIWo9D=DIwcXM8=I5D{SGf$~=gh-$LwY?*)cD%38%sCc?5OsX z-XfkyL-1`VavZ?>(pI-xp-kYq=1hsnyP^TLb%0vKRSo^~r{x?ISLY1i7KjSp z*0h&jG(Rkkq2+G_6eS>n&6>&Xk+ngOMcYrk<8KrukQHzfx675^^s$~<@d$9X{VBbg z2Fd4Z%g`!-P}d#`?B4#S-9x*eNlOVRnDrn#jY@~$jfQ-~3Od;A;x-BI1BEDdvr`pI z#D)d)!2_`GiZOUu1crb!hqH=ezs0qk<_xDm_Kkw?r*?0C3|Io6>$!kyDl;eH=aqg$B zsH_|ZD?jP2dc=)|L>DZmGyYKa06~5?C2Lc0#D%62p(YS;%_DRCB1k(+eLGXVMe+=4 zkKiJ%!N6^mxqM=wq`0+yoE#VHF%R<{mMamR9o_1JH8jfnJ?NPLs$9U!9!dq8 z0B{dI2!M|sYGH&9TAY34OlpIsQ4i5bnbG>?cWwat1I13|r|_inLE?FS@Hxdxn_YZN z3jfUO*X9Q@?HZ>Q{W0z60!bbGh557XIKu1?)u|cf%go`pwo}CD=0tau-}t@R2OrSH zQzZr%JfYa`>2!g??76=GJ$%ECbQh7Q2wLRp9QoyiRHP7VE^>JHm>9EqR3<$Y=Z1K^SHuwxCy-5@z3 zVM{XNNm}yM*pRdLKp??+_2&!bp#`=(Lh1vR{~j%n;cJv~9lXeMv)@}Odta)RnK|6* zC+IVSWumLo%{6bLDpn)Gz>6r&;Qs0^+Sz_yx_KNz9Dlt^ax`4>;EWrIT#(lJ_40<= z750fHZ7hI{}%%5`;lwkI4<_FJw@!U^vW;igL0k+mK)-j zYuCK#mCDK3F|SC}tC2>m$ZCqNB7ac-0UFBJ|8RxmG@4a4qdjvMzzS&h9pQmu^x&*= zGvapd1#K%Da&)8f?<9WN`2H^qpd@{7In6DNM&916TRqtF4;3`R|Nhwbw=(4|^Io@T zIjoR?tB8d*sO>PX4vaIHF|W;WVl6L1JvSmStgnRQq zTX4(>1f^5QOAH{=18Q2Vc1JI{V=yOr7yZJf4Vpfo zeHXdhBe{PyY;)yF;=ycMW@Kb>t;yE>;f79~AlJ8k`xWucCxJfsXf2P72bAavWL1G#W z;o%kdH(mYCM{$~yw4({KatNGim49O2HY6O07$B`*K7}MvgI=4x=SKdKVb8C$eJseA$tmSFOztFd*3W`J`yIB_~}k%Sd_bPBK8LxH)?8#jM{^%J_0|L z!gFI|68)G}ex5`Xh{5pB%GtlJ{Z5em*e0sH+sU1UVl7<5%Bq+YrHWL7?X?3LBi1R@_)F-_OqI1Zv`L zb6^Lq#H^2@d_(Z4E6xA9Z4o3kvf78ZDz!5W1#Mp|E;rvJz&4qj2pXVxKB8Vg0}ek%4erou@QM&2t7Cn5GwYqy%{>jI z)4;3SAgqVi#b{kqX#$Mt6L8NhZYgonb7>+r#BHje)bvaZ2c0nAvrN3gez+dNXaV;A zmyR0z@9h4@6~rJik-=2M-T+d`t&@YWhsoP_XP-NsVO}wmo!nR~QVWU?nVlQjNfgcTzE-PkfIX5G z1?&MwaeuzhF=u)X%Vpg_e@>d2yZwxl6-r3OMqDn8_6m^4z3zG##cK0Fsgq8fcvmhu z{73jseR%X%$85H^jRAcrhd&k!i^xL9FrS7qw2$&gwAS8AfAk#g_E_tP;x66fS`Mn@SNVrcn_N;EQm z`Mt3Z%rw%hDqTH-s~6SrIL$hIPKL5^7ejkLTBr46;pHTQDdoErS(B>``t;+1+M zvU&Se9@T_BeK;A^p|n^krIR+6rH~BjvRIugf`&EuX9u69`9C?9ANVL8l(rY6#mu^i z=*5Q)-%o*tWl`#b8p*ZH0I}hn#gV%|jt6V_JanDGuekR*-wF`u;amTCpGG|1;4A5$ zYbHF{?G1vv5;8Ph5%kEW)t|am2_4ik!`7q{ymfHoe^Z99c|$;FAL+NbxE-_zheYbV z3hb0`uZGTsgA5TG(X|GVDSJyJxsyR7V5PS_WSnYgwc_D60m7u*x4b2D79r5UgtL18 zcCHWk+K6N1Pg2c;0#r-)XpwGX?|Iv)^CLWqwF=a}fXUSM?n6E;cCeW5ER^om#{)Jr zJR81pkK?VoFm@N-s%hd7@hBS0xuCD0-UDVLDDkl7Ck=BAj*^ps`393}AJ+Ruq@fl9 z%R(&?5Nc3lnEKGaYMLmRzKXow1+Gh|O-LG7XiNxkG^uyv zpAtLINwMK}IWK65hOw&O>~EJ}x@lDBtB`yKeV1%GtY4PzT%@~wa1VgZn7QRwc7C)_ zpEF~upeDRg_<#w=dLQ)E?AzXUQpbKXYxkp>;c@aOr6A|dHA?KaZkL0svwB^U#zmx0 zzW4^&G!w7YeRxt<9;d@8H=u(j{6+Uj5AuTluvZZD4b+#+6Rp?(yJ`BC9EW9!b&KdPvzJYe5l7 zMJ9aC@S;sA0{F0XyVY{}FzW0Vh)0mPf_BX82E+CD&)wf2!x@{RO~XBYu80TONl3e+ zA7W$ra6LcDW_j4s-`3tI^VhG*sa5lLc+V6ONf=hO@q4|p`CinYqk1Ko*MbZ6_M05k zSwSwkvu;`|I*_Vl=zPd|dVD0lh&Ha)CSJJvV{AEdF{^Kn_Yfsd!{Pc1GNgw}(^~%)jk5~0L~ms|Rez1fiK~s5t(p1ci5Gq$JC#^JrXf?8 z-Y-Zi_Hvi>oBzV8DSRG!7dm|%IlZg3^0{5~;>)8-+Nk&EhAd(}s^7%MuU}lphNW9Q zT)DPo(ob{tB7_?u;4-qGDo!sh&7gHaJfkh43QwL|bbFVi@+oy;i;M zM&CP^v~lx1U`pi9PmSr&Mc<%HAq0DGH?Ft95)WY`P?~7O z`O^Nr{Py9M#Ls4Y7OM?e%Y*Mvrme%=DwQaye^Qut_1pOMrg^!5u(f9p(D%MR%1K>% zRGw%=dYvw@)o}Fw@tOtPjz`45mfpn;OT&V(;z75J*<$52{sB65$gDjwX3Xa!x_wE- z!#RpwHM#WrO*|~f7z}(}o7US(+0FYLM}6de>gQdtPazXz?OcNv4R^oYLJ_BQOd_l172oSK$6!1r@g+B@0ofJ4*{>_AIxfe-#xp>(1 z@Y3Nfd>fmqvjL;?+DmZk*KsfXJf<%~(gcLwEez%>1c6XSboURUh&k=B)MS>6kw9bY z{7vdev7;A}5fy*ZE23DS{J?8at~xwVk`pEwP5^k?XMQ7u64;KmFJ#POzdG#np~F&H ze-BUh@g54)dsS%nkBb}+GuUEKU~pHcYIg4vSo$J(J|U36bs0Use+3A&IMcR%6@jv$ z=+QI+@wW@?iu}Hpyzlvj-EYeop{f65GX0O%>w#0t|V z1-svWk`hU~m`|O$kw5?Yn5UhI%9P-<45A(v0ld1n+%Ziq&TVpBcV9n}L9Tus-TI)f zd_(g+nYCDR@+wYNQm1GwxhUN4tGMLCzDzPqY$~`l<47{+l<{FZ$L6(>J)|}!bi<)| zE35dl{a2)&leQ@LlDxLQOfUDS`;+ZQ4ozrleQwaR-K|@9T{#hB5Z^t#8 zC-d_G;B4;F#8A2EBL58s$zF-=SCr`P#z zNCTnHF&|X@q>SkAoYu>&s9v@zCpv9lLSH-UZzfhJh`EZA{X#%nqw@@aW^vPcfQrlPs(qQxmC|4tp^&sHy!H!2FH5eC{M@g;ElWNzlb-+ zxpfc0m4<}L){4|RZ>KReag2j%Ot_UKkgpJN!7Y_y3;Ssz{9 z!K3isRtaFtQII5^6}cm9RZd5nTp9psk&u1C(BY`(_tolBwzV_@0F*m%3G%Y?2utyS zY`xM0iDRT)yTyYukFeGQ&W@ReM+ADG1xu@ruq&^GK35`+2r}b^V!m1(VgH|QhIPDE X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/bloc_flutter/web/icons/Icon-maskable-512.png b/bloc_flutter/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/bloc_flutter/web/index.html b/bloc_flutter/web/index.html index f99ea3a2..f9cba26a 100644 --- a/bloc_flutter/web/index.html +++ b/bloc_flutter/web/index.html @@ -1,10 +1,38 @@ + + + - bloc_flutter + + + + + + + + + + + + + bloc_flutter_sample + - + diff --git a/bloc_flutter/web/manifest.json b/bloc_flutter/web/manifest.json new file mode 100644 index 00000000..f6c0c9b8 --- /dev/null +++ b/bloc_flutter/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "bloc_flutter_sample", + "short_name": "bloc_flutter_sample", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/bloc_flutter/windows/.gitignore b/bloc_flutter/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/bloc_flutter/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/bloc_flutter/windows/CMakeLists.txt b/bloc_flutter/windows/CMakeLists.txt new file mode 100644 index 00000000..7dd441e9 --- /dev/null +++ b/bloc_flutter/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(bloc_flutter_sample LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "bloc_flutter_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/bloc_flutter/windows/flutter/CMakeLists.txt b/bloc_flutter/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/bloc_flutter/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/bloc_flutter/windows/flutter/generated_plugin_registrant.cc b/bloc_flutter/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/bloc_flutter/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/bloc_flutter/windows/flutter/generated_plugin_registrant.h b/bloc_flutter/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/bloc_flutter/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/bloc_flutter/windows/flutter/generated_plugins.cmake b/bloc_flutter/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/bloc_flutter/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/bloc_flutter/windows/runner/CMakeLists.txt b/bloc_flutter/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/bloc_flutter/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/bloc_flutter/windows/runner/Runner.rc b/bloc_flutter/windows/runner/Runner.rc new file mode 100644 index 00000000..aa6f7091 --- /dev/null +++ b/bloc_flutter/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "bloc_flutter_sample" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "bloc_flutter_sample" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "bloc_flutter_sample.exe" "\0" + VALUE "ProductName", "bloc_flutter_sample" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/bloc_flutter/windows/runner/flutter_window.cpp b/bloc_flutter/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/bloc_flutter/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/bloc_flutter/windows/runner/flutter_window.h b/bloc_flutter/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/bloc_flutter/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/bloc_flutter/windows/runner/main.cpp b/bloc_flutter/windows/runner/main.cpp new file mode 100644 index 00000000..a26af59f --- /dev/null +++ b/bloc_flutter/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"bloc_flutter_sample", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/bloc_flutter/windows/runner/resource.h b/bloc_flutter/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/bloc_flutter/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/bloc_flutter/windows/runner/resources/app_icon.ico b/bloc_flutter/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/bloc_flutter/windows/runner/runner.exe.manifest b/bloc_flutter/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/bloc_flutter/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/bloc_flutter/windows/runner/utils.cpp b/bloc_flutter/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/bloc_flutter/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/bloc_flutter/windows/runner/utils.h b/bloc_flutter/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/bloc_flutter/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/bloc_flutter/windows/runner/win32_window.cpp b/bloc_flutter/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/bloc_flutter/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/bloc_flutter/windows/runner/win32_window.h b/bloc_flutter/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/bloc_flutter/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/blocs/analysis_options.yaml b/blocs/analysis_options.yaml index 97d4b470..f798e77a 100644 --- a/blocs/analysis_options.yaml +++ b/blocs/analysis_options.yaml @@ -1,14 +1,32 @@ +# This file configures the static analysis results for your project (errors, +# warnings, and lints). +# +# This enables the 'recommended' set of lints from `package:lints`. +# This set helps identify many issues that may lead to problems when running +# or consuming Dart code, and enforces writing Dart using a single, idiomatic +# style and format. +# +# If you want a smaller set of lints you can change this to specify +# 'package:lints/core.yaml'. These are just the most critical lints +# (the recommended set includes the core lints). +# The core lints are also what is used by pub.dev for scoring packages. + +include: package:lints/recommended.yaml + +# Uncomment the following section to specify additional rules. + analyzer: -# exclude: -# - path/to/excluded/files/** - -# Lint rules and documentation, see http://dart-lang.github.io/linter/lints -linter: - rules: - - cancel_subscriptions - - hash_and_equals - - iterable_contains_unrelated_type - - list_remove_unrelated_type - - test_types_in_equals - - unrelated_type_equality_checks - - valid_regexps + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +# linter: +# rules: +# - camel_case_types + +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/blocs/lib/src/models/todo.dart b/blocs/lib/src/models/todo.dart index 2fb74732..42da5d40 100644 --- a/blocs/lib/src/models/todo.dart +++ b/blocs/lib/src/models/todo.dart @@ -9,11 +9,10 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, String note = '', String id}) - : this.note = note ?? '', - this.id = id ?? Uuid().generateV4(); + Todo(this.task, {this.complete = false, this.note = '', String? id}) + : id = id ?? Uuid().generateV4(); - Todo copyWith({bool complete, String id, String note, String task}) { + Todo copyWith({bool? complete, String? id, String? note, String? task}) { return Todo( task ?? this.task, complete: complete ?? this.complete, @@ -48,9 +47,9 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, - id: entity.id ?? Uuid().generateV4(), + id: entity.id, ); } } diff --git a/blocs/lib/src/todos_interactor.dart b/blocs/lib/src/todos_interactor.dart index 12bd2bdb..335c0bfc 100644 --- a/blocs/lib/src/todos_interactor.dart +++ b/blocs/lib/src/todos_interactor.dart @@ -1,6 +1,8 @@ import 'dart:async'; import 'package:blocs/blocs.dart'; +import 'package:collection/collection.dart'; +import 'package:rxdart/rxdart.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; class TodosInteractor { @@ -16,10 +18,8 @@ class TodosInteractor { Stream todo(String id) { return todos - .map((todos) { - return todos.firstWhere((todo) => todo.id == id, orElse: () => null); - }) - .where((todo) => todo != null); + .map((todos) => todos.firstWhereOrNull((todo) => todo.id == id)) + .whereNotNull(); } Stream get allComplete => todos.map(_allComplete); diff --git a/blocs/lib/src/todos_list_bloc.dart b/blocs/lib/src/todos_list_bloc.dart index 10e3eccb..adc6dbc4 100644 --- a/blocs/lib/src/todos_list_bloc.dart +++ b/blocs/lib/src/todos_list_bloc.dart @@ -109,7 +109,6 @@ class TodosListBloc { case VisibilityFilter.completed: return todo.complete; case VisibilityFilter.all: - default: return true; } }).toList(); diff --git a/blocs/pubspec.yaml b/blocs/pubspec.yaml index c726bd9c..1d0529d4 100644 --- a/blocs/pubspec.yaml +++ b/blocs/pubspec.yaml @@ -1,14 +1,20 @@ name: blocs description: The Business Logic Components for a Todo App +version: 1.0.0 +publish_to: "none" environment: - sdk: '>=2.0.0-dev.28.0 <3.0.0' + sdk: ^3.9.0 dependencies: + collection: ^1.15.0 + meta: ^1.15.0 + rxdart: ^0.28.0 todos_repository_core: path: ../todos_repository_core - rxdart: ^0.23.1 dev_dependencies: - test: - mockito: + build_runner: ^2.4.13 + lints: ^6.0.0 + test: ^1.25.6 + mockito: ^5.5.0 diff --git a/blocs/test/all_tests.dart b/blocs/test/all_tests.dart deleted file mode 100644 index 416b9d98..00000000 --- a/blocs/test/all_tests.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'stats_bloc_test.dart' as statsBloc; -import 'todo_bloc_test.dart' as todoBloc; -import 'todos_bloc_test.dart' as todosBloc; -import 'todos_interactor_test.dart' as todosInteractor; - -void main() { - statsBloc.main(); - todoBloc.main(); - todosBloc.main(); - todosInteractor.main(); -} diff --git a/blocs/test/stats_bloc_test.dart b/blocs/test/stats_bloc_test.dart index dd51fe00..0d00e2bc 100644 --- a/blocs/test/stats_bloc_test.dart +++ b/blocs/test/stats_bloc_test.dart @@ -1,10 +1,12 @@ import 'package:blocs/blocs.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:rxdart/rxdart.dart'; import 'package:test/test.dart'; -class MockTodosInteractor extends Mock implements TodosInteractor {} +import 'stats_bloc_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('StatsBloc', () { test('should stream the number of active todos', () { diff --git a/blocs/test/stats_bloc_test.mocks.dart b/blocs/test/stats_bloc_test.mocks.dart new file mode 100644 index 00000000..85763905 --- /dev/null +++ b/blocs/test/stats_bloc_test.mocks.dart @@ -0,0 +1,134 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in blocs/test/stats_bloc_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:blocs/blocs.dart' as _i3; +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} diff --git a/blocs/test/todo_bloc_test.dart b/blocs/test/todo_bloc_test.dart index a545df1f..b81621c7 100644 --- a/blocs/test/todo_bloc_test.dart +++ b/blocs/test/todo_bloc_test.dart @@ -2,11 +2,13 @@ import 'dart:async'; import 'package:blocs/blocs.dart'; import 'package:blocs/src/models/models.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -class MockTodosInteractor extends Mock implements TodosInteractor {} +import 'todo_bloc_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('TodoBloc', () { test('should get the todo from the interactor', () { diff --git a/blocs/test/todo_bloc_test.mocks.dart b/blocs/test/todo_bloc_test.mocks.dart new file mode 100644 index 00000000..26f0615a --- /dev/null +++ b/blocs/test/todo_bloc_test.mocks.dart @@ -0,0 +1,134 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in blocs/test/todo_bloc_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:blocs/blocs.dart' as _i3; +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i4.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i4.Stream>.empty(), + returnValueForMissingStub: _i4.Stream>.empty(), + ) + as _i4.Stream>); + + @override + _i4.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i4.Stream.empty(), + returnValueForMissingStub: _i4.Stream.empty(), + ) + as _i4.Stream); + + @override + _i4.Stream<_i3.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i4.Stream<_i3.Todo>.empty(), + returnValueForMissingStub: _i4.Stream<_i3.Todo>.empty(), + ) + as _i4.Stream<_i3.Todo>); + + @override + _i4.Future updateTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future addNewTodo(_i3.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + + @override + _i4.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value( + [], + ), + ) + as _i4.Future>); +} diff --git a/blocs/test/todos_bloc_test.dart b/blocs/test/todos_bloc_test.dart index ec516124..24ef4fb7 100644 --- a/blocs/test/todos_bloc_test.dart +++ b/blocs/test/todos_bloc_test.dart @@ -1,20 +1,21 @@ import 'dart:async'; import 'package:blocs/blocs.dart'; -import 'package:blocs/src/models/models.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class MockReactiveTodosRepository extends Mock - implements ReactiveTodosRepository {} - -class MockTodosListInteractor extends Mock implements TodosInteractor {} +import 'todos_bloc_test.mocks.dart'; +@GenerateNiceMocks([ + MockSpec(), + MockSpec(), +]) void main() { group('TodosListBloc', () { test('should display all todos by default', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final todos = [Todo('Hallo')]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); @@ -25,47 +26,32 @@ void main() { }); test('should display completed todos', () { - final interactor = MockTodosListInteractor(); - final todos = [ - Todo('Hallo'), - Todo('Friend', complete: true), - ]; + final interactor = MockTodosInteractor(); + final todos = [Todo('Hallo'), Todo('Friend', complete: true)]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); final bloc = TodosListBloc(interactor); bloc.updateFilter.add(VisibilityFilter.completed); - expect( - bloc.visibleTodos, - emitsThrough([todos.last]), - ); + expect(bloc.visibleTodos, emitsThrough([todos.last])); }); test('should display active todos', () { - final interactor = MockTodosListInteractor(); - final todos = [ - Todo('Hallo'), - Todo('Friend', complete: true), - ]; + final interactor = MockTodosInteractor(); + final todos = [Todo('Hallo'), Todo('Friend', complete: true)]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); final bloc = TodosListBloc(interactor); bloc.updateFilter.add(VisibilityFilter.active); - expect( - bloc.visibleTodos, - emitsThrough([todos.first]), - ); + expect(bloc.visibleTodos, emitsThrough([todos.first])); }); test('should stream the current visibility filter', () { - final interactor = MockTodosListInteractor(); - final todos = [ - Todo('Hallo'), - Todo('Friend', complete: true), - ]; + final interactor = MockTodosInteractor(); + final todos = [Todo('Hallo'), Todo('Friend', complete: true)]; when(interactor.todos).thenAnswer((_) => Stream.fromIterable([todos])); @@ -73,19 +59,18 @@ void main() { bloc.updateFilter.add(VisibilityFilter.completed); - expect( - bloc.activeFilter, - emits(VisibilityFilter.completed), - ); + expect(bloc.activeFilter, emits(VisibilityFilter.completed)); }); test('allComplete should stream from the interactor', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); - when(interactor.allComplete) - .thenAnswer((_) => Stream.fromIterable([false])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.allComplete, + ).thenAnswer((_) => Stream.fromIterable([false])); final bloc = TodosListBloc(interactor); @@ -93,12 +78,14 @@ void main() { }); test('hasCompletedTodos should stream from the interactor', () { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); - when(interactor.hasCompletedTodos) - .thenAnswer((_) => Stream.fromIterable([true])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.hasCompletedTodos, + ).thenAnswer((_) => Stream.fromIterable([true])); final bloc = TodosListBloc(interactor); @@ -106,12 +93,14 @@ void main() { }); test('should add todos to the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); final todo = Todo('AddMe'); - when(interactor.todos).thenAnswer((_) => Stream.fromIterable([ - [todo] - ])); + when(interactor.todos).thenAnswer( + (_) => Stream.fromIterable([ + [todo], + ]), + ); when(interactor.addNewTodo(todo)).thenAnswer((_) => Future.value()); final bloc = TodosListBloc(interactor); @@ -121,10 +110,11 @@ void main() { }); test('should send deletions to the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); when(interactor.deleteTodo('1')).thenAnswer((_) => Future.value()); final bloc = TodosListBloc(interactor); @@ -134,10 +124,11 @@ void main() { }); test('should remove completed todos from the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); when(interactor.clearCompleted(null)).thenAnswer((_) => Future.value()); final bloc = TodosListBloc(interactor); @@ -147,12 +138,12 @@ void main() { }); test('should toggle all with the interactor', () async { - final interactor = MockTodosListInteractor(); + final interactor = MockTodosInteractor(); - when(interactor.todos) - .thenAnswer((_) => Stream>.fromIterable([[]])); - when(interactor.toggleAll(null)) - .thenAnswer((_) => Future>.value()); + when( + interactor.todos, + ).thenAnswer((_) => Stream>.fromIterable([[]])); + when(interactor.toggleAll(null)).thenAnswer((_) async => []); final bloc = TodosListBloc(interactor); bloc.toggleAll.add(null); diff --git a/blocs/test/todos_bloc_test.mocks.dart b/blocs/test/todos_bloc_test.mocks.dart new file mode 100644 index 00000000..be89dd87 --- /dev/null +++ b/blocs/test/todos_bloc_test.mocks.dart @@ -0,0 +1,177 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in blocs/test/todos_bloc_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:blocs/blocs.dart' as _i5; +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; +import 'package:todos_repository_core/todos_repository_core.dart' as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +class _FakeReactiveTodosRepository_0 extends _i1.SmartFake + implements _i2.ReactiveTodosRepository { + _FakeReactiveTodosRepository_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [ReactiveTodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockReactiveTodosRepository extends _i1.Mock + implements _i2.ReactiveTodosRepository { + @override + _i3.Future addNewTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(List? idList) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [idList]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Stream> todos() => + (super.noSuchMethod( + Invocation.method(#todos, []), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Future updateTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} + +/// A class which mocks [TodosInteractor]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockTodosInteractor extends _i1.Mock implements _i5.TodosInteractor { + @override + _i2.ReactiveTodosRepository get repository => + (super.noSuchMethod( + Invocation.getter(#repository), + returnValue: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + returnValueForMissingStub: _FakeReactiveTodosRepository_0( + this, + Invocation.getter(#repository), + ), + ) + as _i2.ReactiveTodosRepository); + + @override + _i3.Stream> get todos => + (super.noSuchMethod( + Invocation.getter(#todos), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Stream get allComplete => + (super.noSuchMethod( + Invocation.getter(#allComplete), + returnValue: _i3.Stream.empty(), + returnValueForMissingStub: _i3.Stream.empty(), + ) + as _i3.Stream); + + @override + _i3.Stream get hasCompletedTodos => + (super.noSuchMethod( + Invocation.getter(#hasCompletedTodos), + returnValue: _i3.Stream.empty(), + returnValueForMissingStub: _i3.Stream.empty(), + ) + as _i3.Stream); + + @override + _i3.Stream<_i5.Todo> todo(String? id) => + (super.noSuchMethod( + Invocation.method(#todo, [id]), + returnValue: _i3.Stream<_i5.Todo>.empty(), + returnValueForMissingStub: _i3.Stream<_i5.Todo>.empty(), + ) + as _i3.Stream<_i5.Todo>); + + @override + _i3.Future updateTodo(_i5.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future addNewTodo(_i5.Todo? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(String? id) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [id]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future clearCompleted([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#clearCompleted, [_0]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future> toggleAll([dynamic _0]) => + (super.noSuchMethod( + Invocation.method(#toggleAll, [_0]), + returnValue: _i3.Future>.value([]), + returnValueForMissingStub: _i3.Future>.value( + [], + ), + ) + as _i3.Future>); +} diff --git a/blocs/test/todos_interactor_test.dart b/blocs/test/todos_interactor_test.dart index 8c8a7cea..d4603b3b 100644 --- a/blocs/test/todos_interactor_test.dart +++ b/blocs/test/todos_interactor_test.dart @@ -1,14 +1,15 @@ import 'dart:async'; import 'package:blocs/blocs.dart'; +import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:rxdart/rxdart.dart'; import 'package:test/test.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; -class MockReactiveTodosRepository extends Mock - implements ReactiveTodosRepository {} +import 'todos_interactor_test.mocks.dart'; +@GenerateNiceMocks([MockSpec()]) void main() { group('TodosListInteractor', () { test('should convert repo entities into Todos', () { diff --git a/blocs/test/todos_interactor_test.mocks.dart b/blocs/test/todos_interactor_test.mocks.dart new file mode 100644 index 00000000..28248e98 --- /dev/null +++ b/blocs/test/todos_interactor_test.mocks.dart @@ -0,0 +1,67 @@ +// Mocks generated by Mockito 5.4.6 from annotations +// in blocs/test/todos_interactor_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:todos_repository_core/src/reactive_repository.dart' as _i2; +import 'package:todos_repository_core/src/todo_entity.dart' as _i4; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class +// ignore_for_file: invalid_use_of_internal_member + +/// A class which mocks [ReactiveTodosRepository]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockReactiveTodosRepository extends _i1.Mock + implements _i2.ReactiveTodosRepository { + @override + _i3.Future addNewTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#addNewTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Future deleteTodo(List? idList) => + (super.noSuchMethod( + Invocation.method(#deleteTodo, [idList]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); + + @override + _i3.Stream> todos() => + (super.noSuchMethod( + Invocation.method(#todos, []), + returnValue: _i3.Stream>.empty(), + returnValueForMissingStub: _i3.Stream>.empty(), + ) + as _i3.Stream>); + + @override + _i3.Future updateTodo(_i4.TodoEntity? todo) => + (super.noSuchMethod( + Invocation.method(#updateTodo, [todo]), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) + as _i3.Future); +} diff --git a/vanilla/lib/widgets/filter_button.dart b/vanilla/lib/widgets/filter_button.dart index 60198ba5..8289a589 100644 --- a/vanilla/lib/widgets/filter_button.dart +++ b/vanilla/lib/widgets/filter_button.dart @@ -16,8 +16,8 @@ class FilterButton extends StatelessWidget { @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.bodyMedium; - final activeStyle = Theme.of(context).textTheme.bodyMedium?.copyWith( + final defaultStyle = Theme.of(context).textTheme.bodyMedium!; + final activeStyle = defaultStyle.copyWith( color: Theme.of(context).colorScheme.secondary, ); final button = _Button( From bd7ab2053fcae6408e854e548ae6d5106aaab8e5 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 15:49:00 +0100 Subject: [PATCH 73/89] Final touches to bloc_flutter --- bloc_flutter/integration_test/app_test.dart | 2 +- bloc_flutter/lib/widgets/todo_item.dart | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bloc_flutter/integration_test/app_test.dart b/bloc_flutter/integration_test/app_test.dart index 8a44588c..26407e76 100644 --- a/bloc_flutter/integration_test/app_test.dart +++ b/bloc_flutter/integration_test/app_test.dart @@ -13,7 +13,7 @@ void main() { ReactiveLocalStorageRepository( repository: LocalStorageRepository( localStorage: KeyValueStorage( - 'simple_bloc_test_${DateTime.now().toIso8601String()}', + 'bloc_flutter_test_${DateTime.now().toIso8601String()}', await SharedPreferences.getInstance(), ), ), diff --git a/bloc_flutter/lib/widgets/todo_item.dart b/bloc_flutter/lib/widgets/todo_item.dart index 582c960b..69250885 100644 --- a/bloc_flutter/lib/widgets/todo_item.dart +++ b/bloc_flutter/lib/widgets/todo_item.dart @@ -9,6 +9,7 @@ class TodoItem extends StatelessWidget { final Todo todo; const TodoItem({ + super.key, required this.onDismissed, required this.onTap, required this.onCheckboxChanged, From 2ad9dd983f7cbf86ee1327385ced51bce85d5a00 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 15:49:14 +0100 Subject: [PATCH 74/89] Update freezed_provider_value_notifier --- freezed_provider_value_notifier/.metadata | 39 +- .../analysis_options.yaml | 34 + .../android/.gitignore | 7 + .../android/app/build.gradle | 67 -- .../android/app/build.gradle.kts | 44 + .../android/app/src/debug/AndroidManifest.xml | 6 +- .../android/app/src/main/AndroidManifest.xml | 32 +- .../MainActivity.kt | 12 - .../MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 12 +- .../app/src/profile/AndroidManifest.xml | 6 +- .../android/build.gradle | 31 - .../android/build.gradle.kts | 24 + .../android/gradle.properties | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../android/settings.gradle | 15 - .../android/settings.gradle.kts | 26 + .../integration_test/app_test.dart | 19 + .../ios/.gitignore | 2 + .../ios/Flutter/AppFrameworkInfo.plist | 4 +- .../ios/Flutter/Debug.xcconfig | 1 + .../ios/Flutter/Release.xcconfig | 1 + freezed_provider_value_notifier/ios/Podfile | 43 + .../ios/Runner.xcodeproj/project.pbxproj | 209 +++-- .../contents.xcworkspacedata | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 24 +- .../ios/Runner/AppDelegate.swift | 4 +- .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 1418 bytes .../ios/Runner/Info.plist | 8 +- .../ios/RunnerTests/RunnerTests.swift | 12 + .../lib/add_todo_screen.dart | 11 +- freezed_provider_value_notifier/lib/app.dart | 5 +- .../lib/details_screen.dart | 37 +- .../lib/edit_todo_screen.dart | 23 +- .../lib/home/extra_actions_button.dart | 2 +- .../lib/home/filter_button.dart | 11 +- .../lib/home/home_screen.dart | 26 +- .../lib/home/stats_view.dart | 3 +- .../lib/home/todo_list_view.dart | 6 +- .../lib/localization.dart | 2 +- freezed_provider_value_notifier/lib/main.dart | 5 +- .../lib/main_web.dart | 21 - .../lib/models.dart | 6 +- .../lib/todo_list_model.dart | 27 +- .../lib/todo_list_model.freezed.dart | 448 ++++++---- .../lib/value_notifier_provider.dart | 10 +- .../linux/.gitignore | 1 + .../linux/CMakeLists.txt | 128 +++ .../linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../linux/runner/CMakeLists.txt | 26 + .../linux/runner/main.cc | 6 + .../linux/runner/my_application.cc | 144 ++++ .../linux/runner/my_application.h | 18 + .../macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + freezed_provider_value_notifier/macos/Podfile | 42 + .../macos/Podfile.lock | 30 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + freezed_provider_value_notifier/pubspec.yaml | 35 +- .../test/app_state_test.dart | 4 +- .../test/home_screen_test.dart | 22 +- .../test/mock_repository.dart | 4 +- .../test_driver/integration_test.dart | 3 + .../test_driver/todo_app.dart | 9 - .../test_driver/todo_app_test.dart | 9 - .../web/favicon.png | Bin 0 -> 917 bytes .../web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../web/index.html | 32 +- .../web/manifest.json | 35 + .../windows/.gitignore | 17 + .../windows/CMakeLists.txt | 108 +++ .../windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../windows/runner/CMakeLists.txt | 40 + .../windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../windows/runner/flutter_window.h | 33 + .../windows/runner/main.cpp | 43 + .../windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + .../windows/runner/utils.cpp | 65 ++ .../windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 288 +++++++ .../windows/runner/win32_window.h | 102 +++ 133 files changed, 4076 insertions(+), 557 deletions(-) create mode 100644 freezed_provider_value_notifier/analysis_options.yaml delete mode 100644 freezed_provider_value_notifier/android/app/build.gradle create mode 100644 freezed_provider_value_notifier/android/app/build.gradle.kts delete mode 100644 freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freeze_provider_value_notifier/MainActivity.kt create mode 100644 freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freezed_provider_value_notifier/MainActivity.kt create mode 100644 freezed_provider_value_notifier/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 freezed_provider_value_notifier/android/app/src/main/res/values-night/styles.xml delete mode 100644 freezed_provider_value_notifier/android/build.gradle create mode 100644 freezed_provider_value_notifier/android/build.gradle.kts delete mode 100644 freezed_provider_value_notifier/android/settings.gradle create mode 100644 freezed_provider_value_notifier/android/settings.gradle.kts create mode 100644 freezed_provider_value_notifier/integration_test/app_test.dart create mode 100644 freezed_provider_value_notifier/ios/Podfile create mode 100644 freezed_provider_value_notifier/ios/RunnerTests/RunnerTests.swift delete mode 100644 freezed_provider_value_notifier/lib/main_web.dart create mode 100644 freezed_provider_value_notifier/linux/.gitignore create mode 100644 freezed_provider_value_notifier/linux/CMakeLists.txt create mode 100644 freezed_provider_value_notifier/linux/flutter/CMakeLists.txt create mode 100644 freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.cc create mode 100644 freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.h create mode 100644 freezed_provider_value_notifier/linux/flutter/generated_plugins.cmake create mode 100644 freezed_provider_value_notifier/linux/runner/CMakeLists.txt create mode 100644 freezed_provider_value_notifier/linux/runner/main.cc create mode 100644 freezed_provider_value_notifier/linux/runner/my_application.cc create mode 100644 freezed_provider_value_notifier/linux/runner/my_application.h create mode 100644 freezed_provider_value_notifier/macos/.gitignore create mode 100644 freezed_provider_value_notifier/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 freezed_provider_value_notifier/macos/Flutter/Flutter-Release.xcconfig create mode 100644 freezed_provider_value_notifier/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 freezed_provider_value_notifier/macos/Podfile create mode 100644 freezed_provider_value_notifier/macos/Podfile.lock create mode 100644 freezed_provider_value_notifier/macos/Runner.xcodeproj/project.pbxproj create mode 100644 freezed_provider_value_notifier/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 freezed_provider_value_notifier/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 freezed_provider_value_notifier/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 freezed_provider_value_notifier/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 freezed_provider_value_notifier/macos/Runner/AppDelegate.swift create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 freezed_provider_value_notifier/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 freezed_provider_value_notifier/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 freezed_provider_value_notifier/macos/Runner/Configs/Debug.xcconfig create mode 100644 freezed_provider_value_notifier/macos/Runner/Configs/Release.xcconfig create mode 100644 freezed_provider_value_notifier/macos/Runner/Configs/Warnings.xcconfig create mode 100644 freezed_provider_value_notifier/macos/Runner/DebugProfile.entitlements create mode 100644 freezed_provider_value_notifier/macos/Runner/Info.plist create mode 100644 freezed_provider_value_notifier/macos/Runner/MainFlutterWindow.swift create mode 100644 freezed_provider_value_notifier/macos/Runner/Release.entitlements create mode 100644 freezed_provider_value_notifier/macos/RunnerTests/RunnerTests.swift create mode 100644 freezed_provider_value_notifier/test_driver/integration_test.dart delete mode 100644 freezed_provider_value_notifier/test_driver/todo_app.dart delete mode 100644 freezed_provider_value_notifier/test_driver/todo_app_test.dart create mode 100644 freezed_provider_value_notifier/web/favicon.png create mode 100644 freezed_provider_value_notifier/web/icons/Icon-192.png create mode 100644 freezed_provider_value_notifier/web/icons/Icon-512.png create mode 100644 freezed_provider_value_notifier/web/icons/Icon-maskable-192.png create mode 100644 freezed_provider_value_notifier/web/icons/Icon-maskable-512.png create mode 100644 freezed_provider_value_notifier/web/manifest.json create mode 100644 freezed_provider_value_notifier/windows/.gitignore create mode 100644 freezed_provider_value_notifier/windows/CMakeLists.txt create mode 100644 freezed_provider_value_notifier/windows/flutter/CMakeLists.txt create mode 100644 freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.cc create mode 100644 freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.h create mode 100644 freezed_provider_value_notifier/windows/flutter/generated_plugins.cmake create mode 100644 freezed_provider_value_notifier/windows/runner/CMakeLists.txt create mode 100644 freezed_provider_value_notifier/windows/runner/Runner.rc create mode 100644 freezed_provider_value_notifier/windows/runner/flutter_window.cpp create mode 100644 freezed_provider_value_notifier/windows/runner/flutter_window.h create mode 100644 freezed_provider_value_notifier/windows/runner/main.cpp create mode 100644 freezed_provider_value_notifier/windows/runner/resource.h create mode 100644 freezed_provider_value_notifier/windows/runner/resources/app_icon.ico create mode 100644 freezed_provider_value_notifier/windows/runner/runner.exe.manifest create mode 100644 freezed_provider_value_notifier/windows/runner/utils.cpp create mode 100644 freezed_provider_value_notifier/windows/runner/utils.h create mode 100644 freezed_provider_value_notifier/windows/runner/win32_window.cpp create mode 100644 freezed_provider_value_notifier/windows/runner/win32_window.h diff --git a/freezed_provider_value_notifier/.metadata b/freezed_provider_value_notifier/.metadata index 361e1e4c..05a8ab44 100644 --- a/freezed_provider_value_notifier/.metadata +++ b/freezed_provider_value_notifier/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 18cd7a3601bcffb36fdf2f679f763b5e827c2e8e - channel: beta + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/freezed_provider_value_notifier/analysis_options.yaml b/freezed_provider_value_notifier/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/freezed_provider_value_notifier/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/freezed_provider_value_notifier/android/.gitignore b/freezed_provider_value_notifier/android/.gitignore index bc2100d8..be3943c9 100644 --- a/freezed_provider_value_notifier/android/.gitignore +++ b/freezed_provider_value_notifier/android/.gitignore @@ -5,3 +5,10 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/freezed_provider_value_notifier/android/app/build.gradle b/freezed_provider_value_notifier/android/app/build.gradle deleted file mode 100644 index 6b371432..00000000 --- a/freezed_provider_value_notifier/android/app/build.gradle +++ /dev/null @@ -1,67 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 28 - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - lintOptions { - disable 'InvalidPackage' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.freezed_provider_value_notifier" - minSdkVersion 16 - targetSdkVersion 28 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' -} diff --git a/freezed_provider_value_notifier/android/app/build.gradle.kts b/freezed_provider_value_notifier/android/app/build.gradle.kts new file mode 100644 index 00000000..2536170a --- /dev/null +++ b/freezed_provider_value_notifier/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.freezed_provider_value_notifier" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.freezed_provider_value_notifier" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/freezed_provider_value_notifier/android/app/src/debug/AndroidManifest.xml b/freezed_provider_value_notifier/android/app/src/debug/AndroidManifest.xml index 32824a13..399f6981 100644 --- a/freezed_provider_value_notifier/android/app/src/debug/AndroidManifest.xml +++ b/freezed_provider_value_notifier/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/freezed_provider_value_notifier/android/app/src/main/AndroidManifest.xml b/freezed_provider_value_notifier/android/app/src/main/AndroidManifest.xml index 499c4f84..a8725d3f 100644 --- a/freezed_provider_value_notifier/android/app/src/main/AndroidManifest.xml +++ b/freezed_provider_value_notifier/android/app/src/main/AndroidManifest.xml @@ -1,17 +1,13 @@ - - + - - @@ -44,4 +31,15 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + diff --git a/freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freeze_provider_value_notifier/MainActivity.kt b/freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freeze_provider_value_notifier/MainActivity.kt deleted file mode 100644 index e723a0f1..00000000 --- a/freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freeze_provider_value_notifier/MainActivity.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.freezed_provider_value_notifier - -import androidx.annotation.NonNull; -import io.flutter.embedding.android.FlutterActivity -import io.flutter.embedding.engine.FlutterEngine -import io.flutter.plugins.GeneratedPluginRegistrant - -class MainActivity: FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); - } -} diff --git a/freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freezed_provider_value_notifier/MainActivity.kt b/freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freezed_provider_value_notifier/MainActivity.kt new file mode 100644 index 00000000..2254fc11 --- /dev/null +++ b/freezed_provider_value_notifier/android/app/src/main/kotlin/com/example/freezed_provider_value_notifier/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.freezed_provider_value_notifier + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/freezed_provider_value_notifier/android/app/src/main/res/drawable-v21/launch_background.xml b/freezed_provider_value_notifier/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/freezed_provider_value_notifier/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/freezed_provider_value_notifier/android/app/src/main/res/values-night/styles.xml b/freezed_provider_value_notifier/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/freezed_provider_value_notifier/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/freezed_provider_value_notifier/android/app/src/main/res/values/styles.xml b/freezed_provider_value_notifier/android/app/src/main/res/values/styles.xml index 1f83a33f..cb1ef880 100644 --- a/freezed_provider_value_notifier/android/app/src/main/res/values/styles.xml +++ b/freezed_provider_value_notifier/android/app/src/main/res/values/styles.xml @@ -1,18 +1,18 @@ - - - diff --git a/freezed_provider_value_notifier/android/app/src/profile/AndroidManifest.xml b/freezed_provider_value_notifier/android/app/src/profile/AndroidManifest.xml index 32824a13..399f6981 100644 --- a/freezed_provider_value_notifier/android/app/src/profile/AndroidManifest.xml +++ b/freezed_provider_value_notifier/android/app/src/profile/AndroidManifest.xml @@ -1,6 +1,6 @@ - - diff --git a/freezed_provider_value_notifier/android/build.gradle b/freezed_provider_value_notifier/android/build.gradle deleted file mode 100644 index 3100ad2d..00000000 --- a/freezed_provider_value_notifier/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.3.50' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/freezed_provider_value_notifier/android/build.gradle.kts b/freezed_provider_value_notifier/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/freezed_provider_value_notifier/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/freezed_provider_value_notifier/android/gradle.properties b/freezed_provider_value_notifier/android/gradle.properties index 38c8d454..f018a618 100644 --- a/freezed_provider_value_notifier/android/gradle.properties +++ b/freezed_provider_value_notifier/android/gradle.properties @@ -1,4 +1,3 @@ -org.gradle.jvmargs=-Xmx1536M -android.enableR8=true +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/freezed_provider_value_notifier/android/gradle/wrapper/gradle-wrapper.properties b/freezed_provider_value_notifier/android/gradle/wrapper/gradle-wrapper.properties index 296b146b..ac3b4792 100644 --- a/freezed_provider_value_notifier/android/gradle/wrapper/gradle-wrapper.properties +++ b/freezed_provider_value_notifier/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip diff --git a/freezed_provider_value_notifier/android/settings.gradle b/freezed_provider_value_notifier/android/settings.gradle deleted file mode 100644 index 5a2f14fb..00000000 --- a/freezed_provider_value_notifier/android/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -include ':app' - -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() - -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} - -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} diff --git a/freezed_provider_value_notifier/android/settings.gradle.kts b/freezed_provider_value_notifier/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/freezed_provider_value_notifier/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/freezed_provider_value_notifier/integration_test/app_test.dart b/freezed_provider_value_notifier/integration_test/app_test.dart new file mode 100644 index 00000000..5710df3e --- /dev/null +++ b/freezed_provider_value_notifier/integration_test/app_test.dart @@ -0,0 +1,19 @@ +import 'package:freezed_provider_value_notifier/app.dart'; +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return ProviderApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'freezed_provider_value_notifier_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ); + }, + ); +} diff --git a/freezed_provider_value_notifier/ios/.gitignore b/freezed_provider_value_notifier/ios/.gitignore index e96ef602..7a7f9873 100644 --- a/freezed_provider_value_notifier/ios/.gitignore +++ b/freezed_provider_value_notifier/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/freezed_provider_value_notifier/ios/Flutter/AppFrameworkInfo.plist b/freezed_provider_value_notifier/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78..1dc6cf76 100644 --- a/freezed_provider_value_notifier/ios/Flutter/AppFrameworkInfo.plist +++ b/freezed_provider_value_notifier/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 13.0 diff --git a/freezed_provider_value_notifier/ios/Flutter/Debug.xcconfig b/freezed_provider_value_notifier/ios/Flutter/Debug.xcconfig index 592ceee8..ec97fc6f 100644 --- a/freezed_provider_value_notifier/ios/Flutter/Debug.xcconfig +++ b/freezed_provider_value_notifier/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/freezed_provider_value_notifier/ios/Flutter/Release.xcconfig b/freezed_provider_value_notifier/ios/Flutter/Release.xcconfig index 592ceee8..c4855bfe 100644 --- a/freezed_provider_value_notifier/ios/Flutter/Release.xcconfig +++ b/freezed_provider_value_notifier/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/freezed_provider_value_notifier/ios/Podfile b/freezed_provider_value_notifier/ios/Podfile new file mode 100644 index 00000000..620e46eb --- /dev/null +++ b/freezed_provider_value_notifier/ios/Podfile @@ -0,0 +1,43 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '13.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.pbxproj b/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.pbxproj index 75bd2f03..b9267a28 100644 --- a/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.pbxproj +++ b/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.pbxproj @@ -3,22 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -26,8 +33,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -37,14 +42,14 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -57,20 +62,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -84,6 +93,7 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -91,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -102,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -111,16 +121,26 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -147,9 +167,14 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -170,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -191,20 +224,23 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -220,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -231,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -253,9 +305,9 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -285,6 +337,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -293,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -309,18 +362,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.freezeProviderValueNotifier; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -328,11 +377,58 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -362,6 +458,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -376,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -386,9 +483,9 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -418,6 +515,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -426,11 +524,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -443,18 +542,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.freezeProviderValueNotifier; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -470,18 +565,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.freezeProviderValueNotifier; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -492,6 +583,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a16..919434a6 100644 --- a/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/freezed_provider_value_notifier/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/freezed_provider_value_notifier/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/freezed_provider_value_notifier/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cf..e3773d42 100644 --- a/freezed_provider_value_notifier/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/freezed_provider_value_notifier/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + @@ -61,8 +73,6 @@ ReferencedContainer = "container:Runner.xcodeproj"> - - Gw7hsN~k)CYt4dQDFxbs5*_&e@Hj)wtt(&JE<3Eq*D z;_gQLvqXoKv=I*gWqM9C(Tvu0>=?hTbOp9!6k6AF;>f6|S5%jGEE}TA9h)e`Yuiu8 d7)l?o1NFcJg%EAfM$P~L002ovPDHLkV1g^Dnv?(l delta 550 zcmV+>0@?ki0<;8>8Gi-<0051N9Sr~g00DDSM?wIu&K&6g00HhvL_t(I5v`QFOB_)Y z#?QI;j_a;jjf#Z$YJ7mH(xecJU?W)A`9CN~KrBV85C}GDQ=|;GDFPNjtWty!L{u=? zh>8yo%^GE+J9o~_IZFoiamQVQXP7%LzTbT3F@uf+9x&7cvVV%GdjTaC;zf>@mq<=3 z!c<%*UT)@yJ|0BK6~d4Jx-*KV`ZQ(@VyUPupum=XhInNG#Z_k-X|hK{B}~9IfiWx} zLD5QY6Vm)p0NrWymdkrHPN5Vgwd>5>4HI1=@PA+e^rq~CEj|n2X`??)0mUI*D{KBn zjv{V=y5X9|X@3grkpcXC6oou4ML~ezCc2EtnsQTB4tWNg?4bkf;hG7IMfhgNI(FV5 zGs4|*GyMTIY0$B=_*mso9+>eB z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu) zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4 zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f<+$JJpcdz delta 1274 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 diff --git a/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118dda48d71e01fcb589a74d069c5d7cb5..4cd7b0099ca80c806f8fe495613e8d6c69460d76 100644 GIT binary patch delta 266 zcmV+l0rmcY2$}+r8Gi!+003c4mpuRg09{Z_R7L;)|5U~JDYo_jSDX9(|7FYh`2GLd z^Zv2r{H^2sT*&w!Y^SB+`<>qVZqE6)=lqo0`vF#&*75!I`TIh@_d&k*HoEtQyV-iD z%Xz2D9EQRbeYh5Nr~y=#0ZD;^+vz0$004MNL_t(2&&|%+4u6C&2tZM$Wf&dzefR%A z(^3-?6X>hnCz2Ba@RH&`m!pgy?n@#@AuLYB&}Q)FGY`?vcft0!vht0Z@M&ZeNCWXh75gzRTXR8EE3oN&6 Q00000NkvXXt^-0~g5kS`djJ3c delta 1014 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 Zxpx7IC@PekH?;r&002ovPDHLkV1i)CYaajr delta 1916 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 delta 1274 zcmV@pi1MCNO0zH7s z{8#}P0)7Ba8DqYf&QgSne>X__O83t$NZM4&R0{XJq|x}oAU?tcfC@|eNz$04T}34& z8DJf78R&>*Zz`k$q{`#gfGHnx7nlH^G{y`jfER)1<_fNi<9aM%_zrm1C`yPkKma(+ ztQ;y*CR2bbBYz>zG*SVsfpkGU(q>uHZf3iogk_%#9E|5SWeHrmAo>P;ejX7mwq#*} zW25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+X$F_KMdb6sRz!~7K zkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&IDi_4_D!s#MVXp|-XhH;H z#&@_;oApJVd}}5O@b=X_gJboD^-fM@6|#V@sA%X)Rlkd}3MLH0dGXGG&-HX|aD~|M zC)W#H7=H?AbtdaV#dGpubj_O^J-SlWpVNv-5(;wR%mvE9`Qaqo>03b&##eNNf=m#B z9@^lsd8tJ;BvI86kNV zc~0CY(7V{s+h%cWG|y=gt|q`z$l<(@qU=i?9q#uz`G?PgDMK!VMGidHZt*N+1L0ZI zFkH=mFtywc6rJ}C_?)=m)18V!ZQ`*-j(D`gCFK|nt#{bk*%%zuQ7o7kvJgA^=(^7b zzkm5GZ;jxRn{Wup8IOUx8D4uh&(=Ox-7$a;U><*5L^!% zxRlw)vAbh;sdlR||&e}8_8%)c2Fwy=F& zH|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}Jb#viX>Oi;kBKp1x_fc0#UIbIeSJ^EkWFox zijdim{ojmn@#7EC*aY;fC0W*WN+DmQtE06pNK3SfZ^#@2K`6RgEuU_KwJTQ>E?Yar zc_9e#I$F8%>kuy-JI6ocSsYvQGbsxUCx04(w1z-pMRz9`kH5smmF@WHEG?dcYkv){ zV?kn3XB$_3zr*h1Uow)(<5)w5;3Wh1jHI)`ZlXp&!yEV{Y_~@;?CLwq;4eeaGOe6( zEsSSbwSGD0-`dUUl014$1_O8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^ z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0 z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000< KMNUMnLSTZ1N;Pr- delta 1891 zcmV-p2b}oI1m_Nr8Gi-<0052=@~r>>2QEoOK~#9!?VW3E6jc<*XLh$yKNt;)Mial3 z7z%<>zxaV5DhMs*(b6YIW1=KP6Jj(m21QYbiJ}su&;o5EN=$%gptMj6p|(7#AOTUJ zlt8fsX(iGq?ZQ50=XmbU+~w|cmz~|6$KBbz$-g^IcV>Hk`+q<8%-p?uMi3G-0B~!5 ze-yPCwFPw?HGmpMc~K)7BCq;C528+>zC*o^8h^XKC)IFgkv#xzm!ewK7j|kRa9dFo zC>MoDSR@P2#cWSU{i1oH5K2-Xb3jRz>|h7VOh0K` zhq^--L3H}A0r)nr z;Tr|-kPjB1s=ItpnS`oT%|U=a4oK-ZFIE^YBLH{u2#~@%%D^K)$`9*Tg(~9M-B+Zj z;~H?4LVsEt0eFtN4&>H(DZ@KpI6RhBKLL21CxC`J&m4Gc^9wwMZU#7SR1+KtuhSZM z+yLY}Vekzw6T_ApfEkuB_yU;e&a)L@rX~z70A_N+upOXN!qygmPDmKG0d%7CECcAI zgkd>ArzH$a0XjKsO$X@IgkcH5Y;m3`0G*yNOn(KK4GF_EfL4aB5i1j9o&Z{vFk~k> z&?@K2jQcJO%W!cddG(_DyfSoO55bUMHtbDF8DPkwF^~Ql#Eq4w15k{h%ML5Ar&pzi zl-D7v8kQXQ!&RRgKCW#5DZB$$6?mjWm50rRw*ukK>P-GkA|k69h{NARc>e}uLx+U4 z0DqE>7pa}9Fez+Vc-3jb`%i^uulglFoMzAVR|2%rf= zf#;74FXF^Ku_4+G&-4$KVy%YP>%2rxu2VG_cdm?XRjEhF&wPXJ># z_Q2+jGs=l~Fyx#MmGn+PZ0`@kBfGp|fO;Vov<$;z`(+sSZ7;Y=zXaF(8rb@CuQDV^ zq3i(2LfqO%AS!Ss>V%j7%>{6mtbYQrtQK5V4InPq0NZSaXv+f2U=&2}Z6OvkBfNHi z{LSaVJ!d5dC2K*ft_L^DRk;boQhOoVw!~Kt#0b2vd%!(&DF|~u1F@nG#LA5zR&7Fv z4GKgXooMSKb1g)6Obo-rgpuEP20T;W0Aa>55KC4gtQrKkAq-Hgs@FigV1GG8+rQ=z z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRet3L_uNyQ*c zE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=kyx=~RKa4{iT zm{_>_vSCm?$Ej=i6@=m%@PE9t1zZaoM}@2|h!#1K02~31S_I<0ZV=|K0}n!RRX6Ac zXmMf*5P-dLW}WPVsCKq)-x(0*txpZ2xrv3cxJ%l=7lpoNCyG< zK92ySAcmb-3m&}s@VwXv9(0#p<>B-5$bMxT;rk;OmENa6eM4D&LVo~01soUL39?R{ zyFLt3m|v?rCK7#KNu9E9Q4KV-pEUv^{rrClE&X&9I4-e7%pu_31#zGTOfC=ab%w20R*zBP+uT#l2{a~~~0wuG%6 zco*tVxK&e>%SJj*K!2tq*_h&ES5S9@TKb8WzpK;`&b9dNdxh4S)z%Q)o`aYWUh}9L z(`p!#WO5IxI|nf?yz{90R93Ed6@2qim*}Zjj$H&Esd`?JsFJUnDfiAgF_eYiWR3GC z>M9SHDylEWrA(%mfm~;u7OU9!Wz^!7Z%jZF zi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i0WYBP d*#0Ks^FNSabJA*5${_#%002ovPDHLkV1gB0Vle;! diff --git a/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih&6y64q8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f@rA97ytkO literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..0ec303439225b78712f49115768196d8d76f6790 100644 GIT binary patch delta 850 zcmV-Y1Fih&6y64q8Gi!+000iU#^3+|0OwFlR7L;)|5U~J09TtSw)Xt~|5(QO`~Ck( z!T0|D|3<*~RmJ%E{r+;#`2ba!klFf7!uJMSo%Q?vP{jByxcAZE>;OrUCbaZYjJo^$ z{nGILmD~Da$@upC{`C6(Ey4dPw)Pyc^>5DkHoEo!QcuK-Jwl-l}t(fQKv z{dds$V#@dygS`PvhX6is7Z+@*x-d;$ zb=6f@U3Jw}_s+W3%*+b9H_vS)-R#9?zrXogeLVI2We2RFTTAL}&3C8PS~<5D&v@UI z+`s*$wqQ=yd$laNUY-|ovcS9~n_90tFUdl#qq0tEUXle|k{Op|DHpSrbxEeZ5~$>o%>OSe z^=41qvh3LlC2xXzu+-2eQoqs1^L>7ylB$bCP);(%(xYZL1 cY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f@rA97ytkO literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..e9f5fea27c705180eb716271f41b582e76dcbd90 100644 GIT binary patch delta 1668 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 diff --git a/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/freezed_provider_value_notifier/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..84ac32ae7d989f82d5e46a60405adcc8279e8001 100644 GIT binary patch delta 749 zcmVg;Ps8|O$@u8^{Z_{KM!@$5TAfS6_e#O{MZfpz`2O`0$7~@NRr(1{THzH08y3x{{PYM{eL;T_A9^tcF_4Sxb`8l z_9V3RD6;a(-0A^Pjsi!1?)d#Ap4Tk3^CP0(07;VpJ7@tgQ}z4)*zx@&yZwC9`DV-b z0ZobH_5IB4{KxD3;p_6%|f=bdFhu+F!zMZ2UFj;GUKX7tI;hv3{q~!*pMj75WP_c}> z6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FMs~w_u?Av_yNBmRxVYrpi(M% zFMP21g+hmocQp3ay*Su=qM6He)*HaaTg$E^sym`(t%s3A)x!M+vfjXUBEpK6X9%iU zU!u9jj3(-$dM~sJ%Liy#?|+!6IY#MTau#O6vVj`yh_7%Ni!?!VS+MPTO(_fG+1<#p zqu;A#i+_(N%CmVnYvb>#nA{>Q%3E`Ds7<~jZMywn@h2t>G-LrYy7?Dj{aZqhQd6tzX%(Trn+ z)HNF}%-F{rr=m*0{=a;s#YDL00000NkvXXu0mjfaGjYE delta 1884 zcmV-i2c!7<1>g>l8Gi-<0076AQ7Zrd2Pa8HK~#9!?VNjT6h$1z_m0EFf5bmb1dTDK zp;kdKV1h(V(8Sc1M<37!RE>znAk{x4#zX@eOeE1j3~!+nB5IL z<xS}u?#DBMB>w^b($1Z)`9G?eP95EKi& z$eOy@K%h;ryrR3la%;>|o*>CgB(s>dDcNOXg}CK9SPmD?Uu$P4(=PGA0ShFasNfcIHTL?9WjB9#(2xSLC z`0%$#9DW9F;B4mbU{BlaYx!SjF!QSeF~(msQRxwboh5B_O$BWOQja)GboJz$&!?mgB&3$ytsA zvns&b3Cl5Hx#%p%faR*Q906u&fbXy$maV`n?S>A)vJIH!F-vxCrY+rq5_JA(GcOgu7(Ky4X3ATR9z8*%k&<5qYeV&4Y`~}XYmK(j{)!g8d2UgHXIINM!Rvn zKtEq~Foe0s!U{kux~F6Y7Sp+2f|*Cc${S{@oh8D0=XhB8Ec-w9CflfL+te4ium2cU zoPTCj_m<3d#gjK=<*8R`HP^C$lOPM5d~UhKhRRmvv{LI za^|oavk1$QiEApSrP@~Jjbg`<*dW4TO@DPEEX$Tg$xh?Y>Qd}y@kaH~IT8!lLpS^J zR7(&wZSI6+>Eb)tX>9Z?GX#q$u z4I>7e#b7ojyJ1grOh!^}s8S#ubi^Jkd1?UK)3mp6rI^_zxRY zrx6_QmhoWoDR`fp4R7gu6@OBFGu7IDVR6~nJsB{^f5jHn<{WJ&&f^X?3f8TIk3#U& zu1*Q-e@;snJxNx8-PBnpI|uFTKN!+Lp;fPfZ+eqqU^Y1|#DJY~126?zOx-+d>%4*? z&o`TbrXSNXZW^!P0t2>@$6&aiBtUDh2wLXLD9&a(1J=k_FK|iGbAQ@x4Qmx}Ms+*; zze&q6bH(=wYuXHfz0H6<05!LkE4rl~v^!bj=^9d+vI5fN<;GP>*Pas=q2l9RxDkk` zPRk&EQI+t_0$Y%nKE)Ma)W?jaA@4Z{h zTk*7;;#lG?hvTN_On=Jaxp%bdE;mDq(q#dgdYF|-?wrMeI4h`$idZ6^VyXZVlaCd0 z;i)OYR3npf@9>00Gqn##Zb4HRurgaWFCzL9u6@J@sse>Z1XznxWvSy%Td32I3!#YN zXt9v0)RQtDDZRd?#WY?~KF7A0UcR{jt9 W+;fr}hV%pg0000&=UXv0SHh`R7L;)|5U~JDYo_jSDRDC`1<|-SjPDL z{{Q{{{{H{}09Kk-#rR9Y_viNgVafPO!S|ls`uzR=MZfp^{QU=8od8La1X`Tr_Wmff z_5e$ivgQ1@=KMy$_g9a+`TPAle6cOJ_Fc#L7qIpvwDkd1mw$fK`6IOUD75rX!}mad zv(fMTE4=(Nx%L54lL1hVF1YpqNrC`FddBPg#_Ietx%Lrkq5wX00X1L{S%Cm9QY*av z#_Rh5PKy9KYTWbvz3BX9%J>0Hi1+#X{rLA{m%$Kamk?i!03AC38#Yrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`?TG`AHia671e^vgmp!llK zp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?tc*y?iZ$PR7_ceEIapF3KB14K0Pog?7wtd+^xgUCa_GVmlD z<^nU>AU_Yn-JU?NFdu|wf^bTCNf-wSBYVZltDdvGBln-YrbeGvJ!|s{#`gjN@yAMb zM6cjFz0eFECCsc|_8hTa3*9-JQGehksdoVP^K4m?&wpA~+|b%{EP5D-+7h)6CE; z*{>BP=GRR3Ea}xyV*bqry{l^J=0#DaC4ej;1qs8_by?H6Tr@7hl>UKNZt)^B&yl;)&oqzLg zcfZxpE?3k%_iTOVywh%`XVN-E#COl+($9{v(pqSQcrz=)>G!!3HeNxbXGM@})1|9g zG4*@(OBaMvY0P0_TfMFPh fVHk#CZX3S=^^2mI>Ux-D00000NkvXXu0mjfzK(<8 literal 3294 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 cX)(b1KSk$MOV07*qoM6N<$f&{Qds= z{r_0T`1}6fwc-8!#-TGX}_?g)CZq4{k!uZ_g@DrQdoW0kI zu+W69&uN^)W`CK&06mMNcYMVF00dG=L_t(|+U?wHQxh>12H+Dm+1+fh+IF>G0SjJM zkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJTkdTm&kdTm&kdTm&kdP`e zsgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>VI$fQI%^ugM`#6By?GeadWcu z0gy9!D`m!H>Bd!JW(@avE8`|5XX(0PN}!8K>`dkavs;rHL+wy96QGNT=S@#7%xtlm zIW!++@*2zm-Py#Zr`DzqsLm!b{iskFNULSqE9A>SqHem>o31A%XL>S_5?=;V_i_y+ z(xxXhnt#r-l1Y8_*h`r?8Tr|)(RAiO)4jQR`13X0mx07C&p@KBP_2s``KEhv^|*8c z$$_T(v6^1Ig=#R}sE{vjA?ErGDZGUsyoJuWdJMc7Nb1^KF)-u<7q zPy$=;)0>vuWuK2hQhswLf!9yg`88u&eBbR8uhod?Nw09AXH}-#qOLLxeT2%C;R)QQ$Za#qp~cM&YVmS4i-*Fpd!cC zBXc?(4wcg>sHmXGd^VdE<5QX{Kyz$;$sCPl(_*-P2Iw?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF34$0Z;QO!J zOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUCUoZo%k(yku QW&i*H07*qoM6N<$g47z!?*IS* literal 3612 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 iW8 CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Freezed Provider Value Notifier CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/freezed_provider_value_notifier/ios/RunnerTests/RunnerTests.swift b/freezed_provider_value_notifier/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/freezed_provider_value_notifier/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/freezed_provider_value_notifier/lib/add_todo_screen.dart b/freezed_provider_value_notifier/lib/add_todo_screen.dart index c1528bb0..658c1ed4 100644 --- a/freezed_provider_value_notifier/lib/add_todo_screen.dart +++ b/freezed_provider_value_notifier/lib/add_todo_screen.dart @@ -9,10 +9,10 @@ class AddTodoScreen extends StatefulWidget { const AddTodoScreen() : super(key: ArchSampleKeys.addTodoScreen); @override - _AddTodoScreenState createState() => _AddTodoScreenState(); + AddTodoScreenState createState() => AddTodoScreenState(); } -class _AddTodoScreenState extends State { +class AddTodoScreenState extends State { final _formKey = GlobalKey(); final _titleEditingController = TextEditingController(); final _notesEditingController = TextEditingController(); @@ -33,7 +33,8 @@ class _AddTodoScreenState extends State { appBar: AppBar(title: Text(localizations.addTodo)), body: Form( key: _formKey, - autovalidate: false, + autovalidateMode: AutovalidateMode.always, + canPop: true, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( @@ -47,7 +48,7 @@ class _AddTodoScreenState extends State { style: textTheme.titleLarge, autofocus: true, validator: (val) { - return val.trim().isEmpty + return val != null && val.trim().isEmpty ? localizations.emptyTodoError : null; }, @@ -67,7 +68,7 @@ class _AddTodoScreenState extends State { key: ArchSampleKeys.saveNewTodo, tooltip: localizations.addTodo, onPressed: () { - if (_formKey.currentState.validate()) { + if (_formKey.currentState!.validate()) { context.read().addTodo( Todo( _titleEditingController.text, diff --git a/freezed_provider_value_notifier/lib/app.dart b/freezed_provider_value_notifier/lib/app.dart index 91469b73..062288f1 100644 --- a/freezed_provider_value_notifier/lib/app.dart +++ b/freezed_provider_value_notifier/lib/app.dart @@ -1,9 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:freezed_provider_value_notifier/value_notifier_provider.dart'; -import 'package:meta/meta.dart'; import 'package:freezed_provider_value_notifier/add_todo_screen.dart'; import 'package:freezed_provider_value_notifier/localization.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:freezed_provider_value_notifier/value_notifier_provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -12,7 +11,7 @@ import 'home/home_screen.dart'; class ProviderApp extends StatelessWidget { final TodosRepository repository; - ProviderApp({@required this.repository}); + const ProviderApp({super.key, required this.repository}); @override Widget build(BuildContext context) { diff --git a/freezed_provider_value_notifier/lib/details_screen.dart b/freezed_provider_value_notifier/lib/details_screen.dart index 8ecd77bf..9a356c0d 100644 --- a/freezed_provider_value_notifier/lib/details_screen.dart +++ b/freezed_provider_value_notifier/lib/details_screen.dart @@ -5,13 +5,12 @@ import 'package:todos_app_core/todos_app_core.dart'; import 'edit_todo_screen.dart'; import 'models.dart'; -import 'todo_list_model.dart'; class DetailsScreen extends StatelessWidget { final String id; final VoidCallback onRemove; - const DetailsScreen({@required this.id, @required this.onRemove}) + const DetailsScreen({required this.id, required this.onRemove}) : super(key: ArchSampleKeys.todoDetailsScreen); @override @@ -28,10 +27,12 @@ class DetailsScreen extends StatelessWidget { ), ], ), - body: Selector( + body: Selector( selector: (context, model) => model.todoById(id), shouldRebuild: (prev, next) => next != null, - builder: (context, todo, _) { + builder: (context, t, _) { + final todo = t!; + return Padding( padding: const EdgeInsets.all(16.0), child: ListView( @@ -86,20 +87,22 @@ class DetailsScreen extends StatelessWidget { onPressed: () { Navigator.push( context, - MaterialPageRoute( - builder: (context) => EditTodoScreen( - id: id, - onEdit: (task, note) { - context.read().updateTodo( - context - .read() - .todoById(id) - ?.copy(task: task, note: note), - ); + MaterialPageRoute( + builder: (context) { + return EditTodoScreen( + id: id, + onEdit: (task, note) { + context.read().updateTodo( + context + .read() + .todoById(id)! + .copy(task: task, note: note), + ); - return Navigator.pop(context); - }, - ), + return Navigator.pop(context); + }, + ); + }, ), ); }, diff --git a/freezed_provider_value_notifier/lib/edit_todo_screen.dart b/freezed_provider_value_notifier/lib/edit_todo_screen.dart index 57f373cf..67ea7413 100644 --- a/freezed_provider_value_notifier/lib/edit_todo_screen.dart +++ b/freezed_provider_value_notifier/lib/edit_todo_screen.dart @@ -1,23 +1,26 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class EditTodoScreen extends StatefulWidget { final void Function(String task, String note) onEdit; final String id; - const EditTodoScreen({@required this.id, @required this.onEdit}) - : super(key: ArchSampleKeys.editTodoScreen); + const EditTodoScreen({ + super.key = ArchSampleKeys.editTodoScreen, + required this.id, + required this.onEdit, + }); @override - _EditTodoScreenState createState() => _EditTodoScreenState(); + EditTodoScreenState createState() => EditTodoScreenState(); } -class _EditTodoScreenState extends State { +class EditTodoScreenState extends State { final _formKey = GlobalKey(); - TextEditingController _taskController; - TextEditingController _noteController; + late TextEditingController _taskController; + late TextEditingController _noteController; @override void initState() { @@ -52,7 +55,7 @@ class _EditTodoScreenState extends State { hintText: ArchSampleLocalizations.of(context).newTodoHint, ), validator: (val) { - return val.trim().isEmpty + return val != null && val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null; }, @@ -73,8 +76,8 @@ class _EditTodoScreenState extends State { key: ArchSampleKeys.saveTodoFab, tooltip: ArchSampleLocalizations.of(context).saveChanges, onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); widget.onEdit(_taskController.text, _noteController.text); } }, diff --git a/freezed_provider_value_notifier/lib/home/extra_actions_button.dart b/freezed_provider_value_notifier/lib/home/extra_actions_button.dart index df7ab9cf..0538d1bf 100644 --- a/freezed_provider_value_notifier/lib/home/extra_actions_button.dart +++ b/freezed_provider_value_notifier/lib/home/extra_actions_button.dart @@ -5,7 +5,7 @@ import 'package:todos_app_core/todos_app_core.dart'; import '../todo_list_model.dart'; class ExtraActionsButton extends StatelessWidget { - const ExtraActionsButton({Key key}) : super(key: key); + const ExtraActionsButton({super.key}); @override Widget build(BuildContext context) { diff --git a/freezed_provider_value_notifier/lib/home/filter_button.dart b/freezed_provider_value_notifier/lib/home/filter_button.dart index 952c46f4..fb2e7a12 100644 --- a/freezed_provider_value_notifier/lib/home/filter_button.dart +++ b/freezed_provider_value_notifier/lib/home/filter_button.dart @@ -6,7 +6,7 @@ import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final bool isActive; - const FilterButton({this.isActive, Key key}) : super(key: key); + const FilterButton({super.key, required this.isActive}); @override Widget build(BuildContext context) { @@ -36,10 +36,11 @@ class FilterButton extends StatelessWidget { BuildContext context, TodoList store, ) { - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); - final defaultStyle = Theme.of(context).textTheme.bodyMedium; + final defaultStyle = Theme.of(context).textTheme.bodyMedium!; + final activeStyle = defaultStyle.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); + return [ PopupMenuItem( key: ArchSampleKeys.allFilter, diff --git a/freezed_provider_value_notifier/lib/home/home_screen.dart b/freezed_provider_value_notifier/lib/home/home_screen.dart index cc9fec01..2bf31941 100644 --- a/freezed_provider_value_notifier/lib/home/home_screen.dart +++ b/freezed_provider_value_notifier/lib/home/home_screen.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart' hide Action; -import 'package:provider/provider.dart'; import 'package:freezed_provider_value_notifier/home/stats_view.dart'; import 'package:freezed_provider_value_notifier/home/todo_list_view.dart'; import 'package:freezed_provider_value_notifier/localization.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; import '../models.dart'; @@ -11,13 +11,13 @@ import 'extra_actions_button.dart'; import 'filter_button.dart'; class HomeScreen extends StatefulWidget { - const HomeScreen(); + const HomeScreen({super.key}); @override - _HomeScreenState createState() => _HomeScreenState(); + HomeScreenState createState() => HomeScreenState(); } -class _HomeScreenState extends State { +class HomeScreenState extends State { // Because the state of the tabs is only a concern to the HomeScreen Widget, // it is stored as local state rather than in the TodoListModel. final _tab = ValueNotifier(_HomeScreenTab.todos); @@ -36,9 +36,8 @@ class _HomeScreenState extends State { actions: [ ValueListenableBuilder<_HomeScreenTab>( valueListenable: _tab, - builder: (_, tab, __) => FilterButton( - isActive: tab == _HomeScreenTab.todos, - ), + builder: (_, tab, _) => + FilterButton(isActive: tab == _HomeScreenTab.todos), ), const ExtraActionsButton(), ], @@ -67,12 +66,11 @@ class _HomeScreenState extends State { case _HomeScreenTab.stats: return const StatsView(); case _HomeScreenTab.todos: - default: return TodoListView( onRemove: (context, todo) { - context - .read() - .removeTodoWithId(todo.id); + context.read().removeTodoWithId( + todo.id, + ); _showUndoSnackbar(context, todo); }, ); @@ -91,11 +89,11 @@ class _HomeScreenState extends State { items: [ BottomNavigationBarItem( icon: Icon(Icons.list, key: ArchSampleKeys.todoTab), - title: Text(ArchSampleLocalizations.of(context).todos), + label: ArchSampleLocalizations.of(context).todos, ), BottomNavigationBarItem( icon: Icon(Icons.show_chart, key: ArchSampleKeys.statsTab), - title: Text(ArchSampleLocalizations.of(context).stats), + label: ArchSampleLocalizations.of(context).stats, ), ], ); @@ -105,7 +103,7 @@ class _HomeScreenState extends State { } void _showUndoSnackbar(BuildContext context, Todo todo) { - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( key: ArchSampleKeys.snackbar, duration: const Duration(seconds: 2), diff --git a/freezed_provider_value_notifier/lib/home/stats_view.dart b/freezed_provider_value_notifier/lib/home/stats_view.dart index 362ae196..6b11dd88 100644 --- a/freezed_provider_value_notifier/lib/home/stats_view.dart +++ b/freezed_provider_value_notifier/lib/home/stats_view.dart @@ -1,11 +1,10 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsView extends StatelessWidget { - const StatsView(); + const StatsView({super.key}); @override Widget build(BuildContext context) { diff --git a/freezed_provider_value_notifier/lib/home/todo_list_view.dart b/freezed_provider_value_notifier/lib/home/todo_list_view.dart index d38a03c6..0713250d 100644 --- a/freezed_provider_value_notifier/lib/home/todo_list_view.dart +++ b/freezed_provider_value_notifier/lib/home/todo_list_view.dart @@ -9,7 +9,7 @@ import '../models.dart'; class TodoListView extends StatelessWidget { final void Function(BuildContext context, Todo todo) onRemove; - TodoListView({Key key, @required this.onRemove}) : super(key: key); + const TodoListView({super.key, required this.onRemove}); @override Widget build(BuildContext context) { @@ -29,10 +29,10 @@ class TodoListView extends StatelessWidget { onTap: () { Navigator.push( context, - MaterialPageRoute( + MaterialPageRoute( builder: (_) { return DetailsScreen( - id: todo?.id, + id: todo.id, onRemove: () { Navigator.pop(context); onRemove(context, todo); diff --git a/freezed_provider_value_notifier/lib/localization.dart b/freezed_provider_value_notifier/lib/localization.dart index eada9032..f18a6a0c 100644 --- a/freezed_provider_value_notifier/lib/localization.dart +++ b/freezed_provider_value_notifier/lib/localization.dart @@ -7,7 +7,7 @@ class ProviderLocalizations { return Localizations.of( context, ProviderLocalizations, - ); + )!; } String get appTitle => 'Provider Example'; diff --git a/freezed_provider_value_notifier/lib/main.dart b/freezed_provider_value_notifier/lib/main.dart index 357400bb..306c152e 100644 --- a/freezed_provider_value_notifier/lib/main.dart +++ b/freezed_provider_value_notifier/lib/main.dart @@ -1,6 +1,5 @@ -import 'package:freezed_provider_value_notifier/app.dart'; import 'package:flutter/material.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; +import 'package:freezed_provider_value_notifier/app.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; @@ -12,7 +11,7 @@ Future main() async { repository: LocalStorageRepository( localStorage: KeyValueStorage( 'change_notifier_provider_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + await SharedPreferences.getInstance(), ), ), ), diff --git a/freezed_provider_value_notifier/lib/main_web.dart b/freezed_provider_value_notifier/lib/main_web.dart deleted file mode 100644 index 4119f879..00000000 --- a/freezed_provider_value_notifier/lib/main_web.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'dart:html'; - -import 'package:freezed_provider_value_notifier/app.dart'; -import 'package:flutter/material.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - ProviderApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'change_notifier_provider', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ); -} diff --git a/freezed_provider_value_notifier/lib/models.dart b/freezed_provider_value_notifier/lib/models.dart index 5bdc7fe3..ceaf4e1b 100644 --- a/freezed_provider_value_notifier/lib/models.dart +++ b/freezed_provider_value_notifier/lib/models.dart @@ -7,7 +7,7 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, this.note = '', String id}) + Todo(this.task, {this.complete = false, this.note = '', String? id}) : id = id ?? Uuid().generateV4(); @override @@ -36,13 +36,13 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, id: entity.id, ); } - Todo copy({String task, bool complete, String note, String id}) { + Todo copy({String? task, bool? complete, String? note, String? id}) { return Todo( task ?? this.task, complete: complete ?? this.complete, diff --git a/freezed_provider_value_notifier/lib/todo_list_model.dart b/freezed_provider_value_notifier/lib/todo_list_model.dart index bdd87361..db4dc478 100644 --- a/freezed_provider_value_notifier/lib/todo_list_model.dart +++ b/freezed_provider_value_notifier/lib/todo_list_model.dart @@ -1,6 +1,5 @@ -import 'package:flutter/widgets.dart'; -import 'package:flutter/foundation.dart'; import 'package:collection/collection.dart'; +import 'package:flutter/foundation.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:freezed_provider_value_notifier/models.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -13,25 +12,24 @@ enum VisibilityFilter { all, active, completed } abstract class TodoList with _$TodoList { factory TodoList( List todos, { - @required VisibilityFilter filter, - @required bool loading, + required VisibilityFilter filter, + required bool loading, }) = TodoListState; +} + +extension TodoById on TodoList { + Todo? todoById(String id) => todos.firstWhereOrNull((it) => it.id == id); - @late int get numCompleted => todos.where((Todo todo) => todo.complete).toList().length; - @late bool get hasCompleted => numCompleted > 0; - @late int get numActive => todos.where((Todo todo) => !todo.complete).toList().length; - @late bool get hasActiveTodos => numActive > 0; - @late List get filteredTodos => todos.where((todo) { switch (filter) { case VisibilityFilter.active: @@ -39,24 +37,17 @@ abstract class TodoList with _$TodoList { case VisibilityFilter.completed: return todo.complete; case VisibilityFilter.all: - default: return true; } }).toList(); } -extension TodoById on TodoList { - Todo todoById(String id) => - todos.firstWhere((it) => it.id == id, orElse: () => null); -} - class TodoListController extends ValueNotifier { TodoListController({ VisibilityFilter filter = VisibilityFilter.all, - @required this.todosRepository, + required this.todosRepository, List todos = const [], - }) : assert(todosRepository != null), - super(TodoList(todos, filter: filter, loading: false)) { + }) : super(TodoList(todos, filter: filter, loading: false)) { _loadTodos(); } diff --git a/freezed_provider_value_notifier/lib/todo_list_model.freezed.dart b/freezed_provider_value_notifier/lib/todo_list_model.freezed.dart index c590dbcb..07779511 100644 --- a/freezed_provider_value_notifier/lib/todo_list_model.freezed.dart +++ b/freezed_provider_value_notifier/lib/todo_list_model.freezed.dart @@ -1,5 +1,7 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -// ignore_for_file: deprecated_member_use_from_same_package +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark part of 'todo_list_model.dart'; @@ -7,165 +9,287 @@ part of 'todo_list_model.dart'; // FreezedGenerator // ************************************************************************** -mixin _$TodoList { - List get todos; - VisibilityFilter get filter; - bool get loading; - - TodoList copyWith({List todos, VisibilityFilter filter, bool loading}); -} - -class _$TodoListState with DiagnosticableTreeMixin implements TodoListState { - _$TodoListState(this.todos, {@required this.filter, @required this.loading}) - : assert(todos != null), - assert(filter != null), - assert(loading != null); - - @override - final List todos; - @override - final VisibilityFilter filter; - @override - final bool loading; - bool _didnumCompleted = false; - int _numCompleted; - - @override - int get numCompleted { - if (_didnumCompleted == false) { - _didnumCompleted = true; - _numCompleted = todos.where((Todo todo) => todo.complete).toList().length; - } - return _numCompleted; - } - - bool _didhasCompleted = false; - bool _hasCompleted; - - @override - bool get hasCompleted { - if (_didhasCompleted == false) { - _didhasCompleted = true; - _hasCompleted = numCompleted > 0; - } - return _hasCompleted; - } - - bool _didnumActive = false; - int _numActive; - - @override - int get numActive { - if (_didnumActive == false) { - _didnumActive = true; - _numActive = todos.where((Todo todo) => !todo.complete).toList().length; - } - return _numActive; - } - - bool _didhasActiveTodos = false; - bool _hasActiveTodos; - - @override - bool get hasActiveTodos { - if (_didhasActiveTodos == false) { - _didhasActiveTodos = true; - _hasActiveTodos = numActive > 0; - } - return _hasActiveTodos; - } - - bool _didfilteredTodos = false; - List _filteredTodos; - - @override - List get filteredTodos { - if (_didfilteredTodos == false) { - _didfilteredTodos = true; - _filteredTodos = todos.where((todo) { - switch (filter) { - case VisibilityFilter.active: - return !todo.complete; - case VisibilityFilter.completed: - return todo.complete; - case VisibilityFilter.all: - default: - return true; - } - }).toList(); - } - return _filteredTodos; - } - - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return 'TodoList(todos: $todos, filter: $filter, loading: $loading, numCompleted: $numCompleted, hasCompleted: $hasCompleted, numActive: $numActive, hasActiveTodos: $hasActiveTodos, filteredTodos: $filteredTodos)'; - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(DiagnosticsProperty('type', 'TodoList')) - ..add(DiagnosticsProperty('todos', todos)) - ..add(DiagnosticsProperty('filter', filter)) - ..add(DiagnosticsProperty('loading', loading)) - ..add(DiagnosticsProperty('numCompleted', numCompleted)) - ..add(DiagnosticsProperty('hasCompleted', hasCompleted)) - ..add(DiagnosticsProperty('numActive', numActive)) - ..add(DiagnosticsProperty('hasActiveTodos', hasActiveTodos)) - ..add(DiagnosticsProperty('filteredTodos', filteredTodos)); - } - - @override - bool operator ==(dynamic other) { - return identical(this, other) || - (other is TodoListState && - (identical(other.todos, todos) || - const DeepCollectionEquality().equals(other.todos, todos)) && - (identical(other.filter, filter) || - const DeepCollectionEquality().equals(other.filter, filter)) && - (identical(other.loading, loading) || - const DeepCollectionEquality().equals(other.loading, loading))); - } - - @override - int get hashCode => - runtimeType.hashCode ^ - todos.hashCode ^ - filter.hashCode ^ - loading.hashCode; - - @override - _$TodoListState copyWith({ - Object todos = freezed, - Object filter = freezed, - Object loading = freezed, - }) { - assert(todos != null); - assert(filter != null); - assert(loading != null); - return _$TodoListState( - todos == freezed ? this.todos : todos as List, - filter: filter == freezed ? this.filter : filter as VisibilityFilter, - loading: loading == freezed ? this.loading : loading as bool, - ); - } -} - -abstract class TodoListState implements TodoList { - factory TodoListState(List todos, - {@required VisibilityFilter filter, - @required bool loading}) = _$TodoListState; - - @override - List get todos; - @override - VisibilityFilter get filter; - @override - bool get loading; - - @override - TodoListState copyWith( - {List todos, VisibilityFilter filter, bool loading}); +// dart format off +T _$identity(T value) => value; +/// @nodoc +mixin _$TodoList implements DiagnosticableTreeMixin { + + List get todos; VisibilityFilter get filter; bool get loading; +/// Create a copy of TodoList +/// with the given fields replaced by the non-null parameter values. +@JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$TodoListCopyWith get copyWith => _$TodoListCopyWithImpl(this as TodoList, _$identity); + + +@override +void debugFillProperties(DiagnosticPropertiesBuilder properties) { + properties + ..add(DiagnosticsProperty('type', 'TodoList')) + ..add(DiagnosticsProperty('todos', todos))..add(DiagnosticsProperty('filter', filter))..add(DiagnosticsProperty('loading', loading)); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is TodoList&&const DeepCollectionEquality().equals(other.todos, todos)&&(identical(other.filter, filter) || other.filter == filter)&&(identical(other.loading, loading) || other.loading == loading)); +} + + +@override +int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(todos),filter,loading); + +@override +String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) { + return 'TodoList(todos: $todos, filter: $filter, loading: $loading)'; +} + + +} + +/// @nodoc +abstract mixin class $TodoListCopyWith<$Res> { + factory $TodoListCopyWith(TodoList value, $Res Function(TodoList) _then) = _$TodoListCopyWithImpl; +@useResult +$Res call({ + List todos, VisibilityFilter filter, bool loading +}); + + + + +} +/// @nodoc +class _$TodoListCopyWithImpl<$Res> + implements $TodoListCopyWith<$Res> { + _$TodoListCopyWithImpl(this._self, this._then); + + final TodoList _self; + final $Res Function(TodoList) _then; + +/// Create a copy of TodoList +/// with the given fields replaced by the non-null parameter values. +@pragma('vm:prefer-inline') @override $Res call({Object? todos = null,Object? filter = null,Object? loading = null,}) { + return _then(_self.copyWith( +todos: null == todos ? _self.todos : todos // ignore: cast_nullable_to_non_nullable +as List,filter: null == filter ? _self.filter : filter // ignore: cast_nullable_to_non_nullable +as VisibilityFilter,loading: null == loading ? _self.loading : loading // ignore: cast_nullable_to_non_nullable +as bool, + )); } + +} + + +/// Adds pattern-matching-related methods to [TodoList]. +extension TodoListPatterns on TodoList { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( TodoListState value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case TodoListState() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( TodoListState value) $default,){ +final _that = this; +switch (_that) { +case TodoListState(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( TodoListState value)? $default,){ +final _that = this; +switch (_that) { +case TodoListState() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( List todos, VisibilityFilter filter, bool loading)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case TodoListState() when $default != null: +return $default(_that.todos,_that.filter,_that.loading);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( List todos, VisibilityFilter filter, bool loading) $default,) {final _that = this; +switch (_that) { +case TodoListState(): +return $default(_that.todos,_that.filter,_that.loading);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( List todos, VisibilityFilter filter, bool loading)? $default,) {final _that = this; +switch (_that) { +case TodoListState() when $default != null: +return $default(_that.todos,_that.filter,_that.loading);case _: + return null; + +} +} + +} + +/// @nodoc + + +class TodoListState with DiagnosticableTreeMixin implements TodoList { + TodoListState(final List todos, {required this.filter, required this.loading}): _todos = todos; + + + final List _todos; +@override List get todos { + if (_todos is EqualUnmodifiableListView) return _todos; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_todos); +} + +@override final VisibilityFilter filter; +@override final bool loading; + +/// Create a copy of TodoList +/// with the given fields replaced by the non-null parameter values. +@override @JsonKey(includeFromJson: false, includeToJson: false) +@pragma('vm:prefer-inline') +$TodoListStateCopyWith get copyWith => _$TodoListStateCopyWithImpl(this, _$identity); + + +@override +void debugFillProperties(DiagnosticPropertiesBuilder properties) { + properties + ..add(DiagnosticsProperty('type', 'TodoList')) + ..add(DiagnosticsProperty('todos', todos))..add(DiagnosticsProperty('filter', filter))..add(DiagnosticsProperty('loading', loading)); +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is TodoListState&&const DeepCollectionEquality().equals(other._todos, _todos)&&(identical(other.filter, filter) || other.filter == filter)&&(identical(other.loading, loading) || other.loading == loading)); +} + + +@override +int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(_todos),filter,loading); + +@override +String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) { + return 'TodoList(todos: $todos, filter: $filter, loading: $loading)'; +} + + +} + +/// @nodoc +abstract mixin class $TodoListStateCopyWith<$Res> implements $TodoListCopyWith<$Res> { + factory $TodoListStateCopyWith(TodoListState value, $Res Function(TodoListState) _then) = _$TodoListStateCopyWithImpl; +@override @useResult +$Res call({ + List todos, VisibilityFilter filter, bool loading +}); + + + + +} +/// @nodoc +class _$TodoListStateCopyWithImpl<$Res> + implements $TodoListStateCopyWith<$Res> { + _$TodoListStateCopyWithImpl(this._self, this._then); + + final TodoListState _self; + final $Res Function(TodoListState) _then; + +/// Create a copy of TodoList +/// with the given fields replaced by the non-null parameter values. +@override @pragma('vm:prefer-inline') $Res call({Object? todos = null,Object? filter = null,Object? loading = null,}) { + return _then(TodoListState( +null == todos ? _self._todos : todos // ignore: cast_nullable_to_non_nullable +as List,filter: null == filter ? _self.filter : filter // ignore: cast_nullable_to_non_nullable +as VisibilityFilter,loading: null == loading ? _self.loading : loading // ignore: cast_nullable_to_non_nullable +as bool, + )); +} + + +} + +// dart format on diff --git a/freezed_provider_value_notifier/lib/value_notifier_provider.dart b/freezed_provider_value_notifier/lib/value_notifier_provider.dart index 53305856..2b7dd067 100644 --- a/freezed_provider_value_notifier/lib/value_notifier_provider.dart +++ b/freezed_provider_value_notifier/lib/value_notifier_provider.dart @@ -1,5 +1,4 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/widgets.dart'; import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; @@ -8,13 +7,12 @@ import 'package:provider/single_child_widget.dart'; class ValueNotifierProvider, Value> extends SingleChildStatelessWidget { - ValueNotifierProvider({@required this.create, Widget child}) - : super(child: child); + const ValueNotifierProvider({super.key, required this.create, super.child}); final Create create; @override - Widget buildWithChild(BuildContext context, Widget child) { + Widget buildWithChild(BuildContext context, Widget? child) { return InheritedProvider( create: create, dispose: (context, Controller controller) => controller.dispose(), @@ -22,7 +20,7 @@ class ValueNotifierProvider, Value> create: (context) => context.read(), startListening: (context, setState, controller, _) { setState(controller.value); - final listener = () => setState(controller.value); + void listener() => setState(controller.value); controller.addListener(listener); return () => controller.removeListener(listener); }, diff --git a/freezed_provider_value_notifier/linux/.gitignore b/freezed_provider_value_notifier/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/freezed_provider_value_notifier/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/freezed_provider_value_notifier/linux/CMakeLists.txt b/freezed_provider_value_notifier/linux/CMakeLists.txt new file mode 100644 index 00000000..40c0900f --- /dev/null +++ b/freezed_provider_value_notifier/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "freezed_provider_value_notifier") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.freezed_provider_value_notifier") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/freezed_provider_value_notifier/linux/flutter/CMakeLists.txt b/freezed_provider_value_notifier/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/freezed_provider_value_notifier/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.cc b/freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.h b/freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/freezed_provider_value_notifier/linux/flutter/generated_plugins.cmake b/freezed_provider_value_notifier/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/freezed_provider_value_notifier/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/freezed_provider_value_notifier/linux/runner/CMakeLists.txt b/freezed_provider_value_notifier/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/freezed_provider_value_notifier/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/freezed_provider_value_notifier/linux/runner/main.cc b/freezed_provider_value_notifier/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/freezed_provider_value_notifier/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/freezed_provider_value_notifier/linux/runner/my_application.cc b/freezed_provider_value_notifier/linux/runner/my_application.cc new file mode 100644 index 00000000..a0fc91b9 --- /dev/null +++ b/freezed_provider_value_notifier/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "freezed_provider_value_notifier"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "freezed_provider_value_notifier"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/freezed_provider_value_notifier/linux/runner/my_application.h b/freezed_provider_value_notifier/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/freezed_provider_value_notifier/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/freezed_provider_value_notifier/macos/.gitignore b/freezed_provider_value_notifier/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/freezed_provider_value_notifier/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/freezed_provider_value_notifier/macos/Flutter/Flutter-Debug.xcconfig b/freezed_provider_value_notifier/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/freezed_provider_value_notifier/macos/Flutter/Flutter-Release.xcconfig b/freezed_provider_value_notifier/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/freezed_provider_value_notifier/macos/Flutter/GeneratedPluginRegistrant.swift b/freezed_provider_value_notifier/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/freezed_provider_value_notifier/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/freezed_provider_value_notifier/macos/Podfile b/freezed_provider_value_notifier/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/freezed_provider_value_notifier/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/freezed_provider_value_notifier/macos/Podfile.lock b/freezed_provider_value_notifier/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/freezed_provider_value_notifier/macos/Runner.xcodeproj/project.pbxproj b/freezed_provider_value_notifier/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..d1c04506 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 3A3591511D8739FC5EA309CB /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E854EB9A64F00ECF984C1CB /* Pods_RunnerTests.framework */; }; + 3D7637D135CFCD418C85B762 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AA1B52C1BAEF2F148DD5342 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 098CA664BD1597035C2CEDD1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1AAFE64F22632A853B45FAA0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1E854EB9A64F00ECF984C1CB /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* freezed_provider_value_notifier.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = freezed_provider_value_notifier.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 37C35DA4EC4C39DA45256CE6 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 5AA1B52C1BAEF2F148DD5342 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C9A6ADFA7C9FBF67F85B509 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8F6040DD3C8C6F63E934AECB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + D20A115EA97DF290E32E28E3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A3591511D8739FC5EA309CB /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D7637D135CFCD418C85B762 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + AE2A868EB465F4FCA12C9ED2 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* freezed_provider_value_notifier.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + AE2A868EB465F4FCA12C9ED2 /* Pods */ = { + isa = PBXGroup; + children = ( + 098CA664BD1597035C2CEDD1 /* Pods-Runner.debug.xcconfig */, + 6C9A6ADFA7C9FBF67F85B509 /* Pods-Runner.release.xcconfig */, + 1AAFE64F22632A853B45FAA0 /* Pods-Runner.profile.xcconfig */, + D20A115EA97DF290E32E28E3 /* Pods-RunnerTests.debug.xcconfig */, + 37C35DA4EC4C39DA45256CE6 /* Pods-RunnerTests.release.xcconfig */, + 8F6040DD3C8C6F63E934AECB /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 5AA1B52C1BAEF2F148DD5342 /* Pods_Runner.framework */, + 1E854EB9A64F00ECF984C1CB /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + D983E28EC4EA86860B94BDC1 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 47A6D86E9EFD6AD78ADBF340 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + CD1175C88C2F7DA9A7473A87 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* freezed_provider_value_notifier.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 47A6D86E9EFD6AD78ADBF340 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + CD1175C88C2F7DA9A7473A87 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + D983E28EC4EA86860B94BDC1 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D20A115EA97DF290E32E28E3 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/freezed_provider_value_notifier.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/freezed_provider_value_notifier"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 37C35DA4EC4C39DA45256CE6 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/freezed_provider_value_notifier.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/freezed_provider_value_notifier"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8F6040DD3C8C6F63E934AECB /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/freezed_provider_value_notifier.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/freezed_provider_value_notifier"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/freezed_provider_value_notifier/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/freezed_provider_value_notifier/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/freezed_provider_value_notifier/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/freezed_provider_value_notifier/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..447c86fe --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/freezed_provider_value_notifier/macos/Runner.xcworkspace/contents.xcworkspacedata b/freezed_provider_value_notifier/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/freezed_provider_value_notifier/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/freezed_provider_value_notifier/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/freezed_provider_value_notifier/macos/Runner/AppDelegate.swift b/freezed_provider_value_notifier/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/freezed_provider_value_notifier/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/freezed_provider_value_notifier/macos/Runner/Configs/AppInfo.xcconfig b/freezed_provider_value_notifier/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..e35528b6 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = freezed_provider_value_notifier + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.freezedProviderValueNotifier + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/freezed_provider_value_notifier/macos/Runner/Configs/Debug.xcconfig b/freezed_provider_value_notifier/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/freezed_provider_value_notifier/macos/Runner/Configs/Release.xcconfig b/freezed_provider_value_notifier/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/freezed_provider_value_notifier/macos/Runner/Configs/Warnings.xcconfig b/freezed_provider_value_notifier/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/freezed_provider_value_notifier/macos/Runner/DebugProfile.entitlements b/freezed_provider_value_notifier/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/freezed_provider_value_notifier/macos/Runner/Info.plist b/freezed_provider_value_notifier/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/freezed_provider_value_notifier/macos/Runner/MainFlutterWindow.swift b/freezed_provider_value_notifier/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/freezed_provider_value_notifier/macos/Runner/Release.entitlements b/freezed_provider_value_notifier/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/freezed_provider_value_notifier/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/freezed_provider_value_notifier/macos/RunnerTests/RunnerTests.swift b/freezed_provider_value_notifier/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/freezed_provider_value_notifier/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/freezed_provider_value_notifier/pubspec.yaml b/freezed_provider_value_notifier/pubspec.yaml index c27a295e..a2daa1a9 100644 --- a/freezed_provider_value_notifier/pubspec.yaml +++ b/freezed_provider_value_notifier/pubspec.yaml @@ -2,34 +2,37 @@ name: freezed_provider_value_notifier description: A new Flutter project. version: 1.0.0+1 +publish_to: "none" environment: - sdk: ">=2.6.0 <3.0.0" + sdk: ^3.9.0 dependencies: - freezed_annotation: ^0.6.0 - provider: ^4.1.0-dev - todos_repository_local_storage: - path: ../todos_repository_local_storage - todos_app_core: - path: ../todos_app_core + collection: flutter: sdk: flutter - key_value_store_flutter: - key_value_store_web: + freezed_annotation: + provider: + todos_app_core: + path: ../todos_app_core + todos_repository_core: + path: ../todos_repository_core + todos_repository_local_storage: + path: ../todos_repository_local_storage shared_preferences: dev_dependencies: - freezed: ^0.6.1 build_runner: - mockito: - test: - flutter_test: - sdk: flutter - flutter_driver: - sdk: flutter integration_tests: path: ../integration_tests + integration_test: + sdk: flutter + flutter_lints: + flutter_test: + sdk: flutter + freezed: + mockito: + test: flutter: uses-material-design: true diff --git a/freezed_provider_value_notifier/test/app_state_test.dart b/freezed_provider_value_notifier/test/app_state_test.dart index 6a79466c..8ff0192a 100644 --- a/freezed_provider_value_notifier/test/app_state_test.dart +++ b/freezed_provider_value_notifier/test/app_state_test.dart @@ -77,7 +77,7 @@ void main() { final model = TodoListController(todosRepository: repository); expect(model.value.loading, isTrue); - expect(model.value.todos, []); + expect(model.value.todos, []); await Future.doWhile(() => Future.value(model.value.loading)); @@ -140,7 +140,7 @@ void main() { model.removeTodoWithId(todo.id); - expect(model.value.todos, []); + expect(model.value.todos, []); expect(repository.saveCount, 1); }); diff --git a/freezed_provider_value_notifier/test/home_screen_test.dart b/freezed_provider_value_notifier/test/home_screen_test.dart index bb8053d2..e7d8ab40 100644 --- a/freezed_provider_value_notifier/test/home_screen_test.dart +++ b/freezed_provider_value_notifier/test/home_screen_test.dart @@ -1,19 +1,17 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:freezed_provider_value_notifier/value_notifier_provider.dart'; import 'package:freezed_provider_value_notifier/home/home_screen.dart'; import 'package:freezed_provider_value_notifier/localization.dart'; import 'package:freezed_provider_value_notifier/models.dart'; import 'package:freezed_provider_value_notifier/todo_list_model.dart'; +import 'package:freezed_provider_value_notifier/value_notifier_provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; import 'mock_repository.dart'; /// Demonstrates how to test Widgets void main() { - group('HomeScreen', () { + group('$HomeScreen', () { final todoListFinder = find.byKey(ArchSampleKeys.todoList); final todoItem1Finder = find.byKey(ArchSampleKeys.todoItem('1')); final todoItem2Finder = find.byKey(ArchSampleKeys.todoItem('2')); @@ -83,14 +81,7 @@ void main() { } class _TestWidget extends StatelessWidget { - final Widget child; - final TodosRepository repository; - - const _TestWidget({ - Key key, - this.child, - this.repository, - }) : super(key: key); + const _TestWidget(); @override Widget build(BuildContext context) { @@ -104,7 +95,7 @@ class _TestWidget extends StatelessWidget { ProviderLocalizationsDelegate(), ArchSampleLocalizationsDelegate(), ], - home: child ?? const HomeScreen(), + home: const HomeScreen(), ), ); } @@ -119,10 +110,11 @@ final List defaultTodos = [ Matcher isChecked(bool isChecked) { return matchesSemantics( isChecked: isChecked, + hasTapAction: true, + hasFocusAction: true, hasCheckedState: true, + isFocusable: true, hasEnabledState: true, isEnabled: true, - isFocusable: true, - hasTapAction: true, ); } diff --git a/freezed_provider_value_notifier/test/mock_repository.dart b/freezed_provider_value_notifier/test/mock_repository.dart index 1b46fdf8..2112d16f 100644 --- a/freezed_provider_value_notifier/test/mock_repository.dart +++ b/freezed_provider_value_notifier/test/mock_repository.dart @@ -8,13 +8,13 @@ class MockRepository extends TodosRepository { int saveCount = 0; MockRepository([List todos = const []]) - : entities = todos.map((it) => it.toEntity()).toList(); + : entities = todos.map((it) => it.toEntity()).toList(); @override Future> loadTodos() async => entities; @override - Future saveTodos(List todos) async { + Future saveTodos(List todos) async { saveCount++; entities = todos; } diff --git a/freezed_provider_value_notifier/test_driver/integration_test.dart b/freezed_provider_value_notifier/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/freezed_provider_value_notifier/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/freezed_provider_value_notifier/test_driver/todo_app.dart b/freezed_provider_value_notifier/test_driver/todo_app.dart deleted file mode 100644 index a18fa2e7..00000000 --- a/freezed_provider_value_notifier/test_driver/todo_app.dart +++ /dev/null @@ -1,9 +0,0 @@ -// This line imports the extension -import 'package:flutter_driver/driver_extension.dart'; -import 'package:freezed_provider_value_notifier/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/freezed_provider_value_notifier/test_driver/todo_app_test.dart b/freezed_provider_value_notifier/test_driver/todo_app_test.dart deleted file mode 100644 index fa00c88c..00000000 --- a/freezed_provider_value_notifier/test_driver/todo_app_test.dart +++ /dev/null @@ -1,9 +0,0 @@ -// _copyright 2018 _the _flutter _architecture _sample _authors. _all rights reserved. -// _use of this source code is governed by the _m_i_t license that can be found -// in the _l_i_c_e_n_s_e file. - -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/freezed_provider_value_notifier/web/favicon.png b/freezed_provider_value_notifier/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/web/icons/Icon-192.png b/freezed_provider_value_notifier/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/web/icons/Icon-512.png b/freezed_provider_value_notifier/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/web/icons/Icon-maskable-192.png b/freezed_provider_value_notifier/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/web/icons/Icon-maskable-512.png b/freezed_provider_value_notifier/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 zcmeFZ_gj-)&^4Nb2tlbLMU<{!p(#yjqEe+=0IA_oih%ScH9@5#MNp&}Y#;;(h=A0@ zh7{>lT2MkSQ344eAvrhici!td|HJuyvJm#Y_w1Q9Yu3!26dNlO-oxUDK_C#XnW^Co z5C{VN6#{~B0)K2j7}*1Xq(Nqemv23A-6&=ZpEijkVnSwVGqLv40?n0=p;k3-U5e5+ z+z3>aS`u9DS=!wg8ROu?X4TFoW6CFLL&{GzoVT)ldhLekLM|+j3tIxRd|*5=c{=s&*vfPdBr(Fyj(v@%eQj1Soy7m4^@VRl1~@-PV7y+c!xz$8436WBn$t{=}mEdK#k`aystimGgI{(IBx$!pAwFoE9Y`^t^;> zKAD)C(Dl^s%`?q5$P|fZf8Xymrtu^Pv(7D`rn>Z-w$Ahs!z9!94WNVxrJuXfHAaxg zC6s@|Z1$7R$(!#t%Jb{{s6(Y?NoQXDYq)!}X@jKPhe`{9KQ@sAU8y-5`xt?S9$jKH zoi}6m5PcG*^{kjvt+kwPpyQzVg4o)a>;LK`aaN2x4@itBD3Aq?yWTM20VRn1rrd+2 zKO=P0rMjEGq_UqpMa`~7B|p?xAN1SCoCp}QxAv8O`jLJ5CVh@umR%c%i^)6!o+~`F zaalSTQcl5iwOLC&H)efzd{8(88mo`GI(56T<(&p7>Qd^;R1hn1Y~jN~tApaL8>##U zd65bo8)79CplWxr#z4!6HvLz&N7_5AN#x;kLG?zQ(#p|lj<8VUlKY=Aw!ATqeL-VG z42gA!^cMNPj>(`ZMEbCrnkg*QTsn*u(nQPWI9pA{MQ=IsPTzd7q5E#7+z>Ch=fx$~ z;J|?(5jTo5UWGvsJa(Sx0?S#56+8SD!I^tftyeh_{5_31l6&Hywtn`bbqYDqGZXI( zCG7hBgvksX2ak8+)hB4jnxlO@A32C_RM&g&qDSb~3kM&)@A_j1*oTO@nicGUyv+%^ z=vB)4(q!ykzT==Z)3*3{atJ5}2PV*?Uw+HhN&+RvKvZL3p9E?gHjv{6zM!A|z|UHK z-r6jeLxbGn0D@q5aBzlco|nG2tr}N@m;CJX(4#Cn&p&sLKwzLFx1A5izu?X_X4x8r@K*d~7>t1~ zDW1Mv5O&WOxbzFC`DQ6yNJ(^u9vJdj$fl2dq`!Yba_0^vQHXV)vqv1gssZYzBct!j zHr9>ydtM8wIs}HI4=E}qAkv|BPWzh3^_yLH(|kdb?x56^BlDC)diWyPd*|f!`^12_U>TD^^94OCN0lVv~Sgvs94ecpE^}VY$w`qr_>Ue zTfH~;C<3H<0dS5Rkf_f@1x$Gms}gK#&k()IC0zb^QbR!YLoll)c$Agfi6MKI0dP_L z=Uou&u~~^2onea2%XZ@>`0x^L8CK6=I{ge;|HXMj)-@o~h&O{CuuwBX8pVqjJ*o}5 z#8&oF_p=uSo~8vn?R0!AMWvcbZmsrj{ZswRt(aEdbi~;HeVqIe)-6*1L%5u$Gbs}| zjFh?KL&U(rC2izSGtwP5FnsR@6$-1toz?RvLD^k~h9NfZgzHE7m!!7s6(;)RKo2z} zB$Ci@h({l?arO+vF;s35h=|WpefaOtKVx>l399}EsX@Oe3>>4MPy%h&^3N_`UTAHJ zI$u(|TYC~E4)|JwkWW3F!Tib=NzjHs5ii2uj0^m|Qlh-2VnB#+X~RZ|`SA*}}&8j9IDv?F;(Y^1=Z0?wWz;ikB zewU>MAXDi~O7a~?jx1x=&8GcR-fTp>{2Q`7#BE#N6D@FCp`?ht-<1|y(NArxE_WIu zP+GuG=Qq>SHWtS2M>34xwEw^uvo4|9)4s|Ac=ud?nHQ>ax@LvBqusFcjH0}{T3ZPQ zLO1l<@B_d-(IS682}5KA&qT1+{3jxKolW+1zL4inqBS-D>BohA!K5++41tM@ z@xe<-qz27}LnV#5lk&iC40M||JRmZ*A##K3+!j93eouU8@q-`W0r%7N`V$cR&JV;iX(@cS{#*5Q>~4BEDA)EikLSP@>Oo&Bt1Z~&0d5)COI%3$cLB_M?dK# z{yv2OqW!al-#AEs&QFd;WL5zCcp)JmCKJEdNsJlL9K@MnPegK23?G|O%v`@N{rIRa zi^7a}WBCD77@VQ-z_v{ZdRsWYrYgC$<^gRQwMCi6);%R~uIi31OMS}=gUTE(GKmCI z$zM>mytL{uNN+a&S38^ez(UT=iSw=l2f+a4)DyCA1Cs_N-r?Q@$3KTYosY!;pzQ0k zzh1G|kWCJjc(oZVBji@kN%)UBw(s{KaYGy=i{g3{)Z+&H8t2`^IuLLKWT6lL<-C(! zSF9K4xd-|VO;4}$s?Z7J_dYqD#Mt)WCDnsR{Kpjq275uUq6`v0y*!PHyS(}Zmv)_{>Vose9-$h8P0|y;YG)Bo}$(3Z%+Gs0RBmFiW!^5tBmDK-g zfe5%B*27ib+7|A*Fx5e)2%kIxh7xWoc3pZcXS2zik!63lAG1;sC1ja>BqH7D zODdi5lKW$$AFvxgC-l-)!c+9@YMC7a`w?G(P#MeEQ5xID#<}W$3bSmJ`8V*x2^3qz zVe<^^_8GHqYGF$nIQm0Xq2kAgYtm#UC1A(=&85w;rmg#v906 zT;RyMgbMpYOmS&S9c38^40oUp?!}#_84`aEVw;T;r%gTZkWeU;;FwM@0y0adt{-OK z(vGnPSlR=Nv2OUN!2=xazlnHPM9EWxXg2EKf0kI{iQb#FoP>xCB<)QY>OAM$Dcdbm zU6dU|%Mo(~avBYSjRc13@|s>axhrPl@Sr81{RSZUdz4(=|82XEbV*JAX6Lfbgqgz584lYgi0 z2-E{0XCVON$wHfvaLs;=dqhQJ&6aLn$D#0i(FkAVrXG9LGm3pSTf&f~RQb6|1_;W> z?n-;&hrq*~L=(;u#jS`*Yvh@3hU-33y_Kv1nxqrsf>pHVF&|OKkoC)4DWK%I!yq?P z=vXo8*_1iEWo8xCa{HJ4tzxOmqS0&$q+>LroMKI*V-rxhOc%3Y!)Y|N6p4PLE>Yek>Y(^KRECg8<|%g*nQib_Yc#A5q8Io z6Ig&V>k|~>B6KE%h4reAo*DfOH)_01tE0nWOxX0*YTJgyw7moaI^7gW*WBAeiLbD?FV9GSB zPv3`SX*^GRBM;zledO`!EbdBO_J@fEy)B{-XUTVQv}Qf~PSDpK9+@I`7G7|>Dgbbu z_7sX9%spVo$%qwRwgzq7!_N;#Td08m5HV#?^dF-EV1o)Q=Oa+rs2xH#g;ykLbwtCh znUnA^dW!XjspJ;otq$yV@I^s9Up(5k7rqhQd@OLMyyxVLj_+$#Vc*}Usevp^I(^vH zmDgHc0VMme|K&X?9&lkN{yq_(If)O`oUPW8X}1R5pSVBpfJe0t{sPA(F#`eONTh_) zxeLqHMfJX#?P(@6w4CqRE@Eiza; z;^5)Kk=^5)KDvd9Q<`=sJU8rjjxPmtWMTmzcH={o$U)j=QBuHarp?=}c??!`3d=H$nrJMyr3L-& zA#m?t(NqLM?I3mGgWA_C+0}BWy3-Gj7bR+d+U?n*mN$%5P`ugrB{PeV>jDUn;eVc- zzeMB1mI4?fVJatrNyq|+zn=!AiN~<}eoM#4uSx^K?Iw>P2*r=k`$<3kT00BE_1c(02MRz4(Hq`L^M&xt!pV2 zn+#U3@j~PUR>xIy+P>51iPayk-mqIK_5rlQMSe5&tDkKJk_$i(X&;K(11YGpEc-K= zq4Ln%^j>Zi_+Ae9eYEq_<`D+ddb8_aY!N;)(&EHFAk@Ekg&41ABmOXfWTo)Z&KotA zh*jgDGFYQ^y=m)<_LCWB+v48DTJw*5dwMm_YP0*_{@HANValf?kV-Ic3xsC}#x2h8 z`q5}d8IRmqWk%gR)s~M}(Qas5+`np^jW^oEd-pzERRPMXj$kS17g?H#4^trtKtq;C?;c ztd|%|WP2w2Nzg@)^V}!Gv++QF2!@FP9~DFVISRW6S?eP{H;;8EH;{>X_}NGj^0cg@ z!2@A>-CTcoN02^r6@c~^QUa={0xwK0v4i-tQ9wQq^=q*-{;zJ{Qe%7Qd!&X2>rV@4 z&wznCz*63_vw4>ZF8~%QCM?=vfzW0r_4O^>UA@otm_!N%mH)!ERy&b!n3*E*@?9d^ zu}s^By@FAhG(%?xgJMuMzuJw2&@$-oK>n z=UF}rt%vuaP9fzIFCYN-1&b#r^Cl6RDFIWsEsM|ROf`E?O(cy{BPO2Ie~kT+^kI^i zp>Kbc@C?}3vy-$ZFVX#-cx)Xj&G^ibX{pWggtr(%^?HeQL@Z( zM-430g<{>vT*)jK4aY9(a{lSy{8vxLbP~n1MXwM527ne#SHCC^F_2@o`>c>>KCq9c(4c$VSyMl*y3Nq1s+!DF| z^?d9PipQN(mw^j~{wJ^VOXDCaL$UtwwTpyv8IAwGOg<|NSghkAR1GSNLZ1JwdGJYm zP}t<=5=sNNUEjc=g(y)1n5)ynX(_$1-uGuDR*6Y^Wgg(LT)Jp><5X|}bt z_qMa&QP?l_n+iVS>v%s2Li_;AIeC=Ca^v1jX4*gvB$?H?2%ndnqOaK5-J%7a} zIF{qYa&NfVY}(fmS0OmXA70{znljBOiv5Yod!vFU{D~*3B3Ka{P8?^ zfhlF6o7aNT$qi8(w<}OPw5fqA7HUje*r*Oa(YV%*l0|9FP9KW@U&{VSW{&b0?@y)M zs%4k1Ax;TGYuZ9l;vP5@?3oQsp3)rjBeBvQQ>^B;z5pc=(yHhHtq6|0m(h4envn_j787fizY@V`o(!SSyE7vlMT zbo=Z1c=atz*G!kwzGB;*uPL$Ei|EbZLh8o+1BUMOpnU(uX&OG1MV@|!&HOOeU#t^x zr9=w2ow!SsTuJWT7%Wmt14U_M*3XiWBWHxqCVZI0_g0`}*^&yEG9RK9fHK8e+S^m? zfCNn$JTswUVbiC#>|=wS{t>-MI1aYPLtzO5y|LJ9nm>L6*wpr_m!)A2Fb1RceX&*|5|MwrvOk4+!0p99B9AgP*9D{Yt|x=X}O% zgIG$MrTB=n-!q%ROT|SzH#A$Xm;|ym)0>1KR}Yl0hr-KO&qMrV+0Ej3d@?FcgZ+B3 ztEk16g#2)@x=(ko8k7^Tq$*5pfZHC@O@}`SmzT1(V@x&NkZNM2F#Q-Go7-uf_zKC( zB(lHZ=3@dHaCOf6C!6i8rDL%~XM@rVTJbZL09?ht@r^Z_6x}}atLjvH^4Vk#Ibf(^LiBJFqorm?A=lE zzFmwvp4bT@Nv2V>YQT92X;t9<2s|Ru5#w?wCvlhcHLcsq0TaFLKy(?nzezJ>CECqj zggrI~Hd4LudM(m{L@ezfnpELsRFVFw>fx;CqZtie`$BXRn#Ns%AdoE$-Pf~{9A8rV zf7FbgpKmVzmvn-z(g+&+-ID=v`;6=)itq8oM*+Uz**SMm_{%eP_c0{<%1JGiZS19o z@Gj7$Se~0lsu}w!%;L%~mIAO;AY-2i`9A*ZfFs=X!LTd6nWOZ7BZH2M{l2*I>Xu)0 z`<=;ObglnXcVk!T>e$H?El}ra0WmPZ$YAN0#$?|1v26^(quQre8;k20*dpd4N{i=b zuN=y}_ew9SlE~R{2+Rh^7%PA1H5X(p8%0TpJ=cqa$65XL)$#ign-y!qij3;2>j}I; ziO@O|aYfn&up5F`YtjGw68rD3{OSGNYmBnl?zdwY$=RFsegTZ=kkzRQ`r7ZjQP!H( zp4>)&zf<*N!tI00xzm-ME_a{_I!TbDCr;8E;kCH4LlL-tqLxDuBn-+xgPk37S&S2^ z2QZumkIimwz!c@!r0)j3*(jPIs*V!iLTRl0Cpt_UVNUgGZzdvs0(-yUghJfKr7;=h zD~y?OJ-bWJg;VdZ^r@vlDoeGV&8^--!t1AsIMZ5S440HCVr%uk- z2wV>!W1WCvFB~p$P$$_}|H5>uBeAe>`N1FI8AxM|pq%oNs;ED8x+tb44E) zTj{^fbh@eLi%5AqT?;d>Es5D*Fi{Bpk)q$^iF!!U`r2hHAO_?#!aYmf>G+jHsES4W zgpTKY59d?hsb~F0WE&dUp6lPt;Pm zcbTUqRryw^%{ViNW%Z(o8}dd00H(H-MmQmOiTq{}_rnwOr*Ybo7*}3W-qBT!#s0Ie z-s<1rvvJx_W;ViUD`04%1pra*Yw0BcGe)fDKUK8aF#BwBwMPU;9`!6E(~!043?SZx z13K%z@$$#2%2ovVlgFIPp7Q6(vO)ud)=*%ZSucL2Dh~K4B|%q4KnSpj#n@(0B})!9 z8p*hY@5)NDn^&Pmo;|!>erSYg`LkO?0FB@PLqRvc>4IsUM5O&>rRv|IBRxi(RX(gJ ztQ2;??L~&Mv;aVr5Q@(?y^DGo%pO^~zijld41aA0KKsy_6FeHIn?fNHP-z>$OoWer zjZ5hFQTy*-f7KENRiCE$ZOp4|+Wah|2=n@|W=o}bFM}Y@0e62+_|#fND5cwa3;P{^pEzlJbF1Yq^}>=wy8^^^$I2M_MH(4Dw{F6hm+vrWV5!q;oX z;tTNhz5`-V={ew|bD$?qcF^WPR{L(E%~XG8eJx(DoGzt2G{l8r!QPJ>kpHeOvCv#w zr=SSwMDaUX^*~v%6K%O~i)<^6`{go>a3IdfZ8hFmz&;Y@P%ZygShQZ2DSHd`m5AR= zx$wWU06;GYwXOf(%MFyj{8rPFXD};JCe85Bdp4$YJ2$TzZ7Gr#+SwCvBI1o$QP0(c zy`P51FEBV2HTisM3bHqpmECT@H!Y2-bv2*SoSPoO?wLe{M#zDTy@ujAZ!Izzky~3k zRA1RQIIoC*Mej1PH!sUgtkR0VCNMX(_!b65mo66iM*KQ7xT8t2eev$v#&YdUXKwGm z7okYAqYF&bveHeu6M5p9xheRCTiU8PFeb1_Rht0VVSbm%|1cOVobc8mvqcw!RjrMRM#~=7xibH&Fa5Imc|lZ{eC|R__)OrFg4@X_ ze+kk*_sDNG5^ELmHnZ7Ue?)#6!O)#Nv*Dl2mr#2)w{#i-;}0*_h4A%HidnmclH#;Q zmQbq+P4DS%3}PpPm7K_K3d2s#k~x+PlTul7+kIKol0@`YN1NG=+&PYTS->AdzPv!> zQvzT=)9se*Jr1Yq+C{wbK82gAX`NkbXFZ)4==j4t51{|-v!!$H8@WKA={d>CWRW+g z*`L>9rRucS`vbXu0rzA1#AQ(W?6)}1+oJSF=80Kf_2r~Qm-EJ6bbB3k`80rCv(0d` zvCf3;L2ovYG_TES%6vSuoKfIHC6w;V31!oqHM8-I8AFzcd^+_86!EcCOX|Ta9k1!s z_Vh(EGIIsI3fb&dF$9V8v(sTBC%!#<&KIGF;R+;MyC0~}$gC}}= zR`DbUVc&Bx`lYykFZ4{R{xRaUQkWCGCQlEc;!mf=+nOk$RUg*7 z;kP7CVLEc$CA7@6VFpsp3_t~m)W0aPxjsA3e5U%SfY{tp5BV5jH-5n?YX7*+U+Zs%LGR>U- z!x4Y_|4{gx?ZPJobISy991O znrmrC3otC;#4^&Rg_iK}XH(XX+eUHN0@Oe06hJk}F?`$)KmH^eWz@@N%wEc)%>?Ft z#9QAroDeyfztQ5Qe{m*#R#T%-h*&XvSEn@N$hYRTCMXS|EPwzF3IIysD2waj`vQD{ zv_#^Pgr?s~I*NE=acf@dWVRNWTr(GN0wrL)Z2=`Dr>}&ZDNX|+^Anl{Di%v1Id$_p zK5_H5`RDjJx`BW7hc85|> zHMMsWJ4KTMRHGu+vy*kBEMjz*^K8VtU=bXJYdhdZ-?jTXa$&n)C?QQIZ7ln$qbGlr zS*TYE+ppOrI@AoPP=VI-OXm}FzgXRL)OPvR$a_=SsC<3Jb+>5makX|U!}3lx4tX&L z^C<{9TggZNoeX!P1jX_K5HkEVnQ#s2&c#umzV6s2U-Q;({l+j^?hi7JnQ7&&*oOy9 z(|0asVTWUCiCnjcOnB2pN0DpuTglKq;&SFOQ3pUdye*eT<2()7WKbXp1qq9=bhMWlF-7BHT|i3TEIT77AcjD(v=I207wi-=vyiw5mxgPdTVUC z&h^FEUrXwWs9en2C{ywZp;nvS(Mb$8sBEh-*_d-OEm%~p1b2EpcwUdf<~zmJmaSTO zSX&&GGCEz-M^)G$fBvLC2q@wM$;n4jp+mt0MJFLuJ%c`tSp8$xuP|G81GEd2ci$|M z4XmH{5$j?rqDWoL4vs!}W&!?!rtj=6WKJcE>)?NVske(p;|#>vL|M_$as=mi-n-()a*OU3Okmk0wC<9y7t^D(er-&jEEak2!NnDiOQ99Wx8{S8}=Ng!e0tzj*#T)+%7;aM$ z&H}|o|J1p{IK0Q7JggAwipvHvko6>Epmh4RFRUr}$*2K4dz85o7|3#Bec9SQ4Y*;> zXWjT~f+d)dp_J`sV*!w>B%)#GI_;USp7?0810&3S=WntGZ)+tzhZ+!|=XlQ&@G@~3 z-dw@I1>9n1{+!x^Hz|xC+P#Ab`E@=vY?3%Bc!Po~e&&&)Qp85!I|U<-fCXy*wMa&t zgDk!l;gk;$taOCV$&60z+}_$ykz=Ea*)wJQ3-M|p*EK(cvtIre0Pta~(95J7zoxBN zS(yE^3?>88AL0Wfuou$BM{lR1hkrRibz=+I9ccwd`ZC*{NNqL)3pCcw^ygMmrG^Yp zn5f}Xf>%gncC=Yq96;rnfp4FQL#{!Y*->e82rHgY4Zwy{`JH}b9*qr^VA{%~Z}jtp z_t$PlS6}5{NtTqXHN?uI8ut8rOaD#F1C^ls73S=b_yI#iZDOGz3#^L@YheGd>L;<( z)U=iYj;`{>VDNzIxcjbTk-X3keXR8Xbc`A$o5# zKGSk-7YcoBYuAFFSCjGi;7b<;n-*`USs)IX z=0q6WZ=L!)PkYtZE-6)azhXV|+?IVGTOmMCHjhkBjfy@k1>?yFO3u!)@cl{fFAXnRYsWk)kpT?X{_$J=|?g@Q}+kFw|%n!;Zo}|HE@j=SFMvT8v`6Y zNO;tXN^036nOB2%=KzxB?n~NQ1K8IO*UE{;Xy;N^ZNI#P+hRZOaHATz9(=)w=QwV# z`z3+P>9b?l-@$@P3<;w@O1BdKh+H;jo#_%rr!ute{|YX4g5}n?O7Mq^01S5;+lABE+7`&_?mR_z7k|Ja#8h{!~j)| zbBX;*fsbUak_!kXU%HfJ2J+G7;inu#uRjMb|8a){=^))y236LDZ$$q3LRlat1D)%7K0!q5hT5V1j3qHc7MG9 z_)Q=yQ>rs>3%l=vu$#VVd$&IgO}Za#?aN!xY>-<3PhzS&q!N<=1Q7VJBfHjug^4|) z*fW^;%3}P7X#W3d;tUs3;`O&>;NKZBMR8au6>7?QriJ@gBaorz-+`pUWOP73DJL=M z(33uT6Gz@Sv40F6bN|H=lpcO z^AJl}&=TIjdevuDQ!w0K*6oZ2JBOhb31q!XDArFyKpz!I$p4|;c}@^bX{>AXdt7Bm zaLTk?c%h@%xq02reu~;t@$bv`b3i(P=g}~ywgSFpM;}b$zAD+=I!7`V~}ARB(Wx0C(EAq@?GuxOL9X+ffbkn3+Op0*80TqmpAq~EXmv%cq36celXmRz z%0(!oMp&2?`W)ALA&#|fu)MFp{V~~zIIixOxY^YtO5^FSox8v$#d0*{qk0Z)pNTt0QVZ^$`4vImEB>;Lo2!7K05TpY-sl#sWBz_W-aDIV`Ksabi zvpa#93Svo!70W*Ydh)Qzm{0?CU`y;T^ITg-J9nfWeZ-sbw)G@W?$Eomf%Bg2frfh5 zRm1{|E0+(4zXy){$}uC3%Y-mSA2-^I>Tw|gQx|7TDli_hB>``)Q^aZ`LJC2V3U$SABP}T)%}9g2pF9dT}aC~!rFFgkl1J$ z`^z{Arn3On-m%}r}TGF8KQe*OjSJ=T|caa_E;v89A{t@$yT^(G9=N9F?^kT*#s3qhJq!IH5|AhnqFd z0B&^gm3w;YbMNUKU>naBAO@fbz zqw=n!@--}o5;k6DvTW9pw)IJVz;X}ncbPVrmH>4x);8cx;q3UyiML1PWp%bxSiS|^ zC5!kc4qw%NSOGQ*Kcd#&$30=lDvs#*4W4q0u8E02U)7d=!W7+NouEyuF1dyH$D@G& zaFaxo9Ex|ZXA5y{eZT*i*dP~INSMAi@mvEX@q5i<&o&#sM}Df?Og8n8Ku4vOux=T% zeuw~z1hR}ZNwTn8KsQHKLwe2>p^K`YWUJEdVEl|mO21Bov!D0D$qPoOv=vJJ`)|%_ z>l%`eexY7t{BlVKP!`a^U@nM?#9OC*t76My_E_<16vCz1x_#82qj2PkWiMWgF8bM9 z(1t4VdHcJ;B~;Q%x01k_gQ0>u2*OjuEWNOGX#4}+N?Gb5;+NQMqp}Puqw2HnkYuKA zzKFWGHc&K>gwVgI1Sc9OT1s6fq=>$gZU!!xsilA$fF`kLdGoX*^t}ao@+^WBpk>`8 z4v_~gK|c2rCq#DZ+H)$3v~Hoi=)=1D==e3P zpKrRQ+>O^cyTuWJ%2}__0Z9SM_z9rptd*;-9uC1tDw4+A!=+K%8~M&+Zk#13hY$Y$ zo-8$*8dD5@}XDi19RjK6T^J~DIXbF5w&l?JLHMrf0 zLv0{7*G!==o|B%$V!a=EtVHdMwXLtmO~vl}P6;S(R2Q>*kTJK~!}gloxj)m|_LYK{ zl(f1cB=EON&wVFwK?MGn^nWuh@f95SHatPs(jcwSY#Dnl1@_gkOJ5=f`%s$ZHljRH0 z+c%lrb=Gi&N&1>^L_}#m>=U=(oT^vTA&3!xXNyqi$pdW1BDJ#^{h|2tZc{t^vag3& zAD7*8C`chNF|27itjBUo^CCDyEpJLX3&u+(L;YeeMwnXEoyN(ytoEabcl$lSgx~Ltatn}b$@j_yyMrBb03)shJE*$;Mw=;mZd&8e>IzE+4WIoH zCSZE7WthNUL$|Y#m!Hn?x7V1CK}V`KwW2D$-7&ODy5Cj;!_tTOOo1Mm%(RUt)#$@3 zhurA)t<7qik%%1Et+N1?R#hdBB#LdQ7{%-C zn$(`5e0eFh(#c*hvF>WT*07fk$N_631?W>kfjySN8^XC9diiOd#s?4tybICF;wBjp zIPzilX3{j%4u7blhq)tnaOBZ_`h_JqHXuI7SuIlNTgBk9{HIS&3|SEPfrvcE<@}E` zKk$y*nzsqZ{J{uWW9;#n=de&&h>m#A#q)#zRonr(?mDOYU&h&aQWD;?Z(22wY?t$U3qo`?{+amA$^TkxL+Ex2dh`q7iR&TPd0Ymwzo#b? zP$#t=elB5?k$#uE$K>C$YZbYUX_JgnXA`oF_Ifz4H7LEOW~{Gww&3s=wH4+j8*TU| zSX%LtJWqhr-xGNSe{;(16kxnak6RnZ{0qZ^kJI5X*It_YuynSpi(^-}Lolr{)#z_~ zw!(J-8%7Ybo^c3(mED`Xz8xecP35a6M8HarxRn%+NJBE;dw>>Y2T&;jzRd4FSDO3T zt*y+zXCtZQ0bP0yf6HRpD|WmzP;DR^-g^}{z~0x~z4j8m zucTe%k&S9Nt-?Jb^gYW1w6!Y3AUZ0Jcq;pJ)Exz%7k+mUOm6%ApjjSmflfKwBo6`B zhNb@$NHTJ>guaj9S{@DX)!6)b-Shav=DNKWy(V00k(D!v?PAR0f0vDNq*#mYmUp6> z76KxbFDw5U{{qx{BRj(>?|C`82ICKbfLxoldov-M?4Xl+3;I4GzLHyPOzYw7{WQST zPNYcx5onA%MAO9??41Po*1zW(Y%Zzn06-lUp{s<3!_9vv9HBjT02On0Hf$}NP;wF) zP<`2p3}A^~1YbvOh{ePMx$!JGUPX-tbBzp3mDZMY;}h;sQ->!p97GA)9a|tF(Gh{1$xk7 zUw?ELkT({Xw!KIr);kTRb1b|UL`r2_`a+&UFVCdJ)1T#fdh;71EQl9790Br0m_`$x z9|ZANuchFci8GNZ{XbP=+uXSJRe(;V5laQz$u18#?X*9}x7cIEbnr%<=1cX3EIu7$ zhHW6pe5M(&qEtsqRa>?)*{O;OJT+YUhG5{km|YI7I@JL_3Hwao9aXneiSA~a* z|Lp@c-oMNyeAEuUz{F?kuou3x#C*gU?lon!RC1s37gW^0Frc`lqQWH&(J4NoZg3m8 z;Lin#8Q+cFPD7MCzj}#|ws7b@?D9Q4dVjS4dpco=4yX5SSH=A@U@yqPdp@?g?qeia zH=Tt_9)G=6C2QIPsi-QipnK(mc0xXIN;j$WLf@n8eYvMk;*H-Q4tK%(3$CN}NGgO8n}fD~+>?<3UzvsrMf*J~%i;VKQHbF%TPalFi=#sgj)(P#SM^0Q=Tr>4kJVw8X3iWsP|e8tj}NjlMdWp z@2+M4HQu~3!=bZpjh;;DIDk&X}=c8~kn)FWWH z2KL1w^rA5&1@@^X%MjZ7;u(kH=YhH2pJPFQe=hn>tZd5RC5cfGYis8s9PKaxi*}-s6*W zRA^PwR=y^5Z){!(4D9-KC;0~;b*ploznFOaU`bJ_7U?qAi#mTo!&rIECRL$_y@yI27x2?W+zqDBD5~KCVYKFZLK+>ABC(Kj zeAll)KMgIlAG`r^rS{loBrGLtzhHY8$)<_S<(Dpkr(Ym@@vnQ&rS@FC*>2@XCH}M+an74WcRDcoQ+a3@A z9tYhl5$z7bMdTvD2r&jztBuo37?*k~wcU9GK2-)MTFS-lux-mIRYUuGUCI~V$?s#< z?1qAWb(?ZLm(N>%S%y10COdaq_Tm5c^%ooIxpR=`3e4C|@O5wY+eLik&XVi5oT7oe zmxH)Jd*5eo@!7t`x8!K=-+zJ-Sz)B_V$)s1pW~CDU$=q^&ABvf6S|?TOMB-RIm@CoFg>mjIQE)?+A1_3s6zmFU_oW&BqyMz1mY*IcP_2knjq5 zqw~JK(cVsmzc7*EvTT2rvpeqhg)W=%TOZ^>f`rD4|7Z5fq*2D^lpCttIg#ictgqZ$P@ru6P#f$x#KfnfTZj~LG6U_d-kE~`;kU_X)`H5so@?C zWmb!7x|xk@0L~0JFall*@ltyiL^)@3m4MqC7(7H0sH!WidId1#f#6R{Q&A!XzO1IAcIx;$k66dumt6lpUw@nL2MvqJ5^kbOVZ<^2jt5-njy|2@`07}0w z;M%I1$FCoLy`8xp8Tk)bFr;7aJeQ9KK6p=O$U0-&JYYy8woV*>b+FB?xLX`=pirYM z5K$BA(u)+jR{?O2r$c_Qvl?M{=Ar{yQ!UVsVn4k@0!b?_lA;dVz9uaQUgBH8Oz(Sb zrEs;&Ey>_ex8&!N{PmQjp+-Hlh|OA&wvDai#GpU=^-B70V0*LF=^bi+Nhe_o|azZ%~ZZ1$}LTmWt4aoB1 zPgccm$EwYU+jrdBaQFxQfn5gd(gM`Y*Ro1n&Zi?j=(>T3kmf94vdhf?AuS8>$Va#P zGL5F+VHpxdsCUa}+RqavXCobI-@B;WJbMphpK2%6t=XvKWWE|ruvREgM+|V=i6;;O zx$g=7^`$XWn0fu!gF=Xe9cMB8Z_SelD>&o&{1XFS`|nInK3BXlaeD*rc;R-#osyIS zWv&>~^TLIyBB6oDX+#>3<_0+2C4u2zK^wmHXXDD9_)kmLYJ!0SzM|%G9{pi)`X$uf zW}|%%#LgyK7m(4{V&?x_0KEDq56tk|0YNY~B(Sr|>WVz-pO3A##}$JCT}5P7DY+@W z#gJv>pA5>$|E3WO2tV7G^SuymB?tY`ooKcN3!vaQMnBNk-WATF{-$#}FyzgtJ8M^; zUK6KWSG)}6**+rZ&?o@PK3??uN{Q)#+bDP9i1W&j)oaU5d0bIWJ_9T5ac!qc?x66Q z$KUSZ`nYY94qfN_dpTFr8OW~A?}LD;Yty-BA)-be5Z3S#t2Io%q+cAbnGj1t$|qFR z9o?8B7OA^KjCYL=-!p}w(dkC^G6Nd%_I=1))PC0w5}ZZGJxfK)jP4Fwa@b-SYBw?% zdz9B-<`*B2dOn(N;mcTm%Do)rIvfXRNFX&1h`?>Rzuj~Wx)$p13nrDlS8-jwq@e@n zNIj_|8or==8~1h*Ih?w*8K7rYkGlwlTWAwLKc5}~dfz3y`kM&^Q|@C%1VAp_$wnw6zG~W4O+^ z>i?NY?oXf^Puc~+fDM$VgRNBpOZj{2cMP~gCqWAX4 z7>%$ux8@a&_B(pt``KSt;r+sR-$N;jdpY>|pyvPiN)9ohd*>mVST3wMo)){`B(&eX z1?zZJ-4u9NZ|~j1rdZYq4R$?swf}<6(#ex%7r{kh%U@kT)&kWuAszS%oJts=*OcL9 zaZwK<5DZw%1IFHXgFplP6JiL^dk8+SgM$D?8X+gE4172hXh!WeqIO>}$I9?Nry$*S zQ#f)RuH{P7RwA3v9f<-w>{PSzom;>(i&^l{E0(&Xp4A-*q-@{W1oE3K;1zb{&n28dSC2$N+6auXe0}e4b z)KLJ?5c*>@9K#I^)W;uU_Z`enquTUxr>mNq z1{0_puF-M7j${rs!dxxo3EelGodF1TvjV;Zpo;s{5f1pyCuRp=HDZ?s#IA4f?h|-p zGd|Mq^4hDa@Bh!c4ZE?O&x&XZ_ptZGYK4$9F4~{%R!}G1leCBx`dtNUS|K zL-7J5s4W@%mhXg1!}a4PD%!t&Qn%f_oquRajn3@C*)`o&K9o7V6DwzVMEhjVdDJ1fjhr#@=lp#@4EBqi=CCQ>73>R(>QKPNM&_Jpe5G`n4wegeC`FYEPJ{|vwS>$-`fuRSp3927qOv|NC3T3G-0 zA{K`|+tQy1yqE$ShWt8ny&5~)%ITb@^+x$w0)f&om;P8B)@}=Wzy59BwUfZ1vqw87 za2lB8J(&*l#(V}Id8SyQ0C(2amzkz3EqG&Ed0Jq1)$|&>4_|NIe=5|n=3?siFV0fI z{As5DLW^gs|B-b4C;Hd(SM-S~GQhzb>HgF2|2Usww0nL^;x@1eaB)=+Clj+$fF@H( z-fqP??~QMT$KI-#m;QC*&6vkp&8699G3)Bq0*kFZXINw=b9OVaed(3(3kS|IZ)CM? zJdnW&%t8MveBuK21uiYj)_a{Fnw0OErMzMN?d$QoPwkhOwcP&p+t>P)4tHlYw-pPN z^oJ=uc$Sl>pv@fZH~ZqxSvdhF@F1s=oZawpr^-#l{IIOGG=T%QXjtwPhIg-F@k@uIlr?J->Ia zpEUQ*=4g|XYn4Gez&aHr*;t$u3oODPmc2Ku)2Og|xjc%w;q!Zz+zY)*3{7V8bK4;& zYV82FZ+8?v)`J|G1w4I0fWdKg|2b#iaazCv;|?(W-q}$o&Y}Q5d@BRk^jL7#{kbCK zSgkyu;=DV+or2)AxCBgq-nj5=@n^`%T#V+xBGEkW4lCqrE)LMv#f;AvD__cQ@Eg3`~x| zW+h9mofSXCq5|M)9|ez(#X?-sxB%Go8};sJ?2abp(Y!lyi>k)|{M*Z$c{e1-K4ky` MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/web/index.html b/freezed_provider_value_notifier/web/index.html index 47bbc93b..5ca6c7dc 100644 --- a/freezed_provider_value_notifier/web/index.html +++ b/freezed_provider_value_notifier/web/index.html @@ -1,10 +1,38 @@ + + + - change_notifier_provider + + + + + + + + + + + + + freezed_provider_value_notifier + - + diff --git a/freezed_provider_value_notifier/web/manifest.json b/freezed_provider_value_notifier/web/manifest.json new file mode 100644 index 00000000..73befe34 --- /dev/null +++ b/freezed_provider_value_notifier/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "freezed_provider_value_notifier", + "short_name": "freezed_provider_value_notifier", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/freezed_provider_value_notifier/windows/.gitignore b/freezed_provider_value_notifier/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/freezed_provider_value_notifier/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/freezed_provider_value_notifier/windows/CMakeLists.txt b/freezed_provider_value_notifier/windows/CMakeLists.txt new file mode 100644 index 00000000..2c32cde2 --- /dev/null +++ b/freezed_provider_value_notifier/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(freezed_provider_value_notifier LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "freezed_provider_value_notifier") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/freezed_provider_value_notifier/windows/flutter/CMakeLists.txt b/freezed_provider_value_notifier/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/freezed_provider_value_notifier/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.cc b/freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.h b/freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/freezed_provider_value_notifier/windows/flutter/generated_plugins.cmake b/freezed_provider_value_notifier/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/freezed_provider_value_notifier/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/freezed_provider_value_notifier/windows/runner/CMakeLists.txt b/freezed_provider_value_notifier/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/freezed_provider_value_notifier/windows/runner/Runner.rc b/freezed_provider_value_notifier/windows/runner/Runner.rc new file mode 100644 index 00000000..8a4aafbc --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "freezed_provider_value_notifier" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "freezed_provider_value_notifier" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "freezed_provider_value_notifier.exe" "\0" + VALUE "ProductName", "freezed_provider_value_notifier" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/freezed_provider_value_notifier/windows/runner/flutter_window.cpp b/freezed_provider_value_notifier/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/freezed_provider_value_notifier/windows/runner/flutter_window.h b/freezed_provider_value_notifier/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/freezed_provider_value_notifier/windows/runner/main.cpp b/freezed_provider_value_notifier/windows/runner/main.cpp new file mode 100644 index 00000000..f3df47a2 --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"freezed_provider_value_notifier", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/freezed_provider_value_notifier/windows/runner/resource.h b/freezed_provider_value_notifier/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/freezed_provider_value_notifier/windows/runner/resources/app_icon.ico b/freezed_provider_value_notifier/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/freezed_provider_value_notifier/windows/runner/runner.exe.manifest b/freezed_provider_value_notifier/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/freezed_provider_value_notifier/windows/runner/utils.cpp b/freezed_provider_value_notifier/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/freezed_provider_value_notifier/windows/runner/utils.h b/freezed_provider_value_notifier/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/freezed_provider_value_notifier/windows/runner/win32_window.cpp b/freezed_provider_value_notifier/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/freezed_provider_value_notifier/windows/runner/win32_window.h b/freezed_provider_value_notifier/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/freezed_provider_value_notifier/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 912b8f43fa5aee4fe335a7b62d41ddf6e15df067 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 15:51:30 +0100 Subject: [PATCH 75/89] Add bloc and freezed value to CI --- .../workflows/static_analysis_and_tests.yml | 33 +++++++++++++++++++ vanilla/lib/widgets/filter_button.dart | 4 +-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index a90076e3..c2a6f809 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -8,6 +8,28 @@ on: - refresh jobs: + bloc_flutter: + name: bloc_flutter + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./bloc_flutter + blocs: + name: blocs + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/dart_analysis_and_tests + with: + working-directory: ./blocs change_notifier_provider: name: change_notifier_provider runs-on: ubuntu-latest @@ -19,6 +41,17 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./change_notifier_provider + freezed_provider_value_notifier: + name: freezed_provider_value_notifier + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./freezed_provider_value_notifier inherited_widget: name: inherited_widget runs-on: ubuntu-latest diff --git a/vanilla/lib/widgets/filter_button.dart b/vanilla/lib/widgets/filter_button.dart index 8289a589..81596bc5 100644 --- a/vanilla/lib/widgets/filter_button.dart +++ b/vanilla/lib/widgets/filter_button.dart @@ -23,8 +23,8 @@ class FilterButton extends StatelessWidget { final button = _Button( onSelected: onSelected, activeFilter: activeFilter, - activeStyle: activeStyle!, - defaultStyle: defaultStyle!, + activeStyle: activeStyle, + defaultStyle: defaultStyle, ); return AnimatedOpacity( From 3b729b223d2c8a04d1d901972efe8235ad1a46a3 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 17:39:19 +0100 Subject: [PATCH 76/89] Update bloc_library sample --- .../workflows/static_analysis_and_tests.yml | 11 + bloc_flutter/macos/Podfile.lock | 30 - .../macos/Runner.xcodeproj/project.pbxproj | 98 +-- .../contents.xcworkspacedata | 3 - bloc_library/.metadata | 39 +- bloc_library/analysis_options.yaml | 34 + bloc_library/android/app/build.gradle.kts | 44 + .../res/drawable-v21/launch_background.xml | 12 + .../app/src/main/res/values-night/styles.xml | 18 + bloc_library/android/build.gradle.kts | 24 + bloc_library/android/settings.gradle.kts | 26 + bloc_library/integration_test/app_test.dart | 19 + .../Flutter/ephemeral/flutter_lldb_helper.py | 32 + .../ios/Flutter/ephemeral/flutter_lldbinit | 5 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../ios/RunnerTests/RunnerTests.swift | 12 + bloc_library/lib/app.dart | 62 ++ bloc_library/lib/blocs/blocs.dart | 2 +- .../filtered_todos/filtered_todos_bloc.dart | 65 +- .../lib/blocs/simple_bloc_delegate.dart | 23 - .../lib/blocs/simple_bloc_observer.dart | 28 + bloc_library/lib/blocs/stats/stats_bloc.dart | 36 +- bloc_library/lib/blocs/tab/tab_bloc.dart | 14 +- bloc_library/lib/blocs/todos/todos_bloc.dart | 59 +- bloc_library/lib/blocs/todos/todos_state.dart | 6 +- bloc_library/lib/localization.dart | 2 +- bloc_library/lib/main.dart | 24 +- bloc_library/lib/main_web.dart | 17 - bloc_library/lib/models/todo.dart | 13 +- bloc_library/lib/run_app.dart | 66 -- bloc_library/lib/screens/add_edit_screen.dart | 35 +- bloc_library/lib/screens/details_screen.dart | 17 +- bloc_library/lib/screens/home_screen.dart | 12 +- .../lib/widgets/delete_todo_snack_bar.dart | 30 +- bloc_library/lib/widgets/extra_actions.dart | 10 +- bloc_library/lib/widgets/filter_button.dart | 22 +- bloc_library/lib/widgets/filtered_todos.dart | 18 +- .../lib/widgets/loading_indicator.dart | 2 +- bloc_library/lib/widgets/stats.dart | 4 +- bloc_library/lib/widgets/tab_selector.dart | 21 +- bloc_library/lib/widgets/todo_item.dart | 20 +- bloc_library/linux/.gitignore | 1 + bloc_library/linux/CMakeLists.txt | 128 +++ bloc_library/linux/flutter/CMakeLists.txt | 88 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + bloc_library/linux/runner/CMakeLists.txt | 26 + bloc_library/linux/runner/main.cc | 6 + bloc_library/linux/runner/my_application.cc | 144 ++++ bloc_library/linux/runner/my_application.h | 18 + bloc_library/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 14 + bloc_library/macos/Podfile | 42 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + bloc_library/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + bloc_library/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + bloc_library/pubspec.yaml | 24 +- bloc_library/test/all_tests.dart | 2 +- .../test/blocs/filtered_todos_bloc_test.dart | 35 +- ...st.dart => simple_bloc_observer_test.dart} | 28 +- bloc_library/test/blocs/stats_bloc_test.dart | 24 +- bloc_library/test/blocs/tab_bloc_test.dart | 8 +- bloc_library/test/blocs/todos_bloc_test.dart | 59 +- bloc_library/test/blocs/todos_event_test.dart | 8 +- bloc_library/test/blocs/todos_state_test.dart | 6 +- bloc_library/test/localization_test.dart | 8 +- .../test/screens/add_edit_screen_test.dart | 8 +- .../test/screens/details_screen_test.dart | 42 +- .../test/screens/home_screen_test.dart | 34 +- .../widgets/delete_todo_snack_bar_test.dart | 10 +- .../test/widgets/extra_actions_test.dart | 36 +- .../test/widgets/filter_button_test.dart | 26 +- .../test/widgets/filtered_todos_test.dart | 115 ++- bloc_library/test/widgets/stats_tab_test.dart | 40 +- .../test/widgets/tab_selector_test.dart | 10 +- .../test_driver/integration_test.dart | 3 + bloc_library/test_driver/todo_app.dart | 8 - bloc_library/test_driver/todo_app_test.dart | 5 - bloc_library/web/favicon.png | Bin 0 -> 917 bytes bloc_library/web/icons/Icon-192.png | Bin 0 -> 5292 bytes bloc_library/web/icons/Icon-512.png | Bin 0 -> 8252 bytes bloc_library/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes bloc_library/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes bloc_library/web/manifest.json | 35 + bloc_library/windows/.gitignore | 17 + bloc_library/windows/CMakeLists.txt | 108 +++ bloc_library/windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + bloc_library/windows/runner/CMakeLists.txt | 40 + bloc_library/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ bloc_library/windows/runner/flutter_window.h | 33 + bloc_library/windows/runner/main.cpp | 43 + bloc_library/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + bloc_library/windows/runner/utils.cpp | 65 ++ bloc_library/windows/runner/utils.h | 19 + bloc_library/windows/runner/win32_window.cpp | 288 +++++++ bloc_library/windows/runner/win32_window.h | 102 +++ 130 files changed, 3966 insertions(+), 737 deletions(-) delete mode 100644 bloc_flutter/macos/Podfile.lock create mode 100644 bloc_library/analysis_options.yaml create mode 100644 bloc_library/android/app/build.gradle.kts create mode 100644 bloc_library/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 bloc_library/android/app/src/main/res/values-night/styles.xml create mode 100644 bloc_library/android/build.gradle.kts create mode 100644 bloc_library/android/settings.gradle.kts create mode 100644 bloc_library/integration_test/app_test.dart create mode 100644 bloc_library/ios/Flutter/ephemeral/flutter_lldb_helper.py create mode 100644 bloc_library/ios/Flutter/ephemeral/flutter_lldbinit create mode 100644 bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 bloc_library/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_library/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 bloc_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 bloc_library/ios/RunnerTests/RunnerTests.swift create mode 100644 bloc_library/lib/app.dart delete mode 100644 bloc_library/lib/blocs/simple_bloc_delegate.dart create mode 100644 bloc_library/lib/blocs/simple_bloc_observer.dart delete mode 100644 bloc_library/lib/main_web.dart delete mode 100644 bloc_library/lib/run_app.dart create mode 100644 bloc_library/linux/.gitignore create mode 100644 bloc_library/linux/CMakeLists.txt create mode 100644 bloc_library/linux/flutter/CMakeLists.txt create mode 100644 bloc_library/linux/flutter/generated_plugin_registrant.cc create mode 100644 bloc_library/linux/flutter/generated_plugin_registrant.h create mode 100644 bloc_library/linux/flutter/generated_plugins.cmake create mode 100644 bloc_library/linux/runner/CMakeLists.txt create mode 100644 bloc_library/linux/runner/main.cc create mode 100644 bloc_library/linux/runner/my_application.cc create mode 100644 bloc_library/linux/runner/my_application.h create mode 100644 bloc_library/macos/.gitignore create mode 100644 bloc_library/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 bloc_library/macos/Flutter/Flutter-Release.xcconfig create mode 100644 bloc_library/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 bloc_library/macos/Podfile create mode 100644 bloc_library/macos/Runner.xcodeproj/project.pbxproj create mode 100644 bloc_library/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_library/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 bloc_library/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 bloc_library/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 bloc_library/macos/Runner/AppDelegate.swift create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 bloc_library/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 bloc_library/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 bloc_library/macos/Runner/Configs/Debug.xcconfig create mode 100644 bloc_library/macos/Runner/Configs/Release.xcconfig create mode 100644 bloc_library/macos/Runner/Configs/Warnings.xcconfig create mode 100644 bloc_library/macos/Runner/DebugProfile.entitlements create mode 100644 bloc_library/macos/Runner/Info.plist create mode 100644 bloc_library/macos/Runner/MainFlutterWindow.swift create mode 100644 bloc_library/macos/Runner/Release.entitlements create mode 100644 bloc_library/macos/RunnerTests/RunnerTests.swift rename bloc_library/test/blocs/{simple_bloc_delegate_test.dart => simple_bloc_observer_test.dart} (64%) create mode 100644 bloc_library/test_driver/integration_test.dart delete mode 100644 bloc_library/test_driver/todo_app.dart delete mode 100644 bloc_library/test_driver/todo_app_test.dart create mode 100644 bloc_library/web/favicon.png create mode 100644 bloc_library/web/icons/Icon-192.png create mode 100644 bloc_library/web/icons/Icon-512.png create mode 100644 bloc_library/web/icons/Icon-maskable-192.png create mode 100644 bloc_library/web/icons/Icon-maskable-512.png create mode 100644 bloc_library/web/manifest.json create mode 100644 bloc_library/windows/.gitignore create mode 100644 bloc_library/windows/CMakeLists.txt create mode 100644 bloc_library/windows/flutter/CMakeLists.txt create mode 100644 bloc_library/windows/flutter/generated_plugin_registrant.cc create mode 100644 bloc_library/windows/flutter/generated_plugin_registrant.h create mode 100644 bloc_library/windows/flutter/generated_plugins.cmake create mode 100644 bloc_library/windows/runner/CMakeLists.txt create mode 100644 bloc_library/windows/runner/Runner.rc create mode 100644 bloc_library/windows/runner/flutter_window.cpp create mode 100644 bloc_library/windows/runner/flutter_window.h create mode 100644 bloc_library/windows/runner/main.cpp create mode 100644 bloc_library/windows/runner/resource.h create mode 100644 bloc_library/windows/runner/resources/app_icon.ico create mode 100644 bloc_library/windows/runner/runner.exe.manifest create mode 100644 bloc_library/windows/runner/utils.cpp create mode 100644 bloc_library/windows/runner/utils.h create mode 100644 bloc_library/windows/runner/win32_window.cpp create mode 100644 bloc_library/windows/runner/win32_window.h diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index c2a6f809..fb2e79c8 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -19,6 +19,17 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./bloc_flutter + bloc_library: + name: bloc_library + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Static Analysis & Tests + uses: ./.github/actions/flutter_analysis_and_tests + with: + working-directory: ./bloc_library blocs: name: blocs runs-on: ubuntu-latest diff --git a/bloc_flutter/macos/Podfile.lock b/bloc_flutter/macos/Podfile.lock deleted file mode 100644 index d2f9a639..00000000 --- a/bloc_flutter/macos/Podfile.lock +++ /dev/null @@ -1,30 +0,0 @@ -PODS: - - FlutterMacOS (1.0.0) - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - -DEPENDENCIES: - - FlutterMacOS (from `Flutter/ephemeral`) - - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - -EXTERNAL SOURCES: - FlutterMacOS: - :path: Flutter/ephemeral - path_provider_foundation: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin - shared_preferences_foundation: - :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin - -SPEC CHECKSUMS: - FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - -PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 - -COCOAPODS: 1.16.2 diff --git a/bloc_flutter/macos/Runner.xcodeproj/project.pbxproj b/bloc_flutter/macos/Runner.xcodeproj/project.pbxproj index 06cdf2f7..5a57ad02 100644 --- a/bloc_flutter/macos/Runner.xcodeproj/project.pbxproj +++ b/bloc_flutter/macos/Runner.xcodeproj/project.pbxproj @@ -27,8 +27,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - D53CF80310E427553F2B5122 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86C33D27F7A36B797D624F49 /* Pods_Runner.framework */; }; - FD3C53F535D56A2AF014A56E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06E4ECD8ED1C23E7CA1E8124 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,13 +60,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 02E7666704FD698876354E1C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - 06E4ECD8ED1C23E7CA1E8124 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = bloc_flutter_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "bloc_flutter_sample.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -80,14 +76,8 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 45D5CEBA2CD926A877067859 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - 4D6093C6D01C7E816D779EFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 590DE9794D74BF49F5D05D9A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 6DD95F229AC319A80B34E650 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 86C33D27F7A36B797D624F49 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D37885EF4E7C39A206B12D27 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +85,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FD3C53F535D56A2AF014A56E /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +92,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D53CF80310E427553F2B5122 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +125,6 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - E8CF0382FE46026A64804992 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +175,10 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 86C33D27F7A36B797D624F49 /* Pods_Runner.framework */, - 06E4ECD8ED1C23E7CA1E8124 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - E8CF0382FE46026A64804992 /* Pods */ = { - isa = PBXGroup; - children = ( - 4D6093C6D01C7E816D779EFE /* Pods-Runner.debug.xcconfig */, - 6DD95F229AC319A80B34E650 /* Pods-Runner.release.xcconfig */, - D37885EF4E7C39A206B12D27 /* Pods-Runner.profile.xcconfig */, - 590DE9794D74BF49F5D05D9A /* Pods-RunnerTests.debug.xcconfig */, - 45D5CEBA2CD926A877067859 /* Pods-RunnerTests.release.xcconfig */, - 02E7666704FD698876354E1C /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +186,6 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - D79B4BC5FF2E841103C3FD8D /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +204,11 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E1CF2FCE47390FE1155F83FE /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 9A29188E7DA4AD9B0569C6C5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -361,67 +329,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 9A29188E7DA4AD9B0569C6C5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - D79B4BC5FF2E841103C3FD8D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - E1CF2FCE47390FE1155F83FE /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -473,7 +380,6 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 590DE9794D74BF49F5D05D9A /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +394,6 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 45D5CEBA2CD926A877067859 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +408,6 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 02E7666704FD698876354E1C /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata b/bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata index 21a3cc14..1d526a16 100644 --- a/bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,7 +4,4 @@ - - diff --git a/bloc_library/.metadata b/bloc_library/.metadata index 1b5cec02..05a8ab44 100644 --- a/bloc_library/.metadata +++ b/bloc_library/.metadata @@ -4,7 +4,42 @@ # This file should be version controlled and should not be manually edited. version: - revision: 27321ebbad34b0a3fafe99fac037102196d655ff - channel: stable + revision: "05db9689081f091050f01aed79f04dce0c750154" + channel: "stable" project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: android + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: ios + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: linux + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: macos + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: web + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + - platform: windows + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/bloc_library/analysis_options.yaml b/bloc_library/analysis_options.yaml new file mode 100644 index 00000000..134f2137 --- /dev/null +++ b/bloc_library/analysis_options.yaml @@ -0,0 +1,34 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/bloc_library/android/app/build.gradle.kts b/bloc_library/android/app/build.gradle.kts new file mode 100644 index 00000000..fd6e34c9 --- /dev/null +++ b/bloc_library/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.example.bloc_library" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.bloc_library" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/bloc_library/android/app/src/main/res/drawable-v21/launch_background.xml b/bloc_library/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/bloc_library/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/bloc_library/android/app/src/main/res/values-night/styles.xml b/bloc_library/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/bloc_library/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/bloc_library/android/build.gradle.kts b/bloc_library/android/build.gradle.kts new file mode 100644 index 00000000..dbee657b --- /dev/null +++ b/bloc_library/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/bloc_library/android/settings.gradle.kts b/bloc_library/android/settings.gradle.kts new file mode 100644 index 00000000..fb605bc8 --- /dev/null +++ b/bloc_library/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false +} + +include(":app") diff --git a/bloc_library/integration_test/app_test.dart b/bloc_library/integration_test/app_test.dart new file mode 100644 index 00000000..6af7a098 --- /dev/null +++ b/bloc_library/integration_test/app_test.dart @@ -0,0 +1,19 @@ +import 'package:bloc_library/app.dart'; +import 'package:integration_tests/integration_tests.dart' as integration_tests; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; + +void main() { + integration_tests.run( + appBuilder: () async { + return TodosApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'bloc_library_test_${DateTime.now().toIso8601String()}', + await SharedPreferences.getInstance(), + ), + ), + ); + }, + ); +} diff --git a/bloc_library/ios/Flutter/ephemeral/flutter_lldb_helper.py b/bloc_library/ios/Flutter/ephemeral/flutter_lldb_helper.py new file mode 100644 index 00000000..a88caf99 --- /dev/null +++ b/bloc_library/ios/Flutter/ephemeral/flutter_lldb_helper.py @@ -0,0 +1,32 @@ +# +# Generated file, do not edit. +# + +import lldb + +def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict): + """Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages.""" + base = frame.register["x0"].GetValueAsAddress() + page_len = frame.register["x1"].GetValueAsUnsigned() + + # Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the + # first page to see if handled it correctly. This makes diagnosing + # misconfiguration (e.g. missing breakpoint) easier. + data = bytearray(page_len) + data[0:8] = b'IHELPED!' + + error = lldb.SBError() + frame.GetThread().GetProcess().WriteMemory(base, data, error) + if not error.Success(): + print(f'Failed to write into {base}[+{page_len}]', error) + return + +def __lldb_init_module(debugger: lldb.SBDebugger, _): + target = debugger.GetDummyTarget() + # Caveat: must use BreakpointCreateByRegEx here and not + # BreakpointCreateByName. For some reasons callback function does not + # get carried over from dummy target for the later. + bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$") + bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__)) + bp.SetAutoContinue(True) + print("-- LLDB integration loaded --") diff --git a/bloc_library/ios/Flutter/ephemeral/flutter_lldbinit b/bloc_library/ios/Flutter/ephemeral/flutter_lldbinit new file mode 100644 index 00000000..e3ba6fbe --- /dev/null +++ b/bloc_library/ios/Flutter/ephemeral/flutter_lldbinit @@ -0,0 +1,5 @@ +# +# Generated file, do not edit. +# + +command script import --relative-to-command-file flutter_lldb_helper.py diff --git a/bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/bloc_library/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_library/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_library/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_library/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/bloc_library/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/bloc_library/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/bloc_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/bloc_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 + create: (context) { + return TodosBloc(todosRepository: repository)..add(LoadTodos()); + }, + child: MaterialApp( + onGenerateTitle: (context) => + FlutterBlocLocalizations.of(context).appTitle, + theme: ArchSampleTheme.theme, + localizationsDelegates: [ + ArchSampleLocalizationsDelegate(), + FlutterBlocLocalizationsDelegate(), + ], + routes: { + ArchSampleRoutes.home: (context) { + return MultiBlocProvider( + providers: [ + BlocProvider(create: (context) => TabBloc()), + BlocProvider( + create: (context) => FilteredTodosBloc( + todosBloc: BlocProvider.of(context), + ), + ), + BlocProvider( + create: (context) => + StatsBloc(todosBloc: BlocProvider.of(context)), + ), + ], + child: HomeScreen(), + ); + }, + ArchSampleRoutes.addTodo: (context) { + return AddEditScreen( + key: ArchSampleKeys.addTodoScreen, + onSave: (task, note) { + BlocProvider.of( + context, + ).add(AddTodo(Todo(task, note: note))); + }, + isEditing: false, + ); + }, + }, + ), + ); + } +} diff --git a/bloc_library/lib/blocs/blocs.dart b/bloc_library/lib/blocs/blocs.dart index 21c9a2bd..c749033b 100644 --- a/bloc_library/lib/blocs/blocs.dart +++ b/bloc_library/lib/blocs/blocs.dart @@ -2,4 +2,4 @@ export './filtered_todos/filtered_todos.dart'; export './stats/stats.dart'; export './tab/tab.dart'; export './todos/todos.dart'; -export './simple_bloc_delegate.dart'; +export 'simple_bloc_observer.dart'; diff --git a/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart b/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart index 630976bc..7351cd60 100644 --- a/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart +++ b/bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart @@ -1,65 +1,60 @@ import 'dart:async'; + import 'package:bloc/bloc.dart'; -import 'package:meta/meta.dart'; import 'package:bloc_library/blocs/filtered_todos/filtered_todos.dart'; import 'package:bloc_library/blocs/todos/todos.dart'; import 'package:bloc_library/models/models.dart'; class FilteredTodosBloc extends Bloc { final TodosBloc todosBloc; - StreamSubscription todosSubscription; + late final StreamSubscription todosSubscription; - FilteredTodosBloc({@required this.todosBloc}) { - todosSubscription = todosBloc.listen((state) { + FilteredTodosBloc({required this.todosBloc}) + : super( + todosBloc.state is TodosLoaded + ? FilteredTodosLoaded( + (todosBloc.state as TodosLoaded).todos, + VisibilityFilter.all, + ) + : FilteredTodosLoading(), + ) { + todosSubscription = todosBloc.stream.listen((state) { if (state is TodosLoaded) { add(UpdateTodos(state.todos)); } }); - } - - @override - FilteredTodosState get initialState { - return todosBloc.state is TodosLoaded - ? FilteredTodosLoaded( - (todosBloc.state as TodosLoaded).todos, - VisibilityFilter.all, - ) - : FilteredTodosLoading(); - } - @override - Stream mapEventToState(FilteredTodosEvent event) async* { - if (event is UpdateFilter) { - yield* _mapUpdateFilterToState(event); - } else if (event is UpdateTodos) { - yield* _mapTodosUpdatedToState(event); - } + on(_onUpdateFilter); + on(_onUpdateTodos); } - Stream _mapUpdateFilterToState( - UpdateFilter event, - ) async* { + void _onUpdateFilter(UpdateFilter event, Emitter emit) { if (todosBloc.state is TodosLoaded) { - yield FilteredTodosLoaded( - _mapTodosToFilteredTodos( - (todosBloc.state as TodosLoaded).todos, + emit( + FilteredTodosLoaded( + _mapTodosToFilteredTodos( + (todosBloc.state as TodosLoaded).todos, + event.filter, + ), event.filter, ), - event.filter, ); } } - Stream _mapTodosUpdatedToState(UpdateTodos event) async* { + void _onUpdateTodos(UpdateTodos event, Emitter emit) { final visibilityFilter = state is FilteredTodosLoaded ? (state as FilteredTodosLoaded).activeFilter : VisibilityFilter.all; - yield FilteredTodosLoaded( - _mapTodosToFilteredTodos( - (todosBloc.state as TodosLoaded).todos, + + emit( + FilteredTodosLoaded( + _mapTodosToFilteredTodos( + (todosBloc.state as TodosLoaded).todos, + visibilityFilter, + ), visibilityFilter, ), - visibilityFilter, ); } @@ -80,7 +75,7 @@ class FilteredTodosBloc extends Bloc { @override Future close() { - todosSubscription?.cancel(); + todosSubscription.cancel(); return super.close(); } } diff --git a/bloc_library/lib/blocs/simple_bloc_delegate.dart b/bloc_library/lib/blocs/simple_bloc_delegate.dart deleted file mode 100644 index b38b8727..00000000 --- a/bloc_library/lib/blocs/simple_bloc_delegate.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:bloc/bloc.dart'; - -// We can extend `BlocDelegate` and override `onTransition` and `onError` -// in order to handle transitions and errors from all Blocs. -class SimpleBlocDelegate extends BlocDelegate { - @override - void onEvent(Bloc bloc, Object event) { - super.onEvent(bloc, event); - print(event); - } - - @override - void onTransition(Bloc bloc, Transition transition) { - super.onTransition(bloc, transition); - print(transition); - } - - @override - void onError(Bloc bloc, Object error, StackTrace stacktrace) { - super.onError(bloc, error, stacktrace); - print(error); - } -} diff --git a/bloc_library/lib/blocs/simple_bloc_observer.dart b/bloc_library/lib/blocs/simple_bloc_observer.dart new file mode 100644 index 00000000..d60bdab2 --- /dev/null +++ b/bloc_library/lib/blocs/simple_bloc_observer.dart @@ -0,0 +1,28 @@ +// ignore_for_file: avoid_print + +import 'package:bloc/bloc.dart'; + +// We can extend `BlocObserver` and override `onTransition` and `onError` +// in order to handle transitions and errors from all Blocs. +class SimpleBlocObserver extends BlocObserver { + @override + void onEvent(Bloc bloc, Object? event) { + super.onEvent(bloc, event); + print(event); + } + + @override + void onTransition( + Bloc bloc, + Transition transition, + ) { + super.onTransition(bloc, transition); + print(transition); + } + + @override + void onError(BlocBase bloc, Object error, StackTrace stackTrace) { + super.onError(bloc, error, stackTrace); + print(error); + } +} diff --git a/bloc_library/lib/blocs/stats/stats_bloc.dart b/bloc_library/lib/blocs/stats/stats_bloc.dart index e6b4ae77..e95e63ee 100644 --- a/bloc_library/lib/blocs/stats/stats_bloc.dart +++ b/bloc_library/lib/blocs/stats/stats_bloc.dart @@ -1,37 +1,41 @@ import 'dart:async'; -import 'package:meta/meta.dart'; + import 'package:bloc/bloc.dart'; import 'package:bloc_library/blocs/blocs.dart'; +import 'package:bloc_library/models/todo.dart'; class StatsBloc extends Bloc { final TodosBloc todosBloc; - StreamSubscription todosSubscription; + late final StreamSubscription todosSubscription; - StatsBloc({@required this.todosBloc}) { - todosSubscription = todosBloc.listen((state) { + StatsBloc({required this.todosBloc}) + : super( + todosBloc.state is TodosLoaded + ? _mapTodosToStats((todosBloc.state as TodosLoaded).todos) + : StatsLoaded(0, 0), + ) { + todosSubscription = todosBloc.stream.listen((state) { if (state is TodosLoaded) { add(UpdateStats(state.todos)); } }); + + on(_onUpdateStats); } - @override - StatsState get initialState => StatsLoading(); + void _onUpdateStats(UpdateStats event, Emitter emit) { + emit(_mapTodosToStats(event.todos)); + } - @override - Stream mapEventToState(StatsEvent event) async* { - if (event is UpdateStats) { - var numActive = - event.todos.where((todo) => !todo.complete).toList().length; - var numCompleted = - event.todos.where((todo) => todo.complete).toList().length; - yield StatsLoaded(numActive, numCompleted); - } + static StatsLoaded _mapTodosToStats(List todos) { + var numActive = todos.where((todo) => !todo.complete).toList().length; + var numCompleted = todos.where((todo) => todo.complete).toList().length; + return StatsLoaded(numActive, numCompleted); } @override Future close() { - todosSubscription?.cancel(); + todosSubscription.cancel(); return super.close(); } } diff --git a/bloc_library/lib/blocs/tab/tab_bloc.dart b/bloc_library/lib/blocs/tab/tab_bloc.dart index 8dd6c515..d98fefe1 100644 --- a/bloc_library/lib/blocs/tab/tab_bloc.dart +++ b/bloc_library/lib/blocs/tab/tab_bloc.dart @@ -1,17 +1,13 @@ -import 'dart:async'; - import 'package:bloc/bloc.dart'; import 'package:bloc_library/blocs/tab/tab.dart'; import 'package:bloc_library/models/models.dart'; class TabBloc extends Bloc { - @override - AppTab get initialState => AppTab.todos; + TabBloc() : super(AppTab.todos) { + on(_onUpdateTab); + } - @override - Stream mapEventToState(TabEvent event) async* { - if (event is UpdateTab) { - yield event.tab; - } + void _onUpdateTab(UpdateTab event, Emitter emit) { + emit(event.tab); } } diff --git a/bloc_library/lib/blocs/todos/todos_bloc.dart b/bloc_library/lib/blocs/todos/todos_bloc.dart index 16c10367..88f0681e 100644 --- a/bloc_library/lib/blocs/todos/todos_bloc.dart +++ b/bloc_library/lib/blocs/todos/todos_bloc.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; -import 'package:meta/meta.dart'; import 'package:bloc_library/blocs/todos/todos.dart'; import 'package:bloc_library/models/models.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -9,67 +8,54 @@ import 'package:todos_repository_core/todos_repository_core.dart'; class TodosBloc extends Bloc { final TodosRepository todosRepository; - TodosBloc({@required this.todosRepository}); - - @override - TodosState get initialState => TodosLoading(); - - @override - Stream mapEventToState(TodosEvent event) async* { - if (event is LoadTodos) { - yield* _mapLoadTodosToState(); - } else if (event is AddTodo) { - yield* _mapAddTodoToState(event); - } else if (event is UpdateTodo) { - yield* _mapUpdateTodoToState(event); - } else if (event is DeleteTodo) { - yield* _mapDeleteTodoToState(event); - } else if (event is ToggleAll) { - yield* _mapToggleAllToState(); - } else if (event is ClearCompleted) { - yield* _mapClearCompletedToState(); - } + TodosBloc({required this.todosRepository}) : super(const TodosLoading()) { + on(_onLoadTodos); + on(_onAddTodo); + on(_onUpdateTodo); + on(_onDeleteTodo); + on(_onToggleAll); + on(_onClearCompleted); } - Stream _mapLoadTodosToState() async* { + Future _onLoadTodos(LoadTodos event, Emitter emit) async { try { final todos = await todosRepository.loadTodos(); - yield TodosLoaded(todos.map(Todo.fromEntity).toList()); + emit(TodosLoaded(todos.map(Todo.fromEntity).toList())); } catch (_) { - yield TodosNotLoaded(); + emit(TodosNotLoaded()); } } - Stream _mapAddTodoToState(AddTodo event) async* { + Future _onAddTodo(AddTodo event, Emitter emit) async { if (state is TodosLoaded) { final updatedTodos = List.from((state as TodosLoaded).todos) ..add(event.todo); - yield TodosLoaded(updatedTodos); + emit(TodosLoaded(updatedTodos)); await _saveTodos(updatedTodos); } } - Stream _mapUpdateTodoToState(UpdateTodo event) async* { + Future _onUpdateTodo(UpdateTodo event, Emitter emit) async { if (state is TodosLoaded) { final updatedTodos = (state as TodosLoaded).todos.map((todo) { return todo.id == event.updatedTodo.id ? event.updatedTodo : todo; }).toList(); - yield TodosLoaded(updatedTodos); + emit(TodosLoaded(updatedTodos)); await _saveTodos(updatedTodos); } } - Stream _mapDeleteTodoToState(DeleteTodo event) async* { + Future _onDeleteTodo(DeleteTodo event, Emitter emit) async { if (state is TodosLoaded) { final updatedTodos = (state as TodosLoaded).todos .where((todo) => todo.id != event.todo.id) .toList(); - yield TodosLoaded(updatedTodos); + emit(TodosLoaded(updatedTodos)); await _saveTodos(updatedTodos); } } - Stream _mapToggleAllToState() async* { + Future _onToggleAll(ToggleAll event, Emitter emit) async { if (state is TodosLoaded) { final allComplete = (state as TodosLoaded).todos.every( (todo) => todo.complete, @@ -77,22 +63,25 @@ class TodosBloc extends Bloc { final updatedTodos = (state as TodosLoaded).todos .map((todo) => todo.copyWith(complete: !allComplete)) .toList(); - yield TodosLoaded(updatedTodos); + emit(TodosLoaded(updatedTodos)); await _saveTodos(updatedTodos); } } - Stream _mapClearCompletedToState() async* { + Future _onClearCompleted( + ClearCompleted event, + Emitter emit, + ) async { if (state is TodosLoaded) { final updatedTodos = (state as TodosLoaded).todos .where((todo) => !todo.complete) .toList(); - yield TodosLoaded(updatedTodos); + emit(TodosLoaded(updatedTodos)); await _saveTodos(updatedTodos); } } - Future _saveTodos(List todos) { + Future _saveTodos(List todos) { return todosRepository.saveTodos( todos.map((todo) => todo.toEntity()).toList(), ); diff --git a/bloc_library/lib/blocs/todos/todos_state.dart b/bloc_library/lib/blocs/todos/todos_state.dart index 0830df43..a35de235 100644 --- a/bloc_library/lib/blocs/todos/todos_state.dart +++ b/bloc_library/lib/blocs/todos/todos_state.dart @@ -1,5 +1,5 @@ -import 'package:equatable/equatable.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:equatable/equatable.dart'; abstract class TodosState extends Equatable { const TodosState(); @@ -8,7 +8,9 @@ abstract class TodosState extends Equatable { List get props => []; } -class TodosLoading extends TodosState {} +class TodosLoading extends TodosState { + const TodosLoading(); +} class TodosLoaded extends TodosState { final List todos; diff --git a/bloc_library/lib/localization.dart b/bloc_library/lib/localization.dart index 84c3f7f2..61aae636 100644 --- a/bloc_library/lib/localization.dart +++ b/bloc_library/lib/localization.dart @@ -7,7 +7,7 @@ class FlutterBlocLocalizations { return Localizations.of( context, FlutterBlocLocalizations, - ); + )!; } String get appTitle => 'Bloc Library Example'; diff --git a/bloc_library/lib/main.dart b/bloc_library/lib/main.dart index 4ba559f3..fdbfa43b 100644 --- a/bloc_library/lib/main.dart +++ b/bloc_library/lib/main.dart @@ -1,16 +1,26 @@ -import 'package:bloc_library/run_app.dart'; +import 'package:bloc/bloc.dart'; +import 'package:bloc_library/app.dart'; +import 'package:bloc_library/blocs/simple_bloc_observer.dart'; import 'package:flutter/cupertino.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); - runBlocLibraryApp(LocalStorageRepository( - localStorage: KeyValueStorage( - 'bloc_library', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + // BlocObserver oversees Blocs and delegates to BlocDelegate. + // We can set the BlocSupervisor's delegate to an instance of `SimpleBlocDelegate`. + // This will allow us to handle all transitions and errors in SimpleBlocDelegate. + Bloc.observer = SimpleBlocObserver(); + + runApp( + TodosApp( + repository: LocalStorageRepository( + localStorage: KeyValueStorage( + 'bloc_library', + await SharedPreferences.getInstance(), + ), + ), ), - )); + ); } diff --git a/bloc_library/lib/main_web.dart b/bloc_library/lib/main_web.dart deleted file mode 100644 index 8d500a2d..00000000 --- a/bloc_library/lib/main_web.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'dart:html'; - -import 'package:bloc_library/run_app.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runBlocLibraryApp(LocalStorageRepository( - localStorage: KeyValueStorage( - 'bloc_library', - WebKeyValueStore(window.localStorage), - ), - )); -} diff --git a/bloc_library/lib/models/todo.dart b/bloc_library/lib/models/todo.dart index 84dadd81..ccdf3cbd 100644 --- a/bloc_library/lib/models/todo.dart +++ b/bloc_library/lib/models/todo.dart @@ -1,5 +1,5 @@ -import 'package:todos_app_core/todos_app_core.dart'; import 'package:meta/meta.dart'; +import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @immutable @@ -9,11 +9,10 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, String note = '', String id}) - : note = note ?? '', - id = id ?? Uuid().generateV4(); + Todo(this.task, {this.complete = false, this.note = '', String? id}) + : id = id ?? Uuid().generateV4(); - Todo copyWith({bool complete, String id, String note, String task}) { + Todo copyWith({bool? complete, String? id, String? note, String? task}) { return Todo( task ?? this.task, complete: complete ?? this.complete, @@ -48,9 +47,9 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, - id: entity.id ?? Uuid().generateV4(), + id: entity.id, ); } } diff --git a/bloc_library/lib/run_app.dart b/bloc_library/lib/run_app.dart deleted file mode 100644 index b1505bbb..00000000 --- a/bloc_library/lib/run_app.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:bloc/bloc.dart'; -import 'package:bloc_library/blocs/blocs.dart'; -import 'package:bloc_library/localization.dart'; -import 'package:bloc_library/models/models.dart'; -import 'package:bloc_library/screens/screens.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; - -void runBlocLibraryApp(TodosRepository repository) { - // BlocSupervisor oversees Blocs and delegates to BlocDelegate. - // We can set the BlocSupervisor's delegate to an instance of `SimpleBlocDelegate`. - // This will allow us to handle all transitions and errors in SimpleBlocDelegate. - BlocSupervisor.delegate = SimpleBlocDelegate(); - runApp( - BlocProvider( - create: (context) { - return TodosBloc(todosRepository: repository)..add(LoadTodos()); - }, - child: TodosApp(), - ), - ); -} - -class TodosApp extends StatelessWidget { - @override - Widget build(BuildContext context) { - final todosBloc = BlocProvider.of(context); - - return MaterialApp( - onGenerateTitle: (context) => - FlutterBlocLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), - ], - routes: { - ArchSampleRoutes.home: (context) { - return MultiBlocProvider( - providers: [ - BlocProvider(create: (context) => TabBloc()), - BlocProvider( - create: (context) => FilteredTodosBloc(todosBloc: todosBloc), - ), - BlocProvider( - create: (context) => StatsBloc(todosBloc: todosBloc), - ), - ], - child: HomeScreen(), - ); - }, - ArchSampleRoutes.addTodo: (context) { - return AddEditScreen( - key: ArchSampleKeys.addTodoScreen, - onSave: (task, note) { - todosBloc.add(AddTodo(Todo(task, note: note))); - }, - isEditing: false, - ); - }, - }, - ); - } -} diff --git a/bloc_library/lib/screens/add_edit_screen.dart b/bloc_library/lib/screens/add_edit_screen.dart index c531e8cd..3ac58e90 100644 --- a/bloc_library/lib/screens/add_edit_screen.dart +++ b/bloc_library/lib/screens/add_edit_screen.dart @@ -1,5 +1,4 @@ import 'package:bloc_library/models/models.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -8,24 +7,24 @@ typedef OnSaveCallback = void Function(String task, String note); class AddEditScreen extends StatefulWidget { final bool isEditing; final OnSaveCallback onSave; - final Todo todo; + final Todo? todo; - AddEditScreen({ - Key key, - @required this.onSave, - @required this.isEditing, + const AddEditScreen({ + super.key = ArchSampleKeys.addTodoScreen, + required this.onSave, + required this.isEditing, this.todo, - }) : super(key: key ?? ArchSampleKeys.addTodoScreen); + }); @override - _AddEditScreenState createState() => _AddEditScreenState(); + AddEditScreenState createState() => AddEditScreenState(); } -class _AddEditScreenState extends State { +class AddEditScreenState extends State { static final GlobalKey _formKey = GlobalKey(); - String _task; - String _note; + late String _task; + late String _note; bool get isEditing => widget.isEditing; @@ -45,7 +44,7 @@ class _AddEditScreenState extends State { child: ListView( children: [ TextFormField( - initialValue: isEditing ? widget.todo.task : '', + initialValue: isEditing ? widget.todo!.task : '', key: ArchSampleKeys.taskField, autofocus: !isEditing, style: textTheme.titleLarge, @@ -53,19 +52,19 @@ class _AddEditScreenState extends State { hintText: localizations.newTodoHint, ), validator: (val) { - return val.trim().isEmpty + return val != null && val.trim().isEmpty ? localizations.emptyTodoError : null; }, - onSaved: (value) => _task = value, + onSaved: (value) => _task = value ?? '', ), TextFormField( - initialValue: isEditing ? widget.todo.note : '', + initialValue: isEditing ? widget.todo!.note : '', key: ArchSampleKeys.noteField, maxLines: 10, style: textTheme.titleMedium, decoration: InputDecoration(hintText: localizations.notesHint), - onSaved: (value) => _note = value, + onSaved: (value) => _note = value ?? '', ), ], ), @@ -78,8 +77,8 @@ class _AddEditScreenState extends State { tooltip: isEditing ? localizations.saveChanges : localizations.addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); widget.onSave(_task, _note); Navigator.pop(context); } diff --git a/bloc_library/lib/screens/details_screen.dart b/bloc_library/lib/screens/details_screen.dart index 734f3ebe..34d3bfe7 100644 --- a/bloc_library/lib/screens/details_screen.dart +++ b/bloc_library/lib/screens/details_screen.dart @@ -1,7 +1,7 @@ import 'package:bloc_library/bloc_library_keys.dart'; import 'package:bloc_library/blocs/todos/todos.dart'; import 'package:bloc_library/screens/screens.dart'; -import 'package:flutter/foundation.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -9,8 +9,10 @@ import 'package:todos_app_core/todos_app_core.dart'; class DetailsScreen extends StatelessWidget { final String id; - DetailsScreen({Key key, @required this.id}) - : super(key: key ?? ArchSampleKeys.todoDetailsScreen); + const DetailsScreen({ + super.key = ArchSampleKeys.todoDetailsScreen, + required this.id, + }); @override Widget build(BuildContext context) { @@ -18,9 +20,8 @@ class DetailsScreen extends StatelessWidget { return BlocBuilder( bloc: todosBloc, builder: (BuildContext context, TodosState state) { - final todo = (state as TodosLoaded).todos.firstWhere( + final todo = (state as TodosLoaded).todos.firstWhereOrNull( (todo) => todo.id == id, - orElse: () => null, ); final localizations = ArchSampleLocalizations.of(context); return Scaffold( @@ -32,7 +33,7 @@ class DetailsScreen extends StatelessWidget { key: ArchSampleKeys.deleteTodoButton, icon: Icon(Icons.delete), onPressed: () { - todosBloc.add(DeleteTodo(todo)); + todosBloc.add(DeleteTodo(todo!)); Navigator.pop(context, todo); }, ), @@ -78,7 +79,7 @@ class DetailsScreen extends StatelessWidget { key: ArchSampleKeys.detailsTodoItemTask, style: Theme.of( context, - ).textTheme.headline, + ).textTheme.headlineSmall, ), ), ), @@ -100,7 +101,6 @@ class DetailsScreen extends StatelessWidget { floatingActionButton: FloatingActionButton( key: ArchSampleKeys.editTodoFab, tooltip: localizations.editTodo, - child: Icon(Icons.edit), onPressed: todo == null ? null : () { @@ -123,6 +123,7 @@ class DetailsScreen extends StatelessWidget { ), ); }, + child: Icon(Icons.edit), ), ); }, diff --git a/bloc_library/lib/screens/home_screen.dart b/bloc_library/lib/screens/home_screen.dart index e4834cd3..6325edf7 100644 --- a/bloc_library/lib/screens/home_screen.dart +++ b/bloc_library/lib/screens/home_screen.dart @@ -1,11 +1,11 @@ -import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:bloc_library/blocs/blocs.dart'; -import 'package:bloc_library/widgets/widgets.dart'; +import 'package:bloc_library/blocs/tab/tab.dart'; import 'package:bloc_library/localization.dart'; import 'package:bloc_library/models/models.dart'; -import 'package:bloc_library/blocs/tab/tab.dart'; +import 'package:bloc_library/widgets/widgets.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class HomeScreen extends StatelessWidget { @override @@ -27,8 +27,8 @@ class HomeScreen extends StatelessWidget { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.add), ), bottomNavigationBar: TabSelector( activeTab: activeTab, diff --git a/bloc_library/lib/widgets/delete_todo_snack_bar.dart b/bloc_library/lib/widgets/delete_todo_snack_bar.dart index d9df69ab..cbd115e9 100644 --- a/bloc_library/lib/widgets/delete_todo_snack_bar.dart +++ b/bloc_library/lib/widgets/delete_todo_snack_bar.dart @@ -1,26 +1,22 @@ +import 'package:bloc_library/models/models.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/models/models.dart'; class DeleteTodoSnackBar extends SnackBar { final ArchSampleLocalizations localizations; DeleteTodoSnackBar({ - Key key, - @required Todo todo, - @required VoidCallback onUndo, - @required this.localizations, + super.key, + required Todo todo, + required VoidCallback onUndo, + required this.localizations, + super.duration = const Duration(seconds: 2), }) : super( - key: key, - content: Text( - localizations.todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - duration: Duration(seconds: 2), - action: SnackBarAction( - label: localizations.undo, - onPressed: onUndo, - ), - ); + content: Text( + localizations.todoDeleted(todo.task), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + action: SnackBarAction(label: localizations.undo, onPressed: onUndo), + ); } diff --git a/bloc_library/lib/widgets/extra_actions.dart b/bloc_library/lib/widgets/extra_actions.dart index 61aa7500..5fe29e03 100644 --- a/bloc_library/lib/widgets/extra_actions.dart +++ b/bloc_library/lib/widgets/extra_actions.dart @@ -1,14 +1,12 @@ +import 'package:bloc_library/bloc_library_keys.dart'; +import 'package:bloc_library/blocs/todos/todos.dart'; +import 'package:bloc_library/models/models.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/blocs/todos/todos.dart'; -import 'package:bloc_library/models/models.dart'; -import 'package:bloc_library/bloc_library_keys.dart'; class ExtraActions extends StatelessWidget { - ExtraActions({Key key}) : super(key: ArchSampleKeys.extraActionsButton); + ExtraActions({super.key = ArchSampleKeys.extraActionsButton}); @override Widget build(BuildContext context) { diff --git a/bloc_library/lib/widgets/filter_button.dart b/bloc_library/lib/widgets/filter_button.dart index 4d1ff106..f436f71e 100644 --- a/bloc_library/lib/widgets/filter_button.dart +++ b/bloc_library/lib/widgets/filter_button.dart @@ -7,15 +7,16 @@ import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final bool visible; - FilterButton({this.visible, Key key}) : super(key: key); + FilterButton({super.key, required this.visible}); @override Widget build(BuildContext context) { - final defaultStyle = Theme.of(context).textTheme.bodyMedium; - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final defaultStyle = Theme.of(context).textTheme.bodyMedium!; + final activeStyle = defaultStyle.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); final filteredTodosBloc = BlocProvider.of(context); + return BlocBuilder( bloc: filteredTodosBloc, builder: (BuildContext context, FilteredTodosState state) { @@ -41,12 +42,11 @@ class FilterButton extends StatelessWidget { class _Button extends StatelessWidget { const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); + required this.onSelected, + required this.activeFilter, + required this.activeStyle, + required this.defaultStyle, + }); final PopupMenuItemSelected onSelected; final VisibilityFilter activeFilter; diff --git a/bloc_library/lib/widgets/filtered_todos.dart b/bloc_library/lib/widgets/filtered_todos.dart index 4251181a..de6f85f2 100644 --- a/bloc_library/lib/widgets/filtered_todos.dart +++ b/bloc_library/lib/widgets/filtered_todos.dart @@ -1,16 +1,14 @@ +import 'package:bloc_library/bloc_library_keys.dart'; +import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/screens/screens.dart'; +import 'package:bloc_library/widgets/widgets.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/blocs/blocs.dart'; -import 'package:bloc_library/widgets/widgets.dart'; -import 'package:bloc_library/screens/screens.dart'; -import 'package:bloc_library/bloc_library_keys.dart'; class FilteredTodos extends StatelessWidget { - FilteredTodos({Key key}) : super(key: key); + const FilteredTodos({super.key}); @override Widget build(BuildContext context) { @@ -32,7 +30,7 @@ class FilteredTodos extends StatelessWidget { todo: todo, onDismissed: (_) { todosBloc.add(DeleteTodo(todo)); - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( DeleteTodoSnackBar( key: ArchSampleKeys.snackbar, todo: todo, @@ -49,8 +47,8 @@ class FilteredTodos extends StatelessWidget { }, ), ); - if (removedTodo != null) { - Scaffold.of(context).showSnackBar( + if (removedTodo != null && context.mounted) { + ScaffoldMessenger.of(context).showSnackBar( DeleteTodoSnackBar( key: ArchSampleKeys.snackbar, todo: todo, diff --git a/bloc_library/lib/widgets/loading_indicator.dart b/bloc_library/lib/widgets/loading_indicator.dart index e9884bb8..d8023b90 100644 --- a/bloc_library/lib/widgets/loading_indicator.dart +++ b/bloc_library/lib/widgets/loading_indicator.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; class LoadingIndicator extends StatelessWidget { - LoadingIndicator({Key key}) : super(key: key); + const LoadingIndicator({super.key}); @override Widget build(BuildContext context) { diff --git a/bloc_library/lib/widgets/stats.dart b/bloc_library/lib/widgets/stats.dart index bb6c8ace..b9e3e2e5 100644 --- a/bloc_library/lib/widgets/stats.dart +++ b/bloc_library/lib/widgets/stats.dart @@ -1,14 +1,12 @@ import 'package:bloc_library/bloc_library_keys.dart'; import 'package:bloc_library/blocs/stats/stats.dart'; import 'package:bloc_library/widgets/widgets.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; class Stats extends StatelessWidget { - Stats({Key key}) : super(key: key); + const Stats({super.key}); @override Widget build(BuildContext context) { diff --git a/bloc_library/lib/widgets/tab_selector.dart b/bloc_library/lib/widgets/tab_selector.dart index 6055b17a..e6911319 100644 --- a/bloc_library/lib/widgets/tab_selector.dart +++ b/bloc_library/lib/widgets/tab_selector.dart @@ -1,15 +1,16 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; +import 'package:bloc_library/models/models.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/models/models.dart'; class TabSelector extends StatelessWidget { final AppTab activeTab; - final Function(AppTab) onTabSelected; + final void Function(AppTab) onTabSelected; - TabSelector({Key key, @required this.activeTab, @required this.onTabSelected}) - : super(key: key); + const TabSelector({ + super.key, + required this.activeTab, + required this.onTabSelected, + }); @override Widget build(BuildContext context) { @@ -25,11 +26,9 @@ class TabSelector extends StatelessWidget { ? ArchSampleKeys.todoTab : ArchSampleKeys.statsTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ); diff --git a/bloc_library/lib/widgets/todo_item.dart b/bloc_library/lib/widgets/todo_item.dart index 82c1b203..0a9fc79d 100644 --- a/bloc_library/lib/widgets/todo_item.dart +++ b/bloc_library/lib/widgets/todo_item.dart @@ -1,22 +1,20 @@ import 'package:bloc_library/models/models.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ - Key key, - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, - }) : super(key: key); + const TodoItem({ + super.key, + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, + }); @override Widget build(BuildContext context) { @@ -32,7 +30,7 @@ class TodoItem extends StatelessWidget { ), title: Hero( tag: '${todo.id}__heroTag', - child: Container( + child: SizedBox( width: MediaQuery.of(context).size.width, child: Text( todo.task, diff --git a/bloc_library/linux/.gitignore b/bloc_library/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/bloc_library/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/bloc_library/linux/CMakeLists.txt b/bloc_library/linux/CMakeLists.txt new file mode 100644 index 00000000..440e1050 --- /dev/null +++ b/bloc_library/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "bloc_library") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.bloc_library") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/bloc_library/linux/flutter/CMakeLists.txt b/bloc_library/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/bloc_library/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/bloc_library/linux/flutter/generated_plugin_registrant.cc b/bloc_library/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/bloc_library/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/bloc_library/linux/flutter/generated_plugin_registrant.h b/bloc_library/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/bloc_library/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/bloc_library/linux/flutter/generated_plugins.cmake b/bloc_library/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/bloc_library/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/bloc_library/linux/runner/CMakeLists.txt b/bloc_library/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/bloc_library/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/bloc_library/linux/runner/main.cc b/bloc_library/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/bloc_library/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/bloc_library/linux/runner/my_application.cc b/bloc_library/linux/runner/my_application.cc new file mode 100644 index 00000000..96ce90c6 --- /dev/null +++ b/bloc_library/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "bloc_library"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "bloc_library"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/bloc_library/linux/runner/my_application.h b/bloc_library/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/bloc_library/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/bloc_library/macos/.gitignore b/bloc_library/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/bloc_library/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/bloc_library/macos/Flutter/Flutter-Debug.xcconfig b/bloc_library/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/bloc_library/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/bloc_library/macos/Flutter/Flutter-Release.xcconfig b/bloc_library/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/bloc_library/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/bloc_library/macos/Flutter/GeneratedPluginRegistrant.swift b/bloc_library/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/bloc_library/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/bloc_library/macos/Podfile b/bloc_library/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/bloc_library/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/bloc_library/macos/Runner.xcodeproj/project.pbxproj b/bloc_library/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..1cffa9d3 --- /dev/null +++ b/bloc_library/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 05215CB3952DD67831212113 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD41C94EFB350DBBC107BADF /* Pods_RunnerTests.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + C17BDF907BEBFB467BF93B42 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D39C3C8521738CE7D83AB14 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0D39C3C8521738CE7D83AB14 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 267266BF2CAA380167CEF097 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 27E7DA4E6426CAD5A0AF7319 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* bloc_library.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = bloc_library.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7844CE7CE7412234E982BEEB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + CD41C94EFB350DBBC107BADF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D56BC89C1DB51627880262D1 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + DC11667C436BEAB4299BFD9F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E397FEC6F60680734CEF843E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 05215CB3952DD67831212113 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C17BDF907BEBFB467BF93B42 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 6C91901967C03EDB3F7084EA /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* bloc_library.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 6C91901967C03EDB3F7084EA /* Pods */ = { + isa = PBXGroup; + children = ( + DC11667C436BEAB4299BFD9F /* Pods-Runner.debug.xcconfig */, + 27E7DA4E6426CAD5A0AF7319 /* Pods-Runner.release.xcconfig */, + 7844CE7CE7412234E982BEEB /* Pods-Runner.profile.xcconfig */, + D56BC89C1DB51627880262D1 /* Pods-RunnerTests.debug.xcconfig */, + 267266BF2CAA380167CEF097 /* Pods-RunnerTests.release.xcconfig */, + E397FEC6F60680734CEF843E /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 0D39C3C8521738CE7D83AB14 /* Pods_Runner.framework */, + CD41C94EFB350DBBC107BADF /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 833DE8611462CBE2D0807EE6 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 7468B20854C62193CF81A82C /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + C370B145C35582820C571194 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* bloc_library.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 7468B20854C62193CF81A82C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 833DE8611462CBE2D0807EE6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C370B145C35582820C571194 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D56BC89C1DB51627880262D1 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocLibrary.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_library.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_library"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 267266BF2CAA380167CEF097 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocLibrary.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_library.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_library"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E397FEC6F60680734CEF843E /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocLibrary.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_library.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_library"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/bloc_library/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_library/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_library/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_library/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/bloc_library/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..cb5149a8 --- /dev/null +++ b/bloc_library/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bloc_library/macos/Runner.xcworkspace/contents.xcworkspacedata b/bloc_library/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/bloc_library/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/bloc_library/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_library/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_library/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_library/macos/Runner/AppDelegate.swift b/bloc_library/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/bloc_library/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/bloc_library/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bloc_library/macos/Runner/Configs/AppInfo.xcconfig b/bloc_library/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..5f2b3c75 --- /dev/null +++ b/bloc_library/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = bloc_library + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.blocLibrary + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/bloc_library/macos/Runner/Configs/Debug.xcconfig b/bloc_library/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/bloc_library/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/bloc_library/macos/Runner/Configs/Release.xcconfig b/bloc_library/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/bloc_library/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/bloc_library/macos/Runner/Configs/Warnings.xcconfig b/bloc_library/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/bloc_library/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/bloc_library/macos/Runner/DebugProfile.entitlements b/bloc_library/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/bloc_library/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/bloc_library/macos/Runner/Info.plist b/bloc_library/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/bloc_library/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/bloc_library/macos/Runner/MainFlutterWindow.swift b/bloc_library/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..3cc05eb2 --- /dev/null +++ b/bloc_library/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/bloc_library/macos/Runner/Release.entitlements b/bloc_library/macos/Runner/Release.entitlements new file mode 100644 index 00000000..852fa1a4 --- /dev/null +++ b/bloc_library/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/bloc_library/macos/RunnerTests/RunnerTests.swift b/bloc_library/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..61f3bd1f --- /dev/null +++ b/bloc_library/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/bloc_library/pubspec.yaml b/bloc_library/pubspec.yaml index 878d0848..e2813b85 100644 --- a/bloc_library/pubspec.yaml +++ b/bloc_library/pubspec.yaml @@ -12,11 +12,14 @@ description: A new Flutter project. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html version: 1.0.0+1 +publish_to: "none" environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ^3.9.0 dependencies: + bloc: + collection: flutter: sdk: flutter todos_app_core: @@ -25,31 +28,28 @@ dependencies: path: ../todos_repository_local_storage todos_repository_core: path: ../todos_repository_core - meta: ">=1.1.0 <2.0.0" - equatable: ^1.0.2 - flutter_bloc: ^3.1.0 - key_value_store_flutter: - key_value_store_web: + meta: + equatable: + flutter_bloc: shared_preferences: dev_dependencies: + bloc_test: + flutter_lints: flutter_test: sdk: flutter - flutter_driver: + integration_test: sdk: flutter - test: - mockito: - bloc_test: ^3.0.1 integration_tests: path: ../integration_tests - + mocktail: + test: # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/bloc_library/test/all_tests.dart b/bloc_library/test/all_tests.dart index 07be21c9..d51c2a2c 100644 --- a/bloc_library/test/all_tests.dart +++ b/bloc_library/test/all_tests.dart @@ -4,7 +4,7 @@ import './blocs/filtered_todos_bloc_test.dart' as filtered_todos_bloc; import './blocs/filtered_todos_event_test.dart' as filtered_todos_event; -import './blocs/simple_bloc_delegate_test.dart' as simple_bloc_delegate; +import 'blocs/simple_bloc_observer_test.dart' as simple_bloc_delegate; import './blocs/tab_bloc_test.dart' as tab_bloc; import './blocs/tab_event_test.dart' as tab_event; import './blocs/todos_bloc_test.dart' as todos_bloc; diff --git a/bloc_library/test/blocs/filtered_todos_bloc_test.dart b/bloc_library/test/blocs/filtered_todos_bloc_test.dart index b93ed75d..d06c2d4c 100644 --- a/bloc_library/test/blocs/filtered_todos_bloc_test.dart +++ b/bloc_library/test/blocs/filtered_todos_bloc_test.dart @@ -1,9 +1,10 @@ import 'dart:async'; -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; + import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; class MockTodosBloc extends MockBloc @@ -12,13 +13,13 @@ class MockTodosBloc extends MockBloc class MockTodosRepository extends Mock implements LocalStorageRepository {} void main() { - group('FilteredTodosBloc', () { - blocTest( + group('$FilteredTodosBloc', () { + blocTest( 'adds TodosUpdated when TodosBloc.state emits TodosLoaded', build: () { final todosBloc = MockTodosBloc(); when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); whenListen( todosBloc, @@ -28,51 +29,43 @@ void main() { ); return FilteredTodosBloc(todosBloc: todosBloc); }, - expect: [ + expect: () => [ FilteredTodosLoaded([ Todo('Wash Dishes', id: '0'), ], VisibilityFilter.all), ], ); - blocTest( + blocTest( 'should update the VisibilityFilter when filter is active', build: () { final todosBloc = MockTodosBloc(); when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); return FilteredTodosBloc(todosBloc: todosBloc); }, act: (FilteredTodosBloc bloc) async => bloc.add(UpdateFilter(VisibilityFilter.active)), - expect: [ - FilteredTodosLoaded([ - Todo('Wash Dishes', id: '0'), - ], VisibilityFilter.all), + expect: () => [ FilteredTodosLoaded([ Todo('Wash Dishes', id: '0'), ], VisibilityFilter.active), ], ); - blocTest( + blocTest( 'should update the VisibilityFilter when filter is completed', build: () { final todosBloc = MockTodosBloc(); when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('Wash Dishes', id: '0')])); return FilteredTodosBloc(todosBloc: todosBloc); }, act: (FilteredTodosBloc bloc) async => bloc.add(UpdateFilter(VisibilityFilter.completed)), - expect: [ - FilteredTodosLoaded([ - Todo('Wash Dishes', id: '0'), - ], VisibilityFilter.all), - FilteredTodosLoaded([], VisibilityFilter.completed), - ], + expect: () => [FilteredTodosLoaded([], VisibilityFilter.completed)], ); }); } diff --git a/bloc_library/test/blocs/simple_bloc_delegate_test.dart b/bloc_library/test/blocs/simple_bloc_observer_test.dart similarity index 64% rename from bloc_library/test/blocs/simple_bloc_delegate_test.dart rename to bloc_library/test/blocs/simple_bloc_observer_test.dart index 9192e4ba..e0c24b37 100644 --- a/bloc_library/test/blocs/simple_bloc_delegate_test.dart +++ b/bloc_library/test/blocs/simple_bloc_observer_test.dart @@ -1,16 +1,20 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:bloc_library/blocs/simple_bloc_delegate.dart'; -import 'package:bloc/bloc.dart'; import 'dart:async'; -List printLog; +import 'package:bloc/bloc.dart'; +import 'package:bloc_library/blocs/simple_bloc_observer.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; + +class MockBloc extends Mock implements Bloc {} + +var printLog = []; void main() { - group('SimpleBlocDelegate', () { - SimpleBlocDelegate delegate; + group('$SimpleBlocObserver', () { + late SimpleBlocObserver delegate; setUp(() { - delegate = SimpleBlocDelegate(); + delegate = SimpleBlocObserver(); printLog = []; }); @@ -18,7 +22,7 @@ void main() { 'onTransition prints Transition', overridePrint(() { delegate.onTransition( - null, + MockBloc(), Transition( currentState: 'A', event: 'E', @@ -35,7 +39,7 @@ void main() { test( 'onError prints Error', overridePrint(() { - delegate.onError(null, 'whoops', null); + delegate.onError(MockBloc(), 'whoops', StackTrace.empty); expect(printLog[0], 'whoops'); }), ); @@ -43,16 +47,16 @@ void main() { test( 'onEvent prints Event', overridePrint(() { - delegate.onEvent(null, 'event'); + delegate.onEvent(MockBloc(), 'event'); expect(printLog[0], 'event'); }), ); }); } -dynamic overridePrint(dynamic Function() testFn) => () { +dynamic Function() overridePrint(void Function() testFn) => () { var spec = ZoneSpecification( - print: (_, __, ___, String msg) { + print: (_, _, _, String msg) { // Add to log instead of printing to stdout printLog.add(msg); }, diff --git a/bloc_library/test/blocs/stats_bloc_test.dart b/bloc_library/test/blocs/stats_bloc_test.dart index 6fdec270..2471e3b3 100644 --- a/bloc_library/test/blocs/stats_bloc_test.dart +++ b/bloc_library/test/blocs/stats_bloc_test.dart @@ -1,10 +1,10 @@ import 'dart:async'; -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/stats/stats.dart'; import 'package:bloc_library/blocs/todos/todos.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; class MockTodosBloc extends MockBloc implements TodosBloc {} @@ -13,15 +13,15 @@ void main() { group('StatsBloc', () { final todo1 = Todo('Hallo'); final todo2 = Todo('Hallo2', complete: true); - TodosBloc todosBloc; - StatsBloc statsBloc; + late TodosBloc todosBloc; + late StatsBloc statsBloc; setUp(() { todosBloc = MockTodosBloc(); statsBloc = StatsBloc(todosBloc: todosBloc); }); - blocTest( + blocTest( 'should update the stats properly when TodosBloc emits TodosLoaded', build: () { todosBloc = MockTodosBloc(); @@ -32,28 +32,28 @@ void main() { return StatsBloc(todosBloc: todosBloc); }, act: (StatsBloc bloc) async => bloc.add(UpdateStats([])), - expect: [StatsLoading(), StatsLoaded(0, 0)], + expect: () => [StatsLoaded(0, 0)], ); - blocTest( + blocTest( 'should update the stats properly when Todos are empty', build: () => statsBloc, act: (StatsBloc bloc) async => bloc.add(UpdateStats([])), - expect: [StatsLoading(), StatsLoaded(0, 0)], + expect: () => [StatsLoaded(0, 0)], ); - blocTest( + blocTest( 'should update the stats properly when Todos contains one active todo', build: () => statsBloc, act: (StatsBloc bloc) async => bloc.add(UpdateStats([todo1])), - expect: [StatsLoading(), StatsLoaded(1, 0)], + expect: () => [StatsLoaded(1, 0)], ); - blocTest( + blocTest( 'should update the stats properly when Todos contains one active todo and one completed todo', build: () => statsBloc, act: (StatsBloc bloc) async => bloc.add(UpdateStats([todo1, todo2])), - expect: [StatsLoading(), StatsLoaded(1, 1)], + expect: () => [StatsLoaded(1, 1)], ); }); } diff --git a/bloc_library/test/blocs/tab_bloc_test.dart b/bloc_library/test/blocs/tab_bloc_test.dart index 4c5bac38..89006460 100644 --- a/bloc_library/test/blocs/tab_bloc_test.dart +++ b/bloc_library/test/blocs/tab_bloc_test.dart @@ -1,15 +1,15 @@ -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/tab/tab.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; void main() { group('TabBloc', () { - blocTest( + blocTest( 'should update the AppTab', build: () => TabBloc(), act: (TabBloc bloc) async => bloc.add(UpdateTab(AppTab.stats)), - expect: [AppTab.todos, AppTab.stats], + expect: () => [AppTab.stats], ); }); } diff --git a/bloc_library/test/blocs/todos_bloc_test.dart b/bloc_library/test/blocs/todos_bloc_test.dart index 0624471f..a367ce68 100644 --- a/bloc_library/test/blocs/todos_bloc_test.dart +++ b/bloc_library/test/blocs/todos_bloc_test.dart @@ -1,50 +1,56 @@ -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; import 'package:bloc_library/blocs/todos/todos.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; class MockTodosRepository extends Mock implements LocalStorageRepository {} void main() { - group('TodosBloc', () { - LocalStorageRepository todosRepository; - TodosBloc todosBloc; + group('$TodosBloc', () { + late LocalStorageRepository todosRepository; + late TodosBloc todosBloc; setUp(() { todosRepository = MockTodosRepository(); - when(todosRepository.loadTodos()).thenAnswer((_) => Future.value([])); + when( + () => todosRepository.loadTodos(), + ).thenAnswer((_) => Future.value([])); + when( + () => todosRepository.saveTodos(any()), + ).thenAnswer((_) => Future.value()); todosBloc = TodosBloc(todosRepository: todosRepository); }); - blocTest( + blocTest( 'should emit TodosNotLoaded if repository throws', build: () { - when(todosRepository.loadTodos()).thenThrow(Exception('oops')); + when(() => todosRepository.loadTodos()).thenThrow(Exception('oops')); return todosBloc; }, act: (TodosBloc bloc) async => bloc.add(LoadTodos()), - expect: [TodosLoading(), TodosNotLoaded()], + expect: () => [TodosNotLoaded()], ); - blocTest( + blocTest( 'should add a todo to the list in response to an AddTodo Event', build: () => todosBloc, act: (TodosBloc bloc) async => bloc ..add(LoadTodos()) ..add(AddTodo(Todo('Hallo', id: '0'))), - expect: [ - TodosLoading(), + expect: () => [ TodosLoaded([]), TodosLoaded([Todo('Hallo', id: '0')]), ], ); - blocTest( + blocTest( 'should remove from the list in response to a DeleteTodo Event', build: () { - when(todosRepository.loadTodos()).thenAnswer((_) => Future.value([])); + when( + () => todosRepository.loadTodos(), + ).thenAnswer((_) => Future.value([])); return todosBloc; }, act: (TodosBloc bloc) async { @@ -54,15 +60,14 @@ void main() { ..add(AddTodo(todo)) ..add(DeleteTodo(todo)); }, - expect: [ - TodosLoading(), + expect: () => [ TodosLoaded([]), TodosLoaded([Todo('Hallo', id: '0')]), TodosLoaded([]), ], ); - blocTest( + blocTest( 'should update a todo in response to an UpdateTodoAction', build: () => todosBloc, act: (TodosBloc bloc) async { @@ -72,15 +77,14 @@ void main() { ..add(AddTodo(todo)) ..add(UpdateTodo(todo.copyWith(task: 'Tschüss'))); }, - expect: [ - TodosLoading(), + expect: () => [ TodosLoaded([]), TodosLoaded([Todo('Hallo', id: '0')]), TodosLoaded([Todo('Tschüss', id: '0')]), ], ); - blocTest( + blocTest( 'should clear completed todos', build: () => todosBloc, act: (TodosBloc bloc) async { @@ -93,8 +97,7 @@ void main() { ..add(ClearCompleted()); ; }, - expect: [ - TodosLoading(), + expect: () => [ TodosLoaded([]), TodosLoaded([Todo('Hallo', id: '0')]), TodosLoaded([ @@ -105,7 +108,7 @@ void main() { ], ); - blocTest( + blocTest( 'should mark all as completed if some todos are incomplete', build: () => todosBloc, act: (TodosBloc bloc) async { @@ -118,8 +121,7 @@ void main() { ..add(ToggleAll()); ; }, - expect: [ - TodosLoading(), + expect: () => [ TodosLoaded([]), TodosLoaded([Todo('Hallo', id: '0')]), TodosLoaded([ @@ -133,7 +135,7 @@ void main() { ], ); - blocTest( + blocTest( 'should mark all as incomplete if all todos are complete', build: () => todosBloc, act: (TodosBloc bloc) async { @@ -146,8 +148,7 @@ void main() { ..add(ToggleAll()); ; }, - expect: [ - TodosLoading(), + expect: () => [ TodosLoaded([]), TodosLoaded([Todo('Hallo', id: '0', complete: true)]), TodosLoaded([ diff --git a/bloc_library/test/blocs/todos_event_test.dart b/bloc_library/test/blocs/todos_event_test.dart index c7471f77..3845773b 100644 --- a/bloc_library/test/blocs/todos_event_test.dart +++ b/bloc_library/test/blocs/todos_event_test.dart @@ -1,12 +1,12 @@ -import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:flutter_test/flutter_test.dart'; void main() { group('TodosEvent', () { group('LoadTodos', () { test('toString returns correct value', () { - expect(LoadTodos().toString(), 'LoadTodos'); + expect(LoadTodos().toString(), 'LoadTodos()'); }); }); @@ -39,13 +39,13 @@ void main() { group('ClearCompleted', () { test('toString returns correct value', () { - expect(ClearCompleted().toString(), 'ClearCompleted'); + expect(ClearCompleted().toString(), 'ClearCompleted()'); }); }); group('ToggleAll', () { test('toString returns correct value', () { - expect(ToggleAll().toString(), 'ToggleAll'); + expect(ToggleAll().toString(), 'ToggleAll()'); }); }); }); diff --git a/bloc_library/test/blocs/todos_state_test.dart b/bloc_library/test/blocs/todos_state_test.dart index f99b3a86..87ded732 100644 --- a/bloc_library/test/blocs/todos_state_test.dart +++ b/bloc_library/test/blocs/todos_state_test.dart @@ -1,12 +1,12 @@ -import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/blocs/blocs.dart'; import 'package:bloc_library/models/models.dart'; +import 'package:flutter_test/flutter_test.dart'; void main() { group('TodosState', () { group('TodosLoading', () { test('toString returns correct value', () { - expect(TodosLoading().toString(), 'TodosLoading'); + expect(TodosLoading().toString(), 'TodosLoading()'); }); }); @@ -21,7 +21,7 @@ void main() { group('TodosNotLoaded', () { test('toString returns correct value', () { - expect(TodosNotLoaded().toString(), 'TodosNotLoaded'); + expect(TodosNotLoaded().toString(), 'TodosNotLoaded()'); }); }); }); diff --git a/bloc_library/test/localization_test.dart b/bloc_library/test/localization_test.dart index 9069879f..0cb1f2f5 100644 --- a/bloc_library/test/localization_test.dart +++ b/bloc_library/test/localization_test.dart @@ -1,11 +1,11 @@ -import 'package:flutter_test/flutter_test.dart'; import 'package:bloc_library/localization.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; void main() { group('FlutterBlocLocalizations', () { - FlutterBlocLocalizations localizations; - FlutterBlocLocalizationsDelegate delegate; + late FlutterBlocLocalizations localizations; + late FlutterBlocLocalizationsDelegate delegate; setUp(() { localizations = FlutterBlocLocalizations(); @@ -17,7 +17,7 @@ void main() { }); test('shouldReload returns false', () { - expect(delegate.shouldReload(null), false); + expect(delegate.shouldReload(FlutterBlocLocalizationsDelegate()), false); }); test('isSupported returns true for english', () { diff --git a/bloc_library/test/screens/add_edit_screen_test.dart b/bloc_library/test/screens/add_edit_screen_test.dart index 2e5c62d1..61bd759b 100644 --- a/bloc_library/test/screens/add_edit_screen_test.dart +++ b/bloc_library/test/screens/add_edit_screen_test.dart @@ -1,8 +1,8 @@ +import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/screens/add_edit_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:bloc_library/screens/add_edit_screen.dart'; -import 'package:bloc_library/models/models.dart'; -import 'package:bloc_library/localization.dart'; import 'package:todos_app_core/todos_app_core.dart'; void main() { @@ -15,7 +15,7 @@ void main() { home: Scaffold( body: AddEditScreen( isEditing: true, - onSave: (_, __) {}, + onSave: (_, _) {}, todo: Todo('wash dishes', id: '0'), ), ), diff --git a/bloc_library/test/screens/details_screen_test.dart b/bloc_library/test/screens/details_screen_test.dart index 4e0d267b..6fa1a3da 100644 --- a/bloc_library/test/screens/details_screen_test.dart +++ b/bloc_library/test/screens/details_screen_test.dart @@ -1,13 +1,13 @@ +import 'package:bloc_library/bloc_library_keys.dart'; +import 'package:bloc_library/blocs/todos/todos.dart'; +import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/screens/screens.dart'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:bloc_library/blocs/todos/todos.dart'; -import 'package:bloc_library/screens/screens.dart'; -import 'package:bloc_library/models/models.dart'; -import 'package:bloc_library/bloc_library_keys.dart'; -import 'package:bloc_library/localization.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_app_core/todos_app_core.dart'; class MockTodosBloc extends MockBloc @@ -15,7 +15,7 @@ class MockTodosBloc extends MockBloc void main() { group('DetailsScreen', () { - TodosBloc todosBloc; + late TodosBloc todosBloc; setUp(() { todosBloc = MockTodosBloc(); @@ -26,7 +26,7 @@ void main() { }); testWidgets('renders properly with no todos', (WidgetTester tester) async { - when(todosBloc.state).thenReturn(TodosLoaded([])); + when(() => todosBloc.state).thenReturn(TodosLoaded([])); await tester.pumpWidget( BlocProvider.value( value: todosBloc, @@ -45,7 +45,7 @@ void main() { testWidgets('renders properly with todos', (WidgetTester tester) async { when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); await tester.pumpWidget( BlocProvider.value( @@ -68,10 +68,12 @@ void main() { WidgetTester tester, ) async { when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); when( - todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), + () => todosBloc.add( + UpdateTodo(Todo('wash car', id: '0', complete: true)), + ), ).thenReturn(null); await tester.pumpWidget( BlocProvider.value( @@ -88,7 +90,9 @@ void main() { await tester.pumpAndSettle(); await tester.tap(find.byKey(BlocLibraryKeys.detailsScreenCheckBox)); verify( - todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), + () => todosBloc.add( + UpdateTodo(Todo('wash car', id: '0', complete: true)), + ), ).called(1); }); @@ -96,7 +100,7 @@ void main() { WidgetTester tester, ) async { when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); await tester.pumpWidget( BlocProvider.value( @@ -120,10 +124,12 @@ void main() { WidgetTester tester, ) async { when( - todosBloc.add(UpdateTodo(Todo('new todo', id: '0', complete: true))), + () => todosBloc.add( + UpdateTodo(Todo('new todo', id: '0', complete: true)), + ), ).thenReturn(null); when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('wash car', id: '0')])); await tester.pumpWidget( BlocProvider.value( @@ -146,7 +152,9 @@ void main() { await tester.tap(find.byKey(ArchSampleKeys.saveTodoFab)); await tester.pumpAndSettle(); verify( - todosBloc.add(UpdateTodo(Todo('new todo', id: '0', complete: false))), + () => todosBloc.add( + UpdateTodo(Todo('new todo', id: '0', complete: false)), + ), ).called(1); }); }); diff --git a/bloc_library/test/screens/home_screen_test.dart b/bloc_library/test/screens/home_screen_test.dart index ce4741b0..a53f7684 100644 --- a/bloc_library/test/screens/home_screen_test.dart +++ b/bloc_library/test/screens/home_screen_test.dart @@ -1,22 +1,20 @@ import 'package:bloc_library/blocs/blocs.dart'; -import 'package:bloc_library/blocs/tab/tab_bloc.dart'; +import 'package:bloc_library/localization.dart'; import 'package:bloc_library/models/app_tab.dart'; +import 'package:bloc_library/models/visibility_filter.dart'; import 'package:bloc_library/screens/screens.dart'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:bloc_library/blocs/todos/todos.dart'; -import 'package:bloc_library/screens/home_screen.dart'; -import 'package:bloc_library/localization.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_app_core/todos_app_core.dart'; class MockTodosBloc extends MockBloc implements TodosBloc {} class MockFilteredTodosBloc - extends MockBloc + extends MockBloc implements FilteredTodosBloc {} class MockTabBloc extends MockBloc implements TabBloc {} @@ -26,10 +24,10 @@ class MockStatsBloc extends MockBloc void main() { group('HomeScreen', () { - TodosBloc todosBloc; - FilteredTodosBloc filteredTodosBloc; - TabBloc tabBloc; - StatsBloc statsBloc; + late TodosBloc todosBloc; + late FilteredTodosBloc filteredTodosBloc; + late TabBloc tabBloc; + late StatsBloc statsBloc; setUp(() { todosBloc = MockTodosBloc(); @@ -39,8 +37,11 @@ void main() { }); testWidgets('renders correctly', (WidgetTester tester) async { - when(todosBloc.state).thenAnswer((_) => TodosLoaded([])); - when(tabBloc.state).thenAnswer((_) => AppTab.todos); + when(() => todosBloc.state).thenAnswer((_) => TodosLoaded([])); + when(() => tabBloc.state).thenAnswer((_) => AppTab.todos); + when( + () => filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.all)); await tester.pumpWidget( MultiBlocProvider( providers: [ @@ -66,8 +67,11 @@ void main() { testWidgets('Navigates to /addTodo when Floating Action Button is tapped', ( WidgetTester tester, ) async { - when(todosBloc.state).thenAnswer((_) => TodosLoaded([])); - when(tabBloc.state).thenAnswer((_) => AppTab.todos); + when(() => todosBloc.state).thenAnswer((_) => TodosLoaded([])); + when(() => tabBloc.state).thenAnswer((_) => AppTab.todos); + when( + () => filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.all)); await tester.pumpWidget( MultiBlocProvider( providers: [ diff --git a/bloc_library/test/widgets/delete_todo_snack_bar_test.dart b/bloc_library/test/widgets/delete_todo_snack_bar_test.dart index 40ee2218..2655b0f5 100644 --- a/bloc_library/test/widgets/delete_todo_snack_bar_test.dart +++ b/bloc_library/test/widgets/delete_todo_snack_bar_test.dart @@ -1,8 +1,8 @@ +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/widgets/delete_todo_snack_bar.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/widgets/delete_todo_snack_bar.dart'; -import 'package:bloc_library/models/models.dart'; void main() { group('DeleteTodoSnackBar', () { @@ -16,7 +16,7 @@ void main() { builder: (BuildContext context) { return GestureDetector( onTap: () { - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( DeleteTodoSnackBar( key: snackBarKey, onUndo: () {}, @@ -26,7 +26,7 @@ void main() { ); }, behavior: HitTestBehavior.opaque, - child: Container(height: 100.0, width: 100.0, key: tapTarget), + child: SizedBox(height: 500.0, width: 500.0, key: tapTarget), ); }, ), @@ -58,7 +58,7 @@ void main() { builder: (BuildContext context) { return GestureDetector( onTap: () { - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( DeleteTodoSnackBar( onUndo: () { ++tapCount; diff --git a/bloc_library/test/widgets/extra_actions_test.dart b/bloc_library/test/widgets/extra_actions_test.dart index 050d2244..5a9aa696 100644 --- a/bloc_library/test/widgets/extra_actions_test.dart +++ b/bloc_library/test/widgets/extra_actions_test.dart @@ -1,13 +1,13 @@ -import 'package:bloc_test/bloc_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:mockito/mockito.dart'; -import 'package:flutter/material.dart'; -import 'package:bloc_library/widgets/extra_actions.dart'; -import 'package:bloc_library/blocs/todos/todos.dart'; -import 'package:bloc_library/models/models.dart'; import 'package:bloc_library/bloc_library_keys.dart'; +import 'package:bloc_library/blocs/todos/todos.dart'; import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/widgets/extra_actions.dart'; +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_app_core/todos_app_core.dart'; class MockTodosBloc extends MockBloc @@ -15,7 +15,7 @@ class MockTodosBloc extends MockBloc void main() { group('ExtraActions', () { - TodosBloc todosBloc; + late TodosBloc todosBloc; setUp(() { todosBloc = MockTodosBloc(); @@ -24,7 +24,7 @@ void main() { testWidgets('renders an empty Container if state is not TodosLoaded', ( WidgetTester tester, ) async { - when(todosBloc.state).thenReturn(TodosLoading()); + when(() => todosBloc.state).thenReturn(TodosLoading()); await tester.pumpWidget( BlocProvider.value( value: todosBloc, @@ -45,7 +45,7 @@ void main() { testWidgets( 'renders PopupMenuButton with mark all done if state is TodosLoaded with incomplete todos', (WidgetTester tester) async { - when(todosBloc.state).thenReturn(TodosLoaded([Todo('walk dog')])); + when(() => todosBloc.state).thenReturn(TodosLoaded([Todo('walk dog')])); await tester.pumpWidget( BlocProvider.value( value: todosBloc, @@ -76,7 +76,7 @@ void main() { 'renders PopupMenuButton with mark all incomplete if state is TodosLoaded with complete todos', (WidgetTester tester) async { when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('walk dog', complete: true)])); await tester.pumpWidget( BlocProvider.value( @@ -107,10 +107,10 @@ void main() { testWidgets('tapping clear completed adds ClearCompleted', ( WidgetTester tester, ) async { - when(todosBloc.state).thenReturn( + when(() => todosBloc.state).thenReturn( TodosLoaded([Todo('walk dog'), Todo('take out trash', complete: true)]), ); - when(todosBloc.add(ClearCompleted())).thenReturn(null); + when(() => todosBloc.add(ClearCompleted())).thenReturn(null); await tester.pumpWidget( BlocProvider.value( value: todosBloc, @@ -132,16 +132,16 @@ void main() { expect(find.byKey(ArchSampleKeys.clearCompleted), findsOneWidget); await tester.pumpAndSettle(); await tester.tap(find.byKey(ArchSampleKeys.clearCompleted)); - verify(todosBloc.add(ClearCompleted())).called(1); + verify(() => todosBloc.add(ClearCompleted())).called(1); }); testWidgets('tapping toggle all adds ToggleAll', ( WidgetTester tester, ) async { when( - todosBloc.state, + () => todosBloc.state, ).thenReturn(TodosLoaded([Todo('walk dog'), Todo('take out trash')])); - when(todosBloc.add(ToggleAll())).thenReturn(null); + when(() => todosBloc.add(ToggleAll())).thenReturn(null); await tester.pumpWidget( BlocProvider.value( value: todosBloc, @@ -163,7 +163,7 @@ void main() { expect(find.byKey(ArchSampleKeys.toggleAll), findsOneWidget); await tester.pumpAndSettle(); await tester.tap(find.byKey(ArchSampleKeys.toggleAll)); - verify(todosBloc.add(ToggleAll())).called(1); + verify(() => todosBloc.add(ToggleAll())).called(1); }); }); } diff --git a/bloc_library/test/widgets/filter_button_test.dart b/bloc_library/test/widgets/filter_button_test.dart index 5e5e9af6..e53d6f0f 100644 --- a/bloc_library/test/widgets/filter_button_test.dart +++ b/bloc_library/test/widgets/filter_button_test.dart @@ -1,12 +1,12 @@ +import 'package:bloc_library/blocs/filtered_todos/filtered_todos.dart'; +import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/widgets/filter_button.dart'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:bloc_library/blocs/filtered_todos/filtered_todos.dart'; -import 'package:bloc_library/widgets/filter_button.dart'; -import 'package:bloc_library/models/models.dart'; -import 'package:bloc_library/localization.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_app_core/todos_app_core.dart'; class MockFilteredTodosBloc @@ -15,7 +15,7 @@ class MockFilteredTodosBloc void main() { group('FilterButton', () { - FilteredTodosBloc filteredTodosBloc; + late FilteredTodosBloc filteredTodosBloc; setUp(() { filteredTodosBloc = MockFilteredTodosBloc(); @@ -25,7 +25,7 @@ void main() { WidgetTester tester, ) async { when( - filteredTodosBloc.state, + () => filteredTodosBloc.state, ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.all)); await tester.pumpWidget( BlocProvider.value( @@ -55,7 +55,7 @@ void main() { WidgetTester tester, ) async { when( - filteredTodosBloc.state, + () => filteredTodosBloc.state, ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.active)); await tester.pumpWidget( BlocProvider.value( @@ -85,7 +85,7 @@ void main() { WidgetTester tester, ) async { when( - filteredTodosBloc.state, + () => filteredTodosBloc.state, ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.completed)); await tester.pumpWidget( BlocProvider.value( @@ -115,10 +115,10 @@ void main() { WidgetTester tester, ) async { when( - filteredTodosBloc.state, + () => filteredTodosBloc.state, ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.active)); when( - filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all)), + () => filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all)), ).thenReturn(null); await tester.pumpWidget( BlocProvider.value( @@ -146,7 +146,7 @@ void main() { await tester.tap(allFilterFinder); verify( - filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all)), + () => filteredTodosBloc.add(UpdateFilter(VisibilityFilter.all)), ).called(1); }); }); diff --git a/bloc_library/test/widgets/filtered_todos_test.dart b/bloc_library/test/widgets/filtered_todos_test.dart index 70e98e85..0b61dc29 100644 --- a/bloc_library/test/widgets/filtered_todos_test.dart +++ b/bloc_library/test/widgets/filtered_todos_test.dart @@ -1,13 +1,12 @@ +import 'package:bloc_library/blocs/blocs.dart'; +import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/widgets/widgets.dart'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:bloc_library/blocs/blocs.dart'; -import 'package:bloc_library/widgets/widgets.dart'; -import 'package:bloc_library/models/models.dart'; -import 'package:bloc_library/bloc_library_keys.dart'; -import 'package:bloc_library/localization.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_app_core/todos_app_core.dart'; class MockTodosBloc extends MockBloc @@ -19,8 +18,8 @@ class MockFilteredTodosBloc void main() { group('FilteredTodos', () { - TodosBloc todosBloc; - FilteredTodosBloc filteredTodosBloc; + late TodosBloc todosBloc; + late FilteredTodosBloc filteredTodosBloc; setUp(() { todosBloc = MockTodosBloc(); @@ -30,7 +29,9 @@ void main() { testWidgets('should show loading indicator when state is TodosLoading', ( WidgetTester tester, ) async { - when(filteredTodosBloc.state).thenAnswer((_) => FilteredTodosLoading()); + when( + () => filteredTodosBloc.state, + ).thenAnswer((_) => FilteredTodosLoading()); await tester.pumpWidget( MultiBlocProvider( providers: [ @@ -50,38 +51,12 @@ void main() { expect(find.byKey(ArchSampleKeys.todosLoading), findsOneWidget); }); - testWidgets('should show empty container when state is null', ( - WidgetTester tester, - ) async { - when(filteredTodosBloc.state).thenAnswer((_) => null); - await tester.pumpWidget( - MultiBlocProvider( - providers: [ - BlocProvider.value(value: todosBloc), - BlocProvider.value(value: filteredTodosBloc), - ], - child: MaterialApp( - home: Scaffold(body: FilteredTodos()), - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), - ], - ), - ), - ); - await tester.pumpAndSettle(); - expect( - find.byKey(BlocLibraryKeys.filteredTodosEmptyContainer), - findsOneWidget, - ); - }); - testWidgets( 'should show empty list when state is TodosLoaded with no todos', (WidgetTester tester) async { - when(todosBloc.state).thenAnswer((_) => TodosLoaded([])); + when(() => todosBloc.state).thenAnswer((_) => TodosLoaded([])); when( - filteredTodosBloc.state, + () => filteredTodosBloc.state, ).thenAnswer((_) => FilteredTodosLoaded([], VisibilityFilter.all)); await tester.pumpWidget( MultiBlocProvider( @@ -112,8 +87,10 @@ void main() { testWidgets('should show todos when state is TodosLoaded with todos', ( WidgetTester tester, ) async { - when(todosBloc.state).thenAnswer((_) => TodosLoaded([Todo('wash car')])); - when(filteredTodosBloc.state).thenAnswer( + when( + () => todosBloc.state, + ).thenAnswer((_) => TodosLoaded([Todo('wash car')])); + when(() => filteredTodosBloc.state).thenAnswer( (_) => FilteredTodosLoaded([Todo('wash car')], VisibilityFilter.all), ); await tester.pumpWidget( @@ -144,15 +121,17 @@ void main() { WidgetTester tester, ) async { when( - todosBloc.state, + () => todosBloc.state, ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); - when(filteredTodosBloc.state).thenAnswer( + when(() => filteredTodosBloc.state).thenAnswer( (_) => FilteredTodosLoaded([ Todo('wash car', id: '0'), ], VisibilityFilter.all), ); when( - todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), + () => todosBloc.add( + UpdateTodo(Todo('wash car', id: '0', complete: true)), + ), ).thenReturn(null); await tester.pumpWidget( MultiBlocProvider( @@ -176,14 +155,16 @@ void main() { expect(checkboxFinder, findsOneWidget); await tester.tap(checkboxFinder); verify( - todosBloc.add(UpdateTodo(Todo('wash car', id: '0', complete: true))), + () => todosBloc.add( + UpdateTodo(Todo('wash car', id: '0', complete: true)), + ), ).called(1); }); testWidgets('should add DeleteTodo when dismissed', ( WidgetTester tester, ) async { - when(filteredTodosBloc.state).thenReturn( + when(() => filteredTodosBloc.state).thenReturn( FilteredTodosLoaded([Todo('wash car', id: '0')], VisibilityFilter.all), ); await tester.pumpWidget( @@ -205,14 +186,16 @@ void main() { final todoFinder = find.byKey(ArchSampleKeys.todoItem('0')); expect(todoFinder, findsOneWidget); (tester.widget(find.byKey(ArchSampleKeys.todoItem('0'))) as Dismissible) - .onDismissed(null); - verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); + .onDismissed!(DismissDirection.horizontal); + verify( + () => todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + ).called(1); }); testWidgets('should add AddTodo when dismissed and Undo Tapped', ( WidgetTester tester, ) async { - when(filteredTodosBloc.state).thenReturn( + when(() => filteredTodosBloc.state).thenReturn( FilteredTodosLoaded([Todo('wash car', id: '0')], VisibilityFilter.all), ); await tester.pumpWidget( @@ -234,21 +217,23 @@ void main() { final todoFinder = find.byKey(ArchSampleKeys.todoItem('0')); expect(todoFinder, findsOneWidget); (tester.widget(find.byKey(ArchSampleKeys.todoItem('0'))) as Dismissible) - .onDismissed(null); + .onDismissed!(DismissDirection.horizontal); await tester.pumpAndSettle(); - verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); + verify( + () => todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + ).called(1); expect(find.text('Undo'), findsOneWidget); await tester.tap(find.text('Undo')); - verify(todosBloc.add(AddTodo(Todo('wash car', id: '0')))).called(1); + verify(() => todosBloc.add(AddTodo(Todo('wash car', id: '0')))).called(1); }); testWidgets('should Navigate to DetailsScreen when todo tapped', ( WidgetTester tester, ) async { when( - todosBloc.state, + () => todosBloc.state, ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); - when(filteredTodosBloc.state).thenAnswer( + when(() => filteredTodosBloc.state).thenAnswer( (_) => FilteredTodosLoaded([ Todo('wash car', id: '0'), ], VisibilityFilter.all), @@ -280,15 +265,15 @@ void main() { WidgetTester tester, ) async { when( - todosBloc.state, + () => todosBloc.state, ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); - when(filteredTodosBloc.state).thenAnswer( + when(() => filteredTodosBloc.state).thenAnswer( (_) => FilteredTodosLoaded([ Todo('wash car', id: '0'), ], VisibilityFilter.all), ); when( - todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + () => todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), ).thenReturn(null); await tester.pumpWidget( MultiBlocProvider( @@ -313,25 +298,27 @@ void main() { expect(find.byKey(ArchSampleKeys.todoDetailsScreen), findsOneWidget); await tester.tap(find.byKey(ArchSampleKeys.deleteTodoButton)); await tester.pumpAndSettle(); - verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); + verify( + () => todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + ).called(1); }); testWidgets( 'should add AddTodo when todo deleted from DetailsScreen and Undo Tapped', (WidgetTester tester) async { when( - todosBloc.state, + () => todosBloc.state, ).thenAnswer((_) => TodosLoaded([Todo('wash car', id: '0')])); - when(filteredTodosBloc.state).thenAnswer( + when(() => filteredTodosBloc.state).thenAnswer( (_) => FilteredTodosLoaded([ Todo('wash car', id: '0'), ], VisibilityFilter.all), ); when( - todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + () => todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), ).thenReturn(null); when( - todosBloc.add(AddTodo(Todo('wash car', id: '0'))), + () => todosBloc.add(AddTodo(Todo('wash car', id: '0'))), ).thenReturn(null); await tester.pumpWidget( MultiBlocProvider( @@ -356,9 +343,13 @@ void main() { expect(find.byKey(ArchSampleKeys.todoDetailsScreen), findsOneWidget); await tester.tap(find.byKey(ArchSampleKeys.deleteTodoButton)); await tester.pumpAndSettle(); - verify(todosBloc.add(DeleteTodo(Todo('wash car', id: '0')))).called(1); + verify( + () => todosBloc.add(DeleteTodo(Todo('wash car', id: '0'))), + ).called(1); await tester.tap(find.text('Undo')); - verify(todosBloc.add(AddTodo(Todo('wash car', id: '0')))).called(1); + verify( + () => todosBloc.add(AddTodo(Todo('wash car', id: '0'))), + ).called(1); }, ); }); diff --git a/bloc_library/test/widgets/stats_tab_test.dart b/bloc_library/test/widgets/stats_tab_test.dart index 9b6cf7cd..e48f9e4c 100644 --- a/bloc_library/test/widgets/stats_tab_test.dart +++ b/bloc_library/test/widgets/stats_tab_test.dart @@ -1,12 +1,12 @@ +import 'package:bloc_library/bloc_library_keys.dart'; +import 'package:bloc_library/blocs/stats/stats.dart'; +import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/widgets/stats.dart'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:bloc_library/blocs/stats/stats.dart'; -import 'package:bloc_library/widgets/stats.dart'; -import 'package:bloc_library/bloc_library_keys.dart'; -import 'package:bloc_library/localization.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:todos_app_core/todos_app_core.dart'; class MockStatsBloc extends MockBloc @@ -14,7 +14,7 @@ class MockStatsBloc extends MockBloc void main() { group('Stats', () { - StatsBloc statsBloc; + late StatsBloc statsBloc; setUp(() { statsBloc = MockStatsBloc(); @@ -23,7 +23,7 @@ void main() { testWidgets('should render LoadingIndicator when state is StatsLoading', ( WidgetTester tester, ) async { - when(statsBloc.state).thenAnswer((_) => StatsLoading()); + when(() => statsBloc.state).thenAnswer((_) => StatsLoading()); await tester.pumpWidget( BlocProvider.value( value: statsBloc, @@ -40,30 +40,10 @@ void main() { expect(find.byKey(BlocLibraryKeys.statsLoadingIndicator), findsOneWidget); }); - testWidgets('should render empty stats container when state is null', ( - WidgetTester tester, - ) async { - when(statsBloc.state).thenAnswer((_) => null); - await tester.pumpWidget( - BlocProvider.value( - value: statsBloc, - child: MaterialApp( - home: Scaffold(body: Stats()), - localizationsDelegates: [ - ArchSampleLocalizationsDelegate(), - FlutterBlocLocalizationsDelegate(), - ], - ), - ), - ); - await tester.pumpAndSettle(); - expect(find.byKey(BlocLibraryKeys.emptyStatsContainer), findsOneWidget); - }); - testWidgets('should render correct stats when state is StatsLoaded(0, 0)', ( WidgetTester tester, ) async { - when(statsBloc.state).thenAnswer((_) => StatsLoaded(0, 0)); + when(() => statsBloc.state).thenAnswer((_) => StatsLoaded(0, 0)); await tester.pumpWidget( BlocProvider.value( value: statsBloc, @@ -89,7 +69,7 @@ void main() { testWidgets('should render correct stats when state is StatsLoaded(2, 1)', ( WidgetTester tester, ) async { - when(statsBloc.state).thenAnswer((_) => StatsLoaded(2, 1)); + when(() => statsBloc.state).thenAnswer((_) => StatsLoaded(2, 1)); await tester.pumpWidget( BlocProvider.value( value: statsBloc, diff --git a/bloc_library/test/widgets/tab_selector_test.dart b/bloc_library/test/widgets/tab_selector_test.dart index 5e087cbd..66885ed0 100644 --- a/bloc_library/test/widgets/tab_selector_test.dart +++ b/bloc_library/test/widgets/tab_selector_test.dart @@ -1,9 +1,9 @@ +import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/widgets/tab_selector.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:bloc_library/localization.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/widgets/tab_selector.dart'; -import 'package:bloc_library/models/models.dart'; void main() { group('TabSelector', () { @@ -13,7 +13,7 @@ void main() { home: Scaffold( body: Container(), bottomNavigationBar: TabSelector( - onTabSelected: (_) => null, + onTabSelected: (_) {}, activeTab: AppTab.todos, ), ), @@ -31,7 +31,7 @@ void main() { testWidgets( 'should call onTabSelected with correct index when tab tapped', (WidgetTester tester) async { - AppTab selectedTab; + late AppTab selectedTab; await tester.pumpWidget( MaterialApp( diff --git a/bloc_library/test_driver/integration_test.dart b/bloc_library/test_driver/integration_test.dart new file mode 100644 index 00000000..b38629cc --- /dev/null +++ b/bloc_library/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/bloc_library/test_driver/todo_app.dart b/bloc_library/test_driver/todo_app.dart deleted file mode 100644 index 3808a4b5..00000000 --- a/bloc_library/test_driver/todo_app.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:bloc_library/main.dart' as app; - -void main() { - enableFlutterDriverExtension(); - - app.main(); -} diff --git a/bloc_library/test_driver/todo_app_test.dart b/bloc_library/test_driver/todo_app_test.dart deleted file mode 100644 index 1c5a586c..00000000 --- a/bloc_library/test_driver/todo_app_test.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:integration_tests/integration_tests.dart' as integration_tests; - -void main() { - integration_tests.main(); -} diff --git a/bloc_library/web/favicon.png b/bloc_library/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/bloc_library/web/icons/Icon-192.png b/bloc_library/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/bloc_library/web/icons/Icon-512.png b/bloc_library/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/bloc_library/web/icons/Icon-maskable-192.png b/bloc_library/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/bloc_library/web/icons/Icon-maskable-512.png b/bloc_library/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/bloc_library/web/manifest.json b/bloc_library/web/manifest.json new file mode 100644 index 00000000..a8a1f06f --- /dev/null +++ b/bloc_library/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "bloc_library", + "short_name": "bloc_library", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/bloc_library/windows/.gitignore b/bloc_library/windows/.gitignore new file mode 100644 index 00000000..d492d0d9 --- /dev/null +++ b/bloc_library/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/bloc_library/windows/CMakeLists.txt b/bloc_library/windows/CMakeLists.txt new file mode 100644 index 00000000..8419b22a --- /dev/null +++ b/bloc_library/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(bloc_library LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "bloc_library") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/bloc_library/windows/flutter/CMakeLists.txt b/bloc_library/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/bloc_library/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/bloc_library/windows/flutter/generated_plugin_registrant.cc b/bloc_library/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..8b6d4680 --- /dev/null +++ b/bloc_library/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/bloc_library/windows/flutter/generated_plugin_registrant.h b/bloc_library/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..dc139d85 --- /dev/null +++ b/bloc_library/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/bloc_library/windows/flutter/generated_plugins.cmake b/bloc_library/windows/flutter/generated_plugins.cmake new file mode 100644 index 00000000..b93c4c30 --- /dev/null +++ b/bloc_library/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/bloc_library/windows/runner/CMakeLists.txt b/bloc_library/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/bloc_library/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/bloc_library/windows/runner/Runner.rc b/bloc_library/windows/runner/Runner.rc new file mode 100644 index 00000000..04376ab9 --- /dev/null +++ b/bloc_library/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "bloc_library" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "bloc_library" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "bloc_library.exe" "\0" + VALUE "ProductName", "bloc_library" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/bloc_library/windows/runner/flutter_window.cpp b/bloc_library/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..955ee303 --- /dev/null +++ b/bloc_library/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/bloc_library/windows/runner/flutter_window.h b/bloc_library/windows/runner/flutter_window.h new file mode 100644 index 00000000..6da0652f --- /dev/null +++ b/bloc_library/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/bloc_library/windows/runner/main.cpp b/bloc_library/windows/runner/main.cpp new file mode 100644 index 00000000..fd60a2e1 --- /dev/null +++ b/bloc_library/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"bloc_library", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/bloc_library/windows/runner/resource.h b/bloc_library/windows/runner/resource.h new file mode 100644 index 00000000..66a65d1e --- /dev/null +++ b/bloc_library/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/bloc_library/windows/runner/resources/app_icon.ico b/bloc_library/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/bloc_library/windows/runner/runner.exe.manifest b/bloc_library/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/bloc_library/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/bloc_library/windows/runner/utils.cpp b/bloc_library/windows/runner/utils.cpp new file mode 100644 index 00000000..3a0b4651 --- /dev/null +++ b/bloc_library/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/bloc_library/windows/runner/utils.h b/bloc_library/windows/runner/utils.h new file mode 100644 index 00000000..3879d547 --- /dev/null +++ b/bloc_library/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/bloc_library/windows/runner/win32_window.cpp b/bloc_library/windows/runner/win32_window.cpp new file mode 100644 index 00000000..60608d0f --- /dev/null +++ b/bloc_library/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/bloc_library/windows/runner/win32_window.h b/bloc_library/windows/runner/win32_window.h new file mode 100644 index 00000000..e901dde6 --- /dev/null +++ b/bloc_library/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 0b7abb424adbd082bb8c07afa39845170cc81fd1 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 17:41:09 +0100 Subject: [PATCH 77/89] Fix Analysis Errors --- bloc_library/lib/screens/home_screen.dart | 2 ++ bloc_library/lib/widgets/extra_actions.dart | 2 +- bloc_library/lib/widgets/filter_button.dart | 2 +- bloc_library/test/blocs/todos_bloc_test.dart | 3 --- .../test/screens/add_edit_screen_test.dart | 6 +++--- bloc_library/test/widgets/todo_item_test.dart | 18 +++++++++--------- blocs/lib/blocs.dart | 2 -- blocs/lib/src/todo_bloc.dart | 4 +++- blocs/lib/src/todos_list_bloc.dart | 4 +++- blocs/lib/src/user_bloc.dart | 2 +- blocs/test/todo_bloc_test.dart | 1 - .../lib/src/reactive_repository.dart | 1 - 12 files changed, 23 insertions(+), 24 deletions(-) diff --git a/bloc_library/lib/screens/home_screen.dart b/bloc_library/lib/screens/home_screen.dart index 6325edf7..2d7daca3 100644 --- a/bloc_library/lib/screens/home_screen.dart +++ b/bloc_library/lib/screens/home_screen.dart @@ -8,6 +8,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; class HomeScreen extends StatelessWidget { + const HomeScreen({super.key}); + @override Widget build(BuildContext context) { final tabBloc = BlocProvider.of(context); diff --git a/bloc_library/lib/widgets/extra_actions.dart b/bloc_library/lib/widgets/extra_actions.dart index 5fe29e03..1e5c71ce 100644 --- a/bloc_library/lib/widgets/extra_actions.dart +++ b/bloc_library/lib/widgets/extra_actions.dart @@ -6,7 +6,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:todos_app_core/todos_app_core.dart'; class ExtraActions extends StatelessWidget { - ExtraActions({super.key = ArchSampleKeys.extraActionsButton}); + const ExtraActions({super.key = ArchSampleKeys.extraActionsButton}); @override Widget build(BuildContext context) { diff --git a/bloc_library/lib/widgets/filter_button.dart b/bloc_library/lib/widgets/filter_button.dart index f436f71e..a17cdd34 100644 --- a/bloc_library/lib/widgets/filter_button.dart +++ b/bloc_library/lib/widgets/filter_button.dart @@ -7,7 +7,7 @@ import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final bool visible; - FilterButton({super.key, required this.visible}); + const FilterButton({super.key, required this.visible}); @override Widget build(BuildContext context) { diff --git a/bloc_library/test/blocs/todos_bloc_test.dart b/bloc_library/test/blocs/todos_bloc_test.dart index a367ce68..fac3c122 100644 --- a/bloc_library/test/blocs/todos_bloc_test.dart +++ b/bloc_library/test/blocs/todos_bloc_test.dart @@ -95,7 +95,6 @@ void main() { ..add(AddTodo(todo1)) ..add(AddTodo(todo2)) ..add(ClearCompleted()); - ; }, expect: () => [ TodosLoaded([]), @@ -119,7 +118,6 @@ void main() { ..add(AddTodo(todo1)) ..add(AddTodo(todo2)) ..add(ToggleAll()); - ; }, expect: () => [ TodosLoaded([]), @@ -146,7 +144,6 @@ void main() { ..add(AddTodo(todo1)) ..add(AddTodo(todo2)) ..add(ToggleAll()); - ; }, expect: () => [ TodosLoaded([]), diff --git a/bloc_library/test/screens/add_edit_screen_test.dart b/bloc_library/test/screens/add_edit_screen_test.dart index 61bd759b..233f39a3 100644 --- a/bloc_library/test/screens/add_edit_screen_test.dart +++ b/bloc_library/test/screens/add_edit_screen_test.dart @@ -37,7 +37,7 @@ void main() { await tester.pumpWidget( MaterialApp( home: Scaffold( - body: AddEditScreen(isEditing: false, onSave: (_, __) {}), + body: AddEditScreen(isEditing: false, onSave: (_, _) {}), ), localizationsDelegates: [ ArchSampleLocalizationsDelegate(), @@ -59,7 +59,7 @@ void main() { home: Scaffold( body: AddEditScreen( isEditing: true, - onSave: (_, __) { + onSave: (_, _) { onSavePressed = true; }, todo: Todo('wash dishes'), @@ -84,7 +84,7 @@ void main() { home: Scaffold( body: AddEditScreen( isEditing: true, - onSave: (_, __) {}, + onSave: (_, _) {}, todo: Todo('wash dishes'), ), ), diff --git a/bloc_library/test/widgets/todo_item_test.dart b/bloc_library/test/widgets/todo_item_test.dart index 5b561f7b..34b8c19f 100644 --- a/bloc_library/test/widgets/todo_item_test.dart +++ b/bloc_library/test/widgets/todo_item_test.dart @@ -1,9 +1,9 @@ +import 'package:bloc_library/localization.dart'; +import 'package:bloc_library/models/models.dart'; +import 'package:bloc_library/widgets/todo_item.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:bloc_library/localization.dart'; import 'package:todos_app_core/todos_app_core.dart'; -import 'package:bloc_library/widgets/todo_item.dart'; -import 'package:bloc_library/models/models.dart'; void main() { group('TodoItem', () { @@ -14,9 +14,9 @@ void main() { MaterialApp( home: Scaffold( body: TodoItem( - onCheckboxChanged: (_) => null, - onDismissed: (_) => null, - onTap: () => null, + onCheckboxChanged: (_) {}, + onDismissed: (_) {}, + onTap: () {}, todo: Todo('wash car', id: '0'), ), ), @@ -39,9 +39,9 @@ void main() { MaterialApp( home: Scaffold( body: TodoItem( - onCheckboxChanged: (_) => null, - onDismissed: (_) => null, - onTap: () => null, + onCheckboxChanged: (_) {}, + onDismissed: (_) {}, + onTap: () {}, todo: Todo('wash car', note: 'some note', id: '0'), ), ), diff --git a/blocs/lib/blocs.dart b/blocs/lib/blocs.dart index 0bb621ae..4448606d 100644 --- a/blocs/lib/blocs.dart +++ b/blocs/lib/blocs.dart @@ -1,5 +1,3 @@ -library blocs; - export 'src/models/models.dart'; export 'src/stats_bloc.dart'; export 'src/todo_bloc.dart'; diff --git a/blocs/lib/src/todo_bloc.dart b/blocs/lib/src/todo_bloc.dart index 0dfbd44a..01c24a6a 100644 --- a/blocs/lib/src/todo_bloc.dart +++ b/blocs/lib/src/todo_bloc.dart @@ -44,6 +44,8 @@ class TodoBloc { void close() { deleteTodo.close(); updateTodo.close(); - _subscriptions.forEach((subscription) => subscription.cancel()); + for (var subscription in _subscriptions) { + subscription.cancel(); + } } } diff --git a/blocs/lib/src/todos_list_bloc.dart b/blocs/lib/src/todos_list_bloc.dart index adc6dbc4..8de28133 100644 --- a/blocs/lib/src/todos_list_bloc.dart +++ b/blocs/lib/src/todos_list_bloc.dart @@ -124,6 +124,8 @@ class TodosListBloc { clearCompleted.close(); toggleAll.close(); updateTodo.close(); - _subscriptions.forEach((subscription) => subscription.cancel()); + for (var subscription in _subscriptions) { + subscription.cancel(); + } } } diff --git a/blocs/lib/src/user_bloc.dart b/blocs/lib/src/user_bloc.dart index 61cda371..2dc34359 100644 --- a/blocs/lib/src/user_bloc.dart +++ b/blocs/lib/src/user_bloc.dart @@ -9,5 +9,5 @@ class UserBloc { Stream login() => _repository.login().asStream().asBroadcastStream(); - UserBloc(UserRepository repository) : this._repository = repository; + UserBloc(UserRepository repository) : _repository = repository; } diff --git a/blocs/test/todo_bloc_test.dart b/blocs/test/todo_bloc_test.dart index b81621c7..4afcacc0 100644 --- a/blocs/test/todo_bloc_test.dart +++ b/blocs/test/todo_bloc_test.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:blocs/blocs.dart'; -import 'package:blocs/src/models/models.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; diff --git a/todos_repository_core/lib/src/reactive_repository.dart b/todos_repository_core/lib/src/reactive_repository.dart index 88ebbf99..9f1c949e 100644 --- a/todos_repository_core/lib/src/reactive_repository.dart +++ b/todos_repository_core/lib/src/reactive_repository.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'dart:core'; import 'todo_entity.dart'; From 0ca62ee8966d2bebdd3035098ec2718e1de69932 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 19:05:34 +0100 Subject: [PATCH 78/89] Fix stats tests --- bloc_library/lib/blocs/stats/stats_bloc.dart | 2 +- bloc_library/test/blocs/stats_bloc_test.dart | 30 ++++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/bloc_library/lib/blocs/stats/stats_bloc.dart b/bloc_library/lib/blocs/stats/stats_bloc.dart index e95e63ee..dda9dac0 100644 --- a/bloc_library/lib/blocs/stats/stats_bloc.dart +++ b/bloc_library/lib/blocs/stats/stats_bloc.dart @@ -12,7 +12,7 @@ class StatsBloc extends Bloc { : super( todosBloc.state is TodosLoaded ? _mapTodosToStats((todosBloc.state as TodosLoaded).todos) - : StatsLoaded(0, 0), + : StatsLoading(), ) { todosSubscription = todosBloc.stream.listen((state) { if (state is TodosLoaded) { diff --git a/bloc_library/test/blocs/stats_bloc_test.dart b/bloc_library/test/blocs/stats_bloc_test.dart index 2471e3b3..e828d4cd 100644 --- a/bloc_library/test/blocs/stats_bloc_test.dart +++ b/bloc_library/test/blocs/stats_bloc_test.dart @@ -5,6 +5,7 @@ import 'package:bloc_library/blocs/todos/todos.dart'; import 'package:bloc_library/models/models.dart'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; class MockTodosBloc extends MockBloc implements TodosBloc {} @@ -13,45 +14,50 @@ void main() { group('StatsBloc', () { final todo1 = Todo('Hallo'); final todo2 = Todo('Hallo2', complete: true); - late TodosBloc todosBloc; - late StatsBloc statsBloc; - - setUp(() { - todosBloc = MockTodosBloc(); - statsBloc = StatsBloc(todosBloc: todosBloc); - }); blocTest( 'should update the stats properly when TodosBloc emits TodosLoaded', build: () { - todosBloc = MockTodosBloc(); + final todosBloc = MockTodosBloc(); + when(() => todosBloc.state).thenReturn(TodosLoading()); whenListen( todosBloc, Stream.fromIterable([TodosLoaded([])]), ); return StatsBloc(todosBloc: todosBloc); }, - act: (StatsBloc bloc) async => bloc.add(UpdateStats([])), expect: () => [StatsLoaded(0, 0)], ); blocTest( 'should update the stats properly when Todos are empty', - build: () => statsBloc, + build: () { + final todosBloc = MockTodosBloc(); + when(() => todosBloc.state).thenReturn(TodosLoading()); + return StatsBloc(todosBloc: todosBloc); + }, act: (StatsBloc bloc) async => bloc.add(UpdateStats([])), expect: () => [StatsLoaded(0, 0)], ); blocTest( 'should update the stats properly when Todos contains one active todo', - build: () => statsBloc, + build: () { + final todosBloc = MockTodosBloc(); + when(() => todosBloc.state).thenReturn(TodosLoading()); + return StatsBloc(todosBloc: todosBloc); + }, act: (StatsBloc bloc) async => bloc.add(UpdateStats([todo1])), expect: () => [StatsLoaded(1, 0)], ); blocTest( 'should update the stats properly when Todos contains one active todo and one completed todo', - build: () => statsBloc, + build: () { + final todosBloc = MockTodosBloc(); + when(() => todosBloc.state).thenReturn(TodosLoading()); + return StatsBloc(todosBloc: todosBloc); + }, act: (StatsBloc bloc) async => bloc.add(UpdateStats([todo1, todo2])), expect: () => [StatsLoaded(1, 1)], ); From f3a91375aca0a39287a735d4f643eb8669daff5d Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 19:43:29 +0100 Subject: [PATCH 79/89] Add dark theme to apps --- bloc_flutter/lib/app.dart | 1 + bloc_library/lib/app.dart | 1 + change_notifier_provider/lib/app.dart | 1 + freezed_provider_value_notifier/lib/app.dart | 1 + mobx/lib/app.dart | 1 + mvi_flutter/lib/mvi_app.dart | 1 + redux/lib/app.dart | 1 + scoped_model/lib/app.dart | 1 + signals/lib/app.dart | 1 + simple_bloc_flutter/lib/app.dart | 1 + vanilla/lib/app.dart | 2 ++ 11 files changed, 12 insertions(+) diff --git a/bloc_flutter/lib/app.dart b/bloc_flutter/lib/app.dart index a9f1a851..cd05556a 100644 --- a/bloc_flutter/lib/app.dart +++ b/bloc_flutter/lib/app.dart @@ -28,6 +28,7 @@ class BlocApp extends StatelessWidget { child: MaterialApp( onGenerateTitle: (context) => BlocLocalizations.of(context).appTitle, theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), BlocLocalizationsDelegate(), diff --git a/bloc_library/lib/app.dart b/bloc_library/lib/app.dart index cb18b896..3db58cbe 100644 --- a/bloc_library/lib/app.dart +++ b/bloc_library/lib/app.dart @@ -22,6 +22,7 @@ class TodosApp extends StatelessWidget { onGenerateTitle: (context) => FlutterBlocLocalizations.of(context).appTitle, theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), FlutterBlocLocalizationsDelegate(), diff --git a/change_notifier_provider/lib/app.dart b/change_notifier_provider/lib/app.dart index 03fca3d8..bc329fd6 100644 --- a/change_notifier_provider/lib/app.dart +++ b/change_notifier_provider/lib/app.dart @@ -19,6 +19,7 @@ class ProviderApp extends StatelessWidget { create: (_) => TodoListModel(repository: repository)..loadTodos(), child: MaterialApp( theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), ProviderLocalizationsDelegate(), diff --git a/freezed_provider_value_notifier/lib/app.dart b/freezed_provider_value_notifier/lib/app.dart index 062288f1..1f1f6167 100644 --- a/freezed_provider_value_notifier/lib/app.dart +++ b/freezed_provider_value_notifier/lib/app.dart @@ -19,6 +19,7 @@ class ProviderApp extends StatelessWidget { create: (_) => TodoListController(todosRepository: repository), child: MaterialApp( theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), ProviderLocalizationsDelegate(), diff --git a/mobx/lib/app.dart b/mobx/lib/app.dart index d74b3bdd..2e431e20 100644 --- a/mobx/lib/app.dart +++ b/mobx/lib/app.dart @@ -26,6 +26,7 @@ class MobxApp extends StatelessWidget { child: MaterialApp( initialRoute: ArchSampleRoutes.home, theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ MobxLocalizationsDelegate(), ArchSampleLocalizationsDelegate(), diff --git a/mvi_flutter/lib/mvi_app.dart b/mvi_flutter/lib/mvi_app.dart index d3054563..d735b264 100644 --- a/mvi_flutter/lib/mvi_app.dart +++ b/mvi_flutter/lib/mvi_app.dart @@ -24,6 +24,7 @@ class MviApp extends StatelessWidget { child: MaterialApp( onGenerateTitle: (context) => BlocLocalizations.of(context).appTitle, theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), InheritedWidgetLocalizationsDelegate(), diff --git a/redux/lib/app.dart b/redux/lib/app.dart index b594dc48..82728f64 100644 --- a/redux/lib/app.dart +++ b/redux/lib/app.dart @@ -20,6 +20,7 @@ class ReduxApp extends StatelessWidget { child: MaterialApp( onGenerateTitle: (context) => ReduxLocalizations.of(context).appTitle, theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), ReduxLocalizationsDelegate(), diff --git a/scoped_model/lib/app.dart b/scoped_model/lib/app.dart index 99f2c1bb..2faefd37 100644 --- a/scoped_model/lib/app.dart +++ b/scoped_model/lib/app.dart @@ -18,6 +18,7 @@ class ScopedModelApp extends StatelessWidget { onGenerateTitle: (context) => ScopedModelLocalizations.of(context).appTitle, theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), ScopedModelLocalizationsDelegate(), diff --git a/signals/lib/app.dart b/signals/lib/app.dart index 43b5b112..856b096c 100644 --- a/signals/lib/app.dart +++ b/signals/lib/app.dart @@ -21,6 +21,7 @@ class SignalsApp extends StatelessWidget { dispose: (_, controller) => controller.dispose(), child: MaterialApp( theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), SignalsLocalizationsDelegate(), diff --git a/simple_bloc_flutter/lib/app.dart b/simple_bloc_flutter/lib/app.dart index 53656720..ae5f2b04 100644 --- a/simple_bloc_flutter/lib/app.dart +++ b/simple_bloc_flutter/lib/app.dart @@ -29,6 +29,7 @@ class SimpleBlocApp extends StatelessWidget { onGenerateTitle: (context) => SimpleBlocLocalizations.of(context).appTitle, theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), SimpleBlocLocalizationsDelegate(), diff --git a/vanilla/lib/app.dart b/vanilla/lib/app.dart index 68166196..c4437c13 100644 --- a/vanilla/lib/app.dart +++ b/vanilla/lib/app.dart @@ -45,6 +45,8 @@ class VanillaAppState extends State { Widget build(BuildContext context) { return MaterialApp( onGenerateTitle: (context) => VanillaLocalizations.of(context).appTitle, + theme: ArchSampleTheme.theme, + darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), VanillaLocalizationsDelegate(), From cc1df66280d44980ddfccb078bf1611d97ee443f Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 20:41:02 +0100 Subject: [PATCH 80/89] Add latest jobs to combined coverage --- .github/workflows/static_analysis_and_tests.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index fb2e79c8..4df6e6a3 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -185,11 +185,15 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./vanilla - read_coverage: - name: Read Combined Coverage Files + combine_and_upload_coverage: + name: Combine and Upload Coverage runs-on: ubuntu-latest needs: + - bloc_flutter + - bloc_library + - blocs - change_notifier_provider + - freezed_provider_value_notifier - inherited_widget - mobx - mvi_base From 5f083b7d08de1959bc6e58e111930aac72c85539 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 20:47:21 +0100 Subject: [PATCH 81/89] Make it so that scoped model can run on web --- scoped_model/lib/main.dart | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/scoped_model/lib/main.dart b/scoped_model/lib/main.dart index 103a017c..cf2eebf3 100644 --- a/scoped_model/lib/main.dart +++ b/scoped_model/lib/main.dart @@ -1,17 +1,23 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:scoped_model_sample/app.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; -void main() { +void main() async { WidgetsFlutterBinding.ensureInitialized(); - var todoRepo = const LocalStorageRepository( - localStorage: FileStorage( - 'scoped_model_todos', - getApplicationDocumentsDirectory, + final localStorage = kIsWeb + ? KeyValueStorage( + 'scoped_model_todos', + await SharedPreferences.getInstance(), + ) + : FileStorage('scoped_model_todos', getApplicationDocumentsDirectory); + + runApp( + ScopedModelApp( + repository: LocalStorageRepository(localStorage: localStorage), ), ); - - runApp(ScopedModelApp(repository: todoRepo)); } From 86994e3e0701a3128e053f9f776bf65af6dce1d2 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 21:29:04 +0100 Subject: [PATCH 82/89] Build web app and deploy to netlify --- .../dart_analysis_and_tests/action.yml | 4 - .../flutter_analysis_and_tests/action.yml | 29 ++++- .../workflows/static_analysis_and_tests.yml | 36 ++++++ vanilla/.metadata | 30 ++--- vanilla/android/build.gradle.kts | 5 +- vanilla/android/settings.gradle.kts | 17 +-- vanilla/ios/Flutter/AppFrameworkInfo.plist | 2 +- vanilla/ios/Podfile | 2 +- vanilla/ios/Runner.xcodeproj/project.pbxproj | 12 +- vanilla/linux/runner/my_application.cc | 16 ++- vanilla/macos/Podfile | 2 +- vanilla/macos/Podfile.lock | 4 +- .../macos/Runner.xcodeproj/project.pbxproj | 104 +++++++++--------- vanilla/pubspec.yaml | 2 +- 14 files changed, 171 insertions(+), 94 deletions(-) diff --git a/.github/actions/dart_analysis_and_tests/action.yml b/.github/actions/dart_analysis_and_tests/action.yml index c2459e4b..5120e7f3 100644 --- a/.github/actions/dart_analysis_and_tests/action.yml +++ b/.github/actions/dart_analysis_and_tests/action.yml @@ -4,10 +4,6 @@ inputs: working-directory: description: "Directory to run validation in" required: true - run-integration-tests: - description: "Run integration tests" - required: false - default: "true" runs: using: "composite" diff --git a/.github/actions/flutter_analysis_and_tests/action.yml b/.github/actions/flutter_analysis_and_tests/action.yml index 14dc8edc..188e03a1 100644 --- a/.github/actions/flutter_analysis_and_tests/action.yml +++ b/.github/actions/flutter_analysis_and_tests/action.yml @@ -8,7 +8,16 @@ inputs: description: "Run integration tests" required: false default: "true" - + deploy-to-netlify: + description: "Deploy to Netlify" + required: true + default: "false" + netlify-auth-token: + description: "Netlify auth token" + required: true + netlify-site-id: + description: "Netlify site id" + required: true runs: using: "composite" steps: @@ -64,3 +73,21 @@ runs: export DISPLAY=:99 # Set display for Xvfb xvfb-run -a flutter test integration_test/app_test.dart -d linux working-directory: ${{ inputs.working-directory }} + + - name: Build web app + if: ${{ inputs.deploy-to-netlify != 'false' }} + shell: bash + run: | + flutter build web --wasm + working-directory: ${{ inputs.working-directory }} + + - name: Deploy to Netlify + if: ${{ inputs.deploy-to-netlify != 'false' }} + uses: nwtgck/actions-netlify@v3.0 + with: + publish-dir: ${{ inputs.working-directory }}/build/web + production-deploy: true + deploy-message: "Deploy from GitHub Actions" + env: + NETLIFY_AUTH_TOKEN: ${{ inputs.netlify-auth-token }} + NETLIFY_SITE_ID: ${{ inputs.netlify-site-id }} diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/static_analysis_and_tests.yml index 4df6e6a3..16f45456 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/static_analysis_and_tests.yml @@ -19,6 +19,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./bloc_flutter + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.BLOC_FLUTTER_NETLIFY_SITE_ID }} bloc_library: name: bloc_library runs-on: ubuntu-latest @@ -30,6 +33,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./bloc_library + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.BLOC_LIBRARY_NETLIFY_SITE_ID }} blocs: name: blocs runs-on: ubuntu-latest @@ -52,6 +58,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./change_notifier_provider + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.CHANGE_NOTIFIER_PROVIDER_NETLIFY_SITE_ID }} freezed_provider_value_notifier: name: freezed_provider_value_notifier runs-on: ubuntu-latest @@ -63,6 +72,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./freezed_provider_value_notifier + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.FREEZED_PROVIDER_VALUE_NOTIFIER_NETLIFY_SITE_ID }} inherited_widget: name: inherited_widget runs-on: ubuntu-latest @@ -74,6 +86,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./inherited_widget + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.INHERITED_WIDGET_NETLIFY_SITE_ID }} mobx: name: mobx runs-on: ubuntu-latest @@ -85,6 +100,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./mobx + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.MOBX_NETLIFY_SITE_ID }} mvi_base: name: mvi_base runs-on: ubuntu-latest @@ -107,6 +125,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./mvi_flutter + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.MVI_NETLIFY_SITE_ID }} redux: name: redux runs-on: ubuntu-latest @@ -118,6 +139,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./redux + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.REDUX_NETLIFY_SITE_ID }} scoped_model: name: scoped_model runs-on: ubuntu-latest @@ -129,6 +153,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./scoped_model + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.SCOPED_MODEL_NETLIFY_SITE_IT }} signals: name: signals runs-on: ubuntu-latest @@ -140,6 +167,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./signals + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.SIGNALS_NETLIFY_SITE_ID }} simple_bloc_flutter: name: simple_bloc_flutter runs-on: ubuntu-latest @@ -151,6 +181,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./simple_bloc_flutter + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.SIMPLE_BLOC_NETLIFY_SITE_ID }} simple_blocs: name: simple_blocs runs-on: ubuntu-latest @@ -185,6 +218,9 @@ jobs: uses: ./.github/actions/flutter_analysis_and_tests with: working-directory: ./vanilla + deploy-to-netlify: ${{ github.ref_name == 'refresh' }} + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.VANILLA_NETLIFY_SITE_ID }} combine_and_upload_coverage: name: Combine and Upload Coverage runs-on: ubuntu-latest diff --git a/vanilla/.metadata b/vanilla/.metadata index fdb4416b..05a8ab44 100644 --- a/vanilla/.metadata +++ b/vanilla/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "fcf2c11572af6f390246c056bc905eca609533a0" + revision: "05db9689081f091050f01aed79f04dce0c750154" channel: "stable" project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: fcf2c11572af6f390246c056bc905eca609533a0 - base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: android - create_revision: fcf2c11572af6f390246c056bc905eca609533a0 - base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: ios - create_revision: fcf2c11572af6f390246c056bc905eca609533a0 - base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: linux - create_revision: fcf2c11572af6f390246c056bc905eca609533a0 - base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: macos - create_revision: fcf2c11572af6f390246c056bc905eca609533a0 - base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: web - create_revision: fcf2c11572af6f390246c056bc905eca609533a0 - base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 - platform: windows - create_revision: fcf2c11572af6f390246c056bc905eca609533a0 - base_revision: fcf2c11572af6f390246c056bc905eca609533a0 + create_revision: 05db9689081f091050f01aed79f04dce0c750154 + base_revision: 05db9689081f091050f01aed79f04dce0c750154 # User provided section diff --git a/vanilla/android/build.gradle.kts b/vanilla/android/build.gradle.kts index 89176ef4..dbee657b 100644 --- a/vanilla/android/build.gradle.kts +++ b/vanilla/android/build.gradle.kts @@ -5,7 +5,10 @@ allprojects { } } -val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() rootProject.layout.buildDirectory.value(newBuildDir) subprojects { diff --git a/vanilla/android/settings.gradle.kts b/vanilla/android/settings.gradle.kts index ab39a10a..fb605bc8 100644 --- a/vanilla/android/settings.gradle.kts +++ b/vanilla/android/settings.gradle.kts @@ -1,11 +1,12 @@ pluginManagement { - val flutterSdkPath = run { - val properties = java.util.Properties() - file("local.properties").inputStream().use { properties.load(it) } - val flutterSdkPath = properties.getProperty("flutter.sdk") - require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } - flutterSdkPath - } + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") @@ -18,7 +19,7 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.7.3" apply false + id("com.android.application") version "8.9.1" apply false id("org.jetbrains.kotlin.android") version "2.1.0" apply false } diff --git a/vanilla/ios/Flutter/AppFrameworkInfo.plist b/vanilla/ios/Flutter/AppFrameworkInfo.plist index 7c569640..1dc6cf76 100644 --- a/vanilla/ios/Flutter/AppFrameworkInfo.plist +++ b/vanilla/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 12.0 + 13.0 diff --git a/vanilla/ios/Podfile b/vanilla/ios/Podfile index e549ee22..620e46eb 100644 --- a/vanilla/ios/Podfile +++ b/vanilla/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '12.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/vanilla/ios/Runner.xcodeproj/project.pbxproj b/vanilla/ios/Runner.xcodeproj/project.pbxproj index 7ce1ef68..50f8c90f 100644 --- a/vanilla/ios/Runner.xcodeproj/project.pbxproj +++ b/vanilla/ios/Runner.xcodeproj/project.pbxproj @@ -346,7 +346,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -362,7 +362,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = H54QW28H73; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -473,7 +473,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -524,7 +524,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -542,7 +542,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = H54QW28H73; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -565,7 +565,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = H54QW28H73; + DEVELOPMENT_TEAM = 8W92H589V9; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/vanilla/linux/runner/my_application.cc b/vanilla/linux/runner/my_application.cc index 563166c6..e464f86e 100644 --- a/vanilla/linux/runner/my_application.cc +++ b/vanilla/linux/runner/my_application.cc @@ -14,6 +14,12 @@ struct _MyApplication { G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + // Implements GApplication::activate. static void my_application_activate(GApplication* application) { MyApplication* self = MY_APPLICATION(application); @@ -48,15 +54,23 @@ static void my_application_activate(GApplication* application) { } gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); g_autoptr(FlDartProject) project = fl_dart_project_new(); fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); gtk_widget_show(GTK_WIDGET(view)); gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); gtk_widget_grab_focus(GTK_WIDGET(view)); diff --git a/vanilla/macos/Podfile b/vanilla/macos/Podfile index 29c8eb32..ff5ddb3b 100644 --- a/vanilla/macos/Podfile +++ b/vanilla/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/vanilla/macos/Podfile.lock b/vanilla/macos/Podfile.lock index 390b5331..d2f9a639 100644 --- a/vanilla/macos/Podfile.lock +++ b/vanilla/macos/Podfile.lock @@ -21,10 +21,10 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin SPEC CHECKSUMS: - FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 -PODFILE CHECKSUM: 7eb978b976557c8c1cd717d8185ec483fd090a82 +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 COCOAPODS: 1.16.2 diff --git a/vanilla/macos/Runner.xcodeproj/project.pbxproj b/vanilla/macos/Runner.xcodeproj/project.pbxproj index 68fbbaec..057ff1e4 100644 --- a/vanilla/macos/Runner.xcodeproj/project.pbxproj +++ b/vanilla/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 0DB0F2570C55B0B797788C08 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9343CBAD94747D7ACB4EB50E /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 94FA0F4787E5FB9819D65440 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4A735CD08E7611CB7B7C8E4 /* Pods_Runner.framework */; }; - C5806345F4B8C8CBD26EC999 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1ED0734AB4899D7F662F1BAD /* Pods_RunnerTests.framework */; }; + 40D460CB6F26FFBA4EB68555 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EFD772974F837840962A580A /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 134A8317AE0D56A9FA5CA10D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 1ED0734AB4899D7F662F1BAD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 052C4455B2AD92DECBAF85B9 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +79,15 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3A159F64CEBAB3B0863CBD59 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 3D768DE9A14B5F7F18A1429B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9343CBAD94747D7ACB4EB50E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A4A735CD08E7611CB7B7C8E4 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABED7C32DADA4475CB8D9F57 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - DC48E3A48ECE8F4D9F3CB232 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EC717A0419A7371AFEA94911 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - F199D976A342316FC3F8FDEC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + D4E88A8FC328CF8087B1DDAC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + DE7158C3C2DA06E08F2E5DE0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + EFD772974F837840962A580A /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F056FBB9B24E5793CCFB83FF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F2010033FF59ECE89969AD6D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C5806345F4B8C8CBD26EC999 /* Pods_RunnerTests.framework in Frameworks */, + 40D460CB6F26FFBA4EB68555 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,7 +103,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 94FA0F4787E5FB9819D65440 /* Pods_Runner.framework in Frameworks */, + 0DB0F2570C55B0B797788C08 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -137,7 +137,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - C76E6EDE126C2B9D79F13C9D /* Pods */, + F1FD6A42FBE6DC914350D881 /* Pods */, ); sourceTree = ""; }; @@ -185,27 +185,27 @@ path = Runner; sourceTree = ""; }; - C76E6EDE126C2B9D79F13C9D /* Pods */ = { + D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - EC717A0419A7371AFEA94911 /* Pods-Runner.debug.xcconfig */, - DC48E3A48ECE8F4D9F3CB232 /* Pods-Runner.release.xcconfig */, - 134A8317AE0D56A9FA5CA10D /* Pods-Runner.profile.xcconfig */, - F199D976A342316FC3F8FDEC /* Pods-RunnerTests.debug.xcconfig */, - 3A159F64CEBAB3B0863CBD59 /* Pods-RunnerTests.release.xcconfig */, - ABED7C32DADA4475CB8D9F57 /* Pods-RunnerTests.profile.xcconfig */, + 9343CBAD94747D7ACB4EB50E /* Pods_Runner.framework */, + EFD772974F837840962A580A /* Pods_RunnerTests.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { + F1FD6A42FBE6DC914350D881 /* Pods */ = { isa = PBXGroup; children = ( - A4A735CD08E7611CB7B7C8E4 /* Pods_Runner.framework */, - 1ED0734AB4899D7F662F1BAD /* Pods_RunnerTests.framework */, + F2010033FF59ECE89969AD6D /* Pods-Runner.debug.xcconfig */, + DE7158C3C2DA06E08F2E5DE0 /* Pods-Runner.release.xcconfig */, + D4E88A8FC328CF8087B1DDAC /* Pods-Runner.profile.xcconfig */, + 052C4455B2AD92DECBAF85B9 /* Pods-RunnerTests.debug.xcconfig */, + F056FBB9B24E5793CCFB83FF /* Pods-RunnerTests.release.xcconfig */, + 3D768DE9A14B5F7F18A1429B /* Pods-RunnerTests.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 285D0FA9836D163AAF91E7EE /* [CP] Check Pods Manifest.lock */, + DACAACDA87E72AD922CB1967 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B9B9C422F2F1C7E3CB880C88 /* [CP] Check Pods Manifest.lock */, + DA360F432763FB605CF70BFF /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 5AAB6782DCB603FE9E7FC4F2 /* [CP] Embed Pods Frameworks */, + 20634B7A4D35A646544E2307 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,26 +323,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 285D0FA9836D163AAF91E7EE /* [CP] Check Pods Manifest.lock */ = { + 20634B7A4D35A646544E2307 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3399D490228B24CF009A79C7 /* ShellScript */ = { @@ -383,24 +378,29 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 5AAB6782DCB603FE9E7FC4F2 /* [CP] Embed Pods Frameworks */ = { + DA360F432763FB605CF70BFF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B9B9C422F2F1C7E3CB880C88 /* [CP] Check Pods Manifest.lock */ = { + DACAACDA87E72AD922CB1967 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -415,7 +415,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F199D976A342316FC3F8FDEC /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 052C4455B2AD92DECBAF85B9 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A159F64CEBAB3B0863CBD59 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = F056FBB9B24E5793CCFB83FF /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ABED7C32DADA4475CB8D9F57 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 3D768DE9A14B5F7F18A1429B /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -557,7 +557,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -639,7 +639,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -689,7 +689,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/vanilla/pubspec.yaml b/vanilla/pubspec.yaml index 763df0c5..e42d6281 100644 --- a/vanilla/pubspec.yaml +++ b/vanilla/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.8.1 + sdk: ^3.9.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions From 97bcc0362de18cdad32327a8b1e4a5a41467fd9b Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 21:41:33 +0100 Subject: [PATCH 83/89] Rename things a bit for clarity --- .../action.yml | 0 ...s_and_tests.yml => analyze_test_build.yml} | 60 +++++++++---------- 2 files changed, 30 insertions(+), 30 deletions(-) rename .github/actions/{flutter_analysis_and_tests => flutter_analysis_test_build}/action.yml (100%) rename .github/workflows/{static_analysis_and_tests.yml => analyze_test_build.yml} (82%) diff --git a/.github/actions/flutter_analysis_and_tests/action.yml b/.github/actions/flutter_analysis_test_build/action.yml similarity index 100% rename from .github/actions/flutter_analysis_and_tests/action.yml rename to .github/actions/flutter_analysis_test_build/action.yml diff --git a/.github/workflows/static_analysis_and_tests.yml b/.github/workflows/analyze_test_build.yml similarity index 82% rename from .github/workflows/static_analysis_and_tests.yml rename to .github/workflows/analyze_test_build.yml index 16f45456..211b7e3b 100644 --- a/.github/workflows/static_analysis_and_tests.yml +++ b/.github/workflows/analyze_test_build.yml @@ -1,4 +1,4 @@ -name: Static Analysis & Tests +name: Static Analysis, Run Tests and Build Web Apps on: pull_request: @@ -15,8 +15,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./bloc_flutter deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -29,8 +29,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./bloc_library deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -43,7 +43,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests + - name: Static Analysis, Run Tests, and Build web app uses: ./.github/actions/dart_analysis_and_tests with: working-directory: ./blocs @@ -54,8 +54,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./change_notifier_provider deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -68,8 +68,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./freezed_provider_value_notifier deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -82,8 +82,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./inherited_widget deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -96,8 +96,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./mobx deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -110,7 +110,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests + - name: Static Analysis, Run Tests, and Build web app uses: ./.github/actions/dart_analysis_and_tests with: working-directory: ./mvi_base @@ -121,8 +121,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./mvi_flutter deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -135,8 +135,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./redux deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -149,8 +149,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./scoped_model deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -163,8 +163,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./signals deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -177,8 +177,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./simple_bloc_flutter deploy-to-netlify: ${{ github.ref_name == 'refresh' }} @@ -191,7 +191,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests + - name: Static Analysis, Run Tests, and Build web app uses: ./.github/actions/dart_analysis_and_tests with: working-directory: ./simple_blocs @@ -202,8 +202,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./todos_repository_local_storage run-integration-tests: false @@ -214,8 +214,8 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Static Analysis & Tests - uses: ./.github/actions/flutter_analysis_and_tests + - name: Static Analysis, Run Tests, and Build web app + uses: ./.github/actions/flutter_analysis_test_build with: working-directory: ./vanilla deploy-to-netlify: ${{ github.ref_name == 'refresh' }} From a67dbe957056d528fc98a83f6bf5e090410c11b3 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 21:58:28 +0100 Subject: [PATCH 84/89] Update line count --- line_count.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/line_count.md b/line_count.md index 87cbe0b2..48c1e973 100644 --- a/line_count.md +++ b/line_count.md @@ -15,18 +15,18 @@ samples to make them smaller, unless doing so improves the application overall. | *Sample* | *LOC (no comments)* | |--------|-------------------| +| built_redux | 0 | +| firestore_redux | 0 | | scoped_model | 767 | -| signals | 782 | -| mobx | 799 | +| signals | 783 | +| mobx | 800 | | inherited_widget | 815 | -| change_notifier_provider | 821 | -| vanilla | 835 | -| simple blocs | 1043 | -| bloc | 1124 | -| mvi | 1209 | -| bloc library | 1210 | -| built_redux | 1212 | -| redux | 1354 | -| firestore_redux | 1395 | +| change_notifier_provider | 822 | +| vanilla | 837 | +| simple blocs | 1033 | +| bloc | 1123 | +| bloc library | 1191 | +| mvi | 1232 | +| redux | 1345 | -Note: This file was generated on Wed Sep 3 14:52:54 UTC 2025 using `scripts/line_counter.sh`. +Note: This file was generated on Sun Sep 7 20:58:20 UTC 2025 using `scripts/line_counter.sh`. From eee294cd5319a878d96a2e52a3bf2dd54557d7f2 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 22:10:18 +0100 Subject: [PATCH 85/89] Update theme --- README.md | 75 +++++++------------- bloc_flutter/lib/app.dart | 2 +- bloc_library/lib/app.dart | 2 +- change_notifier_provider/lib/app.dart | 2 +- freezed_provider_value_notifier/lib/app.dart | 2 +- inherited_widget/lib/app.dart | 2 +- mobx/lib/app.dart | 2 +- mvi_flutter/lib/mvi_app.dart | 2 +- redux/lib/app.dart | 2 +- scoped_model/lib/app.dart | 2 +- signals/lib/app.dart | 2 +- simple_bloc_flutter/lib/app.dart | 2 +- todos_app_core/lib/src/theme.dart | 18 ++++- vanilla/lib/app.dart | 2 +- vanilla/lib/main.dart | 2 +- 15 files changed, 54 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index bb9ade52..1ca3c0ee 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # flutter_architecture_samples -[![Build Status](https://github.com/brianegan/flutter_architecture_samples/actions/workflows/static_analysis_and_tests.yml/badge.svg?branch=master)](https://github.com/brianegan/flutter_architecture_samples/actions/workflows/static_analysis_and_tests.yml) -[![codecov](https://codecov.io/gh/brianegan/flutter_architecture_samples/branch/master/graph/badge.svg)](https://codecov.io/gh/brianegan/flutter_architecture_samples) +[![Build Status](https://github.com/brianegan/flutter_architecture_samples/actions/workflows/analyze_test_build.yml/badge.svg?branch=main)](https://github.com/brianegan/flutter_architecture_samples/actions/workflows/analyze_test_build.ymll) +[![codecov](https://codecov.io/gh/brianegan/flutter_architecture_samples/branch/main/graph/badge.svg)](https://codecov.io/gh/brianegan/flutter_architecture_samples) List of Todos Screen @@ -17,35 +17,30 @@ The Flutter Architecture Samples project demonstrates strategies to help solve or avoid these common problems. This project implements the same app using different architectural concepts and tools. -You can use the samples in this project as a learning reference, or as a -starting point for creating your own apps. The focus of this project is on -demonstrating how to structure your code, design your architecture, and the -eventual impact of adopting these patterns on testing and maintaining your app. -You can use the techniques demonstrated here in many different ways to build -apps. Your own particular priorities will impact how you implement the concepts -in these projects, so you should not consider these samples to be canonical -examples. To ensure the focus is kept on the aims described above, the app uses -a simple UI. +You can use the samples in this project as a learning reference, as a roughly +apples-to-apples comparison of different approaches, or as a starting point for +creating your own apps. The focus of this project is on demonstrating how to +structure your code, design your architecture, and the eventual impact of +adopting these patterns on testing and maintaining your app. You can use the +techniques demonstrated here in many different ways to build apps. Your own +particular priorities will impact how you implement the concepts in these +projects, so you should not consider these samples to be canonical examples. To +ensure the focus is kept on the aims described above, the app uses a simple UI. ### Current Samples -- [Vanilla Lifting State Up Example](vanilla) ([Web Demo](https://fas_vanilla.codemagic.app)) - Uses the tools Flutter provides out of the box to manage app state. -- [InheritedWidget Example](inherited_widget) ([Web Demo](https://fas_inherited_widget.codemagic.app)) - Uses an InheritedWidget to pass app state down the widget hierarchy. -- [Change Notifier + Provider Example](change_notifier_provider) ([Web Demo](https://fas_change_notifier_provider.codemagic.app)) - Uses the [ChangeNotifier](https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package now recommended by the Flutter team. -- [BLoC Example](bloc_flutter) ([Web Demo](https://fas_bloc_flutter.codemagic.app)) - An implementation of the BLoC pattern, which uses Sinks for Inputs and Streams for Outputs -- [Bloc Library Example](bloc_library) ([Web Demo](https://fas_bloc_library.codemagic.app)) - Uses the [bloc](https://pub.dartlang.org/packages/bloc) and [flutter_bloc](https://pub.dartlang.org/packages/flutter_bloc) libraries to manage app state and update Widgets. -- [MobX Example](mobx) ([Web Demo](https://fas_mobx.codemagic.app)) - Uses the [MobX](https://pub.dev/packages/mobx) library to manage app state and update widgets using `Observables`, `Actions` and `Reactions`. -- [Redux Example](redux) ([Web Demo](https://fas_redux.codemagic.app)) - Uses the [Redux](https://pub.dartlang.org/packages/redux) library to manage app state and update Widgets -- ["Simple" BLoC Example](simple_bloc_flutter) ([Web Demo](https://fas_simple_bloc.codemagic.app)) - Similar to the BLoC pattern, but uses Functions for Inputs and Streams for Outputs. Results in far less code compared to standard BLoC. -- [MVI Example](mvi_flutter) ([Web Demo](https://fas_mvi.codemagic.app)) - Uses the concepts from Cycle.JS and applies them to Flutter. -- [states_rebuilder Example](states_rebuilder) ([Web Demo](https://fas_states_rebuilder.codemagic.app)) - Uses the [states_rebuilder](https://pub.dev/packages/states_rebuilder) library to manage app state and update Widgets. -- [built_redux Example](built_redux) - Uses the [built_redux](https://pub.dartlang.org/packages/built_redux) library to enforce immutability and manage app state -- [scoped_model Example](scoped_model) - Uses the [scoped_model](https://pub.dartlang.org/packages/scoped_model) library to hold app state and notify Widgets of Updates -- [Firestore Redux Example](firestore_redux) - Uses the [Redux](https://pub.dartlang.org/packages/redux) library to manage app state and update Widgets and - adds [Cloud_Firestore](https://firebase.google.com/docs/firestore/) as the Todos database. -- [MVU Example](mvu) - Uses the [dartea](https://pub.dartlang.org/packages/dartea) library to manage app state and update Widgets. -- [MVC Example](mvc) - Uses the [MVC](https://pub.dartlang.org/packages/mvc_pattern) library to implement the traditional MVC design pattern. -- [Frideos Example](frideos_library) - Uses the [Frideos](https://pub.dartlang.org/packages/frideos) library to manage app state and update widgets using streams. +- [Vanilla Lifting State Up Example](vanilla) ([Web Demo](https://fas-vanilla.netlify.app)) - Uses the tools Flutter provides out of the box to manage app state. +- [InheritedWidget Example](inherited_widget) ([Web Demo](https://fas-inherited-widget.netlify.app)) - Uses an InheritedWidget to pass app state down the widget hierarchy. +- [Change Notifier + Provider Example](change_notifier_provider) ([Web Demo](https://fas-change-notifier-provider.netlify.app/)) - Uses the [ChangeNotifier](https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package now recommended by the Flutter team. +- [Freezed + Provider + Value Notifier](freezed_provider_value_notifier) ([Web Demo](https://fas-freezed-provider-value-notifier.netlify.app)) - Uses the [ValueNotifier](https://api.flutter.dev/flutter/foundation/ValueNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package. +- [BLoC Example](bloc_flutter) ([Web Demo](https://fas-bloc-flutter.netlify.app/)) - An implementation of the original [BLoC pattern](https://www.youtube.com/watch?v=PLHln7wHgPE&list=PLOU2XLYxmsIIJr3vjxggY7yGcGO7i9BK5&index=13) described by Paolo Soares at DartConf 2018, which uses Sinks for Inputs and Streams for Outputs +- [Bloc Library Example](bloc_library) ([Web Demo](https://fas-bloc-library.netlify.app)) - Uses the [bloc](https://pub.dartlang.org/packages/bloc) and [flutter_bloc](https://pub.dartlang.org/packages/flutter_bloc) libraries to manage app state and update Widgets. +- [MobX Example](mobx) ([Web Demo](https://fas-mobx.netlify.app)) - Uses the [MobX](https://pub.dev/packages/mobx) library to manage app state and update widgets using `Observables`, `Actions` and `Reactions`. +- [Redux Example](redux) ([Web Demo](https://fas-redux.netlify.app)) - Uses the [Redux](https://pub.dartlang.org/packages/redux) library to manage app state and update Widgets +- ["Simple" BLoC Example](simple_bloc_flutter) ([Web Demo](https://fas-simple-bloc.netlify.app/)) - Similar to the BLoC pattern, but uses Functions for Inputs and Streams for Outputs. Results in far less code compared to original BLoC pattern if code sharing with AngularDart apps isn't an important use case for your app. +- [Signals Example](signals) ([Web Demo](https://fas-signals.netlify.app)) - Uses the [Signals](https://pub.dev/packages/signals) package by [Rody Davis](https://pub.dev/publishers/rodydavis.com/packages). +- [MVI Example](mvi_flutter) ([Web Demo](https://fas-mvi.netlify.app)) - Uses the concepts from [Cycle.JS](https://cycle.js.org/) and applies them to Flutter. +- [scoped_model Example](scoped_model) ([Web Demo](https://fas-scoped-model.netlify.app)) - Uses the [scoped_model](https://pub.dartlang.org/packages/scoped_model) library to hold app state and notify Widgets of Updates ### Supporting Code @@ -59,37 +54,19 @@ window.localStorage for web projects. - [todos_repository_local_storage](todos_repository_local_storage) - Implements the todos repository using the file system, window.localStorage, and SharedPreferences as the data source. -- [firebase_flutter_repository](firebase_flutter_repository) - Implements -the todos repository using firestore as the data source. -- [firebase_rtdb_flutter_repository](firebase_rtdb_flutter_repository) - -Implements the todos repository using firebase real-time database as the data -source. ### Running the samples -#### iOS / Android - ``` cd flutter run ``` -#### Web - -Make sure you're on Flutter version "Flutter 1.12.13+hotfix.6 • channel beta" or -newer. Not all samples support web at this time, so please check the sample -directory for a `lib/main_web.dart` file. - -``` -cd -flutter run -d chrome -t lib/main_web.dart -``` - ### Why a todo app? -The app in this project aims to be simple enough that you can understand it -quickly, but complex enough to showcase difficult design decisions and testing -scenarios. For more information, see the [app's specification](app_spec.md). +The app in this project aims to be as simple as possible while still showcasing +different design decisions and testing scenarios. For more information, see the +[app's specification](app_spec.md). ### Be excellent to each other diff --git a/bloc_flutter/lib/app.dart b/bloc_flutter/lib/app.dart index cd05556a..fc998dc8 100644 --- a/bloc_flutter/lib/app.dart +++ b/bloc_flutter/lib/app.dart @@ -27,7 +27,7 @@ class BlocApp extends StatelessWidget { bloc: TodosListBloc(todosInteractor), child: MaterialApp( onGenerateTitle: (context) => BlocLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/bloc_library/lib/app.dart b/bloc_library/lib/app.dart index 3db58cbe..d8e2d1f9 100644 --- a/bloc_library/lib/app.dart +++ b/bloc_library/lib/app.dart @@ -21,7 +21,7 @@ class TodosApp extends StatelessWidget { child: MaterialApp( onGenerateTitle: (context) => FlutterBlocLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/change_notifier_provider/lib/app.dart b/change_notifier_provider/lib/app.dart index bc329fd6..21842c37 100644 --- a/change_notifier_provider/lib/app.dart +++ b/change_notifier_provider/lib/app.dart @@ -18,7 +18,7 @@ class ProviderApp extends StatelessWidget { return ChangeNotifierProvider( create: (_) => TodoListModel(repository: repository)..loadTodos(), child: MaterialApp( - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/freezed_provider_value_notifier/lib/app.dart b/freezed_provider_value_notifier/lib/app.dart index 1f1f6167..4a9e7a8f 100644 --- a/freezed_provider_value_notifier/lib/app.dart +++ b/freezed_provider_value_notifier/lib/app.dart @@ -18,7 +18,7 @@ class ProviderApp extends StatelessWidget { return ValueNotifierProvider( create: (_) => TodoListController(todosRepository: repository), child: MaterialApp( - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/inherited_widget/lib/app.dart b/inherited_widget/lib/app.dart index 8c4e9622..739f9159 100644 --- a/inherited_widget/lib/app.dart +++ b/inherited_widget/lib/app.dart @@ -10,7 +10,7 @@ class InheritedWidgetApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, onGenerateTitle: (context) => InheritedWidgetLocalizations.of(context).appTitle, diff --git a/mobx/lib/app.dart b/mobx/lib/app.dart index 2e431e20..0e77e34f 100644 --- a/mobx/lib/app.dart +++ b/mobx/lib/app.dart @@ -25,7 +25,7 @@ class MobxApp extends StatelessWidget { dispose: (_, store) => store.dispose(), // Clean up after we're done child: MaterialApp( initialRoute: ArchSampleRoutes.home, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ MobxLocalizationsDelegate(), diff --git a/mvi_flutter/lib/mvi_app.dart b/mvi_flutter/lib/mvi_app.dart index d735b264..4240c205 100644 --- a/mvi_flutter/lib/mvi_app.dart +++ b/mvi_flutter/lib/mvi_app.dart @@ -23,7 +23,7 @@ class MviApp extends StatelessWidget { userInteractor: userInteractor, child: MaterialApp( onGenerateTitle: (context) => BlocLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/redux/lib/app.dart b/redux/lib/app.dart index 82728f64..8bb4ae9e 100644 --- a/redux/lib/app.dart +++ b/redux/lib/app.dart @@ -19,7 +19,7 @@ class ReduxApp extends StatelessWidget { store: store, child: MaterialApp( onGenerateTitle: (context) => ReduxLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/scoped_model/lib/app.dart b/scoped_model/lib/app.dart index 2faefd37..645a6d79 100644 --- a/scoped_model/lib/app.dart +++ b/scoped_model/lib/app.dart @@ -17,7 +17,7 @@ class ScopedModelApp extends StatelessWidget { var app = MaterialApp( onGenerateTitle: (context) => ScopedModelLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/signals/lib/app.dart b/signals/lib/app.dart index 856b096c..b6bc7fa5 100644 --- a/signals/lib/app.dart +++ b/signals/lib/app.dart @@ -20,7 +20,7 @@ class SignalsApp extends StatelessWidget { create: (_) => TodoListController(repository: repository)..init(), dispose: (_, controller) => controller.dispose(), child: MaterialApp( - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/simple_bloc_flutter/lib/app.dart b/simple_bloc_flutter/lib/app.dart index ae5f2b04..da4b2a98 100644 --- a/simple_bloc_flutter/lib/app.dart +++ b/simple_bloc_flutter/lib/app.dart @@ -28,7 +28,7 @@ class SimpleBlocApp extends StatelessWidget { child: MaterialApp( onGenerateTitle: (context) => SimpleBlocLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/todos_app_core/lib/src/theme.dart b/todos_app_core/lib/src/theme.dart index 41271719..0e96440a 100644 --- a/todos_app_core/lib/src/theme.dart +++ b/todos_app_core/lib/src/theme.dart @@ -1,11 +1,23 @@ import 'package:flutter/material.dart'; class ArchSampleTheme { - static ThemeData get theme { - return ThemeData.light(useMaterial3: true); + static ThemeData get lightTheme { + return ThemeData.from( + colorScheme: ColorScheme.fromSeed( + seedColor: Colors.cyanAccent, + brightness: Brightness.light, + ), + useMaterial3: true, + ); } static ThemeData get darkTheme { - return ThemeData.dark(useMaterial3: true); + return ThemeData.from( + colorScheme: ColorScheme.fromSeed( + seedColor: Colors.cyanAccent, + brightness: Brightness.dark, + ), + useMaterial3: true, + ); } } diff --git a/vanilla/lib/app.dart b/vanilla/lib/app.dart index c4437c13..03407eb7 100644 --- a/vanilla/lib/app.dart +++ b/vanilla/lib/app.dart @@ -45,7 +45,7 @@ class VanillaAppState extends State { Widget build(BuildContext context) { return MaterialApp( onGenerateTitle: (context) => VanillaLocalizations.of(context).appTitle, - theme: ArchSampleTheme.theme, + theme: ArchSampleTheme.lightTheme, darkTheme: ArchSampleTheme.darkTheme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), diff --git a/vanilla/lib/main.dart b/vanilla/lib/main.dart index 58407c6a..a43d4711 100644 --- a/vanilla/lib/main.dart +++ b/vanilla/lib/main.dart @@ -10,7 +10,7 @@ Future main() async { VanillaApp( repository: LocalStorageRepository( localStorage: KeyValueStorage( - 'vanilla', + 'vanilla_showcase', await SharedPreferences.getInstance(), ), ), From 6e8d5aa42d94de0530d7855a55c4b63d3f552b1f Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 22:25:53 +0100 Subject: [PATCH 86/89] Update images --- assets/add-todo.png | Bin 24347 -> 60707 bytes assets/edit-todo.png | Bin 25143 -> 60554 bytes assets/filter.png | Bin 42417 -> 108510 bytes assets/mark-all.png | Bin 42960 -> 113177 bytes assets/screenshot.png | Bin 74863 -> 433607 bytes assets/stats.png | Bin 27137 -> 67717 bytes assets/todo-details.png | Bin 25671 -> 378109 bytes assets/todo-list.png | Bin 41037 -> 110035 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/add-todo.png b/assets/add-todo.png index 606fc63f845c67353b93fdd0ab083fe82129522c..80aa6c8a4153bcba72cbd1590997fc93042a769e 100644 GIT binary patch literal 60707 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 literal 24347 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 diff --git a/assets/edit-todo.png b/assets/edit-todo.png index 17579d0a61b64c9c0a9c0d5974b9bdc7a64751f0..0054e0d441ff709e87291d203c56332e74a9c579 100644 GIT binary patch literal 60554 zcmb5VbyQrY5Ny!k8k|SI zbMC!o-FM#~Z|}9&?p@Wtu9oWRp01iGO?5?FEJ`c{1O!~Aw{PAdARs0pARxWRKzpW0 z>v)?XAYj#kq=SoEoF6dR#5S}e|fL? z?Tm{i-|%M!KHlssOWSfI=*Z>0`Gm%Sn8-bm5`F{Wx3Yw1TqDY$@M+8^@6_7 zIWAO9FG4Mn5SdUSilvy8)5v&#`$qLm2H6NR0s*T;9sm;|n&!8y&1v$KL<&YqWgk)! z`IdjmubEjgY)xmyMU=Rt0*So*+!NEh&)>IH6L&UGKW$1t(lB58#PBnM+Lxc|X`YN{ zX5VZ3)o6ZURC(ytERVW6Nchno>_*Ch5}{iAmiL8p_b~s{5Zkt`Prn*i!AQhA8dc(0 z29npXR=}oCd^2M8CUZHGjnwA)qeiU< z!=h3Ph*Q~m@GPI1+jkvOX6YEsgB{V1>gsm!{Q(Dg8{s{cJO3d5W~0F;4iY9NTYk~qN+SMN%g!xTXk2QXBm&&q=j;V! zFry`#06x;-@>2=HL{)1+_z+v+36W9^kzQZ*PIU-@waE9B$((sS>q2c=kdq!!UIv{~ z2Av#%$O6$Z2-y{p)-Dy19;H&0loQ225oact_KgRjIeEF98Q{>wulD9A4 zh3LHUe2YC3y!^&DQFfCEEus*ZL5>}ZJwQhkwQiMWp=TjvF~X~xp`a?h%?u?I_;?fk z#j>$x+rXBSj4D*E$Hoe~hG_wL0qp?wz{yei3K=iLYRy1IF-Mx4G(E&P8WseLD<5p! z_y+#a0+gVw4i+A4+mJhv@MrEs_)Zjv5l9+{yqfUzmY&E1QwYWUHMOj&fgJ109|RKw z&IEZx3Q@{$7>We=KC;qp6AHihLu4E|ANkOy^@%@9-i=8<@!i{Ur7xewW>9AsX2kh3 zD>S@bO)|v{l@EQ{WY|>MG&^I7#_EsVkk8ae(h_=y_s)pz58H96&R4#lp_Gc_pPfJJ zX-{hBYf7_E5p$BXU?GL2Vr^l?VF?qPaS)Qk5sOA+lbjQ)5GSyiX;bUGVyEDMu$`vp zv8Hn5YJMvRRH$k<>EUUq>#r1;6#E zSVA?Drctz=ZoMG(eeuBC5hL~aYmt2k<(I5tqbgsc#)x3vSPBybN-H8bD;y7ApVdUE zs8-r!R;hj%z7%GNZ zHh-NzRJz!8V44EI!GcSmlDG1U(OrXBV|b%y!$Skpl6d2!1O9Jb4+)QV9!+~W(-c!* z_P*^!do=Im{roVjW9^m!8hd9W?*3LoWzt*&+N@u#;-ZuPg|6(o!gsT$TEyWXr$oD& z@q%%SAAYz$WYuoE}o21vD1JITG!Te(LVxXt1N21sdQ5+FUu>tWTxAswJz1$+zLV8Y( zdY(E*uDa+4H!s%-52@ex=`mp{Usd8pV-_nGdlv6(|Fr&YJ2Uz7?W%?E*T$~^uYK^m z`%bI=H|a~>69OOV6Q2pbth_WP=gkpP6N19)wFT+Z}O4y326uVTCl(m$G z|K*2de}@kd_XiJYw~e<}56BPA*Q;Ch?l;T!N18!aU1vd8GRhV{7KUrH^!4;0%~5I} z^{$*scUn{`)R@rh*D@Hw?;VEVntHpRrjp&k?s7Y6lOITJXqq@H7;;EES=*WK zK_erQn3L*;nppcwZ?t}DF-)&a_fJdm)mx?wn#BE#CFvI$T!$BJ;Pv57o@X|HFnjX9 zyFooa=Ct4%GIWI$Zuc~Vm5{Mm%WJ z3v~xg=^AkQ=j~=04BB#i0DSngh~DKW$Wa*|9OC6wBd;PQj@C7;&1DYQPI&qRY7`;6?Vp;8va1* zC-(2Uy5&mc+WJpT1NLgCS$`ag=bJVicB)5?@4Am8mXN}bK;6GQx%b%v`tDh8YaKcc zZ*%v*lVD+06C0AG5`S3iT6NuG+0R!Fq=aR()H)>hLM5}o+5Oqaj^NdIx)mll`peCp z6LSMjV@_eP6&Le{2e&9wrGC5_yv6vunSz<^+;DN>rOlX`1J0B%(={Ta5Z{Ay5HBH zuS?}L<>d|y_Ch~<8tayV<<9XB8H~wbpo!`110AE%+&L(pKyO?&+__y7uZ|3@W@2noS zvb6l!2v~X$#;>D|l`^@+xGO!Woq>O1G16cU6n^OF94y@NsP=Z*nLR1Nzq|fW{Wx?D zR|$L+_+9^L=i6kt`9iyh;F`GW!&ZCxLp5Wy0y_4i&ZGOhL-PFK)7f>oJF89UQ{2V) z0u1*UutMYS@~6{D#N&E6;sU>zA&gE?O7DYZ;O}edhnpL_E3*6anQExHaVKhkA0SOi zhBrF0l15F8yi=F1>HmR@vZG#9^sW*jnZXZdTBA%P>CCQqino*HEGE?ut7 zBdakrOJIsY&wJQ3YXc=4H8lkG=QIWaDk32Q@^cFD`9?sbL_qx~jewwxNcG?8cZjV2 z&Vz)25CK9!`F9?p=l9?1d4K#D{qHyOr*H)H=P$zN=VJlVf8|C@EI|IRG}8NL9)hg4 zoRZS>TieRb+S=LO&c)-yQdj6R0n_!Zp*sQsDbwEvQRyAy$@2z$5u{__VW6feX653< z4SernY0d593<7?al2i!0qB@%flxs zD$2vl&%@8p^_+vt9pdZ(^x<-LXZTkk|5eT#Yj-O*kgEsC#hLzZxj;)7PY=mgul@@9 z@9SUnwDtl0k0fXJe>dy7fjoaXJbc`|JpUKW17!360sG7O7wn&Q{Y#w0-@?Q+K|a=w z25&%4&t3goH7Pz`UVe#x|1((s2LC7Xe*^!KY4{&9 z1qA^ADf2&A{{j8m2(fq8?k+jv8RQ}LT-E=J{J&9#{{xfa13b(62lSuR|BW#C zKN0^){oe=;H_&rO0RL7^itpbN{*(6a{1QBW2me2m;a{5e5A|8qq_8A-{#$LOu)e?A z_eVgGK~Q=ltK)-s@N5E1<$p@S{FIJ|q3@6i<#uUglknJ!ib9@Tde2~5jsW>7IzQP5 zuArcqm>CojBosnIjF-6=d5*(2caN*W$GPc?i+;y#$A>V0&8KDo_w5`3+lh`pIUw(< zNPIKo|39~1KHAw;Cv(63G_3JgZ3;Z89jzVB(xHGV!(JmJz!=r(dS%M4slPMBPcGY^ z>M!$33im)T-bTZV-mmV!Z;bKPmeXK`X;%L3pag|ESe9R z?}Di#1Fr4;+yRcA0mfRXvK!Pbljo+)$72oDwImpCd18p^@KQ55}~Lr%&{9_M!Pp)dTr zc(?sdF>$u%wd-x1m2u0~NCg|6LsR-jm%AU<>p47k_OB>UC>J~_YYroz^+`7R(>4qa z_*tePk@_+}+vy9dy#9JFvjhn@toNq!y}lGh@9SZoy5a{|;??TK8&}g* zU_BzvcitsUnnwj!eNNbW6h$Y7&hxePu*q9*uNoLt^O2+7kht-;7PreD74KTV7n=x) zpxn&0!G5MZb{O>K*u+jjYhKvjo-zB1*!VINz@we@I57F<%B)2kW>6>fxWUep>%TYB z*bP1<&aYLIg9uiG;+!b+|7n0bpkT6QASDNc_F;vnwa=WZ9=JCHwsQ-!8YPSt9)zQ$gE;A-Ai9UL7PXRjO?i55ZA zg5DRO^p5a{l`kkOGC3HH*2TH^v%qfM<NtH7k}^;mCq~tlEFWZ7J}R4; zu8mgsa1MTkTdXf?a5Q6QNNjRr^STn46YNA#nLK8wDcw=;8! zD81dZm3U$S59s;rf}ICsO34)ylFW^l7gr3Z;>5CbL~jmAOUhTN_N-a{GF`{(BLwhz zc!tfV=GUl(G_gb~K-xr{^BQD%wT(e%aQ;2UfK2L>c`+4RhoCY@S7vew*V^O?mW|hhO_#0Ax@eOwVm0&2Bs|^tp}&(AqQQFMuCj%XrmP} zx7V}WK0<;v@Agj%-sd>L$s)|j;;7FKpUshDfHd?nRA0IDoIVGxK&}og^IIbJ(71BX{7R(;&1m;Cb_LomGOp z>E^75*TtM(+y%})X)^o%9lG_@tuAdGNvC*I82^%Q<9TL-IjpH|=KU)&&w}|_kT|Oe zY?R+PF!M*T1pk+)o)U?X`82L*W(;!>1uVE_lSDzzq;hoNu((OUvlVjSUW5X zX0_T+lixb5D`>ziwmI}SSn8kUu!M7r#lhEF0Fq~|{D~4Ne99RGz9t#D_{xJ}wZVOj zrz8UlctY{HO<=&dn^Q4#cAB-4hNBV}mOGOlTkr+ z<}>S%ayJ{f;)Vx`auZ5hqjaeqpoi?15GSWvfDsf-Fvg9|-V9U~XaN9uLv!wl-dLrV zsA+e9z}@pfNrmx>s~G~02ehoC9pDRl1#VOdCb&S?G{sc5j)acCmR=RNkFS(leYt(3 zl}~W12SBGoidMg_>QDn=8;hS!g|&3dd=QM>+YKFYGSC#mf?9*EghX)kQwz7U=0$KO z+_;L*1S>scYvYK#x=pCZBi8F_pEXf&xX54NitmiBh$QDv`!H*p9eF z+AhUb$jw@=o@1%Vjo(Yod}%e`sW6A#nEA5haJKzy%3o8JdakVH*%;-{Hw^Sm1FY0w zu4)d31{FTB6vUHi*{@4XfL@NXu#*N*2LkAY96`}@{TvN6jeuZFvWQpTYCIs#hJE^! z?7FjkvmS|chT9u$kh7ES=h3s62g&4{elQDV1m~agQigHhi&yW}WB|M}bG=44Hl3)2 z$0b7Nl7=oHv#Z*LQR%-{boF3Zh<$tRIw(lkCRJ!m-NBF`*4iXuxcckYk?PXYq5Y#H zAs?>_&?^R3I`CSVzhUOk)gk8QyA8Moc3mW4Fhw|{MACaS)Hlj$JE=)byCmkINWHAJ zIV8$tlvq0@*JyMlRY^8V%a;aPJXt9FDBp=s@v>4(Nb^&c!$|{smOdfIt%KkKl@*5y zL{%@@+L|;Vg2In{i>KGe!l>_9m-h5!+jQ1sU<A>tJeEr!0J1XTe&y7n>E?2rtDBHNx_~amceNjW|5lxhbr#d3Z z^Q??NOrU8N*5tJB?C5xaB=As1@LAVaSS^P)L#^6}TlL(z6?eX2q~N9jJQ4}*KZueM zdkkU6*#PwdD)~emvcQ@~;AOWSY-lXCA@5@sa@*PYxwzPiF?plf5bK#aLC)$Au6}tH z#w@v^=u|5-G&Ia;U+0)iO-+MAy^J@51GVc?hyR!lI|MJrp{gic+iwL01=&I$`HamC z4D2k&$w){%tBso{x&~q?7(#)87JgVjMJzI&fJTeyqDC6}Vu6?O-73inVER04+dNqa zvs=eG*8D=hzK>lFe^w!R2X>KN$cSSGRFK&lD(EukyfmKNbduvf0rFc5M$by(?ye^N zZhs$r%F#6ml@$WGr1OmzG(?$9N{}3;apX~P2mBifKWX%!o(mVz<+a9XxN3>ZBZ~XLgPx4$(a`Ibe*=$aII3tk z@_JJ6t#CJsw_+(A$XM61x~7+6+u0CtyEQeHwxx%0S3uf}@RyAafNTHaY)!D$ zw;0{Eps&M>J){c;LgXw`VK)T;pix2^46KtGXFIbcu z&~?Hn&+Sy6%v9Ud)YC`bHXR@&sO)E)ZRomIBxjB+T1o(hpiZN7I|l5HI4#!zAlGZp z8kv}hR+M+Fnm6h(NjLX;%4#fmW5cqnq9P?EgT?S-Q@{d0{p)_i?9#*!3^c%gS zgt$7OEQD$R5Xz-zAQs#Tua0X*ru-B=V@{w%+-XXhf*1Ot$~vpbY9whyBMVUGI$b1B z4axD_yIZ;I-6$#os-$z1RQP#Vn$4In5+0}r>%XB|$ak~$*t*jun1nf4;7`j`<&CyX z(uy}3Air?DVk4IhXm4n4u5NpX7njEO{DltFLxc?^MdH~F2^}cn!mP&xSXF1yGVXi% zalMRyl+UX{e3ZbnIdPS-&5oecpcW_%^)VcmN-uJ?Nz{FtIzDMIKM3I4oqaB@JUW6^ z6V#upFG-nRj??M{z}9Q*{=%i_RIuUIk9;Ie~U6}@QaHJCjMv9 zcJ*~eWvch8`=oV7cz%@pAFTTp=GSR^0mQQ4keQEsr9PA_1>$R2%~oXd+$vvMr*f1q zW}30<&$F7~rGU|%095jA&&fQ=wzZ2{jR$8n&&!Mc7}CaG2r+OIaVN=j$x(2JE~e`X zK?Nbl-pMViW;5+i3pxCyR|KRXT8M!|#j^x4Ducxb1MG#7$sFL zN8q(?beap2F}gIDK^01$jB_G zLPFt>L&qUvqrHTo#*kS=Kz&vjtG4hm>|fI$<@Psi+ZeXn1?%YQWwOoSQq5(zI&L_w zG$_@W&We!8VP}*vT`*5m`nQYQ75qt^RR215%~&H!xCfODhLo08P=^a9maIwW;nRpU zkRQhqsK0sOqa$7ZEqFY@-I3OIvT)Oa$5`>|d9pq0kt+HYiSwWbb=G7A@^E!^waYJ; z?++8?LLR&F#?6l1I+nHpv~3X>{&q1*OG}Gf0;l55Uv*aWjbF0prYMWk{#GK zaD)`#qDO;isn&VTmN?yp8(u@6E-Xbs?+P0%&wnvsi(7l><`KWPq8`ssHmpVKS(6Z> zvXH4!sy>(^EE8$ciDn^F@>XeX_&&{c(^&9Zz7)ql#{qZh`uu8P9fy}$KF@uMvv^$? zpN~f>q$50>O)E6CQ7}`&I@-izx_{yGG~>b_9z|;K$A+dRN*1@1Zgh8A<19^uJmvJ# zWd8?L;gMfzPX{CAa-;I~!FRQ7b#-5n*t1%}@PS1i^UuUh++gjaDPwA_`fki(%+TXR z47R0N6V$fXYOq?UA>Axc8U`j9+&o?5=Ps?Ppq^cv2GK6HO9Xwg-%j~yBN9K|kLott z0(6s63)8W9jA|;Ry(V+2NI$MxurMQJ`}_h?K%7{PXrI?8L!v?^;A%CMzp=`IUHN>S z^V^rsGL;p968X-nbY_a^Bn)%`rR@4p)Lir`$m#BD3g1%%wrY+f|Ec<-c&K_={!d1# zCj%bHPlA+6Hi&4M$v@{1gFMbc0-{IuIj z%@>f}LUilR$fP<<51gNZf;muLya@FX^lC(Xp=q|RlLe(HIpak@ix*5t@>vb- z7~;OTj=kr!3qvgZ*xTZD#+qql`m!?P+i#TE$s+_#yBu-*8lB*y9C?RL6rXG%T|o{+ zbpZtmx$?8E0sQ%)0C+Ut?_Hq_)-+i`RJZA<)OUtyJjb`IXrd4tb*659vVB3scU~^X zX+7Pj{J%%K-w8o=#9-e(Q{lzE4J)AYSFQxJIt11jVlf95m_~j0t96F10A6R4+yWHMyHcCgsE=^4 zZ(h!u3)7^fo9D3&()v+Xfh<*+=>p=7u8r&MQJZY_hJ$CJnfEmTj~?h&dRj`{o7oF;<|QdH{J2GX@$q&vPhzh;P!{Xx%;gA2XH3aS1K6DU zE%|whDQXCmVn4w{Rht3_%iAiAgErOvEKDAi-mx2g7QRHmSDY(8D-A_IPV5a!4|E(|`ZC@V*A zecP`}efX2lPIteCZoNI0`A%P-#Wn{V-d%i}FYJ=HeEVJcQ$oN67OgN);Z-OaZd!P_ z@6E$;AP*6S@`vC2R(R%$gVZ<_F;1z3v_*3P!0f@H6)jF8W9u-r$9zKC9{ z0B2B1n6Wg#%Oa8CB0_(+Z6me;{r#rQ0}Z-LGjC-?cQKI)k@3&p#!5kfo84?I;Yel_ zk3roKS3I=n^%wE9i5XSA{hX*+{t2qopIFehawOwQ1?&Yg~+GDp*^w{ z;hN$LD#8jxs8(lR{4L8og7eP6UTUG4pwNdQp5gQnP=>l;h?s%;ssB(Jn%zQcQ*FR6 zqXQd5E(7u8C?b|jI{Ye=Z;qKbciWw zmP{z5{99b(Lg$lbO_-RN21I!$V{9K^#qF5abS#ThM$q~WiIhzjD^e{9mg`$y%+ftH zWi9wUU_u;13kb4Pz_Yqj%qeYWSF_sK_Vy%UIhzv9v+NBC#B`Jmkf`t%gns?uR6mB29HgaT zgHE~*RDdG8_L2u?ts@NJ4<-LT^M~6JVpl7Ly#IU=TCT;QPWMHQ&kJSIIi45IvYcf% z4nao!w)PDZX?c%5j=oQ}>+WaOO1J!jHZ;362YdUipZey4vv2RLzS>{xYSnq}>p_mB zpVCmVNiCJX%Bf2~cvM8VdQ82v7V*vOkWmMH*oUnq+2%i_i~bCnh{OwFz!*4^FYaYW znK&@4=Up=3ilFgoS+k=N*piRv_axYO-gOelAva)%JDT>iQ;@F@=WqY?<&D2B6iNG{ z70@?d;4iq!0oD9~D@(#LS-?M6782Gk6t6|C2q}P9)e>tkU%z$7a^Rbjpj@h*#q6R@ z5IsBK_|4EB)rcE;+NG@7IF|A0(Eq_SeSVWFP5cVfQa;5giC5Jj-FPi9D5b~H^2n%UN zZ{*r174EcC`2OZry7@LHTFcyaKQ{w<+(S3IngI4;?f{VSD4FJU(RVxU_JQ3Xi*E;Y z`2I5LBI`bewU%KN-HEn6>jwoFY}LVbxEY>iB8h#D*sdV?AEfpbX<@Z@?u!ns*z@gY zGwoC*jhe*l`m$l*u(|dDuMb#OjvQ~#KW5U=F1?{tJYcEtD{{IYHPv-km$8|55f}){ zE1dNm67BD2a7k2=fo_!?^qhy{~*_%lU?VzNv;m+U(ZUAsE0g|L0%E^xzgQ<{`?j`4h6+2Re<6!XDxa& zCKx|%D5_0_zgTn?R|`I9&ut20k~kpyOpdILjwE?ZuFgo&h$KQYtN-1g-Vm>pI~}<; zZ2q7JDd({OW1xrt|C(sOX~>g`YKzhF(n%VVgLmf+*IVg`(Cn#>Khp`kB`HwDdtpKxYB2hOvKmi!iw?Z-;2-;IDPM1@44;8 zmv)5q?pBCk6%sKxsU0Fn6At$a{(?bD`GVQBj3b!qV}|pcctH4z4?5(Z*r?S6<`Ns; zl^wC4d(HoxfPuaw#HK>X-)Xkuy3c0WQeSE-0tZzi9#1StH@L=~N^*VAc+hdFJ+?nF zsVq(1acm=xcd@Z`z7au+-*ktE_eAL^qi$y!m?YdB1-jTLI-JsCNR#(WM^?(tgsNT> z0)Hj?-)w~Gx*BSc}=-Op`;n2xyHc0#K(9f@>K`?lX_ zERbat8RXLEM_&yXhDyUF6Dcv2$6GFlixLXy46d|_Oy9<1_xq^JIxk_|&9krX&+oyE%i-=TEUFng z?V$7R!94%7;ir(w@}Nq&<`j3b0mCWa#|HzhQSvrW*dpK5yB1Y}8k5jmJ#x5=j}QYv zb{X_=-=d_^#464DOhuIVVz=dS+6wngCcm@dIhsY59nGBVgh`E&lz}1pT`Ea-^OSja z0PHTyc#GTzlYi}V2nS=jLb%TM@R^#a+l<=fS&|%}+N zU_n&>7_$avQ3dRASHztNlZ)41!+S^R=2fq$Bzz*va`s-UYN&M`ac!Ktsbxv@uMu>s zYvceHyM`mKE0W{G7ziFNJ7KDV|62JQ6l{v|iA<0SGmEs}QsTH{*KzKmyN=|X>Z$QE z0L1$GV>Su5WOT^05jlQZl#oFAMneKP^~J=!z(2tR&NIV6nzJVLVeS`^LxzQvB1y?7 z*|nAOk5iHLbqK3;=NkUUp^8~3qWErI=Po(@^s&6^>|~JbalD&DmF4`H-ey;n;WE#g znea!1=5wNEeS}yTfCK|5`Ig6&@8fJuhQ2la%+;Gz)z*DbGLk`wS)8-zHMxG9Ce})_mNT!Y9=0 z#~zb7!2*9`8-=)<&$H$X_A;Aijc6$qMG5$$iHH+wp`p76Zfb3{U{WP1&e`?}Y&Q+Y zb&O%wBqiD1H@g4@%UgRLLiF+%J)VU6$)unVT29f8pr<50S4u007YR~Ht!s*2NT+ur z+Tgvcq4$j3RxfA@T%-P2=+5^tS}JOzc-fwQC=tf1=1|cHySdow3)7W|OHF@1-kt#= zxDcE%v)3rlGx9MrQbdRnZX~6(*aK74*ZY7qqrd7<6pp`-lylm;sRzP zm~z%*>T0ppbN~>@Y3n-sv34w+D6PJLmPK*8Q7F;u{5#2|8P?p zx%z4Q2NDq4*|*TcSSj7~)+>wESqcYw;OIYRvqQqt&7f68F78T1a96FC{+2_x#vk)h znZzW4D?Rr}=}YU%CCc7RXTaNtF3QbsD#v3ry|1#jm02xGUph=^-b_up(*S8{O@RukT<@I-WQD%dxAgQ_!Zo8~qR*6FPiS({rMSar-igkJ zF*Q9O8~Z%p7vIr*Tpf_Vt^@O~zacy2!=kqH=wZxt%bu(V6x1;CPvPC+O!T7nR9iAV zU$wd$OsGn33JgHR!t8TN5gT?ZeG8vPHDoL|lSF7z9q1pv78cC;WIQ{RgXU%E1Z9xt zQPGQ;%HH$|;vwkwgj`)~!L+&ocrV7!oY&CFU}7 zPayBDGd0rE{f#+z4o6s|T&P9cSdwf^uIgaUksbZjo<{K*K_bkSCIT~sO^#$4iX9pz znC6-~IG`mm+OS+TSn}5o_Us8G#hn^hyy7veP__AoCcAhIFACX|) z6Kx>j^_A6KB2_{PdA$%gZ24HK%W2Ctl| zlE-5}ZP(bZ&co|Jb%whVy&j|RP_mAqo8XF>50A(2hCx&cM63@pq z=F~c*JNZ)a?0ZyEM`BrE??MkHPBZ88v-MkMc=f&zHk-?#o9P_%CGfC)MR+hOw9O;J zWpvKU)5kHl9>zR=wCNE@@;{*rLL+QG#j`CG4u3XtTFUOHyPCubV&XLYEDfC5!qcWU zTCeRgeP53|RJ1?)Bsp2e9@*5?t)#kgecC!2THcH(kB-f6Er~CEY5gMabIX$(h2PeU zhJ}R+27%e60Dr(=KPqE z-!5n9@}8=h(^T%+M|3y11jvt9)EJ)G`~ktC5P3W2vP=)#r`r4z_?R3^A)pX&o18zg zdh|_2A(jT2A(%)2$m>6pi{>LMs%v2Mj=g-va1-ng`xE##6U+Z&<85kF3AVC;ZbWu*wD!j(QbFq6(j$2$NtU^=VIBQCyVP$XYz zPv1bZv^S-iuMm8XN@D#^TQ~O>>T6;~>ry=vv?MB|JWI(j7N2QDk0)nx_x8S}B^*4J zFM`Jy$*r9sG!ZXY*$$XAnDxr+`NiKqEV7L}xfj3m+kWxg_n#sOZAWeT@sd{tY_j+l zLktPLc%SRqUpMuvr4auC2vO+oV*1(zp*7(6LJOtu+TE?69!h!$tUebs3swQ*{9Y;$ zx{PJBBuHH+PDQx_y0ulK20-j$_>}8@N8dH<(Qy*Xr5-?;e|}Tn9N`KNE$*}%KR)gj zpQZBnYcZ>4zEUCOd^=3AnJ8lavf4^r#4KLS-q-DSOfhc2b;*>fyO;Y19Fxeq+x_ZM zD||^#k5^9Q{a*#J+?m@UO0by~=HhVN^nMra#O$X(if+rNgQHx+tDJ#1=ZE~D)er9v z!*SnbP+vmfnf8eq2e_23hdE2)VfArXvsX(HGL3xZ{y3s!Mb2-k&!hh>WZ;DY*wKh; zTS%l-735^nKgzz1Jb|7!tB31~7q|Om#q)S|bGJA_=-#Fipxya+=%Ui!g;)m~C7tE? zi7r}>C8>pvtNBFz0*6lQhe#qe&o_e!pFxU{<4*F3LSZUJ)~zk;vngbJN_2joDSE>e zk20K~Ssrd~AqHHt^td&tfO{W`$g{6s*|q0CMiISVeYi?~cD`gv#Z>AEsotrXZ2W1l)Pl;)YI&T}ReioD zd}3To14?HQXP4tdQW1kdI!eLA%D^83pfRtn5B0M~&gs_WL}!s(yvtY{A_O1O++UVf zBIuKjJ4nU~(nP55%?|vQ2*;sjRlCl>&K)#=ywcCa+v%n~ycb?c6j=2n{T9XR>Iwf` zST=kiGs}O4K>?x%TQPC-ktK=F_&~N*4eNZOQqoc>8Pu$lLT_hccqmtl_xG)@*SZIG z_lZ;WmO}QpC{O1$eFrCbQEz&%d4^(lY%@SZf}{FFzzDjRC3yi^W0{iTvS^PsfaF+F z`2k+bpMxy`U5oUnSNa{G{EujS|-B7f-24?X{a-YmR37FN$=i0ad4M|Gfv zy{B;9=aV!v(cz4sg?vuws%h>T#-R~XRhNY0fE?{pQU&tTW#uAN6j^+)T}gA|za8g& z&&nS;Et?F`^GO)X6j1Cu$(&>tA(@4kc-?HhGd8x$={`PgF-_w(VJzPN{a)aAb^lVh zSg6X%A1UoXE344^Rj2QQc)bVoy&c1v(bcmZH@6bWo!1|ZQw!xHfEUxulTvpTV}XaB z6rx@g;J1%?0QM!=;|VjyEl8Y5IBI)laD-#pTxG4q6K8LcnfJCgxUUSR85M=mDrw4*G^bnm(Z&+w1QIIhf=C^7`|fSF56S< z4bodvNyb5^3&;Qzm5fX2m<7;!4GJoYDloYKJ>1s)xRc7I&M5>Ad$q6?F?LK{gAG%* zle^h?!c}-aeD_~F!ylduI3v1QPjE?9r1jIW=d~VQc?=^n=S*+^({a`Yb5179_cKH5 zI&oQO7>-pCX;ff&7u?8mmL+Uk^`juCu)SirPrF1-;Ln&z?EBrJs_TWp_xB$$ZIt6C zPT=|XpYONg#W&G~12nF3#dNo=D&LPh-VLisUk6kB?-picu?yjy=bTRnFyPMYMp_Qn zS-agD+K!NQUdu1KJUxtK#Qs?uh@%>RcJCq5VOK)DezVEiqAD{SX0*{+5idh8FB{?|15J2TAqH=CdXd!Cz^nx^t$(? z4A=Qz+Ly^_Bw}|+9Z=(*AT@XU2#n?3)J0w5E7FbXS8t%EJOv}>hM=D6n?dAlI_~RY zDa6&)MNUy>-B;To^*WX+yvVuOWZy(l=Nf>?5z&~mS$sysETsy5hdC6fd2?}wv z3@mvbMc`KsQOR%dYS^w|h*MA%71Yn=X*n1iZ$;JRDDr13JOVgRDrudc7@d z9VkLOB1%Sugl5s_kK_}u+nYX0S~2|L>2`nIW6oDZvT0iUMe(&ieD`aFO^>tCQ#bp8->qg;y95l&vsJ*#>wHDkPG|*gnG?ORmAy*0-v)7zPDp zyL9NPclD0tt!8J~i=c+1!XT>EUj39J_?(H)=emz`UGaXY?oVVUu7&M)Iqs@1ISNS= z9mpryoqr@-_pih^#plggh^A%(QRCsU$r?(Se=c1DRiuK=zGEttOzzu$r#jO;=(~mI zdS^J?PnP7T8N1xP)T@Z8>Gu{{;REqAU|A2{h0OvF*0a}^Ato5MEgK^o)*?ADs|1Nx zbpESf&<3Q1AJ>>~SVy=!Hwob~D}RDVH)|N;6RpWjbNn7}>VW;qp?7&IJgE*YEh{4U z+!F%+Xl+ARi{9p{JL8GoxdGw9r<1x*=a8G3^zWQI7K4;D&v98?E0E6(^<<1*IlhV*4aRDy`_ zH=N$N6^HLPTtJun7?@aA&@o^9+mi6NU2bMDqk}BV1@955Z5lek6*RjCOh57#i%HGr zg#gCKH1Nv+C&H>Q_g9WFpHmZ}F<5j7m>~lC1Sw34Ir5;L#glx4Cw8EDGkVxOigbWi zKflN<2jvzSFUj-inW7Dyz@2~R+;Kw+!H)UeTNB{Eprx24f5$JNd__Z3T-vdzF*CQ$ z%}-j#$HDTBo6A!d1VmS zm;hc_xv4Dw&W((Y^Ty>wf+FH(bDyuH>-S@D9^=l}bf9lBHGYXVqn6RQe5RQt4#G6@ z6O~u*haIZ<3rkhxkuHa!!v?@Nobq+R*{5O@?s$C*qex?m-Vig5!?zx5k_G;;5(2o( zhy9w-%{!upO$f*CycLGcdh9hc-hy66)3qr@?me1u{Q)bX*}_gjH@@vPUmXPZ=c%#QN3XDpblpiV?}$8?_tUa{jI z_{exI^tRyQ)Majxp)^AVy7{hK-RQj-oMbcN*|kl`O7xLAt1AG8{r-EgFt@?j>f~~% zQ%r_mqC0sU47|8tE~uiNf1dxraUK44zP`mo?)m6Hwy0|RUb?q?H`l$5-L`nwKqR+M z2EFS(u~1Gm&&AojnFQJVf+1LPgBSHhAYshZ3yhcYCi=iN*0i&e2O_ji#hz(QrVVjA zv9P(NB}-bABP1(U`LSFePO5Gy)KtuL;F1g~%5PJkz6+q(l@WbatPP}pQeAS0ywCq- zh+M^`V<-@oT$N6vYttGnaO{gZpEFV1s?)@O&=5z4)(qxXKbPl`x>z1*oBZ*x^)(@| zhqLMoaSPkjWLE-}r=cUtRKQ9h9&mpAh&XOAo=L=bTtGUuFEAExL((qTNni{l8+pYk z=587d6ciGkiacvT2)~IT&B`@A9(e1<8qcwACzG2fyGHltsBc-1g{=RD-9gM6!i;ko zJ-%=KdsYp~KXD?DP$YGD?y-Lfn_+W6sAEs$2E#(CpwAFNy?ZpO!%36maT{o%qrc1P zTeT$-LN9Uqn+(@CQG;OIB?A<6&mR|i(0jE8@JkO@{uOfyLEnbO+^Y*|+Vq($`^9(~ zyT?a>{ZjT5%Hr#ukhQN7rTqO$WF=cKO8j!ul-@-i z>D@)kfWK|!;&m2qN6GS<;r!@)B1y~jm9XXhmOk*k2qA?qxX5wo8`I^0`v8e=2!QhK zGFCfxj@|~v`*bT~&IHEw6g+%=PIgXy_oqJ_ho|VYJ~HZqcT_AnK1Kfcih&Z3*KixH zhhlxR;9hbSYiuvzDJKV-nfcidZ#4|q02{r@Q!$i|X~)bb*ihK8)4vrbq_*V6G07)y zc1R*!AdXUv#MOe;HfnE7ZDR{2_No61H-2iQ=F7S~+Zuz(6MgC=cQ(=)e6eebn_u~l ztby{zBGESsfltji19;r(-euZw=UQ!b$)649chc?hc`{Vb=H-b&-{fT|?+k>$Rfr#} zMlfUB(odILJM*cjlJEaMP6ghSP;LwM zlVPxH=ghM)k?r1rvNETP!EHP`XPDru;aVRJcky6s+Oe5mrH6&i*;uj$rpD$L)ktSa zdhJ&ROuLj;U~uq2%CSQG`7hg1QF67eSCk?&GS7cLoGG0NmUtX0c0(u4lfEv*AC9QL zW?k9xNieis6LPGgIC$uH{0O4OaBumMu^%%G_>zpP1HKc) zDLh?!Xy5N|CdboO>uX03J|}AkF??xsm>&tbaT!5GrwuY9bb7q&O&D?_FEhbp@wkbQ z<|JFsO||5Fbf-Kv_sKkg>zlAy`|wzE%xT?|nz=)+(xkzTCIs=g^-fS|=!INXsoPA; zR)?LJgrTf1qXj#4CTOWYp4}asnGibpE#x{1352g<5c- zQMRFc$eiIounydjsVaMS)I2Hn15g52=Bb}|#Gfc%_j~W}UHK;~E0bAs z&U0pEp8eVToZk3y@VV}}u2Zl1&`jMH>s67iJaceHU(B|#gqNSEB0w(aFHsw(S*^;Y zy-k!@YUc+Pmo}{d!2DyN#sejMQlTq<)G|WV*-s*!kS5pIA1$oe8wWXTUuXyh`@A=+ z@Vz+Db7QN0BpdA|O$%<8Vw!dViCkIT9Ozj6t%E#2&J}saqrE zZk2VLJQt-+r(cTOIw<)SBq)cmR-cuNF(j=D+FejKl4l_Wd>w3b^p$ixHZ(ujO8B!# zG|bhyHJ@Rz5S3EvZ$L(NGoEtNC(xT7`aze)8`_f$b4v4G4bVx7PhvXVTM|E677TBu>rN(jVb>O0T3co14fK{qK1yl&ECB z$ve9lrZMc+7Blx0x*7@fJ4%dtt2bg>`1yGAb0kB(Mi9w5%7|!jplTM}{O;2#!!aWr zMPGdCqT+<>pnxdJRM!bLi&bb}sI(650k^P_a5WILTAeeqbvW80<8|a=w?D=?@(0<+ z^dzD|Royg|Z3yieFnV|LV!Rp4@(kzN4(ImA&qF$eeys|P?FLGOfxr!%vo{}KZGCrr z2&5;X4{+SE#V)wIE2GnzBF*0*fTLJwzq)bWryo^cqwde&0>zz*Q*Kze#|h^jrBR4> zT#1@J>DSn>I*?nhX2mV27kkq)e$Q);%Is4WzP)zjTuRTlyw;oNfH6f)Bch=9=0>4j z0$?!f{#qA2>V^>T>g9)%K%6fm6pn`A5YXy>kSo{6f{ikhD?926^``lMegb>9Xz z^}j8`*3fjyB@GUU6xUzb&J?7h)dhD|(U3H||v`ZW^9!pS$((uW(YAzMs^Tj4u_#J?6D$kopLj>_p22v-o;gpu%1&P*OB{OW za-x!nA9WyK|MeP65CmffZsqy@=Cxl zGvNg8Pl^;VvUhzll-6-kNxYZ;cGs7M$ABWE@IM(Re1`Q`rr<4f#8{^cHQs|qc;>yZC+gXPb-DGL(ogyXO0XPNQ4dtu8;%zHxBv7giqdO2eM=XSw%`I*Un zQ@R`)H@?_h5Xpzr^acE~d_2La6=<0Lk~b|>{XZ3980!VJh+&GfYf@zhPKv9<_AAwJ z1HY07YV0tBb(wh5t9iKDz8|anr++Ar;mr^7@e5W&x?VM+yvMs;nU#MH2|0_t8eDG= zbO{14Gz+ON)YmI-nE$77yuq#Y%WWa4Ome^)6YE|Q!9r|5o2SjFHhG-ogl)*h_gijh zZ*2*7%t{ylhLjTU*L?m}aoRHr1L`k$cmU@ni)NCCd;Krp>nkx5t_yf@kqs7QmH$xO?TNutmAyB&KWPVmxWr_B3!9ry9y-`DfX7t%oaru;WQ z*#XQ=j267MvbVz_*p*Xwz#LE$QK5gdIF4PJ^x7yf^4DC-gDUpJ%-Sm& z&s<${cKrUUfy`{2+1^G-6PfGb)03R5IjLn3c2$YRIB<<7jyT~#HUp!FC;v|~QzZL3 zKTsXTtZ#`ed9*f!^rx5QGJp3e`@bSrQzSv)fn~Dh->@-P#&6nBo~0+^_oS>7o*eW2 zJAHL=1UARho_0$~7uH>@BC0XC4^DMWT|{_(a}!aAFyt{e@o(C0=kEMpfoA68EQl_8 zF6=ri{vZJaco2%m7|_}1JmUN^*ao97pt|{Q9w^4!0hSclPKb!NXU3}+QaLt%RJ7Pn zt|on7cz_N5TZ5{&)gGo78i(1v8jkLeU%BseG7GtM$e;C$DR)zM=D5b~2|3gkkv0we z-_=@>&0P$uH94BmIXXOvny9Z8V^VE&gL9#G<<^NidK<`89@sozU)9}_+5NZrmF$>H z4LJp~qbUFPQd5Zs^7?@3f?O-#`;MFY+$3>O1Gcfc@ zQcFeQK6uPY?atiuGt$oFLsyWAD}4Ut2@;9yMtKH+K6|AXLVgN#M0W{lrW?!vLupDQ zY~AzSynV|846*BY@vUwQ6M3K|w;Lnj<51fez9&+@<$0VQs_AC@^4RTi!ChNkZYj!T znWvJscXYIm+e)O~-8op=?JdOjsJa6MRDNtdEO~iVldpiNbDM#!tYlJ3*JLv}Zc;sc znW5xk9r`f(QkB+-r~zAPo3C&+>I|LDsSV5xnoahIY)oIL=)Y#^q^H!P?p882MOCL) zEQ2K-H@cOv1oB%bv=!9(&~9gMPq8&u>G|iGEPjR+{M=94pE(r>DH1z7U)kE({djqP z{(@<9$L%@Ae*ROvzMVBz(#3NI(bo)?V)OF21j>4Pe?SV>45H3IE~3c)5;m*TJXg%! zS#4@;{Pny1?VchSwFB5WLw3h6&ksk=SRD7bsdqtm{p67<)VOCQ5kGRjXMyb&}|@Pj)dDi+xOK*=COb zgBU&2La`#I>SFC*tg^`wC`A^j>XLJ)NFY)F18Z3-ERLrZOI2KjSjTOdU76|NmPUG< zia-q(>1cSrd3|0GBk#6KebY@*Q1 z&wtW{G(;Td%}C=0ex9DE>gfGuG_nj1U3-*OFBAbHP+hEhKRDxk-Q(ECUkz+qSN_8& z)*e4@Vn4Pbn}JAbgVr#5&YAX(qc;0w6a6u#baVo4UtOPmmfhWPIgm2_P3^tFf@^B( zEok|xBO0k4pYV5qiVHqRsUD;5i;SzZIC*^CtJB8G+8Y(?I6VC4rdlmG=$SNRK0p!L zwI}Sh%0f7Z@m(YNhiJWCx0YoCWlvEQ?1J0k6A}jZ;DhkRSwptlqq-~-$zbr`Xxh%=K-d7@HXXTO!z=I1N!&Tfw zR+D&n@8V`4G3ByMMEL!R;DJ0AZPq9Ak@H*@(JsQI=dNs7&t_pREu^$!A8Nb6dkTZQ zF*Wux{jj?mo$KjQD35vXY{$G%GJyAbJbNynHB)q;mK3 zOadc3db23+Z#o)AJPe}GykTq^zHZ7FRy)C(b|7X6j4Wu(M6c21CkinN<)kt6t>{>; zhE!qM@b>Zo8C|wWsmb`zeeq&gD@piwVpY0DIXc?T8KY{$2-{=`nfOt5rkdmiDa3Jv zQ9)f#{OOJyI{p4HcN3Fa$#J8o@}>RGSlq6i@m#X91eeG3$kPA{qXevHfXtU}#CKay z;1J84_k4%<27H)LGK4n#^gpOjvb^9b>)*lRweZTi&16com^jz0m%8P0N39!bYu|z^ z$4srgqkpT&T+n|T`(h7VmUi^x%E0o8z>>m4B zNoCJr75UV5YS46baJu^w1xT zF?v5yd1x?eV!{M+0DC`Cj)4c4cgSh!}F(1c8g&@0HB z*Lt7ZL1;+pn2s7SGU6w{;x;3^(oGrPQUNZsoLinlbopLH$}9;t(&c6od@n~0xN!vM{`_gp7eb1vcNzVlWoSt{>szegpw~nmKFPPhXSP{k z(eWy%YnS_?e7?()R@606&j#_e0zlezO`Y#fOJL3!Mvw}MOcP;%>$st6LtMhXl{gu3~B(~%k2yEU8f0%XPVhXIa=U#Zv*81RP%_a!R zNj6&oR`^}IBSs7Q9>#=IYg`5#JV;ZI6k7x7+VgSR+uJ-QwX`rZ%y9LEHEhvSr?uNx zIEKp#it0XBl_M*>uA&=hCAj>k;2!7D&R$0ymFQ@(+F~(d@|`5_@ukMV zyVQ@EZO3Aq+1B~G;v#CA*_X3YknSF>RNa%P0xv>u9xh_L=0RB^r94x;PYvtAeedkd zLC42#rg3XAT@-P-QR2P7vR*~Uh7<{j3nXI}?2+xP(fxwz(l2pMhiW@rX0k=+%U$D^ z++lu5R5|0h@8EQ**Np&vTZZneKf)9EO4}K^?pipY=>y+U1Q4rws)78bF;ir^7(hEyUjS{ zlq`lr9kUHX?vDD6&}!2+$=B4pKxbYWb4E*@)T3@;n8Y^OyZRw-zf#nhPMZ+2*syNo z;5bK6YV%tcTuo(i7<>nT&^r3u!BdbYMKUiPliNl^6{>NSJ~;Hzb05Rp_DcjP_Fq3w zR;K^9E1RE{anh`kA~i1-Jvl0&d3Ujji$uN`)WFDEjG#nS7THu%%ovrVL0;pK?Z5t+ z=p+=5_f6ZPb5e?+^#Clpk8`IQaI+c@z^$A52m=8SEeB}il^`a*FAMw%@CJbiPy!}Y zBy;X{dwgUa`qN)Bc6jOB(6h705wV%sUE{l+V!esvDvQx_X`G@|GE+9MoBS20_QhiY zvUEG9fRrf3B8kjy-? zGhHGeqqnF2gt{Pvcr7`LWe&K4Is5QRo6GauYTfh zRRwf9Sx~l#0vrk%prZN3_WseY@Pnw40>U}%tzmPxE`h$oaq_7-)z$pAy; zllI;}e_Gu3fkHET@~`HL_W)3Vrjx;D>wc>byn0eSX}U<;)Y~a6zJo|z+N98TE!;Rh z0gJRyy2vn!I|ym|d-`)!pmmi5pPY@eW%11(+KL^f`Gdn_{T?bhu$I3sqs}ck-=F{}@!j%Q=t6~D<816%H z`H3aznXoRft!J|!v5#aPAVqrYjU^k~2>GD(h!ECex)RLM7GZW9Ht=msp4^Sv6`wRm z>%vnZtk2k>b)c&|y*E3So`AKNqv#d@eGBM*x-;m$-9Pn56Mi9!(JQ^3sk6l3QV3lc zz*eItl}Q%_9YQs-O~=Lu!g-rb7;z$BtVnEhel-Z}+4_9;%NTM^m2x}4Jx@arY0qgu z`J14bA!NPNeI!AN|1oQH3XDolTxYl~GGA_+M*kGBQ-Mq@pf6ri17TO{8 zND+}PIQrv_^H9>L>FZBeO*vWyRnF*s^(X|vqDc`mzxv+VV|cbSKlxMUxHQ?mW7}OM zqsNY^+mR&ffzp%-sILc9MP&3t7Z0;Tr9+f4!a8>jI*3*Jn^KVZ0(jF-7#Wa%a%7_p zx_=>geD6<(jRW@%g>4Qe@x#$ zFoVy|JJ3szeMwJ>w??a5%J}w!!Unz1M2PTMu+mzH$Pau28!L*`$rpr7ZbaUH2>YS8 z2xn5h$iEgUf778edIA&_vbaF33yxLo>+2x^Ujg_`-k*B%Ifz{e=m&bN9>MYy`zOwO zqP>1+Fq6l2h`iw0s4^|bx+}Rs*GV6cSC}?MD*9#1<%(Z4BWUNR0FE>QVfyQI3ni-R zd{wQf7K>FY1v&MijIOL@PTna%QSaF3LeIU<8c+GPypCB28Ln7Dne4m|DP+&eixtXH zV%!%3z7(t}CAyn={06N~C7Z6&cmXfry0`*D2bdGn3JovB}lvC{VqCoECi`% zoCU5o)FsBdFYgYGe&$M(rcu)V_EHOI3H~Eg$`SFWC@zdvV+>q{Mva^Be$_0b6ZzC@ z`nu`?Yr6f9eTvCwNo}L6QUA@Kgg_zGnbVp?pliAAYF4Ce1?5kg5D(gSbS>I1(&Y$^ zo(MBgJf7Ne#>syaV4*1F-}7V%XEOhwY@}l-0F79DT%cO~E9x zwEDrH6qi46edl+*82|G+-uy;d0H$waOsR=6(Ed+A+T(Ax2UVlA9{?f_zj>bY^*QTf zn=nGAV9!X-i5VtqVy>5QP$!1{I;vDH5645t-Vbg!TixbS2^%H{HlM^C+cQyEm7Wz= zzr}zQQ^bAoEV3EPwCUqcN(h4%dHtUQ<)c%2<27}b9J?e%NS8!}ph`poRg6)0ARq9m% zhjyME@(4}>^M!8#xg@1DL+RH){+4Y8@_5P(`$9wJO9xi`MYk{{1A{8!`U4^pyC=a- zGa-t&qW%jKL-akM2$#aOZhHQV8bJ7H&)mcERFb2)KWFRjdFfl1&U>;C?dLP+PCkXL zTq&yH@18vx^kCZ5RS9=ph{?^M+Szs27luuntlk1ac8sb5%~+^SoQeTh`WlgyffKdG zF1pyIk$?6neWX-V% zr^S>G!6(%+{S*9oed_^R@%FKPg*z7OOcZ%7EEg7pXRSwTu=_-5-{mA|mADG>OFd{H z;@&DBtyS~c52@2LO(ZaaxwIMOwszC^jMkLrlb{O;Z)7aLc1+>JknyjZ3L`7-5XYRP z8{!$w!f|tHpgp;@xm`#|TKE8IdZUTD_(w{o@YQA;Jk_`KT=^Wb8j}2~y+-^>_>HP5 zEe8M`%Y38zu`gOL;yF~73}r9g2Vay7**-%SsHCUvcS_v*VMQFBOJ+_~QuMAtRosmJ z2;htJp3c+&xVJ2Fv-d^JZpC@Q%9HPbUR525d2aG+xW$#7M@f2&EscN=lOomQ(k}!XMB=4DQCGQ*Xqk z`^qV1>gv0Oc826oz_Ng1p=_@lRh8uPXZha)P5yLRJpE=&k^WET_PZJNCq>gv@jAnF_7-}kQOcaZZikbX}O@mV1wFMFq+kM4l>-bcY@w9Qf$W1 z7X%xl&w;CMo7iwMjnp^WM+77Gll^Qqr0hrv8r%7H+&FuF-)IXK&oe$!Ab)4GOFd}! zF~t1HeoHz;BUfqA#UaVC)xy@!&}yk(qDpQU-!DY5Sh(CvMp}GW#6_-Te$R(~YjgK% zh@NN#_>=M*>APWyPN7Map?&w8B5DS*d{c??+&_8*CO=cwXp7@qo@qskF4GOYZQmKP z@S#(dz~8H*9Z7WdamQ(-768bg*-rsPUhVuYOreKkkq@oSqzjx-;OlKo^%UXkQ`s>iW`6gKTO&Q3-NufYaB zbcE{H3$D7$9N1ZSwm6`f@cP*VG0{TnbXJZcB8D~K7YhTK`H%uBMNsU`Gy-aEw6ih7 z?zC$;_Z9b|-pFnI4NaO9%&P5r29ppwXW6}*EueP!g^9)u*fld6OhP??^A_m3`Dm-B zN(lfSV?34LI3TFW6Jk6t+`sQ^WE&>+)q_}Ver(R4m^bfb?@|8Ij7Y=zwydB%V2}_0 za<%1>E^(@@Ggiwx!%qc1&^Adzl_8-4Ue>^O$%1o4DQyJ z`NFxZ8o$|#b&cb0>(7~X^edxTTnq(A63OOAYlq%cW6;f^>Gb2HPY6+`z6 zmBocb``=8ujX<{PaZ9jZ=VAbwXu{1ga7{3)fjE5a{V+j@y>qk1)-xr-ZhqMon|Amg z97Yy59oirxbG5P*Tv~qV{&LVX@dl%!yy&PY!)Y_*bW^UlhS9bAQD^W~)17bAG5+}Q zTt|;E8*t@;i%Um<$M`m{0ifSYP|Zz zoiDyNXjhobPdrJN9(EgQsG9YeHT3#hyg4-q1Nsdej5Mxxl8oib(DQaur2%9j@lS?7 z5nr8JN``D_-9{f&!CDFK*0CJ8uBu0*LwjQ|186Tu+N4xHMzpJg)?=vsmhp1gr_A6Y zfMP(W^+Kxw#R?SZ{jUFRR~LF(WK6e|GeCSjuMT~>(HGr!lv%Y|gYTRQ;PFa{MWE+Y z&-Sx01{WO*?U!Y39S*`6PmY zr^bCxMGMgNK4DQwi@M@wMcq3`#(c@M{ZY#|_mA-{1 z@qbSVI-J+Hpil2MWAy7Jqc(__rA?y+gUCb`53&r3Aggz`sx2TW*6bo`FIQ-`a*p)_Od6-Ibpc zc%L?U1e@2C@x_qOe5S;B7C-1ycGXDxE>(Z>>6WUH!yNTMhIYE=8b9!bqBo@xdHVUl zAo4WpZmQXGc+!QdLJYNO?w{mF%Sq356tgBt?X~WkJ4~DBg5KyL1jJ}@X)9CB$V-@@ zR@!l}?bZ*kTL(K1Gq}n(eiJD9IVhBU%Akd>C72>=9!*MWQizSwB53%ZCgW^;BxThP z>)E+Iy5{np6^natdh8pN#){XvYzGj6oi45e)&Lp`VHNZI8JeU2c0bM<6a`~elV zcN?(r3C^X*O$5#-nDe8iyn6yCFVCiJHVpZ`Ztz9+)~z%sM2_rgIJ~Y$A}P`y>AIU! zj(n$&1MA>9|CS9Lr(c{SR&roap$A>8hMLdP6l|}2jm?kCWo2G@?=m3OUP11t+YGLd zig>g_-+aqY!HaZ#(o25-Bom6{fH3lYnuu+V@F?}~iq%^4cKfcfSWTwp&Zqd`_Nb|h z&SQxpwB;Z2@PUE5TFVI<=*fN5Q%zZrE;a$VKdJhj`lZOW{&M*8XUZ39LMSlf0BOV- zSZ4Oen{XBDFNmD-+!Jaei%sh7Sa6>eS(Kh_?~6dMH97S}!%#zyBJJXsr()$y;fNL| zQ;NAk;dYBm#L41g>jEl*at@O34@iiG zv?>C_ceWD3I_Z@1Y*BhneWeN}Mod9W?m|z_%xT&l?mz0``&FVzA$7d}9B!%9CgG*# z<6-F$dt`B6%_LjnXGi|zj`Goc;@5aCsLgjMUR%epj*?7uCy04 z$X0e!y=!T7b>wb=g zu2hAWo}4eIa{woAn?LkVnp}H|dMVUAHKeenqb4vj404-S%&4Ej_xC<)0Njq$Fb(`o zy8c*K(36g;_eh;|mkN1}yZBDYbmq;Ir~_ z!~XPQ+bB!&vhi2R#uBH0x(@m6_}_Y2iCE@sb4l98@q5znFW7vzhJa?3?2euUfzS<``OTN7`r`uEw8VR0eI;k}y-MFET}C`n-A5kb<%H1A&B| zrSS`-MwGN4phbm5OrFI!?^%y}Fy*@rF)aNKCgeg|%1RIcn)_{OoaEt8uv_aeM4Uby z-J&j@Z#O*&R&1SCl@S&eTgT;J?9iYe%_Am`50z~l9!|D?&wm`j>vRJ55(i5uQRZjW zcFF6Q*+r5pgEG_i)_;FR{BU7O=Y>y;3cnDc!uzCn=deg!?SFuEVtnc-`TN!NS^v1< zt4qV*O&#eslHO8^TFHeAfgX6!gYWuZ8WelnD{FI?r4D|~ercxL`LzI%mD@_yFdw@k zXY@{q36n69942}+>nlCe(Vul*wage6LqXBP`0bp2FAY@>RR~qyRw`&8i!!uJul1qa z2V`M8@gFaVyt0?ilO(artY6*89rxIO<%s^n#%8anw?=b05*kV<{*X8U$(M-tU*CNx zxB*h699M10QkvoA>I08_n4QD#^fi{G(BX83+?;U=!X78=!Y2}gnr$wu}bXnK-Hv^oT!J0BHb`cn&M3#iKP)X?zQViA9lA?{3cI&b97B)J_ zjm;M{SsiDQn*6)LDu*eUld0`YYRr8*z9Vp3U*w zg7ehxukMa<-^r;YxK(#%N}YGc#{B_CB}c`uja51g$gN;^yK#|vJ<%V(J|QXZTMH3X z!{Kq@*hyyJF~1I?0mHNPSWn$c~48(7wGQ`4?B^I1hp1f}lQ+RmrF6+UBb#Jk3fo zrq4WqQAYpsiiklap5HbySYZ0>O+q6Dx42%hNCNszp0(7_6?Bnp#Sj!yv8Sfht$nt_ zCYNS5n$Z>frrj5!K0SIuok43Fv7D9C`jnBv@=<>IfXm$MNeg#Fjy`AnX2}{ka-?m;Ca~I_znf=?Y47@+&}v-@z*O*gtJryP$-O zt*%a>DQPN&G6UYW`noADpAFvns#S*8_Kzre<>Y(azbo&Z9ms1?;Y;s)t*{W7XG)Hr0T@Hz#T3Z$o_c0(dm#r&B(`DVMS?^AReh<^DIXR%K~WWKP=LOq?Q`&3e==k zoM3-w?xD6FAysGaqL>QdIA_#*hTtM0N#QN(p{Pyj@tnWtJ+IIIq02tK6_~8n&UXEv_rDME z-SD-gA~%jd8B`4h>x&naEBoxfNG|<|xyKX(JRlyh^FJzP zOq9%}$ur3HsjD{eN00f75w(JcKfYuCE_BCRrMa`rrtQ zy|<$pvABkLmiB_Z zj89GfgZX@$QcSD$I;6&CBA=SuHs6mvO&5v5ve2`S355S77;L`91wE-2{xg|o8e|i4^EZ&~rGfHQw%xZ$ z=cic6iqlZS{3x*r0ypoIC#xN-Qaha^X-(=d-Ha5wp29w@VqXCne{dE63(V5}f{M#_ z6w6`}pH4al9Tqx412pm8hTVeA1I>ZC$cAp|Ss>ZVDtHmKs1J2NBe#J#VB2i3^fFp2>JAC$FFG zxLgRoOvcKN%C9%*Z3*dZ3TnJ=Yy`V;x7n_Y#QD8kiEqL?M{>WIVW9p_+_22& zN-D12JeucV>Osvmn|BtZ{F%+8N7L(%e_~$gqYUNOWA?wU9{q0Zw>R;czUS=LGETQ| z{^&*7Izd9{IH&3-h^}6=x4?q&Opt)z3$=~EJ=C8V@|O+;f-M>29#B+n=$zWTwl%pT zBLRHrmt*a@d`+;fpeXbz{bC^s;qfpU2BH-*ksAoWW`Ie*OQ=WDJkeE@00=sfiXyS# zPjN761r%b8r(V+6lS{g^E6>)k(R+T!n(pD;?WJ%)hR5L@MB>oBSfLQ977Kg-vz2Jl zN@YWQ;oK7N$ffH7`Yt>2wC9?n(S^a@rhHVT1nb$Iis=d zrpHAGHeqh_&ia+5B)RbUV4##?U7pOz_^+S2iutQ= zw5Y%=6(2=5Bp+_oq~p}|o{X8eTbL5k3j@*%JjmO(HEl`L>Q-}AuNWQhWg5GEIa(iO z@?FJK0kf5(?AR%ko*a?9-F&ZPLW<4ETu+}_j-cS=|FkaH=(y8RwT#N_pBetLp`b># zm>TS8&7@pbDYz2i3=t%yml;~Ern^2qq?|I1Hqr%}3T>4fx`Px7)LP= z)rpM}Ll2{KMKUO?B;Pt)@C+pp`$}fQ-mKA}`-8|EDUl-Uefzn_Y{dX6cKGYx#w)a& zJ%asLmA|1GF~+I~1pcfv1Af@xj`zYQfB;&@!G5PeV+WKNflP?6^oO&sNUr~}q#;9# zd<;6S_suU1xCS{b1ZCE%C|aq(gC%tX*EGh@umKA_b28x?c1t_B&TeFd75{7jaF$gQ1FU}fq(qqr}kZgVbGhA#UzWJsdcc|Y`J8=I;N z-ljAGkbm8aokt4e3xU@(AYoZIzie;iBEIh(Q+2%a@DQ-OayfN89p0ZAbjDl}USF5_ zJKF4xy-0LFd(FmwKkF#ZAU>K^K;lW_^jbKS^;rJpK&L>az~IXW%Dxvil4AsR7E8Z1 zwn)CjXQ`QSVQVA$^YZ1f!d3TvQY1D#8uN+nJ0khi`><_PM!yN-lv9T&f#JGBRZ0(0woOQa7 z(m@YQCx4gfRoo}HPry20e>Y;8bmrFVWRNnW@NwEQS0Yc`GzT|-78IT|(%1Q?xyB)d zLt|yAI3OtfWa*UMXE6Syal^+({m-hY{{QHDaa%g4pMSt2{LRIm4T)q$=CwfL4H zYZZNyt5k;X3@*78tP!^>vx|3YhKM7MyO8T)_~=?|(ducKz+6SAKq0X94*yyA))ve= zPcPexQFJNdYhhEh&;SK=6;~RQGSObzxL0`8=>|t?!S^XeGbDG+u4jO>Nk$gA(UmBh-&1&}?FezjnjRE*v+fYlbaafHCG5 zn`fKhUH%0kNjCB(2MBS!ZaUC8_h7k9f$wc5LE$ya41-xS=q+c6cUfOnCHkzunY(W4 z=)e*M!q_{5{Vwxm?>3I|Fr(^TNo@!;W!uEu$z?}HriR^JB`khX2Iw}NoTTdkEDf5VZ(dJ4 z{rLX-s4s}53$d4J=iyf>#TdeBmKTC@w3~7BIZyR}DMU=O)+IQOd<*5>4?ECg0-)AK z9%cra_^qN52nLBOrKGG+C!#}TTxHmIx)n#-PKO52>rFPeGkBe{iA@&%cezg)cTw9Z zX?12WYGUdl)8FVi4Mx~VGC()BMQ zqquc#+Svf2ZDd`bl}p}DS3ln0$QqnC(==!MO!HzsX5o(V15SI4moj{g8Z6%$&Y^AS zUg_Qr9Oi9HT{d7x4i#erJuE{hU-m0W7fyNB`}7KC&7)V+R;Kn(4siSzQK;MHy0#iG zHAwHNEbPX5d2qn7!r5;|uxW8{dJK0!&Tn2F148(Zh-KU8Z$n4@uW9_prT2GX6KE8de`(Y9_2t2l`*`b-EOhkp zOkuaC4C--N0x!VW47S41LD{n>+mM z^QEn73{$q`?W6eTRC1vG3qVH(t9uw4V`^rhIk)2&--7qAR_0*V%VHu2DU4 z@q_<$ZQZ$#I&?k5p{1^Qnr3*1KibE^xhtXn5MHp(HRuN}9*wW-ueAO7z+9dCigonb z@~sIIug=uSVhaNe>54-z)#&LNM{o{_K zkP&$Mfykq$2EwN3Ma;f^BMo{R(**n!b5feiFhEy+tSJM{I1`5#65|p@QeoJzI|65; z%x#aOUpkXtrML+PbbRrspF)m>N*6bILD2B6+p59MD;TD3U1m|NlWvQ1=N zGb>e!q2uuH?(|#dX&RPt5K+XTzc8jlo{vi)1*funnDUJ|f}TBS&E^%@haDREfExPa z?nj?Yt>kB?mo10>caTd$xL(INvZF~!W-oT1o-UQ2UPc?Ez2N47JZeKXg&BZ1dn5zP zU5dU(5=W+zT&}Zh1n^OZ+(V6#R+uPcE)J+KWWChkvB_75>}g6G7^3E)Q8t$$vn{1f zM{%Mc>%=;^fUMi{DeCn0s_p8u&I5Ld3xlDj)Z3bqaGs=b+Z~Or$jTYncjq0Y4K!sP z>1A%Gd#p$|w)yl)Hd!YuzAi)c7$0n?%c3KWfUw(@yR~!mmV>$ zn|1f+b^__J0fR2jdX{nPs5$eDs*i96(RiGcVDFcN+$^%i29fAH1j@;)>wMNr_Be;; z+ykWrnWd+8y2cqlEXbNU}-n5Vz9~lA~&5upbyK<+N$^t3*uR4`v3l*fJ zp;xSpYzaj|QkT~&n6oVJx>E{AeT)|O$lBCYs#DEz}CX18mYSa3MrEi^5Hmpbz7OM z2h{tNa2(N6qPyEH)H_~tlU0S#`i1sRxi3S(qkwe1OyFvUaXr<=5R&^|U4LoQT_ZU~ z%%kXFoIsx&nuMZUnxy>D?dQ&@4A?Gkply8{S}PRL_krm_sYqrRj4(HM zY-e@o^TolSZR7nrg@$vFETpF?_hzpnH+MRNuxa*c-07-o!s&)3-`dQ>kkL`hg#Uh) zxYV&c#ew;V*lEO_O8wIgb)^5Pjx*vMfigz0kNUJ0-{#G>*4{?WHrM)$Q=mUwLf`=x zYse_UgD`6;U0Q;<(6-saOb!x~)O>A!%Tnd#;-K-PHyoD{_%T%REtvqq2Ug( zrCW>l`vC;vB}?D;9k1S@Mv!XHxKW!owX(NWM;QpP67R+!EZ&;c`Sw&6v7()+x*BAs zdu4csxZU>Og`m_hvK{J6)>+ej@{lxMr@qw&LYmB6RMrm~lDep4O@uf+$W<3?^~Ht7-ePHnqeN0zeZn#&!?Nm0O_IVK4;_ugC9 z*W~CT2X^`8eWNVLsHV|%mFyx$2x{BVa-JxQo;;GwG|Z%n58fu%F>-w~3S=L(DWB~d zsCq&g{YGViKo2u9V9OWBHnHyuFky8P1pte;W{ z$+jw=TVu54bYvE;ak*v3e>{p7?mc@OFfyF$Ec>VW` zLtrI6%vzg(2|qV)vx~9uY}$7i1n$lY9ywjmY0LLPm!ZAA=DPq3+jqyIvJf8Gmh` zdGiH5e4#ct`uSSQ?W@miw~^JuvuZu%%pjsC67M@sgMn=)fhqveE0&-cBY31rlULG~ z?@nc?%vq1mh#30)-L)Ua4UEw9@j5ZoeqP(i=Xz{wiSj7#s#9A*LgXQJkDwp>LWwFy zcN;lajz5ytjz_O{2mJ{OtG{{N4<_YP}v`?^JG0xESQy@aBI0@9RD zKxr1FSg1;oE}=+=5Q->B4Qv%eq@$p8kRTmJ0qG!w-lW$60Yc}lB)IqQobR0bJ@+~P z-1E1~m-k(3t~tjXW2}`L5=Cf{zy8k2{lWD#H4#PL8Nr`Vn8`SmN9YuwC!#w-%_oqp zsx<-r`D)pGg;sNav*cd>{Tg$iiV7W-cp zF=jk*zaa7fJXLz67>4@$C!KyK-5+H~mC=|F=hv$=y7BvUC#3-AOlQO;go@Y0^53#w zwuVSn%toi`$}ZMNV{UA)p2xtuYUTyeI+a7ChkfV`%u`{w{mG!ba1#Hy;eesT`jn&2 z&}Dh=@n|o^I06H=xA%Z|F5Yb0w)XpiIqiGa`|FHZBicRHFYSack9<|3@&0$q1A~T5 zT6nd+^vRPM0Uu+XDs~3-O;OCe$#UZcLyZlv@mLawP<=|7QrYnOSJAwKX~)v{i5}Z7 zoc@|Dqj}F8kYfhVDZ?gQ-F&2j=qX2Y_BRl@io)ean8oJk+Au*{M_@W;A3HRo~kQUC>VbF?KN7pSu}sB+5gLQhzHX37QOdoZF6SR_J$I4 zG04~@XQ9bre@G~29QV`p7UP?-Ec55H*HbEXejN$)1KB7AOa{=St+W&HHs%)^C1y80865-MDas==D) z56>WHFElm_Hqqx*=R`#CcNfE=P$%ypw@N%A86RWXLwe+=sz&B5c@uF(@L zk~?2Gy80Bo{b;aoPN7UVhF0Os5BHZ%cJ6HA-WH{g=A_o%t>rjx*lBZ7YK4V-{}B?R zF<5XXZ4=|1cK?%x2nP>f!}h+hdhYi4`zFtb)F|fOUCR_PzVXI=>oMwyvVspcYa>kX0J z@6J%HMhyqSE2gEnosKp!WWomQc1ygnat zc8Rj74z7pl3r_>TS7n)gHRy{FdQSriRkr@V>piGeMoo4gV`{){GF6!-8OIgmvr#Fbg#LDg zEuNiMQAOCO#pX1bGa_MVug8kh1RHBgO-;&I7)iZ-NI9_Roe#t0?)0upD%**AF1%#t z9kvr6xa^Q@v7)cmki{&P$iP5$&77TKRSDg)MKe(IX0xRHCw+qrCH2dw_j&cUZhVc3 z>sGjzDTHxG46D^$EwY-Ki9n_~MlE`j-=4tlRzhXb`-CDzG_id#yh zfu*?fr;H56tLua}@?a=LxWPJ-`Yv?uX^?;CsbjhKt6s3UH~fX)GBml&hrz)bBWy$% z+6rD?8fB(oo1z&lBlNbxL?!SDnHtd<q6#iZdX zQ!Tr@N@q{w9~ehUIwYfGQ_DH5Af-b2@?MQVNyC79lLS&xI?EgU`?ETIjX)*(9y%s7 zse^2sJ^HP;R8tcBz`U5{#<{Z7o|52K*D&N_>9#*#u_3Y#Z+<3!P{2^mgJU zOin);b!y*$|Ln9+oEK6hcv`F4dDPWW#*CwVEr&7E^nQ6u2;ywSag%PzcIpRYj&=H&$b~#g+_DR_iYN|q zkkFgBVwQ+h{GCAl#9QwJGMg|b_ZbS6==XJN-@S(nDoH;#xvV1nx|70|9!-{QEoBnM zOa{IpmjblZrZ#mXXHuAo``Rc*!Ma`+DL$c5v?bn3UMpfQZCXWm7(1gmCZ`u_Wjm~k zd=If73@`;D`z+BmQRxwTJ$Z~Tq9tA;oiHud8oUcxT|RyRk$%z{oUI@S1mAe@Tv73( z6q2RrsLC~J^Z_YhAX6j>d_@<7MZ`X-d4QQ+mTE~L{d++1B3H$AOvH0~-0GpJGXlYL zJlS9`sllPnmbIUuQ`)6UnD={^uyZEc&(VQ5kTB-$PZyeFpJIuRnBK^ ze^VhO$pz@X8veNpz=|kS#q)%{#naJLqFlRQg75SAsnA^%u{WIg%@5 zLdwKQiQa$DgnzDx6d7tZ2(l2L=WiHM3Rg2Mbq8Nsc~_L*oq;3 z&rRycd7qLEL-XfK#(SS(i-o3BBv%>zd2@&SZWluJCVIY#oi_Z8bSFl`wZQ5EeQZq9 z6IA1!zI6K|bs7ezWXCO%Ac;fWP7{-szQ*Gh79iuILE+SAS3SivB`n>8cO=QJ#KUr4 zgbI4t5K<5+U#AN1keiM#5+n?**sdS}ZgH${Q>ju_&GgW=f74mQvfKpx{^!tD=`pdq zf>}gvnd;V#^mi*t>R>;~N(-w9_Zp$8{GEaQsfiZfY$oC!AS0`(y_&z-NGuJ;T!?}Z z22dJk)_*Q(l&rUogm-L%+iZz5MNU>~1L;j(j#y1B^`c*iW#=t%;^FqqU9nnGLh0`i zverykUH_p07Q#hQ!jgm^V5$(A=h4)t)4>;zXhPgiuR+2RU+7(3^LML13-X%LJuXMa zwryKK*hTYcDOz^hYJZ8x{s=7Ol^=K-JN8PoQsDG~MHLM3 zgP4AqNjEe$WVWvBt|!X<0)5LKlAYJ$X^7+ykYk)8oii>cfFi*_X2KH$qgS%0O6Vi` z$bI?oHpnzAG~cDD_E*zk2j2;g(g&G*tgdWVpxxo1WEK+6UaW%y!xPS5)|y#usJ2B+ zaB-lWsdX2HiS<>By8qB-XO3ooXA$c?Fw0Y{bHFO6qWcU&{VR&r5@Gz@M49Q5K4CxH zq5iy^s$_?DhGDe!#2y8@xOKLYPSmrVrt_Y&x4hImYEVo_Im`@rK#}xwsJc~lOS{>~ zxJ4$agC^$d*5` zLX}tZ-Vh*!blEiH;$+^#<27J-qgl)O%Tg3rTEMm>|NM6;48^;OjxVp)xs58i0wETJ zmKPw4#8gMmHgC1RH4_!X2BRNkLBW5BqI`L~WQKjlN!{u{Gs&1`HLN2BM2N$5k(`q9 z7fqYM?Mx#dbh@Me)EiBn#Jj}5&div-*^Fn-*dn-iu|mE)ayCCSo*ZwQ@n^Ue334mg zlT!OHT4M~ogaRfTOP%Um-1m2K(?OAe@0eX+4@balB&~o+-iszyxyLOtS94!GNOTiJ zfsu4WW=KF(dC_MkR$y3xgBJ_yB;tif7XKq&DA|uw1jWJTLJ$3O3Ay5;)q01PVELKV zb;9moqwrJSD1Nd$pry>!EODzHY6CJqtGF0D)$9c68Piv@rJ?HpU;!|}PnKXBzxI=c z9e$|QJ{llQ!$3y~59B}wN1e!syX8x$i27=E(yK4KFkb}inKSUI;MC)w7vXH{K}kF5 z-t&au%n2cZn|@FpERkwo4B0K*gy7fk-aQ8quK+x^ z(JEU8ex%z@6C*C3rZ&+P1)yIyD+pQ!1B) z9OW2e0!mmxy%Hk48#_hF?pO@Bij|)YC9IW%z4C@{c+_o?0K$ZY^PBH|n9i7_8_0MQ zc}dAVo%D|Irw^J}WApUYriSESwFMgrm;JUPCMQm^IcI#<_rFn_CWUgP`60dBMe>uy znyK$m`nPK5sruoF|DDGB3yV2f6?vuqWBqhL#x2XrnOh`&$ zi9)y22p=FCR`(`3o?Tql>XlS?6s46Z`B@H@0kRB3IKxbk8H+fl*dL5ti0gd}DVB1| zZtO;0UREw3eMJAQt)z{oC~|`IdUefo3!5I{t0V;&Hh;}2)+lR06T4_<2)jD}8r<9V z?Tzn;*mk+Qe5d{*1AqG+2}QqKsBa1;A`*MfSJ^qm2rO~yOzAfVUz5TUKlj|6bF$iJ z7>H0xodSlz&SFu<&Kv$sO!I#JDb9c7phR`)IsWP>Ri{NupG8|Aw57*yB0vaKLDlYz z8Y#fhV&S+_*jxu-vH64s?KK{r_iC_hSY{@KProD)Ia-@!Ze$p^#^L4|5 zu&WB}@b(O+Y0x*QP)DlQ;S|K^rz7^MLRDfebAu`}U{&KSM&&^_8d^V^ps43`9ORLK zm?*u15G0QC+u3D+k%mPsMoa5DFKnOCAvr-*XWsoD)4(XoonY75#-oVz&gm4 zd&Eo*3RxU*FA5(|KbQso!-Fo7p;*0Nb(hUyNbSNYLZT2k0iYz$u64uMp30W|Y3&x9 zg9>%J7#O3cotgw56ZBW8-XzSD2p`!JqO?17DY8T z`ot2z&NyyfSS=mof%R5RCpM zTPt6c0CqvQWvC*1lUl1A(HDt(S&@-#=;-lbaIiT#T?#+IA+)HJZfAR5Zpzs$f))Qc zxsqfx5RGaM=%};P8-QA5BEmC7)7g(Ak!?!ov4(KMAec2p=UC^`!0dI0EA#`5R4I`u zBLd6HHi7-Lijdo1uFp6t8YlVFGf>sLAxfZ3*sH={wp@X60m{7E#=Q}wKwnG z+8qLW!rA1jkl5#Lc80Y@a*nxw`n|d>nHJ3}8D?}lyzThN*nUz9+nAr{r=kvDCAS!v zad^6E&+K%Nu1M@j^+|*DA)jXx-!~3!bEK@4MzHY?b6qBXb|R=qk^HPmeX&;N}-V+7vQn}qA5b!@`TKDk$)VX z7Vl#N07YtS``}&BDfWaHbE^GNVg2E2wyoyhgxP$txwiU?kbiRd$plNrb`C2^$MBtl z@lQPLBGvC0<~)@n1cUuhe@uAj9scn>aBhF{YjHJ`zh3n9#^KChIDYjwv>G02>drVl z|L*`oYsF6PlP!k-?36F^>n^?qv7#?d2qxR8659k#xW>r9!>c|NHT; zm>uGrTr*c9n@e0O&0JJs5qpn|0^nz@Z$nnQWd^CxzzTZ07p27=qJKz*)Y<_a`yHc> zD@d-1(Jqn%gWxTdLXwmKi_poCbV694yK4S%*8*UJuLF2&U|dAy*xjk@46oVPblslu|>f315`ijUC_5X$~ETF{io|{b_uME@YzzmA7SOfGYbb!cXwkp3jI)p;(@`-nRFDpJsHIwt3Aa_Xrb`rfVn-i(uR|4pPVe}BMEmks=Sf~IIrc`iW#@C`j zc|FWMulm{$;1POy@B>kX|0fvXr~(MI3b%7 zsl2%6b4+G&2f+e@%}{1G`~1U{4nJvPjAW3f)+@e}z2x1g`kVN~5E9?KR4)eBp??-S~B>+wVipcM}s{j<$byB4D8 zm7)u|>7>OUpPm2WAwG$s;N8_>DLMF|` zMud7WK8pUm$LDAV*lpn=9-?oz0RK=#H8C?_gEVZ|R=w)%C~5{d=0hW?3sVM1S(7ZA zcz#6wgCF^Ml6w-)5eoh@74jfh$EFgBW%hu>1Sz$w^~DlvY(axuilsX=rB9&RkX~4Z znrfQ7-nvn?({ta8ov=F+RmZp2?C%aeNT)sM{(!xmhvuA^b&PGFp;TrAP)_8ppG}&a zJ|=BrEYtKBj{fvbrSD=fY6kqCOM?T;!$#4@H6QUzICao-eqDb{;{+{x8h7Ps`X8G#o!4$3TpoBR%B7~P8{-w#L-{ zA{=K{zX}&ibhLsT{KgL^)v+x$r7Oh7bfjDE_uYDG=x|EMhmx3!PhKUdrc$!|E-JF6 zwWZ!|T&?Q){VRaBxa)YX!jrsX?*=tI6Z=GU9e8>;LqmaW3E~(Qpi&lb3 z$vRIqS7m3ciC*!IWaA;BNz=N@{uxz#5bNXMV}k}y8F*wAdE%+OE&#u1R=L&RZ%%$fk!87%eeoLi*`-Ko-25(3C*CrOs~Z6f}J$e<<>lSuM*E(D_vjeK*X3f549eSW?N{2(iJ zNW)K)SsGoo$|wDf12Z!U%=?aChQh_z+H$JAt zJxs_uJhkx$>L7>pM|D&0My`3J{YA)lCLE+=W4yq27xTwa zjFXS;f5V3y!yRms1vZR`doPle`pd~u+nfMo7z@fLeXdQbL(R9GSnDZ+vJEV=dnj8z z&?kdd>FmX5)Qjj%q$`n$m3_^iQeulaJJPxnYY9vK9B^6X@vl!G8Yci)%h|bRX0j#T zWIt^jxk1>P)@md~Vc$2|XNnpZP1#h%;Vz2o6I*hb2z!6rQE(8d`3wU<`Ml`x?j zp?(a29~g=fa`{a@^F7XO{ebUZ^8#pJq;Wwny(~cjc5Lm0iZ-joQv^+D$P;#oo?Rkb z7hxhp4VXaX$#Drm!-ADSbS7U}w6&B} zgp1l=v0)^CmiW|$u7CY1-OMCkl~y&e;Qq^vMas?@E1}{P-h(DOJ6qq?1a=Vq?j2mwe+isU1NqGLK?YVND1_F{^w zr50z4I3rtV7+4I*%O4ic|fE!@CIMl726`HLA%3*Xb51|n zSPS0+!}Jnp)4w4On?lR~CwlCEmeWX#W@FBztJ<87e3aoh5o#dq{7RL$kM%Wphvu?C{4|WC3ucnA) zdcENYn;EAd5sivas~v1u^+5aML9ZzOlT0V1T4(0)wBp-41cL7xML$+$S$wU1BV+Vm z1Z+$-{sHB(=)AeH*~8PhH}oJf!u>O`3D&;1i;6)A;uWe@@wV7 z;+pRtmY@zNBZl?swB56AK>BEQfu`}bOQstwSE7wYXj$S5!lr#^MbWtktHlV3Q)6?5}#_(j%P}QKIm6lX@G-ZfV8>M`=8q(^`#Il-K1Ga?Z*}y4@HF zZJAp0A(FTH+@xci8K%n!$v2snpwZ^k_|e7E6?qiX5u-F{aGWdo>-=Z!mqj*m2Ga1f zd?E_a;R!P?gkR$WW&ECMpwh2j9CToaZEsenHb@8Ry&FQ3Kw4d`G2IG9`HcT7 ztu9d)HU^<~1r9>mhngkM41LxlKWp;p_JfG9Qw2MNep8GcTrcYX?Kz(YE`ycaofbLh z1h8kA2zzAVg)Azfi32xt34wZ!f$bMolAJPi`&~@6)A`jI5C;~qAP!1HEqJ!ANlVs< z8-n^*rk06at_Fh}_Qs<|B99)N{6cryP#MZY4~&lKh16Fw;HE z#Qpdd3il3JV7EkkJeEB!lGO+fy7?wz;x{(^J2mBZU+(%H6CCU^q*3_5;0zr`H?E_R zic7hn^27p;Z&gh41a|>x763>yNbWf)6>pLhkwKT-=yH=M|FQG0)@>=Y?CqLJFP^T= z_9AL(X9tH_zFa@FTB&YwyHG}$F6yA7gMt}lS?ULT_DA4-&treU2YUM>RH6OwCc$Rm zB*Lg(#?@*Gf?lHfCG$WEWJU0EC6o)xrl^`JDd+|>u{=r=aj_P_#lAo-fkl5ldPDk1 zX4UU<5q}br^Y7VMOFMdEFJM9n3@bVgrCkL!S5seS>_{t*K2&R*vuEzoq~VfvL8TOR5y`6<=sx?;T2pZE|iO%V{hW4aK@m`nHI90m7Cu zJVzlb3&TXTQz;-UAnQoi&;JN&fmHk+GaqDcX-TC;5_0D`RiLUNYB$!uA%R+zke*Ji zDbLlk$k(^Ex*Lc2_O+XmFpLRMmhql@ac#Tme&?kZY8PFt0Z3W@2}^HcnP;%vY;v?t zl==;1HGW_?!-HUJK!(aRl^(t!0)>dA|9|smpa=|p{xo0o1c-!J%uK3gmn~v`{Ub&h zF`5ThVkpklCP=jjXnp}0W2QH?#D~T6%j)+#1k@J?S`HwpWra~TiTvoH;{bl)Me9nu z((3Q6hw}eJI0r5}kDDAY&X$7PdFX%83}o%KIs|Glah!Mao*XTyaiODKl%dGpJjMg( zDe#nudk74<=~K1jMn8~s2-G5>Z}iXR8$yEU4~(DxYJ3(>41O-MJg6Og;wI;i!o1F7 z+=E8Ewsse2YbMa9ufXJ8wZi)sAw-3r5|}f?(G}~4BCk8ioIp=C)+^GT zEhMxoBz{6P?jL+gMqLti2mt((-X8DmlN zMJ$zHzYrNSV`&ox@5L58h8XI9i~Iw^@S$Pa=w=PKZ7Yb2-?{2gbT9@h-#zCyp%#-ihOpE5RW)k|2b$q8_~eSj}jf&G*$^MlVvm+O>R zGj{aW4q>@WPU7Lhh6)>eJ5O9imQAvhyz_Zb>;)AlVVj*0FsEw#x#SfLx20?{|NGRN z7bPlcPO8wtj*5WKDa5Uq2ikjrrY8Qcrq-1GtX)n%#$$q6eK{}|+CA`&7@}GH|H4HZ zOCY@w4L6cd&y;em;qzw*K((JAK&Tn(xRZzvfG>OFbp~WljdR-aeRV|>>@m5u#MqJK z4>Yv}4w&VH+>~D1owf$t9-eM#zPtxp+pu(MP6imEHk2S^)ak1b`4Kh(KO$&(T_D92 zu>HN`q^j<05J@pe%CRgAD#3vi(5wZ6Z^+xUl7xjjFuz=btg{!FZN=XvltC>#+^`Oa z<5Sp|fvXNqmS#?T^Q^UQK8poARUvcUP3Bb;SP=D{!!KRj#afc|AVR~KyXt0 zU#h9$IT6i>{s7Z*4d;9kLe!lE7A&u9+)hoCtXcm55+xLr)j+`|g1o@5^@(pBp01Qq zR%B)jSsg9-fPDfT3sF3lPFMy~BQ~Vz%JY!Zc@Up|BYKbHM&fE6uFP0xqq@ZNFxTvi zvf(YjvePj*%Ie4eOj={FEZ8TulC;OJ8wbaKT{q9}zPNnRMz7*!(QJBqdKDqWS@2ey za^};(k|j&=G;{vVF-(xlmQpO-#OrF(8U$K={2qv+hHQiS#ywh#ms=fxnPp+t2R4gBC&$ zMlF>1Z|MBO3-XMm7iNILfz=sX*Y{6a7y#BsfV(tzd)tS?^L|8j0}>+ddugy5RrZd? z4iQ4SPKgmKegY%WmId3a$HRkfpI*Bq9aT{_Rb)C`Ls7%8Lo6M;c#gG@lR*+n^aqlY z7z8go=|`b;iT?p&bBZfe*!kbcaG2^$1#v@)fmsKdNvI3+$yy0r3th6Pw000@YFEc}tZ z#75lUKRVoH;f~?F?MNMA(_`}-udW05iJyTQ>RKZ>4xIKPm0XI| z90Z(@bIx{KOKzE^Z$p<}1nV?(ti*0X0MNTDQmig-Vil(YIiINOPY6fR7bKxnaKU+- zTS*4Vv>u@6;e1MU1~_c#C#Us|x6$jUKZ5+}e-yPbklg8)=oz?2_k0ItR21FnfQ*7Z z7IT>KPCdUI<=<5$8}(^#`1a1s`q0MMU#qvGa~_7HS=-Yr4njyuYmWPdX8=RQA=_h? zivU(dtnlsi1jLe4sBZ^}kMxV9v+jS{l$v-%*kQuYRdVPDgWJ0;9sQzoaD#ZXNcWaB z{REk-IK)japWBq!(n|`|@n{+=oL*XrSpB$Tl46{H-K<4s6X1elx6MI#|NgpMp&`?YN=>pDypx!=2nzVxrrSd zwjGj4F6k6vnfk=<@@>!BCXivN=tu7dJ}j|cepcs8(J3?FaH9_{VtNz9NgHE4Sup?P zU6Z~r|GMMVNB^U&Lb98<92=LiDS~ZcT;ZmT@sXa(c1clQFZw|@karBFBn1lZ9RSc! z5{L=?_J%9Z@bvlp)#3_?y(WX>x|P~j3LIB|&xfkYDV|SwhiI*$d?7~STJb{2`*vfR z#lwcD7XJn;s@4elNlwa~K?cQ2zpRjF9Sd4l3c7eXUc~jRPzC`CfF2C_fGGmDsjw*1 zG3ln${dh&4jscb|XWl|3M@g@zlte?Ao@vlAJ7BLz49wd7`JFWDsYqe(L+{+ch| zY|DRVwXn(iexA|rV zR>Xi&TIVzuPt)$*W1sRB3crHjB@acn4_@6e>7`Y%&i6sFCpvA!{|}rtq+`m}G+g{6 z3{bo!7w@+DBzdR`RrM@;uSTe6&Aj40M^z&&B>dfNw5edo(uesA($Yo5iXd>Rv2aJ?%^ry^jb{QP6+2|R;T&MZiDhy&d-phPLZS1iwL@m(HQ-j}PuK~=0i zFje{{+Xch9BQ68`yeIpI?*V);wvK*NX{%9UwhSH_HZ%^RiB?6BwkiI1&_ zi3MRPUIKy6C+}M4X{p0es^Y%Vt&f9v{(!(Em7b8I-!Bdv@FoVewHn@9xd*J3s!DPG znf6B@XUy>ey`gGR2o03qTW($NSHi7haM5J`ssZg`q&TjqWz5y$an>_ETprjr8jk0WN%vC|w z)#OvgW{3WmCT(JAE3P|F)&V;%T)8&e;366t8?!7MXc%gL#=J{@q#9;L0`BR0TB_wf3(I7m9T5|2Yij*%S^X zKm&b>hOOGSN8`M2O6ve#bXo!4?0b_j^jj!s9CG~z!QUi%ACSs_Y`B8QHr!Ou7cbs| zPO6%9{`Xeg?@r@8cHh+HA@Q-lLVuopi6s2(2>!Z>ucJ3A23%)f+p2O~Qa1JTKaLuk zU0V;~k0Prnt!lVU;;-y=H2fnfz@YYdeaCTI;+^i~DI5Q7$tl;lgU zfvMEW3~0xi^M)z<6B`aYYCFf~Zzi$<9+_Lnw(&Ysg}KTXz@L6qO2v?Yt>qiv-Npy6 z{$-T0m;#q(^t60(Q zG?ER0dJQ7|waO)i7X%$h|f36-vuSLzD)&6 zuR9L88J9WsF}*c+)_{vug-pDh0-+HZzZot@$3)hD?Mo^!fhQ)rV) z)jqR6?t`h#5tQWT-JF*@!)W7A{%k-(6UW_k)1p(>g^ARiO55>;PG7#T zf#8=?kNy5GpOx^@z6E4|#6eMML5IXEuO{e-gDJVy+fMO>V0K*0kFN(4)m)S}FMv-9 z=L@7XP4?hY_RUl{NTbJirg)8JDvS#T(9pqqEp~kBb(0Im8BgbXYFCb%j@lZ=%9n}S|O{-GfvKQ?V{qXV0OD$ksqAN&yy~f_mhZm*+p-)NX zB)|>rNjmgN8Cx!&-I>0b`I&80+IXt2KhWUg^UYVb;tCz|ISN?5c#om2t{{pprzN!aG@9;=1my*o;Ly#>`meMx1LJ7D1?r_2< zpqNQsmP|y?fSq5VS#@8EXJdTD+sBI~|8Mj|+7lM!7r~LCv_reQ677q|a=92gDBdPj z%xV3|gjbyk=|12)1u|jX-+X~4>Wxmdc|#r(KSq+*wS}v!y@GSZ{0Edu-R5hb2b9+p^=Dna=!}Bz1-kn4*r%w?labug%W&(@M|-`w-w;H(q&tk z$cL4cO1SclsrskhqeZ=FjA)zHrF?*ZME^CGT| z)f!eadzIWXc zc*Fm;Q-?q!gJCfc^9t1&>#)dWYj4#%Z!|j`ImE6pG zIeSIwityN&F%_=n$_rz;#}XG1c#LZ;{o)jEM*uPtl4qTjf`@iFfD2$d4HZNwpv{(H zk1}dz5>AyJ(CzE~wU{ExCQw zXEN5U*4=Lm1y>B>NSeMm>kNl zOsvor9JQ^G?p<18`p8vD^&$# zX0^}8h~V2dYDS@2YG{v6Xk%}myP5kya3yQa_K%Shtfu`Baa~AHh-g{S*68H$I_D%S zI-vfobXp|cNpM`UpTB!2FT-!q4__Ng|HixDm9TljR<~d5SDOis63&Q?pV1(pwTAnc zEGMsDRjXp^mu4GA4VpkRy?-=9M-g4BVvDA$s>(eh@UfbexAcf?__WTx6)xJVHcKG@ zGrFR?bGuT|We3j!-}&{+>7x>=mwpXzdj$=)<`2HUem~2D3iW|~_ zly6l?UPs~R8`kzdi7U2WN@1z}J()7cV-(VeZCU-&SA!U7Y+l`d9$%eXxzE(+nF9Z* zKC(O=&)>dJW2HD+qwFj9QesF<%Aa7gyPzij=Ca$(+4^Daq>9#c38IB+BmC}2_KCx?J@H)_uhZR&I8%rE*%M8@wi%cv_(D= z&9tX2GDcOcxbcvCQTdf~Cor501WiQXB*VkpJIl7RfADG(F$*c_fMQ;+4F)HMPoj1 zMNd45ER_IuXWN-sITb%f!D)r@2z-RqeGDae+Y!6I@-d>LQWN(Hb8xt#%g$?d(39nf zJd`o(t)3EfUS272HuJ(nTw2JlSr1=fHQilbaUDiote-@a3+|&{AIyNR=rO`(BG$Q; z;RZO%Y_((~%RmpK59Q}aWR^ThE(=X~FP)-;r&Y5^$h>v^r{;=QuA1#wkK`P++}aDB zFx$L6)`RGpgp4_gbzI%0nz8owD^wK6=XgcMC9h{n1!&bg%#G;`(r>>T&%`Os^^=kW z&~Yurj@W7~ zA8@fdSs>hE!70Bp`x6eq=hiu2_BGzZ7p*huB)4bUT@@CC;-RUEoN|LBdigiCS7#L) z_*0f6EU`8RR8*j=ZXGOqvTbB(LZvv6ihBGKh$2Cv;UtNSlvL=G`_Ft>VvU`1=4BFP zIL$T_`>0OtR2Olo%R8_Vgq>`GLbS9_yQbuV^?Q+_n`!f@(WX6IbFYFk~5`~_A9RrhLU)+@_wxcF;uSGOu8 z#vD0sC4YYXFYTLKDgm=RU=Kc6{q&=RXWIds#w{$S=E9(s`v>s&V5PrHQqASUol(8g zX@iezhCAF3xC4-Aznl4+^)y`4=ylbi;MYL+dPD1Y)zhuzmtc37en!dn9@iV-YwGkh zQ~ky<{mW%ujda|j;T7l|gmYS6r?`Iqpq>yj=-m4Tu`EqT>IzD_FF7EK)+{nWP ze6Q$46@^TT+Q>h(z~#EFxXSY~Bl#ffx&_(`BZ-r zRb_?@qGCw@P;I5j#96O4_)@otVs14Wl81~M!BeBd=Gi0;xX{$7S8__+#r4XQlUV%0 zSMwW;{V2GX*LH)BN8_qUX07OFbrY2fr=u{P0Jb+e*XHfZkGr0b91@k`iV-_{n8Tgy zdj~QLmt2kw$jmsB2M2)FPPk+=p`0>QRA?qGP*onGH8v##x!Ldv#ZB^2&q4N)*hT0l z_u-Q0%OOLPBF@~0qTHe#P&)tpw@!OTw#e#THf&M}wV}UOboq8PJFnY-i|9!@C3hER z+`8hT-X;8p^OM=NPHVO~R_ZLSeA)f9Vz6R)q_Y*Fz{j&1-^bl&HpE>yE%ngg z@Y%}7f@K_}pwEC~6FRs0$r||xZJQK)8F(NP9-VxqtWD8sv$eK^H~kd8XEbymoffU~ zPImb`+)y$37I~XP%E{XCHQ$|uetn)Th{z`QexGm!w=G7rlsl1mz!=Gy(|8DIwz5Ir z(51U$;JCqgtFM`zCeXjxZ=DL*Td-`-(m?R+MgUR1Z~=s)QZWKEvP+3Dmsj(ArTta^ z$zLRfoaWwTyQnL?VEW_iRmzj2qlBP2h0mg5g!zJ7nV69hsUeISB zBSPt84K6vM4O({-_lGTUs+22z&U+9B8-r_m%}!&)=zHkBY=;BP$}$wq8=Z$9;+zDB zwT-_UbFv{G_uS2wkDl!N0XDqX_`%Twr;_D)lw+f=umR*3M?+unR=s5O2n6w6Z?5C^ z)sL1OVt1YG&)6>CJyfHMN&8kk(jv6$y;J*qT#Il(BIv$)-DYw3I|(&9#9a7_oe$b& zS3Tana>Y}-46!W5dLUjD<)2*mYRKjQ({ZtW!n>Sb-fuB)gd1E9sIU<$T*>|Z!_Sh0 z$`H-5><0IopY)A$@EV-azhfR-U?0Ke4?Aa?!g=ug0waROP19QRR@w*q&EqN2P5UcB!OtxzZB{ z86QH|j(A1Kyh0$kp~FYUuLY*vE`&PQd{nqM>evfv>*HmB0j_T4}&!gFsvO9y(wN#Uo>>esDleP(~98%H0vhqiDA{6p=E zIYate3pYi-Sog}*meSen#F`9!62<)Lq`Wx_jw(sNn(@$ka1qF0=-9v7yuxd_jDA8BVfj%-P_1TU_C z)0Hy?_c%?JOgnzITfjbGWAJuxD!-4)P;AAdJQ)wS99ezyx$@9q4N`ei8YR;?_xx4Q z-bUp6(dH}3HCMt_FI!5HQ=E*k6XCxSU=kzx&R2IGJ&M&b_ULEedk(7VEhGttw|)OX zE&THAw^Y^**K+x~1!t4jp$kJ5Bh^)fVpR{Hzm*k2&t)nX-I~5=E+(u;4XZwi&oBLs zj(+g!=iU4t@Pkx944Y%^_~abpvcx=6y?4}=E-Y_UIn;YM(9% zBh-|1>Qo=M7vnD+XsetlVZt9iiqV`XYs@5#E2v?TJ{2hJ+rI^HSVmS_Szfv72(I$V zz{@6$q^N0@7g~RaD!uM$DUWk(Wwp63G0(yC{oGBF|X2Ac2 zUB2<}SHK?{BpRi%BiIonaS%TyvvSySQWQ~%olEpVx^xxik|4{OYY zJi$>tu8~q26JrQb7S9!>X&1`SN!O7$`PXOZC|FM{|NH4>mLAPB6^9;;LF6({V$NMd zC2%kLirc)vu@ZEbg4F#2&EJQ$ddl0*9I5^eFr*e6R|yTW^rE6z3(27u^PnC z*OGQcx1k9E&E~9Ad(Hx`cA&PpeB$f$!rovitIsrG6`9cyggbh=j1N8Y?W%8=U(A(M zL2;`&2m9ysZ6XR@Fg`aKqyL&K+ML{7!@vQ^9O>}z579gP?D7jg;o;lsf+0vQ1vkv- z!|9QJ2-Lfg+u$9ze3qnkKkmvtN#N0Ke5}a6XPnD=?yy>Q?G0xV{WnC%#rNrP9?NiezC zaK&z`E!1t}?+CHca<|54RSX<+p z?P^@0^ck9)Sh7A}=)0bpJj+Zg1j`(6ab{oiNbNK^HCiLy&uenZf0o_$T@kh}hJ?^qoZ(Uir-c~2`!s9gq@x6X(k~r_m-GO?0XYb#B z`LNQHyLQzdH)QJc15&y5*1>--WYO8%a^7+1rgMGc8F3YrmK1ZE3ot(mHgBGK65kr$ zyPC_L*2&QTo6S&lI3$1_S%CBn&Bw@29e!^*+B~?)$=O=y@ z4{(*N5A1JXFAv5;V?{Gm713<1G9|X6Xtcz~x%>h>txQ$5+Z`~plh2^Q+s%kaQu0%c z>tn%Tp2G=jQffZuyW^A*u%s&iyXd7@f1wc1707h<0yec*K7|JD7A?)5~_erQY16 zLqjnq%VrLY!=caO)5=f}r{j9tUFE2C(`q$+lDu~3v&IlO`>Z6R4@!r+Dk+t`bsQ*G zZl9{xT%IDjbEh9vbMLDq>#nbUi4Yq$cA7h=Xz4IH3*eGVI^zotzC($E1OHd{avK8A zN%yBb`kcvA7H-l>&#r$+K4iLxAW!)m`e+E1H+)9Uce^vmi|5P#Q`nV7?YsCC!Cj-y0i>S&P@R{jc1;$*p368Dr!=RC6Z#!;^rgN>7qF=XY!spE(-qizI;z?I z%u9Z}n3YHP65*@!s^?1XcPefJXR|&%m*M$J=$4>rYFgq!zo}&&79qTCHsp&}cNCv z^O>Q|Ff3tk;;G+>^;#qNvUMJ86e+wbb^G=p5*kq z`--A<8%M2anq?smZtrra;Mg)}EVG0jRDU+;O%BhWP=HNJOqCrndjZ=CD0?Q8|i z%R290@DKrFJw()Wb-BY)4Ywy3t~ zRts@hkf{W(}vOq^S_v` zN6}`Nnz5VjmFZ#jd*_*2-p#|kXVR=97Av6r(AzRc&)Lv1yBi89T1I@O#`^4cvY9uy zoe(adCI^Ot4VHkTvoJ~&x@@0{@zC-r46coC~?C`UjMI^TvNzCUCa+<5(GOwT*DunN9qkkvAKCe`?Xe*aT}>*MZ77#Cd_F=2LMzN2CU zE%Hh-ztzNKo(RtzWfyDP71j0UjE!~ZB!)Kep6@h@869>iBVxfp*76f(ZaJ1MuSRb2 zxs30F6SU32^oK?wK4ccb!+YfoItq+TZwjg3#39h2oHq=#i?*hfNqc5o`6RzN2vV!J zMd_6pIXsrdL$@n^FV6;$L|V*5eT17xL#HAn=e<_Uh1fdLo>(yrLdbFENZ+#fK`jZ_ z6KQFt(fZrYch3PyZ9^XwN}^BW#D1v4^_i?Y{EpKanU<-wG~G@i<08;n-~Bt!Wn1@s z#Gu~hmtp8l*(kBsm;Boio#OZYM;L8Pcf~)q*)y^klX1iJql|Rae)KLa6WIRxrXIC0 zqiITOU_1LCXR&URvCB;-z6CktFD_>7O*i@0$Jpd)U!?5k8oIXj90nd(JQ=ir@P4zh zu2w!JlBD~e?Z5D)VRniz+Ndu|>*oq!*T~#q|0v3X-&H^rPcD=U8&#){oD+*CUywQG z%y>S$E$okAJNw85Zf{%!zYplC)ThSQ1X7u2%*+n+{M23ROxD?tEn|oRO=qyLo*T9X z5`jtW#(xjfKGLdPcGe3@4p#v%1;N6R{x6IS6 z%S0!t(p;><2JXE!m55-oFJNZzEu+xuKVEAd-DTzYpyG4zTC8gU#9KEk-YU0H_UtO) zK`Sj;_oDoZFKv1n7#Feip;w2_8#S+s%smQ6+U3hHb;Oh_#Yw5BVwiR27Yb{zse!qZ z`jqjGgn@kRCEfAOPqF0OA-5!;@#m4^*CpLrTFT?Ved<(NY4i!lqiHU@0`rPCF68{s z){y(%yKjAj`-Do1R&9(;or%ipf#Ooh^MyqNBP@j+>>MspZs(Hbr9ONk541`!_5Km5 zW68Gp*|zKobBUO5pq6FEh*0l2mm)umw@xxeUYgZ$#s<0eZ}wK54NdM12iOET*nmmj`=Qmb*l9 zh4|+9buPm^(4dFzt4Fd7|G(h*K>KUMh*raH+{3(H<8|UCKQ5O{e16G;qg#=OP6yT7 zpA!G?wymX=+VINqZ45p$K(J8DAx_ z6l7EO6i3sCGdrozfPlUMIUmOkO{$O`n4q%Rt~`CsDBW1E;qpysTCjhqYXslEuR&Kg zxI83}?^r&?jb3f?HPm+%fX*)wM1h5()X4!j(cXO+6Ecrqm*VY2W9I74SHxxo2p;8W zK5W-x>Q(3^YFmg#f9mP#XA{vpOVi=3r?sd(&*APQWyT>&k-t}ys(r@3#61J@!jR%f z7C-oDh@+VB>5?C~hJp+z#&mUU{h~_jtw}lrH-4D?YgxRhx^TGm%sr&bEnL{x4FTqh z8Ub57yOg+a?hIOIsGlK;ugPr1&bL#$&MwYyG`r0G{B+ZnujWt$nqdl>9H$CXBsKRu zh)AdMwAgYiPQ6}J(KF;_wH$ub~l;^Bj2@M()pW4=sR)JrdzDxv|_3=dFnuFD|U>Z2~{ci45LLE ze+4f0Kze&2?8C*dtr_bHbodsZB_AbvLD0b1y5!yjMY& z+o|zN=oaJ{g)(J8;8TB7pKN83wTsV_0^IrTI{J3@8@at`R+M*5OfAZ_sJU(bjT-(m z=fZM~jUwA$30GPuK|&GbYJz^h_h>QI_i4}-eWbi4tOPR@D(iW zpDHY{kvSAvQ!1g4-ppN}{k&0?V4+FZ0#@vp-?=f3COWCNlPXD}cOW{m?uw#~Y3gg} zwI)j?I-s8f8Hn^69sO`DhvTeCWi@_8DKd(4&4a|LbsF&mgEXzJ%u-=9)KHiR4|U`9 zB-yrRUqat=kXLQpOi8VL5}ogYBIuv;+Y!R7+i#wm*DcBb6=)~T#H>Fg|Krdy;W0iD z+6^R@>y6p5{-yu1v0bcyVNSInGt2jTu2xPX2V=PFr7vxJv)<+5r-@7QsBQifPE_qs zOj0tkvCQ9~0`Dd%|H7)3-^~jbTKkp5B$6-+;2DHpT2LiaIe8v&pu>>xcHurO&-O32 zOepAhh7F`&UY;k2xo=++?Nrj`_CRSbW|;l{+|(6K;KD*RUpNHqX*t^Q7^g-1ZwLG% z8x^@@i-#1?uVW0~77Y7}DfnFk=Jez>FD5CUrz)>TqoufyEs9+j2%yeC5`(;htKKz+ zxs}-f*a*X^`3azW`;PU+f z0Rp1Sv5Ra_>nUIO6%wF2g`GI${91B$9nv16OW;FUn6~-cfr|1A(K}UYdv->*7w~5VGfCE~eK0Gg<>)brI!h zE~Z*6ve9oxxdH?XLvTw&??on4XkQCT__Poz@DA36}C^G9o^4$=KU zv$L*gk@p}Y4!sH;uSTDZpga*`_-#7@^gt4>#`QW!xfy)1CNN2d@GAo-F`yZY8a2SR zC3(kZUf`rRUljz01N3r{qfFeM66XCaIgjU*5$1&3h#DMT(Bf0~ULA;ueL4zW$8U`5 zF&*)1i)@tQ{)l5Q)aluD5D@DX=alE%-pQC-NwgARF;4g%z59Ig6 z3|42WrBw*i-Rr^rr{f0!=QJ74EEnHq$7n4Q11&~l-q+YnvIuB4ag_0a%uQGL>*}PP z5)QiF1g}EL9&S00IfH-;@EZNhXZBmQNsomKtbT&kx)2$9TU#PmAw$ZR0{W@2LRmcM zA9<#91}>z&&kcjufgQ;jX#Vb*K&>}cKri%YUHbUOTQ`6dJBwcr2fOBWqtLCliaLEsGN(8nO1`uh$MwUU*9@S0JpKv7+-4 zexjV=y~}lvH4P!-QUecs9~vBdHl)TMWkiy55$8jpm>PAh|%OjaLXbZjqHf zwuQKx@`{q7@jd(TxWmKSBMVhu)%(&jW3qbJW_L5eg}dQo!KOL|=*Z|uUqDWP5FGrw zX|JHfg4}&z3CHvP_-49A(Mt)?MElfZ=z;sKmUNoTQV2{u=e_KRH>oSbaNj z_uS!+-JnH5D=7)dhPxv>`>#Ju%H3*eBUBcS5ArS!mk%8qaK2|VPgYb^=RP17@22y5 z|HB`DRbZ#=4Ne`|9w~I_$IhWKMx{M%lhB;4lEvJ>4PV-`E*TaXnjJ3cQ*p(nw}V@} zUaqjOxd%@Zqb>!$zrdKEx9FMvYKLX;*O=liFmqC#g{rzJ8q7?BTcgfHkY(s$T(u&0 z+WVEY-s&jU3Vxt_K%0@hw$Ix;w{>gfq*-GIsoWSD7nA&D{=!KKuS4PX==77#zso<8 z)zV)E0sa(_B)Zt9K5a!x(%f`kF+of|>Yc93H%|u+ZJWGu4+(v5K;>33r=N3o?l~U?jXA>{1>O-X8 zy6#$fC`IrxVsB=Z8FlW0Ra_5vvs$Iji3Op}1I;w6=52H@C)xS5SW!*&=Jx%uj;h9sX-p+BFT+{B?ZT zJu;G>6Y!)j`styV>3$Tlb`7HMX^a&y=KRU>bPMa#Cok&@?JI5Li-|~Ubh56pNxk`b zaOvQN{?P8{v2Noaw>ux6_7$1T-r#YF_bbYfc9a^KHdEC0h4^>;J&b-C7-TEwLg;4$f2oH1wIIH^2^*5jA`IkrZ+HFKJ#MP7XK zn9fVM9`bAasrAJS7ftppr`b6EONbpaRX~df6b^MMrDlQ&mT;F6Hi+rMEiu)S4^zur z0hu@c5(3XMy7 zk^H@6q-2Icde*)5nbqCqt*~;&cKlD*Fnz* znm*>e?R5#>gI&NguY78_oP2m$b>g!X6Ja)dz4XgEBRN{6`=U~j8h4<85c`hFU7NWt zI;NP8-MA9s=hk9zaJ>F%|9Pq>nTBpNaiG5`QTla>-w0RW)l008I&MEH-Hm)vL_0Kn)? zT1;5Y4eE5!-|W;77_v3?YH;If@0Vin%=-4`O$w^Zl*79o5&XE|ztQD;z1bYpNrTaN zxe6#SjYsY!f>;c^00Qcp{Kip0v?dZ;&@o?k>#|l_g8;xBL@D-IEkFSl)T0f$2OcZ5 zADk{ zgtB9iL@-S$U=1CF1x7RUQ!XIbU3bB@jT-b#U7) zJl5K&i0wSYjdfq9y=8G@ZKiR@+#EcGtzyOrl2TB1QEf?)#q&W=hZYK*7jE0p14E*< zZU&#pmoTKrV#(GEW5eA1!fq~yu9;9Umk@_U_@C^@gnmpww?vz+Ja?WG4%eIRvwX1$ zHAqQ6`f6row*P0$K0VzsJzWH4i|3O$_hud|^_Fukv#SiJ`qXW8mSdG&2mfpNZ;#n3 z_%g|Z8YdmbE@)^mfNR)OyeBo>6s=Moh??S_!?8vHghUI0VRIxW^u|<{taID_)5ID2 zuzk?^ur)v!ZLXoNA+Agt;vYsE5)Rreg!n_lC8 zdq3YjGq;~k-#0cky6i8vOabEy)gTf~r0yeQ+#Q$EHM#byNE-^&iT?4-h(l9~ALgNu z`0>E;h@+ZJ@8^4|20n0`Z3%8|$Y5|3&~>&wEj|(f;^6)DReK;!ljC0jr-tQF0WgWR z)F?8vXB!JOA7Y}U6%rX4h=rytrp=EEhm6Am|3hYWs3VKWg6R+oKS>d5hFB?o12i~(U z6<3ssVbx}c2#*c|8EA4ege>`LG@3OEZ`lE{l?gCU#71}#W`Iu%33z6~LC$X^tye5+ zG^hcH4VkiO#gjkH1@(}(`7Y>sYUwg(Q#VJed|s*Pkzq0OFEkK)xqbaulpZM2?q?R} zHv%vg|NR^gGgaAicN?=!E8F|})tNwsoR+%UGp2QgOZAv1j}zqf{9~%goBkx0FImlU zX*43NKfkZ7FW}ICKy^J3z4ajt@Aq?RL-jj&d5#T-R5X9;r_^=LkauO(M#SeIN-`A2 z+S#j8s?Qwjz)nAKM2tHoQm81u$E1*(*P2hq)nn}6t5vJJA3p*SZFzdyiXUgyH63dU zqxmkp17!8zzsN-BRU+0<$DB;BH)WS-R#P8o6Pa_@)moy537fi|VVrvT>-yY$5_~wC zWOuPaGe(=N@`zwu`2mu7_GYrpiR8>-1_ZW$t<>tsiV1v8(p+$wMxs%|qwgV*#WOHW zglXr0?IS8Cu`)1F-HM&tnCZT@=3+B{6Dc2&MaRZt#y#kMCMzoZ6I;ff!DH)?C{(Ou zIIAQ{+=C2D897ns@aP!A^y%vjtvlJVl!!X7G{)^>ggWzq`>gHSSi-z~l0+d8J#feG zWLv^SPP*Sx|B~nDOrBb`Y&dSP^>1zBSBjlu_^Et?#oFAz%H`$6DeCJo>CJ?Zqe`^? ze|j;lU;6OF`iya;F^#aVt}T8A-C{R6c}~HAh_4Au2>6VUBQy5%`**54Uo!rXc}1n9 z;GK6qYjiwT*+^_#T`p^)bU3rTG1Q}5dpZX; zhF@+@H@a~(4Z2bO+?h-VdcB8KxNlyXd&3B>V)*c=jMRUVrK4jK2_H1@xmT@z?^ZlI zik(?-@w-@a~eo50~-_4)+ul zuM5hCIPot>d$q;}Q}cV2A(pap@rx&g!!XJeSNvBCD0yN*HeXf;W&6_Ws^GYFP>qEt zwIE5sN@?MN?KT^aV1(ky0ZbI&jfoh0{2qteoqx1HX6-{BoRXOA*Wz2D5vOzsvDcFO zI?cOly>Yw(TU351`Y=D02luh)`s(83ogWuw1yQ|*yc(<;v~)GaMqaEs{-t21mWMMv zXC3zNZo%r#n@{}z4o%vQq8>Zy3_73amhVoB%WWA-vb@0Y_F-ba823V#lq3S)QJJel z(u0gtr#-(LCyo5iR&=Db#}jrG%#K^WBn6D0Xf&Ah;)(PZWw}icN0n7|vBL*niE1)` z*AopP$bDWtD2)gXUxYp35}0&1XAl(|3MCNz^()9>XHXd{`ft50RkJ{C)}+@hU)C=} zYGj`Cvgg))gifQQ1gao}AGM7$I|H9O`gd8APlcYHeJ)3ZrkB=4A6vfo%3UVBTr&Hb zT(x}zI+XCd z*)4HlFe3hiJgc~sdvQPPEEEGV-N5e0lEM%PH)CBi?n$SrJ{em?6bIshc7!q+8gd=f z`2YYIHmn~hxb&E(tHZKE>CPUiE+L<~9%i+m@)Bb?Q2pT$*w}x@Gpx`5HKvEO$+BZ~ zNs`*ifiW!E5Iq2z-mpsym+zL8+8w*rjkqF6gsJLN&R&lBk2=GN!T8FAf*`41Nxz?n zo>Y*OGR~{lR&W0$GGws_>%PCxqu=~=U$9o(lH~p>?nyn8P@Mj9(kxVTTO{E1;$3s_ z=4t!w`>5^2mlL_=75&Z2Wb2l@a@nPheLCBhB{JUIDE7sT-yzm1HQSjRFJEx$Smt&3 znR^$@*paS*7y?(ciB<*ton^`W=AERh`u2+XUW(NJfR$QpQ3!sH#40cXFK^AAJF*+; z!zhfI7J9W&@0M1Sn6ZH>9LxgY+KCrNuPGW6wnU;l?r}nIN3mI+17%TU+$qdHx3ZLp z(rh^h$d&4C2Z6bH`PB*Z%m%TSs1mJSH>$ZM)t@CspOUq#1D@B_Yp?t9>1uL%e%5i` zp!HemxA?7)`6NtqKn-XP)N0VO{HC3)Wh`mLtMm6eq(}t~k!^e2a?O6#|2k_gPLpf6 zD>xXT-bxzgd**Ht&o7&2&qf$ptIzmb%7Zbyk2$rNR84IT^kF&lT~X$oz2IsN*w+u z;mtx?($)l}e`;iCAGdsIQpyy|%EBVG))H=k@*0TrHzJ`Pc{&_+z<@s06f9ov>$mnb z^Pzw8{@H{pDmRECV0?lKXL{9P(14Jkd^dvGcZBTvyz@Q9;PoX{&tZu>j0YN;I??zx zF}9(E8@+4yNPaA5?eJdM{^F6>Ryk;5t$nfUU*Ijn<(uFDUaMQqw<(7bHs4_+XIGbc zk3H;{BfCzco+LVkZ1&_R^8f*gA}SU!W4KNR0_;xTB3$Uc2)!g}L$CZ0Q(v+pQ|P>p zvb``2F)sww=tvXMU=QrhwMv-N64l{X8lQW?1Gb}RmP7Ca?F)%&g@Kh-1}3JF_o<#h zIMA|9(uVDXLvE)e?4(gh%P0xsBtNJQSlK&*l^9U{eKgL5kaCM z((62*Jql2x*jsc8;|$%Wkaq}VRwC0f(jgM=T6M$~T6J2m-3H8T^IKym8)J_p;}nTp zeh>QoxBaWem6tX0cY(N(1BZ)C1355jV>#1Zzf+sGTO$%IFz1oy%~o^*0W#L$q9VDn z^ii7icP_SYD4iyod?RDge+}AoA%R~>W@FREzRKgqXvn2=`1etqNENZ;h!b}zieRqa z)=d)M%}u&l0+LEkv-)#SqS6~4Pu7IYZwH)sJ6bW}Dz)E$j4OO@NkVyr7(K!l*X1prGvmjb9ZTy&jLUDp;How@ZRIs@`Kau-z?wblj* z@-u@CMz2KtB?%D;#!=%QqLTQ*_9?qTwNbmvd?=+^XRd@HpJ^QbBOaY41|x#xXK{)7O^geJY9;-XM_Q7f^<}#`|IF#>x_1X z7u;a(Gkm#hgjC5ifyuv2E%Iy`BYU3Ltm~Gy=gwWpbf_^y1l^V2kJFkRGAv~N;<5_c zoeLEc4&Vohpzx0%4U*h}O2d@e*)`k-HwfV0$d-blGFfi$_CgYVhJ0n5v{gl?D zj?-}kO#0!aP@KS6)b!#;eLH<9 zdzqYuYeB9Yszt}la1L-!IRS?>zd1byI^+I;maKT1vzg^_Az9dFigsE5LetY?) zEk~p)`+0p(RZ&1(Qc(!IWNf>o=sLcKH?DB)6B2sPj~_18@3SRBF03qJ7;Ix=IVYe= zr|ih6Ccje5;OZ-s5Nb_`?b|xZ+}xbM-!51u5I5o(9ZQC)Zkb$JCj_5PLKg*G^HTFi z#;Bi)0U`V^oYr(wq8evM8m-OxcLq(p>4aiY*LaY45KCiI23XzsG*WUR+)k2y0|hC# zS8K;8>UDBvfjm`?IvR0_YZ-&@v847Zev#Tg`p=l}y`fr>=BP_Ei$2+n0VlsZqyRqJ z=WdWYULs7uu!nSy{cz0DlX&;si_I`sra`4GVi5I`{3oumsB6hg zjRg^8W2F0Ns*yU3=w@Lwy@I{8*y!l!D_TL=+^9vify1T~Pq#UZ zxE8BG&aIWHS&pUa6kW=86NIHG20&3w+vmjEj7~7)xCM-~)m&INNGY9P7MPKBHZ#_=#Kgp>{p$ohf#NBtFuBOmftUN3W~zo? zKIOu1Zwz=n|KKHFcUGT-HO5#$%XeR7R|Pv+2Az_W#SFc(eAx0AL-i*JpoKwViRv^w z)A{OVIYd!JGJPQQR4Vs)#*N+Hpvx*Ut zg96u)I8MJ~yy}669r1=<7!F$`Xvs5-voqQM!yqhI?ldrxgeaAR_;lCpC#QMgxavEX zU~2x))pF|a_1%nt8wgRggq`S)uyCPJ@j zcfWVg39oh&>%9h0wL6W2Pmvrguje!q+U)bA;KC`dpHU^jzkyBj*Zi8#uWxG9-6+W3 zgWJ$#bsVdv5xR>BZO>d+1%AaQ0#sDN(3#mI99z1Sat~1)sKr#WDK?xA&d0OTS65f2 zgCwpTlV2N==@V%bQyg{%(hsbu_(C6mjS1}e`RlV$GWw{iqbJ_l8=&VnTGaCs6B8*Ai0%E_Uam&lBrgtJUP#O z-2DhB82Ge~Yb?=b+qK>8NamFN@yyHu4Km-CI$nh=bm3msTJ(U!UJRk6t1Cx}hu59+ z2>R-{l%av=(}qdMY2&vP0cD4OKNA%axYyl8ixsl120$w=3twrXKwj75+%EhwUYoyw zR6t^m45^?D#N`53lb_owc6(t9`s~lMGF+8L!XZ3tqWY5Ro3*s|J~-fwmuHf{76>T*He?(e421Et~xn6eG^J!m%=%%`E&kzbd0$3?a8_o z2Kw9W@!ZvvB-wDhBq`lNmJ|9jP}|Kj{e-7O4NyAJ%j&Xd6q@HCuPkSbEc@4~EHWvtc2Fr$ejF2Gfe7l^I+2Wv@@?<9??5gkU;# z07txGsK?Ky-3SM%i|PfM$~-m7zDubvPVk%aIp#Y<9N87Rl!EJwJh#JuMU24p7<-mB zQNH7xx+Wp?=G(^)jNJF_kp>Rk97ST$>uQ+BaY`IN9bG?s38^vF8?*6pguaF#-)Vr* zJne)Br0;#JE-IyI;N6HRgJQ(zebIjZz(CUV@+s=y!`t&kwBZp7-)T5aj?~rW?U;e- zTQLfAo06)rmRTV>S19FkCcAF}(sRJRFcy1orvk@E;3jYPyvGaBO+Z01A?o3MzB!^m zC;-lV2;OuEB+hZDglv6LiS_ktyf=SE<;jjs#lo#WOr}T!Eo`O3C z*kmulFM5PMX@EdGMr5A#EJ>3K$ZOn&}7 zUu|tjN=X@Us*Su7v_gA*x@9-3D6S2hW)K$cOK0E=3nlYev;azyxFn@}o0*$`x}JHy z=$t%h>ls6=(Y0$=f4aY5Rup>uwThxkAFL!S>`(0ba>+lCP#zMM^Kr+jKtP1M`^7pF zc>_m-?-TED&&<+#&mrClP?OT|oM>}u58Vx&k5dhk<8GFrLnLqe0&O9Q5$Gge(&~y~ zyIGqi1)u*3aKy*^p$eCEn$A~h;}B4Cc0^)h#vr_U5^qa^-!_&LreuV{CaS9Pb&UI3 znFAIKac<9RKLY>7W=K_4`A6tW1UU4_U~N6*Mdei*Zn&N;<0i9SY%NZ+;+PIZEb7+! z@{(Th=EGv;Fq{@w04cZ0Sa42Hvmgh!!A|$*YkN;8H6_4B*T959oj5FHF15D-WyEFVCLOZnigpZ$cRlDos= zJt$0apzpseUtY?t{xhhL{hhhPugHU$<=}Q zrIQz%%Hn;#6o2Ba)Zd;OB79CxaIvX6r{a5pnhfLbgK71}iyFcI{Rwgfrdx9yWxT2Q zyDQGNZIix_hbuL45f3pKCiOfe$Iq*s;at!YZAiWhjEA+TUjCN)bqqG3m_~uYqTX1@ z{M$FeXw&V!@KaT9yhe;2>>U9d2r(Il$<%2PbWn`DRqa8pZ^vcb-`V3hLnpku$4JVa z1~>~3GL_w8Hso^J`QyrH*$}V`u{SPKhIf6T;PWXv1wlk)WOPj+CKm_B z)CFYjqYzQ#3V@i?%8(+zX&kzv!!Nhf0S;d%FJ}2v!k!xbI_gc2FKFb_deE89G!uw$ss*G)^%c;!I9Db5o{nrNZ!VjK64tS z=?M%XMAfiKu8NMP*S_2D3JYviZ48-9%v&n9;SSPrexq;KfPNOlj5m z>AmUOo?c4kdg1+OCia7jpGC42qynZSBN#OAoyAzee+{@C5~S1X1K|F)@dBrkGtDbg zXXWJ|RAHQN)SsH$+65!h)rottqhUvh3noYbj0P_21{$p}Uqyh18a_ z%Yv04EYlK&W`_rP;ahf=cAzF^`Wiifg)R>prS=m=U`lIPE!Dw(W=2)vGgh2}x zgh92I;G4j|S;G0fos;pBUfn*=TcKo&gI{>_r2XU7ILK=!qZ9*7g2=dPjCdGnh$&s4 zMi1{dT~-scN`vEI5BZdPG!u7JwZ_NHi%Lo|H+n(EhCtqef~y-F!p@ z=bGqg7K9l$=q4vo!Yvz5T~N%1{1f%4MN~2d4(<9rM*2ye_ss^@IN4tijY7;!Up7fS z0I^H|T9lLj5B1i@u}{5u=B~8|6N$p`eZJ96o_*FMx_PO1>3Hiq0>oiT2%eQ$K zGX2EhH?tjgv;#B~vZ8%q6~~^!2|VoM(~V9omVYqw{oY@w7u#No?vE>{T@5xxgh@=+ zF9(W!SOw1G(wu32*HlG#2hJnJYl|P&n6c2i_GV=Bi|KIr6MDhDs1@e9--*qdqG+MM z1!$xP|Gi*Jdx`dWb)g%iG=hGmGwb(Ah?f~nWj@&T_pa>wHfokPm5~^NPU6uKRyjZY zOzhDyV8XiQ5i~_QR&mzC{1;dKUB?`kWuPp_B1YxW+4k=f7+5T15 zGQ#o=M%+pM4Z{53r}*2tdOKQ^qPpS;1G+U zC>I>!bU1mBlb%(%s|KkE_NAoOQm>mR&!D$13XzU5o$M@bri;APri}c@mxl6$J`iE$ z^P=eVt2_v|;F+3>ZGSWSmW~{<)A=Yd63=Ul25wAfNh2^#fWg-MT<`||D>1P7M$4JG zd9NcaChE?pk(qYiLiL$`UJ6+zn1(P?!brR6;y+)%0}V17ewt+unPH0Jsm5~_B&B;r zMvlwenVQi8luyI?tsk|7lENDWtS|n=+K8#9S%L2?Dh{BtpG@%1}N}v16og)cH zyFZ*;{ZX4kuNQ{@ty55)GvzQE5)6kqFyU#&7}Ihu$u`SjCtHFK>q(|}*B{q5;=uef zX3}7R8{L_w_F&VNk4J7bW7GCQw9zlYm}@1Q%wgn4^&Ide!))v%=Og?jm$KG zTf*A4QWqJbE&tXXa}@_yh$RI=VsThf=aB?|fOL@nAFC;f6gIJz4`d~e5}oig6P4M& zi8#(SJwBQl8QJ~(a^%PHMt5|i5*$`F^7bn4@lc>%5jDV;lPq;ciN$d6!q`n+9-@Z* zwJ8n&Msg_N`|r`ZT+lqgt6DUf`0RN^Wf=l(giug!gcGmz?yrRh9yS{cfTrtyigW%c z&Wqc6og$aRU@5grB${R?E+GL7*UCD~-}@HOr`> zcMHD5TcScN!{(Bcr;!LVpYs@8ct25 zHilhDEfp3smKI(LQw6rGhh3kLdC&4s^2`THQ-ULayPF#rTlW@8a7Eijzm5MlMz^pU zKafNjudJ9xm)z}HS;>g+Ul#PfFL4Gnzh&nA_%r-y39=ip+#54oPt3gNytUuW$BAMU z`^x=o%2tyG43x@kFRHk~ADHYj!m6={{i*A%MsSwU)7@KD1mIT6GZKcfm8$9~IFj;9 z31>cit90dmFbpri^F>Yf9V{tPeISx-54ogzT( zri&y%0|@s{vaen>QlqfxeDf7OK+uHUTO`H!h%*KXff zJAbjxZ7@!s5yMhVXyWRbpRO1FJKYFdbD2uJo^k*Amsb_ZUFT%}Wyr&^vFMDw9LWjq z$-*f7Pd3Z+OnL+gw#bU<(5_YmRdpPn*qG9qPRzckUmu$oe(z#gUT%ffL&e~q8V#F+LRCwT|4di!4uM1qP^k+zi~{8!XB-Sxame9`?)Fgw{i+|Xs;IY z;`d3l|NF*Fv3#MKh1t~;ru9a?M8_%|jaeif<1VU3B>m?ENkf(Y_~#xW4)n;_SW-&b zW0eFBYG&u+WHk3WEgT%2{`YPmTIRNcTH*6Yp}vLxo#<(!e;DDtW4=mvlq$`eNvpO? zUaE<8@Ch+WxPXS5p`XA>J#1_l1>M=~@+*cm+ivT@PrfnTv;2H71e)hJDFk1h{MP#lnA=)qWF#)q-r_kR7|| zahKS+v3R4;rT@q6(wLCjHf!RJiiSq=qxtCbcsWS6_p#xN%e(x}#uzw;_CXz}9S91R zK9rqvm8A;Fx>pZYKlf?qce^u;K`&(lmB#QVw zzLS=dbIt;ARx6Vhuo}tS@zB#2c(Ln=h=tsU-jTZ!5rKStDsP|WsOK!QUO17>CrgAE zdi30m={1fyJ=__4abPEuUz#%0;q56nXrbtlExJ=ySKXHz6+$L~T?Q%SP2O`j05u{F z7qZJ~Y=9n(kN#YY7^U@@zWd%y01BoVB6iGC?-*-Y(i+pCtY}N)x%JY(v%2g;M z$`hdB;LD~Zis;Hztl&PYi>bFKd@cjAQh0pOD=UJq81xKMGv}fHW2`&L z>FH&L_AV||J3BiPm*oMzXAJXCPab)eMjc(B2)YO!gK+nK{y@}TJ78SI6 zu)nW#_wyTlY<+!wK>j8tg8y`h0Rh1(A1`lNgdjP&@bU36P746=79zXD2Z*w6XlOV} z%z-)lmy>4gH&jrlr=Xxf`Q?j_qoX5$vB$;-5%dG!fT$q?jbJSoLV36^argA3^aX2e zaVWU{@s4o^byEv)sqd9L5UH-CrA7M@aRO>V7cHz0wzkc6Eo-ji82{ zheu0PMOIeU{`2wP>G}D{(h{K;0-9}52SD#88Xmt_4+f~#-R5>F0&F7>I>^e+g@N28 zU!3uy`WcJ%h7Uc&;0#YppqC{dyYqYAp^oBx z3)~ypZX|~#gBe<1C*5)IHBzbZ-= zw6RGlE~bWy-`zE(hR(;r@r#A@A*XynPXFN>uR2Tw zU7vFgW4yn1gAJjWL5B45`GfJgk0*>z2Um z?5sW7D@9b%l9o-4NGS?v%N2n0kAJpuQ+#}Kl77j@&CQ~lLaA5V{_6z4qpHPW*89

5Nv8dy}h(yegXb-2%3cQt1+8kmC*VZCF$zQ9Wk%w41>3d0@|njgn&_|iQHQZV4?5s zd!|iga4=j(nf<{`faGRi*!lL!53J8VKlVf5;sCIi5&a*+RZ&HSETdG?yus-jlqA0{ z@xWzC*~iWKoQJOj3BnRC2+$V>;sQl*p`;;*AYqVlff$tvbY3bZH1u-$@0{M+=CwcS z_g_3+-#0Lv{`}z^CpLfgnSA+Cyd?F2c#=u8)UI_$^;^4!PfE}ic5hEN)$Q381s6UP zGT-6D-{H)6WX;5}PCfD-i#Go5LbH8M4lCvEleM?<_2H1s%FQpahW1_7Yo?;1yal%IwDOq&g2voL(fn#FrFROc^%^H zY;B)jr4IVunc935N>Z-9+@TL4ADMV|db%Jq6yakb!NzXx?q$!>K&2Ox%%&e__opsPL zF)=xu{cwjsjPKkq&T>qyQz<$cnx(z{-)A%@7A~&hkGyt!cNb#IfcEq9@-pjS6sL<9 z_@}jXs;4I)B{j9NrRBr7bX7GqfBc>fm&JP}lb8^hNOMu5$^N+Uz)ruvmuzos+$Y>y zEJAJfczb$&WNIoBQqtdf=45D|0%T{;=G{F<-fjZS!M|x^udh9VC;a&Z1jejHlovb0TE-ru+zxLm3wctG#jl> zpAy@n$G^|fb^;|i&KFL(P7|$~@9zQ!FZr-HG9fw#e_prS?+jMnO(zMspKfwaHe#(m z`c;P)osVv!VciGUWp4ZvN?t<;*Q>^j=um`gfqG0OGDTQiyYr|lgiuJ{hsGq|cwX27%BX)s zKzR}U1xeR7T%Vi_y76*F^5de8NN|whrru?8m{L)^jfK+XMEV|zOmGWKI~VVzD8bD? z{;W;>X%-vGQ85-Fb1*tt)3HfZHfzuhr%N3Ecjjvzx9I#O`_P}^G7&ZM3OBY-tOgYc zJ`fAVGgYC4%2VvcN9g*Y*WKydEO1CS89NqESaA|~ zh|v>pEpx3JiT1#CAJAvb8uB$SmthP^HW@CoM=xx+3QI&J3P(AvK!-xv3fmW6f~ipj zdQ86KIZv-0R$Q5Ewj4yqZv5pQ?Fy(O5lKz8p@OH_gT{5h0uknu^11R;(UKWVp}`$i zLpxXxLhKFO=0ci4L1$I)woOzAQupb-=aXh%5ZWE$THCvW9RpEx`J9zFQsO%lK5V!V z4>7X;CQ6a~&y_Q*z?TYIN%1bn3PO9kv_R< zSyWk4l;#kFYCM=w1w0NDU2?=Ft5Rm0PIhst{i3CDaN3}FL8MScw$fpK;o@Vx`0Uf! zX-QJ=up_ZR2%kgmJ=8-S<$2@QGdHvEQ*N4@$*Jjuq083;(nS*gP69AkH7Pda_MomB~Ktcv`w+$Oncx%1@Bva~yI@2ZLx~>JT9~|# zKI4I5y5G+E+8-pj;gf|L)o(yUqx5QnPQfF<5aRakaN?0&N`(?K7$E1T9)^}ycOFYB zFhZp0d;L?RQY#)H+X9;p7#q*zrlEiMXu%@AC}w}*to@05Xwc?XcXaC^NNxYi_Woi+ zaXopY^rH$bx%{9-zf<`WK!1v4Q;Qu!&e_c;I6iUNK)9Uutf39#v;M}J2Pjn`fkh}c z_VmVdH|7VuaKug*>jE{!C4)M2=<9*WbrzGdH>dG@;jAtqz^T0{Od_ngsN`d

ke^ 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 Uz4){1WPd5mJG!V+6|0c{117@(>Hq)$ diff --git a/assets/filter.png b/assets/filter.png index cca3a3644664d5e5871f8e33594dd7c1c73aa092..1643d4b588086f86400004c0b7ae60812717ae56 100644 GIT binary patch literal 108510 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 X#*w*af2Ah!0UvWy>#HTkx1atGIH9^c literal 42417 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

B^y9dUU5UxWahk~a4 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

x@6U@|Tbx-DZf7@L@FKE4N+3~k5W;P= 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®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 z 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 literal 74863 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�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 diff --git a/assets/todo-details.png b/assets/todo-details.png index 59fd22bab9cd013b7412e19ab1a42119cd4af761..166d28ee226d4a224f1190c92a447e6313362e7b 100644 GIT binary patch literal 378109 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

smLaE;eTZRh!JyIlAA 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�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 literal 25671 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 z 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 aKYOs_fZavYIqTxn?>Dq> From ab2de5b6d9efdca4e9c36c2359a86d2900d3f3a4 Mon Sep 17 00:00:00 2001 From: Brian Egan Date: Sun, 7 Sep 2025 22:47:26 +0100 Subject: [PATCH 87/89] Update images and index.html --- README.md | 2 +- assets/add-todo.png | Bin 60707 -> 31887 bytes assets/edit-todo.png | Bin 60554 -> 31931 bytes assets/favicon-16x16.png | Bin 455 -> 344 bytes assets/favicon-32x32.png | Bin 922 -> 643 bytes assets/filter.png | Bin 108510 -> 66198 bytes assets/mark-all.png | Bin 113177 -> 68951 bytes assets/screenshot.png | Bin 433607 -> 49404 bytes assets/stats.png | Bin 67717 -> 36917 bytes assets/todo-details.png | Bin 378109 -> 34454 bytes assets/todo-list.png | Bin 110035 -> 67032 bytes index.html | 404 ++++++++++++++++++--------------------- vanilla/lib/main.dart | 2 +- 13 files changed, 187 insertions(+), 221 deletions(-) diff --git a/README.md b/README.md index 1ca3c0ee..646740c2 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ ensure the focus is kept on the aims described above, the app uses a simple UI. - [Vanilla Lifting State Up Example](vanilla) ([Web Demo](https://fas-vanilla.netlify.app)) - Uses the tools Flutter provides out of the box to manage app state. - [InheritedWidget Example](inherited_widget) ([Web Demo](https://fas-inherited-widget.netlify.app)) - Uses an InheritedWidget to pass app state down the widget hierarchy. -- [Change Notifier + Provider Example](change_notifier_provider) ([Web Demo](https://fas-change-notifier-provider.netlify.app/)) - Uses the [ChangeNotifier](https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package now recommended by the Flutter team. +- [Change Notifier + Provider Example](change_notifier_provider) ([Web Demo](https://fas-change-notifier-provider.netlify.app)) - Uses the [ChangeNotifier](https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package now recommended by the Flutter team. - [Freezed + Provider + Value Notifier](freezed_provider_value_notifier) ([Web Demo](https://fas-freezed-provider-value-notifier.netlify.app)) - Uses the [ValueNotifier](https://api.flutter.dev/flutter/foundation/ValueNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package. - [BLoC Example](bloc_flutter) ([Web Demo](https://fas-bloc-flutter.netlify.app/)) - An implementation of the original [BLoC pattern](https://www.youtube.com/watch?v=PLHln7wHgPE&list=PLOU2XLYxmsIIJr3vjxggY7yGcGO7i9BK5&index=13) described by Paolo Soares at DartConf 2018, which uses Sinks for Inputs and Streams for Outputs - [Bloc Library Example](bloc_library) ([Web Demo](https://fas-bloc-library.netlify.app)) - Uses the [bloc](https://pub.dartlang.org/packages/bloc) and [flutter_bloc](https://pub.dartlang.org/packages/flutter_bloc) libraries to manage app state and update Widgets. diff --git a/assets/add-todo.png b/assets/add-todo.png index 80aa6c8a4153bcba72cbd1590997fc93042a769e..2b2d365f7f8c002ebdc77c5827c7fdab179452e7 100644 GIT binary patch literal 31887 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%0Ar`&HQZEbbm75fx9RPw*ge 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%0DJGNNZZpd}RiGe? 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 diff --git a/assets/edit-todo.png b/assets/edit-todo.png index 0054e0d441ff709e87291d203c56332e74a9c579..44851a58a997408163ba58aa0f755041f40efaec 100644 GIT binary patch literal 31931 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 Y0TViVk!M{juK)l507*qoM6N<$f+m2&bpQYW diff --git a/assets/favicon-32x32.png b/assets/favicon-32x32.png index cad7bfaf547211b546ce65864edf6463c8c0bf1d..af89dc703f1bad5990d9ef23ce6f2841534154f4 100644 GIT binary patch delta 619 zcmV-x0+jul2ZIHWBYy%)Nkl96VKtvc(Sb4T6n`YP%>zf1^mZ&S-@nHK4FnilDpjF`YHwa2T-06xq!(c+xSJg#fvQ_*rgzU1qu@)7m(Qm zqDLZ62#zVppMQY7ghX1vU=N5Ljyxr}q#(ZsG81CCfWZlnP?Bc`_Y~w;Kx#si3m9Ah zDGhmk@I*m=3M3{(wSdgM!pCkl$Hv|$$oGM`l1{yVHf{kYTe_XgUwFiI9)7SY--4A- zbg~jiW`!ly#?EJL#7s`Lcng<1|Bx$Oe8d$mIk@(N_kWSemxYWCWHq*li-cT48##-$ zo+CKj{PpfVhaA`eaF=)&o_tyZ*H=NRv5j|^nDMtjhkl%8{yIZ$50hH=LzNg--}Mc0 z52H^sN(`CGITvn_gpa~}U+dmmQ{Hvx@87aqJ^G}@BG0zNa}0?E?7wQ=f7`aPiy`+> zik`Y7aAfG`SU3Vda6L36f28Q?8*&MmPvtM#tCBxc`1oyoG9}JD5RlFR4xE;p6pWNS_fV9(U{6YZ$RFCsi??P2NH72Z002ovPDHLk FV1nj6AZP#p delta 900 zcmV-~1AF{~1)2wtBYyx1a7bBm000ie000ie0hKEb8vpP;`g5dc9il;xkh#v@k z9BL_8N>W9o#imq2ii(Psy4Dtgn2>an+}(~pHik>?F1KfrbASHrJMYZ%>^rkFD|k=M zc+o3SYOi=7@J7?}DL4jfEV@9WY3T~i0-pjDRlqQ&XWRq~(^>)i3{;GiH!cE(X?>2f+x2|8 zQbuCyf(I{*iGRqKwk-|Q+Kls^``nC?z?qlHuIACg8=v>d?tl8e1ERRAtPL~?8HuTZ zzz&bcvnR2=$u1Obn7v+52Y_!}4(SKJh=;UG>886=snkC2zLtWP!+2r&K%FW8-VLmZ zhqOzOS*mTeQpY`!7OyL~Y3V2~1M6JEUjfVFA+7CgAb;E2Zd9oAG7>Az1FryDft4=d z{{oBSA?Ra0!13%#Vk(d&4_MTJNPmtBk~k93+NmRpT73 zbuQt50t@3I?Mb%Id>bwd+>nu2&llXfuq@=%C=E`y;M&8h}yb3gn*vT z*CZ2(d~=>gu=Zj|>vdx)g%n#dBoh75@gG%_0?e8{2Pp+0P)gC$)k!kZpKHFuLWrh# zP|KN+A&~lZlPwTifFpy^mnPLUHO!bh4JUBMU(cKpB>2g^v@|tTV&GYyP)>>853sei(tmiTlm*`-L;eZ92TsUY)z#6- zQ>QgMki5ffy}bM@&Hus4b3susJVOAW;kU<9_xYkih_ov@YXy=BvA*@=DHq-aoKpax zp?&><)JybX5<}Ym3L4w$tFDd)o>KrI{OcoGrj-iw~TyKW2q_)9Li`*&bG a=6(a6MFr}qlB<3I00004;PD)(O9dtbJhYaPw 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

0sG<73E#su8tt{QZn@EK5!keX(NbVu~- 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 literal 108510 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 X#*w*af2Ah!0UvWy>#HTkx1atGIH9^c diff --git a/assets/mark-all.png b/assets/mark-all.png index 000fe41604a7d6e3792495261842d139c878fa17..15ec9dcc930a333b58b5c986418c4975a625546b 100644 GIT binary patch literal 68951 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 ?SeWH-sljq zCIP;2izQ&hc4U}`_;rm>46WCw$*XR=yTZh3=JmXudy^t~Tdhu;J%itLl!z5P=IPd` z)JZF3F#YPAB16C*`HOB ztaz)CaM!{*;jEi%P%$+Z)bl}=aHEb@$Zb{;+C_Yvcb#Qaz20K8@_u?2Wt?CVCfB$( zxte4VZ8E&_aH)Nj+k$OoH0=yAqN7qe5CoCsuik~#H2Xq{q&wVyNe^1Z&C`GptTCWw zM~o=HviW?HvqJZ3k!S~^adEK0U5RNtheUB5!&+rl7snkhqIw0`-xr-yWU-ik6*5qw z_E#QB@&dX@Rmu}kG>LZE{$yYSa=n-3hvv$5?^;n1C+X{y0Eun#)5&_CTA$OfE%BcB zqN#s*i4?i&d{LUvdRvu5_m|E;WZI`VH*F6i(uU!}Ha%F_QfU=m6{DMVmxp6hN}owI zRf2iP${|cJX)VfQ3S;;JR`q-YMGz9Q#?-^1JVA9V2bl&j`!)Jv25V!gQqTHc?>vMm z7h7gO>`f*M46t9rKti5>>tTRSRsMoTrKI0bC|2SlyD>hJY62_F3d~t6=c}+hyc{Xc zDKWwxKnja>*R0oMb|0(_617n;LSIk-!4K4a>_uW!a(b6OSSwm}@%mbDWPM;z z_qQY#tsr!;jgV7I{an%(X`b7jNO%wJ+}|dPGF#YWT;a}ix^sOYiA|hzs4{C5+XbWx zj|6dR`(r$B^9py*EC;dgBX>aIh!#d53dfw$NL@)TH#*TlYj;a@HpKAZb00#q8njt)q!MWQPKri8ux2%AkhiQyzSzFa=~j|iWHd=5 zD&{2&K?={*Mk+L~7YdQ$$7%YheYBWP_+3Avn>IwBp!fA!0AtHbc49vVwc-w=C1RZmA#0<*&8r zV2Y?<*}Fcl`Czt4VH}5*LLtmz{1|@0;NoyW)*P!(^@57on6@TYyFN^g)u#T@8BtRd z-;MB26}!e|T`i=;@S(u0*l!!bjR@mI5d(@3eEerP*-9LkENL(~ED;~HjYD@gO75~! zqhPt?nS0SHw;gl$iK?l?7sKjKJsK|d<0 zf+%3@q9N@YTuiTvCyR3$SfBi?^v$<;V~J3qs#mQ+$&O*@@vSd6BGV%YiiB#0B~SIE zh2b3>F+*kVrNi(0tHST(`THx>PlE3F$5AGX~Q??i-rf28?7{z!AbzkFxCU#jsjy(G*qPSWV=;qs4H={FqrxKuF8 zHR@A|LKxPEGztvd31W-NlIj8FOd?YzZceh?4gPFJphjvlvr#i%tC}W(=k(hGw!6n{ zb_}@fQX2@yJ|w*v{k3y6JQ70qYjxyf7mA=22nGZVhVc~?>l_X@)L0#t666JOifp!E z4ZcU*Vu__J{+aqNn1CEwVSAv&pRWH3AF7N%7rP28n1{|1f9sL=Q$PqBs5@|~d#`Ch z^zGYtX6e45h#2^n4nZ=}VT_(i1%h>o3;kv%%c}WknmpI<<93<0O!en}!fv5*`vzG+ zAqHo)f%>kcZ4}HhHrbrovmZzgYQ<`ZPdKHqBfU4oM`Nz;oV<{_Ig<}joZra ztxXB7_zwpGE%{#7s2hpG{HZ^?C>E(k3Le{I7Hd~arU6)e@Uq+}#i`sJhPqB+!AbAv zLYI0C`6L@Zaq(=yXRzI`GxvPqfWjg_s4O0^aiw1;tbBu$O%|#(YDBY*hS+P$voF>& z9PMT!Q&jI4=DcjESPI*(bdX1;8E~~u!p^+VTHQ5i(?j(cTg?~rq8+^&4rT+XyGBj^ z+DOSv94~vCNEDhJ_kRH&C>yFom7^)p;}8*ttmh)s(*32%Bbnk4joO{uk0PDC`=ugW z8XFmlwb@Kr!Sb=KWELO#85xxTT8qjfW8~a2R9(=ILHRtRY^FSn*=r|g@7Qw@WqkU)jym#{|ss=6B zB%%vMvC?H~O?ETRC6k4ZDf{W8Km8q~ZfdGc0V|3J7pmV?n*sTj?H9@zJJj1v)(L6; z+ZbJr;-{bwv7!t=3HHp2f5cuJ)X>!Xu*MpJHls(9p};h8bR0W`TsSGR2}8)-eUn6E z*b7^Y;sFJNm^q02L4cX^a(S1GUqVz^*XLQPW-Vnr0hm(SA z{6ymgIr`imk*^*o$GqW)hq8XT6!7%TTfKSZP<}xGp6$udTW-bE#ItAUW;c&dI0~`| z?~G#x9mctuMALWw%zJJoRfTQl!cl%11fiFuiW|7v=e31!&V<^a7atH^SHWo${SbH! z&Yh%~5WC9M;{D@Qw9)I-73FlatptOMB<7_yRPA=l#nOyy!K%n0YR*s#aUtJtM|#T) z`6CQk@6FY-y^lcnx%f*)B)k%jhUE<%>-M{@7gC;+qo(RDh|%~`h3CB0#2wkNKby;J zhlXswcJq5)#wqR;;gO`PqLa6P14?1+x)<%hSA;L)*r%$_0zh8^4QcX?X5L6 z$+!)M(@bytv^Nful7^FxDl#;d{R|?obygvQ)>pM)E$@&ah3v2Eg|CZCh!lohfc*aG z&8Dy690W+M3LxS%*sVigD^`Cue-=y6KamtyvB;O~i+F?D}rYH=NhZMAL9ZT;d(c0i4e6>Fq~#{-#QB?xd-ZI6FKaR!`Wv@D*k@v3+{6IqhM1R9{J-4f5Hrg7Y?Zyli^M-c2s zDA*v)W+p~FCkjFOT+2w=Cw-R4;0MvmS?5bH2T_y0aP53tfuI><)p|eAD7H0E93QmyQccQTPzyb016T!?51T-;ZPtXBUCjqp%kZ4cY8&xKGRS1 zo5Zb@w5mm!hhb6Ek&2wi#~-uLb1P~`G}W~26BU+J<+X7{@Uu9i|6WHum{&J)cOF{i zvHz*;s}r6UVQ!ucD>B8!4!UDl*}<-wrlAf3^bOe$JVjJ#3B|&&7w{jmj~;AW&ZmKO z8k_!fzovy#!4|5v-C?{4Ey-G?LAgP3F9<`*`oyl9)0PEbl)L)xZrlv#CYg_G!DTJg z@VPOe)TS!XF|9U5>!%Cm6#|)~(D9UFg15{HYrL7QA&lQXjqkc7?{@NWW9|2%GkfN^ zu%gQb3FAre(8m$R#~!vZ_6!bd zq*cW1lmpJ=-rBQGTJ_87MMn9vLS!f(8vgbi1TlYX)&~BxLzMo$FD*`BShzI9 z>%+zo2Ra=`$1ILr_lB@K>P=-BLOzBvGjjl$l&A$LrSLINGX%O|wN)Seb=zp5uCRd< zM)~A)?^AQJ&R*0=pk>hA#W9O?+0-0<9XU>%c>8F0snU#R5IUmkLLY@zVflvYLu(ps z)C$3yj|J}~{;vB^CMa}cOuq!@kzH5Jm{bYg7}EJ2o&lAv&#;S$d_duTkbc(hJreA} z_|qS?WsR1NPjN0r=W9$FlHjp<-h~}(DNto6?$OZao_7zGE2>1@UW@T3mKqEehLXgk z(@6d(cpqV^1IAGm;|`cAWF9sSlJ5w>*=n!WgbRNK>!VIJCHq7rOSL~RLO?5UXLA9y zD_Y0ptDppm44F;8e1}n+9*DPZX)^o!Yf6AHE+=|ZS&!d^q?#Q6sA}Y%$x=J0<1076 zUj@>vKf2k9F;H)4tPTWOQZWcgaUsM&I1yv^+_6rXR-P z;W#(UHxZeyOXtdU%pv`{af~Y2ZMY(8sC4!$Y?O*>;f}}DRY@#Y2TQ6)zv*53dcW&4 zN__v+jMiYgv{UPybNd5$$1_!)SU5$BuC6%F&t#lVvBdMup9%2*2BJh~y%&frUkjs1 z0Dkl+pfm7cohALOtlZ-GG>|CPNPG(V-${U(Stfn#e0lZ1 z-G3r$Tz2DE$)<^>e^D?Mku$kP7BOzC;NOUtJ zp*i#qN5!(?e;JJOKG!Sw&(vOSjelrXtWl>Q%W8H(95J-qlv@iGa;8r;rB_JL^g6Fb zrGBXeml{vyOT1G=x;t9&1g`xN%;MBfV7fXSN)w5WwqnOK(_+<{{OE{eCKLHYW;^Gf z?e%)xws)x~6m>($0S8$gL}`{NAvgr}Og^^JLd+Yxd~!x9@nMXsxLyv=_oB<$JfV=M z3ORq3g&*eaw5>i(3$fK)Q}@dZTlX3!Pw=RH$Ql)n?Pb-*9loyI1AVe|K@tqM*N2HQ zd(mS0w;M%K+u!xmLMgvn2Uw~MS#wL3(A`dMML`J4wYh*P313o~7Vmko75N;oSM7Qn zcQCU~O}_PPSyA&rhmV)XeB^01gWTspeA&=Ppo*-ghyQfx3j{JpTmu zZWt67tM?+_8=6)X@Yt=G!8-zQ8#WVr@hg(mL#u$@&}f;1qPC)$rc{ai#=jozA(&%# z6Jk7;qIdH^hJAyNGvJTJyx!*v=!)7A-R8kP0zKIhm(HWBZxlmNA?Oo|(=ON= zEOI}e`tFn|#b`v__c6b2Jjz_Mokp#`hVn4F-G`v!7G&^*7=h1a!Kzt(BOOU@=Kp+w z&7)p<@ANC>!yTL-Gs&((Bl+lE8YueIoIcI#XeLB>H_MEY21KIEiV>LCxP zUKd}632TnxL-zJP8`fB;xjzm&8vV|#@77A=(8)HzY@T*F?~P0rZQ<^2FzcXMEnut1 z^`}J30P;y8tD#(G|B*{WzYEOiSy6Y5kjuu(p7)lXS*n5DoC3}}jTSnU`nFgdFWFv~ zXYVgZwpWbWTkh8TocMTHephdUzmk@wK?HV{A177-G;l33GHI~e-Q_-Nl}uZs2HW&QJXFq?ublhVj-$fDgZ| zmB%PR3H-(F>-*#yqyvG|)mCk9W}_m!J*y4sm6dg%{WW z2-?>0sdSIu5p*{mokwY4Xo8ohUuzny*Jj#GEMn5u{HOSI(EUQGSYm5984SR59IwN} zAB!uitiOuopUOvj=)aBy@ltU48F^2^EuL}}*roj~QV14xHNo02^3t1eVExW=Ttpod zWk!aI8b_h8+*6|nz2`SMr_=Ok3;;6vkhH>z>p4!_Y)3tQUwOCu1qoV;`W>RY?> z<_Q_%H~T_z)RwTbwzry5h9MDX5UZuX@)Rt&2&D- zEhJf_7ZlqXT$$b8u79lfpx1JK={*Z8TXT zT$(L8+ko@)!qAec=A8NFXY!hKuVxF7poF&2%y*syJoV4&6wI1!hiFpg>eo31-EHsW z40&u>ZLsdW9+mZY87+rP>mrkWp==C-r9%#hc&sX+8S#Hvq{ZZeL zrD}f@__U4Q-1)NNQ6E$CW{*eR%Ck+(F{T6cmETAM`0cK*A9V(XU$VPN-#1ag375tg z&`Y)?a&TI*X^=_I31G0gudphX?Qt>%q@oca&bn^+TP$H0eH|WH1(o?6niaF!HBJwF zi}(by8I>x49wmY$*?U*WZ<~143>hIO;329=rQ<%{=fleT%;#HLm%qyk)vjq>1gAyh z1EvphSve799zBI}l`9PF`l=x};X5lI&aqCC8kljB_-DSKy%`0@Qa|YkwYOo8-jbH?|*<(h2P#{E$;8XXuhyT2IYA0C5V6~0Oh8q0WNm(K2zP!e!WAt*)B zDvWVH3u(4_61*6Ed2Cu}qt!I(Wz5+$BXpeK-v>Zk!kyeFa$7#THx2v3CS`LKCduCo z2|lKZrA~oC3p8Dl3&GP!t<#q2!r0I$4k5p!^vnom{dpqA=WJDhRGOzC0R^G*pFwG@ zeDiKS%j5p{;j&Z(ihJi4t8S1OZ`)6|g|g6=f(Vs4x5>yJvL{}9sqCI`;-r)t2l9&#eH5J8~02Ifoy{8@Sy z`?E`QR0apyx<>mscxUn1v=f^VVuvg>x-uiA&NIDshC&HMqHpM_Li*sjPoK z3X^*`JwKBFF1wEN2=P~VY2wCe?bfBS?Fpeqq57wgd9G1z?8FYAS#0;@Q4+ooEmgBMjwz;$om?v)Q{Po9L9%2X&srK#64 zbO0;K)fV(FwfCM~Ul#eNzhB=A|dy^3O?eUaY=_m+`jZ*vT1=sVr;{(+_>uxbPVR>mJ@Gks zqqxv70{nIh@n>+OaaZAe^e!zHbs8yP)y;RwW`@?Si|se@?&>NxqU{F6AI!k8p$2`< zD;`TFizX!!M>w(__V-eYxUkSZqQtOR61~>51jCv=pj_Qw9I&HcE0K<-r7-#r<3VOR zccOcr%S+}27D=Sxx27xXF8;iInP9lW^n98vgpr!Syftz`k6Gbu91yPbOITg&{2ean z?z9h82kR#?bkmRe`^iKq>MJYKJ*nUAG-z?yyiK!L7&5-{@^*h9$9~f*&o`dph;fH zsFE`2lc#4gpktk~m0 z?)1pRm{MqxE$Yk|9y1>TJaD>_>0ItJct}!kwD22oG48sZ=jnIF>?;dLhJG-W=OUxH z9j~qga@&S%#?iQih0ob8qg;`xV_A={z170HfVIfbxw#io z(@KMEu)e%jSQ#~lIbA;M$P?63H4~*s6cypL1FFu(z*0zE($2T8{7@?M;!7R{X;A-I zBi_QJ$)cmhV-a~)9gOJ0@3VlkhjTCjgDb$$5KBU9G8*|1Ej8Iz;g~+Ddw~TeD%{e2 zO|7n&8Sls&{UW7RR5Ia8LDWs}ufa)zNQ_e(a8!_&+(G0P=jnx4cwd~Q^AL`E=Yyne z_QRQBuKORseOz8MZweo)O)3;e<+p-hQ_eQyXuU|uunXF#B3`>f6co6K{c+} zIdo7%2W&2b0`SNDDB#xE@fHA#fQgV=^(=-VlI|znqFr5m1CB^4q!{VLxd_l{ zAxMwv=#SzEu$I^-UUy}@*hdZ&DpGzF$tS}!`!3Np{0LOF2bgdu>S1t>RsK)AlxCmR zXf3*8Rk445Aa@t?C%R6@B%OJXD`H3`EaN&as^T%}A$oHA{`RITv-V@8xZSII##L95 z6|%o)h5J;;c_C_UbWnZv!$vfx*k~`rQ;Bt>WL9M);RDcSgMdpa^RAR%yZF+Ex(;9ZN8s*MVYh&qSV8W>ETQdvjnQA#>g~GSQ)Z)iqCjdQ#?q>hNnS` z>Su1e>9fgo064Z6jS91OoKS!Onpkxi3Wou31aETpc;Me_PQM7J<)r)8B8_6 z4A|T^?7$*Lxg~RVZK@mj2(@K{oCXG`q0YZ?p2VsL?=+0DS5L`uRjRqZtdERIN=P#3 zD}>e7y<4y-Y^+#Tg$y;eg48+Yusjn$y@f#H{Z?~GP2-xT3ZL&z*=(8~D7vzM-;Z^SHN|xl`GnZTnfY-a6oTOYi@7t}_fE&vk2kvbk9{lMlC% z^|pQLD;vHghI?l%ykEh~i~{MFReb_>yfdV2-fCttM*9X_7TxJ=ME4f!6^MHNbsSo5w^ z4=qXq<RtqhXo9vxD0YDa=GE#{!TFzLmwn8(53A@WkRjU##Xfj98IgvAnLLAi1kjaU4d!w$R{Bc$XR6PbpY+h~|?ECf#qRd3a0i?r8tY(33ZX)HaeY49^@)HjRnfZcT*bB)5b z7ZFY6#HI;6O^g>d9H5kdmf7^70}H9()R;e)msQVv#36v*W0Qf1q!)9mv$*EQlaX+8 zVxOmF=y(}}(W|GCpyBc=MXa+yEpn_TAmrTE>;1j+RG;nE%C-P+B)O zP8gBC?NwZTZ)4>)hzCy=0VYf$L!f;KB+yW$B-8r-kfCr!N8F8US*+z|i^>5W>e!&S zHiy!7P7BDWJK>e7*a+Au{ctvif?f+Ie~AQ4itPklbJ@Uzl95vG`JVm8g#)mkSU4Nh zt6B~UECWTUb7ssZMxOJ9(%DaQptZ)Y3f3f{F} zW<*LxZBU0h;XavBeD_23egVdG#GM8Lhis!Gh9-#`A4g#eb;%H?L$UW*RF;NUZQ&Om zYu%aJ8sP9y_;BfXc=J0&J)$9}MrVo|AT=G`dwc|(@d+vs7Fd{TGT~`%Ok@I&m~2pq zv^BgN{Z^)YoF$kc6HS+OUk0)N;WXq^*$hKSVYg53Lw{?RFjzLS2G9T}qC23?a#>Da zi$1I_yL2XXfov_|15a!7$)TW0PrdsX@^G)m(>^CRd>lu6c_T+0>Z4D}yi#y^e%VtV zTyW6Gmp}yQW;$vyQH%?fr%{P$Kq;hXj3)V;tRH&5*bb=L1%weTn}Dq$!CQB5D$b+h ze%G=z=B)>cU)vioS@)&$u7t$|$KWKrV_zs`b(y)!uTVt9Di@x zcvMP$^5WHFa*QL|R%Tqb_ifjuYgKkEV@?)i6oXb&F>tL{CdR${SiP|M9n84q{?e9| zyAmQN66kWD9Q#>R2iE&fo`s?Hen(iTCUiT|r|7&8p_k~&wfhB!P z0W%>5c(Tq|#i?8Gfg~<7q4Xsyu_Eq3xuR!Un^i`Sw*d&Q_id|rAsRiAh_oxs1R+lQ zTld)Jubh-nd?^$5BhItPMa)}8FFR^!Q*WxVI=eC%1j}`t5epI!Pdzt?7;6Z6gb-LvtB!6#Q z)K9A6M5#rJ!=70CWuN!(kMaJ3ZQZ|b9DjZI7!eF>F-I=|R&N4a=-ge68HG9a%)QP^3 zE`h7jDA`n8`h;SS|5L_}*K4yK31Pl(o@>RGc4C@xHrT@uJL~-WDaGITv1No#%vIXq zvuH>E(3@0;tV#OJ!jwm(ZP9awj<~xnOtEIrkQT8b*H)2_Nk4$pFhF#6+lnL+_n%*a z#D}5)ooe633_+5yw=WswR`#`dYMQ?;Sb`mic6zrCQd+V#V;hDo*9|w#)CR#UtO}dg zhA_GLYW1SjaDnzX~K(m6!|Q`?$r)K3@evmA>g)`ykr^Z4dzW<)vL8hp-e zKP2m<(~-LF6*cY^r(??wSC zh4y;PFi^zifyk(9+NaoBpAcc1@Y_n9TzbfN%d&h7hv85^US`RA(K4`{~ zR_$O88suAYxcjEwbDPPIZuT|P)bl&x41sDSi1{M+_QCSI&!O?j8=}y7A&CEW>KZQf zh!?Oh+rpZs=EZqRpy=f_87CgO1(CjEG!OEA9;bNh7QdaX7dtwwWt%T@_gNi9oZa-d zp)oWIll(a9Q|p{FZu|Yw*dZS&fz?p9KR4a8#Phy;%eAGGL!d>KVPwfkcsNjMwA>Pm zW-j*mRZ-xz7jgqu691K0J#wkeUHIS`uAA1Tlr0t z%=8Ec*vaiP9ZB^>AYT|tPF@o4Bm!ejF_hJueub97GvmDdkb4XX@!F|9RBu_h$O#4t|sGDX=6u$$v#!5a+ z=Y&c}jI1&0*?_E}37T@DBK0_W97IMf$oY@4{lkf?-T1U-CI(y}J!)#~#$nXumcJUS zvRKq2%%TTm(h+p$q(eW~zuo1ahp+Jj?BO9(EeQX|JI4X_mLnFOMQwPn8+{Nn;JwuG zyg|pZ_s2{|()Cd{zt93}_~$}5txTB`9TsOU5H-MaIRKbDZs4~gAd;n3*}f%~B_nqm z@dvNhQi`VUNevG!pY%_OMzLyv&$0o$2!JD_cF$f^F5mX`L<|bxh_E4DFm8sA&8GRo$p*9&79)rq1(0bETM)6Bm*9oNWV4Cf?BFA}(>I`%L+m;ylnVA8AtA@c_z>#$0#E|g-WVwoTUiBZq{>Ntrcrsf7 zV*4-FXFBiVO|t)zvHw2YPfEH`_wNWAZCh(7#k=&eBMkow(>mT32=c`l^6nozKJUi& z``;t9Sl~E8%!c2jUH`p6I@C`eYYrUF%=bSW{EyAr3Z$A&w^!rU1oj#H3+cc18GehP zamhIK@083)hPpKv#Y6$9blNNx<~aW&t8KU|0QUWV3G9Ed0i6b5$KD_S#cG@btop$l zqc~OYx*NY8kO`<{S26=}<=Kj+=Ko*Y>Q#jrN4)#{|FPQg@h}R2e)0a-TYk2lF{~L! zH2oik#&;o@6^s2h=|clLInZ*23HW;zhF+vV$1X|KW7_z>z{b^4vEab3_vMES z#m&{tcY)(K0_U6VHzM>|$D>&z<|;!!g$Y<0$&4U%`~}tM>Oz4MjB)R$kUaS)zTmRG*#R?EOQ=%q_PqX;ASRot zN!#*YHxQIK2MLpD985MRc-f7U@w^;0jb;X;kHYdKm)mLRBbE+GFLpA1Q3jZM-<+tt z@1lR9Z}`4`w%&{VZwXeK@=8m*^fXjZyv0e#HT5)#_*aHMJW?v4YtKMSVqL2B*pvqu zbAa2Pv+j!41bQwWb~hTvT4iEV?SPDY8zOpqC|$qS;89uzBT!kx1=6nwT!_>3Fd>&M zXZ8MgE!Hs|F<%G&+b8~uqY1GzO8%fOM1f1K-8Y%TrYvWRGCF zBnc?YF@?gk2~zzcPPkrn|6EeWk^SfHH8M8$+RHt9E}i1_84iSwZl2q^*4(-4cae<8 zMZd>dx=QEW;v0vR;cWtTy`I9?3|TxX6ibHLj;)cbR!d+jX9dyRBvvCs_ean-c*rFTE z=wAZX(a1T&hCPHmeQhvalA-GdFZhjVQCpw-1fkAkW*8mnF4E4*f9i}z&|fXxNO)~VA+R`Ry^KSuP=dAk|UmDr^9$`b_YC*eaGiM z5h5`=HHMPtuWb6APG%bIA2Abvk!ePyYC|pJ(M>eP6gM0m>Lq%{ks6IL%$H9bRa5q_v$+d(3fkq zv*lE-AURfyECbhW8tPNee1AWe{ep|cJWgdeX1(Ib_GAvDRe2`P@HfAjefS%AfAH<| zSsAxn9$E+RCvsuo@)A*bY9Jx|ZwFTzd@@>eKQ#W;us>5nm2Q-Y3c@YKKBvS<(vJ~s zFJjl3jfy+qQA(Hfm+>DFZr}?F#ZGyitK0kd{e3!;O33!@KmGQ_<^My|TR^q-JnzFH zxVu|$cZy5!poQXI97=JwHn>C30!4~Lp|}-ycefUb6n7{NZ$97O|J{>wPfpIw?%bK# zxqJ7{^UQ_5d4^A7puJI}Bg>Q&PmqdTG3{t-g-NvAO!|pxR%PahQXP6o+PIPM`Woe9Gz&-y}JOubFJUW8RMgQ?Q#>;Wyf$QrJu|p-TP%T^dZcmA22^M&|L003(g9lO19SHn= zli|FR#)PigfUwY9-^Ji<6(Mr)QKbk|7uZ;7i5{r!%RF9t^!EH>rxXr(r+(Yccy=e z@*E^9I(a(|FKxvd`i#7X$P>;O-HznmF#rb&91uiFM^EAq-(bht_G~pzOnrWFkP>lQ zk0TQwgul`s`-{rv;w#+cxvMfZ?%%b%Q4;X)#EP5?iz4E7biUkny2fJBJLJK!p4YPC zH^v&I;kg|H1SI3_TKYT5w-gxAZ40P|Z8YTsqf0H;`dZ zRI6{IE_px&p)RlZms6WhTW43}M>eNrDd+X31+{Gc6)`MV+=!R|^2f^#yp7PU;fVER ztL%n3Wk$l$_#Ba$rw2H$8;;<0Fw5m1z#-_$bCTe+Cu z{`HL%A#1meh^MgWxh|FdtW@xBWH?X!BJ~LX&lpO*LMV{6RLWJjUQlL~)bGCf;v}!+ zZXS%i#3ixA+(Djk@;=lkHTVIjebr{7Ss=>E^9@FaY_J6r$c(1hIhbQp+LVUS-gAZIHoXnfIBb2?Ek8 zNx4Iex<2d;x1o@=zD(=;=?jfkGlXRqz(u8r( z`G+In53J%ZKmT62bTxV-V)gFu7&o$`fyjO+GyG_w=3yDTmpt8#)*}|Mn~_B(_2R<@ z41>Lo%UpF#nZDOt{qs?`SoF1b!mVhuM?66NVleBo@tKyLLr3m9xb6u~duMtqeDnHX z;;V1=-NX=;6F{=3InQMHm=KQyvR`QWA%^=+D)}A`qpcYMm22@pWA#(Dqm#_xi3LT! zM8;Bils@5s0hu7ELE`tXv!w#aMYI)2!=c*+RI^kcWF>yGn(yYe{SReL`iFw?oR2TcrO^BN+Aevt#z z`RnSysk*rxH1z6I_Jsc-k*&=e3Mltw=gbqKgSO4k7o@KmmnzM=>dOXoLdY2-ywg6x z6z6NO0X2w9PW=dd&K>?)4|NsNPk&H*b)-oF{+#xAqzjrHd!mDBrs7jp)6Aw#vVOv+ zeOm?qg9e=P4FGQ33O_C7LH)R)Px~U=V^B_ic0}Uz9xo(>eRWGlD3U+W>>}YZ46#OX zH5#c@+K>W58pmb$3JOswn7i}6%7(~(o2lA3x$*<%&(~)|b0KuE^zcMm+{l@*8Eow0E}9Gul6OQ`x#Os97aQ$xeVjuD zu;5rPa6GYtg3kl*$g?FWl&`)}&xI2T0QgloXwPaa=rzonuNCtw^M(LqrRVReKG1&@ zB5Tu*x*Q9=YG{4#&0!{k4s7NSB1#Fl%&DF zpVzf=9N&Zw8MQ&%1pCDhhT)-EYkF|)H2F8-TN>~d-hWW@*V!gWdkC8?@zSz!AHgu} zhcOqcni#v-@%9i8WIfOOFg24MDdXC_QLKm?j)UuaV7du4c-Ingc;GHk^8T)4z~Bj< zcva%{`0w}*0e3Q_Wo}M22?$j5oRr_MA}vXjzie1$C8;*RVbJ~?^#Nu2U39bn#Ux5d zmZPUZII=}#z7*79@#w>6nZ2(5zi*uIfg#viS_+h5Wa9>FIJr0tV-u3^tV6 z0dG@yp_>xl01tyteoZ*@x-C})vY|8E{Ns)BQ&7OQ;-zM_k35pS`?S_O?l@hdZW{q1f%c~o zvJ}kjSPhM<)uLm;>Yn?#JQs&(zjkh++aSniXs4@6aH23wF-7<_GSvt~IOOv`Jhj1c zX>|$IR3vLb-c37Jt}MTFarWJQ2hSZI_gmO!A8lHT6Clwjj1Gse%<49VQl6c?UTxS0 ziU?xNE9-oK5@C_rj(F^NBp@!}cpc_TG7^z7Cj-W*6jj@b^2+qTxG$sc3!t7tw%<`o z^u&Lygy2NJpM-+82bzFo`xY`f-p4Nplunq9B>Bn!gdeg0$ff^LN)prPCF<5}Dm}|I z?<=T&+5CqIjTK(vyX1rlpbS1_HVkAP6Ru%YjV~9`;MIJiN~TW6zfEeX8Jp&r{I>4u z!TvYi*LWo4;Qu}GBg59|0OXtzMgZ$%sJtK^-RBYrm0bT+-sNqBgQM+>bif{!?MSlx z1$Dq*4e76igOislO-^h7|L4V&vI`EH_i(IG(yeycIDBI0T+_{L=D+%PyIUSLEVB2@ zC#A!=C7&1ip7GP4h|7uUx3ujDy~6D)^@iFo6!R27w=|nj5wm4<@fQ*VhHpK$E&ogg z;bqLgmRXF|Tj$f^XcD}B(mNQHdRs--#k%^tMp+EGbIW}n)USi2*z6@%|6W&%?&-us z_|JftcS(kW631l>DV>e^zB1W^1c~W?IeAnzWvU{yHH@r;;^YY^AMm^MhL4Ko-d^=8 z?vj;teZw$`#4n2#o&WpC>h^R%%&7`-{m9~z_*tj;^JZh+M!U~!pS`{TOBaH5k|nBv zb@Tv&F69xhdg9^%MjdFXfy@3M)dhvcRD?Ja3sw7}9v7ez~NpubSY$6}`iW2z&Jh)e{5p2rAl(2{b~gLhb%$ z_JTBFM>K9;T3_&-`MZDe-L{3fUdpo419hYw;-=p=(0wn7KnX|cI<4i?w%~f76kVCtH58*V zWg>UuTTl*(6jD1n15RC|&3&IOIiKuO-T5oSTkbDkRl69Dm^X-0_ONaFqJJ0uk%Ubm z;Q=g!5yK>%TY@!-L6=>dd=s9^UuUAJ9>)csaV&GU?Jp1f0C`ZaF%KmUC4ozGJC`|`1BOp@R?*Z7hI8Hz1nP2?q{qmz}xFrWD{kum!0 zS-Ijzqm=%$)Q_L`6Hok)+6I(o=4;IGl9s6}5Olt^0p&;RE3PN+`kap+_f%odBY!S= zG|`dE45EVw{{YJSZEOz^>aQRl_f<+4#vgx8eP!<#jnN$%Lx+g8$$cviH+!B5%>(ga zBS6RjJ*3X<+Nw{#EZn-9$^TZ5jXEr|Bje@_v(thx!aCpKk*}<)?U&?ZEE1t?d4v&5 z*P&cek)fYwDvjrU=&=hHG-?#-WY!m@7~BDv#zf@yUN{mSdVwUnSA36>kiE+^CWr5g#P z=Gk!#Dj#{sIJyTZJ1w@EzBMEKdKl)jg0MOk-oj=wbj;GF8sw%+C%%5-kHNIa_~p?2 zEBT((C@P@9K2lZ1i=ONa_Q&5CxECJ@mOoBA{IOIA^gU%@ZU~>mei>jv4&WMZ%`PH{ zn#Qe@C-}pQcqOqAKdl&qye*LamkwOJQ4rl|VgKdMXkZ<)nTUw#-NWOpi3i^l9<((| zA(mu>C}8yaJBUFi&9J9LDQvIj?+~RB<;TDG^L_vt>V)d}96K3p{!yV1r*hi}EQHtR zCb8GJe@#rs(0uS|2!fRCiT3%VN6s+7o1y-!?;FyzG>0YRC+Jg_`Y1*QTyq{x5%Iej z*Mt^XeBaeV895EsO9BVXA8u~q@#4>nPg@C3oVIOOOHJQQg%@*sPF4s^i7#bZ&g9~`=$8HH zgwOY%-w3QjeaQNF#yi(P4*-w|WFQ1Hq`}P}I+00cr<$$akbxB z7Wk63@mhz$*y!tzZi}3HTX96L-=|`gx052b2M@<--B*jj6&uSkbEIK2Tc4oA92)_c zCC}PdCoGHnty91(#uvycRrCcRmg8ds@0jdS&tLYsZk`|5%&VkaKNG!Cj%$@@0xH=X z6^!=7pl6>h`JUb_p2?NX{!H9q57Z8;;~m6sn9$m=QtOsk*NHNThTsG6?T9>2rt=tf zkZiYs5X~c9s*F9ut=ot^I&$eiZuPwhFQ7S-lQo)NE>!4! zBbwbJst_v*f|J0a6i6*N2fiHf&<)sEVJC41cVpz~-dB|HjUTRZka4d zL#8DX?7srLNO-8&MOHJLpfInG-wkPUzmKBA=6tuCnt-(8H!Usu+^@keuRWXdUytbs4$$NnARrr*xu8^`E>!f4R=tLUH*i}Mz34HQ>3 z*8@P+FSCZ1d{p-bQM<>CF=GwOj(8#Y*+p4{FU`$)LFu7Uxz$!JCer_|=Q@+l(wX=1 zO&^%iEck@grh2WQHu^tFdL4ICicq4|e(d;NuxbLcM|<55ry9fR$VhP`jzs_FehtKk z1R{Y7WO@n|V#C9*GZ5Lns<{<^{|io)Us8-2>KRm(r2vR*uX}W0H@4G$evQY&St8@F zS~bAe>Xn0aqPXnuf2iT(z(1qp0u`JwEMIqorwOTFF@~iA@Go(BRy;-=rj?AS#&wlF zA8L}iZ0Wd}MlM`6g^H+uxUXKQ6eT7s$*$2UQT1q<$eM(0W{{rvGB*_N554&#Fi0mH z8dkju%g}Y-*#Es}LnUirqAf>=z-TlCj~%F&Qdru2Pc^`ue~ZqZr2`Q+#jw zxPd$7$5vw%TxqVU`4NFGcvVh2Jm>8)zUK>*b8GuT0Plpy$G4Z+=gBwHrrQ|rMZT+* z#aXrZa#JyCiW{9#AvF1|#~}SUU9$*r3al*tV$MxnK@Jm;yb0CCO~y(@4oBuR!m?1{ zABf;5CWx4=qn>EwO@% z3QXRx<=;>()6(~^dqo_j>G|8osk8F53{fy1RBSLU2Fu4<$H13JU~0&Arcj`eh6c4; z^6*EZKVp>p*Ttu6sZk7-qjqKK*Sv&s%wpA0-G~oo*@Sw)@WB zEmC)wp12)-EM~a z;j0UZ7(hII9M{Ae#+`3xuYz3mhL|3ilfTzr&I6!`+iPcEU%5VS6BsZOX~%u;1@23N z|6*IkIC^~3$E?^y0#2V0>wV4Gl2gE}5Gz63BrsL073~J#YX@Q#sRj131ESdUa=`sW z2>nEnhY0SFD7L>++sLlKauy72Z)>ss(~g2 zx0Ik8wv@sQdQBCzi!n3H7?)UtEhM1t;Nva)iY|zj5&6LHd7fw?uc^uwYBMaH-RO+M zB_iH&Y#Pd~U*ptOvw{P$3z_TGoQ*f2ouMS?Ql04kpXbj_6U>3@S~U3>;T=UqI= zv4IjZwwkN>22P9(02&~xp^PnSD8QsXn!7|Kh7D+MVfqG4@DFVJ8jWLbk#-s!#Ri=B zKz%0-4(tWCp6BgjTgLnY!xi>3K+TQy?(Ma9FAW+r!_poXe&OAKpEDU-=ZOlk-(dO% z9*USpW~jpzB#Q)~k_@;12A~9iQ%Uq*yBgw63S!xS_v^tQX|+93fts)As%kR;ghNsI zc&qZLF@}s(txg4w76@*ZG1a#e+S$oQ1}JEnQ!JHIqCRljAj+#<91(xnX9)m-qr_o( zw^Z6xDJa8_w6yTEdg(3hnIGubN_@@Q5LXW1>H=g6$FfyT1$%RG27sXY2I^KZH(&QH zW4agniD;c)aNx4@!rg=xku4?btpUI?CIxP5;PE!$Vs*S#jNA=C^glJ^f&Ck6F0Eqj zzwX0Nd7B9r0&eCDzE0Fxh7w;AZKPIw?QvQV+#xJu2KW@<8f-y~&IOzG6A7TAK^1z- z9n{>OiPQgcv4RXsnr`|(Hh!qdwA$-;Nc8{byzuVa9`y~7`37PUfJFZ@oV^d~EMJMi zImQ?@8h8`w-DgzzxuBA}AY8tI|2#%Xt@fG8AO1rV8At;JwQH}1cmAL7M}&Ht@P79R zNj8y^;p#CSBtm3?X>XEO6QZ4q!oBa5zQjHW4-HRydF9Ea9tjNc3aY;zPp@hTBd?g~}AV5CCtW=2zQFBd#kwJGd;qWITgUESx&;Ron zT=;x~(oX%%%@ZFYT6C7m_qSj%RDjJ6sn!=4xnb zJGjO#ARw^qb>A>vx;u9HSh|`^OZ?7%=U|^&N`@dH?z#ATYhH|kZw`}hak2!?dE<6k zuOpEaQOPidyh7$V)iAak8e23cP=ZvW4qM|pbwXOiwt;`Gfa|QX2(^>z$0LoUfAPMO zc!anFhdA0rU^H}#fqYjgW3K&`9+|tfrox6-Kx+bx+- zp-5(GAm_WJeo-|(#}63=6#-F`BqVh5T+8>_-v!-MQuZa>i8?S<_l?bDK7-BWudC;p z8{$q=N;Q{TiJj?iml}(`NDzbjIn}h}D5`(+D(Hd2G-+}{77$zT^-2prK8Sb<;-7M9gKxrYaitOIR>W{FBG=4 ziRe!qh6eF0c(NjoHPo0nk%>d~`AN*0gu&(rB)Qwp2Mik;UWoB@~Rfi55B_A$Aw}_eG zL(|SK1yf+j%7c=9-tdu+08DWZ{vp|uLTreOJ02|>*@EY# z7EDs54H8fcW5dAGu9ObLdj{fbp{>l>xt)gd^oE)}Q^e(VMOED^++W3$4EqRT%~+Az z%m#9Vu@T4`1Y_yx@i8t81duJF6j-iL?;X|J7 zKqV1uC7zLNb>RwV$jNZE{=Uh-@4m!92^oqGjl9UBeLxyXxivvF9b~B z4_k*3qxBJ?(-A>jpu-lPLH1H^r$7Q0jUVVcJf8>hhoo@sQ%d>#E|MRF894TYR6rZ$ zb@5C6B0dppS-AiGtGnABIa*E$M)p2okFKvwfV2BP+9VGB=^$?e zIevpBPCUe3B4ma>qGkcLB)o!ppmL5#_^zEaYGTk{+r@BmCw8L$(b~nda3{IT^U72j zIQRSock_>nzW~imQ}Z^T%+1B7ekVpw?5>y|2uu4o$|{4NE=&L~DeAaY1uLG8uNgUd zWTkB!ta#>Oeq%DB6fv~GS@gNj7JhPrr>(^SSplJJ3#Q}oIg^~Nj6U0$T7BM);vS>5xc-W}usAC`W7f;rFZ>10U>_rY}%K&gO7 zzkD#WY;Zp<6D$o3dfZ`hazxiQvG0eot(^W}bZm0$qok2N>rECVFf|0i(IO)2vr%TxVzMV|tj2oG0+nw>}+n9$N>n!s0Qs$KS|iY$5&U z+Y7E3e#;5rRfR*-E>N&MO~+O2ISR`B&X^S!HP9Y6<>U_4n2KM@65Jtazv zwI)?$g2($vh=#RYaf+++t3<=cZJUgO2;Kp|rW!N{&fw)-#M07$AMv_X{jC^Di9Eu> zrA2#X|8!qUj0}YJf_c^4#ElKYVDQqjAg6C?#+XkzZM{Nzffb2XEbm20vd^vb<-6kb zUqxa2eME2ma~Z}k9nz?VkYf`Py+wuF=#+hPv-mIaJ61_6O0H+|aou&ZhgO}YpiZ~8 z8Z`{<9T{0!2r&k-h);5qjol{Bb>ZG|ph0xMB8}{)D-vt5Raw7%0tjPUjUe_6IXrmr zeZv^poA1q5_UfjlNcM}$zQZBCz{XcvZc5&}|6!cu;1WzdS|}782&ay*i1|;NeL@H; zet;>x##>ymM5?sc`^Z?|mNF&ocvk~%;E`w$%1XI|^=g(yWC7v#Dd_?ii%i;*vI9mj zJ5U%*_D>bi@JrMA^v&?nP2i!U+54bAL+ z%lQ)D^=aV&(iAk_OCM(cT{bL)qOxK@d|T{%kY)31rQ&-s{5EV8yfn1pr|aNJEtxR; zf;c=e*~3ke&VARR4KxpCVD^1%bTsBK$KMz{i)6~8n~-rbNc zHF}*Re>lYDXM&W3epO*rK3X-`R$0E6*AI-MnYx-}FR^HiV7y*EJ=UbQsD6wZ7nah@ zV^hPfs={IOLN8sp|0E(WA!7>Dq}P>q7hgde*2P!CzAXEkQJ~GFHWNkXe*!EgDH(=G zG6=jNE57@Tb{TVmWAl#!bZu+of&w+N65m2R*=RHk)AHg&-qRa!m~Bs#Q~P-DcXC-s z3v5Z1jG|v_hkJDN+#kp zx>mE`eg;g(e{E~tC-NTW3b(SsM3-TBmL#7L>LNyrm>sh!oo4hwf5X^5sBha~#==mb zT$RYrsOS?|+MZ-^H>AVTUN7TSc!QV^j{>%MW1O7LDkOTdVRT~u8Et13=&)>R5a+=X z278EPQ_Kms=@(Y=Cz z*N+xAS^fl)T5|vi8a0sh;_dDD&MpF{luX$@^ z00gn0L$5X;5ij_fg3ID(K&Li2j73PYs%+N8R`pxLwp%A~@_AM|rpy-oU_yLA`K@J4 z#Pp>6QUody5;Tg@pW3!g=;QA=F@y2zffDuWgNGX;5@Kb{FWmVHZ9a3CCu*!&}Jb|JW>37D0Ku?f_u$ZCt53@U{MWmf(`U|xiNN>o!$QI zs3Sd^^w-}(-YZ7&jvCGJqii*N9_D7pCQ*Bwt}FO zEJ|!Tp0Xbt*NcJ61P&qSB>-HUfaxiP z-S_x6!BU3J>8lxW4fY4`MBOth%#Q%mQ0b6^28@w^q zj(o*NCyM^4h!Qh#(EpNbGq%6*RrvaN0P|%W*pPW5^g)kMLLSZ0llpIPnHbCmAH;hCG}}(SrPN z3mjsqhW}lTPeJaPM4O1NvWYpYhPBbd&i~(bqR#b#{(QokbGxrhF;$8G{TR>n;gY%T z%~ok%*|GU+!4)zxeHhb@u!P7^FjC6`y6^Ppn~H;h3Vmq5BTi1PL=eRZ!%&>e@aV55 z?`Qvp6;rZ7O5c4IHAXB+uq?7b}$t6U^$-B z^Ze3A%ySnbwi)kVt)%M#0d<>Sik_Q0Aww+|3IZ;j`p9J87HqTD|4sMB)2^zR=MI|W z@Kov6>^qSp%4TOR2S3r1)q2#tT?usa*gx&PLH4-Y*xoou14MEZy%;_IARvgs54LZs z{`1Nu@kz0D~^frXMjYHB%Y)&gpFNXbCX- zGZOazJ#m=5?0Z2kPghaMq3l}UsEYqXAFeC=f~>(wKVlU(pY@VGAE7%^h@l+ew@r3^5KmG;NhF$y~8xkEV`$l?wm+p-~D|Isx$WHUNTU#gll^0Qfla0nB0qsqNU1 zPQ~}==x(Qo0>g84{0GPI07k~zgGh){e4dJhA9c$otJ$84Bp9cU4qKnb+71sn0}IBm zVL+dB@q&pSUzFR)G47=g-@3QgQ8a&uUPsBh^5%d8eCe~5PE<0HHiGAwqiOV-En|9o zK!#?35n{SZaG#;#&l2J$s^r;peB%!%O6v4<`RN2yaU`)U`KQWp98yD0(3s)Ug|CPQ zT5oZRv|Onn`yL=u*Lt82NY*KB$muDm#YGkY%@x}AUKscdEfPNv8YUD?^FRfmB!(_K zBEaZ?AX!=2&)bX-csGn<5B=P9Y&HZTmNDu_OFa<_2>OdoDZryx19Pch255VMf21NYnKU>WYf$jlRKx3GzT&uF>!?$4(JJ zq8QM)Sq88ske*r55eL;4ChV|4kY~e|gG#i}fId+3xSySJLgN=+d!HfQYn*npBa}^Q z!Nd1}fwMT>)6t2lXz}J&?Chm0hFpHDy^cd0F(Mo_X8q8b%T-&aYY-mV6hn!%3;sqHiMTQJIj^g)JE}pFtH-X|?<8h%A@b@faXDZ{w8v)M=di@Uwv6Dua)j$TRhn|6Dabar2(Ccax z*!8u$WOz+hvjZ2YT9~EwJI$^S(;0lZO_M)=dcsue^QNYhqW@LqN=odNaGRj*x$msL zS^e}R^1;gM%Lk(P48iDx`a;p6r4z9r3Q^+w)`d3j{O6q9s=zh7;h_lLTzL1*05;%>c!Qoq`rDF5jalWV9OHJAK2PPIDLYq+2y7#NF|@g4_) z%z~&ZK0^U~@YO>WJ2OG22ToBAF0_apko*G(lX*}rXjaJKup>yvDE`zJ*=CB=-96-c z)TX1;pI>fwJ#)C=xxK5}Iy`jhvGV*_xOEzB++5Re@?6J1oR%HO_;e!d0{HTFu}a~O zLODB6dRqt2Gd6ca6n*?;k^H^I(oi4QCC#1F$m#ah?pVWF_ori@<5_Z>)%q)Uhx^gA zvi7!cx~-VR(wzpK)&8!$UjetXA|k|<WL=(Q-*W)1)mMh5SE6@$3o$m7^tWbOG* z`(x9XV1r`Qxe6nRiRanGDTgE5OY5!b6Tqnb^hHMU$eBQny&fD0^ww(jnpp%jzpimNMUi< z{;TepbmjM?rb<_Z^PjnL=5KE-ZB&CSS;`aD(jLY|h@qaEfFc|mBn)K&Qxpg$Ex=7h zm~I9Wlw%Er2v_GVsZ*EfLzlN0p;+Yaut9JR%zTcwxxS;dL&YWC>S`GRkxdt&fjaKQ z&g$EaG&(x(KXc@zRC_QoYkp~$7`1EWx9JINaN10OE|JKrr86ku#cbjzMCt}8yfCyX z2;8~=tNyIUQ^G4MgS&sFCnp8h=!FjRQsGjFrP@wrVo&do63@mN)=!^yR{5AiBjJQ_ zU{aBJG23+!3SM7cmZgqvIspGPCg@oZkj#3MqmizT2;vHa+l*LS#|IQ&{P|MfX$#`b|^du0UD}+6iJ-?*YZX^Oz z{9&{?V0|~7luMdKv$En!jY+~)P}CsU3a_lS`m-5Yzj;pb-sAO;T$YfP7}cQHWaF;u zFy^%K+rovTMS4!}bh#pO>UvkMrN!Ad;1(B-t81^rG+%M$AnOrMx?Q*?=FTOn+Y6bu)1{mE7o;U!))n6Fp`T~`jgtl!9nX- za1<3Jpat0WL} zV9%omATl7^aXS#b({bmFRU&Y3QJW}RnRW`v{f|k&IW|~C0pO>?Z zc`nOf(}3MSBAo05Ydk{E@{zCPc`0^Z#~2!fE?qaUQE|JAYpyoWhPy>?pJ2M;K3lB= zV_yo@PkH}-ei3!rOAJ}XZ=C6}(6r0X|EkzkoypKnDNAf@|7#+u=YW9Vz{m@XfY=>^dmIlGotW#z zHJ4r1NlO1kCF~TNpC5Kk51S4mCy~SSwu*tWNAGR&Nl1onIPe~mPa7MG9yg9G+z?j! zHveH=o5yLWGe3vdnj2WQ+02d@>Al$BsgTMPY0-D(dXvi6yz_^!2L8blCi4&ZbV%Lf z^Zwo3?PeacR|RE@^>4#DXQjcRJ9e1|G0Or%+nScBuG}f&KiCN8pBl(FZ&v~;HW;xSYjGhs6Det%2Aayv?}eK=STmBU_PyiptLlJ&+Dq!jBHbnASWssK$!w z)lpw@v~b=pB9=d}q5+Aj1TD??_XaOcFGhsk)~Qm7vnCZI3yW59tOQBm%nQD$9a_B) z(3Hc(@d!le2NZxdP;t@v5fl3aqlS(Kwp|O_#7`~ckv`##Q);}>kfDBc%_9Vnl2z}G z#xQ9TrA(CE9ksaL1&KJnHnd}-Sc{ujoBwqGgbtq_W8DsMYi1Z#YmHY>w5sD-JiJm4 zyggt+LMLV!G7=icXl5#VmdZ*ddMTeTKcOntp^=HCi4} zPN{)@b$5T0zxqkw=k!R?J>LV2{4)*^!CtrB6?3Ik{zJ`7gO?Uv6Ou1@i!6VFJmXe) zWM>)O37RRO-%-rN!NTqANuHvNe`0TZ8sp>TnAhlcjL%bw+(ojte3jRHGY z@O5ulXfFdVu^syv5xSqcOGW;3Zp+}~96)Ie|Lv`dx5(cM!8jR{fIQKSu2<>mS;SV{ zY!|}Kj|m5zLP1>$+mAT_6C@3w@SBE4#x`<&zDZfF(Wy;d*UZfZNmnY-Af_$aQGkC6 z6Vyx{xSxQ`2!H#2qwRNtERQm~RvGL`fSSov{HvK9XBk>3#^c)DQGXS(TiQjPlkJ=M zex8xTPO5`9j}UGWUI5D<9byp-6XZ#tPjDa77itsj-k|hBX-6^>^&Kp#P?SqsTBxk9&<{6toG3Zi^7Z-{6(ehGZwMR8(r3?NqdVUO< z=Z78|5L=1ndy9H`{@wfuvXLxtp@5GlNeW9JnUmDpgbJr4ELr;MU{#cw^Bs5*`rpP5 zIBsz`I}q+4=zFU-eD54(o|Hi58|>B9%7mtxtfjR(&YY#OYic_MfMQe}+N$?|Q)xw9 zzh&>~F@4vHRBZT$owF}Pi^3a*A7??8lF^H0%NOZa3svA`8yi)LT7WQKuKi%FwG=wN zgtGWzy7K86fA}S_S^{{n5nXJ&>%}qK_oyWOCwow=`upsS7DVV$Gm1c`07reiXwiUk zG1&Rq0?_3^#-$7m-Tr4@C{w`F^ikLI^I9p@W(mrop> z+d(e^Lkf38$Xy>y*7shQ+t;5H_lldgmr0B*wLiY6b~G5kNUx1T9=9Ty%jg$TT>!^&x5ZVpJsydP)zsu&wVK|6j{~I_*eqEh>Cl9AlhQabeIg zJF~ugT4}sJKBKQ2G;vMWg&4#)`S}_N6)p6(JLdPGBt!7d)9sw1pW$EuclWmlw^uV3Be&9CG$n{upLtJs`Y-Bc3T>_z@(Wr{>zK#n0UNNdW!>{+mBUZyZKS%q+EZ+qi zq~2m2l@n>5zhN{8_43AE-1KT^eyHzi`p9E2*KKyWn7T2B%LKoR1<+aD?Wc7Vc0NT$rmJMAsj)^xBe&!D&atMcg!5~fq4UsT5)KNa zDf;WJznw~G%Mz;$cD{s66<8gtc(SHdc^7(y-*&hM&<0&x>ptPMlRqaK&|stO2%m%^ zvB~2Q^TS6{RW*b`TKOVb@ztzM_g$4|(G=WC`TYR-61K9z2E!i6TMp?e#g|ktyG=IV zEwpWf;-p;i=2?LqMS{rU1k8g>55-Zv$mQE}75$9%*=xRySyUX{5BKb^PfFR~R&LmN zGa<@$dzP#(vvpGmtSr?=+i+1wi9j@)(H+RdMI6mUkTSxh&kDonFOcx|-6H(ldGO}I zsJ-Omu{yxvm7)zrB7{+mh#8Z3&?yOpFfwLa$NwMITpjU_g|@!g!RSd4(u9ZKV{*Zz zuCS_s8!e*+J0cZx>eJg- zo~gSfIfT)R%4L3gTOj*0w?*bBn0Lp!_#OGeI#Boo!#RT!Xknr@6?c^`BH{MUx{(z7 z$|)7~kw!vrcvd%CYO60a7|fb@Nw}XckA?)?l7g(OC9>32riPbSg6Y4~C7G%*EK=6W zhs=`LxNC&Dv&qzEm<+!Ozbw~bk9X(VWN!g#WpGMZWQPlCXi@EZ85}OB5KXDwwYF2y}}AenEBJ|{lsjZty05}WWU15(0S;s_5`+~T4U zx0c6})2NBCc4{G|RSllI>Spmf$4d0v<}z@XWaJ2c8XzLb#5#gr%gZ z6u-&FOCTgfw$ASr0XQ5hl*dF{#TF&JIUsM`LcPp58|#z2#iymh8r4@vFRF|q&ck$5 zH6%MJmPeT}FptAGS7)HifJ`&wtNqhtO@%9l3PlM}6uP9YU9NMzQQ}TU1w>VV3;T;1 z+Yx4*hqz_HQ*Pzwug9f0Wd(za8<}1e(#)k5och*W24s2`N@mE`&t_u-v4#@N2wKw1 z(AO$Hk_=mmhs&00a=w=ap|Yoq?gN1!BH#+@KVV8YhLw0xt%8c~ks6irA-GRMj^@(= zdv5y&P>?m6JX7+_f6}hvx-rqu8ScmO#&ecJG*^vqGe2I!V;f&B)Rdk)Q8G=%X1?yL zCf0kFWx6^|i;p3Ki^k6^Km4hzSR!n!qojp2;)-MmQ;EtXvDSnFHke!pMU%l6T#byiS!>Gw zAIgO|Wg{d(QLIatFjN{V(BoKQeGU_crVf;>*f3|=Y7(2~-qe+r zt_speqXLl>5;xQnQp$=YVm%Q|XL%*99u)~nTPl-f6pBg3#G-Nm>m1hOTFQnNtf_lx z`5%hAgjCDy?G~ zp&Y;xAhHl)KpF{_s!Sa0b+BYLMW?OulZRir0)afbFOYwgr;uWajE6)tjm*$Q;-(S^ z1yUJIP%M-SB|{eTbpcE4n(=W^yr%s7D&I@-{)Hvwdue?C?c7WL8m=qZen zD0LYS3m60t4PM6#8~j)X`1;1zwBY-yd#U@+W{^-45QQs?1d|5S#_SP_V*(EeW|Xb+ zOIHmGIZxLa{KhsAQCWT=jLOQfVIiTgBC}aCHy#F z$DiZhS-wW$*YS1uedg|^f&I6BFZEvL?s- zOdiDzbsz!>Br<|Dl5j*KG6{r2u~06Q3`L`VZY`BcWlq3s3IfceEIeVTG*ld!sUwod z|BM#MBcm4*^h0tQ>y(HmlAyHZ%0z`isZcIpW+0mOQ>j#D2FxH71%NOdX~d-}io;DE z!L${`5tpvoA&`8D{4bV>mb92gVv%?1en(F7$Q4N2Btnsd zeUS{2NGegG_)<~1D3HuV!XK#CQK?iW;VKEjWqd3P6^2TKrK(6APRS~Mi;}S#f`8d-Xg@93`A#mvbI{M==5+af!l0))4!9;qL1eX$;CwWao zWA{{}Py^wx5HK7XP0{dh^v7cqL==;)fFnG#5(Rdb+7EzjcPu3!I5{y9e9 z#h>AOInMVoe~#udof0qtJf`vS=nu(U=P{{3kxoG^xZZ;2Xu)$db3K2aeE;Upwcy~?9$;3yKEO|4ZsjIGB`}* zPmV|qifIko{KtI#&m3@<3&i)5U82unppa&d26zOB(6ge6}IzS>#IV#;-isZTh&3w)ap0UsdXXY#KpYJmM_p;9}9rh1* zxmJ@8IC4nxrm*=OFgw5@B9gx+aX<3%0g@b*Ud`#5@naYEXO|odQ!pTsH3=+4M592V zF`Y3nxa7zX5jb1`iwQJ(gF;h&<^ZwF#4ZPFoB07*qoM6N<$g74~$RR910 literal 113177 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®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 diff --git a/assets/screenshot.png b/assets/screenshot.png index 7915b5abda3aa55ab71e0173f06d89f33cf4a654..03390a8dd30a35f068099193a6088559316bab31 100644 GIT binary patch literal 49404 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 LmoJum{PKSRs^)pL literal 433607 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�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 z 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 diff --git a/assets/stats.png b/assets/stats.png index 0a8eee2a6e952493fc0a6aa0cd84a65ba397e005..a1f4e7747dbd808a374692541e842e9db872c712 100644 GIT binary patch literal 36917 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

@BsJhRWI@~J|WzG#M}c= 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 literal 67717 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

&B%f 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

4rxX?9Q08yN4BB(e_aq~;1iBd@7NU%+{Oh81 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μ%n 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

smLaE;eTZRh!JyIlAA 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�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 diff --git a/assets/todo-list.png b/assets/todo-list.png index 90649ad3d3291cc74041badb055b20fa6bd7ffdc..68f55686545af93e17fc256f5bb43ff533de81e8 100644 GIT binary patch literal 67032 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

n5j9#*QZH9>ZG+HrV)fZ)9D?>6$e%5L3|M!WX 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 z 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 Q!vQ=D^h~amUv-H1KU9NaeE Flutter Architecture Samples - + - - - + + +

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 literal 42960 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�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�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

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/bloc_flutter/ios/Runner/GoogleService-Info.plist b/bloc_flutter/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index c8cc9bf9..00000000 --- a/bloc_flutter/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - AD_UNIT_ID_FOR_BANNER_TEST - ca-app-pub-9999999999999999/9999999999 - AD_UNIT_ID_FOR_INTERSTITIAL_TEST - ca-app-pub-9999999999999999/9999999999 - CLIENT_ID - xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - API_KEY - xxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx - GCM_SENDER_ID - 999999999999 - PLIST_VERSION - 1 - BUNDLE_ID - com.fluttersamples.bloc - PROJECT_ID - xxxxxxxxxxxxx-99999 - STORAGE_BUCKET - xxxxxxxxxxxxx-99999.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 9:999999999999:ios:xxxxxxxxxxxxxxxx - DATABASE_URL - https://xxxxxxxxxxxxx-99999.firebaseio.com - - \ No newline at end of file diff --git a/bloc_flutter/ios/Runner/Info.plist b/bloc_flutter/ios/Runner/Info.plist index dfc13dd4..b34b0a4a 100644 --- a/bloc_flutter/ios/Runner/Info.plist +++ b/bloc_flutter/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Bloc Flutter Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - bloc_flutter + bloc_flutter_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/bloc_flutter/ios/Runner/Runner-Bridging-Header.h b/bloc_flutter/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/bloc_flutter/ios/Runner/Runner-Bridging-Header.h +++ b/bloc_flutter/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/bloc_flutter/ios/RunnerTests/RunnerTests.swift b/bloc_flutter/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/bloc_flutter/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/bloc_flutter/lib/anonymous_user_repository.dart b/bloc_flutter/lib/anonymous_user_repository.dart new file mode 100644 index 00000000..efd978f5 --- /dev/null +++ b/bloc_flutter/lib/anonymous_user_repository.dart @@ -0,0 +1,7 @@ +import 'package:todos_repository_core/todos_repository_core.dart'; + +class AnonymousUserRepository implements UserRepository { + @override + Future login() async => + UserEntity(id: 'anonymous', displayName: '', photoUrl: ''); +} diff --git a/bloc_flutter/lib/app.dart b/bloc_flutter/lib/app.dart index e76ac460..a9f1a851 100644 --- a/bloc_flutter/lib/app.dart +++ b/bloc_flutter/lib/app.dart @@ -5,7 +5,6 @@ import 'package:bloc_flutter_sample/screens/home_screen.dart'; import 'package:bloc_flutter_sample/widgets/todos_bloc_provider.dart'; import 'package:blocs/blocs.dart'; import 'package:flutter/material.dart'; -import 'package:meta/meta.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -14,10 +13,10 @@ class BlocApp extends StatelessWidget { final UserRepository userRepository; const BlocApp({ - Key key, - @required this.todosInteractor, - @required this.userRepository, - }) : super(key: key); + super.key, + required this.todosInteractor, + required this.userRepository, + }); @override Widget build(BuildContext context) { @@ -31,12 +30,12 @@ class BlocApp extends StatelessWidget { theme: ArchSampleTheme.theme, localizationsDelegates: [ ArchSampleLocalizationsDelegate(), - InheritedWidgetLocalizationsDelegate(), + BlocLocalizationsDelegate(), ], routes: { ArchSampleRoutes.home: (context) { return HomeScreen( - repository: Injector.of(context).userRepository, + userRepository: Injector.of(context).userRepository, ); }, ArchSampleRoutes.addTodo: (context) { diff --git a/bloc_flutter/lib/dependency_injection.dart b/bloc_flutter/lib/dependency_injection.dart index d34d0f55..0dfc12a7 100644 --- a/bloc_flutter/lib/dependency_injection.dart +++ b/bloc_flutter/lib/dependency_injection.dart @@ -1,25 +1,20 @@ -// A poor man's DI. This should be replaced by a proper solution once they -// are more stable. -library dependency_injector; - import 'package:blocs/blocs.dart'; import 'package:flutter/widgets.dart'; -import 'package:meta/meta.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; class Injector extends InheritedWidget { final TodosInteractor todosInteractor; final UserRepository userRepository; - Injector({ - Key key, - @required this.todosInteractor, - @required this.userRepository, - @required Widget child, - }) : super(key: key, child: child); + const Injector({ + super.key, + required this.todosInteractor, + required this.userRepository, + required super.child, + }); static Injector of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType(); + context.dependOnInheritedWidgetOfExactType()!; @override bool updateShouldNotify(Injector oldWidget) => diff --git a/bloc_flutter/lib/localization.dart b/bloc_flutter/lib/localization.dart index 3872b5d9..bf8ca9c2 100644 --- a/bloc_flutter/lib/localization.dart +++ b/bloc_flutter/lib/localization.dart @@ -4,20 +4,20 @@ import 'package:flutter/material.dart'; class BlocLocalizations { static BlocLocalizations of(BuildContext context) { - return Localizations.of(context, BlocLocalizations); + return Localizations.of(context, BlocLocalizations)!; } String get appTitle => 'Bloc Example'; } -class InheritedWidgetLocalizationsDelegate +class BlocLocalizationsDelegate extends LocalizationsDelegate { @override Future load(Locale locale) => Future(() => BlocLocalizations()); @override - bool shouldReload(InheritedWidgetLocalizationsDelegate old) => false; + bool shouldReload(BlocLocalizationsDelegate old) => false; @override bool isSupported(Locale locale) => diff --git a/bloc_flutter/lib/main.dart b/bloc_flutter/lib/main.dart index 85421cb4..5d4d3729 100644 --- a/bloc_flutter/lib/main.dart +++ b/bloc_flutter/lib/main.dart @@ -1,11 +1,10 @@ import 'dart:async'; +import 'package:bloc_flutter_sample/anonymous_user_repository.dart'; import 'package:bloc_flutter_sample/app.dart'; import 'package:blocs/blocs.dart'; import 'package:flutter/widgets.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; Future main() async { @@ -18,7 +17,7 @@ Future main() async { repository: LocalStorageRepository( localStorage: KeyValueStorage( 'bloc_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + await SharedPreferences.getInstance(), ), ), ), @@ -27,10 +26,3 @@ Future main() async { ), ); } - -class AnonymousUserRepository implements UserRepository { - @override - Future login() { - return Future.value(UserEntity(id: 'anonymous')); - } -} diff --git a/bloc_flutter/lib/main_firebase.dart b/bloc_flutter/lib/main_firebase.dart deleted file mode 100644 index 9844d176..00000000 --- a/bloc_flutter/lib/main_firebase.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:bloc_flutter_sample/app.dart'; -import 'package:blocs/blocs.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; -import 'package:firebase_flutter_repository/user_repository.dart'; -import 'package:flutter/widgets.dart'; - -void main() { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - BlocApp( - todosInteractor: TodosInteractor( - FirestoreReactiveTodosRepository(Firestore.instance), - ), - userRepository: FirebaseUserRepository(FirebaseAuth.instance), - ), - ); -} diff --git a/bloc_flutter/lib/main_web.dart b/bloc_flutter/lib/main_web.dart deleted file mode 100644 index 003c5cfd..00000000 --- a/bloc_flutter/lib/main_web.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'dart:async'; -import 'dart:html'; - -import 'package:bloc_flutter_sample/app.dart'; -import 'package:blocs/blocs.dart'; -import 'package:flutter/widgets.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - BlocApp( - todosInteractor: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'bloc_todos', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ), - userRepository: AnonymousUserRepository(), - ), - ); -} - -class AnonymousUserRepository implements UserRepository { - @override - Future login() { - return Future.value(UserEntity(id: 'anonymous')); - } -} diff --git a/bloc_flutter/lib/screens/add_edit_screen.dart b/bloc_flutter/lib/screens/add_edit_screen.dart index 5d0cd379..6bbe35b1 100644 --- a/bloc_flutter/lib/screens/add_edit_screen.dart +++ b/bloc_flutter/lib/screens/add_edit_screen.dart @@ -1,29 +1,33 @@ -import 'dart:async'; - import 'package:blocs/blocs.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { - final Todo todo; - final Function(Todo) addTodo; - final Function(Todo) updateTodo; + final Todo? todo; + final void Function(Todo)? addTodo; + final void Function(Todo)? updateTodo; - AddEditScreen({Key key, this.todo, this.addTodo, this.updateTodo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); + const AddEditScreen({ + super.key = ArchSampleKeys.addTodoScreen, + this.todo, + this.addTodo, + this.updateTodo, + }); @override - _AddEditScreenState createState() => _AddEditScreenState(); + AddEditScreenState createState() => AddEditScreenState(); } -class _AddEditScreenState extends State { +class AddEditScreenState extends State { static final GlobalKey formKey = GlobalKey(); - String _task; - String _note; + late String _task; + late String _note; @override Widget build(BuildContext context) { + final isEditing = widget.todo != null; + return Scaffold( appBar: AppBar( title: Text( @@ -36,34 +40,32 @@ class _AddEditScreenState extends State { padding: EdgeInsets.all(16.0), child: Form( key: formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, + autovalidateMode: AutovalidateMode.always, + canPop: true, child: ListView( children: [ TextFormField( - initialValue: widget.todo != null ? widget.todo.task : '', + initialValue: isEditing ? widget.todo!.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), - validator: (val) => val.trim().isEmpty + validator: (val) => val != null && val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null, - onSaved: (value) => _task = value, + onSaved: (value) => _task = value ?? '', ), TextFormField( - initialValue: widget.todo != null ? widget.todo.note : '', + initialValue: isEditing ? widget.todo!.note : '', key: ArchSampleKeys.noteField, maxLines: 10, style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), - onSaved: (value) => _note = value, + onSaved: (value) => _note = value ?? '', ), ], ), @@ -79,13 +81,15 @@ class _AddEditScreenState extends State { child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { final form = formKey.currentState; - if (form.validate()) { + if (form!.validate()) { form.save(); if (isEditing) { - widget.updateTodo(widget.todo.copyWith(task: _task, note: _note)); + widget.updateTodo!( + widget.todo!.copyWith(task: _task, note: _note), + ); } else { - widget.addTodo(Todo(_task, note: _note)); + widget.addTodo!(Todo(_task, note: _note)); } Navigator.pop(context); @@ -94,6 +98,4 @@ class _AddEditScreenState extends State { ), ); } - - bool get isEditing => widget.todo != null; } diff --git a/bloc_flutter/lib/screens/detail_screen.dart b/bloc_flutter/lib/screens/detail_screen.dart index c9845840..b410c129 100644 --- a/bloc_flutter/lib/screens/detail_screen.dart +++ b/bloc_flutter/lib/screens/detail_screen.dart @@ -1,7 +1,6 @@ import 'package:bloc_flutter_sample/screens/add_edit_screen.dart'; import 'package:bloc_flutter_sample/widgets/loading.dart'; import 'package:blocs/blocs.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -9,8 +8,11 @@ class DetailScreen extends StatefulWidget { final String todoId; final TodoBloc Function() initBloc; - DetailScreen({@required this.todoId, @required this.initBloc}) - : super(key: ArchSampleKeys.todoDetailsScreen); + const DetailScreen({ + super.key = ArchSampleKeys.todoDetailsScreen, + required this.todoId, + required this.initBloc, + }); @override DetailScreenState createState() { @@ -19,7 +21,7 @@ class DetailScreen extends StatefulWidget { } class DetailScreenState extends State { - TodoBloc todoBloc; + late TodoBloc todoBloc; @override void initState() { @@ -36,11 +38,11 @@ class DetailScreenState extends State { @override Widget build(BuildContext context) { return StreamBuilder( - stream: todoBloc.todo(widget.todoId).where((todo) => todo != null), + stream: todoBloc.todo(widget.todoId), builder: (context, snapshot) { if (!snapshot.hasData) return LoadingSpinner(); - final todo = snapshot.data; + final todo = snapshot.data!; return Scaffold( appBar: AppBar( @@ -103,11 +105,10 @@ class DetailScreenState extends State { ), floatingActionButton: FloatingActionButton( tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), key: ArchSampleKeys.editTodoFab, onPressed: () { Navigator.of(context).push( - MaterialPageRoute( + MaterialPageRoute( builder: (context) { return AddEditScreen( todo: todo, @@ -118,6 +119,7 @@ class DetailScreenState extends State { ), ); }, + child: Icon(Icons.edit), ), ); }, diff --git a/bloc_flutter/lib/screens/home_screen.dart b/bloc_flutter/lib/screens/home_screen.dart index 91cd1cbb..f50e1e19 100644 --- a/bloc_flutter/lib/screens/home_screen.dart +++ b/bloc_flutter/lib/screens/home_screen.dart @@ -10,18 +10,19 @@ import 'package:bloc_flutter_sample/widgets/todo_list.dart'; import 'package:bloc_flutter_sample/widgets/todos_bloc_provider.dart'; import 'package:blocs/blocs.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:meta/meta.dart'; import 'package:rxdart/rxdart.dart'; +import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; enum AppTab { todos, stats } class HomeScreen extends StatefulWidget { - final UserRepository repository; + final UserRepository userRepository; - HomeScreen({@required this.repository}) - : super(key: ArchSampleKeys.homeScreen); + const HomeScreen({ + super.key = ArchSampleKeys.homeScreen, + required this.userRepository, + }); @override State createState() { @@ -30,14 +31,14 @@ class HomeScreen extends StatefulWidget { } class HomeScreenState extends State { - UserBloc usersBloc; - StreamController tabController; + late UserBloc usersBloc; + late StreamController tabController; @override void initState() { super.initState(); - usersBloc = UserBloc(widget.repository); + usersBloc = UserBloc(widget.userRepository); tabController = StreamController(); } @@ -80,12 +81,12 @@ class HomeScreenState extends State { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.add), ), bottomNavigationBar: BottomNavigationBar( key: ArchSampleKeys.tabs, - currentIndex: AppTab.values.indexOf(activeTabSnapshot.data), + currentIndex: AppTab.values.indexOf(activeTabSnapshot.data!), onTap: (index) { tabController.add(AppTab.values[index]); }, @@ -97,11 +98,9 @@ class HomeScreenState extends State { ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ), diff --git a/bloc_flutter/lib/widgets/extra_actions_button.dart b/bloc_flutter/lib/widgets/extra_actions_button.dart index 1701e8e0..809249e8 100644 --- a/bloc_flutter/lib/widgets/extra_actions_button.dart +++ b/bloc_flutter/lib/widgets/extra_actions_button.dart @@ -6,17 +6,16 @@ class ExtraActionsButton extends StatelessWidget { final bool allComplete; final bool hasCompletedTodos; - ExtraActionsButton({ - this.onSelected, + const ExtraActionsButton({ + super.key = ArchSampleKeys.extraActionsButton, + required this.onSelected, this.allComplete = false, this.hasCompletedTodos = true, - Key key, - }) : super(key: key); + }); @override Widget build(BuildContext context) { return PopupMenuButton( - key: ArchSampleKeys.extraActionsButton, onSelected: onSelected, itemBuilder: (BuildContext context) { return >[ diff --git a/bloc_flutter/lib/widgets/filter_button.dart b/bloc_flutter/lib/widgets/filter_button.dart index 1e10f126..26a79e98 100644 --- a/bloc_flutter/lib/widgets/filter_button.dart +++ b/bloc_flutter/lib/widgets/filter_button.dart @@ -7,15 +7,18 @@ class FilterButton extends StatelessWidget { final VisibilityFilter activeFilter; final bool isActive; - FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + const FilterButton({ + super.key = ArchSampleKeys.filterButton, + required this.onSelected, + required this.activeFilter, + required this.isActive, + }); @override Widget build(BuildContext context) { - final theme = Theme.of(context); - final defaultStyle = theme.textTheme.bodyMedium; - final activeStyle = theme.textTheme.bodyMedium.copyWith( - color: theme.accentColor, + final defaultStyle = Theme.of(context).textTheme.bodyMedium!; + final activeStyle = defaultStyle.copyWith( + color: Theme.of(context).colorScheme.secondary, ); final button = _Button( onSelected: onSelected, @@ -34,12 +37,11 @@ class FilterButton extends StatelessWidget { class _Button extends StatelessWidget { const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); + required this.onSelected, + required this.activeFilter, + required this.activeStyle, + required this.defaultStyle, + }); final PopupMenuItemSelected onSelected; final VisibilityFilter activeFilter; @@ -49,7 +51,6 @@ class _Button extends StatelessWidget { @override Widget build(BuildContext context) { return PopupMenuButton( - key: ArchSampleKeys.filterButton, tooltip: ArchSampleLocalizations.of(context).filterTodos, onSelected: onSelected, itemBuilder: (BuildContext context) { diff --git a/bloc_flutter/lib/widgets/loading.dart b/bloc_flutter/lib/widgets/loading.dart index 440fc4f3..68c0ec55 100644 --- a/bloc_flutter/lib/widgets/loading.dart +++ b/bloc_flutter/lib/widgets/loading.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; class LoadingSpinner extends StatelessWidget { - LoadingSpinner({Key key}) : super(key: key); + const LoadingSpinner({super.key}); @override Widget build(BuildContext context) { diff --git a/bloc_flutter/lib/widgets/stats_counter.dart b/bloc_flutter/lib/widgets/stats_counter.dart index 5b62f4e5..94467c42 100644 --- a/bloc_flutter/lib/widgets/stats_counter.dart +++ b/bloc_flutter/lib/widgets/stats_counter.dart @@ -1,14 +1,14 @@ import 'package:blocs/blocs.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatefulWidget { final StatsBloc Function() buildBloc; - StatsCounter({Key key, @required this.buildBloc}) - : super(key: key ?? ArchSampleKeys.statsCounter); + const StatsCounter({ + super.key = ArchSampleKeys.statsCounter, + required this.buildBloc, + }); @override StatsCounterState createState() { @@ -17,7 +17,7 @@ class StatsCounter extends StatefulWidget { } class StatsCounterState extends State { - StatsBloc bloc; + late StatsBloc bloc; @override void initState() { diff --git a/bloc_flutter/lib/widgets/todo_item.dart b/bloc_flutter/lib/widgets/todo_item.dart index 1e31f8c1..582c960b 100644 --- a/bloc_flutter/lib/widgets/todo_item.dart +++ b/bloc_flutter/lib/widgets/todo_item.dart @@ -1,19 +1,18 @@ import 'package:blocs/blocs.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, + const TodoItem({ + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, }); @override diff --git a/bloc_flutter/lib/widgets/todo_list.dart b/bloc_flutter/lib/widgets/todo_list.dart index 4d2181d3..77e94689 100644 --- a/bloc_flutter/lib/widgets/todo_list.dart +++ b/bloc_flutter/lib/widgets/todo_list.dart @@ -8,14 +8,14 @@ import 'package:flutter/material.dart'; import 'package:todos_app_core/todos_app_core.dart'; class TodoList extends StatelessWidget { - TodoList({Key key}) : super(key: key); + const TodoList({super.key}); @override Widget build(BuildContext context) { return StreamBuilder>( stream: TodosBlocProvider.of(context).visibleTodos, builder: (context, snapshot) => snapshot.hasData - ? _buildList(snapshot.data) + ? _buildList(snapshot.data!) : LoadingSpinner(key: ArchSampleKeys.todosLoading), ); } @@ -35,7 +35,7 @@ class TodoList extends StatelessWidget { onTap: () { Navigator.of(context) .push( - MaterialPageRoute( + MaterialPageRoute( builder: (_) { return DetailScreen( todoId: todo.id, @@ -46,7 +46,7 @@ class TodoList extends StatelessWidget { ), ) .then((todo) { - if (todo is Todo) { + if (todo is Todo && context.mounted) { _showUndoSnackbar(context, todo); } }); @@ -85,6 +85,6 @@ class TodoList extends StatelessWidget { ), ); - Scaffold.of(context).showSnackBar(snackBar); + ScaffoldMessenger.of(context).showSnackBar(snackBar); } } diff --git a/bloc_flutter/lib/widgets/todos_bloc_provider.dart b/bloc_flutter/lib/widgets/todos_bloc_provider.dart index 8f7b86fb..dfbf41b3 100644 --- a/bloc_flutter/lib/widgets/todos_bloc_provider.dart +++ b/bloc_flutter/lib/widgets/todos_bloc_provider.dart @@ -1,25 +1,23 @@ import 'package:blocs/blocs.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; class TodosBlocProvider extends StatefulWidget { final Widget child; final TodosListBloc bloc; - TodosBlocProvider({Key key, @required this.child, @required this.bloc}) - : super(key: key); + const TodosBlocProvider({super.key, required this.child, required this.bloc}); @override - _TodosBlocProviderState createState() => _TodosBlocProviderState(); + TodosBlocProviderState createState() => TodosBlocProviderState(); static TodosListBloc of(BuildContext context) { return context - .dependOnInheritedWidgetOfExactType<_TodosBlocProvider>() + .dependOnInheritedWidgetOfExactType<_TodosBlocProvider>()! .bloc; } } -class _TodosBlocProviderState extends State { +class TodosBlocProviderState extends State { @override Widget build(BuildContext context) { return _TodosBlocProvider(bloc: widget.bloc, child: widget.child); @@ -35,8 +33,7 @@ class _TodosBlocProviderState extends State { class _TodosBlocProvider extends InheritedWidget { final TodosListBloc bloc; - _TodosBlocProvider({Key key, @required this.bloc, @required Widget child}) - : super(key: key, child: child); + const _TodosBlocProvider({required this.bloc, required super.child}); @override bool updateShouldNotify(_TodosBlocProvider old) => bloc != old.bloc; diff --git a/bloc_flutter/linux/.gitignore b/bloc_flutter/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/bloc_flutter/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/bloc_flutter/linux/CMakeLists.txt b/bloc_flutter/linux/CMakeLists.txt new file mode 100644 index 00000000..6f4ebf4e --- /dev/null +++ b/bloc_flutter/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "bloc_flutter_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.bloc_flutter_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/bloc_flutter/linux/flutter/CMakeLists.txt b/bloc_flutter/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/bloc_flutter/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/bloc_flutter/linux/flutter/generated_plugin_registrant.cc b/bloc_flutter/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/bloc_flutter/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/bloc_flutter/linux/flutter/generated_plugin_registrant.h b/bloc_flutter/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/bloc_flutter/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/bloc_flutter/linux/flutter/generated_plugins.cmake b/bloc_flutter/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/bloc_flutter/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/bloc_flutter/linux/runner/CMakeLists.txt b/bloc_flutter/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/bloc_flutter/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/bloc_flutter/linux/runner/main.cc b/bloc_flutter/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/bloc_flutter/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/bloc_flutter/linux/runner/my_application.cc b/bloc_flutter/linux/runner/my_application.cc new file mode 100644 index 00000000..4a792229 --- /dev/null +++ b/bloc_flutter/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "bloc_flutter_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "bloc_flutter_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/bloc_flutter/linux/runner/my_application.h b/bloc_flutter/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/bloc_flutter/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/bloc_flutter/macos/.gitignore b/bloc_flutter/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/bloc_flutter/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig b/bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/bloc_flutter/macos/Flutter/Flutter-Release.xcconfig b/bloc_flutter/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/bloc_flutter/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift b/bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/bloc_flutter/macos/Podfile b/bloc_flutter/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/bloc_flutter/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/bloc_flutter/macos/Podfile.lock b/bloc_flutter/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/bloc_flutter/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/bloc_flutter/macos/Runner.xcodeproj/project.pbxproj b/bloc_flutter/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..06cdf2f7 --- /dev/null +++ b/bloc_flutter/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + D53CF80310E427553F2B5122 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86C33D27F7A36B797D624F49 /* Pods_Runner.framework */; }; + FD3C53F535D56A2AF014A56E /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06E4ECD8ED1C23E7CA1E8124 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 02E7666704FD698876354E1C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 06E4ECD8ED1C23E7CA1E8124 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = bloc_flutter_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 45D5CEBA2CD926A877067859 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 4D6093C6D01C7E816D779EFE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 590DE9794D74BF49F5D05D9A /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 6DD95F229AC319A80B34E650 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 86C33D27F7A36B797D624F49 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + D37885EF4E7C39A206B12D27 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FD3C53F535D56A2AF014A56E /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D53CF80310E427553F2B5122 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + E8CF0382FE46026A64804992 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 86C33D27F7A36B797D624F49 /* Pods_Runner.framework */, + 06E4ECD8ED1C23E7CA1E8124 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + E8CF0382FE46026A64804992 /* Pods */ = { + isa = PBXGroup; + children = ( + 4D6093C6D01C7E816D779EFE /* Pods-Runner.debug.xcconfig */, + 6DD95F229AC319A80B34E650 /* Pods-Runner.release.xcconfig */, + D37885EF4E7C39A206B12D27 /* Pods-Runner.profile.xcconfig */, + 590DE9794D74BF49F5D05D9A /* Pods-RunnerTests.debug.xcconfig */, + 45D5CEBA2CD926A877067859 /* Pods-RunnerTests.release.xcconfig */, + 02E7666704FD698876354E1C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + D79B4BC5FF2E841103C3FD8D /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + E1CF2FCE47390FE1155F83FE /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 9A29188E7DA4AD9B0569C6C5 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 9A29188E7DA4AD9B0569C6C5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + D79B4BC5FF2E841103C3FD8D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E1CF2FCE47390FE1155F83FE /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 590DE9794D74BF49F5D05D9A /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_flutter_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 45D5CEBA2CD926A877067859 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_flutter_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 02E7666704FD698876354E1C /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_flutter_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..0c6d28c2 --- /dev/null +++ b/bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata b/bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/bloc_flutter/macos/Runner/AppDelegate.swift b/bloc_flutter/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/bloc_flutter/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K#jR^;j87-Auq zoUlN^K{r-Q+XN;zI ze|?*NFmgt#V#GwrSWaz^2G&@SBmck6ZcIFMww~vE<1E?M2#KUn1CzsB6D2+0SuRV@ zV2kK5HvIGB{HX-hQzs0*AB%5$9RJ@a;)Ahq#p$GSP91^&hi#6sg*;a~dt}4AclK>h z_3MoPRQ{i;==;*1S-mY<(JFzhAxMI&<61&m$J0NDHdJ3tYx~j0%M-uN6Zl8~_0DOkGXc0001@sz3l12C6Xg{AT~( zm6w64BA|AX`Ve)YY-glyudNN>MAfkXz-T7`_`fEolM;0T0BA)(02-OaW z0*cW7Z~ec94o8&g0D$N>b!COu{=m}^%oXZ4?T8ZyPZuGGBPBA7pbQMoV5HYhiT?%! zcae~`(QAN4&}-=#2f5fkn!SWGWmSeCISBcS=1-U|MEoKq=k?_x3apK>9((R zuu$9X?^8?@(a{qMS%J8SJPq))v}Q-ZyDm6Gbie0m92=`YlwnQPQP1kGSm(N2UJ3P6 z^{p-u)SSCTW~c1rw;cM)-uL2{->wCn2{#%;AtCQ!m%AakVs1K#v@(*-6QavyY&v&*wO_rCJXJuq$c$7ZjsW+pJo-$L^@!7X04CvaOpPyfw|FKvu;e(&Iw>Tbg zL}#8e^?X%TReXTt>gsBByt0kSU20oQx*~P=4`&tcZ7N6t-6LiK{LxX*p6}9c<0Pu^ zLx1w_P4P2V>bX=`F%v$#{sUDdF|;rbI{p#ZW`00Bgh(eB(nOIhy8W9T>3aQ=k8Z9% zB+TusFABF~J?N~fAd}1Rme=@4+1=M{^P`~se7}e3;mY0!%#MJf!XSrUC{0uZqMAd7%q zQY#$A>q}noIB4g54Ue)x>ofVm3DKBbUmS4Z-bm7KdKsUixva)1*&z5rgAG2gxG+_x zqT-KNY4g7eM!?>==;uD9Y4iI(Hu$pl8!LrK_Zb}5nv(XKW{9R144E!cFf36p{i|8pRL~p`_^iNo z{mf7y`#hejw#^#7oKPlN_Td{psNpNnM?{7{R-ICBtYxk>?3}OTH_8WkfaTLw)ZRTfxjW+0>gMe zpKg~`Bc$Y>^VX;ks^J0oKhB#6Ukt{oQhN+o2FKGZx}~j`cQB%vVsMFnm~R_1Y&Ml? zwFfb~d|dW~UktY@?zkau>Owe zRroi(<)c4Ux&wJfY=3I=vg)uh;sL(IYY9r$WK1$F;jYqq1>xT{LCkIMb3t2jN8d`9 z=4(v-z7vHucc_fjkpS}mGC{ND+J-hc_0Ix4kT^~{-2n|;Jmn|Xf9wGudDk7bi*?^+ z7fku8z*mbkGm&xf&lmu#=b5mp{X(AwtLTf!N`7FmOmX=4xwbD=fEo8CaB1d1=$|)+ z+Dlf^GzGOdlqTO8EwO?8;r+b;gkaF^$;+#~2_YYVH!hD6r;PaWdm#V=BJ1gH9ZK_9 zrAiIC-)z)hRq6i5+$JVmR!m4P>3yJ%lH)O&wtCyum3A*})*fHODD2nq!1@M>t@Za+ zH6{(Vf>_7!I-APmpsGLYpl7jww@s5hHOj5LCQXh)YAp+y{gG(0UMm(Ur z3o3n36oFwCkn+H*GZ-c6$Y!5r3z*@z0`NrB2C^q#LkOuooUM8Oek2KBk}o1PU8&2L z4iNkb5CqJWs58aR394iCU^ImDqV;q_Pp?pl=RB2372(Io^GA^+oKguO1(x$0<7w3z z)j{vnqEB679Rz4i4t;8|&Zg77UrklxY9@GDq(ZphH6=sW`;@uIt5B?7Oi?A0-BL}(#1&R;>2aFdq+E{jsvpNHjLx2t{@g1}c~DQcPNmVmy| zNMO@ewD^+T!|!DCOf}s9dLJU}(KZy@Jc&2Nq3^;vHTs}Hgcp`cw&gd7#N}nAFe3cM1TF%vKbKSffd&~FG9y$gLyr{#to)nxz5cCASEzQ}gz8O)phtHuKOW6p z@EQF(R>j%~P63Wfosrz8p(F=D|Mff~chUGn(<=CQbSiZ{t!e zeDU-pPsLgtc#d`3PYr$i*AaT!zF#23htIG&?QfcUk+@k$LZI}v+js|yuGmE!PvAV3 ztzh90rK-0L6P}s?1QH`Ot@ilbgMBzWIs zIs6K<_NL$O4lwR%zH4oJ+}JJp-bL6~%k&p)NGDMNZX7)0kni&%^sH|T?A)`z z=adV?!qnWx^B$|LD3BaA(G=ePL1+}8iu^SnnD;VE1@VLHMVdSN9$d)R(Wk{JEOp(P zm3LtAL$b^*JsQ0W&eLaoYag~=fRRdI>#FaELCO7L>zXe6w*nxN$Iy*Q*ftHUX0+N- zU>{D_;RRVPbQ?U+$^%{lhOMKyE5>$?U1aEPist+r)b47_LehJGTu>TcgZe&J{ z{q&D{^Ps~z7|zj~rpoh2I_{gAYNoCIJmio3B}$!5vTF*h$Q*vFj~qbo%bJCCRy509 zHTdDh_HYH8Zb9`}D5;;J9fkWOQi%Y$B1!b9+ESj+B@dtAztlY2O3NE<6HFiqOF&p_ zW-K`KiY@RPSY-p9Q99}Hcd05DT79_pfb{BV7r~?9pWh=;mcKBLTen%THFPo2NN~Nf zriOtFnqx}rtO|A6k!r6 zf-z?y-UD{dT0kT9FJ`-oWuPHbo+3wBS(}?2ql(+e@VTExmfnB*liCb zmeI+v5*+W_L;&kQN^ChW{jE0Mw#0Tfs}`9bk3&7UjxP^Ke(%eJu2{VnW?tu7Iqecm zB5|=-QdzK$=h50~{X3*w4%o1FS_u(dG2s&427$lJ?6bkLet}yYXCy)u_Io1&g^c#( z-$yYmSpxz{>BL;~c+~sxJIe1$7eZI_9t`eB^Pr0)5CuA}w;;7#RvPq|H6!byRzIJG ziQ7a4y_vhj(AL`8PhIm9edCv|%TX#f50lt8+&V+D4<}IA@S@#f4xId80oH$!_!q?@ zFRGGg2mTv&@76P7aTI{)Hu%>3QS_d)pQ%g8BYi58K~m-Ov^7r8BhX7YC1D3vwz&N8{?H*_U7DI?CI)+et?q|eGu>42NJ?K4SY zD?kc>h@%4IqNYuQ8m10+8xr2HYg2qFNdJl=Tmp&ybF>1>pqVfa%SsV*BY$d6<@iJA ziyvKnZ(~F9xQNokBgMci#pnZ}Igh0@S~cYcU_2Jfuf|d3tuH?ZSSYBfM(Y3-JBsC|S9c;# zyIMkPxgrq};0T09pjj#X?W^TFCMf1-9P{)g88;NDI+S4DXe>7d3Mb~i-h&S|Jy{J< zq3736$bH?@{!amD!1Ys-X)9V=#Z={fzsjVYMX5BG6%}tkzwC#1nQLj1y1f#}8**4Y zAvDZHw8)N)8~oWC88CgzbwOrL9HFbk4}h85^ptuu7A+uc#$f^9`EWv1Vr{5+@~@Uv z#B<;-nt;)!k|fRIg;2DZ(A2M2aC65kOIov|?Mhi1Sl7YOU4c$T(DoRQIGY`ycfkn% zViHzL;E*A{`&L?GP06Foa38+QNGA zw3+Wqs(@q+H{XLJbwZzE(omw%9~LPZfYB|NF5%j%E5kr_xE0u;i?IOIchn~VjeDZ) zAqsqhP0vu2&Tbz3IgJvMpKbThC-@=nk)!|?MIPP>MggZg{cUcKsP8|N#cG5 zUXMXxcXBF9`p>09IR?x$Ry3;q@x*%}G#lnB1}r#!WL88I@uvm}X98cZ8KO&cqT1p> z+gT=IxPsq%n4GWgh-Bk8E4!~`r@t>DaQKsjDqYc&h$p~TCh8_Mck5UB84u6Jl@kUZCU9BA-S!*bf>ZotFX9?a_^y%)yH~rsAz0M5#^Di80_tgoKw(egN z`)#(MqAI&A84J#Z<|4`Co8`iY+Cv&iboMJ^f9ROUK0Lm$;-T*c;TCTED_0|qfhlcS zv;BD*$Zko#nWPL}2K8T-?4}p{u)4xon!v_(yVW8VMpxg4Kh^J6WM{IlD{s?%XRT8P|yCU`R&6gwB~ zg}{At!iWCzOH37!ytcPeC`(({ovP7M5Y@bYYMZ}P2Z3=Y_hT)4DRk}wfeIo%q*M9UvXYJq!-@Ly79m5aLD{hf@BzQB>FdQ4mw z6$@vzSKF^Gnzc9vbccii)==~9H#KW<6)Uy1wb~auBn6s`ct!ZEos`WK8e2%<00b%# zY9Nvnmj@V^K(a_38dw-S*;G-(i(ETuIwyirs?$FFW@|66a38k+a%GLmucL%Wc8qk3 z?h_4!?4Y-xt)ry)>J`SuY**fuq2>u+)VZ+_1Egzctb*xJ6+7q`K$^f~r|!i?(07CD zH!)C_uerf-AHNa?6Y61D_MjGu*|wcO+ZMOo4q2bWpvjEWK9yASk%)QhwZS%N2_F4& z16D18>e%Q1mZb`R;vW{+IUoKE`y3(7p zplg5cBB)dtf^SdLd4n60oWie|(ZjgZa6L*VKq02Aij+?Qfr#1z#fwh92aV-HGd^_w zsucG24j8b|pk>BO7k8dS86>f-jBP^Sa}SF{YNn=^NU9mLOdKcAstv&GV>r zLxKHPkFxpvE8^r@MSF6UA}cG`#yFL8;kA7ccH9D=BGBtW2;H>C`FjnF^P}(G{wU;G z!LXLCbPfsGeLCQ{Ep$^~)@?v`q(uI`CxBY44osPcq@(rR-633!qa zsyb>?v%@X+e|Mg`+kRL*(;X>^BNZz{_kw5+K;w?#pReiw7eU8_Z^hhJ&fj80XQkuU z39?-z)6Fy$I`bEiMheS(iB6uLmiMd1i)cbK*9iPpl+h4x9ch7x- z1h4H;W_G?|)i`z??KNJVwgfuAM=7&Apd3vm#AT8uzQZ!NII}}@!j)eIfn53h{NmN7 zAKG6SnKP%^k&R~m5#@_4B@V?hYyHkm>0SQ@PPiw*@Tp@UhP-?w@jW?nxXuCipMW=L zH*5l*d@+jXm0tIMP_ec6Jcy6$w(gKK@xBX8@%oPaSyG;13qkFb*LuVx3{AgIyy&n3 z@R2_DcEn|75_?-v5_o~%xEt~ONB>M~tpL!nOVBLPN&e5bn5>+7o0?Nm|EGJ5 zmUbF{u|Qn?cu5}n4@9}g(G1JxtzkKv(tqwm_?1`?YSVA2IS4WI+*(2D*wh&6MIEhw z+B+2U<&E&|YA=3>?^i6)@n1&&;WGHF-pqi_sN&^C9xoxME5UgorQ_hh1__zzR#zVC zOQt4q6>ME^iPJ37*(kg4^=EFqyKH@6HEHXy79oLj{vFqZGY?sVjk!BX^h$SFJlJnv z5uw~2jLpA)|0=tp>qG*tuLru?-u`khGG2)o{+iDx&nC}eWj3^zx|T`xn5SuR;Aw8U z`p&>dJw`F17@J8YAuW4=;leBE%qagVTG5SZdh&d)(#ZhowZ|cvWvGMMrfVsbg>_~! z19fRz8CSJdrD|Rl)w!uznBF&2-dg{>y4l+6(L(vzbLA0Bk&`=;oQQ>(M8G=3kto_) zP8HD*n4?MySO2YrG6fwSrVmnesW+D&fxjfEmp=tPd?RKLZJcH&K(-S+x)2~QZ$c(> zru?MND7_HPZJVF%wX(49H)+~!7*!I8w72v&{b={#l9yz+S_aVPc_So%iF8>$XD1q1 zFtucO=rBj0Ctmi0{njN8l@}!LX}@dwl>3yMxZ;7 z0Ff2oh8L)YuaAGOuZ5`-p%Z4H@H$;_XRJQ|&(MhO78E|nyFa158gAxG^SP(vGi^+< zChY}o(_=ci3Wta#|K6MVljNe0T$%Q5ylx-v`R)r8;3+VUpp-)7T`-Y&{Zk z*)1*2MW+_eOJtF5tCMDV`}jg-R(_IzeE9|MBKl;a7&(pCLz}5<Zf+)T7bgNUQ_!gZtMlw=8doE}#W+`Xp~1DlE=d5SPT?ymu!r4z%&#A-@x^=QfvDkfx5-jz+h zoZ1OK)2|}_+UI)i9%8sJ9X<7AA?g&_Wd7g#rttHZE;J*7!e5B^zdb%jBj&dUDg4&B zMMYrJ$Z%t!5z6=pMGuO-VF~2dwjoXY+kvR>`N7UYfIBMZGP|C7*O=tU z2Tg_xi#Q3S=1|=WRfZD;HT<1D?GMR%5kI^KWwGrC@P2@R>mDT^3qsmbBiJc21kip~ zZp<7;^w{R;JqZ)C4z-^wL=&dBYj9WJBh&rd^A^n@07qM$c+kGv^f+~mU5_*|eePF| z3wDo-qaoRjmIw<2DjMTG4$HP{z54_te_{W^gu8$r=q0JgowzgQPct2JNtWPUsjF8R zvit&V8$(;7a_m%%9TqPkCXYUp&k*MRcwr*24>hR! z$4c#E=PVE=P4MLTUBM z7#*RDe0}=B)(3cvNpOmWa*eH#2HR?NVqXdJ=hq);MGD07JIQQ7Y0#iD!$C+mk7x&B zMwkS@H%>|fmSu#+ zI!}Sb(%o29Vkp_Th>&&!k7O>Ba#Om~B_J{pT7BHHd8(Ede(l`7O#`_}19hr_?~JP9 z`q(`<)y>%)x;O7)#-wfCP{?llFMoH!)ZomgsOYFvZ1DxrlYhkWRw#E-#Qf*z@Y-EQ z1~?_=c@M4DO@8AzZ2hKvw8CgitzI9yFd&N1-{|vP#4IqYb*#S0e3hrjsEGlnc4xwk z4o!0rxpUt8j&`mJ8?+P8G{m^jbk)bo_UPM+ifW*y-A*et`#_Ja_3nYyRa9fAG1Xr5 z>#AM_@PY|*u)DGRWJihZvgEh#{*joJN28uN7;i5{kJ*Gb-TERfN{ERe_~$Es~NJCpdKLRvdj4658uYYx{ng7I<6j~w@p%F<7a(Ssib|j z51;=Py(Nu*#hnLx@w&8X%=jrADn3TW>kplnb zYbFIWWVQXN7%Cwn6KnR)kYePEBmvM45I)UJb$)ninpdYg3a5N6pm_7Q+9>!_^xy?k za8@tJ@OOs-pRAAfT>Nc2x=>sZUs2!9Dwa%TTmDggH4fq(x^MW>mcRyJINlAqK$YQCMgR8`>6=Sg$ zFnJZsA8xUBXIN3i70Q%8px@yQPMgVP=>xcPI38jNJK<=6hC={a07+n@R|$bnhB)X$ z(Zc%tadp70vBTnW{OUIjTMe38F}JIH$#A}PB&RosPyFZMD}q}5W%$rh>5#U;m`z2K zc(&WRxx7DQLM-+--^w*EWAIS%bi>h587qkwu|H=hma3T^bGD&Z!`u(RKLeNZ&pI=q$|HOcji(0P1QC!YkAp*u z3%S$kumxR}jU<@6`;*-9=5-&LYRA<~uFrwO3U0k*4|xUTp4ZY7;Zbjx|uw&BWU$zK(w55pWa~#=f$c zNDW0O68N!xCy>G}(CX=;8hJLxAKn@Aj(dbZxO8a$+L$jK8$N-h@4$i8)WqD_%Snh4 zR?{O%k}>lr>w$b$g=VP8mckcCrjnp>uQl5F_6dPM8FWRqs}h`DpfCv20uZhyY~tr8 zkAYW4#yM;*je)n=EAb(q@5BWD8b1_--m$Q-3wbh1hM{8ihq7UUQfg@)l06}y+#=$( z$x>oVYJ47zAC^>HLRE-!HitjUixP6!R98WU+h>zct7g4eD;Mj#FL*a!VW!v-@b(Jv zj@@xM5noCp5%Vk3vY{tyI#oyDV7<$`KG`tktVyC&0DqxA#>V;-3oH%NW|Q&=UQ&zU zXNIT67J4D%5R1k#bW0F}TD`hlW7b)-=-%X4;UxQ*u4bK$mTAp%y&-(?{sXF%e_VH6 zTkt(X)SSN|;8q@8XX6qfR;*$r#HbIrvOj*-5ND8RCrcw4u8D$LXm5zlj@E5<3S0R# z??=E$p{tOk96$SloZ~ARe5`J=dB|Nj?u|zy2r(-*(q^@YwZiTF@QzQyPx_l=IDKa) zqD@0?IHJqSqZ_5`)81?4^~`yiGh6>7?|dKa8!e|}5@&qV!Iu9<@G?E}Vx9EzomB3t zEbMEm$TKGwkHDpirp;FZD#6P5qIlQJ8}rf;lHoz#h4TFFPYmS3+8(13_Mx2`?^=8S z|0)0&dQLJTU6{b%*yrpQe#OKKCrL8}YKw+<#|m`SkgeoN69TzIBQOl_Yg)W*w?NW) z*WxhEp$zQBBazJSE6ygu@O^!@Fr46j=|K`Mmb~xbggw7<)BuC@cT@Bwb^k?o-A zKX^9AyqR?zBtW5UA#siILztgOp?r4qgC`9jYJG_fxlsVSugGprremg-W(K0{O!Nw-DN%=FYCyfYA3&p*K>+|Q}s4rx#CQK zNj^U;sLM#q8}#|PeC$p&jAjqMu(lkp-_50Y&n=qF9`a3`Pr9f;b`-~YZ+Bb0r~c+V z*JJ&|^T{}IHkwjNAaM^V*IQ;rk^hnnA@~?YL}7~^St}XfHf6OMMCd9!vhk#gRA*{L zp?&63axj|Si%^NW05#87zpU_>QpFNb+I00v@cHwvdBn+Un)n2Egdt~LcWOeBW4Okm zD$-e~RD+W|UB;KQ;a7GOU&%p*efGu2$@wR74+&iP8|6#_fmnh^WcJLs)rtz{46);F z4v0OL{ZP9550>2%FE(;SbM*#sqMl*UXOb>ch`fJ|(*bOZ9=EB1+V4fkQ)hjsm3-u^Pk-4ji_uDDHdD>84tER!MvbH`*tG zzvbhBR@}Yd`azQGavooV=<WbvWLlO#x`hyO34mKcxrGv=`{ssnP=0Be5#1B;Co9 zh{TR>tjW2Ny$ZxJpYeg57#0`GP#jxDCU0!H15nL@@G*HLQcRdcsUO3sO9xvtmUcc{F*>FQZcZ5bgwaS^k-j5mmt zI7Z{Xnoml|A(&_{imAjK!kf5>g(oDqDI4C{;Bv162k8sFNr;!qPa2LPh>=1n z=^_9)TsLDvTqK7&*Vfm5k;VXjBW^qN3Tl&}K=X5)oXJs$z3gk0_+7`mJvz{pK|FVs zHw!k&7xVjvY;|(Py<;J{)b#Yjj*LZO7x|~pO4^MJ2LqK3X;Irb%nf}L|gck zE#55_BNsy6m+W{e zo!P59DDo*s@VIi+S|v93PwY6d?CE=S&!JLXwE9{i)DMO*_X90;n2*mPDrL%{iqN!?%-_95J^L z=l<*{em(6|h7DR4+4G3Wr;4*}yrBkbe3}=p7sOW1xj!EZVKSMSd;QPw>uhKK z#>MlS@RB@-`ULv|#zI5GytO{=zp*R__uK~R6&p$q{Y{iNkg61yAgB8C^oy&``{~FK z8hE}H&nIihSozKrOONe5Hu?0Zy04U#0$fB7C6y~?8{or}KNvP)an=QP&W80mj&8WL zEZQF&*FhoMMG6tOjeiCIV;T{I>jhi9hiUwz?bkX3NS-k5eWKy)Mo_orMEg4sV6R6X&i-Q%JG;Esl+kLpn@Bsls9O|i9z`tKB^~1D5)RIBB&J<6T@a4$pUvh$IR$%ubH)joi z!7>ON0DPwx=>0DA>Bb^c?L8N0BBrMl#oDB+GOXJh;Y&6I)#GRy$W5xK%a;KS8BrER zX)M>Rdoc*bqP*L9DDA3lF%U8Yzb6RyIsW@}IKq^i7v&{LeIc=*ZHIbO68x=d=+0T( zev=DT9f|x!IWZNTB#N7}V4;9#V$%Wo0%g>*!MdLOEU>My0^gni9ocID{$g9ytD!gy zKRWT`DVN(lcYjR|(}f0?zgBa3SwunLfAhx><%u0uFkrdyqlh8_g zDKt#R6rA2(Vm2LW_>3lBNYKG_F{TEnnKWGGC15y&OebIRhFL4TeMR*v9i0wPoK#H< zu4){s4K&K)K(9~jgGm;H7lS7y_RYfS;&!Oj5*eqbvEcW^a*i67nevzOZxN6F+K~A%TYEtsAVsR z@J=1hc#Dgs7J2^FL|qV&#WBFQyDtEQ2kPO7m2`)WFhqAob)Y>@{crkil6w9VoA?M6 zADGq*#-hyEVhDG5MQj677XmcWY1_-UO40QEP&+D)rZoYv^1B_^w7zAvWGw&pQyCyx zD|ga$w!ODOxxGf_Qq%V9Z7Q2pFiUOIK818AGeZ-~*R zI1O|SSc=3Z?#61Rd|AXx2)K|F@Z1@x!hBBMhAqiU)J=U|Y)T$h3D?ZPPQgkSosnN! zIqw-t$0fqsOlgw3TlHJF*t$Q@bg$9}A3X=cS@-yU3_vNG_!#9}7=q7!LZ?-%U26W4 z$d>_}*s1>Ac%3uFR;tnl*fNlylJ)}r2^Q3&@+is3BIv<}x>-^_ng;jhdaM}6Sg3?p z0jS|b%QyScy3OQ(V*~l~bK>VC{9@FMuW_JUZO?y(V?LKWD6(MXzh}M3r3{7b4eB(#`(q1m{>Be%_<9jw8HO!x#yF6vez$c#kR+}s zZO-_;25Sxngd(}){zv?ccbLqRAlo;yog>4LH&uZUK1n>x?u49C)Y&2evH5Zgt~666 z_2_z|H5AO5Iqxv_Bn~*y1qzRPcob<+Otod5Xd2&z=C;u+F}zBB@b^UdGdUz|s!H}M zXG%KiLzn3G?FZgdY&3pV$nSeY?ZbU^jhLz9!t0K?ep}EFNqR1@E!f*n>x*!uO*~JF zW9UXWrVgbX1n#76_;&0S7z}(5n-bqnII}_iDsNqfmye@)kRk`w~1 z6j4h4BxcPe6}v)xGm%=z2#tB#^KwbgMTl2I*$9eY|EWAHFc3tO48Xo5rW z5oHD!G4kb?MdrOHV=A+8ThlIqL8Uu+7{G@ zb)cGBm|S^Eh5= z^E^SZ=yeC;6nNCdztw&TdnIz}^Of@Ke*@vjt)0g>Y!4AJvWiL~e7+9#Ibhe)> ziNwh>gWZL@FlWc)wzihocz+%+@*euwXhW%Hb>l7tf8aJe5_ZSH1w-uG|B;9qpcBP0 zM`r1Hu#htOl)4Cl1c7oY^t0e4Jh$-I(}M5kzWqh{F=g&IM#JiC`NDSd@BCKX#y<P@Gwl$3a3w z6<(b|K(X5FIR22M)sy$4jY*F4tT{?wZRI+KkZFb<@j@_C316lu1hq2hA|1wCmR+S@ zRN)YNNE{}i_H`_h&VUT5=Y(lN%m?%QX;6$*1P}K-PcPx>*S55v)qZ@r&Vcic-sjkm z! z=nfW&X`}iAqa_H$H%z3Tyz5&P3%+;93_0b;zxLs)t#B|up}JyV$W4~`8E@+BHQ+!y zuIo-jW!~)MN$2eHwyx-{fyGjAWJ(l8TZtUp?wZWBZ%}krT{f*^fqUh+ywHifw)_F> zp76_kj_B&zFmv$FsPm|L7%x-j!WP>_P6dHnUTv!9ZWrrmAUteBa`rT7$2ixO;ga8U z3!91micm}{!Btk+I%pMgcKs?H4`i+=w0@Ws-CS&n^=2hFTQ#QeOmSz6ttIkzmh^`A zYPq)G1l3h(E$mkyr{mvz*MP`x+PULBn%CDhltKkNo6Uqg!vJ#DA@BIYr9TQ`18Un2 zv$}BYzOQuay9}w(?JV63F$H6WmlYPPpH=R|CPb%C@BCv|&Q|&IcW7*LX?Q%epS z`=CPx{1HnJ9_46^=0VmNb>8JvMw-@&+V8SDLRYsa>hZXEeRbtf5eJ>0@Ds47zIY{N z42EOP9J8G@MXXdeiPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$?lu1NER9Fe^SItioK@|V(ZWmgL zZT;XwPgVuWM>O%^|Dc$VK;n&?9!&g5)aVsG8cjs5UbtxVVnQNOV~7Mrg3+jnU;rhE z6fhW6P)R>_eXrXo-RW*y6RQ_qcb^s1wTu$TwriZ`=JUws>vRi}5x}MW1MR#7p|gIWJlaLK;~xaN}b< z<-@=RX-%1mt`^O0o^~2=CD7pJ<<$Rp-oUL-7PuG>do^5W_Mk#unlP}6I@6NPxY`Q} zuXJF}!0l)vwPNAW;@5DjPRj?*rZxl zwn;A(cFV!xe^CUu+6SrN?xe#mz?&%N9QHf~=KyK%DoB8HKC)=w=3E?1Bqj9RMJs3U z5am3Uv`@+{jgqO^f}Lx_Jp~CoP3N4AMZr~4&d)T`R?`(M{W5WWJV^z~2B|-oih@h^ zD#DuzGbl(P5>()u*YGo*Och=oRr~3P1wOlKqI)udc$|)(bacG5>~p(y>?{JD7nQf_ z*`T^YL06-O>T(s$bi5v~_fWMfnE7Vn%2*tqV|?~m;wSJEVGkNMD>+xCu#um(7}0so zSEu7?_=Q64Q5D+fz~T=Rr=G_!L*P|(-iOK*@X8r{-?oBlnxMNNgCVCN9Y~ocu+?XA zjjovJ9F1W$Nf!{AEv%W~8oahwM}4Ruc+SLs>_I_*uBxdcn1gQ^2F8a*vGjgAXYyh? zWCE@c5R=tbD(F4nL9NS?$PN1V_2*WR?gjv3)4MQeizuH`;sqrhgykEzj z593&TGlm3h`sIXy_U<7(dpRXGgp0TB{>s?}D{fwLe>IV~exweOfH!qM@CV5kib!YA z6O0gvJi_0J8IdEvyP#;PtqP*=;$iI2t(xG2YI-e!)~kaUn~b{6(&n zp)?iJ`z2)Xh%sCV@BkU`XL%_|FnCA?cVv@h*-FOZhY5erbGh)%Q!Av#fJM3Csc_g zC2I6x%$)80`Tkz#KRA!h1FzY`?0es3t!rKDT5EjPe6B=BLPr7s0GW!if;Ip^!AmGW zL;$`Vdre+|FA!I4r6)keFvAx3M#1`}ijBHDzy)3t0gwjl|qC2YB`SSxFKHr(oY#H$)x{L$LL zBdLKTlsOrmb>T0wd=&6l3+_Te>1!j0OU8%b%N342^opKmT)gni(wV($s(>V-fUv@0p8!f`=>PxC|9=nu ze{ToBBj8b<{PLfXV$h8YPgA~E!_sF9bl;QOF{o6t&JdsX?}rW!_&d`#wlB6T_h;Xf zl{4Tz5>qjF4kZgjO7ZiLPRz_~U@k5%?=30+nxEh9?s78gZ07YHB`FV`4%hlQlMJe@J`+e(qzy+h(9yY^ckv_* zb_E6o4p)ZaWfraIoB2)U7_@l(J0O%jm+Or>8}zSSTkM$ASG^w3F|I? z$+eHt7T~04(_WfKh27zqS$6* zzyy-ZyqvSIZ0!kkSvHknm_P*{5TKLQs8S6M=ONuKAUJWtpxbL#2(_huvY(v~Y%%#~ zYgsq$JbLLprKkV)32`liIT$KKEqs$iYxjFlHiRNvBhxbDg*3@Qefw4UM$>i${R5uB zhvTgmqQsKA{vrKN;TSJU2$f9q=y{$oH{<)woSeV>fkIz6D8@KB zf4M%v%f5U2?<8B(xn}xV+gWP?t&oiapJhJbfa;agtz-YM7=hrSuxl8lAc3GgFna#7 zNjX7;`d?oD`#AK+fQ=ZXqfIZFEk{ApzjJF0=yO~Yj{7oQfXl+6v!wNnoqwEvrs81a zGC?yXeSD2NV!ejp{LdZGEtd1TJ)3g{P6j#2jLR`cpo;YX}~_gU&Gd<+~SUJVh+$7S%`zLy^QqndN<_9 zrLwnXrLvW+ew9zX2)5qw7)zIYawgMrh`{_|(nx%u-ur1B7YcLp&WFa24gAuw~& zKJD3~^`Vp_SR$WGGBaMnttT)#fCc^+P$@UHIyBu+TRJWbcw4`CYL@SVGh!X&y%!x~ zaO*m-bTadEcEL6V6*{>irB8qT5Tqd54TC4`h`PVcd^AM6^Qf=GS->x%N70SY-u?qr>o2*OV7LQ=j)pQGv%4~z zz?X;qv*l$QSNjOuQZ>&WZs2^@G^Qas`T8iM{b19dS>DaXX~=jd4B2u`P;B}JjRBi# z_a@&Z5ev1-VphmKlZEZZd2-Lsw!+1S60YwW6@>+NQ=E5PZ+OUEXjgUaXL-E0fo(E* zsjQ{s>n33o#VZm0e%H{`KJi@2ghl8g>a~`?mFjw+$zlt|VJhSU@Y%0TWs>cnD&61fW4e0vFSaXZa4-c}U{4QR8U z;GV3^@(?Dk5uc@RT|+5C8-24->1snH6-?(nwXSnPcLn#X_}y3XS)MI_?zQ$ZAuyg+ z-pjqsw}|hg{$~f0FzmmbZzFC0He_*Vx|_uLc!Ffeb8#+@m#Z^AYcWcZF(^Os8&Z4g zG)y{$_pgrv#=_rV^D|Y<_b@ICleUv>c<0HzJDOsgJb#Rd-Vt@+EBDPyq7dUM9O{Yp zuGUrO?ma2wpuJuwl1M=*+tb|qx7Doj?!F-3Z>Dq_ihFP=d@_JO;vF{iu-6MWYn#=2 zRX6W=`Q`q-+q@Db|6_a1#8B|#%hskH82lS|9`im0UOJn?N#S;Y0$%xZw3*jR(1h5s z?-7D1tnIafviko>q6$UyqVDq1o@cwyCb*})l~x<@s$5D6N=-Uo1yc49p)xMzxwnuZ zHt!(hu-Ek;Fv4MyNTgbW%rPF*dB=;@r3YnrlFV{#-*gKS_qA(G-~TAlZ@Ti~Yxw;k za1EYyX_Up|`rpbZ0&Iv#$;eC|c0r4XGaQ-1mw@M_4p3vKIIpKs49a8Ns#ni)G314Z z8$Ei?AhiT5dQGWUYdCS|IC7r z=-8ol>V?u!n%F*J^^PZ(ONT&$Ph;r6X;pj|03HlDY6r~0g~X#zuzVU%a&!fs_f|m?qYvg^Z{y?9Qh7Rn?T*F%7lUtA6U&={HzhYEzA`knx1VH> z{tqv?p@I(&ObD5L4|YJV$QM>Nh-X3cx{I&!$FoPC_2iIEJfPk-$;4wz>adRu@n`_y z_R6aN|MDHdK;+IJmyw(hMoDCFCQ(6?hCAG5&7p{y->0Uckv# zvooVuu04$+pqof777ftk<#42@KQ((5DPcSMQyzGOJ{e9H$a9<2Qi_oHjl{#=FUL9d z+~0^2`tcvmp0hENwfHR`Ce|<1S@p;MNGInXCtHnrDPXCKmMTZQ{HVm_cZ>@?Wa6}O zHsJc7wE)mc@1OR2DWY%ZIPK1J2p6XDO$ar`$RXkbW}=@rFZ(t85AS>>U0!yt9f49^ zA9@pc0P#k;>+o5bJfx0t)Lq#v4`OcQn~av__dZ-RYOYu}F#pdsl31C^+Qgro}$q~5A<*c|kypzd} ziYGZ~?}5o`S5lw^B{O@laad9M_DuJle- z*9C7o=CJh#QL=V^sFlJ0c?BaB#4bV^T(DS6&Ne&DBM_3E$S^S13qC$7_Z?GYXTpR@wqr70wu$7+qvf-SEUa5mdHvFbu^7ew!Z1a^ zo}xKOuT*gtGws-a{Tx}{#(>G~Y_h&5P@Q8&p!{*s37^QX_Ibx<6XU*AtDOIvk|^{~ zPlS}&DM5$Ffyu-T&0|KS;Wnaqw{9DB&B3}vcO14wn;)O_e@2*9B&0I_ zZz{}CMxx`hv-XouY>^$Y@J(_INeM>lIQI@I>dBAqq1)}?Xmx(qRuX^i4IV%=MF306 z9g)i*79pP%_7Ex?m6ag-4Tlm=Z;?DQDyC-NpUIb#_^~V_tsL<~5<&;Gf2N+p?(msn zzUD~g>OoW@O}y0@Z;RN)wjam`CipmT&O7a|YljZqU=U86 zedayEdY)2F#BJ6xvmW8K&ffdS*0!%N<%RB!2~PAT4AD*$W7yzHbX#Eja9%3aD+Ah2 zf#T;XJW-GMxpE=d4Y>}jE=#U`IqgSoWcuvgaWQ9j1CKzG zDkoMDDT)B;Byl3R2PtC`ip=yGybfzmVNEx{xi_1|Cbqj>=FxQc{g`xj6fIfy`D8fA z##!-H_e6o0>6Su&$H2kQTujtbtyNFeKc}2=|4IfLTnye#@$Au7Kv4)dnA;-fz@D_8 z)>irG$)dkBY~zX zC!ZXLy*L3xr6cb70QqfN#Q>lFIc<>}>la4@3%7#>a1$PU&O^&VszpxLC%*!m-cO{B z-Y}rQr4$84(hvy#R69H{H zJ*O#uJh)TF6fbXy;fZkk%X=CjsTK}o5N1a`d7kgYYZLPxsHx%9*_XN8VWXEkVJZ%A z1A+5(B;0^{T4aPYr8%i@i32h)_)|q?9vws)r+=5u)1YNftF5mknwfd*%jXA2TeP}Z zQ!m?xJ3?9LpPM?_A3$hQ1QxNbR&}^m z!F999s?p^ak#C4NM_x2p9FoXWJ$>r?lJ)2bG)sX{gExgLA2s5RwHV!h6!C~d_H||J z>9{E{mEv{Z1z~65Vix@dqM4ZqiU|!)eWX$mwS5mLSufxbpBqqS!jShq1bmwCR6 z4uBri7ezMeS6ycaXPVu(i2up$L; zjpMtB`k~WaNrdgM_R=e#SN?Oa*u%nQy01?()h4A(jyfeNfx;5o+kX?maO4#1A^L}0 zYNyIh@QVXIFiS0*tE}2SWTrWNP3pH}1Vz1;E{@JbbgDFM-_Mky^7gH}LEhl~Ve5PexgbIyZ(IN%PqcaV@*_`ZFb=`EjspSz%5m2E34BVT)d=LGyHVz@-e%9Ova*{5@RD;7=Ebkc2GP%pIP^P7KzKapnh`UpH?@h z$RBpD*{b?vhohOKf-JG3?A|AX|2pQ?(>dwIbWhZ38GbTm4AImRNdv_&<99ySX;kJ| zo|5YgbHZC#HYgjBZrvGAT4NZYbp}qkVSa;C-LGsR26Co+i_HM&{awuO9l)Ml{G8zD zs$M8R`r+>PT#Rg!J(K6T4xHq7+tscU(}N$HY;Yz*cUObX7J7h0#u)S7b~t^Oj}TBF zuzsugnst;F#^1jm>22*AC$heublWtaQyM6RuaquFd8V#hJ60Z3j7@bAs&?dD#*>H0SJaDwp%U~27>zdtn+ z|8sZzklZy$%S|+^ie&P6++>zbrq&?+{Yy11Y>@_ce@vU4ZulS@6yziG6;iu3Iu`M= zf3rcWG<+3F`K|*(`0mE<$89F@jSq;j=W#E>(R}2drCB7D*0-|D;S;(;TwzIJkGs|q z2qH{m_zZ+el`b;Bv-#bQ>}*VPYC|7`rgBFf2oivXS^>v<&HHTypvd4|-zn|=h=TG{ z05TH2+{T%EnADO>3i|CB zCu60#qk`}GW{n4l-E$VrqgZGbI zbQW690KgZt4U3F^5@bdO1!xu~p@7Y~*_FfWg2CdvED5P5#w#V46LH`<&V0{t&Ml~4 zHNi7lIa+#i+^Z6EnxO7KJQw)wD)4~&S-Ki8)3=jpqxmx6c&zU&<&h%*c$I(5{1HZT zc9WE}ijcWJiVa^Q^xC|WX0habl89qycOyeViIbi(LFsEY_8a|+X^+%Qv+W4vzj>`y zpuRnjc-eHNkvXvI_f{=*FX=OKQzT?bck#2*qoKTHmDe>CDb&3AngA1O)1b}QJ1Tun z_<@yVEM>qG7664Pa@dzL@;DEh`#?yM+M|_fQS<7yv|i*pw)|Z8)9IR+QB7N3v3K(wv4OY*TXnH&X0nQB}?|h2XQeGL^q~N7N zDFa@x0E(UyN7k9g%IFq7Sf+EAfE#K%%#`)!90_)Dmy3Bll&e1vHQyPA87TaF(xbqMpDntVp?;8*$87STop$!EAnGhZ?>mqPJ(X zFsr336p3P{PpZCGn&^LP(JjnBbl_3P3Kcq+m}xVFMVr1zdCPJMDIV_ki#c=vvTwbU z*gKtfic&{<5ozL6Vfpx>o2Tts?3fkhWnJD&^$&+Mh5WGGyO7fG@6WDE`tEe(8<;+q z@Ld~g08XDzF8xtmpIj`#q^(Ty{Hq>t*v`pedHnuj(0%L(%sjkwp%s}wMd!a<*L~9T z9MM@s)Km~ogxlqEhIw5(lc46gCPsSosUFsgGDr8H{mj%OzJz{N#;bQ;KkV+ZWA1(9 zu0PXzyh+C<4OBYQ0v3z~Lr;=C@qmt8===Ov2lJ1=DeLfq*#jgT{YQCuwz?j{&3o_6 zsqp2Z_q-YWJg?C6=!Or|b@(zxTlg$ng2eUQzuC<+o)k<6^9ju_Z*#x+oioZ5T8Z_L zz9^A1h2eFS0O5muq8;LuDKwOv4A9pxmOjgb6L*i!-(0`Ie^d5Fsgspon%X|7 zC{RRXEmYn!5zP9XjG*{pLa)!2;PJB2<-tH@R7+E1cRo=Wz_5Ko8h8bB$QU%t9#vol zAoq?C$~~AsYC|AQQ)>>7BJ@{Cal)ZpqE=gjT+Juf!RD-;U0mbV1ED5PbvFD6M=qj1 zZ{QERT5@(&LQ~1X9xSf&@%r|3`S#ZCE=sWD`D4YQZ`MR`G&s>lN{y2+HqCfvgcw3E z-}Kp(dfGG?V|97kAHQX+OcKCZS`Q%}HD6u*e$~Ki&Vx53&FC!x94xJd4F2l^qQeFO z?&JdmgrdVjroKNJx64C!H&Vncr^w zzR#XI}Dn&o8jB~_YlVM^+#0W(G1LZH5K^|uYT@KSR z^Y5>^*Bc45E1({~EJB(t@4n9gb-eT#s@@7)J^^<_VV`Pm!h7av8XH6^5zO zOcQBhTGr;|MbRsgxCW69w{bl4EW#A~);L?d4*y#j8Ne=Z@fmJP0k4{_cQ~KA|Y#_#BuUiYx8y*za3_6Y}c=GSe7(2|KAfhdzud!Zq&}j)=o4 z7R|&&oX7~e@~HmyOOsCCwy`AR+deNjZ3bf6ijI_*tKP*_5JP3;0d;L_p(c>W1b%sG zJ*$wcO$ng^aW0E(5ldckV9unU7}OB7s?Wx(761?1^&8tA5y0_(ieV>(x-e@}1`lWC z-YH~G$D>#ud!SxK2_Iw{K%92=+{4yb-_XC>ji&j7)1ofp(OGa4jjF;Hd*`6YQL+Jf zffg+6CPc8F@EDPN{Kn96yip;?g@)qgkPo^nVKFqY?8!=h$G$V=<>%5J&iVjwR!7H0 z$@QL|_Q81I;Bnq8-5JyNRv$Y>`sWl{qhq>u+X|)@cMlsG!{*lu?*H`Tp|!uv z9oEPU1jUEj@ueBr}%Y)7Luyi)REaJV>eQ{+uy4uh0ep0){t;OU8D*RZ& zE-Z-&=BrWQLAD^A&qut&4{ZfhqK1ZQB0fACP)=zgx(0(o-`U62EzTkBkG@mXqbjXm z>w`HNeQM?Is&4xq@BB(K;wv5nI6EXas)XXAkUuf}5uSrZLYxRCQPefn-1^#OCd4aO zzF=dQ*CREEyWf@n6h7(uXLNgJIwGp#Xrsj6S<^bzQ7N0B0N{XlT;`=m9Olg<>KL}9 zlp>EKTx-h|%d1Ncqa=wnQEuE;sIO-f#%Bs?g4}&xS?$9MG?n$isHky0caj za8W+B^ERK#&h?(x)7LLpOqApV5F>sqB`sntV%SV>Q1;ax67qs+WcssfFeF3Xk=e4^ zjR2^(%K1oBq%0%Rf!y&WT;lu2Co(rHi|r1_uW)n{<7fGc-c=ft7Z0Q}r4W$o$@tQF#i?jDBwZ8h+=SC}3?anUp3mtRVv9l#H?-UD;HjTF zQ*>|}e=6gDrgI9p%c&4iMUkQa4zziS$bO&i#DI$Wu$7dz7-}XLk%!US^XUIFf2obO zFCTjVEtkvYSKWB;<0C;_B{HHs~ax_48^Cml*mjfBC5*7^HJZiLDir(3k&BerVIZF8zF;0q80eX8c zPN4tc+Dc5DqEAq$Y3B3R&XPZ=AQfFMXv#!RQnGecJONe0H;+!f^h5x0wS<+%;D}MpUbTNUBA}S2n&U59-_5HKr{L^jPsV8B^%NaH|tUr)mq=qCBv_- ziZ1xUp(ZzxUYTCF@C}To;u60?RIfTGS?#JnB8S8@j`TKPkAa)$My+6ziGaBcA@){d z91)%+v2_ba7gNecdj^8*I4#<11l!{XKl6s0zkXfJPxhP+@b+5ev{a>p*W-3*25c&} zmCf{g9mPWVQ$?Sp*4V|lT@~>RR)9iNdN^7KT@>*MU3&v^3e?=NTbG9!h6C|9zO097 zN{Qs6YwR-5$)~ z`b~qs`a1Dbx8P>%V=1XGjBptMf%P~sl1qbHVm1HYpY|-Z^Dar8^HqjIw}xaeRlsYa zJ_@Apy-??`gxPmb`m`0`z`#G7*_C}qiSZe~l2z65tE~IwMw$1|-u&t|z-8SxliH00 zlh1#kuqB56s+E&PWQ7Nz17?c}pN+A@-c^xLqh(j;mS|?>(Pf7(?qd z5q@jkc^nA&!K-}-1P=Ry0yyze0W!+h^iW}7jzC1{?|rEFFWbE^Yu7Y}t?jmP-D$f+ zmqFT7nTl0HL|4jwGm7w@a>9 zKD)V~+g~ysmei$OT5}%$&LK8?ib|8aY|>W3;P+0B;=oD=?1rg+PxKcP(d;OEzq1CKA&y#boc51P^ZJPPS)z5 zAZ)dd2$glGQXFj$`XBBJyl2y-aoBA8121JC9&~|_nY>nkmW>TLi%mWdn-^Jks-Jv| zSR*wij;A3Fcy8KsDjQ15?Z9oOj|Qw2;jgJiq>dxG(2I2RE- z$As!#zSFIskebqU2bnoM^N<4VWD2#>!;saPSsY8OaCCQqkCMdje$C?Sp%V}f2~tG5 z0whMYk6tcaABwu*x)ak@n4sMElGPX1_lmv@bgdI2jPdD|2-<~Jf`L`@>Lj7{<-uLQ zE3S_#3e10q-ra=vaDQ42QUY^@edh>tnTtpBiiDVUk5+Po@%RmuTntOlE29I4MeJI?;`7;{3e4Qst#i-RH6s;>e(Sc+ubF2_gwf5Qi%P!aa89fx6^{~A*&B4Q zKTF|Kx^NkiWx=RDhe<{PWXMQ;2)=SC=yZC&mh?T&CvFVz?5cW~ritRjG2?I0Av_cI z)=s!@MXpXbarYm>Kj0wOxl=eFMgSMc?62U#2gM^li@wKPK9^;;0_h7B>F>0>I3P`{ zr^ygPYp~WVm?Qbp6O3*O2)(`y)x>%ZXtztz zMAcwKDr=TCMY!S-MJ8|2MJCVNUBI0BkJV6?(!~W!_dC{TS=eh}t#X+2D>Kp&)ZN~q zvg!ogxUXu^y(P*;Q+y_rDoGeSCYxkaGPldDDx)k;ocJvvGO#1YKoQLHUf2h_pjm&1 zqh&!_KFH03FcJvSdfgUYMp=5EpigZ*8}7N_W%Ms^WSQ4hH`9>3061OEcxmf~TcYn5_oHtscWn zo5!ayj<_fZ)vHu3!A!7M;4y1QIr8YGy$P2qDD_4+T8^=^dB6uNsz|D>p~4pF3Nrb6 zcpRK*($<~JUqOya#M1=#IhOZ zG)W+rJS-x(6EoVz)P zsSo>JtnChdj9^);su%SkFG~_7JPM zEDz3gk2T7Y%x>1tWyia|op(ilEzvAujW?Xwlw>J6d7yEi8E zv30riR|a_MM%ZZX&n!qm0{2agq(s?x9E@=*tyT$nND+{Djpm7Rsy!+c$j+wqMwTOF zZL8BQ|I`<^bGW)5apO{lh(Asqen?_U`$_n0-Ob~Yd%^89oEe%9yGumQ_8Be+l2k+n zCxT%s?bMpv|AdWP7M1LQwLm|x+igA~;+iK-*+tClF&ueX_V}>=4gvZ01xpubQWXD_ zi?Un>&3=$fu)dgk-Z;0Ll}HK5_YM->l^Czrd0^cJ))(DwL2g3aZuza7ga9^|mT_70 z))}A}r1#-(9cxtn<9jGRwOB4hb9kK@YCgjfOM-90I$8@l=H^`K$cyhe2mTM|FY9vW znH~h)I<_aa#V1xmhk?Ng@$Jw-s%a!$BI4Us+Df+?J&gKAF-M`v}j`OWKP3>6`X`tEmhe#y*(Xm$_^Ybbs=%;L7h zp7q^C*qM}Krqsinq|WolR99>_!GL#Z71Hhz|IwQQv<>Ds09B?Je(lhI1(FInO8mc} zl$RyKCUmfku+Cd^8s0|t+e}5g7M{ZPJQH=UB3(~U&(w#Bz#@DTDHy>_UaS~AtN>4O zJ-I#U@R($fgupHebcpuEBX`SZ>kN!rW$#9>s{^3`86ZRQRtYTY)hiFm_9wU3c`SC8 z-5M%g)h}3Pt|wyj#F%}pGC@VL`9&>9P+_UbudCkS%y2w&*o})hBplrB*@Z?gel5q+ z%|*59(sR9GMk3xME}wd%&k?7~J)OL`rK#4d-haC7uaU8-L@?$K6(r<0e<;y83rK&` z3Q!1rD9WkcB8WBQ|WT|$u^lkr0UL4WH4EQTJyk@5gzHb18cOte4w zS`fLv8q;PvAZyY;*Go3Qw1~5#gP0D0ERla6M6#{; zr1l?bR}Nh+OC7)4bfAs(0ZD(axaw6j9v`^jh5>*Eo&$dAnt?c|Y*ckEORIiJXfGcM zEo`bmIq6rJm`XhkXR-^3d8^RTK2;nmVetHfUNugJG(4XLOu>HJA;0EWb~?&|0abr6 zxqVp@p=b3MN^|~?djPe!=eex(u!x>RYFAj|*T$cTi*Sd3Bme7Pri1tkK9N`KtRmXf zZYNBNtik97ct1R^vamQBfo9ZUR@k*LhIg8OR9d_{iv#t)LQV91^5}K5u{eyxwOFoU zHMVq$C>tfa@uNDW^_>EmO~WYQd(@!nKmAvSSIb&hPO|}g-3985t?|R&WZXvxS}Kt2i^eRe>WHb_;-K5cM4=@AN1>E&1c$k!w4O*oscx(f=<1K6l#8Exi)U(ZiZ zdr#YTP6?m1e1dOKysUjQ^>-MR={OuD00g6+(a^cvcmn#A_%Fh3Of%(qP5nvjS1=(> z|Ld8{u%(J}%2SY~+$4pjy{()5HN2MYUjg1X9umxOMFFPdM+IwOVEs4Z(olynvT%G) zt9|#VR}%O2@f6=+6uvbZv{3U)l;C{tuc zZ{K$rut=eS%3_~fQv^@$HV6#9)K9>|0qD$EV2$G^XUNBLM|5-ZmFF!KV)$4l^KVj@ zZ4fI}Knv*K%zPqK77}B-h_V{66VrmoZP2>@^euu8Rc}#qwRwt5uEBWcJJE5*5rT2t zA4Jpx`QQ~1Sh_n_a9x%Il!t1&B~J6p54zxAJx`REov${jeuL8h8x-z=?qwMAmPK5i z_*ES)BW(NZluu#Bmn1-NUKQip_X&_WzJy~J`WYxEJQ&Gu7DD< z&F9urE;}8S{x4{yB zaq~1Zrz%8)<`prSQv$eu5@1RY2WLu=waPTrn`WK%;G5(jt^FeM;gOdvXQjYhax~_> z{bS_`;t#$RYMu-;_Dd&o+LD<5Afg6v{NK?0d8dD5ohAN?QoocETBj?y{MB)jQ%UQ}#t3j&iL!qr@#6JEajR3@^k5wgLfI9S9dT2^f`2wd z%I#Q*@Ctk@w=(u)@QC}yBvUP&fFRR-uYKJ){Wp3&$s(o~W7OzgsUIPx0|ph2L1(r*_Pa@T@mcH^JxBjh09#fgo|W#gG7}|)k&uD1iZxb0 z@|Y)W79SKj9sS&EhmTD;uI#)FE6VwQ*YAr&foK$RI5H8_ripb$^=;U%gWbrrk4!5P zXDcyscEZoSH~n6VJu8$^6LE6)>+=o#Q-~*jmob^@191+Ot1w454e3)WMliLtY6~^w zW|n#R@~{5K#P+(w+XC%(+UcOrk|yzkEes=!qW%imu6>zjdb!B#`efaliKtN}_c!Jp zfyZa`n+Nx8;*AquvMT2;c8fnYszdDA*0(R`bsof1W<#O{v%O!1IO4WZe=>XBu_D%d zOwWDaEtX%@B>4V%f1+dKqcXT>m2!|&?}(GK8e&R=&w?V`*Vj)sCetWp9lr@@{xe6a zE)JL&;p}OnOO}Nw?vFyoccXT*z*?r}E8{uPtd;4<(hmX;d$rqJhEF}I+kD+m(ke;J z7Cm$W*CSdcD=RYEBhedg>tuT{PHqwCdDP*NkHv4rvQTXkzEn*Mb0oJz&+WfWIOS4@ zzpPJ|e%a-PIwOaOC7uQcHQ-q(SE(e@fj+7oC@34wzaBNaP;cw&gm{Z8yYX?V(lIv5 zKbg*zo1m5aGA4^lwJ|bAU=j3*d8S{vp!~fLFcK8s6%Ng55_qW_d*3R%e=34aDZPfD z&Le39j|ahp6E7B0*9OVdeMNrTErFatiE+=Z!XZ^tv0y%zZKXRTBuPyP&C{5(H?t)S zKV24_-TKpOmCPzU&by8R1Q5HY^@IDoeDA9MbgizgQ*F1Er~HVmvSU>vx}pZVQ&tr| zOtZl8vfY2#L<)gZ=ba&wG~EI*Vd?}lRMCf+!b5CDz$8~be-HKMo5omk$w7p4`Mym*IR8WiTz4^kKcUo^8Hkcsu14u z`Pkg`#-Y^A%CqJ0O@UF|caAulf68@(zhqp~YjzInh7qSN7Ov%Aj(Qz%{3zW|xubJ- ztNE_u_MO7Q_585r;xD?e=Er}@U1G@BKW5v$UM((eByhH2p!^g9W}99OD8VV@7d{#H zv)Eam+^K(5>-Ot~U!R$Um3prQmM)7DyK=iM%vy>BRX4#aH7*oCMmz07YB(EL!^%F7?CA#>zXqiYDhS;e?LYPTf(bte6B ztrfvDXYG*T;ExK-w?Knt{jNv)>KMk*sM^ngZ-WiUN;=0Ev^GIDMs=AyLg2V@3R z7ugNc45;4!RPxvzoT}3NCMeK$7j#q3r_xV(@t@OPRyoKBzHJ#IepkDsm$EJRxL)A* zf{_GQYttu^OXr$jHQn}zs$Eh|s|Z!r?Yi+bS-bi+PE*lH zo|6ztu6$r_?|B~S#m>imI!kQP9`6X426uHRri!wGcK;J;`%sFM(D#*Le~W*t2uH`Q z(HEO9-c_`mhA@4QhbW+tgtt9Pzx=_*3Kh~TB$SKmU4yx-Ay&)n%PZPKg#rD4H{%Ke zdMY@rf5EAFfqtrf?Vmk&N(_d-<=bvfOdPrYwY*;5%j@O6@O#Qj7LJTk-x3LN+dEKy+X z>~U8j3Ql`exr1jR>+S4nEy+4c2f{-Q!3_9)yY758tLGg7k^=nt<6h$YE$ltA+13S<}uOg#XHe6 zZHKdNsAnMQ_RIuB;mdoZ%RWpandzLR-BnjN2j@lkBbBd+?i ze*!5mC}!Qj(Q!rTu`KrRRqp22c=hF6<^v&iCDB`n7mHl;vdclcer%;{;=kA(PwdGG zdX#BWoC!leBC4);^J^tPkPbIe<)~nYb6R3u{HvC!NOQa?DC^Q`|_@ zcz;rk`a!4rSLAS>_=b@g?Yab4%=J3Cc7pRv8?_rHMl_aK*HSPU%0pG2Fyhef_biA!aW|-(( z*RIdG&Lmk(=(nk28Q1k1Oa$8Oa-phG%Mc6dT3>JIylcMMIc{&FsBYBD^n@#~>C?HG z*1&FpYVvXOU@~r2(BUa+KZv;tZ15#RewooEM0LFb>guQN;Z0EBFMFMZ=-m$a3;gVD z)2EBD4+*=6ZF?+)P`z@DOT;azK0Q4p4>NfwDR#Pd;no|{q_qB!zk1O8QojE;>zhPu z1Q=1z^0MYHo1*``H3ex|bW-Zy==5J4fE2;g6sq6YcXMYK5i|S^9(OSw#v!3^!EB<% zZF~J~CleS`V-peStyf*I%1^R88D;+8{{qN6-t!@gTARDg^w2`uSzFZbPQ!)q^oC}m zPo8VOQxq2BaIN`pAVFGu8!{p3}(+iZ`f4ck2ygVpEZMQW38nLpj3NQx+&sAkb8`}P3- zc>N*k6AG?r}bfO6_vccTuKX+*- z7W4Q#2``P0jIHYs)F>uG#AM#I6W2)!Nu2nD5{CRV_PmkDS2ditmbd#pggqEgAo%5oC?|CP zGa0CV)wA*ko!xC7pZYkqo{10CN_e00FX5SjWkI3?@XG}}bze!(&+k2$C-C`6temSk z_YyYpB^wh3woo`B zrMSTd4T?(X-jh`FeO76C(3xsOm9s2BP_b%ospg^!#*2*o9N;tf4(X9$qc_d(()yz5 zDk@1}u_Xd+86vy5RBs?LQCuYKCGPS;E4uFOi@V%1JTK&|eRf~lp$AV#;*#O}iRI2=i3rFL8{ zA^ptDZ0l6k-mq=hUJ0x$Y@J>UNfz~I5l63H(`~*v;qX`Z{zwsQQD-!wp0D&hyB8&Z z7$R07gIKGJ^%AvQ{4KM0edM39iFRx=P^6`!<1(s0t|JbB2tXs_B_IH9#ajH0C=-n+ z`nz`fKMBKLlf?2AC+|83M+0rqR%uhNGD;uKA6jOjp7YDe^4%0fRB<^bcjlS2KF~F; zu09wh1x0&4pG&76M;x8$u`b134t=dEPBn6PV|X29<#T4F1mxGF*HOgiWU8tN@cguI z_F@o+XL7FJztR63wC|j4x_DANzcX94r7Iz-O2x$({&qd*mdLG=-Rv)uZ}UlMR+F&q zU}=lkfb0p1>1Ho){o$@}mSKIV;h*$AND7~Dl)QzpFBlSM99Kx+F7GsVK5xcR? z_4Q(Z%cgk8ST}U;;=!LwyZVu^S$>B-Waeik%wzcKTIqeX=0FP(TGQ=nxi=dsS5BYF zl@?}NT!Y!Iyos^@v7XWXA{_bV~1lxz7gC?xuXxy0_?GaN!AhRRM5>)^t%&ODd;@HN5L{MD3 zc>i2keQZVm#?NrDwbfd}_<*5^U&w0zv~n-y8=GGN-!=_`FU^cM8oVCWRFxw?BM^YD zi=Vxz4q|jwPTg+?q7_XI)-S@gQkh>w0ZUB}a{^ z_i;`Y(~fvpI!vmW*A^|P7(6+@C4UeL2WATf{P1?H5rk`5{TL zcf!CgP6Mi{MvjZS)rfo7JLDZK7M7ANd$3`{j9baD*7{#Zu-33fOYUzjvtKzR2)_T1I1s7fe&z|=)QkX;=`zX8!Byw-veM#yr;|wjO^II>!B*B z0+w%;0(=*G3V@88t!}~zx)&do(uF=073Yeh*fEhZb3Vn>t!m(9p~Y_FdV3IgR)9eT z)~e9xpI%2deTWyHlXA(7srrfc_`7ACm!R>SoIgkuF8 z!wkOhrixFy9y@)GdxAntd!!7@=L_tFD2T5OdSUO)I%yj02le`qeQ=yKq$g^h)NG;# za(0J@#VBi^5YI|QI=rq{KlxwGabZJ0dKmfWDROkcM}lUN$@DV`K7fU?8CP2H23QPi zG?YF*=Vn=kTK*#Y_{AQN&oLju|0#E=fx%YVh>S{puu&K$b;BN*jIo@VYhqPiJPzzM>#kxoy0vW9i;ne2_BIG0zyRFp<3M(iY(%*M_>q0ulV2K}Tg zkG{EWKS{i%4DUuHi%DVKy%e+Q!~Uf`>>F6NgD{{I8~nO4!VgOvtFOc7(O)X`|7n*f zxBa4CJ-v9fUUH+`7sPVvpM_C*udZ@OTGTzx56QM5y~OlrZc&w9=)B?nmd@keRn+^= zvm~4sa5987LFDnU{(N|N zJAR8H@}p1fC+H(yTI4n#%~TbImMpuqYn9cQ<0QQ%=PzZItLkC*ef9WJUvfITKWh#D zc#__8`4am9%#NslIUw+<82#SR8AYG|woLfBg#!-&dqq}@P>|I0%lbdy0lSMmNe+}o zj0zZuFr6Wb?Y{Qy-S=|r`bdrDmhnmvkRnkdn`YCleU>Q$=je}LGhh>_QAj6aa_0Oc z%Swsmui;IRx7bN*=AAS@5yW&Y2hy;3&|HAiA8}!HT6!Z!RVn~MZg`RmI6&%#tBZDx zfD+y@Z~NWlk*4l13vmt3AK2wP!fQlnBbECL>?p)F?T)<`w&QN>cP_V>r7UTcsTaaP zTOb$f!P@zf$6>890NVKbIkG8rE?9!Y97sMSZjfF?A zYR8lp`LMoz~O?iaZN;gcX;LC-%Ia*R%A&SLx!YIf29?P+=XAAojK8!^OU*@?R&DK!#G_lsn!#;S375uZ&B0HH1|BO0R90$U>qs zSvHv>H~mAgNCcjo-e+;RjY6B9NCbQrZ|BHjTkehaU<9CSkdd>Vl*ifA2LNOP&R2Qdy3k3-TQ+ zbq=#vI43x`s=%~cGyN&y4Y!FxhwgDe@i6uv8^BLL&3z*SO=D0aLjih?gY4-9uWp5or)H+v~w6n5X#F-I52z=Z_p4JB(;M| zeaVFhuR2|3UD2MzVc~^nSoD2(dD#uL_1PdnIxeA{V5n`#3xf1Zx@4lw(DsQ&H$h zw#%3O<1173hjg2_nhKi!d1ej=h7y`hVjCNB6|HTnx>SWuCE-kgTnfT+YGX4_Lun({ zDv2`>d3vrS)tTf7ps_vvh!Cx^e1BFuWnEAh0(7fkNk|-3oU|iRWdsC6U)?Raft~HN z;^$U}vZK5O8|LV$>6X5T(uYkblv{zwPxnQBh(BQ5tA~J!vGiAMYP^_ki~pkIxDfOZ zUJDwq%O~WueeV6%uN<54&u*c&E4y431cklBNrb06zGOOy4XNT~JS-q(s6@)F@ovbe ze`fial(O4(-su%6@@1+V0MsdLLMyE8;)nou(7}czU(5ASaZYDT(kUZ0L(&g$nF^n9 z9-Pi`ZZLX&)^*M6As4_2Mmc9S7OT)F8KkL2NJ)KJcnCuWU=Wy402A&45#Q9Id~BBH z0cY*xlv!uXzKrXLH!xQu(OtJvEj|0-DmRj1vjFz{c*I4$Pe(+_V|^b~S!0xm{8lq= zZv)@NlcyL3Xdz+*|L137F7y6L-2VsrKw=q^S>F6i%<{Fr8zk06$Ay-(!L$fY@7mcng!2}L0t zgi|KxfB63Xtk_Q8#ZPipQ@!zgjdpEIbK_?q17Hoi4Eiyun$hrc>T(7pOLVLQE=lgGwA+A308p& z7@=09(|$>eLy5gLe{*|3b(M;1n;C^~v?o88jYib48eR4$QGsBFzd}3QuwO^_XE(=B zq+hMi0UFC|dB{LCwch7;zYT=NK})O%sgi0k#yV;My@24^B1+CuZmYOh0^b)5Ba_)) zC%i#_Iev&nsu%I|1N5=MVc#PrlunKAs&hY|3s5;@}`>sB>}gzxuB zB=2vrRyB3uiyW(hkDUNe1@&(b`;>ZvGgw|@s{zVC#_`HXIN_^J@Etb zA7A+F?ot37T{<-vTy8h&b3e+WKHE1oh;pUQrN4yRRrx?mT_9jRa2i4l1fUnLW^Cbl z!I1>VzyFe?VELWWhM?@?t-YPZkD-Qjo@bC2(o#ZtZmr{KZsdFWItV`rs$gp{724@C zL8K5}E0+DHcWcL^{BGei4>@J-3%a#$y6;I}=upc};-NDv-z#kPX26ylOpH)Ov1uU{ zkLj6oiH6l_s+B~_z;|Jc2oi?naS7#3H63~~lWj4rUnd=fCnKdkik<@R&kch9q##G{ z4u!%=rlM~Yp3jk*t8}1B`Sv6<%Z^}~1e@aq zg|JQ`QO2pSjAm-g*?IrNc$^~sIrNBo2$m|Sxanr?Mfs>2@Auu49 zGXlsS<9XS1&8h(dD*Hl&5HBDG!^pJ*lkau_Ur+7`7z;rcs$hT4we?3bT=7Fe<>{5( z2m2(c+hUz2BTHM8dCe*Z3XX&Av;b~a=$6EF>&^E8%nyxO@m_n!q&XD^A{SRjRZQ0L~qDeC=j&0$j6=LNIz@`ni^>ch|sv}^6 zlm>?28yPl@WmDPR?Y-A9X{U9Dv_IsbXJnzKCjkRksLOg#42uG2mE_acbTQ4)J|1V>%U@K(FP3AYhL0U zdeOCPN1qLv!|#c=p!_+%VNV(GHt`RuLRV^vz<5tt-r)yOK**kUWPspVAf|}ZL{LS= z@k(@@!P&W!>wwe`x{+GrFSWhHov7hu?{KuuT%kl#WO@*WX$i_@retlhQBj++SVNCx z5$78LxP>Z=^aJ)D280r_jj=zFfMJFXCIe^B{~V@d1rl_F(qo&AB4bC-vYL>x2jSKX zpuTG-6kgp3e^T&+dtV*i6a~)v@n?n*MffN59y}<0djUX zt27R+SE#hp8bzc#;rk$jw3r4)Q@eI$*`_)=Pvge8@8|8>H3X)<9YX6cXa=ii#Le;(qKm@%0-7$>2ShnYc`j#zJ7gu_FE^?uAkL|H)UIH#gPu^40!6^J=^ zr`}iwa^!4tzW~vOMZAaKF>*8A{^8m$i(VK)>?=#l`xrVe>wseSvM_aF zATNkY>kM_P3?1kE`uIq#mvr-wuTgUH0N<&JhF=(E9%^NS*HLm!4GZ4_XI zL=R5tlG5Mk_1rPfg)sk^llFuKPMPBhuU|L5q#yP_mzxp1o&pAzi-X31sgFpIHn@($ z_>=`AB5(8tP6p2zS5VEvH5J$M` z_much3>S7t3Yo`Yx!>83-hW9LYzDKP?mKdkD#QAK8*M((sx{eBQdrR<^3ZhFP81+& zBnJMUefQyNBji~$5d88Wfw1Lv59aJN9t2!pABLg;ewJ#LXL-10;QcJl+Y4Mtngb)k6JZlCf)3uD_u)J3sYyN;NN5hNbg$%W!i-GK%e&!Us)2IExWSss$YG(hm3kJ-h%yD z>8q^n$+4I(_y_mbT{du4P%h1j3oSpjhY97{+IZ`aA4ug!vNJ6*p?<2H(2w+GD3j$I z1TUXGyNzdf>_yB3grP~FZUs<2Quw;eEi*7s(-MiIkQ%@J^+WGdQvYSUN+TRiD-xto zJ=OUU+kxGYc!HCLNbCvR4lGTp~#L;DFzGd-#gJe*xf(P3hDQz|y)?b9mwU3WUVnpcqXM<@w%r-k*Wr^gzAv)8T^sqA=Ye z!7qy&exJmAcAt~CwS#@yNmjr8*T*!A6w4~E*ibaLRs0CFo(;R3=ODhDt6zWNodmo0 zXx&bT$6&+5c>a|WJ)F4G-^GjY0H#*tY=UNyYr_q5fsrcjk(c^~e*7Lf`!Jd`)p412 zn|^*hV= zFI4UbwA%X@smDd$cQOiMC%jfitTxTb+#`9`G=2rJDfK!E=5ra|So>lc{X1$~w28i+ z4p&cTGwZ#5VueiXS9O8#;RR$yg7tL9!^)Sz&pZYIzlSh}0}V{LxL$Cu%B4U5_}k}- zm~|CsD<076x@<>m=6w6N?WaThIBP`!u{-;WF)xc=2otx*lwf|5+MkdJePjh(B z9SH+%cHGCMAXNxB{_3^otDWdsV7Ob6n{0 z+&!(;iaHOX__5z_$Qk{%xYV%Ig@7iokGBwR`3642ZP#H#v9QGbWl8<|MS*=@qO@Uj z6+SZ_v9`1paUe5tFN~v(b#J3a_Lx0+;r9giZIx-A5TxdbG>xi#AZ5_z1V}B^n)sxT zz49}eK7EWb6wR!6-qQOrHQHkUvshvq%=G2d&@(#XM*Am1;WbnJ{X_!a{ZkphD$^TQ z=Iskb&}=lBm(RHiwJoGg`*NiQ6#RB$T#LF+>#ef;Jne&MxKPX!#r`&TVEFsp2jnNx>dClzpcPy&G&13a_<0qaR3i+k212~hoQ z8nMk{JP-t04I{GW5gUBqcJW-jSMrlw}>p)ptx?WKuCUV77taMiV zHok9V=6yv+Uts@fMY&A}amC=!Yj}eL@=e%XJ#%?agkt1jWF+10{(E9mHLDa>Ll7Vj zG=3cp%ljIB-6pC}6&`xJ*6WCP|IlglLWJ^?yviI8Ve)?V_i4%n;olzny62_`-|IGi z^=}p_O>Z8M;c4|RExu70E7ePW(HWVS&E$+LL6xSQgB`QfMQJ|4pCTFowA39p5P-|$ zUtM_H2HnP8_RoS~Vwk(FhbG zH41licj%=0a;Ln2STFBvU}Ne&O&%8bYKj!h1FA#sNM`232fX|U3QPp#3C?mN2;hE9 z;)!@5ixSPl<89^7gwhHc2YAX1KJK$#*3`KOMIQ253q7-*RJ5k)zp9GBO|Ga~X*^}US5oN@aG&waHV%vi~r{t^`ptTxb zL}q1W8S7*>7oWwvgV4uFLZ(@k`R*=LO_|Gu`prs~!WQXj-NLIa^2(7IHg>BG^N zc|i{-^=&Cek9dkJFQys|sjG9i>LLz|;yCv{^1i%c*h>8zF91kLvS9HBQi~ZU!JL`B zK8N+U0fr1*6??Ium)AF!6tc1eGhXIYL6IRT7rmKp7+>?%5Pa6zC5)KY$ycF0ZJ`G5nEQDG100U-jLkH8^UE4g6wq?sg%pP=-$&G#bcN`^?w3a6 z((s$6eRKcSEIslW-kk5Qi|5Mg-(xdLF}PxxVh$PuO}#aR6pW1kV4Af!Bqh*btXNNZ z>-4(IUl+L4dw+3LcpGut=qB45O+W)Q5?*zZ2A6rJcg`qkSvWA!j^r2mqKuCm6`Py? z@^T#Ux04HemPGd!Hs7NkZdVn1}8_j`o?)*OKZGS!`ff)gF zG?v-lj$wWNWCcw2Mg2o18D~1?3_b0XzdiKBNkYSDpcv@&kp0POmweJE2ZkIQ3B!a! zIgIoE+Xv?;34kyo^QYjZk+tEqZvq^#QG(OzX4~X+KtsoQoddTWUR(yo8R+ObEF1j<-syWOb>)JQ&Zbdu(sctU%Mt zW&YR0{ttY2TTXYZ?~WNU&cES1Z2q(7SrWDh``!J(JM+Nk$!hu&Y;(7E`ZNKTe0w+% zJc?Qnw2B+%UR}0;cB0Rufa(7-3FF}?629@LgTiEC&2uyL6NxexOp?AKT^aAx3gi(W zao>r>MPw0eQ3>IV02uLsC@>yK_epX6GRg4{NEL2wPPF9=*L2RV3yyK8DhuEK>rmmV z`&Q~#c`lgR&93TdOCja|ewOXmPNRh7!&dMT(1ett#iDr8HZW~VqWW@7fe9B6;7S+? zbC`d4@MEau&mKlOPKd>*10q0c{~^baw6!a*w^sY#0Xim{oOsiXiDOhbG&kl3c$$n1 zMRrD83&QucDSEcV*7LIp8VTA@F<%qe+_c`L;6on(>SjAU^}5c9!BCffT>$VQhe=)z z8(=Ej{5>jhmjB3{xDfj2R@VmHQ!CqjlO4KnuOmvHy3K#po$yp_V;p_MKjh1`(rzj6 zHW956k1yvntz{_g?Xbs`avK(IjlTnsu%htO;D7 z?J#x^EzuvVn&NA=!MEj7cwe5A-Z$Zk2LBZH$~%E* zf`((xH0?`}hs|HA%mtwfOEsZJxxrennkTYcwP#FKO5%Lpc^JXhSpV|ZH$Wr;`}`_( zIP==gd3LYyVtwD|*ZJGi{7~x8{=^bGVqu0RJ`n_BZH9+}kz%-4ZRsImi@rx%=ZEKs zcPnUXo6hbJV>fH;@1|bAHIe0ijYI*&kdT|HkDS$9No9 zCHo=*HWb~U+Dtzxr+Esao}6@|;Pf+E$ay0$kQp#s{wlw+7aIKbMdf`OqhoG*;Tco0 zjrP}VQG#Y2cJuqoJg&5({)S(BA}q9T1lGeWRyu=Je|)I!6a+aj!IP^1({)ZYe&x6w zt3a)Dq^TB+A7CdB0-}#z2Ur$W&h3YVw8==!xONy$uQmDWh-@15iEOt!q2m&?ZLA|w z8loSb(0}7y6Xu0?M5Uf4>VZGluB`wMf2oh;m)ghxVda>3m}4%V)r^0nVQ5V6f3>*) z0&VN!N0~GC^P}vj$`EDMZEmVV;N&RISY2C;$0;2(<{Lt&PKzqRByQdiEHGAbwtbS zPj`Da5%U6k1oEtVzI}QNw;!hT6F+~|@=c@$C4NtO@=xgP?|5MyZAyuCzcvq4rdAv@C06%gZ`9%I);R6UGiGJobfux+<0DLS&|MSG4UH z_~o{^^9>ixMg~mY!-@Fai{xaE4^;qy9iZN15Gbn5ZqHWf>Jc5Rv6(#n8`1NcCsdmG zab*dSXVPaE?)wCalD;$ivF%@nB#7D`@YG04p6ed9m}4iJW|pfVMLE<-c{=-8$e?cH zUdU#mCj4gb zZKA^b9p*9S(}8@tw~1RNPHr7tQr;P+-)D8|sq=*o)G%RGqt> zzP5yf`pVxb)I51D_G~Xp^GNK zVI6sAX)a9s)e{8N3?35YA6aQTXuyszK3ah~CemzA&CII#8F&F#KN41~8I^&_%}6MCNb{W87qAF`zj_Y^szhb> z3p3}KbOxotY|(lD=;)`fYE_*{S}x;f^SW#)SU&5X#o|-R|trpa|L5PS5aa0 zTHw8%SDSVtU4?vyrhnq+^@dgFS)|(y{~(4j%3UEiO-rBM9%`)8(dh33pMLiuurNY# z#10AsQ7%*0Cu_DSAU}P;X(JwA64~Q_^R%d_zSm^6Aux?Pn70PM>9EvLeOX z&w9c)pGmcL22;MO3C_B>=NC0RJpMp8?#ZUf=GWRvy z6RHq3B}=MGVg?9@iKFBpsvnkVh3{Vpp=`CcD=u~@ql{my|6?3ssi3mCOPnjI&E}VC zc@X+Yl>;;DNo0W0`0th!X{?luDhOC{E8N=?!w}K1{V=)+1={m(f`Oc|N=07>}3;z{-(A zm{JL=j?Sro5iecmE2-pWlRf(r%|HEQ7kgwQ9+kt=NBhtQI7OwcZ#3%$Uf%^r2nhjY zoQ08MfC%_X{O9~WcirMZMhn#z^ux4Erx-tf-6bHD)9eH&^L>^jvAd^9A^DCDs?0;k zkm7LE*KjP6`2d17MrQaaLqd_Rka}J$csvUec#hw78<=s(hyR>065~YCVCA9+#Q+; za(*L0IEw!r5P|@-;x33L$Lv9 zcuN8YG&g{<(SeJG18~(b!5yywSqQiLAX0;---;}mF5&b4lg|T?LwKREa{9YX_-zL@ZE?Zqi@HxK^2KO1>0LATu{te=T zprmHtY)bDVfxI1S}KBE7V zznP7KQ8HekWU#W6mw`dr-boV}pMQR==&5=Q5T=_q091jfc;R*jX#&=MQ%~@E@9^?`$v48ks<>(fI(F6L(5ppKy|$HWng*bKOb(4|cMUB&z$#ob#XV z5-mg)gmFIybZf=znm3ZPyUO^GJfxt0kmHjaTZ|sthsxXw&}Y)fOUSg=JhRSR^UjZ- zhqqb}Wsyw4zdnj6@#BAJa#-PdI4_dgafFXh85DsEQ_cT+5)XpZq$fZlBA_9UsE9r6 zEFec5?uqN@QhJ^IzwZrwl-5J`CmVPv{(YDTqEqWR^dI;5hXc~cxP%B3v&~s0`Ct89 z@S`i~a^c%V^N81dDT*ItFS*&IN;@O$EgzX0e7x&}TD=!zS}hTpezBLS>mdX(5< z)8DEI(-o_D)c-UX@dA1MuJ*yc>Hf4|`*B2S_O>w*-tbUwtiu`;W(Ud{HTty@(&x(T(F&;M zJ=?H>6`B7nf-90e8V`WSVp|0oEKB-P2M{}4ZDawzvM&a!y>`Y#jCsD%T_l``@ah(I2nJs~Q|%uSKu@k!m~*8B*IoA{*TgtF<(5sHCGG;n@NE%~Xt(G$^&<87u;}Na zx-8cq0g`uA(&RBFo=-4Y1GUZ<``Zw{xL4jfHkZw~%~wvtGueszcXt)_QwH8g!; z%s&3kSa~R$dO$-%L-)c@_hi7&>{6L_M>OZFkUQu;{sL_bUMStNrt{{&O(Wn~*zPOk zB>dnfszb29NSTf2pqIs68k|p-UrSrxgLHqi?3N-UFa!LHy9n1)=s>`yS+J{MEzS@ zNlfGtpma7kG&LR3JE@wB%rFA*h~~KitlO=IP)ZjN6dQLM6qsry zHkB#cyNh#n`)}bCrN1My*;k)^@>e4gJ`LJK?2)Pwp?4Tl4)4FA0(tvY+#1jOUM)xw zlMz4x-f@g^+yKUN`?Vu)|AwujArnM~Pa@y*Q9S8eS(u{-S%(Z5=R~pRl5ZGDjdqH% zC8rW&{##wOpU_oTIG4WXMk4&%2t1;lWcW5&!yxmOT*!hBcKyTqEcNoO+R2;Q?Yj+W z1-Y4?59fijz4(MIDwGe4-baYf08UCs;r|YefD-Md2ST;=cxwpgW=tR76-dQVAhn^= zG9Wk5lQk%jIR@KNU!UMp6@BfU;r+;y4VQ)D2!Il9HX%yW-9nOzV+m$YKzVaO`B8S7t z$!S2Mz`xw>V(RjE`0>bQp<0y&h~Y=M#jpy!#=dE>`=e_AjSZq6u!Dy1xJf~-7|0F! zPR9|n`e_7D2DIV2H(CESQ}hA>U>n|6`%z?YKEA~)BOVY%y=jPV zT=44R!L?J)736X#csn|lfBJ)o8ixaZclguWgrGO<`TN2FMfO}7;5}d+BlK0yTSH3* z4!=;5rOh85&2|x=46hkNaz?)U8&=bcfh=N_#8BNpZ2v$aVBo;sk^*X`v;4-LU;D>! zM*h12MxXIQy)SfAqE4;jY)wgnppazZkdNNVVF;(PLf^qK$FgY9+VFyBKE7UC|f z`R|?&egV11K3s$rJ6!GvoeW=jV*!-e(wA;x(2=d0E_e_%0x--0o8#~m^H1%AH5Z^B zn!TNPn927*bvaf0pt}zhK0o^V@WlGwwKo(*nQ|Q~4_;>~-8y20`HP>@UJa)3nEnGG z5Hwhs|FcmFG16ZVNb5hL`2Gc1{zWIMM{_OiKewV!hCi}U!VuE?s9wU-QbZ!)+Y^tS zGzp5OSi5iq6hmEr$w}&9DFgoB+i*`q`8TBi^MVS{SKEb8Aw%@K7@XCo(De2A`6%mf&a2#~y1N)+kJLD$1HCP!22)(U}xo2|j?WRzt(11j8Z_*v;P$R+Ug*Gy3VxV4K; zGGUGabnW*`Z}~`ydXL-l9e=GC$pY#z|63vy>E*m=$=j}iWP{sRTh0%H54`t>2xYH% zsk+M&u&pNgMCM@3e)Xc?jBWX-TIR_cQ1Z!RW7!B zBjZX=+^3}?SE)B+$EP+0oi1Fp5blDT?*}nsP>filqXH{ms zxU<$hetC`u)Wi+x|EKL-`y^#aQX+sDYIa{M;V%LqLrOk~lR>u0Q!+pyQSU4zY`?E^ z|5@)C)w6G_=i5YYC5SE_u(7hDNYr}uKT|@DSqF%S++lTIbIk^$a>{~0IH8KNFEy%+ zW#$&!ynpgNJh>6uR~?2c)ZMW+h0OKu231(7L_vETPaR+(P)Zy%0~yGm>E9?@@x!Jy z3PYgS}Q@b}x}E#F27@F+j}0=&Ql4gES&f8acMrPAVlVs9$97`FR))R5wI zc&}KFI1UIewh>3PkhnB7u zS3AT8_*|nexznG|Z*DU0c!K@jsI4J)5#DyNi#|e#`l1Vv1`1)*NVcy0LZ``aL0n8B zecupJ(rhq3u8bW0NIRhKYq$v1li+jp*4hfAd&wxYDE8vn1TQ7S@bTM|I2Ob z8vMOIxA7&_j{AKmD+O@EyXT`|dElt0pED^@IV0m)RPBUs*5jW60>>w1!@_G3aBKzG z_f(KfAPBk}-jQtR*Sroq!*3rbQ_m27e+YdzQjUb<_*k8vc_C)y!@cj5E>NxUhPu&g z@Z2<~esU`)ih+4opWe+K7sbN9n*9@n>#@n3*o z?xoROgDuvhq>jJ;Ve{6i<3roQNfgo5^4Q4(|GNExO2Dr7GjgA2zWuKp_K)K0R(6lv z!l$!zW-+T6mb3gQaAFviTQi{|*t%>{(mhTdy+y;Re4qT@kccy#{b z&zWy~kLO@>*WPj2k#H)|7L&gAJ37DmHQAme#@m;(Y8Nu^`D5vf8sZFW#+lA2!HK=( zJ)#hO6JD*`o~&c*&46d}g=Qj@SsoB5ikC z^1V8E+&<-OzuS_C`p5<<(A6fB`LXT(!kV^0_~hL6PpW4={l%|#xgdh?5EIk~lu8{D z2hiyhv3Yxij_#$Wu>P@7SYsl`-~3;}Ktx{34_NL^Kwin&=?!HDv3elQDbcU*qyYpN z(#yw~f1vFGK-t%CC-qa-4FYHbA^h>bag-I&*qaxwn?Qv|idE$<>1H|Gr6JtUu(he2$eg!N z@HTF@dG1)*y;4fxe)4_ZkpaBHH9hXp9p4|gLrRQyuevRd@gSS}JhRnWqrvm|U@>qM z=yl7RQROTKwQtzP3!zUF)_6Ld#NGA6v~2{J9Dd`h6{%+XsU#qGLh%`fB1Hc?wfayK zN`H4BpDp)npVQuu$DVW1qsBS&AJ2eP%6Qw>;k{)Z$8%HL=Q4(a$Ng2_vHw&vA!1L+9zc8vaX2GtqJ{L-;gvF0IR$em zMQ8@{Qp3+3Quk)TJ$?I<8KmwzD*7#(q<@Mc`dchngW}cRG14(Z6K7{T|LhFXwhqUQ;BET;cYqPcAcMgt6M$V9$(?jHo@Sud$an$U&5F zZ1QNh^ztt)E*d#Ij;<43oSKKnd+WNr$_r}+s_O_x6DZSB10*5Q{ourqq>mTl| zx4y^(cy+9;t@R=*j>3_dmm_m)$k$#937V(sllby&5)Xex^UD-|m|q<(jEd#@DV(of zAd7sSdmS*zUDqJ9|K%O2J2OfdUiK{{b{PCy)pi<;hp~7v1CQj&4-10 zgO<3dqhYH1#-Fa}Q{pjql5>>P6gZH21zLfxZ4$SK4T@7b!|`nWF9b*84Bq8&Eht;9 z*P72x&NUCZ7*@B$`FtE=hz5b}S`|c6Ey+j@D1ZibjJaRlR;{cxAWv z?Nqa>QqV*H-*zzaPvpLMHt~nl(x6?vrPpR?zn7~wow?oj*1TKmx4j71>$hvtC$DLD zUrz0^tiP0792U&dxJxNv@r}Elsjn^aSLUu=9#mD{&9n8|ayIL$!H3s>%KEvbchBFW z%cd?VU83mGF#Dar9*s~w&AnmQRQIOvR+uWsuZ?+|a=TzApXO@q^(r%8=}iv#wCnFq z=K9}JbqU@k99Q%j-}NNk+qLCP)jXfmOO|)@?mHcnynd6({mJisP1_}u7k)|eYHXWK z63eQ)E$ufFi!3CWUY2gw%e>omCv}qEX66aH-k&35f9`Q@Us|NPetVqe8=dX*VxJdn ze`q7b=Dn(UA(2sf&g)cOmQFhNJ#<-aMELJZbA#@to>25@kbW<)&!X01 z%NMJt>1ST)tyX)h@?`DxhbgCHr>S4wv}WC&Nw-!{+Z7$2D}74QAcXTvip=M0%Tp_N zor=k`)t|ra^ySr-+(|R9mB(E=`MX#y(wSw)$!iymzB;^c*>%&^*7HxTnRga=soSZT zdDl+9s;r!v8hk6POtzBaig4pRp7eWF(<8gufvNHPu6xs-=e{;mnHzJyGKE+8L0j}; z@%8-e^UCL5HhMiR>sD3Rve&yVZ#{Q1*CO8c+qSr^Z#CN;)(X5>tGG5yUw3<+CfhaL z%bP;hZ?jvgJU67BWyiy74_)6r)_nSxttxn0`0?HE^5(uydHVgP+HE$V?Lv)Leti43 zWA|;f-RqX``95>)^P-fw!Vi{3KNsII-*5f){gdxqd%gVdB1sOBNe=nEW%;i~g_P8J w!5uhoe-Jcg1nPN%MiEAtgE$;km@@t6ukO)1^!cY^83Pb_y85}Sb4q9e0FIsP9{>OV literal 0 HcmV?d00001 diff --git a/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/mvi_flutter/ios/Runner/GoogleService-Info.plist b/mvi_flutter/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index c8cc9bf9..00000000 --- a/mvi_flutter/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - AD_UNIT_ID_FOR_BANNER_TEST - ca-app-pub-9999999999999999/9999999999 - AD_UNIT_ID_FOR_INTERSTITIAL_TEST - ca-app-pub-9999999999999999/9999999999 - CLIENT_ID - xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - API_KEY - xxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx - GCM_SENDER_ID - 999999999999 - PLIST_VERSION - 1 - BUNDLE_ID - com.fluttersamples.bloc - PROJECT_ID - xxxxxxxxxxxxx-99999 - STORAGE_BUCKET - xxxxxxxxxxxxx-99999.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 9:999999999999:ios:xxxxxxxxxxxxxxxx - DATABASE_URL - https://xxxxxxxxxxxxx-99999.firebaseio.com - - \ No newline at end of file diff --git a/mvi_flutter/ios/Runner/Info.plist b/mvi_flutter/ios/Runner/Info.plist index d07a5a48..40e5f3ef 100644 --- a/mvi_flutter/ios/Runner/Info.plist +++ b/mvi_flutter/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Mvi Flutter Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - mvi_flutter + mvi_flutter_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/mvi_flutter/ios/Runner/Runner-Bridging-Header.h b/mvi_flutter/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/mvi_flutter/ios/Runner/Runner-Bridging-Header.h +++ b/mvi_flutter/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/mvi_flutter/ios/RunnerTests/RunnerTests.swift b/mvi_flutter/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/mvi_flutter/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/mvi_flutter/lib/anonymous_user_repository.dart b/mvi_flutter/lib/anonymous_user_repository.dart new file mode 100644 index 00000000..538b88c1 --- /dev/null +++ b/mvi_flutter/lib/anonymous_user_repository.dart @@ -0,0 +1,10 @@ +import 'package:todos_repository_core/todos_repository_core.dart'; + +class AnonymousUserRepository implements UserRepository { + @override + Future login() { + return Future.value( + UserEntity(id: 'anonymous', displayName: '', photoUrl: ''), + ); + } +} diff --git a/mvi_flutter/lib/dependency_injection.dart b/mvi_flutter/lib/dependency_injection.dart index 2dade1d6..0f00df8f 100644 --- a/mvi_flutter/lib/dependency_injection.dart +++ b/mvi_flutter/lib/dependency_injection.dart @@ -1,24 +1,19 @@ -// A poor man's DI. This should be replaced by a proper solution once they -// are more stable. -library dependency_injector; - import 'package:flutter/widgets.dart'; -import 'package:meta/meta.dart'; import 'package:mvi_base/mvi_base.dart'; class Injector extends InheritedWidget { - final TodosInteractor todosInteractor; + final TodoListInteractor todosInteractor; final UserInteractor userInteractor; - Injector({ - Key key, - @required this.todosInteractor, - @required this.userInteractor, - @required Widget child, - }) : super(key: key, child: child); + const Injector({ + super.key, + required this.todosInteractor, + required this.userInteractor, + required super.child, + }); static Injector of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType(); + context.dependOnInheritedWidgetOfExactType()!; @override bool updateShouldNotify(Injector oldWidget) => diff --git a/mvi_flutter/lib/localization.dart b/mvi_flutter/lib/localization.dart index 8c9f2b98..ce625bc3 100644 --- a/mvi_flutter/lib/localization.dart +++ b/mvi_flutter/lib/localization.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; class BlocLocalizations { static BlocLocalizations of(BuildContext context) { - return Localizations.of(context, BlocLocalizations); + return Localizations.of(context, BlocLocalizations)!; } String get appTitle => 'MVI Example'; diff --git a/mvi_flutter/lib/main.dart b/mvi_flutter/lib/main.dart index b3ca0c47..b31ffbeb 100644 --- a/mvi_flutter/lib/main.dart +++ b/mvi_flutter/lib/main.dart @@ -1,11 +1,10 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:mvi_base/mvi_base.dart'; +import 'package:mvi_flutter_sample/anonymous_user_repository.dart'; import 'package:mvi_flutter_sample/mvi_app.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; Future main() async { @@ -13,12 +12,12 @@ Future main() async { runApp( MviApp( - todosRepository: TodosInteractor( + todoListInteractor: TodoListInteractor( ReactiveLocalStorageRepository( repository: LocalStorageRepository( localStorage: KeyValueStorage( - 'mvi_flutter', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + 'mvi_flutter_sample', + await SharedPreferences.getInstance(), ), ), ), @@ -27,10 +26,3 @@ Future main() async { ), ); } - -class AnonymousUserRepository implements UserRepository { - @override - Future login() { - return Future.value(UserEntity(id: 'anonymous')); - } -} diff --git a/mvi_flutter/lib/main_firebase.dart b/mvi_flutter/lib/main_firebase.dart deleted file mode 100644 index 6547ae49..00000000 --- a/mvi_flutter/lib/main_firebase.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; -import 'package:firebase_flutter_repository/user_repository.dart'; -import 'package:flutter/widgets.dart'; -import 'package:mvi_base/mvi_base.dart'; -import 'package:mvi_flutter_sample/mvi_app.dart'; - -void main() { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - MviApp( - todosRepository: TodosInteractor( - FirestoreReactiveTodosRepository(Firestore.instance), - ), - userInteractor: UserInteractor( - FirebaseUserRepository(FirebaseAuth.instance), - ), - ), - ); -} diff --git a/mvi_flutter/lib/main_web.dart b/mvi_flutter/lib/main_web.dart deleted file mode 100644 index 932e0af0..00000000 --- a/mvi_flutter/lib/main_web.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'dart:async'; -import 'dart:html'; - -import 'package:flutter/widgets.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:mvi_base/mvi_base.dart'; -import 'package:mvi_flutter_sample/mvi_app.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - MviApp( - todosRepository: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'mvi_flutter', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ), - userInteractor: UserInteractor(AnonymousUserRepository()), - ), - ); -} - -class AnonymousUserRepository implements UserRepository { - @override - Future login() { - return Future.value(UserEntity(id: 'anonymous')); - } -} diff --git a/mvi_flutter/lib/mvi_app.dart b/mvi_flutter/lib/mvi_app.dart index 66e114d6..d3054563 100644 --- a/mvi_flutter/lib/mvi_app.dart +++ b/mvi_flutter/lib/mvi_app.dart @@ -7,16 +7,19 @@ import 'package:mvi_flutter_sample/screens/home_screen.dart'; import 'package:todos_app_core/todos_app_core.dart'; class MviApp extends StatelessWidget { - final TodosInteractor todosRepository; + final TodoListInteractor todoListInteractor; final UserInteractor userInteractor; - const MviApp({Key key, this.todosRepository, this.userInteractor}) - : super(key: key); + const MviApp({ + super.key, + required this.todoListInteractor, + required this.userInteractor, + }); @override Widget build(BuildContext context) { return Injector( - todosInteractor: todosRepository, + todosInteractor: todoListInteractor, userInteractor: userInteractor, child: MaterialApp( onGenerateTitle: (context) => BlocLocalizations.of(context).appTitle, diff --git a/mvi_flutter/lib/screens/add_edit_screen.dart b/mvi_flutter/lib/screens/add_edit_screen.dart index 78cad922..bb4e2617 100644 --- a/mvi_flutter/lib/screens/add_edit_screen.dart +++ b/mvi_flutter/lib/screens/add_edit_screen.dart @@ -1,26 +1,28 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { - final Todo todo; - final Function(Todo) addTodo; - final Function(Todo) updateTodo; + final Todo? todo; + final void Function(Todo)? addTodo; + final void Function(Todo)? updateTodo; - AddEditScreen({Key key, this.todo, this.addTodo, this.updateTodo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); + const AddEditScreen({ + super.key = ArchSampleKeys.addTodoScreen, + this.addTodo, + this.updateTodo, + this.todo, + }); @override - _AddEditScreenState createState() => _AddEditScreenState(); + AddEditScreenState createState() => AddEditScreenState(); } -class _AddEditScreenState extends State { +class AddEditScreenState extends State { static final GlobalKey formKey = GlobalKey(); - String _task; - String _note; + late String _task; + late String _note; @override Widget build(BuildContext context) { @@ -36,34 +38,32 @@ class _AddEditScreenState extends State { padding: EdgeInsets.all(16.0), child: Form( key: formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, + autovalidateMode: AutovalidateMode.always, + canPop: true, child: ListView( children: [ TextFormField( - initialValue: widget.todo != null ? widget.todo.task : '', + initialValue: isEditing ? widget.todo!.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), - validator: (val) => val.trim().isEmpty + validator: (val) => val != null && val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null, - onSaved: (value) => _task = value, + onSaved: (value) => _task = value ?? '', ), TextFormField( - initialValue: widget.todo != null ? widget.todo.note : '', + initialValue: isEditing ? widget.todo!.note : '', key: ArchSampleKeys.noteField, maxLines: 10, style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), - onSaved: (value) => _note = value, + onSaved: (value) => _note = value ?? '', ), ], ), @@ -79,13 +79,15 @@ class _AddEditScreenState extends State { child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { final form = formKey.currentState; - if (form.validate()) { + if (form!.validate()) { form.save(); if (isEditing) { - widget.updateTodo(widget.todo.copyWith(task: _task, note: _note)); + widget.updateTodo!( + widget.todo!.copyWith(task: _task, note: _note), + ); } else { - widget.addTodo(Todo(_task, note: _note)); + widget.addTodo!(Todo(_task, note: _note)); } Navigator.pop(context); diff --git a/mvi_flutter/lib/screens/detail_screen.dart b/mvi_flutter/lib/screens/detail_screen.dart index 283f3282..f076b0fc 100644 --- a/mvi_flutter/lib/screens/detail_screen.dart +++ b/mvi_flutter/lib/screens/detail_screen.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/dependency_injection.dart'; @@ -8,10 +7,13 @@ import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatefulWidget { final String todoId; - final MviPresenter Function(DetailView) initPresenter; + final MviPresenter Function(DetailView)? initPresenter; - DetailScreen({Key key, @required this.todoId, this.initPresenter}) - : super(key: key ?? ArchSampleKeys.todoDetailsScreen); + const DetailScreen({ + super.key = ArchSampleKeys.todoDetailsScreen, + required this.todoId, + this.initPresenter, + }); @override DetailScreenState createState() { @@ -20,12 +22,12 @@ class DetailScreen extends StatefulWidget { } class DetailScreenState extends State with DetailView { - MviPresenter presenter; + late final MviPresenter presenter; @override void didChangeDependencies() { presenter = widget.initPresenter != null - ? widget.initPresenter(this) + ? widget.initPresenter!(this) : DetailPresenter( id: widget.todoId, view: this, @@ -47,11 +49,11 @@ class DetailScreenState extends State with DetailView { @override Widget build(BuildContext context) { return StreamBuilder( - stream: presenter.where((todo) => todo != null), + stream: presenter, builder: (context, snapshot) { if (!snapshot.hasData) return LoadingSpinner(); - final todo = snapshot.data; + final todo = snapshot.data!; return Scaffold( appBar: AppBar( @@ -114,11 +116,10 @@ class DetailScreenState extends State with DetailView { ), floatingActionButton: FloatingActionButton( tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), key: ArchSampleKeys.editTodoFab, onPressed: () { Navigator.of(context).push( - MaterialPageRoute( + MaterialPageRoute( builder: (context) { return AddEditScreen( todo: todo, @@ -129,6 +130,7 @@ class DetailScreenState extends State with DetailView { ), ); }, + child: Icon(Icons.edit), ), ); }, diff --git a/mvi_flutter/lib/screens/home_screen.dart b/mvi_flutter/lib/screens/home_screen.dart index 0cc81dd5..e8149807 100644 --- a/mvi_flutter/lib/screens/home_screen.dart +++ b/mvi_flutter/lib/screens/home_screen.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/dependency_injection.dart'; import 'package:mvi_flutter_sample/localization.dart'; @@ -8,30 +7,30 @@ import 'package:mvi_flutter_sample/widgets/filter_button.dart'; import 'package:mvi_flutter_sample/widgets/loading.dart'; import 'package:mvi_flutter_sample/widgets/stats_counter.dart'; import 'package:mvi_flutter_sample/widgets/todo_list.dart'; +import 'package:todos_app_core/todos_app_core.dart'; enum AppTab { todos, stats } class HomeScreen extends StatefulWidget { - final MviPresenter Function(TodosListView) initPresenter; + final TodoListPresenter Function(TodoListView)? initPresenter; - HomeScreen({Key key, this.initPresenter}) - : super(key: key ?? ArchSampleKeys.homeScreen); + const HomeScreen({super.key = ArchSampleKeys.homeScreen, this.initPresenter}); @override - State createState() { + State createState() { return HomeScreenState(); } } -class HomeScreenState extends State with TodosListView { +class HomeScreenState extends State with TodoListView { AppTab activeTab = AppTab.todos; - TodosListPresenter presenter; + late final TodoListPresenter presenter; @override void didChangeDependencies() { presenter = widget.initPresenter != null - ? widget.initPresenter(this) - : TodosListPresenter( + ? widget.initPresenter!(this) + : TodoListPresenter( view: this, todosInteractor: Injector.of(context).todosInteractor, userInteractor: Injector.of(context).userInteractor, @@ -51,24 +50,24 @@ class HomeScreenState extends State with TodosListView { @override Widget build(BuildContext context) { - return StreamBuilder( + return StreamBuilder( stream: presenter, initialData: presenter.latest, builder: (context, modelSnapshot) { + final data = modelSnapshot.data!; + return Scaffold( appBar: AppBar( title: Text(BlocLocalizations.of(context).appTitle), actions: [ FilterButton( isActive: activeTab == AppTab.todos, - activeFilter: - modelSnapshot.data?.activeFilter ?? VisibilityFilter.all, + activeFilter: data.activeFilter, onSelected: updateFilter.add, ), ExtraActionsButton( - allComplete: modelSnapshot.data?.allComplete ?? false, - hasCompletedTodos: - modelSnapshot.data?.hasCompletedTodos ?? false, + allComplete: data.allComplete, + hasCompletedTodos: data.hasCompletedTodos, onSelected: (action) { if (action == ExtraAction.toggleAllComplete) { toggleAll.add(null); @@ -79,15 +78,15 @@ class HomeScreenState extends State with TodosListView { ), ], ), - body: modelSnapshot.data.loading + body: data.loading ? LoadingSpinner(key: ArchSampleKeys.todosLoading) : activeTab == AppTab.todos ? TodoList( - loading: modelSnapshot.data.loading, + loading: data.loading, addTodo: addTodo.add, updateTodo: updateTodo.add, deleteTodo: deleteTodo.add, - todos: modelSnapshot.data?.visibleTodos ?? [], + todos: data.visibleTodos, ) : StatsCounter(), floatingActionButton: FloatingActionButton( @@ -95,8 +94,8 @@ class HomeScreenState extends State with TodosListView { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.add), ), bottomNavigationBar: BottomNavigationBar( key: ArchSampleKeys.tabs, @@ -114,11 +113,9 @@ class HomeScreenState extends State with TodosListView { ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ), diff --git a/mvi_flutter/lib/widgets/extra_actions_button.dart b/mvi_flutter/lib/widgets/extra_actions_button.dart index 1701e8e0..e7966fa4 100644 --- a/mvi_flutter/lib/widgets/extra_actions_button.dart +++ b/mvi_flutter/lib/widgets/extra_actions_button.dart @@ -7,11 +7,11 @@ class ExtraActionsButton extends StatelessWidget { final bool hasCompletedTodos; ExtraActionsButton({ - this.onSelected, + super.key, + required this.onSelected, this.allComplete = false, this.hasCompletedTodos = true, - Key key, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/mvi_flutter/lib/widgets/filter_button.dart b/mvi_flutter/lib/widgets/filter_button.dart index 84d7d5ab..ef92c6cb 100644 --- a/mvi_flutter/lib/widgets/filter_button.dart +++ b/mvi_flutter/lib/widgets/filter_button.dart @@ -7,15 +7,18 @@ class FilterButton extends StatelessWidget { final VisibilityFilter activeFilter; final bool isActive; - FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + FilterButton({ + super.key, + required this.onSelected, + required this.activeFilter, + required this.isActive, + }); @override Widget build(BuildContext context) { - final theme = Theme.of(context); - final defaultStyle = theme.textTheme.bodyMedium; - final activeStyle = theme.textTheme.bodyMedium.copyWith( - color: theme.accentColor, + final defaultStyle = Theme.of(context).textTheme.bodyMedium!; + final activeStyle = defaultStyle.copyWith( + color: Theme.of(context).colorScheme.secondary, ); final button = _Button( onSelected: onSelected, @@ -34,12 +37,11 @@ class FilterButton extends StatelessWidget { class _Button extends StatelessWidget { const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); + required this.onSelected, + required this.activeFilter, + required this.activeStyle, + required this.defaultStyle, + }); final PopupMenuItemSelected onSelected; final VisibilityFilter activeFilter; diff --git a/mvi_flutter/lib/widgets/loading.dart b/mvi_flutter/lib/widgets/loading.dart index 440fc4f3..68c0ec55 100644 --- a/mvi_flutter/lib/widgets/loading.dart +++ b/mvi_flutter/lib/widgets/loading.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; class LoadingSpinner extends StatelessWidget { - LoadingSpinner({Key key}) : super(key: key); + const LoadingSpinner({super.key}); @override Widget build(BuildContext context) { diff --git a/mvi_flutter/lib/widgets/stats_counter.dart b/mvi_flutter/lib/widgets/stats_counter.dart index cec8492b..ebaabcfb 100644 --- a/mvi_flutter/lib/widgets/stats_counter.dart +++ b/mvi_flutter/lib/widgets/stats_counter.dart @@ -1,15 +1,15 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/dependency_injection.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatefulWidget { - final MviPresenter Function() initPresenter; + final MviPresenter Function()? initPresenter; - StatsCounter({Key key, this.initPresenter}) - : super(key: key ?? ArchSampleKeys.statsCounter); + const StatsCounter({ + super.key = ArchSampleKeys.statsCounter, + this.initPresenter, + }); @override StatsCounterState createState() { @@ -18,12 +18,12 @@ class StatsCounter extends StatefulWidget { } class StatsCounterState extends State { - StatsPresenter presenter; + late final MviPresenter presenter; @override void didChangeDependencies() { presenter = widget.initPresenter != null - ? widget.initPresenter() + ? widget.initPresenter!() : StatsPresenter(Injector.of(context).todosInteractor); presenter.setUp(); @@ -43,43 +43,50 @@ class StatsCounterState extends State { stream: presenter, initialData: presenter.latest, builder: (context, snapshot) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).completedTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '${snapshot.data?.numComplete ?? 0}', - key: ArchSampleKeys.statsNumCompleted, - style: Theme.of(context).textTheme.titleMedium, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text( - ArchSampleLocalizations.of(context).activeTodos, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - Padding( - padding: EdgeInsets.only(bottom: 24.0), - child: Text( - '${snapshot.data?.numActive ?? 0}', - key: ArchSampleKeys.statsNumActive, - style: Theme.of(context).textTheme.titleMedium, - ), + final data = snapshot.data!; + + switch (data) { + case StatsModelLoading(): + return const SizedBox.shrink(); + case StatsModelLoaded(): + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).completedTodos, + style: Theme.of(context).textTheme.titleLarge, + ), + ), + Padding( + padding: EdgeInsets.only(bottom: 24.0), + child: Text( + '${data.numComplete}', + key: ArchSampleKeys.statsNumCompleted, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + Padding( + padding: EdgeInsets.only(bottom: 8.0), + child: Text( + ArchSampleLocalizations.of(context).activeTodos, + style: Theme.of(context).textTheme.titleLarge, + ), + ), + Padding( + padding: EdgeInsets.only(bottom: 24.0), + child: Text( + '${data.numActive}', + key: ArchSampleKeys.statsNumActive, + style: Theme.of(context).textTheme.titleMedium, + ), + ), + ], ), - ], - ), - ); + ); + } }, ); } diff --git a/mvi_flutter/lib/widgets/todo_item.dart b/mvi_flutter/lib/widgets/todo_item.dart index f660a1ee..eb3c324b 100644 --- a/mvi_flutter/lib/widgets/todo_item.dart +++ b/mvi_flutter/lib/widgets/todo_item.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -6,14 +5,15 @@ import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, + const TodoItem({ + super.key, + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, }); @override diff --git a/mvi_flutter/lib/widgets/todo_list.dart b/mvi_flutter/lib/widgets/todo_list.dart index f630e633..3964685d 100644 --- a/mvi_flutter/lib/widgets/todo_list.dart +++ b/mvi_flutter/lib/widgets/todo_list.dart @@ -1,26 +1,25 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:mvi_base/mvi_base.dart'; import 'package:mvi_flutter_sample/screens/detail_screen.dart'; import 'package:mvi_flutter_sample/widgets/loading.dart'; import 'package:mvi_flutter_sample/widgets/todo_item.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoList extends StatelessWidget { final bool loading; final List todos; - final Function(Todo) updateTodo; - final Function(String) deleteTodo; - final Function(Todo) addTodo; + final void Function(Todo) updateTodo; + final void Function(String) deleteTodo; + final void Function(Todo) addTodo; - TodoList({ - Key key, - @required this.loading, - @required this.todos, - @required this.addTodo, - @required this.deleteTodo, - @required this.updateTodo, - }) : super(key: key); + const TodoList({ + super.key, + required this.loading, + required this.todos, + required this.addTodo, + required this.deleteTodo, + required this.updateTodo, + }); @override Widget build(BuildContext context) { @@ -44,14 +43,14 @@ class TodoList extends StatelessWidget { onTap: () { Navigator.of(context) .push( - MaterialPageRoute( + MaterialPageRoute( builder: (_) { return DetailScreen(todoId: todo.id); }, ), ) .then((todo) { - if (todo is Todo) { + if (todo is Todo && context.mounted) { _showUndoSnackbar(context, todo); } }); @@ -71,23 +70,23 @@ class TodoList extends StatelessWidget { } void _showUndoSnackbar(BuildContext context, Todo todo) { - final snackBar = SnackBar( - key: ArchSampleKeys.snackbar, - duration: Duration(seconds: 2), - content: Text( - ArchSampleLocalizations.of(context).todoDeleted(todo.task), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - action: SnackBarAction( - key: ArchSampleKeys.snackbarAction(todo.id), - label: ArchSampleLocalizations.of(context).undo, - onPressed: () { - addTodo(todo); - }, + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + key: ArchSampleKeys.snackbar, + duration: Duration(seconds: 2), + content: Text( + ArchSampleLocalizations.of(context).todoDeleted(todo.task), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + action: SnackBarAction( + key: ArchSampleKeys.snackbarAction(todo.id), + label: ArchSampleLocalizations.of(context).undo, + onPressed: () { + addTodo(todo); + }, + ), ), ); - - Scaffold.of(context).showSnackBar(snackBar); } } diff --git a/mvi_flutter/linux/.gitignore b/mvi_flutter/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/mvi_flutter/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/mvi_flutter/linux/CMakeLists.txt b/mvi_flutter/linux/CMakeLists.txt new file mode 100644 index 00000000..7d4cb697 --- /dev/null +++ b/mvi_flutter/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "mvi_flutter_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.mvi_flutter_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/mvi_flutter/linux/flutter/CMakeLists.txt b/mvi_flutter/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/mvi_flutter/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/mvi_flutter/linux/flutter/generated_plugin_registrant.cc b/mvi_flutter/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/mvi_flutter/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/mvi_flutter/linux/flutter/generated_plugin_registrant.h b/mvi_flutter/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/mvi_flutter/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/mvi_flutter/linux/flutter/generated_plugins.cmake b/mvi_flutter/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/mvi_flutter/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/mvi_flutter/linux/runner/CMakeLists.txt b/mvi_flutter/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/mvi_flutter/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/mvi_flutter/linux/runner/main.cc b/mvi_flutter/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/mvi_flutter/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/mvi_flutter/linux/runner/my_application.cc b/mvi_flutter/linux/runner/my_application.cc new file mode 100644 index 00000000..64b95a05 --- /dev/null +++ b/mvi_flutter/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "mvi_flutter_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "mvi_flutter_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/mvi_flutter/linux/runner/my_application.h b/mvi_flutter/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/mvi_flutter/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/mvi_flutter/macos/.gitignore b/mvi_flutter/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/mvi_flutter/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/mvi_flutter/macos/Flutter/Flutter-Debug.xcconfig b/mvi_flutter/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/mvi_flutter/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mvi_flutter/macos/Flutter/Flutter-Release.xcconfig b/mvi_flutter/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/mvi_flutter/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mvi_flutter/macos/Flutter/GeneratedPluginRegistrant.swift b/mvi_flutter/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/mvi_flutter/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/mvi_flutter/macos/Podfile b/mvi_flutter/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/mvi_flutter/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/mvi_flutter/macos/Podfile.lock b/mvi_flutter/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/mvi_flutter/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/mvi_flutter/macos/Runner.xcodeproj/project.pbxproj b/mvi_flutter/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..e1f0ff35 --- /dev/null +++ b/mvi_flutter/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 25C4AD941E8F454E82032FFF /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ABA2C2189C72178160F73A7 /* Pods_RunnerTests.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + EFDCF773E0A5EB24AA482411 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CE8366489172ABD8876DCFF /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* mvi_flutter_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mvi_flutter_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 3CE8366489172ABD8876DCFF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 74000FD9F0C44CB23B769241 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 88ECB0501B418DC009DE9BFC /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 98082A639E70D4C9164C1ADA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9ABA2C2189C72178160F73A7 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B82F95A2FC89558D5C046E7C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + B888BC98DF982AED568EC8AA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FD36711DB5FE8EE91BCF4281 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 25C4AD941E8F454E82032FFF /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EFDCF773E0A5EB24AA482411 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 868D3F4F8530413CDE3C0F74 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* mvi_flutter_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 868D3F4F8530413CDE3C0F74 /* Pods */ = { + isa = PBXGroup; + children = ( + 98082A639E70D4C9164C1ADA /* Pods-Runner.debug.xcconfig */, + FD36711DB5FE8EE91BCF4281 /* Pods-Runner.release.xcconfig */, + 88ECB0501B418DC009DE9BFC /* Pods-Runner.profile.xcconfig */, + 74000FD9F0C44CB23B769241 /* Pods-RunnerTests.debug.xcconfig */, + B888BC98DF982AED568EC8AA /* Pods-RunnerTests.release.xcconfig */, + B82F95A2FC89558D5C046E7C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3CE8366489172ABD8876DCFF /* Pods_Runner.framework */, + 9ABA2C2189C72178160F73A7 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 7D151EEFCF088E77B136E20C /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 367B7DC2036FC00FEFFC54BB /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 4D34F133BFFF55C079356946 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* mvi_flutter_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 367B7DC2036FC00FEFFC54BB /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 4D34F133BFFF55C079356946 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7D151EEFCF088E77B136E20C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 74000FD9F0C44CB23B769241 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/mvi_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/mvi_flutter_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B888BC98DF982AED568EC8AA /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/mvi_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/mvi_flutter_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B82F95A2FC89558D5C046E7C /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mviFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/mvi_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/mvi_flutter_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/mvi_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mvi_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mvi_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mvi_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mvi_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..552ed934 --- /dev/null +++ b/mvi_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mvi_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata b/mvi_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mvi_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mvi_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mvi_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mvi_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mvi_flutter/macos/Runner/AppDelegate.swift b/mvi_flutter/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/mvi_flutter/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/mvi_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/scoped_model/ios/Runner/Info.plist b/scoped_model/ios/Runner/Info.plist index c683ec62..bf226dd4 100644 --- a/scoped_model/ios/Runner/Info.plist +++ b/scoped_model/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Scoped Model Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - scoped_model + scoped_model_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/scoped_model/ios/Runner/Runner-Bridging-Header.h b/scoped_model/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/scoped_model/ios/Runner/Runner-Bridging-Header.h +++ b/scoped_model/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/scoped_model/ios/RunnerTests/RunnerTests.swift b/scoped_model/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/scoped_model/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/scoped_model/lib/app.dart b/scoped_model/lib/app.dart index cace6e4a..ea11664a 100644 --- a/scoped_model/lib/app.dart +++ b/scoped_model/lib/app.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:meta/meta.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/localization.dart'; import 'package:scoped_model_sample/screens/add_edit_screen.dart'; @@ -11,7 +10,7 @@ import 'package:todos_repository_core/todos_repository_core.dart'; class ScopedModelApp extends StatelessWidget { final TodosRepository repository; - ScopedModelApp({@required this.repository}); + ScopedModelApp({required this.repository}); @override Widget build(BuildContext context) { diff --git a/scoped_model/lib/localization.dart b/scoped_model/lib/localization.dart index 27c9382c..9735f4a8 100644 --- a/scoped_model/lib/localization.dart +++ b/scoped_model/lib/localization.dart @@ -7,7 +7,7 @@ class ScopedModelLocalizations { return Localizations.of( context, ScopedModelLocalizations, - ); + )!; } String get appTitle => 'scoped_model example'; diff --git a/scoped_model/lib/models.dart b/scoped_model/lib/models.dart index b4ab4a49..8f87d6fa 100644 --- a/scoped_model/lib/models.dart +++ b/scoped_model/lib/models.dart @@ -11,7 +11,7 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, this.note = '', String id}) + Todo(this.task, {this.complete = false, this.note = '', String? id}) : id = id ?? Uuid().generateV4(); @override @@ -40,13 +40,13 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, id: entity.id, ); } - Todo copy({String task, bool complete, String note, String id}) { + Todo copy({String? task, bool? complete, String? note, String? id}) { return Todo( task ?? this.task, complete: complete ?? this.complete, diff --git a/scoped_model/lib/screens/add_edit_screen.dart b/scoped_model/lib/screens/add_edit_screen.dart index a850a3df..890b5dc1 100644 --- a/scoped_model/lib/screens/add_edit_screen.dart +++ b/scoped_model/lib/screens/add_edit_screen.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; @@ -7,21 +5,21 @@ import 'package:scoped_model_sample/todo_list_model.dart'; import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { - final String todoId; + final String? todoId; + + const AddEditScreen({super.key = ArchSampleKeys.addTodoScreen, this.todoId}); - AddEditScreen({Key key, this.todoId}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); @override - _AddEditScreenState createState() => _AddEditScreenState(); + AddEditScreenState createState() => AddEditScreenState(); } -class _AddEditScreenState extends State { +class AddEditScreenState extends State { static final GlobalKey _formKey = GlobalKey(); - String _task; - String _note; + late String _task; + late String _note; - bool get isEditing => widget.todoId != null; + bool get isEditing => widget.todoId != null && widget.todoId!.isNotEmpty; @override Widget build(BuildContext context) { @@ -36,43 +34,45 @@ class _AddEditScreenState extends State { padding: EdgeInsets.all(16.0), child: Form( key: _formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, + autovalidateMode: AutovalidateMode.always, + canPop: true, child: ScopedModelDescendant( - builder: (BuildContext context, Widget child, TodoListModel model) { - var task = model.todoById(widget.todoId); - return ListView( - children: [ - TextFormField( - initialValue: task?.task ?? '', - key: ArchSampleKeys.taskField, - autofocus: !isEditing, - style: textTheme.titleLarge, - decoration: InputDecoration( - hintText: localizations.newTodoHint, - ), - validator: (val) { - return val.trim().isEmpty - ? localizations.emptyTodoError - : null; - }, - onSaved: (value) => _task = value, - ), - TextFormField( - initialValue: task?.note ?? '', - key: ArchSampleKeys.noteField, - maxLines: 10, - style: textTheme.titleMedium, - decoration: InputDecoration( - hintText: localizations.notesHint, - ), - onSaved: (value) => _note = value, - ), - ], - ); - }, + builder: + (BuildContext context, Widget? child, TodoListModel model) { + final task = isEditing + ? model.todoById(widget.todoId!) + : null; + + return ListView( + children: [ + TextFormField( + initialValue: task?.task ?? '', + key: ArchSampleKeys.taskField, + autofocus: !isEditing, + style: textTheme.titleLarge, + decoration: InputDecoration( + hintText: localizations.newTodoHint, + ), + validator: (val) { + return val != null && val.trim().isEmpty + ? localizations.emptyTodoError + : null; + }, + onSaved: (value) => _task = value ?? '', + ), + TextFormField( + initialValue: task?.note ?? '', + key: ArchSampleKeys.noteField, + maxLines: 10, + style: textTheme.titleMedium, + decoration: InputDecoration( + hintText: localizations.notesHint, + ), + onSaved: (value) => _note = value ?? '', + ), + ], + ); + }, ), ), ), @@ -84,13 +84,13 @@ class _AddEditScreenState extends State { child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { final form = _formKey.currentState; - if (form.validate()) { + if (form!.validate()) { form.save(); var model = TodoListModel.of(context); if (isEditing) { - var todo = model.todoById(widget.todoId); - model.updateTodo(todo.copy(task: _task, note: _note)); + var todo = model.todoById(widget.todoId!); + model.updateTodo(todo!.copy(task: _task, note: _note)); } else { model.addTodo(Todo(_task, note: _note)); } diff --git a/scoped_model/lib/screens/detail_screen.dart b/scoped_model/lib/screens/detail_screen.dart index 5a10afec..a42cf2b9 100644 --- a/scoped_model/lib/screens/detail_screen.dart +++ b/scoped_model/lib/screens/detail_screen.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; @@ -9,8 +8,10 @@ import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatelessWidget { final String todoId; - DetailScreen({@required this.todoId}) - : super(key: ArchSampleKeys.todoDetailsScreen); + const DetailScreen({ + super.key = ArchSampleKeys.todoDetailsScreen, + required this.todoId, + }); @override Widget build(BuildContext context) { @@ -77,11 +78,10 @@ class DetailScreen extends StatelessWidget { ), floatingActionButton: FloatingActionButton( tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), key: ArchSampleKeys.editTodoFab, onPressed: () { Navigator.of(context).push( - MaterialPageRoute( + MaterialPageRoute( builder: (context) { return AddEditScreen( todoId: todoId, @@ -91,6 +91,7 @@ class DetailScreen extends StatelessWidget { ), ); }, + child: Icon(Icons.edit), ), ); }, diff --git a/scoped_model/lib/screens/home_screen.dart b/scoped_model/lib/screens/home_screen.dart index ed333ba5..cdb611df 100644 --- a/scoped_model/lib/screens/home_screen.dart +++ b/scoped_model/lib/screens/home_screen.dart @@ -1,17 +1,17 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model_sample/localization.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:scoped_model_sample/widgets/extra_actions_button.dart'; import 'package:scoped_model_sample/widgets/filter_button.dart'; import 'package:scoped_model_sample/widgets/stats_counter.dart'; import 'package:scoped_model_sample/widgets/todo_list.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class HomeScreen extends StatefulWidget { - HomeScreen() : super(key: ArchSampleKeys.homeScreen); + const HomeScreen({super.key}); @override - State createState() { + State createState() { return HomeScreenState(); } } @@ -35,8 +35,8 @@ class HomeScreenState extends State { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: Icon(Icons.add), ), bottomNavigationBar: BottomNavigationBar( key: ArchSampleKeys.tabs, @@ -52,11 +52,9 @@ class HomeScreenState extends State { ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ), diff --git a/scoped_model/lib/todo_list_model.dart b/scoped_model/lib/todo_list_model.dart index da5d8ace..a95fb61b 100644 --- a/scoped_model/lib/todo_list_model.dart +++ b/scoped_model/lib/todo_list_model.dart @@ -1,7 +1,7 @@ import 'dart:async'; +import 'package:collection/collection.dart'; import 'package:flutter/widgets.dart'; -import 'package:meta/meta.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -26,7 +26,7 @@ class TodoListModel extends Model { bool get isLoading => _isLoading; - TodoListModel({@required this.repository, VisibilityFilter activeFilter}) + TodoListModel({required this.repository, VisibilityFilter? activeFilter}) : _activeFilter = activeFilter ?? VisibilityFilter.all; /// Wraps [ScopedModel.of] for this [Model]. See [ScopedModel.of] for more @@ -43,7 +43,7 @@ class TodoListModel extends Model { /// Loads remote data /// /// Call this initially and when the user manually refreshes - Future loadTodos() { + Future loadTodos() { _isLoading = true; notifyListeners(); @@ -68,7 +68,6 @@ class TodoListModel extends Model { case VisibilityFilter.completed: return todo.complete; case VisibilityFilter.all: - default: return true; } }).toList(); @@ -87,8 +86,6 @@ class TodoListModel extends Model { /// updates a [Todo] by replacing the item with the same id by the parameter [todo] void updateTodo(Todo todo) { - assert(todo != null); - assert(todo.id != null); var oldTodo = _todos.firstWhere((it) => it.id == todo.id); var replaceIndex = _todos.indexOf(oldTodo); _todos.replaceRange(replaceIndex, replaceIndex + 1, [todo]); @@ -112,8 +109,8 @@ class TodoListModel extends Model { repository.saveTodos(_todos.map((it) => it.toEntity()).toList()); } - Todo todoById(String id) { - return _todos.firstWhere((it) => it.id == id, orElse: () => null); + Todo? todoById(String id) { + return _todos.firstWhereOrNull((it) => it.id == id); } } diff --git a/scoped_model/lib/widgets/extra_actions_button.dart b/scoped_model/lib/widgets/extra_actions_button.dart index 5c975454..6710277b 100644 --- a/scoped_model/lib/widgets/extra_actions_button.dart +++ b/scoped_model/lib/widgets/extra_actions_button.dart @@ -1,16 +1,16 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:scoped_model_sample/todo_list_model.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class ExtraActionsButton extends StatelessWidget { - ExtraActionsButton({Key key}) : super(key: key); + const ExtraActionsButton({super.key}); @override Widget build(BuildContext context) { return ScopedModelDescendant( - builder: (BuildContext context, Widget child, TodoListModel model) { + builder: (BuildContext context, Widget? child, TodoListModel model) { return PopupMenuButton( key: ArchSampleKeys.extraActionsButton, onSelected: (action) { diff --git a/scoped_model/lib/widgets/filter_button.dart b/scoped_model/lib/widgets/filter_button.dart index 5af3702b..c9b4a50e 100644 --- a/scoped_model/lib/widgets/filter_button.dart +++ b/scoped_model/lib/widgets/filter_button.dart @@ -6,7 +6,7 @@ import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final bool isActive; - FilterButton({this.isActive, Key key}) : super(key: key); + const FilterButton({required this.isActive, super.key}); @override Widget build(BuildContext context) { @@ -14,7 +14,7 @@ class FilterButton extends StatelessWidget { opacity: isActive ? 1.0 : 0.0, duration: Duration(milliseconds: 150), child: ScopedModelDescendant( - builder: (BuildContext context, Widget child, TodoListModel model) { + builder: (BuildContext context, Widget? child, TodoListModel model) { return PopupMenuButton( key: ArchSampleKeys.filterButton, tooltip: ArchSampleLocalizations.of(context).filterTodos, @@ -33,10 +33,10 @@ class FilterButton extends StatelessWidget { BuildContext context, TodoListModel model, ) { - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); final defaultStyle = Theme.of(context).textTheme.bodyMedium; + final activeStyle = defaultStyle?.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); return [ PopupMenuItem( diff --git a/scoped_model/lib/widgets/todo_item.dart b/scoped_model/lib/widgets/todo_item.dart index d055d7de..c4eeb2bd 100644 --- a/scoped_model/lib/widgets/todo_item.dart +++ b/scoped_model/lib/widgets/todo_item.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -6,14 +5,15 @@ import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, + const TodoItem({ + super.key, + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, }); @override diff --git a/scoped_model/lib/widgets/todo_list.dart b/scoped_model/lib/widgets/todo_list.dart index 172355f2..f00cd2ef 100644 --- a/scoped_model/lib/widgets/todo_list.dart +++ b/scoped_model/lib/widgets/todo_list.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; import 'package:scoped_model/scoped_model.dart'; import 'package:scoped_model_sample/models.dart'; import 'package:scoped_model_sample/screens/detail_screen.dart'; import 'package:scoped_model_sample/todo_list_model.dart'; import 'package:scoped_model_sample/widgets/todo_item.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoList extends StatelessWidget { - TodoList({Key key}) : super(key: key); + const TodoList({super.key}); @override Widget build(BuildContext context) { @@ -43,14 +43,14 @@ class TodoList extends StatelessWidget { onTap: () { Navigator.of(context) .push( - MaterialPageRoute( + MaterialPageRoute( builder: (_) { return DetailScreen(todoId: todo.id); }, ), ) .then((todo) { - if (todo is Todo) { + if (todo is Todo && context.mounted) { _showUndoSnackbar(context, todo); } }); @@ -71,7 +71,7 @@ class TodoList extends StatelessWidget { } void _showUndoSnackbar(BuildContext context, Todo todo) { - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( key: ArchSampleKeys.snackbar, duration: Duration(seconds: 2), diff --git a/scoped_model/linux/.gitignore b/scoped_model/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/scoped_model/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/scoped_model/linux/CMakeLists.txt b/scoped_model/linux/CMakeLists.txt new file mode 100644 index 00000000..994a5b1a --- /dev/null +++ b/scoped_model/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "scoped_model_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.scoped_model_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/scoped_model/linux/flutter/CMakeLists.txt b/scoped_model/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/scoped_model/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/scoped_model/linux/flutter/generated_plugin_registrant.cc b/scoped_model/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/scoped_model/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/scoped_model/linux/flutter/generated_plugin_registrant.h b/scoped_model/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/scoped_model/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/scoped_model/linux/flutter/generated_plugins.cmake b/scoped_model/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/scoped_model/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/scoped_model/linux/runner/CMakeLists.txt b/scoped_model/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/scoped_model/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/scoped_model/linux/runner/main.cc b/scoped_model/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/scoped_model/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/scoped_model/linux/runner/my_application.cc b/scoped_model/linux/runner/my_application.cc new file mode 100644 index 00000000..cf1dad04 --- /dev/null +++ b/scoped_model/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "scoped_model_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "scoped_model_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/scoped_model/linux/runner/my_application.h b/scoped_model/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/scoped_model/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/scoped_model/macos/.gitignore b/scoped_model/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/scoped_model/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/scoped_model/macos/Flutter/Flutter-Debug.xcconfig b/scoped_model/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/scoped_model/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/scoped_model/macos/Flutter/Flutter-Release.xcconfig b/scoped_model/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/scoped_model/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/scoped_model/macos/Flutter/GeneratedPluginRegistrant.swift b/scoped_model/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/scoped_model/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/scoped_model/macos/Podfile b/scoped_model/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/scoped_model/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/scoped_model/macos/Podfile.lock b/scoped_model/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/scoped_model/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/scoped_model/macos/Runner.xcodeproj/project.pbxproj b/scoped_model/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..50054181 --- /dev/null +++ b/scoped_model/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 744B7D8C46D8ED36F08B4ABA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3FCD22E2B9E588CE1F2E9DB /* Pods_Runner.framework */; }; + ABB0B26AAA39E2BE7D0B7A27 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE5C02D3D3E06D78BD7187AC /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* scoped_model_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = scoped_model_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 375EFE53CA3C5FB82BA4CEE4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 432A1192BABCCB953AF09366 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5145368E89E6CE5261889329 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + B593DA83DD802E2CC6DA1349 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BE5C02D3D3E06D78BD7187AC /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C099E49D79F36967F5179A29 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C3FCD22E2B9E588CE1F2E9DB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F27C74B2C28C6A2AD930804A /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ABB0B26AAA39E2BE7D0B7A27 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 744B7D8C46D8ED36F08B4ABA /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 797A9E0920CC9D3B49BCD691 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* scoped_model_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 797A9E0920CC9D3B49BCD691 /* Pods */ = { + isa = PBXGroup; + children = ( + 432A1192BABCCB953AF09366 /* Pods-Runner.debug.xcconfig */, + B593DA83DD802E2CC6DA1349 /* Pods-Runner.release.xcconfig */, + F27C74B2C28C6A2AD930804A /* Pods-Runner.profile.xcconfig */, + 5145368E89E6CE5261889329 /* Pods-RunnerTests.debug.xcconfig */, + C099E49D79F36967F5179A29 /* Pods-RunnerTests.release.xcconfig */, + 375EFE53CA3C5FB82BA4CEE4 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C3FCD22E2B9E588CE1F2E9DB /* Pods_Runner.framework */, + BE5C02D3D3E06D78BD7187AC /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 7B05F39912D6DC948C95D785 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 27E3A124E26BEFBE126B2CD0 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 33607D807D1F2CBD04CFFD05 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* scoped_model_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 27E3A124E26BEFBE126B2CD0 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 33607D807D1F2CBD04CFFD05 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 7B05F39912D6DC948C95D785 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5145368E89E6CE5261889329 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/scoped_model_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/scoped_model_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C099E49D79F36967F5179A29 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/scoped_model_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/scoped_model_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 375EFE53CA3C5FB82BA4CEE4 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.scopedModelSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/scoped_model_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/scoped_model_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/scoped_model/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/scoped_model/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/scoped_model/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/scoped_model/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/scoped_model/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..39d69c0f --- /dev/null +++ b/scoped_model/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scoped_model/macos/Runner.xcworkspace/contents.xcworkspacedata b/scoped_model/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/scoped_model/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/scoped_model/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/scoped_model/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/scoped_model/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/scoped_model/macos/Runner/AppDelegate.swift b/scoped_model/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/scoped_model/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/scoped_model/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/simple_bloc_flutter/ios/Runner/GoogleService-Info.plist b/simple_bloc_flutter/ios/Runner/GoogleService-Info.plist deleted file mode 100644 index c8cc9bf9..00000000 --- a/simple_bloc_flutter/ios/Runner/GoogleService-Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - AD_UNIT_ID_FOR_BANNER_TEST - ca-app-pub-9999999999999999/9999999999 - AD_UNIT_ID_FOR_INTERSTITIAL_TEST - ca-app-pub-9999999999999999/9999999999 - CLIENT_ID - xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - API_KEY - xxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx - GCM_SENDER_ID - 999999999999 - PLIST_VERSION - 1 - BUNDLE_ID - com.fluttersamples.bloc - PROJECT_ID - xxxxxxxxxxxxx-99999 - STORAGE_BUCKET - xxxxxxxxxxxxx-99999.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 9:999999999999:ios:xxxxxxxxxxxxxxxx - DATABASE_URL - https://xxxxxxxxxxxxx-99999.firebaseio.com - - \ No newline at end of file diff --git a/simple_bloc_flutter/ios/Runner/Info.plist b/simple_bloc_flutter/ios/Runner/Info.plist index 4094e090..6049340d 100644 --- a/simple_bloc_flutter/ios/Runner/Info.plist +++ b/simple_bloc_flutter/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Simple Bloc Flutter Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - simple_bloc_flutter + simple_bloc_flutter_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/simple_bloc_flutter/ios/Runner/Runner-Bridging-Header.h b/simple_bloc_flutter/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/simple_bloc_flutter/ios/Runner/Runner-Bridging-Header.h +++ b/simple_bloc_flutter/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/simple_bloc_flutter/ios/RunnerTests/RunnerTests.swift b/simple_bloc_flutter/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/simple_bloc_flutter/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/simple_bloc_flutter/lib/anonymous_user_repository.dart b/simple_bloc_flutter/lib/anonymous_user_repository.dart new file mode 100644 index 00000000..efd978f5 --- /dev/null +++ b/simple_bloc_flutter/lib/anonymous_user_repository.dart @@ -0,0 +1,7 @@ +import 'package:todos_repository_core/todos_repository_core.dart'; + +class AnonymousUserRepository implements UserRepository { + @override + Future login() async => + UserEntity(id: 'anonymous', displayName: '', photoUrl: ''); +} diff --git a/simple_bloc_flutter/lib/app.dart b/simple_bloc_flutter/lib/app.dart index b05ecbed..5b9be22f 100644 --- a/simple_bloc_flutter/lib/app.dart +++ b/simple_bloc_flutter/lib/app.dart @@ -12,8 +12,11 @@ class SimpleBlocApp extends StatelessWidget { final TodosInteractor todosInteractor; final UserRepository userRepository; - const SimpleBlocApp({Key key, this.todosInteractor, this.userRepository}) - : super(key: key); + const SimpleBlocApp({ + super.key, + required this.todosInteractor, + required this.userRepository, + }); @override Widget build(BuildContext context) { @@ -31,9 +34,7 @@ class SimpleBlocApp extends StatelessWidget { ], routes: { ArchSampleRoutes.home: (context) { - return HomeScreen( - repository: Injector.of(context).userRepository, - ); + return HomeScreen(); }, ArchSampleRoutes.addTodo: (context) { return AddEditScreen( diff --git a/simple_bloc_flutter/lib/dependency_injection.dart b/simple_bloc_flutter/lib/dependency_injection.dart index 9b6e4604..f7e911af 100644 --- a/simple_bloc_flutter/lib/dependency_injection.dart +++ b/simple_bloc_flutter/lib/dependency_injection.dart @@ -1,9 +1,6 @@ -// A poor man's DI. This should be replaced by a proper solution once they -// are more stable. -library dependency_injector; - +// A poor man's DI, but an example of how to use the InheritedWidget class for +// DI in a Flutter app. import 'package:flutter/widgets.dart'; -import 'package:meta/meta.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -11,15 +8,15 @@ class Injector extends InheritedWidget { final TodosInteractor todosInteractor; final UserRepository userRepository; - Injector({ - Key key, - @required this.todosInteractor, - @required this.userRepository, - @required Widget child, - }) : super(key: key, child: child); + const Injector({ + super.key, + required this.todosInteractor, + required this.userRepository, + required super.child, + }); static Injector of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType(); + context.dependOnInheritedWidgetOfExactType()!; @override bool updateShouldNotify(Injector oldWidget) => diff --git a/simple_bloc_flutter/lib/localization.dart b/simple_bloc_flutter/lib/localization.dart index 23605d69..9672bc2d 100644 --- a/simple_bloc_flutter/lib/localization.dart +++ b/simple_bloc_flutter/lib/localization.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; class BlocLocalizations { static BlocLocalizations of(BuildContext context) { - return Localizations.of(context, BlocLocalizations); + return Localizations.of(context, BlocLocalizations)!; } String get appTitle => 'Simple Bloc Example'; diff --git a/simple_bloc_flutter/lib/main.dart b/simple_bloc_flutter/lib/main.dart index 260f97d1..88e3a622 100644 --- a/simple_bloc_flutter/lib/main.dart +++ b/simple_bloc_flutter/lib/main.dart @@ -1,11 +1,10 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:simple_bloc_flutter_sample/anonymous_user_repository.dart'; import 'package:simple_bloc_flutter_sample/app.dart'; import 'package:simple_blocs/simple_blocs.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; Future main() async { @@ -18,7 +17,7 @@ Future main() async { repository: LocalStorageRepository( localStorage: KeyValueStorage( 'simple_bloc', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + await SharedPreferences.getInstance(), ), ), ), @@ -27,10 +26,3 @@ Future main() async { ), ); } - -class AnonymousUserRepository implements UserRepository { - @override - Future login() { - return Future.value(UserEntity(id: 'anonymous')); - } -} diff --git a/simple_bloc_flutter/lib/main_firebase.dart b/simple_bloc_flutter/lib/main_firebase.dart deleted file mode 100644 index 72f24926..00000000 --- a/simple_bloc_flutter/lib/main_firebase.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_flutter_repository/reactive_todos_repository.dart'; -import 'package:firebase_flutter_repository/user_repository.dart'; -import 'package:flutter/widgets.dart'; -import 'package:simple_bloc_flutter_sample/app.dart'; -import 'package:simple_blocs/simple_blocs.dart'; - -void main() { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - SimpleBlocApp( - todosInteractor: TodosInteractor( - FirestoreReactiveTodosRepository(Firestore.instance), - ), - userRepository: FirebaseUserRepository(FirebaseAuth.instance), - ), - ); -} diff --git a/simple_bloc_flutter/lib/main_web.dart b/simple_bloc_flutter/lib/main_web.dart deleted file mode 100644 index 64ab02b3..00000000 --- a/simple_bloc_flutter/lib/main_web.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'dart:async'; -import 'dart:html'; - -import 'package:flutter/widgets.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:simple_bloc_flutter_sample/app.dart'; -import 'package:simple_blocs/simple_blocs.dart'; -import 'package:todos_repository_core/todos_repository_core.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - SimpleBlocApp( - todosInteractor: TodosInteractor( - ReactiveLocalStorageRepository( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'simple_bloc', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ), - userRepository: AnonymousUserRepository(), - ), - ); -} - -class AnonymousUserRepository implements UserRepository { - @override - Future login() { - return Future.value(UserEntity(id: 'anonymous')); - } -} diff --git a/simple_bloc_flutter/lib/screens/add_edit_screen.dart b/simple_bloc_flutter/lib/screens/add_edit_screen.dart index 6384ff20..57d15645 100644 --- a/simple_bloc_flutter/lib/screens/add_edit_screen.dart +++ b/simple_bloc_flutter/lib/screens/add_edit_screen.dart @@ -1,26 +1,28 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:todos_app_core/todos_app_core.dart'; class AddEditScreen extends StatefulWidget { - final Todo todo; - final Function(Todo) addTodo; - final Function(Todo) updateTodo; + final Todo? todo; + final void Function(Todo)? addTodo; + final void Function(Todo)? updateTodo; - AddEditScreen({Key key, this.todo, this.addTodo, this.updateTodo}) - : super(key: key ?? ArchSampleKeys.addTodoScreen); + const AddEditScreen({ + super.key = ArchSampleKeys.addTodoScreen, + this.addTodo, + this.updateTodo, + this.todo, + }); @override - _AddEditScreenState createState() => _AddEditScreenState(); + AddEditScreenState createState() => AddEditScreenState(); } -class _AddEditScreenState extends State { +class AddEditScreenState extends State { static final GlobalKey formKey = GlobalKey(); - String _task; - String _note; + late String _task; + late String _note; @override Widget build(BuildContext context) { @@ -36,34 +38,32 @@ class _AddEditScreenState extends State { padding: EdgeInsets.all(16.0), child: Form( key: formKey, - autovalidate: false, - onWillPop: () { - return Future(() => true); - }, + autovalidateMode: AutovalidateMode.always, + canPop: true, child: ListView( children: [ TextFormField( - initialValue: widget.todo != null ? widget.todo.task : '', + initialValue: widget.todo != null ? widget.todo!.task : '', key: ArchSampleKeys.taskField, autofocus: isEditing ? false : true, style: Theme.of(context).textTheme.headlineSmall, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).newTodoHint, ), - validator: (val) => val.trim().isEmpty + validator: (val) => val != null && val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null, - onSaved: (value) => _task = value, + onSaved: (value) => _task = value ?? '', ), TextFormField( - initialValue: widget.todo != null ? widget.todo.note : '', + initialValue: widget.todo != null ? widget.todo!.note : '', key: ArchSampleKeys.noteField, maxLines: 10, style: Theme.of(context).textTheme.titleMedium, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), - onSaved: (value) => _note = value, + onSaved: (value) => _note = value ?? '', ), ], ), @@ -78,14 +78,15 @@ class _AddEditScreenState extends State { : ArchSampleLocalizations.of(context).addTodo, child: Icon(isEditing ? Icons.check : Icons.add), onPressed: () { - final form = formKey.currentState; - if (form.validate()) { - form.save(); + if (formKey.currentState!.validate()) { + formKey.currentState!.save(); if (isEditing) { - widget.updateTodo(widget.todo.copyWith(task: _task, note: _note)); + widget.updateTodo!( + widget.todo!.copyWith(task: _task, note: _note), + ); } else { - widget.addTodo(Todo(_task, note: _note)); + widget.addTodo!(Todo(_task, note: _note)); } Navigator.pop(context); diff --git a/simple_bloc_flutter/lib/screens/detail_screen.dart b/simple_bloc_flutter/lib/screens/detail_screen.dart index 0f02eb85..13a62ee9 100644 --- a/simple_bloc_flutter/lib/screens/detail_screen.dart +++ b/simple_bloc_flutter/lib/screens/detail_screen.dart @@ -1,5 +1,5 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:simple_bloc_flutter_sample/dependency_injection.dart'; import 'package:simple_bloc_flutter_sample/screens/add_edit_screen.dart'; import 'package:simple_bloc_flutter_sample/widgets/loading.dart'; import 'package:simple_blocs/simple_blocs.dart'; @@ -7,9 +7,8 @@ import 'package:todos_app_core/todos_app_core.dart'; class DetailScreen extends StatefulWidget { final String todoId; - final TodoBloc Function() initBloc; - DetailScreen({@required this.todoId, @required this.initBloc}) + const DetailScreen({required this.todoId}) : super(key: ArchSampleKeys.todoDetailsScreen); @override @@ -19,12 +18,12 @@ class DetailScreen extends StatefulWidget { } class DetailScreenState extends State { - TodoBloc todoBloc; + late TodoBloc todoBloc; @override - void initState() { - super.initState(); - todoBloc = widget.initBloc(); + void didChangeDependencies() { + super.didChangeDependencies(); + todoBloc = TodoBloc(Injector.of(context).todosInteractor); } @override @@ -35,11 +34,11 @@ class DetailScreenState extends State { @override Widget build(BuildContext context) { return StreamBuilder( - stream: todoBloc.todo(widget.todoId).where((todo) => todo != null), + stream: todoBloc.todo(widget.todoId), builder: (context, snapshot) { if (!snapshot.hasData) return LoadingSpinner(); - final todo = snapshot.data; + final todo = snapshot.data!; return Scaffold( appBar: AppBar( @@ -102,11 +101,10 @@ class DetailScreenState extends State { ), floatingActionButton: FloatingActionButton( tooltip: ArchSampleLocalizations.of(context).editTodo, - child: Icon(Icons.edit), key: ArchSampleKeys.editTodoFab, onPressed: () { Navigator.of(context).push( - MaterialPageRoute( + MaterialPageRoute( builder: (context) { return AddEditScreen( todo: todo, @@ -117,6 +115,7 @@ class DetailScreenState extends State { ), ); }, + child: const Icon(Icons.edit), ), ); }, diff --git a/simple_bloc_flutter/lib/screens/home_screen.dart b/simple_bloc_flutter/lib/screens/home_screen.dart index bea767df..a0d7c923 100644 --- a/simple_bloc_flutter/lib/screens/home_screen.dart +++ b/simple_bloc_flutter/lib/screens/home_screen.dart @@ -1,8 +1,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:meta/meta.dart'; import 'package:rxdart/rxdart.dart'; import 'package:simple_bloc_flutter_sample/dependency_injection.dart'; import 'package:simple_bloc_flutter_sample/localization.dart'; @@ -13,15 +11,13 @@ import 'package:simple_bloc_flutter_sample/widgets/stats_counter.dart'; import 'package:simple_bloc_flutter_sample/widgets/todo_list.dart'; import 'package:simple_bloc_flutter_sample/widgets/todos_bloc_provider.dart'; import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; enum AppTab { todos, stats } class HomeScreen extends StatefulWidget { - final UserRepository repository; - - HomeScreen({@required this.repository}) - : super(key: ArchSampleKeys.homeScreen); + const HomeScreen({super.key}); @override State createState() { @@ -30,14 +26,14 @@ class HomeScreen extends StatefulWidget { } class HomeScreenState extends State { - UserBloc usersBloc; - StreamController tabController; + late UserBloc usersBloc; + late StreamController tabController; @override - void initState() { - super.initState(); + void didChangeDependencies() { + super.didChangeDependencies(); - usersBloc = UserBloc(widget.repository); + usersBloc = UserBloc(Injector.of(context).userRepository); tabController = StreamController(); } @@ -80,12 +76,12 @@ class HomeScreenState extends State { onPressed: () { Navigator.pushNamed(context, ArchSampleRoutes.addTodo); }, - child: Icon(Icons.add), tooltip: ArchSampleLocalizations.of(context).addTodo, + child: const Icon(Icons.add), ), bottomNavigationBar: BottomNavigationBar( key: ArchSampleKeys.tabs, - currentIndex: AppTab.values.indexOf(activeTabSnapshot.data), + currentIndex: AppTab.values.indexOf(activeTabSnapshot.data!), onTap: (index) { tabController.add(AppTab.values[index]); }, @@ -97,11 +93,9 @@ class HomeScreenState extends State { ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab, ), - title: Text( - tab == AppTab.stats - ? ArchSampleLocalizations.of(context).stats - : ArchSampleLocalizations.of(context).todos, - ), + label: tab == AppTab.stats + ? ArchSampleLocalizations.of(context).stats + : ArchSampleLocalizations.of(context).todos, ); }).toList(), ), diff --git a/simple_bloc_flutter/lib/widgets/extra_actions_button.dart b/simple_bloc_flutter/lib/widgets/extra_actions_button.dart index 1701e8e0..4cabe430 100644 --- a/simple_bloc_flutter/lib/widgets/extra_actions_button.dart +++ b/simple_bloc_flutter/lib/widgets/extra_actions_button.dart @@ -6,12 +6,12 @@ class ExtraActionsButton extends StatelessWidget { final bool allComplete; final bool hasCompletedTodos; - ExtraActionsButton({ - this.onSelected, + const ExtraActionsButton({ + required this.onSelected, this.allComplete = false, this.hasCompletedTodos = true, - Key key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context) { diff --git a/simple_bloc_flutter/lib/widgets/filter_button.dart b/simple_bloc_flutter/lib/widgets/filter_button.dart index eff0b79d..bfbef0d5 100644 --- a/simple_bloc_flutter/lib/widgets/filter_button.dart +++ b/simple_bloc_flutter/lib/widgets/filter_button.dart @@ -7,21 +7,24 @@ class FilterButton extends StatelessWidget { final VisibilityFilter activeFilter; final bool isActive; - FilterButton({this.onSelected, this.activeFilter, this.isActive, Key key}) - : super(key: key); + const FilterButton({ + required this.onSelected, + required this.activeFilter, + required this.isActive, + super.key, + }); @override Widget build(BuildContext context) { - final theme = Theme.of(context); - final defaultStyle = theme.textTheme.bodyMedium; - final activeStyle = theme.textTheme.bodyMedium.copyWith( - color: theme.accentColor, + final defaultStyle = Theme.of(context).textTheme.bodyMedium; + final activeStyle = defaultStyle?.copyWith( + color: Theme.of(context).colorScheme.secondary, ); final button = _Button( onSelected: onSelected, activeFilter: activeFilter, - activeStyle: activeStyle, - defaultStyle: defaultStyle, + activeStyle: activeStyle!, + defaultStyle: defaultStyle!, ); return AnimatedOpacity( @@ -34,12 +37,11 @@ class FilterButton extends StatelessWidget { class _Button extends StatelessWidget { const _Button({ - Key key, - @required this.onSelected, - @required this.activeFilter, - @required this.activeStyle, - @required this.defaultStyle, - }) : super(key: key); + required this.onSelected, + required this.activeFilter, + required this.activeStyle, + required this.defaultStyle, + }); final PopupMenuItemSelected onSelected; final VisibilityFilter activeFilter; diff --git a/simple_bloc_flutter/lib/widgets/loading.dart b/simple_bloc_flutter/lib/widgets/loading.dart index 440fc4f3..68c0ec55 100644 --- a/simple_bloc_flutter/lib/widgets/loading.dart +++ b/simple_bloc_flutter/lib/widgets/loading.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; class LoadingSpinner extends StatelessWidget { - LoadingSpinner({Key key}) : super(key: key); + const LoadingSpinner({super.key}); @override Widget build(BuildContext context) { diff --git a/simple_bloc_flutter/lib/widgets/stats_counter.dart b/simple_bloc_flutter/lib/widgets/stats_counter.dart index 28897de0..2f374f6a 100644 --- a/simple_bloc_flutter/lib/widgets/stats_counter.dart +++ b/simple_bloc_flutter/lib/widgets/stats_counter.dart @@ -1,5 +1,3 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -7,8 +5,10 @@ import 'package:todos_app_core/todos_app_core.dart'; class StatsCounter extends StatefulWidget { final StatsBloc Function() buildBloc; - StatsCounter({Key key, @required this.buildBloc}) - : super(key: key ?? ArchSampleKeys.statsCounter); + const StatsCounter({ + super.key = ArchSampleKeys.statsCounter, + required this.buildBloc, + }); @override StatsCounterState createState() { @@ -17,7 +17,7 @@ class StatsCounter extends StatefulWidget { } class StatsCounterState extends State { - StatsBloc bloc; + late StatsBloc bloc; @override void initState() { diff --git a/simple_bloc_flutter/lib/widgets/todo_item.dart b/simple_bloc_flutter/lib/widgets/todo_item.dart index 46dbecfe..f4ee3975 100644 --- a/simple_bloc_flutter/lib/widgets/todo_item.dart +++ b/simple_bloc_flutter/lib/widgets/todo_item.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:simple_blocs/simple_blocs.dart'; import 'package:todos_app_core/todos_app_core.dart'; @@ -6,14 +5,15 @@ import 'package:todos_app_core/todos_app_core.dart'; class TodoItem extends StatelessWidget { final DismissDirectionCallback onDismissed; final GestureTapCallback onTap; - final ValueChanged onCheckboxChanged; + final ValueChanged onCheckboxChanged; final Todo todo; - TodoItem({ - @required this.onDismissed, - @required this.onTap, - @required this.onCheckboxChanged, - @required this.todo, + const TodoItem({ + super.key, + required this.onDismissed, + required this.onTap, + required this.onCheckboxChanged, + required this.todo, }); @override diff --git a/simple_bloc_flutter/lib/widgets/todo_list.dart b/simple_bloc_flutter/lib/widgets/todo_list.dart index 80fb16f5..f516fdd1 100644 --- a/simple_bloc_flutter/lib/widgets/todo_list.dart +++ b/simple_bloc_flutter/lib/widgets/todo_list.dart @@ -1,21 +1,20 @@ import 'package:flutter/material.dart'; -import 'package:todos_app_core/todos_app_core.dart'; -import 'package:simple_bloc_flutter_sample/dependency_injection.dart'; import 'package:simple_bloc_flutter_sample/screens/detail_screen.dart'; import 'package:simple_bloc_flutter_sample/widgets/loading.dart'; import 'package:simple_bloc_flutter_sample/widgets/todo_item.dart'; import 'package:simple_bloc_flutter_sample/widgets/todos_bloc_provider.dart'; import 'package:simple_blocs/simple_blocs.dart'; +import 'package:todos_app_core/todos_app_core.dart'; class TodoList extends StatelessWidget { - TodoList({Key key}) : super(key: key); + const TodoList({super.key}); @override Widget build(BuildContext context) { return StreamBuilder>( stream: TodosBlocProvider.of(context).visibleTodos, builder: (context, snapshot) => snapshot.hasData - ? _buildList(snapshot.data) + ? _buildList(snapshot.data!) : LoadingSpinner(key: ArchSampleKeys.todosLoading), ); } @@ -35,19 +34,15 @@ class TodoList extends StatelessWidget { onTap: () { Navigator.of(context) .push( - MaterialPageRoute( - builder: (_) { - return DetailScreen( - todoId: todo.id, - initBloc: () => - TodoBloc(Injector.of(context).todosInteractor), - ); - }, + MaterialPageRoute( + builder: (context) => DetailScreen(todoId: todo.id), ), ) .then((todo) { if (todo is Todo) { - _showUndoSnackbar(context, todo); + if (context.mounted) { + _showUndoSnackbar(context, todo); + } } }); }, @@ -85,6 +80,6 @@ class TodoList extends StatelessWidget { ), ); - Scaffold.of(context).showSnackBar(snackBar); + ScaffoldMessenger.of(context).showSnackBar(snackBar); } } diff --git a/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart b/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart index 7c1d8db7..0b62b639 100644 --- a/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart +++ b/simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:simple_blocs/simple_blocs.dart'; @@ -6,20 +5,19 @@ class TodosBlocProvider extends StatefulWidget { final Widget child; final TodosListBloc bloc; - TodosBlocProvider({Key key, @required this.child, @required this.bloc}) - : super(key: key); + const TodosBlocProvider({required this.child, required this.bloc, super.key}); @override - _TodosBlocProviderState createState() => _TodosBlocProviderState(); + TodosBlocProviderState createState() => TodosBlocProviderState(); static TodosListBloc of(BuildContext context) { return context - .dependOnInheritedWidgetOfExactType<_TodosBlocProvider>() + .dependOnInheritedWidgetOfExactType<_TodosBlocProvider>()! .bloc; } } -class _TodosBlocProviderState extends State { +class TodosBlocProviderState extends State { @override Widget build(BuildContext context) { return _TodosBlocProvider(bloc: widget.bloc, child: widget.child); @@ -35,8 +33,7 @@ class _TodosBlocProviderState extends State { class _TodosBlocProvider extends InheritedWidget { final TodosListBloc bloc; - _TodosBlocProvider({Key key, @required this.bloc, @required Widget child}) - : super(key: key, child: child); + const _TodosBlocProvider({required super.child, required this.bloc}); @override bool updateShouldNotify(_TodosBlocProvider old) => bloc != old.bloc; diff --git a/simple_bloc_flutter/linux/.gitignore b/simple_bloc_flutter/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/simple_bloc_flutter/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/simple_bloc_flutter/linux/CMakeLists.txt b/simple_bloc_flutter/linux/CMakeLists.txt new file mode 100644 index 00000000..73c66cc4 --- /dev/null +++ b/simple_bloc_flutter/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "simple_bloc_flutter_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.simple_bloc_flutter_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/simple_bloc_flutter/linux/flutter/CMakeLists.txt b/simple_bloc_flutter/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/simple_bloc_flutter/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/simple_bloc_flutter/linux/flutter/generated_plugin_registrant.cc b/simple_bloc_flutter/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/simple_bloc_flutter/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/simple_bloc_flutter/linux/flutter/generated_plugin_registrant.h b/simple_bloc_flutter/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/simple_bloc_flutter/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/simple_bloc_flutter/linux/flutter/generated_plugins.cmake b/simple_bloc_flutter/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/simple_bloc_flutter/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/simple_bloc_flutter/linux/runner/CMakeLists.txt b/simple_bloc_flutter/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/simple_bloc_flutter/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/simple_bloc_flutter/linux/runner/main.cc b/simple_bloc_flutter/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/simple_bloc_flutter/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/simple_bloc_flutter/linux/runner/my_application.cc b/simple_bloc_flutter/linux/runner/my_application.cc new file mode 100644 index 00000000..5db96884 --- /dev/null +++ b/simple_bloc_flutter/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "simple_bloc_flutter_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "simple_bloc_flutter_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/simple_bloc_flutter/linux/runner/my_application.h b/simple_bloc_flutter/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/simple_bloc_flutter/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/simple_bloc_flutter/macos/.gitignore b/simple_bloc_flutter/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/simple_bloc_flutter/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/simple_bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig b/simple_bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/simple_bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/simple_bloc_flutter/macos/Flutter/Flutter-Release.xcconfig b/simple_bloc_flutter/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/simple_bloc_flutter/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/simple_bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift b/simple_bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/simple_bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/simple_bloc_flutter/macos/Podfile b/simple_bloc_flutter/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/simple_bloc_flutter/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/simple_bloc_flutter/macos/Podfile.lock b/simple_bloc_flutter/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/simple_bloc_flutter/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/simple_bloc_flutter/macos/Runner.xcodeproj/project.pbxproj b/simple_bloc_flutter/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..54eb3cdd --- /dev/null +++ b/simple_bloc_flutter/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 85DA56021CE45A760AA3A54E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 302B63344A18E0A9F0A76FFC /* Pods_Runner.framework */; }; + EB98561EE9A6EEBB9827F08C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBA83EC4DF44D59B0B4B1155 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 029192B5D938D2D1F537DF38 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2024E86BF091F3C84436D6C3 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 302B63344A18E0A9F0A76FFC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* simple_bloc_flutter_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = simple_bloc_flutter_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 71B571842B1C7DE4FE81DCD8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 887D1F40AE6DBE8F286247FE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + EE9DC3DED0D3A86568B4D843 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + F1FD579DEBCFDBCD6534F16B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FBA83EC4DF44D59B0B4B1155 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EB98561EE9A6EEBB9827F08C /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 85DA56021CE45A760AA3A54E /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + B787C8DD073B6601A153460F /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* simple_bloc_flutter_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + B787C8DD073B6601A153460F /* Pods */ = { + isa = PBXGroup; + children = ( + F1FD579DEBCFDBCD6534F16B /* Pods-Runner.debug.xcconfig */, + 2024E86BF091F3C84436D6C3 /* Pods-Runner.release.xcconfig */, + 71B571842B1C7DE4FE81DCD8 /* Pods-Runner.profile.xcconfig */, + 029192B5D938D2D1F537DF38 /* Pods-RunnerTests.debug.xcconfig */, + EE9DC3DED0D3A86568B4D843 /* Pods-RunnerTests.release.xcconfig */, + 887D1F40AE6DBE8F286247FE /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 302B63344A18E0A9F0A76FFC /* Pods_Runner.framework */, + FBA83EC4DF44D59B0B4B1155 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 3F6837CE77C83266F7AAC2C4 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + E1F41E112214C56C2724B732 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 0CA2C25714A4EB720EAF8762 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* simple_bloc_flutter_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 0CA2C25714A4EB720EAF8762 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 3F6837CE77C83266F7AAC2C4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E1F41E112214C56C2724B732 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 029192B5D938D2D1F537DF38 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simple_bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simple_bloc_flutter_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EE9DC3DED0D3A86568B4D843 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simple_bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simple_bloc_flutter_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 887D1F40AE6DBE8F286247FE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleBlocFlutterSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simple_bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simple_bloc_flutter_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/simple_bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/simple_bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/simple_bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..cbba2d7a --- /dev/null +++ b/simple_bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simple_bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata b/simple_bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/simple_bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/simple_bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_bloc_flutter/macos/Runner/AppDelegate.swift b/simple_bloc_flutter/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 zcmaiYXH?Tqu=Xz`p-L#B_gI#0we$cm_HcmYFP$?wjD#BaCN4mzC5#`>w9y6=ThxrYZc0WPXprg zYjB`UsV}0=eUtY$(P6YW}npdd;%9pi?zS3k-nqCob zSX_AQEf|=wYT3r?f!*Yt)ar^;l3Sro{z(7deUBPd2~(SzZ-s@0r&~Km2S?8r##9-< z)2UOSVaHqq6}%sA9Ww;V2LG=PnNAh6mA2iWOuV7T_lRDR z&N8-eN=U)-T|;wo^Wv=34wtV0g}sAAe}`Ph@~!|<;z7*K8(qkX0}o=!(+N*UWrkEja*$_H6mhK1u{P!AC39} z|3+Z(mAOq#XRYS)TLoHv<)d%$$I@+x+2)V{@o~~J-!YUI-Q9%!Ldi4Op&Lw&B>jj* zwAgC#Y>gbIqv!d|J5f!$dbCXoq(l3GR(S>(rtZ~Z*agXMMKN!@mWT_vmCbSd3dUUm z4M&+gz?@^#RRGal%G3dDvj7C5QTb@9+!MG+>0dcjtZEB45c+qx*c?)d<%htn1o!#1 zpIGonh>P1LHu3s)fGFF-qS}AXjW|M*2Xjkh7(~r(lN=o#mBD9?jt74=Rz85I4Nfx_ z7Z)q?!};>IUjMNM6ee2Thq7))a>My?iWFxQ&}WvsFP5LP+iGz+QiYek+K1`bZiTV- zHHYng?ct@Uw5!gquJ(tEv1wTrRR7cemI>aSzLI^$PxW`wL_zt@RSfZ1M3c2sbebM* ze0=;sy^!90gL~YKISz*x;*^~hcCoO&CRD)zjT(A2b_uRue=QXFe5|!cf0z1m!iwv5GUnLw9Dr*Ux z)3Lc!J@Ei;&&yxGpf2kn@2wJ2?t6~obUg;?tBiD#uo$SkFIasu+^~h33W~`r82rSa ztyE;ehFjC2hjpJ-e__EH&z?!~>UBb=&%DS>NT)1O3Isn-!SElBV2!~m6v0$vx^a<@ISutdTk1@?;i z<8w#b-%|a#?e5(n@7>M|v<<0Kpg?BiHYMRe!3Z{wYc2hN{2`6(;q`9BtXIhVq6t~KMH~J0~XtUuT06hL8c1BYZWhN zk4F2I;|za*R{ToHH2L?MfRAm5(i1Ijw;f+0&J}pZ=A0;A4M`|10ZskA!a4VibFKn^ zdVH4OlsFV{R}vFlD~aA4xxSCTTMW@Gws4bFWI@xume%smAnuJ0b91QIF?ZV!%VSRJ zO7FmG!swKO{xuH{DYZ^##gGrXsUwYfD0dxXX3>QmD&`mSi;k)YvEQX?UyfIjQeIm! z0ME3gmQ`qRZ;{qYOWt}$-mW*>D~SPZKOgP)T-Sg%d;cw^#$>3A9I(%#vsTRQe%moT zU`geRJ16l>FV^HKX1GG7fR9AT((jaVb~E|0(c-WYQscVl(z?W!rJp`etF$dBXP|EG z=WXbcZ8mI)WBN>3<@%4eD597FD5nlZajwh8(c$lum>yP)F}=(D5g1-WVZRc)(!E3} z-6jy(x$OZOwE=~{EQS(Tp`yV2&t;KBpG*XWX!yG+>tc4aoxbXi7u@O*8WWFOxUjcq z^uV_|*818$+@_{|d~VOP{NcNi+FpJ9)aA2So<7sB%j`$Prje&auIiTBb{oD7q~3g0 z>QNIwcz(V-y{Ona?L&=JaV5`o71nIsWUMA~HOdCs10H+Irew#Kr(2cn>orG2J!jvP zqcVX0OiF}c<)+5&p}a>_Uuv)L_j}nqnJ5a?RPBNi8k$R~zpZ33AA4=xJ@Z($s3pG9 zkURJY5ZI=cZGRt_;`hs$kE@B0FrRx(6K{`i1^*TY;Vn?|IAv9|NrN*KnJqO|8$e1& zb?OgMV&q5|w7PNlHLHF) zB+AK#?EtCgCvwvZ6*u|TDhJcCO+%I^@Td8CR}+nz;OZ*4Dn?mSi97m*CXXc=};!P`B?}X`F-B5v-%ACa8fo0W++j&ztmqK z;&A)cT4ob9&MxpQU41agyMU8jFq~RzXOAsy>}hBQdFVL%aTn~M>5t9go2j$i9=(rZ zADmVj;Qntcr3NIPPTggpUxL_z#5~C!Gk2Rk^3jSiDqsbpOXf^f&|h^jT4|l2ehPat zb$<*B+x^qO8Po2+DAmrQ$Zqc`1%?gp*mDk>ERf6I|42^tjR6>}4`F_Mo^N(~Spjcg z_uY$}zui*PuDJjrpP0Pd+x^5ds3TG#f?57dFL{auS_W8|G*o}gcnsKYjS6*t8VI<) zcjqTzW(Hk*t-Qhq`Xe+x%}sxXRerScbPGv8hlJ;CnU-!Nl=# zR=iTFf9`EItr9iAlAGi}i&~nJ-&+)Y| zMZigh{LXe)uR+4D_Yb+1?I93mHQ5{pId2Fq%DBr7`?ipi;CT!Q&|EO3gH~7g?8>~l zT@%*5BbetH)~%TrAF1!-!=)`FIS{^EVA4WlXYtEy^|@y@yr!C~gX+cp2;|O4x1_Ol z4fPOE^nj(}KPQasY#U{m)}TZt1C5O}vz`A|1J!-D)bR%^+=J-yJsQXDzFiqb+PT0! zIaDWWU(AfOKlSBMS};3xBN*1F2j1-_=%o($ETm8@oR_NvtMDVIv_k zlnNBiHU&h8425{MCa=`vb2YP5KM7**!{1O>5Khzu+5OVGY;V=Vl+24fOE;tMfujoF z0M``}MNnTg3f%Uy6hZi$#g%PUA_-W>uVCYpE*1j>U8cYP6m(>KAVCmbsDf39Lqv0^ zt}V6FWjOU@AbruB7MH2XqtnwiXS2scgjVMH&aF~AIduh#^aT1>*V>-st8%=Kk*{bL zzbQcK(l2~)*A8gvfX=RPsNnjfkRZ@3DZ*ff5rmx{@iYJV+a@&++}ZW+za2fU>&(4y`6wgMpQGG5Ah(9oGcJ^P(H< zvYn5JE$2B`Z7F6ihy>_49!6}(-)oZ(zryIXt=*a$bpIw^k?>RJ2 zQYr>-D#T`2ZWDU$pM89Cl+C<;J!EzHwn(NNnWpYFqDDZ_*FZ{9KQRcSrl5T>dj+eA zi|okW;6)6LR5zebZJtZ%6Gx8^=2d9>_670!8Qm$wd+?zc4RAfV!ZZ$jV0qrv(D`db zm_T*KGCh3CJGb(*X6nXzh!h9@BZ-NO8py|wG8Qv^N*g?kouH4%QkPU~Vizh-D3<@% zGomx%q42B7B}?MVdv1DFb!axQ73AUxqr!yTyFlp%Z1IAgG49usqaEbI_RnbweR;Xs zpJq7GKL_iqi8Md?f>cR?^0CA+Uk(#mTlGdZbuC*$PrdB$+EGiW**=$A3X&^lM^K2s zzwc3LtEs5|ho z2>U(-GL`}eNgL-nv3h7E<*<>C%O^=mmmX0`jQb6$mP7jUKaY4je&dCG{x$`0=_s$+ zSpgn!8f~ya&U@c%{HyrmiW2&Wzc#Sw@+14sCpTWReYpF9EQ|7vF*g|sqG3hx67g}9 zwUj5QP2Q-(KxovRtL|-62_QsHLD4Mu&qS|iDp%!rs(~ah8FcrGb?Uv^Qub5ZT_kn%I^U2rxo1DDpmN@8uejxik`DK2~IDi1d?%~pR7i#KTS zA78XRx<(RYO0_uKnw~vBKi9zX8VnjZEi?vD?YAw}y+)wIjIVg&5(=%rjx3xQ_vGCy z*&$A+bT#9%ZjI;0w(k$|*x{I1c!ECMus|TEA#QE%#&LxfGvijl7Ih!B2 z6((F_gwkV;+oSKrtr&pX&fKo3s3`TG@ye+k3Ov)<#J|p8?vKh@<$YE@YIU1~@7{f+ zydTna#zv?)6&s=1gqH<-piG>E6XW8ZI7&b@-+Yk0Oan_CW!~Q2R{QvMm8_W1IV8<+ zQTyy=(Wf*qcQubRK)$B;QF}Y>V6d_NM#=-ydM?%EPo$Q+jkf}*UrzR?Nsf?~pzIj$ z<$wN;7c!WDZ(G_7N@YgZ``l;_eAd3+;omNjlpfn;0(B7L)^;;1SsI6Le+c^ULe;O@ zl+Z@OOAr4$a;=I~R0w4jO`*PKBp?3K+uJ+Tu8^%i<_~bU!p%so z^sjol^slR`W@jiqn!M~eClIIl+`A5%lGT{z^mRbpv}~AyO%R*jmG_Wrng{B9TwIuS z0!@fsM~!57K1l0%{yy(#no}roy#r!?0wm~HT!vLDfEBs9x#`9yCKgufm0MjVRfZ=f z4*ZRc2Lgr(P+j2zQE_JzYmP0*;trl7{*N341Cq}%^M^VC3gKG-hY zmPT>ECyrhIoFhnMB^qpdbiuI}pk{qPbK^}0?Rf7^{98+95zNq6!RuV_zAe&nDk0;f zez~oXlE5%ve^TmBEt*x_X#fs(-En$jXr-R4sb$b~`nS=iOy|OVrph(U&cVS!IhmZ~ zKIRA9X%Wp1J=vTvHZ~SDe_JXOe9*fa zgEPf;gD^|qE=dl>Qkx3(80#SE7oxXQ(n4qQ#by{uppSKoDbaq`U+fRqk0BwI>IXV3 zD#K%ASkzd7u>@|pA=)Z>rQr@dLH}*r7r0ng zxa^eME+l*s7{5TNu!+bD{Pp@2)v%g6^>yj{XP&mShhg9GszNu4ITW=XCIUp2Xro&1 zg_D=J3r)6hp$8+94?D$Yn2@Kp-3LDsci)<-H!wCeQt$e9Jk)K86hvV^*Nj-Ea*o;G zsuhRw$H{$o>8qByz1V!(yV{p_0X?Kmy%g#1oSmlHsw;FQ%j9S#}ha zm0Nx09@jmOtP8Q+onN^BAgd8QI^(y!n;-APUpo5WVdmp8!`yKTlF>cqn>ag`4;o>i zl!M0G-(S*fm6VjYy}J}0nX7nJ$h`|b&KuW4d&W5IhbR;-)*9Y0(Jj|@j`$xoPQ=Cl literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/simple_bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/change_notifier_provider/ios/Runner/Info.plist b/change_notifier_provider/ios/Runner/Info.plist index cbeedc31..2d54d440 100644 --- a/change_notifier_provider/ios/Runner/Info.plist +++ b/change_notifier_provider/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Change Notifier Provider Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - change_notifier_provider + change_notifier_provider_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/change_notifier_provider/ios/Runner/Runner-Bridging-Header.h b/change_notifier_provider/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/change_notifier_provider/ios/Runner/Runner-Bridging-Header.h +++ b/change_notifier_provider/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/change_notifier_provider/ios/RunnerTests/RunnerTests.swift b/change_notifier_provider/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/change_notifier_provider/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/change_notifier_provider/lib/add_todo_screen.dart b/change_notifier_provider/lib/add_todo_screen.dart index 18b4c8ff..75a94926 100644 --- a/change_notifier_provider/lib/add_todo_screen.dart +++ b/change_notifier_provider/lib/add_todo_screen.dart @@ -9,10 +9,10 @@ class AddTodoScreen extends StatefulWidget { const AddTodoScreen() : super(key: ArchSampleKeys.addTodoScreen); @override - _AddTodoScreenState createState() => _AddTodoScreenState(); + AddTodoScreenState createState() => AddTodoScreenState(); } -class _AddTodoScreenState extends State { +class AddTodoScreenState extends State { final _formKey = GlobalKey(); final _titleEditingController = TextEditingController(); final _notesEditingController = TextEditingController(); @@ -33,7 +33,7 @@ class _AddTodoScreenState extends State { appBar: AppBar(title: Text(localizations.addTodo)), body: Form( key: _formKey, - autovalidate: false, + autovalidateMode: AutovalidateMode.always, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( @@ -44,10 +44,10 @@ class _AddTodoScreenState extends State { decoration: InputDecoration( hintText: localizations.newTodoHint, ), - style: textTheme.headline, + style: textTheme.titleLarge, autofocus: true, validator: (val) { - return val.trim().isEmpty + return val != null && val.trim().isEmpty ? localizations.emptyTodoError : null; }, @@ -67,7 +67,7 @@ class _AddTodoScreenState extends State { key: ArchSampleKeys.saveNewTodo, tooltip: localizations.addTodo, onPressed: () { - if (_formKey.currentState.validate()) { + if (_formKey.currentState!.validate()) { Provider.of(context, listen: false).addTodo( Todo( _titleEditingController.text, diff --git a/change_notifier_provider/lib/app.dart b/change_notifier_provider/lib/app.dart index 515343e8..03fca3d8 100644 --- a/change_notifier_provider/lib/app.dart +++ b/change_notifier_provider/lib/app.dart @@ -1,9 +1,8 @@ -import 'package:flutter/material.dart'; -import 'package:meta/meta.dart'; -import 'package:provider/provider.dart'; import 'package:change_notifier_provider_sample/add_todo_screen.dart'; import 'package:change_notifier_provider_sample/localization.dart'; import 'package:change_notifier_provider_sample/todo_list_model.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; @@ -12,7 +11,7 @@ import 'home/home_screen.dart'; class ProviderApp extends StatelessWidget { final TodosRepository repository; - ProviderApp({@required this.repository}); + const ProviderApp({super.key, required this.repository}); @override Widget build(BuildContext context) { diff --git a/change_notifier_provider/lib/details_screen.dart b/change_notifier_provider/lib/details_screen.dart index 2d330084..408ab86d 100644 --- a/change_notifier_provider/lib/details_screen.dart +++ b/change_notifier_provider/lib/details_screen.dart @@ -5,13 +5,12 @@ import 'package:todos_app_core/todos_app_core.dart'; import 'edit_todo_screen.dart'; import 'models.dart'; -import 'todo_list_model.dart'; class DetailsScreen extends StatelessWidget { final String id; final VoidCallback onRemove; - const DetailsScreen({@required this.id, @required this.onRemove}) + const DetailsScreen({required this.id, required this.onRemove}) : super(key: ArchSampleKeys.todoDetailsScreen); @override @@ -28,7 +27,7 @@ class DetailsScreen extends StatelessWidget { ), ], ), - body: Selector( + body: Selector( selector: (context, model) => model.todoById(id), shouldRebuild: (prev, next) => next != null, builder: (context, todo, _) { @@ -43,12 +42,12 @@ class DetailsScreen extends StatelessWidget { padding: const EdgeInsets.only(right: 8.0), child: Checkbox( key: ArchSampleKeys.detailsTodoItemCheckbox, - value: todo.complete, + value: todo?.complete, onChanged: (complete) { Provider.of( context, listen: false, - ).updateTodo(todo.copy(complete: !todo.complete)); + ).updateTodo(todo!.copy(complete: !todo.complete)); }, ), ), @@ -62,7 +61,7 @@ class DetailsScreen extends StatelessWidget { bottom: 16.0, ), child: Text( - todo.task, + todo!.task, key: ArchSampleKeys.detailsTodoItemTask, style: Theme.of(context).textTheme.headlineSmall, ), @@ -87,7 +86,7 @@ class DetailsScreen extends StatelessWidget { onPressed: () { Navigator.push( context, - MaterialPageRoute( + MaterialPageRoute( builder: (context) => EditTodoScreen( id: id, onEdit: (task, note) { @@ -97,7 +96,7 @@ class DetailsScreen extends StatelessWidget { ); final todo = model.todoById(id); - model.updateTodo(todo.copy(task: task, note: note)); + model.updateTodo(todo!.copy(task: task, note: note)); return Navigator.pop(context); }, diff --git a/change_notifier_provider/lib/edit_todo_screen.dart b/change_notifier_provider/lib/edit_todo_screen.dart index 81644e51..fb8fcd42 100644 --- a/change_notifier_provider/lib/edit_todo_screen.dart +++ b/change_notifier_provider/lib/edit_todo_screen.dart @@ -7,17 +7,17 @@ class EditTodoScreen extends StatefulWidget { final void Function(String task, String note) onEdit; final String id; - const EditTodoScreen({@required this.id, @required this.onEdit}) + const EditTodoScreen({required this.id, required this.onEdit}) : super(key: ArchSampleKeys.editTodoScreen); @override - _EditTodoScreenState createState() => _EditTodoScreenState(); + EditTodoScreenState createState() => EditTodoScreenState(); } -class _EditTodoScreenState extends State { +class EditTodoScreenState extends State { final _formKey = GlobalKey(); - TextEditingController _taskController; - TextEditingController _noteController; + late final TextEditingController _taskController; + late final TextEditingController _noteController; @override void initState() { @@ -55,7 +55,7 @@ class _EditTodoScreenState extends State { hintText: ArchSampleLocalizations.of(context).newTodoHint, ), validator: (val) { - return val.trim().isEmpty + return val != null && val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null; }, @@ -76,8 +76,8 @@ class _EditTodoScreenState extends State { key: ArchSampleKeys.saveTodoFab, tooltip: ArchSampleLocalizations.of(context).saveChanges, onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); widget.onEdit(_taskController.text, _noteController.text); } }, diff --git a/change_notifier_provider/lib/home/extra_actions_button.dart b/change_notifier_provider/lib/home/extra_actions_button.dart index 7d0a6ac3..7bcd31c0 100644 --- a/change_notifier_provider/lib/home/extra_actions_button.dart +++ b/change_notifier_provider/lib/home/extra_actions_button.dart @@ -5,7 +5,7 @@ import 'package:todos_app_core/todos_app_core.dart'; import '../todo_list_model.dart'; class ExtraActionsButton extends StatelessWidget { - const ExtraActionsButton({Key key}) : super(key: key); + const ExtraActionsButton({super.key}); @override Widget build(BuildContext context) { diff --git a/change_notifier_provider/lib/home/filter_button.dart b/change_notifier_provider/lib/home/filter_button.dart index b36ee549..8f6ab785 100644 --- a/change_notifier_provider/lib/home/filter_button.dart +++ b/change_notifier_provider/lib/home/filter_button.dart @@ -4,9 +4,9 @@ import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { - final bool isActive; + const FilterButton({super.key, required this.isActive}); - const FilterButton({this.isActive, Key key}) : super(key: key); + final bool isActive; @override Widget build(BuildContext context) { @@ -35,9 +35,9 @@ class FilterButton extends StatelessWidget { BuildContext context, TodoListModel store, ) { - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); final defaultStyle = Theme.of(context).textTheme.bodyMedium; return [ diff --git a/change_notifier_provider/lib/home/home_screen.dart b/change_notifier_provider/lib/home/home_screen.dart index af67034e..5ea5641e 100644 --- a/change_notifier_provider/lib/home/home_screen.dart +++ b/change_notifier_provider/lib/home/home_screen.dart @@ -1,9 +1,9 @@ -import 'package:flutter/material.dart' hide Action; -import 'package:provider/provider.dart'; import 'package:change_notifier_provider_sample/home/stats_view.dart'; import 'package:change_notifier_provider_sample/home/todo_list_view.dart'; import 'package:change_notifier_provider_sample/localization.dart'; import 'package:change_notifier_provider_sample/todo_list_model.dart'; +import 'package:flutter/material.dart' hide Action; +import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; import '../models.dart'; @@ -11,13 +11,13 @@ import 'extra_actions_button.dart'; import 'filter_button.dart'; class HomeScreen extends StatefulWidget { - const HomeScreen(); + const HomeScreen({super.key}); @override - _HomeScreenState createState() => _HomeScreenState(); + HomeScreenState createState() => HomeScreenState(); } -class _HomeScreenState extends State { +class HomeScreenState extends State { // Because the state of the tabs is only a concern to the HomeScreen Widget, // it is stored as local state rather than in the TodoListModel. final _tab = ValueNotifier(_HomeScreenTab.todos); @@ -36,9 +36,8 @@ class _HomeScreenState extends State { actions: [ ValueListenableBuilder<_HomeScreenTab>( valueListenable: _tab, - builder: (_, tab, __) => FilterButton( - isActive: tab == _HomeScreenTab.todos, - ), + builder: (_, tab, _) => + FilterButton(isActive: tab == _HomeScreenTab.todos), ), const ExtraActionsButton(), ], @@ -67,11 +66,12 @@ class _HomeScreenState extends State { case _HomeScreenTab.stats: return const StatsView(); case _HomeScreenTab.todos: - default: return TodoListView( onRemove: (context, todo) { - Provider.of(context, listen: false) - .removeTodo(todo); + Provider.of( + context, + listen: false, + ).removeTodo(todo); _showUndoSnackbar(context, todo); }, ); @@ -90,11 +90,11 @@ class _HomeScreenState extends State { items: [ BottomNavigationBarItem( icon: Icon(Icons.list, key: ArchSampleKeys.todoTab), - title: Text(ArchSampleLocalizations.of(context).todos), + label: ArchSampleLocalizations.of(context).todos, ), BottomNavigationBarItem( icon: Icon(Icons.show_chart, key: ArchSampleKeys.statsTab), - title: Text(ArchSampleLocalizations.of(context).stats), + label: ArchSampleLocalizations.of(context).stats, ), ], ); @@ -104,7 +104,7 @@ class _HomeScreenState extends State { } void _showUndoSnackbar(BuildContext context, Todo todo) { - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( key: ArchSampleKeys.snackbar, duration: const Duration(seconds: 2), diff --git a/change_notifier_provider/lib/home/stats_view.dart b/change_notifier_provider/lib/home/stats_view.dart index e52497c5..20945f32 100644 --- a/change_notifier_provider/lib/home/stats_view.dart +++ b/change_notifier_provider/lib/home/stats_view.dart @@ -1,11 +1,10 @@ import 'package:change_notifier_provider_sample/todo_list_model.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsView extends StatelessWidget { - const StatsView(); + const StatsView({super.key}); @override Widget build(BuildContext context) { diff --git a/change_notifier_provider/lib/home/todo_list_view.dart b/change_notifier_provider/lib/home/todo_list_view.dart index 0655c6b8..ad3d19c1 100644 --- a/change_notifier_provider/lib/home/todo_list_view.dart +++ b/change_notifier_provider/lib/home/todo_list_view.dart @@ -9,7 +9,7 @@ import '../models.dart'; class TodoListView extends StatelessWidget { final void Function(BuildContext context, Todo todo) onRemove; - TodoListView({Key key, @required this.onRemove}) : super(key: key); + const TodoListView({super.key, required this.onRemove}); @override Widget build(BuildContext context) { @@ -29,10 +29,10 @@ class TodoListView extends StatelessWidget { onTap: () { Navigator.push( context, - MaterialPageRoute( + MaterialPageRoute( builder: (_) { return DetailsScreen( - id: todo?.id, + id: todo.id, onRemove: () { Navigator.pop(context); onRemove(context, todo); diff --git a/change_notifier_provider/lib/localization.dart b/change_notifier_provider/lib/localization.dart index eada9032..f18a6a0c 100644 --- a/change_notifier_provider/lib/localization.dart +++ b/change_notifier_provider/lib/localization.dart @@ -7,7 +7,7 @@ class ProviderLocalizations { return Localizations.of( context, ProviderLocalizations, - ); + )!; } String get appTitle => 'Provider Example'; diff --git a/change_notifier_provider/lib/main.dart b/change_notifier_provider/lib/main.dart index e23e77e7..a3e910fb 100644 --- a/change_notifier_provider/lib/main.dart +++ b/change_notifier_provider/lib/main.dart @@ -1,6 +1,5 @@ import 'package:change_notifier_provider_sample/app.dart'; import 'package:flutter/material.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; @@ -12,7 +11,7 @@ Future main() async { repository: LocalStorageRepository( localStorage: KeyValueStorage( 'change_notifier_provider_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + await SharedPreferences.getInstance(), ), ), ), diff --git a/change_notifier_provider/lib/main_web.dart b/change_notifier_provider/lib/main_web.dart deleted file mode 100644 index ec9f8e8b..00000000 --- a/change_notifier_provider/lib/main_web.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'dart:html'; - -import 'package:change_notifier_provider_sample/app.dart'; -import 'package:flutter/material.dart'; -import 'package:key_value_store_web/key_value_store_web.dart'; -import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; - -Future main() async { - WidgetsFlutterBinding.ensureInitialized(); - - runApp( - ProviderApp( - repository: LocalStorageRepository( - localStorage: KeyValueStorage( - 'change_notifier_provider', - WebKeyValueStore(window.localStorage), - ), - ), - ), - ); -} diff --git a/change_notifier_provider/lib/models.dart b/change_notifier_provider/lib/models.dart index b4ab4a49..8568ae9d 100644 --- a/change_notifier_provider/lib/models.dart +++ b/change_notifier_provider/lib/models.dart @@ -11,12 +11,11 @@ class Todo { final String note; final String task; - Todo(this.task, {this.complete = false, this.note = '', String id}) + Todo(this.task, {this.complete = false, this.note = '', String? id}) : id = id ?? Uuid().generateV4(); @override - int get hashCode => - complete.hashCode ^ task.hashCode ^ note.hashCode ^ id.hashCode; + int get hashCode => Object.hash(complete, task, note, id); @override bool operator ==(Object other) => @@ -40,13 +39,13 @@ class Todo { static Todo fromEntity(TodoEntity entity) { return Todo( entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, id: entity.id, ); } - Todo copy({String task, bool complete, String note, String id}) { + Todo copy({String? task, bool? complete, String? note, String? id}) { return Todo( task ?? this.task, complete: complete ?? this.complete, diff --git a/change_notifier_provider/lib/todo_list_model.dart b/change_notifier_provider/lib/todo_list_model.dart index 2080f2d2..2c1cdb1c 100644 --- a/change_notifier_provider/lib/todo_list_model.dart +++ b/change_notifier_provider/lib/todo_list_model.dart @@ -1,9 +1,8 @@ import 'dart:async'; -import 'dart:collection'; -import 'package:flutter/widgets.dart'; -import 'package:meta/meta.dart'; import 'package:change_notifier_provider_sample/models.dart'; +import 'package:collection/collection.dart'; +import 'package:flutter/widgets.dart'; import 'package:todos_repository_core/todos_repository_core.dart'; enum VisibilityFilter { all, active, completed } @@ -29,16 +28,16 @@ class TodoListModel extends ChangeNotifier { bool get isLoading => _isLoading; TodoListModel({ - @required this.repository, - VisibilityFilter filter, - List todos, + required this.repository, + VisibilityFilter? filter, + List? todos, }) : _todos = todos ?? [], _filter = filter ?? VisibilityFilter.all; /// Loads remote data /// /// Call this initially and when the user manually refreshes - Future loadTodos() { + Future loadTodos() { _isLoading = true; notifyListeners(); @@ -63,7 +62,6 @@ class TodoListModel extends ChangeNotifier { case VisibilityFilter.completed: return todo.complete; case VisibilityFilter.all: - default: return true; } }).toList(); @@ -84,8 +82,6 @@ class TodoListModel extends ChangeNotifier { /// updates a [Todo] by replacing the item with the same id by the parameter [todo] void updateTodo(Todo todo) { - assert(todo != null); - assert(todo.id != null); var oldTodo = _todos.firstWhere((it) => it.id == todo.id); var replaceIndex = _todos.indexOf(oldTodo); _todos.replaceRange(replaceIndex, replaceIndex + 1, [todo]); @@ -109,9 +105,7 @@ class TodoListModel extends ChangeNotifier { repository.saveTodos(_todos.map((it) => it.toEntity()).toList()); } - Todo todoById(String id) { - return _todos.firstWhere((it) => it.id == id, orElse: () => null); - } + Todo? todoById(String id) => _todos.firstWhereOrNull((it) => it.id == id); int get numCompleted => todos.where((Todo todo) => todo.complete).toList().length; diff --git a/change_notifier_provider/linux/.gitignore b/change_notifier_provider/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/change_notifier_provider/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/change_notifier_provider/linux/CMakeLists.txt b/change_notifier_provider/linux/CMakeLists.txt new file mode 100644 index 00000000..64aa7f7c --- /dev/null +++ b/change_notifier_provider/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "change_notifier_provider_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.change_notifier_provider_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/change_notifier_provider/linux/flutter/CMakeLists.txt b/change_notifier_provider/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/change_notifier_provider/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/change_notifier_provider/linux/flutter/generated_plugin_registrant.cc b/change_notifier_provider/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/change_notifier_provider/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/change_notifier_provider/linux/flutter/generated_plugin_registrant.h b/change_notifier_provider/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/change_notifier_provider/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/change_notifier_provider/linux/flutter/generated_plugins.cmake b/change_notifier_provider/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/change_notifier_provider/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/change_notifier_provider/linux/runner/CMakeLists.txt b/change_notifier_provider/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/change_notifier_provider/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/change_notifier_provider/linux/runner/main.cc b/change_notifier_provider/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/change_notifier_provider/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/change_notifier_provider/linux/runner/my_application.cc b/change_notifier_provider/linux/runner/my_application.cc new file mode 100644 index 00000000..5f0dfd38 --- /dev/null +++ b/change_notifier_provider/linux/runner/my_application.cc @@ -0,0 +1,144 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView *view) +{ + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "change_notifier_provider_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "change_notifier_provider_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/change_notifier_provider/linux/runner/my_application.h b/change_notifier_provider/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/change_notifier_provider/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/change_notifier_provider/macos/.gitignore b/change_notifier_provider/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/change_notifier_provider/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/change_notifier_provider/macos/Flutter/Flutter-Debug.xcconfig b/change_notifier_provider/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/change_notifier_provider/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/change_notifier_provider/macos/Flutter/Flutter-Release.xcconfig b/change_notifier_provider/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/change_notifier_provider/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/change_notifier_provider/macos/Flutter/GeneratedPluginRegistrant.swift b/change_notifier_provider/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/change_notifier_provider/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/change_notifier_provider/macos/Podfile b/change_notifier_provider/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/change_notifier_provider/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/change_notifier_provider/macos/Podfile.lock b/change_notifier_provider/macos/Podfile.lock new file mode 100644 index 00000000..d2f9a639 --- /dev/null +++ b/change_notifier_provider/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 + +COCOAPODS: 1.16.2 diff --git a/change_notifier_provider/macos/Runner.xcodeproj/project.pbxproj b/change_notifier_provider/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..9bb5dd80 --- /dev/null +++ b/change_notifier_provider/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 0B6FA1F21900BA1572C89537 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B13AEC87397DCBA1150810C1 /* Pods_RunnerTests.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 6ECBB7A679D57D47CD2F0938 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD0C88E040B6CE664C52F3E0 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0272F4665CC808F2D48CD5A0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* change_notifier_provider_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = change_notifier_provider_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 74A48B0CF81074C297B54A4C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8AD233DA251D2331353A5927 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + AD0C88E040B6CE664C52F3E0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B13AEC87397DCBA1150810C1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BB1E40EA436A5E00602DC792 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + D222D73BEAEDF58B5FEE79C7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + E32D156122B62226C4EBACFF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0B6FA1F21900BA1572C89537 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6ECBB7A679D57D47CD2F0938 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 6687F8B03C2B0B421B1955C1 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* change_notifier_provider_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 6687F8B03C2B0B421B1955C1 /* Pods */ = { + isa = PBXGroup; + children = ( + 0272F4665CC808F2D48CD5A0 /* Pods-Runner.debug.xcconfig */, + D222D73BEAEDF58B5FEE79C7 /* Pods-Runner.release.xcconfig */, + E32D156122B62226C4EBACFF /* Pods-Runner.profile.xcconfig */, + 8AD233DA251D2331353A5927 /* Pods-RunnerTests.debug.xcconfig */, + BB1E40EA436A5E00602DC792 /* Pods-RunnerTests.release.xcconfig */, + 74A48B0CF81074C297B54A4C /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + AD0C88E040B6CE664C52F3E0 /* Pods_Runner.framework */, + B13AEC87397DCBA1150810C1 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 881E65D4C13D231022878D2B /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + F0DC327578E580FF97DA2A9E /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + E565D68D56F3B6717D3BC530 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* change_notifier_provider_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 881E65D4C13D231022878D2B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E565D68D56F3B6717D3BC530 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F0DC327578E580FF97DA2A9E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8AD233DA251D2331353A5927 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/change_notifier_provider_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/change_notifier_provider_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BB1E40EA436A5E00602DC792 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/change_notifier_provider_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/change_notifier_provider_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 74A48B0CF81074C297B54A4C /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.changeNotifierProviderSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/change_notifier_provider_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/change_notifier_provider_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/change_notifier_provider/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/change_notifier_provider/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/change_notifier_provider/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/change_notifier_provider/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/change_notifier_provider/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..aa9f0213 --- /dev/null +++ b/change_notifier_provider/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/change_notifier_provider/macos/Runner.xcworkspace/contents.xcworkspacedata b/change_notifier_provider/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/change_notifier_provider/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/change_notifier_provider/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/change_notifier_provider/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/change_notifier_provider/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/change_notifier_provider/macos/Runner/AppDelegate.swift b/change_notifier_provider/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/change_notifier_provider/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? zgxkP+ytd)OMWe7QvTf8yj4;V=?m172!BEt@6*TPUT4m3)yir}esnIodFGatGnsSfJ z**;;yw=1VCb2J|A7cBz-F5QFOQh2JDQFLarE>;4ZMzQ$s^)fOscIVv2-o{?ct3~Zv zy{0zU>3`+-PluS|ADraI9n~=3#Tvfx{pDr^5i$^-h5tL*CV@AeQFLxv4Y<$xI{9y< zZ}li*WIQ+XS!IK;?IVD0)C?pNBA(DMxqozMy1L#j+ba1Cd+2w&{^d-OEWSSHmNH>9 z%1Ldo(}5*>a8rjQF&@%Ka`-M|HM+m<^E#bJtVg&YM}uMb7UVJ|OVQI-zt-*BqQ zG&mq`Bn7EY;;+b%Obs9i{gC^%>kUz`{Qnc=ps7ra_UxEP$!?f&|5fHnU(rr?7?)D z$3m9e{&;Zu6yfa1ixTr;80IP7KLgkKCbgv1%f_weZK6b7tY+AS%fyjf6dR(wQa9TD zYG9`#!N4DqpMim|{uViKVf0B+Vmsr7p)Y+;*T~-2HFr!IOedrpiXXz+BDppd5BTf3 ztsg4U?0wR?9@~`iV*nwGmtYFGnq`X< zf?G%=o!t50?gk^qN#J(~!sxi=_yeg?Vio04*w<2iBT+NYX>V#CFuQGLsX^u8dPIkP zPraQK?ro`rqA4t7yUbGYk;pw6Z})Bv=!l-a5^R5Ra^TjoXI?=Qdup)rtyhwo<(c9_ zF>6P%-6Aqxb8gf?wY1z!4*hagIch)&A4treifFk=E9v@kRXyMm?V*~^LEu%Y%0u(| z52VvVF?P^D<|fG)_au(!iqo~1<5eF$Sc5?)*$4P3MAlSircZ|F+9T66-$)0VUD6>e zl2zlSl_QQ?>ULUA~H?QbWazYeh61%B!!u;c(cs`;J|l z=7?q+vo^T#kzddr>C;VZ5h*;De8^F2y{iA#9|(|5@zYh4^FZ-3r)xej=GghMN3K2Y z=(xE`TM%V8UHc4`6Cdhz4%i0OY^%DSguLUXQ?Y3LP+5x3jyN)-UDVhEC}AI5wImt; zHY|*=UW}^bS3va-@L$-fJz2P2LbCl)XybkY)p%2MjPJd-FzkdyWW~NBC@NlPJkz{v z+6k6#nif`E>>KCGaP34oY*c#nBFm#G8a0^px1S6mm6Cs+d}E8{J;DX=NEHb|{fZm0 z@Ors@ebTgbf^Jg&DzVS|h&Or)56$+;%&sh0)`&6VkS@QxQ=#6WxF5g+FWSr7Lp9uF zV#rc`yLe?f*u6oZoi3WpOkKFf^>lHb2GC6t!)dyGaQbK7&BNZ7oyP)hUX1Y(LdW-I z6LI2$i%+g!zsjT(5l}5ROLb)8`9kkldbklcq6tfLSrAyh#s(C1U2Sz9`h3#T9eX#Hryi1AU^!uv*&6I~qdM_B7-@`~8#O^jN&t7+S zTKI6;T$1@`Kky-;;$rU1*TdY;cUyg$JXalGc&3-Rh zJ&7kx=}~4lEx*%NUJA??g8eIeavDIDC7hTvojgRIT$=MlpU}ff0BTTTvjsZ0=wR)8 z?{xmc((XLburb0!&SA&fc%%46KU0e&QkA%_?9ZrZU%9Wt{*5DCUbqIBR%T#Ksp?)3 z%qL(XlnM!>F!=q@jE>x_P?EU=J!{G!BQq3k#mvFR%lJO2EU2M8egD?0r!2s*lL2Y} zdrmy`XvEarM&qTUz4c@>Zn}39Xi2h?n#)r3C4wosel_RUiL8$t;FSuga{9}-%FuOU z!R9L$Q!njtyY!^070-)|#E8My)w*~4k#hi%Y77)c5zfs6o(0zaj~nla0Vt&7bUqfD zrZmH~A50GOvk73qiyfXX6R9x3Qh)K=>#g^^D65<$5wbZjtrtWxfG4w1f<2CzsKj@e zvdsQ$$f6N=-%GJk~N7G(+-29R)Cbz8SIn_u|(VYVSAnlWZhPp8z6qm5=hvS$Y zULkbE?8HQ}vkwD!V*wW7BDBOGc|75qLVkyIWo~3<#nAT6?H_YSsvS+%l_X$}aUj7o z>A9&3f2i-`__#MiM#|ORNbK!HZ|N&jKNL<-pFkqAwuMJi=(jlv5zAN6EW`ex#;d^Z z<;gldpFcVD&mpfJ1d7><79BnCn~z8U*4qo0-{i@1$CCaw+<$T{29l1S2A|8n9ccx0!1Pyf;)aGWQ15lwEEyU35_Y zQS8y~9j9ZiByE-#BV7eknm>ba75<_d1^*% zB_xp#q`bpV1f9o6C(vbhN((A-K+f#~3EJtjWVhRm+g$1$f2scX!eZkfa%EIZd2ZVG z6sbBo@~`iwZQC4rH9w84rlHjd!|fHc9~12Il&?-FldyN50A`jzt~?_4`OWmc$qkgI zD_@7^L@cwg4WdL(sWrBYmkH;OjZGE^0*^iWZM3HBfYNw(hxh5>k@MH>AerLNqUg*Og9LiYmTgPw zX9IiqU)s?_obULF(#f~YeK#6P>;21x+cJ$KTL}|$xeG?i`zO;dAk0{Uj6GhT-p-=f zP2NJUcRJ{fZy=bbsN1Jk3q}(!&|Fkt_~GYdcBd7^JIt)Q!!7L8`3@so@|GM9b(D$+ zlD&69JhPnT>;xlr(W#x`JJvf*DPX(4^OQ%1{t@)Lkw5nc5zLVmRt|s+v zn(25v*1Z(c8RP@=3l_c6j{{=M$=*aO^ zPMUbbEKO7m2Q$4Xn>GIdwm#P_P4`or_w0+J+joK&qIP#uEiCo&RdOaP_7Z;PvfMh@ zsXUTn>ppdoEINmmq5T1BO&57*?QNLolW-8iz-jv7VAIgoV&o<<-vbD)--SD%FFOLd z>T$u+V>)4Dl6?A24xd1vgm}MovrQjf-@YH7cIk6tP^eq-xYFymnoSxcw}{lsbCP1g zE_sX|c_nq(+INR3iq+Oj^TwkjhbdOo}FmpPS2*#NGxNgl98|H0M*lu)Cu0TrA|*t=i`KIqoUl(Q7jN zb6!H-rO*!&_>-t)vG5jG>WR6z#O9O&IvA-4ho9g;as~hSnt!oF5 z6w(4pxz|WpO?HO<>sC_OB4MW)l`-E9DZJ$!=ytzO}fWXwnP>`8yWm5tYw`b1KDdg zp@oD;g===H+sj+^v6DCpEu7R?fh7>@pz>f74V5&#PvBN+95?28`mIdGR@f*L@j2%% z%;Rz5R>l#1U zYCS_5_)zUjgq#0SdO#)xEfYJ)JrHLXfe8^GK3F*CA(Y)jsSPJ{j&Ae!SeWN%Ev727 zxdd3Y0n^OBOtBSKdglEBL)i5=NdKfqK=1n~6LX`ja;#Tr!II$AAH{Z#sp%`rwNGT5 zvHT%(LJB+kD{5N}7c_Rk6}@tikIeq%@MqxX%$P!(238YD(H<_d;xxo*oMiv^1io>g zt5z&6`}cjci90q2r0hutQXr!UA~|4e*u=k81D(Cp7n{4LVCa+u0%-8Uha+sqI#Om~ z!&)KN(#Zone^~&@Ja{|l?X64Dxk)q>tLRv{=0|t$`Kdaj z#{AJr>{_BtpS|XEgTVJ4WMvBRk-(mk@ZYGdY1VwI z81;z(MBGV|2j*Cj%dvl8?b2{{B#e0B7&7wfv+>g`R2^Ai5C_WUx|CnTrHm+RFGXrt zs<~zBtk@?Niu%|o6IEL+y60Q>zJlv``ePCa07C%*O~lj?74|}&A0!uA)3V7ST8b_- z6CBP1;x+S@xTzgOY2#s%@=bhZ@i@BwmS)neQG&=9KUtRf^K=MvjC5JnqLqykCE_P0 zjf#V4SdH2#%2EuDb!>FLHK7j;nd6VLW|$3gJuegpEl3DZ`BpJU$<}}A(rW?<6OB@9 zKP9G3An?T5BztrLdlximA;{>Tr7GAeSU=^<*y;%RHj+7;v+tonyh(8d;Izn}2{oz& zW)fsZ9gHYpI?B|uekS3zHUue3mI zb7?0+&Zm>Kq(F>~%VYEn)0b32I3~O^?Wx-HI|Zu?1-OA2yfyJ;gWygLOeU;)vRm3u z5J4vDIQYztnEm=QauX2(WJO{yzI0HUFl+oO&isMf!Yh2pu@p}65)|0EdWRbg(@J6qo5_Els>#|_2a1p0&y&UP z8x#Z69q=d663NPPi>DHx3|QhJl5Ka$Cfqbvl*oRLYYXiH>g8*vriy!0XgmT~&jh3l z+!|~l=oCj<*PD>1EY*#+^a{rVk3T(66rJ^DxGt|~XTNnJf$vix1v1qdYu+d@Jn~bh z!7`a`y+IEcS#O*fSzA;I`e_T~XYzpW7alC%&?1nr);tSkNwO&J`JnX+7X1Q8fRh_d zx%)Xh_YjI3hwTCmGUeq_Z@H#ovkk_b(`osa$`aNmt`9A#t&<^jvuf z1E1DrW(%7PpAOQGwURz@luEW9-)L!`Jy*aC*4mcD?Si~mb=3Kn#M#1il9%`C0wkZ` zbpJ-qEPaOE5Y5iv_z%Wr{y4jh#U+o^KtP{pPCq-Qf&!=Uu)cEE(Iu9`uT#oHwHj+w z_R=kr7vmr~{^5sxXkj|WzNhAlXkW^oB4V)BZ{({~4ylOcM#O>DR)ZhD;RWwmf|(}y zDn)>%iwCE=*82>zP0db>I4jN#uxcYWod+<;#RtdMGPDpQW;riE;3cu``1toL|FaWa zK)MVA%ogXt3q55(Q&q+sjOG`?h=UJE9P;8i#gI*#f}@JbV(DuGEkee;La*9{p&Z?;~lE!&-kUFCtoDHY*MS zzj+S$L9+aTs(F^4ufZe6>SBg;m@>0&+kEZMFmD*~p~sx?rx=!>Ge;KYw<33y#*&77 zFZI`YE(Iz?+tH;Fq;y=MaSqT{Ayh*HFv0(z{_?Q+7@nE%p?S8%X6c!+y;!0NLXwJV8Co_}R3*7>n+oMsQpv8}8ZS-P@(Rg|gmxZHzf=nMOUAAY}AZGfWVzZjE@4$=7xkIrs8BE%606aVU%kxz_04ipig51k& z(>c9rJL2q%xvU%Zj#GR9C9)HLCR;#zQBB@x;e_9$ayn(JmSg_*0G?+wOF?&iu@}S{ zt$;TPf*Lj$3=d<}Q3o!Hq@3~lFxoiCyeEt}o3fihIn{x2s1)e2@3##&GYDq~YO|!q zUs0P-zy)+ohl-VQ`bhvUpC{-d$lkpML_M%Kl6@#_@A}w{jWCDsPa#cSbWA#C4Sf|*C*&Z{ zz?hOU7Cc`?>H$WGqITA2P~fYudnQHxB8^;0ZFKC;19F#~n_2P@{cE{Czq-#K5L_8| zc3aOEwq4%zL5>YU_mc9fc-p~{fBTWUkxTiZvxt9FOqC{s#TBp(#dWc+{Ee{dZ#B!g zHnaOJ8;KO1G;QU2ciodE+#Z$Wuz*Hc6NRO!AUMi|gov=>=cwcZeL&`>Jfn!35hV1J z;B2@0!bIR853w%T*m6)gQ?DPnQ)o6EtKaN3L;o?*q<83d&lG&U=A|6hcT?f0)4h6{ zGIZ0|!}-?*n{zr}-}cC}qWxEN%g60+{my)o^57{QEn(tSrmD7o)|r0+HVpQPopFu; z0<S}pW8W2vXzSxEqGD+qePj^x?R$e2LO&*ewsLo{+_Z)Wl|Z1K47j zsKoNRlX)h2z^ls_>IZ0!2X5t&irUs%RAO$Dr>0o$-D+$!Kb9puSgpoWza1jnX6(eG zTg-U z6|kf1atI!_>#@|=d01Ro@Rg)BD?mY3XBsG7U9%lmq>4;Gf&2k3_oyEOdEN&X6Hl5K zCz^hyt67G;IE&@w1n~%ji_{sob_ssP#Ke|qd!Xx?J&+|2K=^`WfwZ-zt|sklFouxC zXZeDgluD2a?Zd3e{MtE$gQfAY9eO@KLX;@8N`(?1-m`?AWp!a8bA%UN>QTntIcJX zvbY+C-GD&F?>E?jo$xhyKa@ps9$Dnwq>&)GB=W~2V3m)k;GNR$JoPRk%#f3#hgVdZ zhW3?cSQ*((Fog26jiEeNvum-6ID-fbfJ?q1ZU#)dgnJ^FCm`+sdP?g;d4VD$3XKx{ zs|Y4ePJp|93fpu)RL+#lIN9Ormd;<_5|oN!k5CENnpO>{60X;DN>vgHCX$QZYtgrj z*1{bEA1LKi8#U%oa!4W-4G+458~`5O4S1&tuyv>%H9DjLip7cC~RRS@HvdJ<|c z$TxEL=)r)XTfTgVxaG!gtZhLL`$#=gz1X=j|I@n~eHDUCW39r=o_ml@B z0cDx$5;3OA2l)&41kiKY^z7sO_U%1=)Ka4gV(P#(<^ z_zhThw=}tRG|2|1m4EP|p{Swfq#eNzDdi&QcVWwP+7920UQB*DpO0(tZHvLVMIGJl zdZ5;2J%a!N1lzxFwAkq05DPUg2*6SxcLRsSNI6dLiK0&JRuYAqwL}Z!YVJ$?mdnDF z82)J_t=jbY&le6Hq$Qs}@AOZGpB1}$Ah#i;&SzD1QQNwi6&1ddUf7UG0*@kX?E zDCbHypPZ9+H~KnDwBeOXZ-W-Y80wpoGB*A) z_;26Z`#s0tKrf~QBi2rl2=>;CS1w)rcD3-sB!8NI*1iQo59PJ>OLnqeV4iK7`RBi^ zFW{*6;nlD&cSunmU3v4JKj|K4xeN(q>H%;SsY8yDdw5BJ75q8>Ov)&D5OPZ`XiRHl z;)mAA0Woy6f!xCK(9H2rq?qzp83liZAIpBPl-dQ&$2=&H?Im~%g;vnIw1I+8q|kr! z36&^9}CMmR(U2rf|j12oG=vb%Ypsq8u9Kq}U*ANX*)9uK}fAi8;V_7Z;0_4*iydDxN-? zv?qJ=T*{MzL~-xUv{_Kh_q9#F{8gPV!yPUUS8pEq*=}2-#1d=sC_|U-rX~F0 zBLawgCWy#?#ax{~DAnDvh^`}wyUO`ioMK~jgh%L7^}#h?beSyvQ_g>+`2`}`-1h7# zg*?qJdm=53hwN8~B=^|LPmYtOVrQ(W{sNm4uofq=4P@dUA%$onWbw_m-KWia&n9iv zi)!9#OJ#^}eg8tE{wSb9(c0D^PS1 z9EBS5*ypSiVRS_G0v?$hyoZOS7hFWlp4qbYkf9Y&{%OzhsIdHskLptn96@k6@^K@U zszd8POehITDK+AyW#JKpnWY;ju#MC$JjB1Y*~(E6N%{p#kO+bVxG3X<34n3fW=k{A zCZt|KP%x^GQ9%mU)KE0{LA=vaZvRQbxSlK~eAkwWo2Z<{j5eS5NVTMe`m%re8%~7K zZLtU&b~YDN%~uA9wPf>x2=PI=MA6_oVe>Ek$s5&&Z=8vvF5EODP4Av(b|dlNgF1O8 zy83W0WRdzjz2iNA~t1piEqlyU&`$yZtqR`6X_PmuP>W+D|8iH;FQ zN{JuU#Tz9mV=4R_IewROL1|mK^`lLat#LcIBfggzM(iO$pQT*-c_ z94^LUWw#5B9~sp2W1p`c)Y(xfR<{O^9n4E6vDDw{#-R4UMBKo{>Hqlqn*a9rl_>+0 zS5MwJC~nCC`1X%VCyWFsiDX;bfAJQAUkU#105f_s5U-8rqO}n8fA1{b>Fr6Q|Ea(V z5B11Lo^ooWF?`^{-U#?iatokWI-e$632frzY?Yzzx(xJc@LFM4A~-eg!u|tl{)8Nx ztZLXsSC*68g%9TFu(f&J9nmc^9hgyy#uUOMJFCaifSaDcyQ&6=8e9=t zIFEAQ{EK{|73{($!a4=!wj4ABcQrUQp#+gGM?wEUp(w@+Fzi{!lt}|3`PM%&d-seeR zB$}BrFGD3R10CE>Hsb>;PrP}pd` zaY4}6+Wu(`#uAV+E5SV7VIT7ES#b(U0%%DgN1}USJH>)mm;CHPv>}B18&0F~Kj@1= z&^Jyo+z-E)GRT4U*7$8wJO1OibWg0Jw>C$%Ge|=YwV@Y1(4fR>cV#6aGtRoF@I`*w_V4;)V231NzNqb6g@jdpjmjv*<2j02yU$F8ZS$fTvCC`%|Yn#x< zXUnP&b!GLpOY-TY3d?<-Hhxom_LM9`JC9LEX2{t1P-Nj%nG+0Vq)vQwvO^}coPH-> zAo8w#s>Je^Yy*#PlK=XDxpVS~pFe-j#jN-(As&LRewOf(kN-aKF(H+s*{*!0xrlZw zchJu@XAvQWX7DI1E8?F}Wc8m46eT+C<0eXVB+Z^(g=Kl@FG-cn@u$suj)1V2(KNg_ zh29ws6&6(q~+sOAoHY^o86A<#n*?Pg2)cK$+y;cY$hJLq4)4V84=j+3ShSr##Tk5kgmxB zkW+8A1GtceEx~^Ebhwm36U?oA)h)!mt=eg0QE$D1QsLNZ_T3NH?=B&0j~#298!6iv zhc0|-{46*3`Rx&nKSXnf1&w-Rs>#PGAGuY@cBTU-j|Fxbn3z49S#6KBaP^Lx*AOXxIibr z!1ysMi(&kr!1wwQB5w`BDH2~>T4bI`T1}A2RM0zd7ikC&kuBRsB`Z2@J!Udm{AmSN zrr0k6_qCZL**=)xRW`MFu(OY=OT;3G8eF~ z2mmkXZ9X(sjuKmq+_<=LSjphB$~R1o^Yb=rO!j!(4ErIox^x55o{pXSE9X$!76^*$ zoKhlAX6y%n^U=C~@!vIlEgXQGD@>oOU=_(aXF-Sjas*$AKESfRzxQ8#3yOj|y0OCU z>6Z-0%LCcjla&7I+CXm&caKp@@jQ!5M`(_{CL=@4#JJ}cHeZw>^b6fpv269LSV?gV5Q{kk?4;;y9RIsy5vk%DIRiL(9xe1aA@4!VX zDh2}xgUd5X?6nji%&7-%QuyKSYA-Z{PwJijUQ}In+EJl|x@dF1P<5bPa5W3&&?^h$ zZCo8LepKo0a(Fsln*cHL;D(gu9MMkoiM0*n31u)jHqX5x^F95tnI&^}^yKx3YwEm@ zo8?EZ710ykx@19{=yz5IXb8w4yjdveWb{IVL6Z(Cs>!a_0X^1E27o!4e&b43+J*u2Gb(59k2uK0goLwhO{ujLS ziI9LA9`&x~Y$6JNX!aEXR``}LUI}Gr#=<^wBHmg%v<)zRWDVtq)kT$-P7iU1R)2XZ zi~bYhV@EZ`@prgK(cs{>2jn$pxg$<|KjJ7%26Km>%KcXh^bU@y@V_Lf@=j1x%R4{v zOcQn{I}!2W<~08FOVnoV>zOTH=+>v9!jFo|q)ucqIe!N4{U5_G`>>*sVD{8I~4FqyU8imZ**-Gy`~Xd z4w35GMf%7^i65HdX{Iz|f2Kg193#KhPIeR)-=eYx3Z!%RM=JjwLrdk^B#6rg!ym2w zPbFqYyO4>W_Z6PonAwiu7?!h=x%sR-T+_*xZOGh2wWhWr%}%2^$$ zQvACIB~pi=m|`hXIMvoq`TOCx=J_D2>pi6$NPy3&8#vy|oX)=kM0Z}$BR$r0G}MzOk-OqG+VmZtOZoj6x4(tLh|5h) zBv64Y{DPHsy&_H(5_l(&Y}FhVvr9m_*_Q~Zy-}V9+VmGnvndEjYW4qt4K~N&Y&6g| zfpz*V=A#^mVmuOAz)(KVI<%v5NY0%Goy!{9&o41upsPWk(yFuRP|A4q6NMnX%V~MT zi_Rb-Bno2kI+j0Cw`@ydy{e%ARS#Z%b6I%_yfo_ZKXr4BLVoHzBKJ^ZG z-2>2IzU)55@9C|?_P$ew^-7zEiAKG1XAi{!3h%1m#9s%^pGy6S9wKFYY4<$djeoJP z{GI}Vd%idY$4_fh(7NXm7#;cC!DS&-{tGr!Qze{^%bUx2jgG@-kMta^q-EwrKB}d8 z{%FT>rFk_bzW<{lc%eYlrsiYTZXGgzD1&lmRyp+c1O=0=zAX=KV62bx-a~JP{cPF4 zU$-XT#(9&T>l@bMu3nSr{)%-5lV+0t&bxip4DVJ~vlL$J2P6X~ zd{FS8vm{Lhrieul*7&(AgPuXhjpGila%6_?-+k#b)cdk#M1jB*nE>G6NGOr+Ek{`= z9b%S1`$`=g0CC$>0$Db;l_szReLYVmce*(()9%Zz1`*fNXhI*oRlerWHarD(v^W^c zuc1Vuw6Gbp7ZsoRH>QGt#&lv;5G~Ovt$%7VFd*-rN2>UjbOWBFGNGO`bru7CFB4tn zL`^?69Lj_g_TA&`9`dSI8s|)K|QM0 zybvV7!>xDY|6c6y;Q}qs`){1+WQu_5Dgd8Qe|q}}bxjH+joQQtqs1IVZn6{e7T{ia zF|=^xa%eWO%(x<7j*QZbcU_;aVaVP!arexOLOtoSNt*hvsRL%}%)jPetSich(`b-^ zMZ$PM9%s@%*jPVz0Z^W*cK_>G4f}+eEVX`HOaHg#!B`<4v;x}zDLMR*M27`kNfp!! zOfdt(>k-g>7jf^{Se@3$8<+;R*cYtw+wD_Z8Pl~!JDCUEPq{Ea*!J9`%ihyNJZ30i zmfve}S5<$Uso}_?SuI$ks|{-ddGLu9WR9`^9)Kdi@Vs;x#SY-xp}wHPU0|vEA7234 z@BN1z7OF=OOQtPF$4twn3!HTVlUVD_)ubMM7PEPoiC6lQgL2q9PK4~e8v-OuH%lie z?NgBLkIdPMG$QBq(>r^AOHB`|*1#*!2Z? zuU8H|FD`OBRu^(R?Z-Vhr0j;FLpS~a34KREnd}B=EYHS*>Hm+f%tgJt!4J8Q`qn^4 z9F=tO#JRJ}tzA`vx$nZ)O%wC?Uiv0+_nz}5Lj4ki*&=K&*#U`=rv z`Q@Q{+IhAj@6lrNK2B=8Yln!O2%zomfRehFT~;!O@(@Xy|1Jlw*uOB-M$#6K^)QBm z_7%#QVUDPwnW{iOV-grMQQU|3{=BQMh}c5(yMGdoQf*)k9-B zMQ(^GdJh+y)>qJprknS!%WxqM>HlHOP#7UVdy>%PW$!l72J`n-p7j(DBKoGxXWh(Y z>BFDZl|7knU_jg_SSbvFk8)39%2)Hu5W0}HKlh>EaqvFoXI&56Yy)3) zQkE4X^P0QnPn?iUUVHJZXzPp`s5uv?pG{K9IgGoHvcmlBxubi|iF7n{)mhenIcxGs zgr0OpQy#Y#u=5lOyiECfE_Sn?Fj1LyoRKcbTgX{p<T*v!CGkPc)pcA2D=4Ekp0Gb*wpy7S88C%Ywsbr?MI(3UdsCM?XJ1X%*hNjB)XqZ*W(qDdtSb z<3XN74ARXL3=c^bfW~F%NM^5*Zx92>Wq`&M625p~j$8mYwLbk%Kf)jbn#<2z$%vP5 zy#b>-tF-S2_AB4;R^K&^-1LJrUmi@9rB^FLF)-k&YHK8P+k@RCJ1qSTZ@=kHxA3l$ zmK_ZG)l6(nmCR1a8|;QF-B5e_ELnjJ1$m-;4UXX?WytF_wz7#&AjwZYTMVieLbq@R z3t-q|G4^BB#EpNu4uyfDebB+-uu_$9>y-dzB30Y9F=R zrW-Heqnj*InPTWHgR9v^R7~hokldh&h8=HDhMW(EFfim1*{)5Lc1-+eBVkK-2!u=N zuZKABgJs3I--NbjE;>Undg6uK`^U>AQ6V zhc!RhYgvrmeGNsftr+(C<_MtuV$`5RZTf#5r=DR?gWG->#})#=(td%C3`oO+2B7im zUqY}&a_QNTn?s+?=mNXiREN%x_=(H)L|DtYPY>SR3pQfBOel7G_jR_{!9`dSj8Up-`JgcB;=Oor)U=_EVjF3C5{Sqh8cq=~bRjoBpoc$kJCgtTyZGSpQ4= zYi$6b$-dGmuTDF&@amhV?cU05g(AZV&v2$4m&j_~GZk;&keSO(@LRESRZ&p`dV*6w z2$em~p*8yM6j;SYorw`M5K2mluJq7P5Yn$VtZj8DEs2Zk=O@4T&Q}>~f31Z{uk}`E z{Dp{KObh1kk~~MfLUod72{Pk6G@T$_0_N??lOrdR=Z;VV#m0l)&@hz{Z?)@sgImi-&i1@95g53rON83v!yVPDHRU*Mzc4yZ(-Fr z{8{WXmIJf7jeswk$;6s~Qac6QyM3W&`}m#gRt=rr95A+Ad&wSAgvXZ|F))rBJVJ5W1CsjN`QaOzct2ocq#0!v zmj#075)C!3oS>&N;aHS@<+c>RHL)8j^p)k(8#7$LEx!1g_1^02!4_qA=;uhKW=+ix zGX%+vBMiRiF^^jm{mdO(?GdWJ#unO#_F^7mhT8)s(z_WlwFyJ#Xh)k5+RG2f;LC*K**1dr`#}~6A=0B=I&V;%zDA1)d@G!X#Rng)7G*2k8Kg447r0ox> z5NK`d(H-afBwo9feDOUi>;BbPsu!2|=@g=3j*PY}@YrOb+SX6?#Yb2xaaK!?>SX1J z_!VsB`2n1=wwSftkydm!39|-1?c%Epx?TO<(#GO~I&{f4+)XwRk<7RQ1~5>QcKH|D z?!}j1ueO0Lk;FZ{k4FA_(S`Ot0w~tl&m0duID*f6RY#bkw||o;kZ# zISYNTb|{~|X$m$Q-Jv#uxyw)eM0gIv`V#wOAp&Vv@>X4_tSZ&L#juM@$S9 zx_X_tLh<_^-F;LAQ09s@sPb%PMTrcw*HUV0P=RYSlM&AXEOI&&R&YCm_S<7DRBx^L zA^R^iwW+LMk(r*$Pq-fKU5X@=mQ=`ErO30H@@&qqnI7zJcrbSh+H<V ze&7Uli0xj@WrW#&-9%*FP~kPYF_YYM_hs5~|ExMynQ%qvq`leRB6W0yhC@pCb8>_P zlf=F~WMv_u*-DV=UaVu#2rlzK{q8D95VwZrfV?gj@rSNWXFvktUq)V5+YrlxwX302ae(;aG4e>L-M@3J+-f3IT{b9l!kg*2M zC1+ND9}6m^()LE87Mt+^Q|)!y#suc&v26C=0W88%a{?)E8Yvo@kM&KNMaOst#|-_CbUTm}WS@-c>nRb;&z^ zYr)+IE$1=jov(CZ%3uR+`~NI>1&Gs6W(jaamjcN$a`2!*nO}l|b%?)Q%%UWzw>A`C zR@px(P*7j$TK?jbv*%x)e^|jcLsv}aF(Z0=7(%Oa7+1wY>{B>d+i&ZA$}k(qgZPZY z;VkW~8eWnU&HPIAbco?&tc2O1$6=7n{u|^Y*nXoac{o1W-6aXfy~KlNbJfLoq~6;+ zDYmnv--Fhqrl+UV#k@_(1=gWNtqhyVKN=9CZ-{Ohi>e=~bm4IKbhM%%W zW8oXE!rGpV7Wt(_^4nndH1_imheaWzDi|I})9ZVZ9>pN+P%dVc5wG`Ze*4`@rjn1^ z`ln(;vPBHQUb}y8S>=8q__r7g+=z$>!pReVB0@XKchAvyGjLQs-u>+w%`frV4FeIG zj=7n~hGrwx*&5aHy(7X$bDZ7YhcP%(*>G^lAYMK;qG~V8Jz@b7oNg;IA1z$9@TbzW z;@I51@Ekef#qbxnG$Y8Z%bm~ibZ=4#%yKr%#b)CDrfKN`ujIY?tA4h9)i~dZ4E;ZM znvb$n2)zn$Wx&zlW%mJZDh28ox$@%`w3i7YFepXUChw}$UXKI=-TM51`M#FH=tdr*mQ!c=aB1296Lu>iTTKZWss0f z5~ihdImPN$aTle_AdbYC^31}_^EK|9R&l#%3hbx;8vJ+Gp^tm{9JDILu*1PW!rh^Dn9p<)h#Sl4kKM%nm<+!ESSk* zC;lLNT$fgr-!+{aBsSx$41b}yy6o>r3F#1&iv3cfY2N<+`0qJ+>=&Qxs}JOEkD?^l-F5i`t5+zNuvJf z3Fh4$mNqiFXL-aq4U4K@Ae$fq-TDT`rvrx;gqx96w^*@s=mcthCaIyPe(w)6kI{EqV10tcShHU9eeAPs)s?6#vrq}>y3FeTJu$Udha+z zs7}rmA@yR(L&>35sNjQqrw}o^)UitMU!5g6nnG)(tgst!^`FKJEzI1(d@j_w@;^hr zgYxlIRYjho4U$bhczfq&YySCqCE(5_d>l(4tk1v9!V7PB%Vx{QO=G2NC@c1%3rEzw zN<6i?h;CJX>h)kn49Sr)g#Em6km6ESP`1qc5C3ZHizN>r>V-fSS=X1nT{+Thh@kC! z(H=PlqDt7V6gOYezXUK-dretz!1?IUD6&eL2b!4=9h+HUO&DYZKMM>|YhlEEg?q?S z^XT4$2Fd|zT=x3U#L1|F;-#`to-Y6hiYkWdO=rRC)meY72pIfl`3zEGDU8($iWR^K zI$nq80aSJII<;#W5Pj>^_T&013BJ*O89Uoq z5>;Paa^E}xar^r=!pexg&OTM8wluk4R~Ru=)Hgk`Y#i_$jk{jc8hx}?(dW*X!l4vs z6_%$s#duJJFmaFc-5#>v6Yea=I~)s_pXGS>Tkz?s+WS}>Qp<9MappMLXpkXpSM~SmH6u)`Z5>o02kJs;w@KhdiZ3}29y*xr|6tMo zBHzGic+b+dTd!xOJ;p{Rguh^corJ;K?R6daayQKm+0rf7|AXg0qs!R9eS7t4{G=fs z1$=?kK1Ih=gEkI>@jgXDWHZt*C7FUEWs|u^pE3Z``^K|1KEC^sbN*4nQUfRc_AyE0 zn)?RrGjgPkzfE~_s!rDB!fDsV+*|kEX4+DyS#8%!cshn;s8svwBXSsDGX2ZRa0={* z=`p1F{zD17*Rk>Uk_cw3t5j=9-d6$}MoM~z{v{t^M!g75-+o8_XkP@CZWUQ2z!^26 zCNOu~hgrrK)y>bgqb{`Q_1^zrG4;cGarP!nb4E~(ZKWc`LVeEq;IewVneLp^ZU2+% z95PgN*M5v7Q;ZlGvM#`&u2NdHm%&gZ{bZM5wBCp&?HeZhwU87wyT_z!n4z+1?=RvXZ^72d*%+R1s1$KbAFtR|= zw;MEq=O7pMIKpFwKH6$OOszJAf<_Z<1)36cB>D>|Z6$gJL~jH`n3MMou$#Si%rDAu z4pSkJspG|^CJ86vg6kkfXsA_`8@8iOryOe!Qhn8SV6}mPlof3=WJRVqAr_b;e->`Z zMR(p|K|$L0^6;u~USxg#B6-ZNc%E1dv*^P=|2k*^NOBni#G%9Y?##{=)8KZwh85OL zSBG9|gb|hdmY^gn(ziY&O5#@I?W)W;361Yb^VQNpz0A7&^(7HRAsUvw#)fvhocvja zLxV65J0_$>&cVRctJFsn^qLos^tG`+B0_gQ{NeOwKt-!C^gGFufdtPT*Vi>l#X1|V z2XxsAcixN)Ekq=a##_^=k_^BFH5_zpvPDRP>u6+3$}i&b zy0@FdzAHw?i9OqnlTts_w5D@Nd#eM)KKEuN#m{|AJyscxa}(eA?z4&4yvXo{OBS65 z-?gW;<+;+ntM}U_yTmHm6*2zj0Imj<&ZgE9Wj|gfsXhrVH-c0p$7HXnR8bxDYOi z=_r3FA~u`L&2;Vir8}P3)k|@c?sK1U@&iWo{HEXcoy>6wQSuJ+b4l%aTBuigs&k@Y<2c=S3Ef?p zH>ki4yDuXdo_eu>X1{E$g(Q-u#zVXN^&%70guoizo7x(kQ0OZ}H$O9UB}(FaX8Ct1 zFpx~}EbHf2r6V;x=@8GH$C2|6*?K~?LrtMYd^bw*WYXhA z_))@RMH;nZedW3+qfWbv<|_#BYOxX^rhbN+!za)|!|8K*LRs(R$O*2SDM{g9k7e{u zN4VIdi}e#0&h?sBxu$>Yy%)j(k1V2fuhp8r!}gfF@b;F?U`6}YnnMh1&sSU&lR^?# zu!61+lGsuFEfDraX3+$QZibCbKzc{75G^T7@WZSQ)j5898G1AOXB*H*TSd`f<`IK# zm1%&t?i|2Z-a&r!pJehzg@!awNp)R)aa?q_SqGrxE5u+T#f?K2;GAHV?O&>!W@Q*k)7=g2vDW+7K zbyY9i{|nOF*SbMYoRQSAbSH2y$bE5(@d6xKxcF#@TE~X#3o=;`0sc!RupdRmQsML? z&>SCwS{FOpSr+@6Uuz3m`hj}(^g`Jz|6?({!%WVJn$H|ugxW+x-GEA?J&U^ugj3Nb z;65~)W<}iH2PJ@st8LtLfSOLXYgj=9<;?ih7rq$bXW9J#!B8!Wu6#U`A$wlcoC*&` z_9Js~7%m79#+edeT&P`@_Ng@e&5J+pqpx%31tAF71)pcz~-yJ>P5yX(nuM4;bUHDa8E(~~l{j~JeCGkX>nHJDpgSf&bTHEf)qw8{Q~CBPEVen|MW2P3vmf`8X9-g|>>ddp zcgfjbl~(?3Wa*NzQH>4nsM$3}Ul>pX1xC0oF3TZXe7=V!9!n?WgvH|R zpbruczmB%z=zkZ>=1R|gXwGThLELqD5KCUhtiRGT*JwKIvzbzV%ZU!e!VcNHSSX3> zObH|oohc8nvQZ2}q??C}@>!fe3gH+HF@4(qWqi>;ag~md#D;cl8&gQb^?2a@5cikT z=7r78@&5gV3Ggc9f=<<8v~yz`NcEGvbX1V_`IL(&+Z>LB zM~$ok2qXzod@1$TEl*U~H$V5g$er{Uj^($sWb7Nr{gsIbE(`$LRGECTOraXiU%=uq z0zvpi1S%)RxTjzoVcR4#10)fs()4Mtsa@e?9j)Bk!LsYyXIZga2q7d%`vQE!V@<1Y zmkpH3LeXJNO9f7l>F84g;huc=4nk(UnU}RLZmYk2TtB#lv34K(?8~gyx-mN%g=U44 zOPdr_!j-;IEbe|l9-buuKEy^Q9MLjSKG$S6dz)!U_32{1)N}L)3+COmlg=nY1@od$ zJ<0z-B%sisAR1yh>z-RfQQb6M4i-d#vxvb~f69M{JLPZv1JSCh1$gQ*LxOF-tH9!k zbQ0ZW)S7)qCSF|=2`q_A3}OHBNBueZwTTz^ar~gz#2KA74&&D)KHt~m4F_nK<^*7_ z!!pN@xiGkq%>1N(rNxw$zu-=1t*IpAy$ z4~dD0w%9;E?(greVWZ3(o9ux`elM>Rek#0 zO=#-(4p5B+wFzlEU7^k{3EdL6sIp|K*>xrriI`}E8ze|z-$YpN`^_teL_7P`%e>IN z7tNiH619P+0Q1hBR|W#POOta)1|LkIRtgz zMJ9VOxXN#o)mlXS=u%`Q>~PBuKEmOWsIuQRp{y%!ty{fEyL0gV)$LQeL#pqX3L@SR zJ2Gb^E9+KVd?;joVOXlGie3?z6>(>u(i!(qGz(W( ze~^xj&IRF<98ypEis{Y_FoHn%C0bW(XeF#Lj=2WUEBqKNPPFppEH?_a3}-h906X}C zSYKcZFU`Om5YlWhh@ogzCn3NvuM~F9jOX|xe-X*!YL+#ceh_tJoHXz`aTnvSrOAZ| zOtdGz?QdT!oAJr3(XL2G(p%2X4{xEohU&vd_zQ(U%ihHOlKPWnb$&YYhx48?|R++>`5?sxvM?!;ru|9 zZ#nwuTK^S%ce<+ggdJBE&fRrXN7O!{nu`%q`M{2Ef_+IRad2cf01P9pST9AOK>y75c!9}~)Et^6$`&Nm{wzWcm4c0j9DF!xJTpGrMp3esI4D_iiDe`sswXSu{dQZE_`^A11 z?Z@Hw=65mVu^%X`>;$mciK}XiZ{xw7I_!t)S00^JuxdCXhIRO~S*lPS(S^je`DH4E zxbKNs8RL`N?gCQ@YSOU=>0FE#Ku#DRO7JA&fu-X8b;3!^#{=7`WsDXUxfUsE(FKSQ z&=N`A7IwLq%+vt(F;z+T=uZNl=@K4|E%p{p^o5(BGjsE|WOR`%8+XgGW8xJTFJc4L zVY#L`OdnSM{HyS$fX1)3_JuNNH1aDsDqi>CzCT5=kY5zV<~29bX)c^I8R5n&ymHkx zj(QC4t#mDK;2xi8O%V;C{HqDQeM64=b4@sa*N_K0a&ro4+8LY6cFHz< ze|!g}zF|tDrP=`+U7KwKl20gdW1%!iN>1=uxA|NZJ2peruBOj?RBPb~8G;s6xIi6- z?_odhafsxoxiBf zwZZ)c*)FLc0#wE~bXw0TPBYl+h9hs|DYr_B4LR_YL@S1hQs=p zNEh%_fUvWZCbJtaF#kP5=(O#{8|g&Kmz1&8{@Lufw^DhtvKx955~aqxi2C=)Z-!Kd z+m-u+#^U4(HYn6a1w652kO0bYBt&goyx(n?MR^kI+{Q?0Y{G~W2) z0dS3fuJ?SU(6ZDp=kUley%PK}K_;YQyK|U|?7t9SHiyIfpT4a_kUVIhH4PSaj@3mo z`z}|mHhx1Pq?@(3vTBb5HTXuFAzFZEt0D-fw_kd=XvwIUh3VXTm{wbDA~cESd5cI1 zd>6=&AvG3yu+)`9oxmfrDQ(1fzv(_0l?bp{a364dXLRRBI8kBv!KsL;brY)#E3`o{ z3TlWUsS0{Voci?6MejccG9x_KiqN>So*1{25r6BSl9jUyR}1TgXBLL7Pr6Wv~Nu47;fbiU7TbL}>qmtl36YSZ() zVf@nqW(As~#`@bIC+AxSw!O5Pocf&rYaCFm?Jd?XR)p#@{!|5^Ws@wd855)mI^8y{ zws+VvGXW6%xoj@JkGb=~%oJ~7m6+uhOv?bH+jJJ~eFgp+}~*^C+3>R-MY!IZQoabCh( zN(T+z@Oyc^C)WqQESmh{d!!T8zS(!wX=R#hEKxMXy(eg zZ+Cwm1a%?;RH$h2_ws|nRjn8ZY!>3gn+6Ep4xT|AeFox7!rac2Lw?jsz}JqPE?5JG zok0}q1P;cuzs%Yrze|&d$oTr<`Lx{fbq2OV=!3v-ODq(n?|WxuhtmwJBIoW^^FB+D z-?Ok9HBKc5@)L(W&vmI{prL?4^OE9TR)bELS=<>*w%&aKjzi*@;5#P3moG@dm{Eke zhE#Is;&=o|{2GWai}7LYEI+gmc^Kj4K7w7n)+9godg?yB2?xs}pF1<*!Sv?D~Uvbkgs9xx9s#6zBv9l@ox>d#H6eqw^KZO;Vg}h!q zI33^$4}yF*q+q{DsJsa(SsV!YQ#zi^IF9MQV6i{SiN4dWWCi%YQ+hNc1r!^+<(YnB zG62-D`M3w3Q2;@X{S`n`{QO>migDpz0FK`->sYDOESs6u>-~<}_XN_6><2g7U#XC{ z$#Ig;n{_yEMnlvx-lP*;ts#DHV0r8j518>~33?Ak#jocW>uk>6V||p7{4rov#RS9c zdPD6r`qF1om9r!zS4Jk1>7fn#GCnmD=JIt1Na`X)=*LP7R!3XATgk`;&U*P<(0d z9p<0T&eYqQ9jot39FxpfuPSPYlfQ$s-*;+c1KL+cHIVcG5`H~^Ryu1Hk7%Nf$TCwR!SzG31@NHpm`mcp8v!wyWM49TjTxASJ-8JP*MTHLC}hF==PUOh8kaaXeGFGd<|e29vSDaS ztPeu&zv0^wN}Hahi`$pcDs~FVt2F;K!q}q*Y@{7i#stWfU`u2La4aerBKhV`^zG~j zJWvtZpcHIP7x*tfLSQcng6D(`HVp4=LWp_0Xt=2wEHjK)!DSz_Z?5J@>awRyk?azj zU-kdSs~cp))*pfJ_q7u`IsCq8F|OShB~D56S(Mwwlt?{yURE7#eI&WcpVq(@9Fd~g zeUiD!a4w51Nj(YzLnau+O3MDub|?loF0=<#jLztAM>PruE7yNDD0L}y=Ayuc?^?Ni zf~%GK=iEhn2}xKp7GonJx!JpDmDsco$|$XtRdUDwbM9$9s7x9-of2nKNj~?b@UOKz z9{`=Irz^ba-c&1vSQxSh;I2`cKc8-4)aCy%#bam;3_8vSJ-jw`_}lyukEC~z00EbC zI*dU3F21A)dSZr{qA5QF+{a%D`h#?8o%M?)*hWxuqnQD(TpcmfNq&UN$BmB)0!r8) zxno@Q?$_D&*4(rW6b+?-Y^5|*P`DHmJ%pI<6*yP)o}2^?>d7P#bd2j=vvx2mfLW@R zQLD`%buR*}nzNYNf%68w-D$7%v|=bXg1mYrdZy~}(@RRZ-U+Gx=nmCjVxr5Ag# zLw3R29-MHJl|`mRxj#sv@EfyR#-q>BE-XFEENbV$#dWM?!VjU8~kKZsd@G=HPrI{HiqN&j<92*-3$^M*;n@rG*i! zvi#?j;lc5w>@+r!6*CVUrN9as=S3?(ZBT979$5R#ZpPm?2VjIyQcEFp9orGR>f;G? zK<~FiYY6ow-&}|v7k?+03TC++so$)2~rN``u z>N%j$AbNQLX_!evzG8abf=15260vIXdz7K^a$YS)iw{@x5<|Rr#ii|ov=LJ{eu>dZYe_ip$ZuzvRu1dpjQK1BvP zH~m#t=2_wy>9+YkdNF-z` zQ*#7=^r%R*pIi2AI`>n9>(QJVE1k8?Ilav<)NUjW^O$}^yZZ{_Uwn!4Fq1`aslX;Y zj`XDIm`E1sz|wShA=?a@ZGKDSMU#Z3$E!1nZ)g^Eg3ZDoSN6@RXrGVCHvMIauS7d> zuJltXf9)LdTWdF!n%-iA9b#2$W#i??K)zYho^((ZqluvhAr@{H{diy0%@-~VW zKYC|2Ma)2^=skdLT@ZVqJfiCDqS@~qIGexL(BKy6Aw9ch0hoHN&E+m3*uka9+AIh3gTWdSe~W({-&^oFw`!j7$DcsF$7`pO?kRMK<9h=SV?cmyJIe`$4|zoI(6u9#qY9zM?#zNe^!Dl2>Z^dH`>`wSY# ztU;V*+g0R0DH6EnJA$U{QL&T~&s{`smeC2I-5mzv=v$l@iF;yN0hMibU=CG^e>J;+9k`Si9PzLaj$>}QKI6lWmO_o+_( zmhxA*0|-Na`+*J1qEMIXZf9rb#;pcOw>EDeDjb!|GumQ2!1ac;YqU|X;F@l1_lemzTN0J|U zFJF(kO21aHg)*KfuKT=BA{VDkOvlx(b{f|A9D69_BHUm#S$F>~`Mt@GesjLp3;reY zP~q>6Tt;`XkjqV?i7lqPbWGh`y<7dq<}pDHl-dDA4QG6`QDq)+vq_&HfW!}P6Cp4d zt>Qnli5ri*I1ILEOGD~3Y!@2^Jmcy1xDXmKolC?at}_6;neEfca0rLHT}NLpoUYh` zDbCtfZnYN&>}m-(F{5d1=)bBuZ?OcP`GmsQV@kn%JMJUIep`Avon#8=ATpEo-@hg& z12f-)R=HCD%pUjvbWa|P!}u)=wInpZG*LHKrZDMeC>Qils^IyY)x;kDRs4c3!DDOG zAptSsf#1X>kSli|Qka@S)6O4un-2aKL?bcV;$*>KSxHovjrfZ^-+c#>;(42yj71K| zzRyFiLrwv$rPcNA{mtv=o(*JDA0kS93>OE0D{KMJzLk$cc_5dCLWnJcFJd6_>BpE< z?aW9;^!;arQcIjloW&YL+~MkNO&a>N=pmhg>{SM<@`a&VeUA`ay*P@R$_+WS2%r?_ zs&Z%c`>ie+%!I=Lz>$9$7a`-`hoc&*dl60^whsaQ;~9~@JYn1Oc_bmgVVyAzUOYgZ z#j{`#D_YZ)(wa5;qzR#zo4a|-ANJjBB90r4Iun3*BkMxw_Ti>SjhktsmR|BPCLt>9 zZ_3eQjweI*-8+HNt)$9^s|+10w@sU!PY{`#BnF!ULS=#{k0Zr5`yOS?p8PfWbKT`6 z@T+PeRJ4`fj5t8bMs)0>o9|C>mBTlfQ*nFG#Rri-Q7}E}+eaz`LmO!`Y_pHkoAruu z`&!5VNnA3IG$}Pz)V&pt&AF!$E{J-;or3vWv3&Sl&9KzG+ae73Zf}=aP*SCI1{?0T z9SAC)W(?DSKOkcmW$(K5Bl?c@(5#>J#j@eq#ctX~$TIjkl>Wrfv%Ey+bl1Z-v?NxJ zwZ9!ae-MsHPUx&_W22?9$mCE%&~lzVG?hDXM%~gXGk+Q!Jf0BspkMWxy;^!n<6JIrSYjv z6F%~$8)0^qbUho9Sdf97b_n({$;|XH9-RHrohHuPcro@03KEPFejN&q?&nJFoIQY; zSI#uL6>2^^yOR!51OLO65xGas55dPG;3=uQ35ZYW04#+~byXQf^7Vq`G z zKpxF`G*X(YOz2^@7i#D+s-~A1E;3&x%%qL5hkiy^JhYjJ74{hvVmAx*6BH`M`!qGC zO9pjEsR)A-n1`6KLACSL%FS_Kcm+?4*z-V?WAZPs?RkzoijIr~I+oh1^~T`q^dCFvG$Gbd8AnTYBjLKYUmayaQz#S1le7Q^Hyr#;X&h*1wDpm+gZC!rSKom zq|+o&UGpeXtlQ1;?@JukKG!8PGS1Io0z6O}ZeL&DsON^I0K+>Mxv#ohK+;ByAZ`Eb z2orY{j0Pa3edA(#-pJA0AaJ6h& z81Gl(pd#j~mrizktoid14K5ig7u8FvZmLLP%l@dl05IprCyqDB?mA2fc*6UB+49lb zZ8`V9epdo=OeZoiY%zw-w`8DNwTORV_>>3T{r)1-YsGSo0E2s>tix9OBqKFBjg#}G z`pgkCblKMYs!Z)r^(qT_c+}gLhR|gnq!1~Qr|~kt&2@_yswx{i$KEn`8J1W8BGljl zr@GEG#W(s#AKKyuqLp+cl1C}7%`m#-!$15XF{M(M*-fD%+i#mFbP35jlgN3{8#A-dmj&OQtG)!031jTwGMal=&YtPfq2AUWekP9J-JT(p099!L`+yen$ zVH1?kRrhV7(mGKkm_jPP_U@Xd;x=ppk}4WY0Rbr> z0MJM_;$GGxL*P68y%KBqHntF{>X&<{aeI4m6+{TQ%~Zp}v%Pujr)zg5mV;cFKqeA- zQm5`#Sd{B6Rc*4PS-rO(vf>YEdXmOK?>K@`L5}|9q}#t_IE%g+U<-1qw3mr5&v;2A zCQ}BEn9_u;;>n5N#dP0RhCF-_UplC+U(i~Zjh>U5+b8%@p3HK(R*IMQwE!uritb}< zF)AK2?+0@-aE3LYkg`B*&N&m~JWB9>(Z>`aqRwgioU)0w{U1K4?>-#i|ZfhNa9hV)2)(%ch zJMH1twoeZWwkE@I!dz$ma+;9GeACv>Ncupl@+gBSeU_uzfj!$+h&@EACkZG_vwLGA z(?^;rcJu1$5H~xI@6lHIYC-$+b&hF1p`AoAOKqw{t0Fu#X`OGt$)7Q!nmJ=&)xjq@ zHoxT4pcYKSPT5(4yzIuQ^S*N2NJpR4v0?rB-^JuaXNLis?E(l>Jo8mUw(gsFLLOy? zEszHWGaCn|lw$LSwoj{G7Uq(zK0W^VVWu#ms8BMRlF2z%-g`fOXmndgC(na8fc)s` zz$GAoxP+l|+T_S4$r1sLwkV77ew1Gug*`|HiE*?FGLm1q; z^p0A0eqqbmk3?|!CB9DBN1Zof6d7+ zJSn!`VD~tVaqy<*Mw^8dM5v3Bvj2VdVFb=)U3L2eDM3@>n(P z?Rr_=I17+r4fE{>1LBQG0&o97nef67n-aNnVP<{dd6*B!Q344 zZbsAof&jw+;CLeK2d87t9s~YZ5?6Qwf&{NPEBN+)LbjOcZRXNcR&h)x`TtdpI+b!>$E~h0o1L*2OddpR9!Gw~-E^Cj(7i69S<66ak$)AYMv|xG+;uR(`;h zGIV3}?+Qxdjz)s;s}jHY{JPmeo@-tN$H@hxaV@)}K?y~ts~E6H(F|SlsN5oH8g7*h zGiC!8c1doE3U|D}Vul1yPmXuCk*hmyU4MG2ml#V0+(G5I+`L_=3cD$%$I=@*8m-LU-!fn&-sZO1%ls63+w}AiAK`Jv z>`q~ztr&&(gCkFpci+*1Ekdv*MhBCzGfPBj9dM|YEjZk(tWBuz4?MGeq+*)t>Q=z6UXF_w z{QDUT4^JQ8J%hW;d2xGB>Fl4Y-bRT!ttP2GE5jYoI1e(eVK0&V5W+>zludt=nf|UN zi1IV;MK$Fy%$yw<oGeW?JIGjmfGLH$Y;l|T0p1V!N*Jvu zHSAG0WpwPip0vm7%VRq8$2O2>P5b!WBfTz*6dZ4Wd6O9Y(8A;nOuG((y?F`ac_u2( z#~17CoTK)1G<~~Z4jXlout{e&nZbDHyHf(=a?OtaJ(2Q(!g#)Ugw-QQ?A?mN#yN%T zBtJ`sA6Lpg`k>Pi8a7GssiY$eG0Be8LCoQL{GDqi-;j0pLmT!Z)szldvbN7GVcu*S zzb1rEq|M)1qa7rM*I8!<#w7FnQ?{v^? z0`MlS3+`#ZB5$DT4+`7e-Hlp_2G0`*F@STbRJ|!tk3cC~1T%NR-p4s=sTT+RqsMjF zyrp-Jv?CD4Y3N&Zb1gr=%`MFR8;|r)uxQ6*X{OpEhQ~+tu}^n8Wijiy`pSMw0uKNi zSNX^Z1y;WirM0o_x%zft0U2GcLm_2BS`b{Z>g|9VOVr%QF*R?pTpiJsEbj4jLVAyd zTA;x15=f~b0^(e*Vo;Tn;WTJSxpI9LmL($Lxob<^S!k7mGhnnVNnAC*g!$ms0#Q|q zs=25I0<>fUw_&+KU`}5P9wlmjRWdMYh%Np6n?AAHQ;JzG?s(Z9UR`pNh79Nzk~DF+ zX~jy>>f-2bl?drlM8 z3NfIQnrT@pLmv+QA6efWPv!sqe;mh3_RcOj5>Ya;4hhN13dtx*_TJ-=kX_kZQDkPz zIw}#e_dK%au@1*L&iUP^cfH?zf1iK)tHv=t|>-9mMT!;;Vg|svSzWkN7q#t$c4N$Q;tl3EYwef_4q>GO<#I89VhY;`X*hz$n*GZ%f+;uViG z?uLlxD1OIeid}0r9%Ssoc7@vJjZIsZlU9zvYpjhYiOrzD5sq3OC zpf-X;Nb!DLpxqX^zDIK%=46-Z3%i-bac`RIBS5*wcw5Pu>G|kF>TQP$dGRYh#1hwD z{|cbbTOKL>Gb1-;X6?vWLC+KJ_^Ij?KzJ7eZ?^8XNgoYU9^z&>d zsIjX*uOK`#Wu!`>L@y!=XpQcW+mBaRjm|XrB@etLdr}Ob57e7EkE;7a*t7=M#XFL6 za;KHHk-rBNTjp-gS^;ehKNv>K>+_jPQ45J%4><1HyKJ?;T9#~k_23?xD}B&@Wp{%H z($hU+nWR?g!9dsJkgVz(J_Yrdns+m~9V_gQ7Sb`&F4wZZ!k}##j$>O{4{?avCbCZfyW zO$)m7LE=P?$CXHDU_RUD+sYwT;nKI7 zSs_XTv!BuxpJ!7(b~uYfsgzt~mj5(vf2r~`LHwpePs!o2A3zEr@#sxo8HEe8>V||d zBiz0@e&6}p*}!6jsm}I0bN9Mc2(c#jg@;Nu6!Kv&4&P8-UcQ-00WJIO%4OuUn;^jU z;I3r=T3KQtiMQ7&x32eVtB`mCe)9ws^7u%2P`B%Xc}=Qc&O^{FmS^{~Rho}^s`B+H z=1_T);9LRK?{$Vx22!5m)Er8aoPOA8&{7fyt`t@~Vw%gtx~+g3qs8LFR%(2Uny28A6dFYnNQgcUa>Sq=%alFh&8#@1o_qgwve* zVFimnUtL{4aHP6s?FB%bu2SP=e*VGqXC8iuZ-JOc{5%Lx0g|VvyWkdh&FD^Gkc!0N zhoolXvp6GC8wj?Y+V;r*EN+<1ac`-+!8Mqb@Nz)=OqV?4gxhR^t7*+^+AfxxVt(n{ z+fkk|-xSGqmkZa@Q%`;;r`-Z|? z0fR6b@l%pTwK*@xY+(MwBUwf^z+F*~piC64BWTrz}-HS1-XF-IA%?Zs_#F8 zcmUuEZ6Of>YIJOe$&{V;3vIBw7|jSGPeS6cvTMdj96Y~pI-z7InGW;(DhFqaiTTO9@KWvQi9__j0btLZ9 zAa~-Po%^sDFfme4@Yiq}r`BgnYK2eTwCjg9_zC4V{{&_GTm-!qHGVR6JXDjw;}GzF z6lXA{xo1+tQM{9vwb1&sRXPdGDHbEMbnwh}t+%tvcw5p4J4r#hEpDl=A{;Mjc%0)T zsG}v<$^HhdcE)5IJ^iBWK{7?Zn)vb%c!5eIj4 zbT}CGO*u)Od@^LuIC@_2{=AP2-O99NglFudj{!T}0e8wtTQcB@F9QW6$J!0Ye`T+U zXDx84b$!hD#4YzSyZLy~!IIZuFa3%eU zG4eg5?}sZ6Yj29P^-PcXG*8%VzLL$0!oL?c(!oQ+G!kORsa+lsf5YER>PX83R4LgF zgPNQJ#Bo#)MXU%J9k?RWD;c>|as5b5p>xAwau=X5XbERX`_ZHB8_XSNDe`s?n(e>) zGF$G%n6o+W{6A-@4hsIK0*J%jpB#Y*G^B48eQD(CDZR5oBl-P=)r7fH^PLf?!aK6V zwkIM35?l*I6p@;^H}JIDNs-fF*IFN?k?kj(M)QKM%%?dSkf1d$Nly2z(>)oq8z}0H zH?Qa{x&36#W@y04!9zx@x7un@ob$&)V8#f~0n1|jF0kFs4aZ{ND1~QjWHToIY5)LY zrgKDCj@dFCx&-w$QMi=CqD*=`$NqC~2k366pPXl#>Y7A=iQD}f`)+B-pS@LIW_M?9 zlBS_)(vGz!L$#P`?<3Hvonw@B1uJ244y)M?0)z0-hq++sJ0GZ+{oiiH;lFi&wy(C! z0Bv9z^M;`4@)USP)7dhg@K5K&U&|7&-@I0Sk>I+ZH75_xEn>qh9qmc%aA@NEKBsVBgUuK zC=b{w-0oU|)~tAVI zyJ3BAB}%rsjz7qZ?x_XCWe6!_u-{e_3u68Asso0IvwKdxq1lN#%4w>J zi>}P;$JZ>58(ZAjsmSJl6BWUTe`0eGEf3f_yS#H6vx;UJWO7CCK!{)4C}`C$j5gNj|k znb$4QRurEE3tPEe!JzG-a0DmvXePO zSD#Q-qOAjTMm|=aBSnvwHoEbgyVIz@J$hT*legak-hhb}e#%cm2$nR2 zV9A{kc)WT$np=5coPQIskbGMO@Fn2NxPv$@SJZdG6}jV;+%(cH+*RFQ(+DjsJlman zy`D(yN?8MCtjWD3w}Q|jQccb$}BDW%M$zZZnri2+5ls)@@(wQD`jt_GpTKL_^CO&SSCcHbfMX#JXYFI^*947 zPh&S-G=l*C@`E5CU1$m7ao(Q&oSmY7)ZZ#5_fEyYzLsFJwJ%GfErFeRN@7lUbUrL| z$6;gQSNsI91LJvT+$Zb0>g<4g8T{B!U05lfKmoSRH^pB^^8sJ3{8PzVq0NeypMF5k zU3qOqksdq{>AUjm3O~dZx^vS6C$ldgCWszl?xd8-sJ;-kPnISB*-f=L*8XggOx$?u zg%B-QovSjBbj}%sShZv~r?`*6PiiQW;nee<-=+y4}S#}q_BgXIJoSOf$YbE7vXt4;Np zrKzZf6Ny0aES8(-cqmnIGMg&ieYWryBZ0VTB=4<*@auP4NdIk&q(Mt(OLPm|Yl za!0OpC9sA#tk>OsaCSx0;!$5r6naw ztzLBo>#LKaxxsO=yWe%yGilL`A|6E#TK! z+1VRQlo*D?(k0-mlRM+`OMT8kVB*-%ZGv}Aj1u^j!wu*~>L<-T+u?6sX!3C}lQte- zk(6_=iwXsQ0JbRvJDwMnk!c99w~s~uD_4vMB=m~-ft-*|z~$*g4g;pgG~Ap1m@@Fx zWS)8IKSN6`^vVQ8hv^Oc+O(Rt7!U%wVsGP+Y6fyS%GG+v+dIdVfCXPzAV~~li+3m5 ztFQmbE)(#2#Oi@k$1#zUS6ijD_yYsa{+BHZAw+^zAEI3bc(h0qm?|pNf?oS}Km#OG zrOfCKn_-CVO;}DXu|5YE#d8I2o>}vUxYlv&>=+I28WY>a1;uI)HUM_IvpF;Ln4ROT zf!=1rpKihNFUo=R@sD-pT!EOm%%ncl43f;aem^;|A#s3`b6vjeAzO!M-gwc`-Kj~{ zBX)tq64*kJl#TrgW4o%hTY3x$P01nD6a6s2#MmwM$vyX5PU|YngU*wXGK*?f?#Eg$~^OWW3I@of-=XVuu-b%A1Z|nqY_2 z;~jD&=QnB#WGU>;RwFq(I< z34K1fCMwf9F}G%k(&?~2EY&)W*-_z0ReS$;7+I1)zz`)M zpAF{5ZHLPMJhYU z;GE*@hM1NM{G{L94dL$!Y-h6A9K9W=I6AYb`Y=v{(tpyLQz^^Aibea(q()R*TU|-m zozpyr!|-BZ_Dn+$*2|vq2Y@ghHo!-`WjVtU-bab(SJp2*2i-}$UP9^qnF_OIFS~-< zYj^VS!)Wu}vn6!LDIt!HJ1SU-@ce>z8f4cT4R9V@O^Xg9)4`VpjsXm*~@%l^Ux;Rf#Zck`BNXu0Y(!C zj%Z}UAmD00nsOS%Uull)dU(fZgJ$bo>3Oa`8h~Wt)EM?v(ndlTS1p0|E9Pg>=&>58 zghD~%R;YpqZAw;F;M(lx5b_wkVbnd+ER+6A-SYj^1XUgNGn0I~ES|f|5emjyPIW)S z0z8i6)BZt&h(qQxih4HbFYa6~jyeKbc_`QEdLD@9SBGButjw|b^l*oQjDk<7Nig08IK zb`ATVGzK%LP+>9aFM0hr8t+m`uNr?h&8o3Rp$T&ql||K}7GgobFhCViaDH~+F#yC- zt>7T3&_PZ*feTKTyd6vlF~JmEA1f+*>CCE4ex}5N^$4o)YuxX&3T$P0(IS!+kan^J z_p>v#1J8bWELml|S02YAQe-&yVew+kipZr~H-I@yc$=8#rZ-8L<_nDx&Qv3dJDwUX z!)@=h1`~R2M{$J8bM^1O&Gy2oxe1T;K?NA{iv_eYuhpLyc3%xu%z`dVc}Z}%cHGHQ<7P!Q|e?dwnSpL!AUf!B^!?#^Q#W!Ry+7ofwPZ1mZq z(Id0{htmX1W?2cAYWZo_lOtT#+Us-nlP$=CGK|Ri4x0Xh>(|iN9y1 z=9y26A4Y}ViRi9Fxzm{>J`YM>GX1D|$4BY9xJrY{oY2~Z&};B{Zq9Pp!pox`8e#0C z-h~@fohA74(#ws!{7kIe4v6XUX<)9bd)g66Bz%^Y4p0~OF+rY;l$v&7T<3~4y!bv> zR$r#LblZcVgy2lq!ff+>yuR4qCcljQa03x|dTcG7`CHcxh#POtGKt6ymNd_0qF7Wf zBj_KC8{jl!zZ>0neDp19n3sD?HC=|WM3!}cK4zCnu6Uoj*hbV1<#F2BD)@A~y%@VXx+u}Hcn=_s-({PxzmMZ^xJ1SV zoZMY*FarYvO_@z8Lr2ep)%HgIL7rhYa~#X&&V8oYSw zA4m{3{hw1Vb~~26K^xro&e7i9eg^SqK0i}kG3z(!_~E?sjJlSWIWXJqKiHAWTG*SpPcCMD`kEc1gx`R^YkYWz zEN4vEIkj@&e4tC!(_~x`-K$w6CU%X7U2Y z)Y}T5stEyoSsB{H{+xfST3tov~6@lO}2gx#N(rHXiOAHT!dp6FiV8V)B4{L_P_% zmX0rPa^-{1xG6|#uEGo+!v)QAOjRe|jg2ICcXU!|Cr+LMbLHlhJ)ErR*P9*z$NLlt zmYjAUbljq004ZyOco?HJovV7M*Wb2nF8vT2D;3kGi%F)6Kr#TVW>}zTHnUQxoGmD0CY9J`|d%8@}n;_co2q zWr98`R_c@PQbMi}x3bWo4XZj{it6qYj+o*XvNoS4>rF;7WNn;vA*|A!3H}Wh-uk@n z*hV0S+XnX;K;BOoz?&*9_{NnM25s4^^QUt|>R!()^Z6#G3OmL{CU^-IG_M7_a~B+& zCrV;ouC1ljbK(K=ygqAE_-}ewnH2&&t0enS7}I4i0wJgNvCf|P$`|DHku`K`HfDa2=n@DCg8MRi_)vpMR2Mxy4PE2Qe! zD||kNXy=0WeU(43v%md9Hg9Zu#CP%d%C67gk_#pfXs8lf>M=betm(}0fdDKq0{26# z_c?J!Cgo-~*=wswLXkR|W8d+rDdV00`22Ouv=_Hod9bmB!=D$I4r@7DZX7e+0tO!9 zR{0d}A6^K#yRx@ykotO4(WUJsmFvN)d-o-wZ(wcDSUS`8jO-JSAMa4y@MK4fDP`(P zzxQ2})ofiauWKj9{Rm$Yw^?g=?`oO(Vf|T^I+-A+o1#F`>tn59d=FtgVJAV=y;G&` z0GMvtEeil5;e$Ln8-41(UeMl2kYLk%vPl?0+Egg_;g)494o5FsvdeZKP;&&fjw7o{ z|B+e%Z|)8Ts?=>@p|hr!nYXgV=ZjI4Cp#$E>+g^6r7Nd3<>-t=G%B5IyZUI{e{49G zqnIXEB=M@5Ndf1J#l5YWcLG=A4ufF8S{z5Kz-uM?Ni{{%mr);=l0=473h#cIc{K3> zZ-VUw_Ng5^HgWQhs5tQU@qv-YBej9`R$a^|lknX<*+sSVXue8M0#EPBJ6_Liwl*8l z_zoD#!l%WIXJZ$jm?|zUu0LdeP&8IW*(|39&QzKGnem$6--u{ZGtHt#Hro*h)?lu zXGKo-4Hv1WP*VLj;uA6UwGSV*6ro%PRbwR{@tXoCOb=OFTB4ru-|Id!rP5Y6LF*-D zy|t0qDSVPo$ffyoj#CIZV?l3VsPRYye$F^xxv~Z78_fwlCWbwW!nYCR2nx0_+@tg3C_UDMVa2Br=X3hfP}^Cp4Yg=#OK}K zKYVY`V9jEKD!UrCbSX6Xym2T-cg}!n;?;o{mM|zWj0P@D|FO-rQ zKt#ApEh#AX%_f%9!G6`I*K=bSnMIhQ%W5&BOMntzVr*eS;WR;FgM)+k`#+Vze*z&V zkU^I-R|!Nwy<~>eeQ~hJqa2|DdpX15kD=6U73Du;T|VarycBP^n#IZeIJ&H3S9#@oec~poZELqX$DAc>XZyuIqd^GK0Jq~0kI=d zA7gMo8%zmkEdnqMh)tkp?V0I;Tm3`>aU3^~dXw zlhdd3=iygnUgYu#GRhxln}4D?Gokczq?T;RjCk0=fUHy18$lt!-q!%sNxee7No^+N$9d?Es*``)0UJ4SC&FNY0pf z_MlbGdUy$|F}YDvJ9GTCkZbsNKj3DL5;=BGBx8xI;n)=A0d0j6MP7Mi6MQdk@Tux2Qy`oI_&*%EQ0bE?|R>P$rDhcFa8O?JIK zPOpFDa?-L*+Q7RrCg#y5z$l0d>n@+OYo3g>-Z*x&`Jj5|=*UOYaJer6;FAbdtt0O? zrFGUE?!XeUG}G8wMgeTs%+r;3uUU;Nq5EuU{h-g&UOBKhdS`;J=m!~xn*ztv_p@dD zR)tR!P=~5kX)FRsx9)uyuu?0dh%Ht7`PTM@e#Cq!z2ts;O;L)tQ1ipDiWqbGz@o_p z^D=UKR#`S7HAt4vQtD(_SeWyj_av~#tJKlb9>-s5Ykuzx_E1ZNl4)~f=zG$*;-y=T z2ozmFva9az<{2&63fQ?(Q8{IPx@t1LuFcxP-LXVctWh3AwazVTt2)w^*Zn-#eB`bD zSHoAusjOBK5(>uQPGj=ijdOH3jqG?(<5#C{*JQ?Lt~@zow=Ii4Al$Vr!#+Cf-gx)A z`_h(>b@7?*6bYM8%628gGW^rwWoG$mK_eCk`}B&llStfwHf12*{5spmTeNH$4{gCY z@Yuwr*k@%m;T<60bw9z6^WpWi@Bu^qe-g;YAzI+VjgsuZaGA=^G*I{KLy@rIjSpWb zFQNsCp2T;S$VaJtZ<(waRu8y7^X;>YhsWp zM)mKgCeE@K;J4vQSV z&-(Gl5AJCp>K*2-`U|4i;u3p8xo6(isu-38>cY zml1Eo&FBBKJpour?}q&nggpFiGM%m+YX`ng8P+uRnJiMyWcv*_AZ8KAB$w;rfmN8C z<-2EB6TqZO>A~P{*<);wYqZgxQS8E*syOXvGkGxF@s(scud0uv?T)fQ z(DGrwM7lvpitUG~6!*}kZUpBn9PuP`5^nMK@($xI^0Q~axP5qU>L~uF{R_<9&m z({}$$WuD1y-QzMVb3jLPk`~bDJNkw(Dv-6cKUb4uzD= z-w?i0NZ2K}AbT}Zi^uOZ32xmSxJw+6(3j%a!~Tdy-@RxVx6YUw2|V6JX+mSJNclfl zF~SD#eo+lnB=ZpHLl{)E+`sI^-V1Vn!6#Ml_W4aH*Pe(++sNI`M=5L3?X1z0;CJeE zJiX5Mp6JH*=R9W0t(1@>>1y=lP^F=yJil6JxU~I}EpTsBx?rJ5LbCbQ zuLBmmX1MO&!E}khx=+#hCesIB53`IWwqyFtR{AUv7vJ{Q^dn1S0@*^UOmRwctFy&> zd={(J@avBzmu$MbyamRMt_$kfHY<*v)%%&nY4hUDH=$k)$8LHlUG0G3Kv#T~-vQjw z)hXbsNIg?~b-jRw)ir5Q(gfwM+Zk+0haf z+4ER%>T8RnKAoJ-(s&tu&-iZ@A?^J|d z6md=9C4am*v2r=aa&a?~37bc($n#wQ<8UGXL+!RtrRXGSj-2INJ#+3J=}e6nOC}G8 zN~lvCS@rxoq7w$CLg-wx!%V%ymw>~xhUw4cADX*$A}D~{21F$!Y61aHwpdL!QcrsN zl~$s5kk%7HWHkZ43%mOcwlk3RcbKGQ*}K(Fxput)rpE0zH0vY(EyY=blQZ`odG#hD z)~{&r6XkSE(^csqsaMm>2c%xsT2&g_Nab1bTY%fIoNHatDY@C@Ei~v@19|F?szU6SWRS)uDXqNY!48RlAb;S*ijqus; zp;bteR835>3BXML2CewOM<^q3M*ubU`}gnI-oS&(vf=GF|JJB-inGOH_dc1xb|iqR zWgrcNy?1*8)vAlAaiBE%K3Q>5Ygy-#Wf$>FqL|Kvgb&6H?iQC*Z|PN)xZJhH#d#=a z@s9O0oea6Lg}submzNZ{iZ*_okZ$6G*h5YO!dE=7c4=YA9g$y%1xjkVl#|1DShEjM zH3(sS?uRfB3mhW5Wrm} zrY>KpBxM&CC;s5Ie_{o}upN{vdb8x<_$5iiQN49`z`+Zz`&E`yLAim;X&}$HAfKmT zkO2Dgdno95mWMH~h2c4);H=MigT8hyzl|4g;dU7F;p^X>w!fa0zf{^rf?>~ z0w{=F_R}ru{g5i@&xwC%R-!-1x|(k6pSb5_)$f`zyErIvSCs{z`iVvU4x_znFKti!!av6BkRX_=+kEc;*`_rla zB`g4ruCJGT3XVTTrlh3Yj>1>PNIy?sV%Yo*=qaBIOY87_?P04yx6TV?_{~K? zOHEo3|2EA2JAMPYZM!H<{|!s-$r>l5{19icxV`Wf-{<0I>{v&H4FZaCy$B6Ludz{v zRH!!HV#JGP?5(L!Zp#}NlOODgWqjO+yo~+LasPYxH+ht2KjdfCFQr(oovP3?vkFK^5FvPJ4^LD=DpYQi4tUXuY1;erJaBQ79 zHcp(>mKvoD+)bq5SX9siR>(%CL??*D>Snn%p}NfGO4(RY^puLI+j$Pw)NZLb5bKo{s|0L~ z-A3R~;QHMg0bHSgESOM&N&@oF4|8gkPF-nVM=sQ;d}wcS{{!iW-)yQ``D6t#xlh(O zRF0Z@O>0uMz9g)u{P))ptV5lH2(gC8I5i(FDRG5Gp1bgBydKgxJy5gBfK(#D7NzZU zatG}S^z#KL*Do5=K*F7hk(`mbdgI1XoM!8*-};#UzNtEG@Nki#`7)GfV;VlfW^)=` zBaAjK5>gx@wf_D!B!2C6xBK^K4%x|+#?P@5N7tlfWo6xWJD~Wz^cnPfFF($Ixt4!j z9%x^1$on56XZB0Irm^kw-*rd1YVO;(*LbB21@7OPJspo%WO676#~oUMws(zP#+shG+$ns0IC3W z_{kYU>N5<_6=j>*0d}r-?8U+--eXfy2M+opoYL|=I932TMp=&k#tzJ^72OtRJ8BVOvTYPh;@EE=LJLeOk`y?d|Dd9%fWlhON^LnB^6x0LyZqz@imyogJ`$C@Lr9Z4o)ZQz>NCavG$$@e2#r3 z4I=}I5KgV>wl)~_Ja7gLQGju0c1{h%cV&6c`doWWv$>q*=ZLc8J{hBiKXNK?zx2Nr zz!pph;BLU2OaZTv>Pzj(VpSp2&OWNCF<~>NgL!nezhxEgj;&2 zl>z@V#>sykFCnFL?|(j)J3SFr|FFa`n@KbhC2pZB7 z#3>qIn&~mG_Vki=p8_x&CFeD4V7MvgJlk^G7H;(apFxr+7Gc0+1KfI6$@aeF+d7DJ~_-A|H=0?Da#&^Cqb=!=fVz>giW5nw=jWQBS%L^t1EZ@ zCm9;qlG{($@0W3T&l17ownc5pWhfM8Mwn-fLtb7H|IYl)8@QikEc_Le+s60x?&B*m z5kObB5{BD}gGr7l84~vP{N)C~3V;xhBWd%=^j0&KBw3T3-HU`;hqWA3OWW~<8nl-M zfYn-BI0_?g`3$_;&Exw<(G{QM|8)Kq28x9NF-F$>r@_BO)t^T*i-U1bX01<)zC_uE zR@8qEQQ#cm$YbXIUPVO?z7KI$pw@r=-V{V@>dC9Hn==1QBVy_b;#*jR+&f*$AwCl?o&G?2Uk4=*Ej zFK^Yvw*HTO9n!XRBWe++o3)4O!OC9PC=_l_<$M(W8(Akk`zv5?nJifb^rH3N?Hhio zo$=nNmSEz_QFHj|XF!vQEcdqPyZz_4|M_GBH)k)KA9XGRlTJD;3*y1c#?ZWkeaQM* z^`Bf04#Z)ARgrE4rMmlk8E5F=NpaW8xKNd3)-orW$m+kh(W12jQbQ7oi z)=#qbmhkplt}u`FC0sV9sdnb5$E!zX_xlA{4wW&j0*DCm`=1;Sh_sB1xiH@C89Z93;8d)EUk=lPNIZ`o3H`Vd+Ig`=CV}#?PAXvzWk{x96fn z0(rYh<>?PJ>Hd8v@c8=*vm+)>P1k@i2>yMaKw2nihLV6Z;wcdc*E2{8=xNh(FkEe3 zq_pc;ISw&}`?lqKx<4vIa67!xu|P}G$c3MDyg?u^InS?uM6Zzys0QM9ChW>g-ypzA zkOUSfvhTTWq{_>TJ{+kpgwX{@>P5ptiJ1NTO5)8 z8BiLUY_!*AJ$V386^TicK@z0qOPWP#Ea5?}!$_&fQ zOcRKuR^tLX*&CM(ahYftiNg!a=uU|He)2nU2(~iX@Yo|foZp906;o=d%aK09YEW7_ z-yX*;XE#z@?zZ&fQ?2fYX!T8@-$(K5Jo+AkyOM+(944x4B%2NR&avFFJY^9_br5UtzSX5@gmYYm@ z@S$jtqFn18bXQr0IYhQ=+2~ZDB_DRW3d=*B+3q`-*1P$i!GVIG(AMp=vBQ#^_mNxp z(;4Iz#_~&9jZ}}7oW?R;_x8&h?b0N326NJq4~>W^TeI^!o4=G5G{|9ff|`NN5+?ns zL@IWva(*@PXPmVGQ#rgIOY*nnoqNDDy$hd2uMT>wBgzg>YT&BV2U{k1ah1(1j_v0` z@o;6~SUGW=!+j!oa9ko_2^G75?VolPmWk=Pb-h{k=phZga( z88Rp7QzbHkpYG!aug9e^DF63Bi|1#CeAW^CpakO9DTT!p$yhuT8Aq10^cl2O@Zl-2RXr`+zCPj#_FqXs}W2{Qvn2Y{BmNsG45? zB{BF_rVgT$u0 zE8o6|@C>uOK1Ba}!V zx!M$9J1B7#_JSs90cKlucib?T&HqQpLE9YV1?v{gh2NWKEt9FX8;3DePnCL5Z=k)Flp=?-i$<5H4zc z`?2ZZ+p~Y8FYr;m3Vn2(u5Z`Av6#S}zkpQpZ|vNP0DY^I-oa$HXzg+ajQC7%wldRN zfOAL!UwFtuphqqR41v|3He4cQF5;UU9M~lti-k<HSTs^#>-Tf|C2&~#m%6WZAy1jz!Q_-IbpZP z8ht8}UG13lz+N-7+01+RlE)6OT^3px7fn@1|_b7^{bhPet}< z_)77(<^>8-qQ2X(n4faVhm@T0@Z{5HFSWs~EDXtV@7IAMbVUP6;v8^%l3PZ#wOZ-* z*Vk4lRj6OYpAZ_$*`t|tYKmLar&&{5{d+5cst)rQTn`n8>Xi+0zXc6YbTPMgzewFg z23F=+`8=FXXF6b*CDVN$v3|6iy;TSFSYh$qrbhKDcT^U9l zj}3g#zty{k*>s8S+>t|cng#3@Rz`z}njy{*?90mV6_Mkvv=iL9pb0ttHf$7;TxkX1 z-klTGb`2~-Mxx6~+{b-KiFd3XG`p?+6-0PMorB#Q@TY_CH5)En#5WrmHqj;@Fvi1A zeGpO@wuYIPOgRY&02e-U+j7!$LZ#5mS72R3MJS^gfheL5`kQV_n{8}KXaj)V%4b~As zFrQ7yZal}~{ELX@8c#V?2LlM@)g(|;VvcBjEuTJ=`WkOem{DL!+7Lr!U;F!mGm_^~ z+V^T?%bz+8noq9{ybcq16Gzd^fS2`skac)@6|;8X8l6Q19epZ@l^3@1ES!x2XLNA4 z_FI8#x5sq7hXVr83D;_5$sU!*Ye}zyx1wMC?Q{DSgrUx#fM?_Fj@{syA2x2yL^J{S zPPLkQ#O+9E9a^H*USdriL6rGHDt$B!vu~t7^)@_e=(<|SVd!MenX48AP(Z$4WoC9_ zeN;I;hEAr{ZvB^gK*1AWfI~5H0a{Y#2UBjn9`7;3JDrI5leeufemoZol*pDlVTSHP z3#8@6kxsJwUFg9(;)>Xm!{nsFC<7}Xwv_?o=eP)$>vvvj>yw z=YS7{pIOg(u@mJ%G0G^TM@L6>l)?_{_e`(yLxmX%h*D zMJS13@e!}HFR{?GNtq;%=4#zUgfFP^$g|Ax1<`vC&qIPbwGNo}3>ZM?=Evk6r|J&S zi$UD-za)A$kcqu)8)1mG z{FI*zS4{wM6S3;RP-!$0&8!6*;>|%T%HJxZt}cmap#~4vD0Pkx22gBbPo~=2iEMFa zSN<~qRz>jf54?e)>3%j;Gc6C1_YO0C|CDQDt7+bE({$0($tizZ)xn2L?@6_ zR3$`yiwH?E%X*^k*^oQ=z!1GA|E&fXHPR=rIEGq4%0=SGvror2Y%k#d`aPmx5@~7a zdkmPa1d-<`6M%& zp9rn|?C(5SRowEcasXoE$)s`=GvJk9wPt|2VX31T2F}6x3#(&IMqZND*a1muBh9?X zX_HSLo?$y$a;qFx^U1W|YAd%)Gaf|AEHqZ*{PW96FF*&nO-@c?c6t5=K_z@2f$8<^ zY}d|9NRviy7sF$61>@bV$B3*VeDg4DX3qScxVTL~5Go^T?}aG+th- z2`EduJx~ZcSssR;yX%oW&ze|$TF?;>HGHp~Eq?$w&SAD?d#s$$|4F@l*T7}X$7>}7 zRvPwxrPaLO5X-qYiQ7{P^4Ui2GDbq&DJ3Yu`)8zfMi1{>HEq`+uR1bJ4x!#n0D6_M8Zs_# z3mc%u30aK|avL-!XI&?{^%v4OXUr4OzaL*|-HV&M5GPx)SUqYMWw@Ex;%DHx^&FOD zncjYHD@AiYbGx1O(rsKW>Eg}cid)6bqA}!r!G{?x#)c?^k+q_uv%Xh3ha^A^{%wnpRPY({1LqK{NQy>!UjUc8f7x2` zgyLiGpsKlFO75ee2#drn3Glyna)PvUP}e(t6P z(8^W6g23+fzT5gZQQ^L-Yg#^P;QK8FTZAe)*|CKS6(I>8a2aoN+XEkYf2jAF!Zi3! zjS($tF@bu(ypeC>`IZtF;jz`F6A-Y7ZUQBuZxp&q4zHb9cc*!1`T3p9xL9`nWhNVr z!2lf=fCA>;1E&E|yfmrHqB#XnUCu28b*4#eZ{lLL(42#`ui?BO&uZj|d_Fh!Bw8g$ zn@2uezsJz@^XM(T{!CEw+EyG*eaF`FuTN%C zOZg)khBpDobCl(3ud$bhr>EdmuQ^l^Cic|y2m>LM+gsZGYKUAeJE5YUX9}j^JDoojv<}Cm&t+agmp?JE0%d#fo}m_cYogpjn5&egilTvDFz-Df}1i zB4)bXfn$dqb!cCa13DdCgMNehaa&${n5Mw&bxeKfNmHq%e{T_H@WB!H3QgFK2gNpB zP<;xkez-y-Lr(0^P^G!YH~WLut`0=mPXbVN64iv6Nd`s=eUQ;?V((+QU0&B4SF3*{Pm$AVrq;v&)c>VLy_UCe45VEsI@ZWM2TaB# zRU6XaLx0^H=0)Z!$rIu`3*s{Z!W7pU@6aHvX*vUuzME+!B5H}k_gFD)3=f;nI zi1|B!@iO%p;L{!JSEI~vyUByf_{HY=;RuAK##-h!06XFwxYi?xl}oWStJ*P{OcVe~ z_v(y8!+BaLQB`(D(XrL0ReKMn$R)8mU2@$q$Pq; zbZq-$IkP4V(`m}e<)cwnZLrjiA-X0@VY~Gi5-PKX20#Eag!JOw1br%7Rr}`(v@d!u zCo@&wE1SwM=zt~$K!eJ**9GAv!}Cogn9(d0X~BwPkU4gaWh?WVRcE3N?C%_R_D)Vw z(YmJTJ_0~fhItqHPqoIFGQYE2!~?aSRa{vjcDWhy5>oT zGOMFTWfL`aLx-!QL(9r?~D6y9Uhq=af8z!rqg#p zXk%gE-;=@G>MUv7p@P#ni@zP*$YQwA0Dlc21`%pV;p!_F@xI(^eA5&SZ{rU?^Wj}! z6Y%C^eMYilc_~MAwqV`h=I0;WA)MqJ^$IvyJ-O0)*RuLYjTL1TWd|(NbhIZ;nOop( z`4bc=fsxaeI@zc!vvYFFetFRKSMjef2_#oIzzPIxZ4oB0sxKOzX4Wltz#G@LD2Qr5 zm9o~xF;EU*_!O`}IigC{sU%1^$$B@>Fa_H0*>*1Amc^7tnKxcPpr8zZTme`6(0@J| zXfBE;0)lcuv%tqq05V8P2B^)Nhq~qdR|1KCfe>(GeuFaNc)T~zvma>o)FZv;sVD@D zynx%jpd8m<{zI zz44BQcmN85TNhy2plu`Nt$b;sKELSBpW)my@*ZnL{lFaD|7-8c-;zw*wh@(1yH+~o zQd6mwOU~P(B4CS|mX=v+F44&NRvMbQpcpDmU!|BhndzGgrsa}~;RGs*v>~aLX|A9$ zxrCyC3y6ZiciVh3@BH@t1LJY%FM8{e94DY4JQ} zYS0fcOC|N!{@iq*a@H$Qe9ONriBWJrhLhC?o5K2)!=~i)0hGh-mMd~RkqdIGCB(fU zy5*IvHssJ&gxudt>g(3w2{)axskJ_#h96qTc~<{c!`n^f zg+SOfdm8=UI!4%}d%RkXd}yWU1H66h)eDTsQr!qkcZE^zbI#F$k(dn7l7z}@YSv1+ zIcEYw{HJjfg()x7R@zQ&o;LdJ2vi6Fkl?OHM-Ga!%w}co(6=I5LZ>n{9pr~6!z|S$ zq_VfE7##n|{H(t$wPI-D`~L#((@V(MZ>p6Eb8k%4{lIGT;hZ9cg%~HhcbDCd%0RbM zs?uZG1wSL{Z0f+NzDiO?w9~XT^dWptKJ@M~0(@5*az*ZgabU465JN9eFY7vD8Wdz_ zlAIonnlivB;uDXov3sIgoKx2>G6a;@?v0qg;r`RnZ{4wMw2%}(e*c8k`R7sNT@>H} zfUU~mHR~8!4rJTHVlT=v3wz2kx&95Nz?@Tj8)s5E}t{|AFA=d_Y zOTqb{ATx>U``k~NJ2hYk3r#Gn1}|1Xj}jq!9%;{k(?9!WZt1z#{OATvapC-}#$LWi zi2R>~v0v6A<|?Eg)Ye#VyRyr7RJ$N4vFEFfmb1jHF(yZN^rc!ULDen>KWu(D9Z5!P ze(qg(G2HmSqyi2B&W`vo@N=3l?+dXbWn-`1LrY1^_mSilpKLLxQp}@s?=Tqw6Do5Pui*IhPZtaT|GAE&MF$;(4s9Bt5f+vbITElRv3( ze&@3GgY%ltiz;PZXq||TeA+sP9bc(#*G<2ck&zF3W?0$Bxit`EwvZb7jke;810>h3 zb}}!oS_xUbJ^$_PWrSlJ-;v4qq!@|L9uM#ALcMu|+|fni+AqPpu+CtjBrs#Y1jKVU zEc6L$d!2l-MgMi5&7?{Dfxj)qn;mIZudn7I6V$88%05A!PtCQTGSxXKMGh;qXa|fE zJBUmhM!}@e#A?s%bajm+=Ka1WxHZWaj;k#XT{T#;bH9c5zA8txVHEz(EeE*PP9eD9 z<2|evdxmVLj_n@`lp>6@ zy_ZTczm54_lGjPwPaq$dF1HdIks&Mp;%bge$QZnnp${}#&Z3)z95ei@b9;c=kJpY- z$G#RZbgyTi3&d4=3%+gXOSp|g^~^%K1id>re4gTka;7m@WA}bFo`GUbT8-n19VVdO}IkuW(H_iil_S}@$xy(Q*fCcNaD60 zxqsWK5lESLWnKgy^ci@da#k9^aW5)oLzbFxlUVBA&UM~79PF7=rW@Ot`>9(Gju3N{A4%EK0dPuz{=J_LUv|Pe^*x3eq_ExMNjB3?{$+xH^_Y z;e5pH)*~Lo@y=;b=P$Iqp9KR|j(>D-kaI4WeI&&HPFRtbZBMiQ^PwE`pF$Z7#(@UF zP2~&InXDTNx3`4)H2mD8yHl{Jk(|C(VA2vwY}3IRqo*qy9HvN7a!$$hlZqjmb6tZy zp1fLd^be5LmcI`_d3@@A`jLDS!b0qXVvP%y>+DfL86Ie=*TZ)PL??Lk^F};4=dwv; zPRBV>*)f&NE0vtjYHw@vs9l(Dk*g-}ARSciwv!f)E361d_9y<;9b7)PBw$3dh`AZi zAY4)BVh3t>;gR=s)nZW3PT_3bOLDK)eTZT^*m%P!HdC!FvK=Z=_iA>Bg!`SsC|P3u zz+oMr^PUcTebccFK>bqp475+?5RUC{Y7klp^p=Q;ZM+c8Zq6wBtH*5c=QHlp7wZS%6AszeebN>>_2^H7uuK@g%1{vF}DT>U{h`}c+u5ubXcFMH)fZ6-l z!y=qVN>jqgj)3T!mALcM;1!8}PDcMCU6<9?l#euNff${zE=b0d%;TcPFfw`y>zjLg#_WgnwatH|t}Y&WrR32m5W_AWNa`OqIc{ zW{_mX(Ck1psRCgMhJ*hXhcAG1ocb_kuY)%9rlYzq8h$K;X}=5m+8CYpJ4Yw6zLi%S zpu}dkAc_hVv>NfWy9eLsQ-6OzoBl{WAkRi|U;anmJ5dFwz(C9~-A(!Vfw z(E!S5ua;@}(q5GrIc6|PAOSPg{il$s$UBI}tk5xuP-VedGyZd}xqXvWvU_`{;Cf0> z5fN79T(#iq-q$RLb(of0ZA0lfepj^!a2-6 zv{v^7r2J*xmj&XVgZ>Wd=RqwGGe1`-Svll~bz(-y7*N1ooU5J*aY@&5ea5ss6n(a? z`N9l?w~=^1g2wLDVRD5ovqLc^Z#YRDFR+QYV4emH*fzOpzer3>Pudh??f``be>dD3 z)xB}1O6bZpnt=j(m92Fxq0dz89n>B05xx10QDL-YDz&e>h_u@9+RG)Pv4{2IYNiMy z8auH}j+fW*;q%Ymtbq+KI_r4gxGUeYJ>hq~vbe!N3%NntH+Dyh7I70!cu(qE_`Vp; z07NvH4Q2s#9;mKj;>umoviK|H+#CbgGq`D+QxI*$r6&D`yf%-M^{H;6gi4*j3?c9c z8$}NK?0I4%b?c`p2;SvL3*xY`0fe_KIZqPm`M%{DCrPUt{bS|zlhbHBNlUe7zcK}E z$L2zIl+z#Z!thJW!}{G&JAC@Pg`H(}GLM_m;uV}C9Yt(vF+F0Dy7{`k zY&v=ZZf?8^qSD>~2iP#{qQK632aMplZye6Q3X>dctS@JHSz2)zJaqXvFEZlr>9$oY z^&9^4pN`1EJcEw_wi@P{zJqQX470?WZTB*5Y7F!3#xJO^z|Gw@)bFoY5#daTP5OgI zcbKI$Ok(|9g_%#If*$3ga=U0_n%|#}eWwyeW~(19Te+!xF*(rd=LU(nM15;<7Z&oA zrqIw#r7}&_qgCdvS7+!|3?8w7JNRtHQ$~8Yyw(xC+n=- z7SQBo3+)tbg2NJn^=lukNOCkiEsgt~4tCrZ{aSnrHRMk@_?1^whFrEn3mT1NSC9B&c-(JrWu@FUhSNf+(>-_%kX#@LYnzq`^M#XX}(*!_LZCY za24(5Y$WH^=;GY^#0c{Y4{_!GPvm_bd#&6ypUpfwu%|+=UEe^Q+oe$7cXnyF@O67L3%SKO#rdayD^4^vH2hG{w%vp|_*jKf4 z=jb?40UP4S+Mi~(Uz(^cvgVB+r+Rt|;wnFRYcz(i=&Q14Ok=V-tTPw4%v&;ZrxI#w z6&rvLjj#yzBr5~N*7o09CkIE=>EWwo`ceL*@Y=504RB*xY#SY{)p3Gvn9zBL_FCN0 zl^axu8p~su8HpiDNi{%5ojAv1{0?t7*mflF9&Y_x4#)X(jyLl~c+s6*I1G7{zBI;tH*_ z94)o##4$cU4ohj~e#C^E><)3E`d;ftdwTQZpDmp)9)n5^+h%BE?)8LI2A`L!zjTBL zPYE&+#0&jDFc&4Tg}VC}E@4ZGyWbiK2dvn6Mpu!cQT_^6!RG!7)fE>V>?PNFm?vc5 z>A8gcW=5Xm2#LEW_;XgMQ$=Y-#lc|zs2}}2ny_4Kb%D@Vrtu6rOmUe!ph7;;L`XHi zXcDHc;OYbIk44?|A9-=Ml{Xap)^{jb5$Kl?v`CIT`bDXV*x{h+UARtzOd}#US>a%X zOdU`5^_P@lkQxB*B<&RQB?FgJOH2-~rMnXf_{5%~s&OlUM^i30FeOM{`XOXs)3_BU zEAyNr%bz8RJ=Cvw8y=)3p z`K|i!j$l~LqQ)kabHK}7WeyB$x*({t#cQWf98qh&X{R*Y--9)~g)?XCL>&z;v9#hY zTFY?DV&1fPE&*z}6Ki`Y5#(-eVYB;OzZjPSDnN%ArA8D>wODpQT4Jt}ah556JE+G_! z_P0uQ!qDhR94VdpAqajIOl4~>oTaQ8H5yXaTZUOb%cRAkWYV?KSNlTqgSM=Wgf)JP zz=?Q5f5zPEVO!NbOCbqEwP^Ff_O_`gdm67#U{Mp^_bKcq2IoO%zcJb(M5z`cjv1Ck z+!awNRhwjj6CQqu+xC#{UWo^3+h?6ymzq3r?3JV}<|u_9x=MWAm`1AqAnOsJ*@)^4 zr|`FkZlg{Cd!#Chmhn=_ZQe;~-DTUOv>)Tbmh0{z_42vWa|vNUO% z_5KA1xNHBgw0zjUH|s5xg$b4k z@Koa#-AFizrr6h2#$k*41tm7_jp$yL4X*DZcklq!u+>9E0WnhcOFPn7Vh^ao@~tno z@RwY)*+8&|Hpdq)`a=L*Teuw;_B@u;o!a!YaOO@bs-?*gqpm?nRkXl~mKFfF z+OVzE%RlC`M5-+KM_GXZ@9b;=2C(sq+R&Ko_RzZ%5P~kDieK3yzV4BN*{$E%KY;4k z)s?*vacHYN~u+?SoI`e@S2!9Co!cdvz;@N@{yj`0-9^8osR(V7PR-O&gM)x3owqs5oJpIwc zgY`#VzjI$V>YYDrIr8D;0JK<10@ycefw z;;oV(!gUR*xBg%xTl-#d>u(5}#jFrLKo}q0b{IuuZhuO7n++ zo@9)d#`(AT$mbW5g;c;&z>1_2Nk%;L?TIhfeK%PYp>5N<5wdihxw4-qvVsN6t@bol zDFgi~t`B&ZU3ek!#fXVE5Ao$7AwI+@amT_m2SclwQE{cLcv3kwhokq+!S%>Fe_*(Z z75)vhq@YqZqa~Hf$0S?T@nr_%mV%*aT${~4)6|(P@Bq_Q!VC4tZa`7?ra`4?oV+wSr2`TVSUmKS_>V@3%0*S#!+L=3f@oF=4k9U9xv0p1;Fx&}V;X2J~h zcz^}G3|;s8JyEFR*LB*fPUm+?f+ofnBQ5uK%NrwA+RV_~h<6-mw_wU?NGRI!zNTh% z&>ty6x8&gW75gdW)?p->&%?{*brS|k@b|(>&<^nyO55Pi_q*eK)=J*Uunw2cw--p%E!VXuDa? ztZ$HPKJ6$Sh7!UrpxVBLFSnpZOw$(ftvg!Nk1LVfL+FL(u zh1Abu(oCSmgqQ2IrE;Zz2f2DAD%T4XO6tU&)2IB}vV3{^xpz1MYFEPy_09RP2QvmA zIqw<(UaCnCs!mFX$+3sjnV*(O5)y`jW!*wzF-l^K`Bxgap+0Ej z@c^nf{Ic`6I5#9bcE7fwiiP8JZ9dr3FsD~SBiW_`8{UgFt*{$@qj#E)90JYra>Zs3 z$sCTuzOye2GdTO;4@;wgJK@!ij-|c--insluCR}{#q=D6Xz#nL6;`rkc*UzLTR%Y{ zN2YK;Zcz4YY=+|(0_?E=#~3U@I1fIyRiBF zIeWj=id+b|L;kSMs>NMfeB^(={IdrC;NYJy_$L+olL`OdOqgH0OpSa?FTRhwb<|%A Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/change_notifier_provider/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +

5eY9Ic(R#5mEx&xP_ z|EZa5m~5TwjkA~1lfMXlwv#zJ(=5{qOR7O)u0pi5C;jY9|NZiS)kHK?;2iX;Ge_@D zVY5z)`TtFRIahSnp&`UCtkHY1UQ zImfw=>~u)c`o7Sz;?ZTh*+~sB^+ViFr?zXhHr0&ldeRlPK6wA88IOG>iA{PR!arHQpflW%7{Na+ Td|?l~x(+hbH_@xS=^XQanEHEm diff --git a/mobx/ios/Runner/Info.plist b/mobx/ios/Runner/Info.plist index e0432088..3f11e7e5 100644 --- a/mobx/ios/Runner/Info.plist +++ b/mobx/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Mobx Sample CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - mobx + mobx_sample CFBundlePackageType APPL CFBundleShortVersionString @@ -39,7 +41,9 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - UIViewControllerBasedStatusBarAppearance - + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/mobx/ios/Runner/Runner-Bridging-Header.h b/mobx/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/mobx/ios/Runner/Runner-Bridging-Header.h +++ b/mobx/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/mobx/ios/RunnerTests/RunnerTests.swift b/mobx/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 00000000..86a7c3b1 --- /dev/null +++ b/mobx/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/mobx/lib/add_todo_screen.dart b/mobx/lib/add_todo_screen.dart index b74b6b66..7c6f460f 100644 --- a/mobx/lib/add_todo_screen.dart +++ b/mobx/lib/add_todo_screen.dart @@ -5,14 +5,14 @@ import 'package:todos_app_core/todos_app_core.dart'; class AddTodoScreen extends StatefulWidget { final void Function(Todo) onAdd; - const AddTodoScreen({@required this.onAdd}) + const AddTodoScreen({required this.onAdd}) : super(key: ArchSampleKeys.addTodoScreen); @override - _AddTodoScreenState createState() => _AddTodoScreenState(); + AddTodoScreenState createState() => AddTodoScreenState(); } -class _AddTodoScreenState extends State { +class AddTodoScreenState extends State { final _formKey = GlobalKey(); final _titleEditingController = TextEditingController(); final _notesEditingController = TextEditingController(); @@ -33,7 +33,7 @@ class _AddTodoScreenState extends State { appBar: AppBar(title: Text(localizations.addTodo)), body: Form( key: _formKey, - autovalidate: false, + autovalidateMode: AutovalidateMode.onUnfocus, child: Padding( padding: const EdgeInsets.all(8.0), child: Column( @@ -44,10 +44,10 @@ class _AddTodoScreenState extends State { decoration: InputDecoration( hintText: localizations.newTodoHint, ), - style: textTheme.headline, + style: textTheme.titleLarge, autofocus: true, validator: (val) { - return val.trim().isEmpty + return val == null || val.trim().isEmpty ? localizations.emptyTodoError : null; }, @@ -67,7 +67,7 @@ class _AddTodoScreenState extends State { key: ArchSampleKeys.saveNewTodo, tooltip: localizations.addTodo, onPressed: () { - if (_formKey.currentState.validate()) { + if (_formKey.currentState!.validate()) { widget.onAdd( Todo( task: _titleEditingController.text, diff --git a/mobx/lib/app.dart b/mobx/lib/app.dart index 4ff3841e..d74b3bdd 100644 --- a/mobx/lib/app.dart +++ b/mobx/lib/app.dart @@ -12,7 +12,7 @@ import 'home/home_screen.dart'; class MobxApp extends StatelessWidget { final TodosRepository repository; - const MobxApp({Key key, @required this.repository}) : super(key: key); + const MobxApp({super.key, required this.repository}); @override Widget build(BuildContext context) { @@ -39,7 +39,7 @@ class MobxApp extends StatelessWidget { Navigator.pop(context); }, ); - } + }, }, ), ); diff --git a/mobx/lib/details_screen.dart b/mobx/lib/details_screen.dart index c9ee3a2c..9d15da47 100644 --- a/mobx/lib/details_screen.dart +++ b/mobx/lib/details_screen.dart @@ -9,7 +9,7 @@ class DetailsScreen extends StatelessWidget { final Todo todo; final void Function() onRemove; - const DetailsScreen({@required this.todo, @required this.onRemove}) + const DetailsScreen({required this.todo, required this.onRemove}) : super(key: ArchSampleKeys.todoDetailsScreen); @override @@ -54,7 +54,7 @@ class DetailsScreen extends StatelessWidget { builder: (_) => Checkbox( key: ArchSampleKeys.detailsTodoItemCheckbox, value: todo.complete, - onChanged: (done) => todo.complete = done, + onChanged: (done) => todo.complete = done ?? false, ), ), ), diff --git a/mobx/lib/edit_todo_screen.dart b/mobx/lib/edit_todo_screen.dart index 24c96741..bae188ed 100644 --- a/mobx/lib/edit_todo_screen.dart +++ b/mobx/lib/edit_todo_screen.dart @@ -6,14 +6,14 @@ class EditTodoScreen extends StatefulWidget { final void Function() onEdit; final Todo todo; - const EditTodoScreen({@required this.todo, @required this.onEdit}) + const EditTodoScreen({required this.todo, required this.onEdit}) : super(key: ArchSampleKeys.editTodoScreen); @override - _EditTodoScreenState createState() => _EditTodoScreenState(); + EditTodoScreenState createState() => EditTodoScreenState(); } -class _EditTodoScreenState extends State { +class EditTodoScreenState extends State { final _formKey = GlobalKey(); @override @@ -34,20 +34,20 @@ class _EditTodoScreenState extends State { hintText: ArchSampleLocalizations.of(context).newTodoHint, ), validator: (val) { - return val.trim().isEmpty + return val == null || val.trim().isEmpty ? ArchSampleLocalizations.of(context).emptyTodoError : null; }, - onSaved: (value) => widget.todo.task = value, + onSaved: (value) => widget.todo.task = value ?? '', ), TextFormField( key: ArchSampleKeys.noteField, - initialValue: widget.todo.note ?? '', + initialValue: widget.todo.note, decoration: InputDecoration( hintText: ArchSampleLocalizations.of(context).notesHint, ), maxLines: 10, - onSaved: (value) => widget.todo.note = value, + onSaved: (value) => widget.todo.note = value ?? '', ), ], ), @@ -57,8 +57,8 @@ class _EditTodoScreenState extends State { key: ArchSampleKeys.saveTodoFab, tooltip: ArchSampleLocalizations.of(context).saveChanges, onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); + if (_formKey.currentState!.validate()) { + _formKey.currentState!.save(); widget.onEdit(); } }, diff --git a/mobx/lib/home/extra_actions_button.dart b/mobx/lib/home/extra_actions_button.dart index 8ecc4ea5..010852d9 100644 --- a/mobx/lib/home/extra_actions_button.dart +++ b/mobx/lib/home/extra_actions_button.dart @@ -4,7 +4,7 @@ import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class ExtraActionsButton extends StatelessWidget { - const ExtraActionsButton({Key key}) : super(key: key); + const ExtraActionsButton({super.key}); @override Widget build(BuildContext context) { diff --git a/mobx/lib/home/filter_button.dart b/mobx/lib/home/filter_button.dart index f01c49f8..e5174295 100644 --- a/mobx/lib/home/filter_button.dart +++ b/mobx/lib/home/filter_button.dart @@ -7,7 +7,7 @@ import 'package:todos_app_core/todos_app_core.dart'; class FilterButton extends StatelessWidget { final bool isActive; - const FilterButton({this.isActive, Key key}) : super(key: key); + const FilterButton({super.key, required this.isActive}); @override Widget build(BuildContext context) { @@ -38,9 +38,9 @@ class FilterButton extends StatelessWidget { BuildContext context, TodoStore store, ) { - final activeStyle = Theme.of( - context, - ).textTheme.bodyMedium.copyWith(color: Theme.of(context).accentColor); + final activeStyle = Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.secondary, + ); final defaultStyle = Theme.of(context).textTheme.bodyMedium; return [ diff --git a/mobx/lib/home/home_screen.dart b/mobx/lib/home/home_screen.dart index a52389e2..9985886e 100644 --- a/mobx/lib/home/home_screen.dart +++ b/mobx/lib/home/home_screen.dart @@ -13,20 +13,20 @@ import 'extra_actions_button.dart'; import 'filter_button.dart'; class HomeScreen extends StatefulWidget { - const HomeScreen(); + const HomeScreen({super.key}); @override - _HomeScreenState createState() => _HomeScreenState(); + HomeScreenState createState() => HomeScreenState(); } -class _HomeScreenState extends State { +class HomeScreenState extends State { // Because the state of the tabs is only a concern to the HomeScreen Widget, // it is stored as local state rather than in the TodoStore. // // In this case, there's no need for a fully generated Store class. Just // create a mobx Observable locally as part of the state class and use the // Observer Widget to listen for changes as with any Observable. - final _tab = Observable(_HomeScreenTab.todos); + final _tab = Observable(HomeScreenTab.todos); @override Widget build(BuildContext context) { @@ -35,9 +35,8 @@ class _HomeScreenState extends State { title: Text(MobxLocalizations.of(context).appTitle), actions: [ Observer( - builder: (_) => FilterButton( - isActive: _tab.value == _HomeScreenTab.todos, - ), + builder: (_) => + FilterButton(isActive: _tab.value == HomeScreenTab.todos), ), const ExtraActionsButton(), ], @@ -61,10 +60,9 @@ class _HomeScreenState extends State { } switch (_tab.value) { - case _HomeScreenTab.stats: + case HomeScreenTab.stats: return const StatsView(); - case _HomeScreenTab.todos: - default: + case HomeScreenTab.todos: return TodoListView( onRemove: (context, todo) { store.todos.remove(todo); @@ -78,16 +76,16 @@ class _HomeScreenState extends State { builder: (context) { return BottomNavigationBar( key: ArchSampleKeys.tabs, - currentIndex: _HomeScreenTab.values.indexOf(_tab.value), + currentIndex: HomeScreenTab.values.indexOf(_tab.value), onTap: (int index) { - runInAction(() => _tab.value = _HomeScreenTab.values[index]); + runInAction(() => _tab.value = HomeScreenTab.values[index]); }, items: [ - for (final tab in _HomeScreenTab.values) + for (final tab in HomeScreenTab.values) BottomNavigationBarItem( icon: Icon(tab.icon, key: tab.key), - title: Text(tab.title), - ) + label: tab.title, + ), ], ); }, @@ -96,7 +94,7 @@ class _HomeScreenState extends State { } void _displayRemovalNotification(BuildContext context, Todo todo) { - Scaffold.of(context).showSnackBar( + ScaffoldMessenger.of(context).showSnackBar( SnackBar( key: ArchSampleKeys.snackbar, duration: const Duration(seconds: 2), @@ -117,19 +115,19 @@ class _HomeScreenState extends State { } } -enum _HomeScreenTab { todos, stats } +enum HomeScreenTab { todos, stats } -extension TabExtensions on _HomeScreenTab { +extension TabExtensions on HomeScreenTab { IconData get icon { - return (this == _HomeScreenTab.todos) ? Icons.list : Icons.show_chart; + return (this == HomeScreenTab.todos) ? Icons.list : Icons.show_chart; } String get title { - return this == _HomeScreenTab.todos ? 'Todos' : 'Stats'; + return this == HomeScreenTab.todos ? 'Todos' : 'Stats'; } Key get key { - return this == _HomeScreenTab.stats + return this == HomeScreenTab.stats ? ArchSampleKeys.statsTab : ArchSampleKeys.todoTab; } diff --git a/mobx/lib/home/stats_view.dart b/mobx/lib/home/stats_view.dart index c0282d74..03c6ea75 100644 --- a/mobx/lib/home/stats_view.dart +++ b/mobx/lib/home/stats_view.dart @@ -1,4 +1,3 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:mobx_sample/stores/todo_store.dart'; @@ -6,7 +5,7 @@ import 'package:provider/provider.dart'; import 'package:todos_app_core/todos_app_core.dart'; class StatsView extends StatelessWidget { - const StatsView(); + const StatsView({super.key}); @override Widget build(BuildContext context) { diff --git a/mobx/lib/home/todo_list_view.dart b/mobx/lib/home/todo_list_view.dart index e4577664..4a3ee3a6 100644 --- a/mobx/lib/home/todo_list_view.dart +++ b/mobx/lib/home/todo_list_view.dart @@ -10,7 +10,7 @@ import '../details_screen.dart'; class TodoListView extends StatelessWidget { final void Function(BuildContext context, Todo todo) onRemove; - TodoListView({Key key, @required this.onRemove}) : super(key: key); + const TodoListView({super.key, required this.onRemove}); @override Widget build(BuildContext context) { @@ -48,7 +48,7 @@ class TodoListView extends StatelessWidget { builder: (_) => Checkbox( key: ArchSampleKeys.todoItemCheckbox(todo.id), value: todo.complete, - onChanged: (done) => todo.complete = done, + onChanged: (done) => todo.complete = done ?? false, ), ), title: Observer( diff --git a/mobx/lib/localization.dart b/mobx/lib/localization.dart index 79370389..fffe9551 100644 --- a/mobx/lib/localization.dart +++ b/mobx/lib/localization.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; class MobxLocalizations { static MobxLocalizations of(BuildContext context) { - return Localizations.of(context, MobxLocalizations); + return Localizations.of(context, MobxLocalizations)!; } String get appTitle => 'Todos with MobX'; diff --git a/mobx/lib/main.dart b/mobx/lib/main.dart index d2c75a27..69c76350 100644 --- a/mobx/lib/main.dart +++ b/mobx/lib/main.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:key_value_store_flutter/key_value_store_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:todos_repository_local_storage/todos_repository_local_storage.dart'; @@ -13,7 +12,7 @@ Future main() async { repository: LocalStorageRepository( localStorage: KeyValueStorage( 'mobx_todos', - FlutterKeyValueStore(await SharedPreferences.getInstance()), + await SharedPreferences.getInstance(), ), ), ), diff --git a/mobx/lib/models/todo.dart b/mobx/lib/models/todo.dart index 184f0de6..1a8f1230 100644 --- a/mobx/lib/models/todo.dart +++ b/mobx/lib/models/todo.dart @@ -5,14 +5,14 @@ part 'todo.g.dart'; /// A reactive class that holds information about a task that needs to be /// completed -class Todo = _Todo with _$Todo; - -abstract class _Todo with Store { - _Todo({ - String id, - this.task = '', - this.note = '', - this.complete = false, +class Todo = TodoBase with _$Todo; + +abstract class TodoBase with Store { + TodoBase({ + String? id, + this.task = '', // ignore: unused_element_parameter + this.note = '', // ignore: unused_element_parameter + this.complete = false, // ignore: unused_element_parameter }) : id = id ?? Uuid().generateV4(); final String id; @@ -34,7 +34,7 @@ abstract class _Todo with Store { @override bool operator ==(Object other) => identical(this, other) || - other is _Todo && + other is TodoBase && runtimeType == other.runtimeType && id == other.id && task == other.task && diff --git a/mobx/lib/models/todo.g.dart b/mobx/lib/models/todo.g.dart index 93b1baa7..62a8fa54 100644 --- a/mobx/lib/models/todo.g.dart +++ b/mobx/lib/models/todo.g.dart @@ -6,57 +6,60 @@ part of 'todo.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers -mixin _$Todo on _Todo, Store { - final _$taskAtom = Atom(name: '_Todo.task'); +mixin _$Todo on TodoBase, Store { + late final _$taskAtom = Atom(name: 'TodoBase.task', context: context); @override String get task { - _$taskAtom.context.enforceReadPolicy(_$taskAtom); - _$taskAtom.reportObserved(); + _$taskAtom.reportRead(); return super.task; } @override set task(String value) { - _$taskAtom.context.conditionallyRunInAction(() { + _$taskAtom.reportWrite(value, super.task, () { super.task = value; - _$taskAtom.reportChanged(); - }, _$taskAtom, name: '${_$taskAtom.name}_set'); + }); } - final _$noteAtom = Atom(name: '_Todo.note'); + late final _$noteAtom = Atom(name: 'TodoBase.note', context: context); @override String get note { - _$noteAtom.context.enforceReadPolicy(_$noteAtom); - _$noteAtom.reportObserved(); + _$noteAtom.reportRead(); return super.note; } @override set note(String value) { - _$noteAtom.context.conditionallyRunInAction(() { + _$noteAtom.reportWrite(value, super.note, () { super.note = value; - _$noteAtom.reportChanged(); - }, _$noteAtom, name: '${_$noteAtom.name}_set'); + }); } - final _$completeAtom = Atom(name: '_Todo.complete'); + late final _$completeAtom = Atom(name: 'TodoBase.complete', context: context); @override bool get complete { - _$completeAtom.context.enforceReadPolicy(_$completeAtom); - _$completeAtom.reportObserved(); + _$completeAtom.reportRead(); return super.complete; } @override set complete(bool value) { - _$completeAtom.context.conditionallyRunInAction(() { + _$completeAtom.reportWrite(value, super.complete, () { super.complete = value; - _$completeAtom.reportChanged(); - }, _$completeAtom, name: '${_$completeAtom.name}_set'); + }); + } + + @override + String toString() { + return ''' +task: ${task}, +note: ${note}, +complete: ${complete} + '''; } } diff --git a/mobx/lib/models/todo_codec.dart b/mobx/lib/models/todo_codec.dart index f758c612..ec012382 100644 --- a/mobx/lib/models/todo_codec.dart +++ b/mobx/lib/models/todo_codec.dart @@ -21,12 +21,7 @@ class _TodoEncoder extends Converter { @override TodoEntity convert(Todo todo) { - return TodoEntity( - todo.task, - todo.id, - todo.note, - todo.complete, - ); + return TodoEntity(todo.task, todo.id, todo.note, todo.complete); } } @@ -37,7 +32,7 @@ class _TodoDecoder extends Converter { Todo convert(TodoEntity entity) { return Todo( task: entity.task, - complete: entity.complete ?? false, + complete: entity.complete, note: entity.note, id: entity.id, ); diff --git a/mobx/lib/stores/todo_store.dart b/mobx/lib/stores/todo_store.dart index 837943c6..5f445ddc 100644 --- a/mobx/lib/stores/todo_store.dart +++ b/mobx/lib/stores/todo_store.dart @@ -10,28 +10,28 @@ part 'todo_store.g.dart'; /// /// The TodoStore interacts with a TodosRepository to load and persist todos. It /// persists changes every time the list of todos is edited. -class TodoStore = _TodoStore with _$TodoStore; +class TodoStore = TodoStoreBase with _$TodoStore; -abstract class _TodoStore with Store { - _TodoStore( +abstract class TodoStoreBase with Store { + TodoStoreBase( this.repository, { - ObservableList todos, - this.filter = VisibilityFilter.all, - this.todosCodec = const TodoCodec(), - this.saveDelay = 500, + ObservableList? todos, + this.filter = VisibilityFilter.all, // ignore: unused_element_parameter + this.todosCodec = const TodoCodec(), // ignore: unused_element_parameter + this.saveDelay = 500, // ignore: unused_element_parameter }) : todos = todos ?? ObservableList(); final TodoCodec todosCodec; final TodosRepository repository; - final int saveDelay; + final int? saveDelay; final ObservableList todos; - ReactionDisposer _disposeSaveReaction; + late ReactionDisposer _disposeSaveReaction; @observable VisibilityFilter filter; @observable - ObservableFuture loader; + late ObservableFuture loader; @computed List get pendingTodos => @@ -61,7 +61,6 @@ abstract class _TodoStore with Store { case VisibilityFilter.completed: return completedTodos; case VisibilityFilter.all: - default: return todos; } } diff --git a/mobx/lib/stores/todo_store.g.dart b/mobx/lib/stores/todo_store.g.dart index 418616b2..f2b0bd05 100644 --- a/mobx/lib/stores/todo_store.g.dart +++ b/mobx/lib/stores/todo_store.g.dart @@ -6,111 +6,156 @@ part of 'todo_store.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers -mixin _$TodoStore on _TodoStore, Store { - Computed> _$pendingTodosComputed; +mixin _$TodoStore on TodoStoreBase, Store { + Computed>? _$pendingTodosComputed; @override - List get pendingTodos => (_$pendingTodosComputed ??= - Computed>(() => super.pendingTodos)) - .value; - Computed> _$completedTodosComputed; + List get pendingTodos => + (_$pendingTodosComputed ??= Computed>( + () => super.pendingTodos, + name: 'TodoStoreBase.pendingTodos', + )).value; + Computed>? _$completedTodosComputed; @override - List get completedTodos => (_$completedTodosComputed ??= - Computed>(() => super.completedTodos)) - .value; - Computed _$hasCompletedTodosComputed; + List get completedTodos => + (_$completedTodosComputed ??= Computed>( + () => super.completedTodos, + name: 'TodoStoreBase.completedTodos', + )).value; + Computed? _$hasCompletedTodosComputed; @override - bool get hasCompletedTodos => (_$hasCompletedTodosComputed ??= - Computed(() => super.hasCompletedTodos)) - .value; - Computed _$hasPendingTodosComputed; + bool get hasCompletedTodos => (_$hasCompletedTodosComputed ??= Computed( + () => super.hasCompletedTodos, + name: 'TodoStoreBase.hasCompletedTodos', + )).value; + Computed? _$hasPendingTodosComputed; @override - bool get hasPendingTodos => (_$hasPendingTodosComputed ??= - Computed(() => super.hasPendingTodos)) - .value; - Computed _$numPendingComputed; + bool get hasPendingTodos => (_$hasPendingTodosComputed ??= Computed( + () => super.hasPendingTodos, + name: 'TodoStoreBase.hasPendingTodos', + )).value; + Computed? _$numPendingComputed; @override - int get numPending => - (_$numPendingComputed ??= Computed(() => super.numPending)).value; - Computed _$numCompletedComputed; + int get numPending => (_$numPendingComputed ??= Computed( + () => super.numPending, + name: 'TodoStoreBase.numPending', + )).value; + Computed? _$numCompletedComputed; @override - int get numCompleted => - (_$numCompletedComputed ??= Computed(() => super.numCompleted)) - .value; - Computed> _$visibleTodosComputed; + int get numCompleted => (_$numCompletedComputed ??= Computed( + () => super.numCompleted, + name: 'TodoStoreBase.numCompleted', + )).value; + Computed>? _$visibleTodosComputed; @override - List get visibleTodos => (_$visibleTodosComputed ??= - Computed>(() => super.visibleTodos)) - .value; + List get visibleTodos => + (_$visibleTodosComputed ??= Computed>( + () => super.visibleTodos, + name: 'TodoStoreBase.visibleTodos', + )).value; - final _$filterAtom = Atom(name: '_TodoStore.filter'); + late final _$filterAtom = Atom( + name: 'TodoStoreBase.filter', + context: context, + ); @override VisibilityFilter get filter { - _$filterAtom.context.enforceReadPolicy(_$filterAtom); - _$filterAtom.reportObserved(); + _$filterAtom.reportRead(); return super.filter; } @override set filter(VisibilityFilter value) { - _$filterAtom.context.conditionallyRunInAction(() { + _$filterAtom.reportWrite(value, super.filter, () { super.filter = value; - _$filterAtom.reportChanged(); - }, _$filterAtom, name: '${_$filterAtom.name}_set'); + }); } - final _$loaderAtom = Atom(name: '_TodoStore.loader'); + late final _$loaderAtom = Atom( + name: 'TodoStoreBase.loader', + context: context, + ); @override ObservableFuture get loader { - _$loaderAtom.context.enforceReadPolicy(_$loaderAtom); - _$loaderAtom.reportObserved(); + _$loaderAtom.reportRead(); return super.loader; } + bool _loaderIsInitialized = false; + @override set loader(ObservableFuture value) { - _$loaderAtom.context.conditionallyRunInAction(() { - super.loader = value; - _$loaderAtom.reportChanged(); - }, _$loaderAtom, name: '${_$loaderAtom.name}_set'); + _$loaderAtom.reportWrite( + value, + _loaderIsInitialized ? super.loader : null, + () { + super.loader = value; + _loaderIsInitialized = true; + }, + ); } - final _$_loadTodosAsyncAction = AsyncAction('_loadTodos'); + late final _$_loadTodosAsyncAction = AsyncAction( + 'TodoStoreBase._loadTodos', + context: context, + ); @override Future _loadTodos() { return _$_loadTodosAsyncAction.run(() => super._loadTodos()); } - final _$_TodoStoreActionController = ActionController(name: '_TodoStore'); + late final _$TodoStoreBaseActionController = ActionController( + name: 'TodoStoreBase', + context: context, + ); @override void toggleAll() { - final _$actionInfo = _$_TodoStoreActionController.startAction(); + final _$actionInfo = _$TodoStoreBaseActionController.startAction( + name: 'TodoStoreBase.toggleAll', + ); try { return super.toggleAll(); } finally { - _$_TodoStoreActionController.endAction(_$actionInfo); + _$TodoStoreBaseActionController.endAction(_$actionInfo); } } @override void clearCompleted() { - final _$actionInfo = _$_TodoStoreActionController.startAction(); + final _$actionInfo = _$TodoStoreBaseActionController.startAction( + name: 'TodoStoreBase.clearCompleted', + ); try { return super.clearCompleted(); } finally { - _$_TodoStoreActionController.endAction(_$actionInfo); + _$TodoStoreBaseActionController.endAction(_$actionInfo); } } + + @override + String toString() { + return ''' +filter: ${filter}, +loader: ${loader}, +pendingTodos: ${pendingTodos}, +completedTodos: ${completedTodos}, +hasCompletedTodos: ${hasCompletedTodos}, +hasPendingTodos: ${hasPendingTodos}, +numPending: ${numPending}, +numCompleted: ${numCompleted}, +visibleTodos: ${visibleTodos} + '''; + } } diff --git a/mobx/linux/.gitignore b/mobx/linux/.gitignore new file mode 100644 index 00000000..d3896c98 --- /dev/null +++ b/mobx/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/mobx/linux/CMakeLists.txt b/mobx/linux/CMakeLists.txt new file mode 100644 index 00000000..71e84acb --- /dev/null +++ b/mobx/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "mobx_sample") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.mobx_sample") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/mobx/linux/flutter/CMakeLists.txt b/mobx/linux/flutter/CMakeLists.txt new file mode 100644 index 00000000..d5bd0164 --- /dev/null +++ b/mobx/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/mobx/linux/flutter/generated_plugin_registrant.cc b/mobx/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 00000000..e71a16d2 --- /dev/null +++ b/mobx/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/mobx/linux/flutter/generated_plugin_registrant.h b/mobx/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 00000000..e0f0a47b --- /dev/null +++ b/mobx/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/mobx/linux/flutter/generated_plugins.cmake b/mobx/linux/flutter/generated_plugins.cmake new file mode 100644 index 00000000..2e1de87a --- /dev/null +++ b/mobx/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/mobx/linux/runner/CMakeLists.txt b/mobx/linux/runner/CMakeLists.txt new file mode 100644 index 00000000..e97dabc7 --- /dev/null +++ b/mobx/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/mobx/linux/runner/main.cc b/mobx/linux/runner/main.cc new file mode 100644 index 00000000..e7c5c543 --- /dev/null +++ b/mobx/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/mobx/linux/runner/my_application.cc b/mobx/linux/runner/my_application.cc new file mode 100644 index 00000000..0b6f40d1 --- /dev/null +++ b/mobx/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "mobx_sample"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "mobx_sample"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/mobx/linux/runner/my_application.h b/mobx/linux/runner/my_application.h new file mode 100644 index 00000000..72271d5e --- /dev/null +++ b/mobx/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/mobx/macos/.gitignore b/mobx/macos/.gitignore new file mode 100644 index 00000000..746adbb6 --- /dev/null +++ b/mobx/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/mobx/macos/Flutter/Flutter-Debug.xcconfig b/mobx/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/mobx/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mobx/macos/Flutter/Flutter-Release.xcconfig b/mobx/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/mobx/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mobx/macos/Flutter/GeneratedPluginRegistrant.swift b/mobx/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 00000000..b8e2b22f --- /dev/null +++ b/mobx/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation +import shared_preferences_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) +} diff --git a/mobx/macos/Podfile b/mobx/macos/Podfile new file mode 100644 index 00000000..29c8eb32 --- /dev/null +++ b/mobx/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/mobx/macos/Podfile.lock b/mobx/macos/Podfile.lock new file mode 100644 index 00000000..390b5331 --- /dev/null +++ b/mobx/macos/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin + +SPEC CHECKSUMS: + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + +PODFILE CHECKSUM: 7eb978b976557c8c1cd717d8185ec483fd090a82 + +COCOAPODS: 1.16.2 diff --git a/mobx/macos/Runner.xcodeproj/project.pbxproj b/mobx/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..cdd9ac24 --- /dev/null +++ b/mobx/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 87E488BBC18CE7864C4C407B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 035E91E51A94872019671456 /* Pods_Runner.framework */; }; + F9E2F6672CF45DDA09CEA7B1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC027EAE5F00C8083E5C07F4 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 035E91E51A94872019671456 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A2FF8AF12B8559BDF89874C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 1988A0110B82B8D7ED59A1D1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* mobx_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mobx_sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4061F676840DB9B8D7AF1B0B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + CC027EAE5F00C8083E5C07F4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CDCE135CA4E73D7F584AEA72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + F1F4C0431B128F96573A4B56 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FC372711CA054B8FDB33E0C7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F9E2F6672CF45DDA09CEA7B1 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 87E488BBC18CE7864C4C407B /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 756709D114E990443C3997DC /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* mobx_sample.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 756709D114E990443C3997DC /* Pods */ = { + isa = PBXGroup; + children = ( + CDCE135CA4E73D7F584AEA72 /* Pods-Runner.debug.xcconfig */, + F1F4C0431B128F96573A4B56 /* Pods-Runner.release.xcconfig */, + 1988A0110B82B8D7ED59A1D1 /* Pods-Runner.profile.xcconfig */, + 0A2FF8AF12B8559BDF89874C /* Pods-RunnerTests.debug.xcconfig */, + FC372711CA054B8FDB33E0C7 /* Pods-RunnerTests.release.xcconfig */, + 4061F676840DB9B8D7AF1B0B /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 035E91E51A94872019671456 /* Pods_Runner.framework */, + CC027EAE5F00C8083E5C07F4 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 98D75ED9ABCC905315ABCA33 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 34300F4A3A7C9FA90F3B19F8 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 3E614B60F41E87897E28382D /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* mobx_sample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 34300F4A3A7C9FA90F3B19F8 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3E614B60F41E87897E28382D /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 98D75ED9ABCC905315ABCA33 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0A2FF8AF12B8559BDF89874C /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/mobx_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/mobx_sample"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FC372711CA054B8FDB33E0C7 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/mobx_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/mobx_sample"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4061F676840DB9B8D7AF1B0B /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobxSample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/mobx_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/mobx_sample"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/mobx/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobx/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mobx/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mobx/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mobx/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..1b1d5b61 --- /dev/null +++ b/mobx/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobx/macos/Runner.xcworkspace/contents.xcworkspacedata b/mobx/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mobx/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mobx/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobx/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mobx/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mobx/macos/Runner/AppDelegate.swift b/mobx/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/mobx/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/mobx/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + +