From b269c4b832311664a2e9361989741341ff15a269 Mon Sep 17 00:00:00 2001 From: Laha Luhem Date: Fri, 27 Oct 2023 22:48:44 +0200 Subject: [PATCH] added files from repo more gitignore --- gamestore/.gitattributes | 36 + gamestore/.gitignore | 425 +++++++ gamestore/.idea/.gitignore | 3 + gamestore/.idea/gamestore.iml | 16 + gamestore/.idea/git_toolbox_prj.xml | 15 + .../.idea/runConfigurations/Build APK.run.xml | 17 + .../.idea/runConfigurations/Build IPA.run.xml | 17 + .../.idea/runConfigurations/Dart_cleanup.xml | 17 + .../Debug launch Develop.run.xml | 7 + .../Debug launch Prod.run.xml | 7 + .../Profile launch Develop.run.xml | 8 + .../Release launch Develop.run.xml | 8 + .../Release launch Prod.run.xml | 8 + gamestore/.metadata | 30 + gamestore/README.md | 16 + gamestore/analysis_options.yaml | 219 ++++ gamestore/android/.gitignore | 39 + gamestore/android/.idea/kotlinc.xml | 6 + gamestore/android/app/build.gradle | 91 ++ .../app/src/develop/AndroidManifest.xml | 7 + .../develop/res/mipmap-hdpi/launcher_icon.png | Bin 0 -> 3845 bytes .../develop/res/mipmap-mdpi/launcher_icon.png | Bin 0 -> 2579 bytes .../res/mipmap-xhdpi/launcher_icon.png | Bin 0 -> 4799 bytes .../res/mipmap-xxhdpi/launcher_icon.png | Bin 0 -> 7130 bytes .../res/mipmap-xxxhdpi/launcher_icon.png | Bin 0 -> 8600 bytes .../android/app/src/main/AndroidManifest.xml | 33 + .../gamestore/gamestore/MainActivity.kt | 6 + .../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 + .../android/app/src/prod/AndroidManifest.xml | 7 + .../prod/res/mipmap-hdpi/launcher_icon.png | Bin 0 -> 4763 bytes .../prod/res/mipmap-mdpi/launcher_icon.png | Bin 0 -> 3119 bytes .../prod/res/mipmap-xhdpi/launcher_icon.png | Bin 0 -> 6410 bytes .../prod/res/mipmap-xxhdpi/launcher_icon.png | Bin 0 -> 9935 bytes .../prod/res/mipmap-xxxhdpi/launcher_icon.png | Bin 0 -> 13363 bytes .../app/src/profile/AndroidManifest.xml | 7 + gamestore/android/build.gradle | 31 + gamestore/android/gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.properties | 5 + gamestore/android/settings.gradle | 11 + gamestore/assets/icons/.gitkeep | 0 gamestore/assets/logos/.gitkeep | 0 gamestore/assets/res/app_icon-dev.png | Bin 0 -> 18104 bytes gamestore/assets/res/app_icon.png | Bin 0 -> 31195 bytes gamestore/flavorizr.yaml | 39 + gamestore/flutter_launcher_icons-develop.yaml | 18 + gamestore/flutter_launcher_icons-prod.yaml | 18 + gamestore/flutter_native_splash.yaml | 134 +++ gamestore/ios/.gitignore | 34 + gamestore/ios/Flutter/AppFrameworkInfo.plist | 26 + gamestore/ios/Flutter/Debug.xcconfig | 2 + gamestore/ios/Flutter/Release.xcconfig | 2 + gamestore/ios/Podfile | 49 + gamestore/ios/Podfile.lock | 154 +++ .../ios/Runner.xcodeproj/project.pbxproj | 1002 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/develop.xcscheme | 77 ++ .../xcshareddata/xcschemes/prod.xcscheme | 98 ++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + gamestore/ios/Runner/AppDelegate.swift | 13 + .../AppIcon-develop-1024x1024@1x.png | Bin 0 -> 29416 bytes .../AppIcon-develop-20x20@1x.png | Bin 0 -> 878 bytes .../AppIcon-develop-20x20@2x.png | Bin 0 -> 1672 bytes .../AppIcon-develop-20x20@3x.png | Bin 0 -> 2534 bytes .../AppIcon-develop-29x29@1x.png | Bin 0 -> 1245 bytes .../AppIcon-develop-29x29@2x.png | Bin 0 -> 2442 bytes .../AppIcon-develop-29x29@3x.png | Bin 0 -> 3496 bytes .../AppIcon-develop-40x40@1x.png | Bin 0 -> 1672 bytes .../AppIcon-develop-40x40@2x.png | Bin 0 -> 3276 bytes .../AppIcon-develop-40x40@3x.png | Bin 0 -> 4726 bytes .../AppIcon-develop-50x50@1x.png | Bin 0 -> 2121 bytes .../AppIcon-develop-50x50@2x.png | Bin 0 -> 3949 bytes .../AppIcon-develop-57x57@1x.png | Bin 0 -> 1972 bytes .../AppIcon-develop-57x57@2x.png | Bin 0 -> 4241 bytes .../AppIcon-develop-60x60@2x.png | Bin 0 -> 4726 bytes .../AppIcon-develop-60x60@3x.png | Bin 0 -> 6095 bytes .../AppIcon-develop-72x72@1x.png | Bin 0 -> 2941 bytes .../AppIcon-develop-72x72@2x.png | Bin 0 -> 5292 bytes .../AppIcon-develop-76x76@1x.png | Bin 0 -> 3228 bytes .../AppIcon-develop-76x76@2x.png | Bin 0 -> 5659 bytes .../AppIcon-develop-83.5x83.5@2x.png | Bin 0 -> 5462 bytes .../AppIcon-develop.appiconset/Contents.json | 1 + .../AppIcon-prod-1024x1024@1x.png | Bin 0 -> 79691 bytes .../AppIcon-prod-20x20@1x.png | Bin 0 -> 925 bytes .../AppIcon-prod-20x20@2x.png | Bin 0 -> 2211 bytes .../AppIcon-prod-20x20@3x.png | Bin 0 -> 3430 bytes .../AppIcon-prod-29x29@1x.png | Bin 0 -> 1473 bytes .../AppIcon-prod-29x29@2x.png | Bin 0 -> 3163 bytes .../AppIcon-prod-29x29@3x.png | Bin 0 -> 5017 bytes .../AppIcon-prod-40x40@1x.png | Bin 0 -> 2211 bytes .../AppIcon-prod-40x40@2x.png | Bin 0 -> 4691 bytes .../AppIcon-prod-40x40@3x.png | Bin 0 -> 6876 bytes .../AppIcon-prod-50x50@1x.png | Bin 0 -> 2836 bytes .../AppIcon-prod-50x50@2x.png | Bin 0 -> 5728 bytes .../AppIcon-prod-57x57@1x.png | Bin 0 -> 3187 bytes .../AppIcon-prod-57x57@2x.png | Bin 0 -> 6585 bytes .../AppIcon-prod-60x60@2x.png | Bin 0 -> 6876 bytes .../AppIcon-prod-60x60@3x.png | Bin 0 -> 10541 bytes .../AppIcon-prod-72x72@1x.png | Bin 0 -> 4049 bytes .../AppIcon-prod-72x72@2x.png | Bin 0 -> 8448 bytes .../AppIcon-prod-76x76@1x.png | Bin 0 -> 4374 bytes .../AppIcon-prod-76x76@2x.png | Bin 0 -> 8928 bytes .../AppIcon-prod-83.5x83.5@2x.png | Bin 0 -> 9477 bytes .../AppIcon-prod.appiconset/Contents.json | 1 + .../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 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + gamestore/ios/Runner/Info.plist | 49 + gamestore/ios/Runner/Runner-Bridging-Header.h | 1 + gamestore/ios/RunnerTests/RunnerTests.swift | 12 + gamestore/lib/app.dart | 54 + gamestore/lib/env/.gitignore | 2 + gamestore/lib/env/env.dart | 26 + .../features/auth/services/auth_service.dart | 37 + .../features/core/abstracts/app_setup.dart | 89 ++ .../core/abstracts/base_view_model.dart | 120 ++ .../core/abstracts/mwa_navigation.dart | 3 + .../core/abstracts/router/app_router.dart | 29 + .../core/abstracts/router/routes.dart | 31 + .../core/data/constants/const_app.dart | 2 + .../core/data/constants/const_colours.dart | 66 ++ .../core/data/constants/const_durations.dart | 12 + .../core/data/constants/const_media.dart | 86 ++ .../core/data/constants/const_text.dart | 58 + .../core/data/constants/const_validators.dart | 21 + .../core/data/constants/const_values.dart | 59 + .../data/constants/ui/const_box_shadows.dart | 50 + .../data/constants/ui/const_opacities.dart | 5 + .../core/data/constants/ui/const_sizes.dart | 10 + .../data/converters/timestamp_converters.dart | 32 + .../core/data/enums/date_formats.dart | 18 + .../core/data/enums/environment_type.dart | 20 + .../core/data/enums/form_field_type.dart | 11 + .../core/data/enums/supported_language.dart | 17 + .../data/enums/supported_phone_number.dart | 28 + .../core/data/enums/view_model_state.dart | 14 + .../data/extensions/context_extensions.dart | 16 + .../data/extensions/date_time_extensions.dart | 17 + .../data/extensions/future_extensions.dart | 7 + .../core/data/extensions/list_extensions.dart | 13 + .../core/data/extensions/map_extensions.dart | 5 + .../data/extensions/object_extensions.dart | 11 + .../data/extensions/response_extensions.dart | 10 + .../data/extensions/stream_extensions.dart | 41 + .../data/extensions/string_extensions.dart | 41 + .../formatters/decimal_length_limiting.dart | 67 ++ .../formatters/text_input_formatters.dart | 95 ++ .../whole_number_length_limiting.dart | 34 + .../core/data/typedefs/http_status_code.dart | 10 + .../lib/features/core/data/typedefs/json.dart | 2 + .../core/forms/form_field_config.dart | 25 + .../core/services/logging_service.dart | 98 ++ .../core/services/navigation/core_router.dart | 5 + .../core/services/navigation/home_router.dart | 10 + .../navigation/navigation_service.dart | 34 + .../features/core/utils/iterable_utils.dart | 23 + .../features/core/views/home/home_view.dart | 33 + .../core/views/home/home_view_model.dart | 37 + .../widgets/animations/animated_column.dart | 74 ++ .../widgets/animations/animated_enabled.dart | 35 + .../animations/custom_ticker_provider.dart | 89 ++ .../widgets/animations/dropdown_shrink.dart | 151 +++ .../animations/fade_in_fade_out_switcher.dart | 50 + .../core/widgets/animations/shrink.dart | 220 ++++ gamestore/lib/features/core/widgets/gap.dart | 268 +++++ .../lib/features/core/widgets/gs_app_bar.dart | 48 + .../core/widgets/platform_custom_form.dart | 83 ++ .../state/multi_value_listenable_builder.dart | 43 + .../widgets/state/view_model_builder.dart | 74 ++ .../core/widgets/state/view_model_widget.dart | 38 + .../lib/l10n/generated/intl/messages_all.dart | 63 ++ .../lib/l10n/generated/intl/messages_en.dart | 30 + gamestore/lib/l10n/generated/l10n.dart | 98 ++ gamestore/lib/l10n/intl_en.arb | 6 + gamestore/lib/locator.dart | 70 ++ gamestore/lib/main_dev.dart | 7 + gamestore/lib/main_prod.dart | 7 + gamestore/pubspec.yaml | 107 ++ gamestore/test/widget_test.dart | 29 + 208 files changed, 6258 insertions(+) create mode 100644 gamestore/.gitattributes create mode 100644 gamestore/.gitignore create mode 100644 gamestore/.idea/.gitignore create mode 100644 gamestore/.idea/gamestore.iml create mode 100644 gamestore/.idea/git_toolbox_prj.xml create mode 100644 gamestore/.idea/runConfigurations/Build APK.run.xml create mode 100644 gamestore/.idea/runConfigurations/Build IPA.run.xml create mode 100644 gamestore/.idea/runConfigurations/Dart_cleanup.xml create mode 100644 gamestore/.idea/runConfigurations/Debug launch Develop.run.xml create mode 100644 gamestore/.idea/runConfigurations/Debug launch Prod.run.xml create mode 100644 gamestore/.idea/runConfigurations/Profile launch Develop.run.xml create mode 100644 gamestore/.idea/runConfigurations/Release launch Develop.run.xml create mode 100644 gamestore/.idea/runConfigurations/Release launch Prod.run.xml create mode 100644 gamestore/.metadata create mode 100644 gamestore/README.md create mode 100644 gamestore/analysis_options.yaml create mode 100644 gamestore/android/.gitignore create mode 100644 gamestore/android/.idea/kotlinc.xml create mode 100644 gamestore/android/app/build.gradle create mode 100644 gamestore/android/app/src/develop/AndroidManifest.xml create mode 100644 gamestore/android/app/src/develop/res/mipmap-hdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/develop/res/mipmap-mdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/develop/res/mipmap-xhdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/develop/res/mipmap-xxhdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/develop/res/mipmap-xxxhdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/main/AndroidManifest.xml create mode 100644 gamestore/android/app/src/main/kotlin/com/aequoplay/gamestore/gamestore/MainActivity.kt create mode 100644 gamestore/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 gamestore/android/app/src/main/res/drawable/launch_background.xml create mode 100644 gamestore/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 gamestore/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 gamestore/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 gamestore/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 gamestore/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 gamestore/android/app/src/main/res/values-night/styles.xml create mode 100644 gamestore/android/app/src/main/res/values/styles.xml create mode 100644 gamestore/android/app/src/prod/AndroidManifest.xml create mode 100644 gamestore/android/app/src/prod/res/mipmap-hdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/prod/res/mipmap-mdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/prod/res/mipmap-xhdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/prod/res/mipmap-xxhdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/prod/res/mipmap-xxxhdpi/launcher_icon.png create mode 100644 gamestore/android/app/src/profile/AndroidManifest.xml create mode 100644 gamestore/android/build.gradle create mode 100644 gamestore/android/gradle.properties create mode 100644 gamestore/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 gamestore/android/settings.gradle create mode 100644 gamestore/assets/icons/.gitkeep create mode 100644 gamestore/assets/logos/.gitkeep create mode 100644 gamestore/assets/res/app_icon-dev.png create mode 100644 gamestore/assets/res/app_icon.png create mode 100644 gamestore/flavorizr.yaml create mode 100644 gamestore/flutter_launcher_icons-develop.yaml create mode 100644 gamestore/flutter_launcher_icons-prod.yaml create mode 100644 gamestore/flutter_native_splash.yaml create mode 100644 gamestore/ios/.gitignore create mode 100644 gamestore/ios/Flutter/AppFrameworkInfo.plist create mode 100644 gamestore/ios/Flutter/Debug.xcconfig create mode 100644 gamestore/ios/Flutter/Release.xcconfig create mode 100644 gamestore/ios/Podfile create mode 100644 gamestore/ios/Podfile.lock create mode 100644 gamestore/ios/Runner.xcodeproj/project.pbxproj create mode 100644 gamestore/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 gamestore/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/develop.xcscheme create mode 100644 gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme create mode 100644 gamestore/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 gamestore/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 gamestore/ios/Runner/AppDelegate.swift create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-1024x1024@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-20x20@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-20x20@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-20x20@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-40x40@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-40x40@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-40x40@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-50x50@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-50x50@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-57x57@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-57x57@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-60x60@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-60x60@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-72x72@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-72x72@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-76x76@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-76x76@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-83.5x83.5@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/Contents.json create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-50x50@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-57x57@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-76x76@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-83.5x83.5@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 gamestore/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 gamestore/ios/Runner/Base.lproj/Main.storyboard create mode 100644 gamestore/ios/Runner/Info.plist create mode 100644 gamestore/ios/Runner/Runner-Bridging-Header.h create mode 100644 gamestore/ios/RunnerTests/RunnerTests.swift create mode 100644 gamestore/lib/app.dart create mode 100644 gamestore/lib/env/.gitignore create mode 100644 gamestore/lib/env/env.dart create mode 100644 gamestore/lib/features/auth/services/auth_service.dart create mode 100644 gamestore/lib/features/core/abstracts/app_setup.dart create mode 100644 gamestore/lib/features/core/abstracts/base_view_model.dart create mode 100644 gamestore/lib/features/core/abstracts/mwa_navigation.dart create mode 100644 gamestore/lib/features/core/abstracts/router/app_router.dart create mode 100644 gamestore/lib/features/core/abstracts/router/routes.dart create mode 100644 gamestore/lib/features/core/data/constants/const_app.dart create mode 100644 gamestore/lib/features/core/data/constants/const_colours.dart create mode 100644 gamestore/lib/features/core/data/constants/const_durations.dart create mode 100644 gamestore/lib/features/core/data/constants/const_media.dart create mode 100644 gamestore/lib/features/core/data/constants/const_text.dart create mode 100644 gamestore/lib/features/core/data/constants/const_validators.dart create mode 100644 gamestore/lib/features/core/data/constants/const_values.dart create mode 100644 gamestore/lib/features/core/data/constants/ui/const_box_shadows.dart create mode 100644 gamestore/lib/features/core/data/constants/ui/const_opacities.dart create mode 100644 gamestore/lib/features/core/data/constants/ui/const_sizes.dart create mode 100644 gamestore/lib/features/core/data/converters/timestamp_converters.dart create mode 100644 gamestore/lib/features/core/data/enums/date_formats.dart create mode 100644 gamestore/lib/features/core/data/enums/environment_type.dart create mode 100644 gamestore/lib/features/core/data/enums/form_field_type.dart create mode 100644 gamestore/lib/features/core/data/enums/supported_language.dart create mode 100644 gamestore/lib/features/core/data/enums/supported_phone_number.dart create mode 100644 gamestore/lib/features/core/data/enums/view_model_state.dart create mode 100644 gamestore/lib/features/core/data/extensions/context_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/date_time_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/future_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/list_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/map_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/object_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/response_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/stream_extensions.dart create mode 100644 gamestore/lib/features/core/data/extensions/string_extensions.dart create mode 100644 gamestore/lib/features/core/data/formatters/decimal_length_limiting.dart create mode 100644 gamestore/lib/features/core/data/formatters/text_input_formatters.dart create mode 100644 gamestore/lib/features/core/data/formatters/whole_number_length_limiting.dart create mode 100644 gamestore/lib/features/core/data/typedefs/http_status_code.dart create mode 100644 gamestore/lib/features/core/data/typedefs/json.dart create mode 100644 gamestore/lib/features/core/forms/form_field_config.dart create mode 100644 gamestore/lib/features/core/services/logging_service.dart create mode 100644 gamestore/lib/features/core/services/navigation/core_router.dart create mode 100644 gamestore/lib/features/core/services/navigation/home_router.dart create mode 100644 gamestore/lib/features/core/services/navigation/navigation_service.dart create mode 100644 gamestore/lib/features/core/utils/iterable_utils.dart create mode 100644 gamestore/lib/features/core/views/home/home_view.dart create mode 100644 gamestore/lib/features/core/views/home/home_view_model.dart create mode 100644 gamestore/lib/features/core/widgets/animations/animated_column.dart create mode 100644 gamestore/lib/features/core/widgets/animations/animated_enabled.dart create mode 100644 gamestore/lib/features/core/widgets/animations/custom_ticker_provider.dart create mode 100644 gamestore/lib/features/core/widgets/animations/dropdown_shrink.dart create mode 100644 gamestore/lib/features/core/widgets/animations/fade_in_fade_out_switcher.dart create mode 100644 gamestore/lib/features/core/widgets/animations/shrink.dart create mode 100644 gamestore/lib/features/core/widgets/gap.dart create mode 100644 gamestore/lib/features/core/widgets/gs_app_bar.dart create mode 100644 gamestore/lib/features/core/widgets/platform_custom_form.dart create mode 100644 gamestore/lib/features/core/widgets/state/multi_value_listenable_builder.dart create mode 100644 gamestore/lib/features/core/widgets/state/view_model_builder.dart create mode 100644 gamestore/lib/features/core/widgets/state/view_model_widget.dart create mode 100644 gamestore/lib/l10n/generated/intl/messages_all.dart create mode 100644 gamestore/lib/l10n/generated/intl/messages_en.dart create mode 100644 gamestore/lib/l10n/generated/l10n.dart create mode 100644 gamestore/lib/l10n/intl_en.arb create mode 100644 gamestore/lib/locator.dart create mode 100644 gamestore/lib/main_dev.dart create mode 100644 gamestore/lib/main_prod.dart create mode 100644 gamestore/pubspec.yaml create mode 100644 gamestore/test/widget_test.dart diff --git a/gamestore/.gitattributes b/gamestore/.gitattributes new file mode 100644 index 0000000..252a94f --- /dev/null +++ b/gamestore/.gitattributes @@ -0,0 +1,36 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Always perform LF normalization +*.dart text +*.gradle text +*.html text +*.java text +*.json text +*.md text +*.py text +*.sh text +*.txt text +*.xml text +*.yaml text + +# Make sure that these Windows files always have CRLF line endings at checkout +*.bat text eol=crlf +*.ps1 text eol=crlf +*.rc text eol=crlf +*.sln text eol=crlf +*.props text eol=crlf +*.vcxproj text eol=crlf +*.vcxproj.filters text eol=crlf +# Including templates +*.sln.tmpl text eol=crlf +*.props.tmpl text eol=crlf +*.vcxproj.tmpl text eol=crlf + +# Never perform LF normalization +*.ico binary +*.jar binary +*.png binary +*.zip binary +*.ttf binary +*.otf binary diff --git a/gamestore/.gitignore b/gamestore/.gitignore new file mode 100644 index 0000000..8eeb02a --- /dev/null +++ b/gamestore/.gitignore @@ -0,0 +1,425 @@ +# Custom +.DS_Store + +# Created by https://www.toptal.com/developers/gitignore/api/androidstudio,visualstudiocode,flutter,dart,android,kotlin,xcode,swift,objective-c +# Edit at https://www.toptal.com/developers/gitignore?templates=androidstudio,visualstudiocode,flutter,dart,android,kotlin,xcode,swift,objective-c + +### Android ### +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof + +### Android Patch ### +gen-external-apklibs + +# Replacement of .externalNativeBuild directories introduced +# with Android Studio 3.5. + +### Dart ### +# See https://www.dartlang.org/guides/libraries/private-files + +# Files and directories created by pub +.dart_tool/ +.packages +# If you're building an application, you may want to check-in your pubspec.lock +pubspec.lock + +# Directory created by dartdoc +# If you don't generate documentation locally you can remove this line. +doc/api/ + +# dotenv environment variables file +.env* + +# Avoid committing generated Javascript files: +*.dart.js +*.info.json # Produced by the --dump-info flag. +*.js # When generated by dart2js. Don't specify *.js if your + # project includes source files written in JavaScript. +*.js_ +*.js.deps +*.js.map + +.flutter-plugins +.flutter-plugins-dependencies + +### Dart Patch ### +# dotenv environment variables file +.env + +### Flutter ### +# Flutter/Dart/Pub related +**/doc/api/ +.fvm/flutter_sdk +.pub-cache/ +.pub/ +coverage/ +lib/generated_plugin_registrant.dart +# For library packages, don’t commit the pubspec.lock file. +# Regenerating the pubspec.lock file lets you test your package against the latest compatible versions of its dependencies. +# See https://dart.dev/guides/libraries/private-files#pubspeclock +#pubspec.lock + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/key.properties +**/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/.last_build_id +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Flutter.podspec +**/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 + +### Kotlin ### +# Compiled class file +*.class + +# Log file + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### Objective-C ### +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ + +### Objective-C Patch ### + +### Swift ### +# Xcode +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + + + + + + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +# Package.resolved +# *.xcodeproj +# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata +# hence it is not needed unless you have added a package configuration file to your project +# .swiftpm + +.build/ + +# CocoaPods +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# Pods/ +# Add this line if you want to avoid checking in source code from the Xcode workspace +# *.xcworkspace + +# Carthage +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + + +# Accio dependency management +Dependencies/ +.accio/ + +# fastlane +# It is recommended to not store the screenshots in the git repo. +# Instead, use fastlane to re-generate the screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/#source-control + + +# Code Injection +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Xcode ### + +## Xcode 8 and earlier + +### Xcode Patch ### +*.xcodeproj/* +!*.xcodeproj/project.pbxproj +!*.xcodeproj/xcshareddata/ +!*.xcodeproj/project.xcworkspace/ +!*.xcworkspace/contents.xcworkspacedata +/*.gcno +**/xcshareddata/WorkspaceSettings.xcsettings + +### AndroidStudio ### +# Covers files to be ignored for android development using Android Studio. + +# Built application files +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle + +# Signing files +.signing/ + +# Local configuration file (sdk path, etc) + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files + +# Android Studio +/*/build/ +/*/local.properties +/*/out +/*/*/build +/*/*/production +.navigation/ +*.ipr +*~ +*.swp + +# Keystore files + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Android Patch + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# NDK +obj/ + +# IntelliJ IDEA +*.iws +/out/ + +# User-specific configurations +.idea/caches/ +.idea/libraries/ +.idea/shelf/ +.idea/workspace.xml +.idea/tasks.xml +.idea/.name +.idea/compiler.xml +.idea/copyright/profiles_settings.xml +.idea/encodings.xml +.idea/misc.xml +.idea/modules.xml +.idea/scopes/scope_settings.xml +.idea/dictionaries +.idea/vcs.xml +.idea/jsLibraryMappings.xml +.idea/datasources.xml +.idea/dataSources.ids +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml +.idea/assetWizardSettings.xml +.idea/gradle.xml +.idea/jarRepositories.xml +.idea/navEditor.xml + +# Legacy Eclipse project files +.classpath +.project +.cproject +.settings/ + +# Mobile Tools for Java (J2ME) + +# Package Files # + +# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml) + +## Plugin-specific files: + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Mongo Explorer plugin +.idea/mongoSettings.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### AndroidStudio Patch ### + +!/gradle/wrapper/gradle-wrapper.jar + +# End of https://www.toptal.com/developers/gitignore/api/androidstudio,visualstudiocode,flutter,dart,android,kotlin,xcode,swift,objective-c \ No newline at end of file diff --git a/gamestore/.idea/.gitignore b/gamestore/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/gamestore/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/gamestore/.idea/gamestore.iml b/gamestore/.idea/gamestore.iml new file mode 100644 index 0000000..c898a44 --- /dev/null +++ b/gamestore/.idea/gamestore.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gamestore/.idea/git_toolbox_prj.xml b/gamestore/.idea/git_toolbox_prj.xml new file mode 100644 index 0000000..02b915b --- /dev/null +++ b/gamestore/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Build APK.run.xml b/gamestore/.idea/runConfigurations/Build APK.run.xml new file mode 100644 index 0000000..9ca18e0 --- /dev/null +++ b/gamestore/.idea/runConfigurations/Build APK.run.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Build IPA.run.xml b/gamestore/.idea/runConfigurations/Build IPA.run.xml new file mode 100644 index 0000000..8b84e6f --- /dev/null +++ b/gamestore/.idea/runConfigurations/Build IPA.run.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Dart_cleanup.xml b/gamestore/.idea/runConfigurations/Dart_cleanup.xml new file mode 100644 index 0000000..889d64a --- /dev/null +++ b/gamestore/.idea/runConfigurations/Dart_cleanup.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Debug launch Develop.run.xml b/gamestore/.idea/runConfigurations/Debug launch Develop.run.xml new file mode 100644 index 0000000..7d06409 --- /dev/null +++ b/gamestore/.idea/runConfigurations/Debug launch Develop.run.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Debug launch Prod.run.xml b/gamestore/.idea/runConfigurations/Debug launch Prod.run.xml new file mode 100644 index 0000000..7ae1878 --- /dev/null +++ b/gamestore/.idea/runConfigurations/Debug launch Prod.run.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Profile launch Develop.run.xml b/gamestore/.idea/runConfigurations/Profile launch Develop.run.xml new file mode 100644 index 0000000..d00b0a0 --- /dev/null +++ b/gamestore/.idea/runConfigurations/Profile launch Develop.run.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Release launch Develop.run.xml b/gamestore/.idea/runConfigurations/Release launch Develop.run.xml new file mode 100644 index 0000000..d156875 --- /dev/null +++ b/gamestore/.idea/runConfigurations/Release launch Develop.run.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/gamestore/.idea/runConfigurations/Release launch Prod.run.xml b/gamestore/.idea/runConfigurations/Release launch Prod.run.xml new file mode 100644 index 0000000..6d8476f --- /dev/null +++ b/gamestore/.idea/runConfigurations/Release launch Prod.run.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/gamestore/.metadata b/gamestore/.metadata new file mode 100644 index 0000000..6c07a80 --- /dev/null +++ b/gamestore/.metadata @@ -0,0 +1,30 @@ +# 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: "efbf63d9c66b9f6ec30e9ad4611189aa80003d31" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31 + base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31 + - platform: ios + create_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31 + base_revision: efbf63d9c66b9f6ec30e9ad4611189aa80003d31 + + # 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/gamestore/README.md b/gamestore/README.md new file mode 100644 index 0000000..c04a143 --- /dev/null +++ b/gamestore/README.md @@ -0,0 +1,16 @@ +# gamestore + +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/gamestore/analysis_options.yaml b/gamestore/analysis_options.yaml new file mode 100644 index 0000000..6783e42 --- /dev/null +++ b/gamestore/analysis_options.yaml @@ -0,0 +1,219 @@ +# include: package:flutter_lints/flutter.yaml +include: package:very_good_analysis/analysis_options.yaml + +analyzer: + + errors: + avoid_dynamic_calls: error + missing_required_param: error + missing_return: error + # allow having TODOs in the code + todo: info + missing_enum_constant_in_switch: error + implicit_dynamic_type: info + implicit_dynamic_map_literal: info + implicit_dynamic_list_literal: info + implicit_dynamic_method: warning + implicit_dynamic_function: warning + invalid_use_of_protected_member: error + unused_local_variable: warning + deprecated_member_use: warning + unused_element: warning + unused_field: warning + dead_code: error + must_call_super: error + + # linter errors + unnecessary_statements: error + recursive_getters: error + unnecessary_new: error + unnecessary_getters_setters: error + use_function_type_syntax_for_parameters: error + no_duplicate_case_values: error + no_adjacent_strings_in_list: error + non_constant_identifier_names: error + constant_identifier_names: error + avoid_returning_this: error + prefer_const_constructors_in_immutables: error + prefer_const_literals_to_create_immutables: error + avoid_equals_and_hash_code_on_mutable_classes: error + camel_case_types: error + camel_case_extensions: error + library_names: error + file_names: error + library_prefixes: error + + # linter warnings + avoid_print: warning + unnecessary_lambdas: warning + use_key_in_widget_constructors: warning + prefer_final_fields: warning + prefer_final_locals: warning + prefer_final_in_for_each: warning + prefer_const_constructors: warning + unnecessary_const: warning + unnecessary_brace_in_string_interps: warning + + # Ignore analyzer hints for updating pubspecs when using Future or + # Stream and not importing dart:async + # Please see https://github.com/flutter/flutter/pull/24528 for details. + sdk_version_async_exported_from_core: ignore + exclude: + - "bin/cache/**" + - "**/*.chopper.dart" + - "**/generated/**" + - "**/*.g.dart" + language: + strict-casts: true + strict-raw-types: true + +linter: + rules: + # these rules are documented on and in the same order as + # the Dart Lint rules page to make maintenance easier + # https://github.com/dart-lang/linter/blob/master/example/all.yaml + - always_declare_return_types + # always_put_control_body_on_new_line + # always_put_required_named_parameters_first + - always_require_non_null_named_parameters + - avoid_dynamic_calls + # - always_specify_types + - annotate_overrides + - avoid_print + # - avoid_annotating_with_dynamic # conflicts with always_specify_types + - avoid_returning_this + - avoid_init_to_null + - avoid_bool_literals_in_conditional_expressions + # - avoid_catches_without_on_clauses # we do this commonly + # - avoid_catching_errors # we do this commonly + # - avoid_classes_with_only_static_members + # - avoid_double_and_int_checks # only useful when targeting JS runtime + - avoid_empty_else + - avoid_field_initializers_in_const_classes + - avoid_function_literals_in_foreach_calls + # - avoid_js_rounded_ints # only useful when targeting JS runtime + - avoid_null_checks_in_equality_operators + # - avoid_positional_boolean_parameters + # - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356) + - avoid_relative_lib_imports + - avoid_renaming_method_parameters + - avoid_return_types_on_setters + # - avoid_returning_null # there are plenty of valid reasons to return null + # - avoid_returning_null_for_future # not yet tested + - avoid_returning_null_for_void + # - avoid_returning_this # there are plenty of valid reasons to return this + # - avoid_setters_without_getters # not yet tested + # - avoid_shadowing_type_parameters # not yet tested + # - avoid_single_cascade_in_expression_statements # not yet tested + - avoid_slow_async_io + - avoid_types_as_parameter_names + # - avoid_types_on_closure_parameters # conflicts with always_specify_types + - avoid_unused_constructor_parameters + - avoid_void_async + - await_only_futures + - camel_case_types + - cancel_subscriptions + # - cascade_invocations # not yet tested + # - close_sinks # not reliable enough + # - comment_references # blocked on https://github.com/flutter/flutter/issues/20765 + # - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204 + - control_flow_in_finally + # - curly_braces_in_flow_control_structures # not yet tested + # - diagnostic_describe_all_properties # not yet tested + - directives_ordering + - empty_catches + - empty_constructor_bodies + - empty_statements + # - file_names # not yet tested + - hash_and_equals + - implementation_imports + # - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811 + - collection_methods_unrelated_type + # - join_return_with_assignment # not yet tested + - library_names + - library_prefixes + # - lines_longer_than_80_chars # not yet tested + # - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181 + - no_adjacent_strings_in_list + - no_duplicate_case_values + - non_constant_identifier_names + # - null_closures # not yet tested + # - omit_local_variable_types # opposite of always_specify_types + # - one_member_abstracts # too many false positives + # - only_throw_errors # https://github.com/flutter/flutter/issues/5792 + - overridden_fields + - package_api_docs + - package_names + - package_prefixed_library_names + # - parameter_assignments # we do this commonly + - prefer_adjacent_string_concatenation + - prefer_asserts_in_initializer_lists + # - prefer_asserts_with_message # not yet tested + - prefer_collection_literals + - prefer_conditional_assignment + - prefer_const_constructors + - prefer_const_constructors_in_immutables + - prefer_const_declarations + - prefer_const_literals_to_create_immutables + # - prefer_constructors_over_static_methods # not yet tested + - prefer_contains + # - prefer_double_quotes # opposite of prefer_single_quotes + # - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods + - prefer_final_fields + # - prefer_final_in_for_each # not yet tested + - prefer_final_locals + # - prefer_for_elements_to_map_fromIterable # not yet tested + - prefer_foreach + # - prefer_function_declarations_over_variables # not yet tested + - prefer_generic_function_type_aliases + # - prefer_if_elements_to_conditional_expressions # not yet tested + - prefer_if_null_operators + - prefer_initializing_formals + - prefer_inlined_adds + # - prefer_int_literals # not yet tested + # - prefer_interpolation_to_compose_strings # not yet tested + - prefer_is_empty + - prefer_is_not_empty + - prefer_iterable_whereType + # - prefer_mixin # https://github.com/dart-lang/language/issues/32 + # - prefer_null_aware_operators # disable until NNBD, see https://github.com/flutter/flutter/pull/32711#issuecomment-492930932 + - prefer_single_quotes + - prefer_spread_collections + - prefer_typing_uninitialized_variables + - prefer_void_to_null + # - provide_deprecation_message # not yet tested + # - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml + - recursive_getters + - slash_for_doc_comments + # - sort_child_properties_last # not yet tested + # - sort_constructors_first + # - sort_pub_dependencies + - sort_unnamed_constructors_first + - test_types_in_equals + - throw_in_finally + # - type_annotate_public_apis # subset of always_specify_types + - type_init_formals + - unawaited_futures + # - unnecessary_await_in_return # not yet tested + - unnecessary_brace_in_string_interps + - unnecessary_const + - unnecessary_getters_setters + # - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498 + - unnecessary_new + - unnecessary_null_aware_assignments + - unnecessary_null_in_if_null_operators + - unnecessary_overrides + - unnecessary_parenthesis + - unnecessary_statements + - unnecessary_this + - unrelated_type_equality_checks + # - unsafe_html # not yet tested + - use_full_hex_values_for_flutter_colors + # - use_function_type_syntax_for_parameters # not yet tested + - use_rethrow_when_possible + - use_key_in_widget_constructors + # - use_setters_to_change_properties # not yet tested + # - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182 + # - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review + - valid_regexps + # - void_checks # not yet tested diff --git a/gamestore/android/.gitignore b/gamestore/android/.gitignore new file mode 100644 index 0000000..66bda08 --- /dev/null +++ b/gamestore/android/.gitignore @@ -0,0 +1,39 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks + +# User-specific configurations +.idea/caches/ +.idea/libraries/ +.idea/shelf/ +.idea/workspace.xml +.idea/tasks.xml +.idea/.name +.idea/compiler.xml +.idea/copyright/profiles_settings.xml +.idea/encodings.xml +.idea/misc.xml +.idea/modules.xml +.idea/scopes/scope_settings.xml +.idea/dictionaries +.idea/vcs.xml +.idea/jsLibraryMappings.xml +.idea/datasources.xml +.idea/dataSources.ids +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml +.idea/assetWizardSettings.xml +.idea/gradle.xml +.idea/jarRepositories.xml +.idea/navEditor.xml \ No newline at end of file diff --git a/gamestore/android/.idea/kotlinc.xml b/gamestore/android/.idea/kotlinc.xml new file mode 100644 index 0000000..b1077fb --- /dev/null +++ b/gamestore/android/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/gamestore/android/app/build.gradle b/gamestore/android/app/build.gradle new file mode 100644 index 0000000..e0d5309 --- /dev/null +++ b/gamestore/android/app/build.gradle @@ -0,0 +1,91 @@ +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 { + + // ----- BEGIN flavorDimensions (autogenerated by flutter_flavorizr) ----- + flavorDimensions "flavor-type" + + productFlavors { + develop { + dimension "flavor-type" + applicationIdSuffix ".dev" + resValue "string", "app_name", "Gamestore dev" + versionNameSuffix ".dev" + } + prod { + dimension "flavor-type" + resValue "string", "app_name", "Gamestore" + } + } + + // ----- END flavorDimensions (autogenerated by flutter_flavorizr) ----- + namespace "com.aequoplay.gamestore" + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.aequoplay.gamestore" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + 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" +} diff --git a/gamestore/android/app/src/develop/AndroidManifest.xml b/gamestore/android/app/src/develop/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/gamestore/android/app/src/develop/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/gamestore/android/app/src/develop/res/mipmap-hdpi/launcher_icon.png b/gamestore/android/app/src/develop/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..beecbd265a75e78d87c24ebf8fce7c7abdaa4e51 GIT binary patch literal 3845 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 Hu0mjfH9k>r literal 0 HcmV?d00001 diff --git a/gamestore/android/app/src/develop/res/mipmap-mdpi/launcher_icon.png b/gamestore/android/app/src/develop/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a0121fb7d4ddfe5e10129941b1cbe73a93cbbd2d GIT binary patch literal 2579 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 literal 0 HcmV?d00001 diff --git a/gamestore/android/app/src/develop/res/mipmap-xhdpi/launcher_icon.png b/gamestore/android/app/src/develop/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e8aea96c4e1cca673a0a3c5eb2422e9d28a25321 GIT binary patch literal 4799 zcmV;w5%ZB?fmUpoEX>+V4d0olx{U15n^U zJaG6oH4TmTfF#n7YI}izAASNL6bu5F(@}Kdl=;aoPM>|UP@i9U-@MuD3iAilq%rAn z)o%>&dVS!~vCo#m&nEa&oyajL*j|qtc;LtH^MfuL_1sNJ6g0wng%xLd6IH)30CK(X z^>;paz0+iw%Cs-a=_u%KmkaoOwD(^3q;X^aG;`|Ymj@N-Yw@KvIrVu1;0<=zmN(u$ z7G+D^QoWAn*MvCKoG>1P!{U51|0w5^prjOKiUfy<#hY`eLi5bTEaJ2 zI;mC4^DCF!w`_P>>1mwlWUF2^pwn!T!#aCTj!t`3AmCrWL!z9YNbtR053rg|OqU5w z8uz2;AGmkH(=gZ5yOe}n9!sI|%`uFjn`eaZMSqdtpZ=OAFp`F@!5EoP=mh3=Sj>(B0Hlmit*(`y<{}t0Yg0K;VuoDVV-$Nnqzk2$K$EIpE>UK8ig+VWG>9p*G zM&~o^8dAxnzsS?6f1T_#GG+kE`82^#SWbsMYyy>pLSfDNM^;p@4ZhKAooh5%cfmyw z!>-}r4@e>SNEtC8iXFDW_rV&E+vTL(UNo@a)Ag%XEL15KMmE=JZ0p!)b-12`i# z5qADPm7E_{+6`d9PQvP{>su(d=Va+Vdusif+h9${!{$0L*WV9=|C>aTlqz<}N~;05 zu!DrEoPK}&S|r4dVfBg!7O)Mz$LmwKTdXf7uq!LA+5`kO^|73V2+Ojz?EMxR_56 zSb8*_ZqG#cC7{~Q<8sf#;6I1sT2XoZesR0mb`KT<(t#Z+ArnLrnV`RDob9y`?&@2NmHt3*9Q@hL+JLL|4JFlAYnQP-PYRNLe)`-`p#hJu zJrN2D(>_kOcf3N%&VX>v|1S7QYSsn}Eh+vsKU@2^T0_%Hfsm=&1g~5!H)G(iUCZMg z&F1(hc1XcT;$gW5jJ$E^N9Vr!dZkRR03xvj$0-w1VSe5*9OvQl35Ul=|E$LC@s3aR z{4v-e%Z9}Og(h)Q(ZNrvUPlXTOlWR5Jqv^X%S88wH{!+L)HRKT zrQncMEIcF=i;fEg{2mW}=&(alNG=govNFKq^@7c>??4<@#@n7|9C4rtTNED$>fqU?ss^6@`96kU&U{mHZE%in&#@@2EdO522w zDg!wBD_Tgzgk-Ukr1*e2_yD5kMcAl2ftKSM5b4|5TGP<@(3RTypY8sz@|;GcJP$XC zAoG6=%_&YcWvSrE>*;#HB@hakc11Y)GsIEL*qh1@HC;G75gJk+9e9O$K!wc4iT3Q< zzt>u|<4nNZgc?njA?5S$8!~0V-_b^l*hyI&4rteBY3C8V?>hCm89>#g3_So!wFX#B zos45JnUn~QP|hchdPB<`rJA-R@IU~J23JG@vn$$SRepQqJv6-WPU-OJ<6zEznpMJC z3br+B3v+c9um)94UVq&HrY>cK4~0qv%+Q1o&A6OI)P*Bn+<^MLUc1#|lEtov>wtpN zgb)}3>VSgNV{|lerKoGk4J_szNeq3t{0-da=Na96xzVsV6WJ_^2$V~cy8kl!n8`Nw9EHTixZ z(U-AGbFzZGuT{%sFKd;uS0Q%d&K4n(eUgO%M_!3UTrC!fd>x&p8#o-USSS+lP~Xm~ zrT5;Wl*_#Twtn@3U;pmacjK8r#!&=2@p67Qg?t{+_Q_vB_S9vWFd@k2@v77c>1!H= zY$qfKEiMQc{4L2oOi2Ytd_G~EHhID`v!<2r)M+%~5mq+4UHHL)!)xjc%~Mw|TeJWL zAFUS(1fg}SmM{6Q7ygiI?C6*fdoENGl&~a>5;idg|GGjUU_7=H9n6by5hn62NmkC zk=M&*GS89)b6#}1+%HPR-D^22rNa5kC)Uo`w0YYbu_b|kIe#Rl24W|<`PZl$0H z!^@V^1)oV|9JP0}Pbl&=!Rt7H*9U7+e5SFp6iOaPc9ipR2OsHrH58Qu_;oil0rf7X zh$B;YZf;Z~%1YlVDlA}~XjBp&U%7bU_GcfzBn>!ZXj(=?iw)>=WI&YSxPnA+ln(5W z)h+dGa1;uLKrq;S#>!2@hy8hHwS&T3dCDb$2}cp^OiK1C zSTgF7eNw>@8ntXOclMYv1gn-!6o(`&v0TxkW`RsFz>-kF!UP%|MX^(t+KCfW-13_Y zj!^Keae|NJa=B^edL^UD_pW;0?Xc@FojCe%x9dX_aN{W5*ddED#fjhu&C!jQ^P~Ez z`f_>s#Bu+NC82zQuVU3xKSj&2Cg8+T?zD%ROUF!3D|X1D%`$X2qQVYYXD?h_QGKOm zYiUXGWjx6RVA$-XHLa~}z*Kjs+j?9$YB{`3suOdx($UlF*r%3RjAb?+j_9yMR+d(C zA}34NfF-3+4b9g!He73cu6WiWU^rF@+Ae9|^X8k8FH&)jU{*#4@1uN`1qN*IJDm&@zY11BK;t!|P*Bz=0z`>dH>H2?=Kt zgd?-n`rupdefSOxKGoZ)!a~7+YW#12}WO(PUlSZn3?D zCTG~Kmg_TQPzh}6FoEE(X@JiY0-xcVZpZZ(93`EyITbVBgu!juw&N{SyXj^E%=t%Q z@bAJE{N{Gke@35Vp)L>fEFd~V#?aP*=5?VBfKxU({4_k)g#Lh|l(I(ogdcxwwpf?L zlCT3rURZ&G53y4LgP&mkFuhRDk9~}YCTGYLN^t(0OI^VyZ!4V$2(JtHTkE>5@9Q{9 zxoo16fW8rqAa*{D%h8k;&U`g1Y z>Pe9LgaNFu6H!rqE|8L*l0_S9ArJ}}FP`j{-7(_mL-;+1jS0PO01oVwl@x<)P4t0K zw@0Jy84s+jIQEy{ZZKTBa0htN6N`OwS3jZcI*5J0bp@WO= z(yCQeb2t2V)koW2cqJWO*?=XEdd&bF*dYfWDcV?b*sX0tiw8|s$fV(3*mQSg0~R>y z6$7ZSgH&BpmoRq7!H)_y)*LYB{{-HQdvt-%SpLKshsBiFmvEGE1E{crWOq8jH6#7o z#$vHU7OV(0N1kMT8RyV&Nq{(--j03CK>HDu60fc~3BebaYuAY+3aD)ki{rQHA~ z?8FN7corAv0m0*eT0#SWGF0*=yZKqA|O(-wl}( zM@eIcO1+7rv>A{LcBn)V_>{3jr3~Td<49L_w~~++1Cqr~GGdDzDrEpiig-A}ZU7tX zBp__qp;88Lv`eDNnU;Ukq~8h`^kRKkrNDrEpiiVKym{hbg>rskB6{u-MBEgj~S zomTrRxXwpby0Al~bmJ)K_hp^myJh#Zb*~J^Vt~`_DNa}LK?blxrF7!R=d_hIoH~3v z76Tx5HUgUWZl+w;UK)7YU>I&tLaXc^7g0GHQS z3cql_y|CA?L#1@!$YpNRur|Q!^)dZ_m88_$*r8H7a6|~jE*$p&R{u1CtiFOBD&fYF zM3Y;`+5nMIfM!9WvFfxVrV~(~!w!|0aFm~5NzfFQ9${^OSST=XIh;$uP$=b>F!WXI zP>B&o*K9zm5(Bkdh+fzc_ZmR(q?p(?p_J8TF1HkD)hI(Dc;ha)t1rQPHL zon{x1Nd!P5A^<^jJ?-=Pg23VOfs*kvpI7D;HDED7qmXSi*&G`}p%CN0oQ+Yx!48!o zILd-JnisnbO`Enlyx|X71w%)?H|d_0&!S~41_=0sS)Z+`Xl&~^0NrPNX&n;G`34yL z`TYeuREpy0i@iJ7o;tYa8NbgL_nB!#{^66R|IgH=k39{K3(xVw))yp~h|dkm%f8vr z+P)9+jrL9B1dscF19P+P6bksv<4^j5P%tOVU-tXqHqC@Ka@h3Yn--p?Jv;B*4`raIPH4)*SG5mN+{nSg#CE{46H9#t9luI zJYJvH7YP3=@{oWanjxwZevwgsmt2?Yk^}H9(|&1vCX5gx1m6$Lq)WX%I{KeoKN!%< Z`hVZ&6sazMx&r_J002ovPDHLkV1jB0K-mBQ literal 0 HcmV?d00001 diff --git a/gamestore/android/app/src/develop/res/mipmap-xxhdpi/launcher_icon.png b/gamestore/android/app/src/develop/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..719b25746bb5989dd361a397f00b223f484e0f84 GIT binary patch literal 7130 zcmV<08ztn4P)RCodHoe6kTRocf-mL^TpByG9_ zEiG+nSqfzp1V?m4HW7;Kiy$a412ZE6B7WaDI;g1QIO@#Eh~JEZ;tI+lf@M@>Ri-GQ zECr!hp!=SrNwepBPn+L_sM6P((o~0#HOjDFP4+x?Fxu2rp9DqF}S7CMD`)1 z06Kl{LQd(Wviq)8R*$KzZyW`?5-FS}avqmhR(}09*cKly`W<@r5wOMV*ZpWJ)d1n3v0s-C< zw(Z*U(YXsht$S?w;#Yz#pQLVifS`|)`_A^=+u`lNV6KC~uvpB4=Ypw2D0IsL)Mhk_wtZUsTWGGHf{!Yu*TF8+4voo(>^2*%bCVMjk4zkU z*DE824%!_fli8WpA(Xl$0m9+<>s#J`7do@EnO*}she6+p+6;Qy=R%XEnQ+hDkIpW- zZwu4%`J!76Ab=<4jjbPT1$d@0IUj>#Y%{dO!(b$XwQpYUcZw#Bdpa+t*L5c4^G&xD zK$pv}sWxr-;7fQrl*#$HW31J*&~B=*1VZ8Ul}i@R9X4pdQ6^>cRksX408ji|AMV(L z7{G&_rVU)DjhX8>`sMfj`>z)-Sf_}MZKZoM-*rm>RC4-EpAUEK+Xrtm>7I+-MyG9o z2+KmdT9tFdG5_>}g^VWKV%5QOO|OyR*1mZrIpiR+;B?%n>qdd1S|>Nu5- z_Q_$SumlJ?!sz=m=O&%KaA_*)xRF`YKRAl@jQyQ3*Nk`x~-KrZ}w%P3VQB2N{iI#2#cwS_y zK4Ae6b{-55G*eGdJcSWFI8?{CBT<2-C6q&{3R9b!hF%WwR8qaw|vGx}ocJjemx|%cD%s z$M9sPCH;!cI$`k|AO_CENI24JZKVfK-@M#C^QIRq;2IvI$sBjJreQNQSu+`4f)nR) ziMIgZXbX3k1NC{>5WcTvrI9H7#qGDf@bLWE>p84ayC8Csm)F$qwc8!HGrWYW!^~Qr z$5Xrn$Qi0{gQ$wp4Np44`5roV)JF^*{C5)YSZy{jIM1iSz=K0|wxTUx;vGOP=OF

KM;2n2$f<%{OyXp6{wEpVTO@RGyiT(*;hR1|W6 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 literal 0 HcmV?d00001 diff --git a/gamestore/android/app/src/develop/res/mipmap-xxxhdpi/launcher_icon.png b/gamestore/android/app/src/develop/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..465b37fa3a5d8918f531f5525e43dbef5f21b76f GIT binary patch literal 8600 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 literal 0 HcmV?d00001 diff --git a/gamestore/android/app/src/main/AndroidManifest.xml b/gamestore/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..75dc595 --- /dev/null +++ b/gamestore/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/gamestore/android/app/src/main/kotlin/com/aequoplay/gamestore/gamestore/MainActivity.kt b/gamestore/android/app/src/main/kotlin/com/aequoplay/gamestore/gamestore/MainActivity.kt new file mode 100644 index 0000000..d918832 --- /dev/null +++ b/gamestore/android/app/src/main/kotlin/com/aequoplay/gamestore/gamestore/MainActivity.kt @@ -0,0 +1,6 @@ +package com.aequoplay.gamestore + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/gamestore/android/app/src/main/res/drawable-v21/launch_background.xml b/gamestore/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/gamestore/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/gamestore/android/app/src/main/res/drawable/launch_background.xml b/gamestore/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/gamestore/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/gamestore/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/gamestore/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/gamestore/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/gamestore/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/gamestore/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/gamestore/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/gamestore/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/gamestore/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/gamestore/android/app/src/main/res/values-night/styles.xml b/gamestore/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/gamestore/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/gamestore/android/app/src/main/res/values/styles.xml b/gamestore/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/gamestore/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/gamestore/android/app/src/prod/AndroidManifest.xml b/gamestore/android/app/src/prod/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/gamestore/android/app/src/prod/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/gamestore/android/app/src/prod/res/mipmap-hdpi/launcher_icon.png b/gamestore/android/app/src/prod/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..057fdb90f205d370edd9424543b8fd1ae34c1805 GIT binary patch literal 4763 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 JPDHLkV1ke@2VVdH literal 0 HcmV?d00001 diff --git a/gamestore/android/app/src/prod/res/mipmap-xhdpi/launcher_icon.png b/gamestore/android/app/src/prod/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2f886eec1d371ba5a982fd40ac2da8833fdd2ecc GIT binary patch literal 6410 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 Yf9wl{tOBM5ssI2007*qoM6N<$g4lK~NdN!< literal 0 HcmV?d00001 diff --git a/gamestore/android/app/src/prod/res/mipmap-xxhdpi/launcher_icon.png b/gamestore/android/app/src/prod/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7fabff51a2b61d6c990bbaaf9b342820db9088b5 GIT binary patch literal 9935 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 + + + diff --git a/gamestore/android/build.gradle b/gamestore/android/build.gradle new file mode 100644 index 0000000..bf1ce3f --- /dev/null +++ b/gamestore/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:8.1.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/gamestore/android/gradle.properties b/gamestore/android/gradle.properties new file mode 100644 index 0000000..b9a9a24 --- /dev/null +++ b/gamestore/android/gradle.properties @@ -0,0 +1,6 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/gamestore/android/gradle/wrapper/gradle-wrapper.properties b/gamestore/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..8bc9958 --- /dev/null +++ b/gamestore/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.0-all.zip diff --git a/gamestore/android/settings.gradle b/gamestore/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/gamestore/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/gamestore/assets/icons/.gitkeep b/gamestore/assets/icons/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/gamestore/assets/logos/.gitkeep b/gamestore/assets/logos/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/gamestore/assets/res/app_icon-dev.png b/gamestore/assets/res/app_icon-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..6d811a02eb0b33a9279c8542064a3e1abbba9ef0 GIT binary patch literal 18104 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 H$A$j~`}%uP literal 0 HcmV?d00001 diff --git a/gamestore/assets/res/app_icon.png b/gamestore/assets/res/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef17d3014fe344dcba572c5edf6bd3a862e91b1 GIT binary patch literal 31195 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 ChR#I* literal 0 HcmV?d00001 diff --git a/gamestore/flavorizr.yaml b/gamestore/flavorizr.yaml new file mode 100644 index 0000000..2d31ce6 --- /dev/null +++ b/gamestore/flavorizr.yaml @@ -0,0 +1,39 @@ +flavors: + develop: + app: + name: "AequoPlay Gamestore dev" + icon: "assets/res/app_icon-dev.png" + + android: + applicationId: "com.aequoplay.gamestore.dev" + ios: + bundleId: "com.aequoplay.gamestore.dev" + macos: + bundleId: "com.aequoplay.gamestore.dev" + + + prod: + app: + name: "AequoPlay Gamestore" + icon: "assets/res/app_icon.png" + + android: + applicationId: "com.aequoplay.gamestore" + ios: + bundleId: "com.aequoplay.gamestore" + macos: + bundleId: "ccom.aequoplay.gamestore" + + + +instructions: + - android:buildGradle, +# - android:icons +# - ios:xcconfig +# - ios:buildTargets +# - ios:schema +# - ios:icons + - ios:plist +# - assets:clean + +ide: "idea" diff --git a/gamestore/flutter_launcher_icons-develop.yaml b/gamestore/flutter_launcher_icons-develop.yaml new file mode 100644 index 0000000..a167aeb --- /dev/null +++ b/gamestore/flutter_launcher_icons-develop.yaml @@ -0,0 +1,18 @@ +flutter_icons: + android: "launcher_icon" + ios: true + remove_alpha_ios: true + image_path: "assets/res/app_icon-dev.png" + min_sdk_android: 23 + web: + generate: false + image_path: "path/to/image.png" + background_color: "#hexcode" + theme_color: "#hexcode" + windows: + generate: false + image_path: "path/to/image.png" + icon_size: 48 # min:48, max:256, default: 48 + macos: + generate: false + image_path: "path/to/image.png" \ No newline at end of file diff --git a/gamestore/flutter_launcher_icons-prod.yaml b/gamestore/flutter_launcher_icons-prod.yaml new file mode 100644 index 0000000..3794d1f --- /dev/null +++ b/gamestore/flutter_launcher_icons-prod.yaml @@ -0,0 +1,18 @@ +flutter_icons: + android: "launcher_icon" + ios: true + remove_alpha_ios: true + image_path: "assets/res/app_icon.png" + min_sdk_android: 23 + web: + generate: false + image_path: "path/to/image.png" + background_color: "#hexcode" + theme_color: "#hexcode" + windows: + generate: false + image_path: "path/to/image.png" + icon_size: 48 # min:48, max:256, default: 48 + macos: + generate: false + image_path: "path/to/image.png" \ No newline at end of file diff --git a/gamestore/flutter_native_splash.yaml b/gamestore/flutter_native_splash.yaml new file mode 100644 index 0000000..356ce63 --- /dev/null +++ b/gamestore/flutter_native_splash.yaml @@ -0,0 +1,134 @@ +flutter_native_splash: + # To restore Flutter's default white splash screen, run the following command in the terminal: + # dart run flutter_native_splash:remove + + # color or background_image is the only required parameter. Use color to set the background + # of your splash screen to a solid color. Use background_image to set the background of your + # splash screen to a png image. This is useful for gradients. The image will be stretch to the + # size of the app. Only one parameter can be used, color and background_image cannot both be set. + color: "#42a5f5" + #background_image: "assets/background.png" + + # Optional parameters are listed below. To enable a parameter, uncomment the line by removing + # the leading # character. + + # The image parameter allows you to specify an image used in the splash screen. It must be a + # png file and should be sized for 4x pixel density. + #image: assets/splash.png + + # The branding property allows you to specify an image used as branding in the splash screen. + # It must be a png file. It is supported for Android, iOS and the Web. For Android 12, + # see the Android 12 section below. + #branding: assets/dart.png + + # To position the branding image at the bottom of the screen you can use bottom, bottomRight, + # and bottomLeft. The default values is bottom if not specified or specified something else. + #branding_mode: bottom + + # The color_dark, background_image_dark, image_dark, branding_dark are parameters that set the background + # and image when the device is in dark mode. If they are not specified, the app will use the + # parameters from above. If the image_dark parameter is specified, color_dark or + # background_image_dark must be specified. color_dark and background_image_dark cannot both be + # set. + #color_dark: "#042a49" + #background_image_dark: "assets/dark-background.png" + #image_dark: assets/splash-invert.png + #branding_dark: assets/dart_dark.png + + # Android 12 handles the splash screen differently than previous versions. Please visit + # https://developer.android.com/guide/topics/ui/splash-screen + # Following are Android 12 specific parameter. + android_12: + # The image parameter sets the splash screen icon image. If this parameter is not specified, + # the app's launcher icon will be used instead. + # Please note that the splash screen will be clipped to a circle on the center of the screen. + # App icon with an icon background: This should be 960Γ—960 pixels, and fit within a circle + # 640 pixels in diameter. + # App icon without an icon background: This should be 1152Γ—1152 pixels, and fit within a circle + # 768 pixels in diameter. + #image: assets/android12splash.png + + # Splash screen background color. + #color: "#42a5f5" + + # App icon background color. + #icon_background_color: "#111111" + + # The branding property allows you to specify an image used as branding in the splash screen. + #branding: assets/dart.png + + # The image_dark, color_dark, icon_background_color_dark, and branding_dark set values that + # apply when the device is in dark mode. If they are not specified, the app will use the + # parameters from above. + #image_dark: assets/android12splash-invert.png + #color_dark: "#042a49" + #icon_background_color_dark: "#eeeeee" + + # The android, ios and web parameters can be used to disable generating a splash screen on a given + # platform. + #android: false + #ios: false + #web: false + + # Platform specific images can be specified with the following parameters, which will override + # the respective parameter. You may specify all, selected, or none of these parameters: + #color_android: "#42a5f5" + #color_dark_android: "#042a49" + #color_ios: "#42a5f5" + #color_dark_ios: "#042a49" + #color_web: "#42a5f5" + #color_dark_web: "#042a49" + #image_android: assets/splash-android.png + #image_dark_android: assets/splash-invert-android.png + #image_ios: assets/splash-ios.png + #image_dark_ios: assets/splash-invert-ios.png + #image_web: assets/splash-web.gif + #image_dark_web: assets/splash-invert-web.gif + #background_image_android: "assets/background-android.png" + #background_image_dark_android: "assets/dark-background-android.png" + #background_image_ios: "assets/background-ios.png" + #background_image_dark_ios: "assets/dark-background-ios.png" + #background_image_web: "assets/background-web.png" + #background_image_dark_web: "assets/dark-background-web.png" + #branding_android: assets/brand-android.png + #branding_dark_android: assets/dart_dark-android.png + #branding_ios: assets/brand-ios.gif + #branding_dark_ios: assets/dart_dark-ios.gif + + # The position of the splash image can be set with android_gravity, ios_content_mode, and + # web_image_mode parameters. All default to center. + # + # android_gravity can be one of the following Android Gravity (see + # https://developer.android.com/reference/android/view/Gravity): bottom, center, + # center_horizontal, center_vertical, clip_horizontal, clip_vertical, end, fill, fill_horizontal, + # fill_vertical, left, right, start, or top. + #android_gravity: center + # + # ios_content_mode can be one of the following iOS UIView.ContentMode (see + # https://developer.apple.com/documentation/uikit/uiview/contentmode): scaleToFill, + # scaleAspectFit, scaleAspectFill, center, top, bottom, left, right, topLeft, topRight, + # bottomLeft, or bottomRight. + #ios_content_mode: center + # + # web_image_mode can be one of the following modes: center, contain, stretch, and cover. + #web_image_mode: center + + # The screen orientation can be set in Android with the android_screen_orientation parameter. + # Valid parameters can be found here: + # https://developer.android.com/guide/topics/manifest/activity-element#screen + #android_screen_orientation: sensorLandscape + + # To hide the notification bar, use the fullscreen parameter. Has no effect in web since web + # has no notification bar. Defaults to false. + # NOTE: Unlike Android, iOS will not automatically show the notification bar when the app loads. + # To show the notification bar, add the following code to your Flutter app: + # WidgetsFlutterBinding.ensureInitialized(); + # SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom, SystemUiOverlay.top], ); + #fullscreen: true + + # If you have changed the name(s) of your info.plist file(s), you can specify the filename(s) + # with the info_plist_files parameter. Remove only the # characters in the three lines below, + # do not remove any spaces: + #info_plist_files: + # - 'ios/Runner/Info-Debug.plist' + # - 'ios/Runner/Info-Release.plist' \ No newline at end of file diff --git a/gamestore/ios/.gitignore b/gamestore/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/gamestore/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/gamestore/ios/Flutter/AppFrameworkInfo.plist b/gamestore/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..9625e10 --- /dev/null +++ b/gamestore/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 + 11.0 + + diff --git a/gamestore/ios/Flutter/Debug.xcconfig b/gamestore/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..ec97fc6 --- /dev/null +++ b/gamestore/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/gamestore/ios/Flutter/Release.xcconfig b/gamestore/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/gamestore/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/gamestore/ios/Podfile b/gamestore/ios/Podfile new file mode 100644 index 0000000..24c9161 --- /dev/null +++ b/gamestore/ios/Podfile @@ -0,0 +1,49 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '12.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 pre-compiled SDK for FirebaseFirestore, to speed-up build times + # from https://github.com/invertase/firestore-ios-sdk-frameworks + # Use https://github.com/firebase/flutterfire/blob/master/packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb to check for the latest version number + pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.12.0' + + use_frameworks! + use_modular_headers! + + 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/gamestore/ios/Podfile.lock b/gamestore/ios/Podfile.lock new file mode 100644 index 0000000..d88382f --- /dev/null +++ b/gamestore/ios/Podfile.lock @@ -0,0 +1,154 @@ +PODS: + - cloud_firestore (4.8.5): + - Firebase/Firestore (= 10.12.0) + - firebase_core + - Flutter + - nanopb (< 2.30910.0, >= 2.30908.0) + - Firebase/CoreOnly (10.12.0): + - FirebaseCore (= 10.12.0) + - Firebase/Crashlytics (10.12.0): + - Firebase/CoreOnly + - FirebaseCrashlytics (~> 10.12.0) + - Firebase/Firestore (10.12.0): + - Firebase/CoreOnly + - FirebaseFirestore (~> 10.12.0) + - firebase_core (2.15.1): + - Firebase/CoreOnly (= 10.12.0) + - Flutter + - firebase_crashlytics (3.3.5): + - Firebase/Crashlytics (= 10.12.0) + - firebase_core + - Flutter + - FirebaseCore (10.12.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/Logger (~> 7.8) + - FirebaseCoreExtension (10.14.0): + - FirebaseCore (~> 10.0) + - FirebaseCoreInternal (10.14.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseCrashlytics (10.12.0): + - FirebaseCore (~> 10.5) + - FirebaseInstallations (~> 10.0) + - FirebaseSessions (~> 10.5) + - GoogleDataTransport (~> 9.2) + - GoogleUtilities/Environment (~> 7.8) + - nanopb (< 2.30910.0, >= 2.30908.0) + - PromisesObjC (~> 2.1) + - FirebaseFirestore (10.12.0): + - FirebaseFirestore/AutodetectLeveldb (= 10.12.0) + - FirebaseFirestore/AutodetectLeveldb (10.12.0): + - FirebaseFirestore/Base + - FirebaseFirestore/WithLeveldb + - FirebaseFirestore/Base (10.12.0) + - FirebaseFirestore/WithLeveldb (10.12.0): + - FirebaseFirestore/Base + - FirebaseInstallations (10.14.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FirebaseSessions (10.14.0): + - FirebaseCore (~> 10.5) + - FirebaseCoreExtension (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleDataTransport (~> 9.2) + - GoogleUtilities/Environment (~> 7.10) + - nanopb (< 2.30910.0, >= 2.30908.0) + - PromisesSwift (~> 2.1) + - Flutter (1.0.0) + - flutter_native_splash (0.0.1): + - Flutter + - GoogleDataTransport (9.2.5): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30910.0, >= 2.30908.0) + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Environment (7.11.5): + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.11.5): + - GoogleUtilities/Environment + - "GoogleUtilities/NSData+zlib (7.11.5)" + - GoogleUtilities/UserDefaults (7.11.5): + - GoogleUtilities/Logger + - nanopb (2.30909.0): + - nanopb/decode (= 2.30909.0) + - nanopb/encode (= 2.30909.0) + - nanopb/decode (2.30909.0) + - nanopb/encode (2.30909.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.3.1) + - PromisesSwift (2.3.1): + - PromisesObjC (= 2.3.1) + +DEPENDENCIES: + - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) + - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`) + - FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.12.0`) + - Flutter (from `Flutter`) + - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + +SPEC REPOS: + trunk: + - Firebase + - FirebaseCore + - FirebaseCoreExtension + - FirebaseCoreInternal + - FirebaseCrashlytics + - FirebaseInstallations + - FirebaseSessions + - GoogleDataTransport + - GoogleUtilities + - nanopb + - PromisesObjC + - PromisesSwift + +EXTERNAL SOURCES: + cloud_firestore: + :path: ".symlinks/plugins/cloud_firestore/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" + firebase_crashlytics: + :path: ".symlinks/plugins/firebase_crashlytics/ios" + FirebaseFirestore: + :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git + :tag: 10.12.0 + Flutter: + :path: Flutter + flutter_native_splash: + :path: ".symlinks/plugins/flutter_native_splash/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + +CHECKOUT OPTIONS: + FirebaseFirestore: + :git: https://github.com/invertase/firestore-ios-sdk-frameworks.git + :tag: 10.12.0 + +SPEC CHECKSUMS: + cloud_firestore: c556fefce96568e422e453bf9aeda683dd435367 + Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0 + firebase_core: 4a3246a02f828a01c74a2c26427037786d90f17f + firebase_crashlytics: df144edf7d04ace42beb3a3e29d825bfa49dd04b + FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed + FirebaseCoreExtension: 976638051b1a46b503afce7ec80277f9161f2040 + FirebaseCoreInternal: d558159ee6cc4b823c2296ecc193de9f6d9a5bb3 + FirebaseCrashlytics: c4d111b7430c49744c74bcc6346ea00868661ac8 + FirebaseFirestore: 8d9dd05bb50e0891ebe4fdd9bd0f9b9d22ea5556 + FirebaseInstallations: f672b1eda64e6381c21d424a2f680a943fd83f3b + FirebaseSessions: f145e7365d36bec0d724c4574a8750e6f82fa6c8 + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef + GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 + GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084 + nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 + path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 + PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 + PromisesSwift: 28dca69a9c40779916ac2d6985a0192a5cb4a265 + +PODFILE CHECKSUM: 7f097e782cb82b6dd602b7ffce0ccb34f1aa2f14 + +COCOAPODS: 1.12.1 diff --git a/gamestore/ios/Runner.xcodeproj/project.pbxproj b/gamestore/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c77ced5 --- /dev/null +++ b/gamestore/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,1002 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 025E17C09ABA3002D0EAE0CF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F0F9E85E53EAE7C45008ADE /* Pods_Runner.framework */; }; + 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 */ + 0A7DA883DD4FD1EA77564827 /* Pods-Runner.release-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-prod.xcconfig"; sourceTree = ""; }; + 0AAB445AFDACE0FDEEDC867B /* Pods-Runner.release-develop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-develop.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-develop.xcconfig"; sourceTree = ""; }; + 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 = ""; }; + 1D480218F83E89DAFDFBA6AD /* Pods-Runner.debug-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-prod.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 = ""; }; + 45E81EF0475B285611C3D4FA /* Pods-Runner.debug-develop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-develop.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-develop.xcconfig"; sourceTree = ""; }; + 4F0F9E85E53EAE7C45008ADE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 60CF85B7BE9BC035402A2852 /* Pods-Runner.profile-develop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile-develop.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile-develop.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 = ""; }; + 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 = ""; }; + A1E6546006C3326A6634EAF0 /* Pods-Runner.profile-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile-prod.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 025E17C09ABA3002D0EAE0CF /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 7EC7A991E8F1B65107B9EED8 /* Pods */ = { + isa = PBXGroup; + children = ( + 1D480218F83E89DAFDFBA6AD /* Pods-Runner.debug-prod.xcconfig */, + 45E81EF0475B285611C3D4FA /* Pods-Runner.debug-develop.xcconfig */, + 0A7DA883DD4FD1EA77564827 /* Pods-Runner.release-prod.xcconfig */, + 0AAB445AFDACE0FDEEDC867B /* Pods-Runner.release-develop.xcconfig */, + A1E6546006C3326A6634EAF0 /* Pods-Runner.profile-prod.xcconfig */, + 60CF85B7BE9BC035402A2852 /* Pods-Runner.profile-develop.xcconfig */, + ); + path = Pods; + 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 */, + 7EC7A991E8F1B65107B9EED8 /* Pods */, + DD0167235D037E4A0C2D0883 /* Frameworks */, + ); + 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 = ""; + }; + DD0167235D037E4A0C2D0883 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4F0F9E85E53EAE7C45008ADE /* 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 = ( + C9AB6FC4BF39B56152D51A45 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 7BF18DC9F6E41146D587F360 /* [CP] Embed Pods Frameworks */, + F3724DF3309EA42A1E185243 /* [CP] Copy Pods Resources */, + ); + 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 = 1430; + 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"; + }; + 7BF18DC9F6E41146D587F360 /* [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; + }; + 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"; + }; + C9AB6FC4BF39B56152D51A45 /* [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; + }; + F3724DF3309EA42A1E185243 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* 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-prod */ = { + isa = XCBuildConfiguration; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Profile-prod"; + }; + 249021D4217E4FDB00AE95B9 /* Profile-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = Gamestore; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-prod"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YY8TRZ9JW3; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "AequoPlay Gamestore"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.aequoplay.gamestore; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Profile-prod"; + }; + 24ED26922A955A6300DA3478 /* Debug-develop */ = { + isa = XCBuildConfiguration; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-develop"; + }; + 24ED26932A955A6300DA3478 /* Debug-develop */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "Gamestore dev"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-develop"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YY8TRZ9JW3; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "AequoPlay Gamestore dev"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.aequoplay.gamestore.dev; + 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-develop"; + }; + 24ED26942A955A6300DA3478 /* Debug-develop */ = { + 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.aequoplay.gamestore.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-develop"; + }; + 24ED26952A955A6500DA3478 /* Release-develop */ = { + isa = XCBuildConfiguration; + 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 = 11.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-develop"; + }; + 24ED26962A955A6500DA3478 /* Release-develop */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "Gamestore dev"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-develop"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YY8TRZ9JW3; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "AequoPlay Gamestore dev"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.aequoplay.gamestore.dev; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Release-develop"; + }; + 24ED26972A955A6500DA3478 /* Release-develop */ = { + 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.aequoplay.gamestore.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = "Release-develop"; + }; + 24ED26982A955A6700DA3478 /* Profile-develop */ = { + isa = XCBuildConfiguration; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Profile-develop"; + }; + 24ED26992A955A6700DA3478 /* Profile-develop */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = "Gamestore dev"; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-develop"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YY8TRZ9JW3; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "AequoPlay Gamestore dev"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.aequoplay.gamestore.dev; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Profile-develop"; + }; + 24ED269A2A955A6700DA3478 /* Profile-develop */ = { + 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.aequoplay.gamestore.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = "Profile-develop"; + }; + 331C8088294A63A400263BE5 /* Debug-prod */ = { + 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.aequoplay.gamestore.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-prod"; + }; + 331C8089294A63A400263BE5 /* Release-prod */ = { + 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.aequoplay.gamestore.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = "Release-prod"; + }; + 331C808A294A63A400263BE5 /* Profile-prod */ = { + 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.aequoplay.gamestore.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = "Profile-prod"; + }; + 97C147031CF9000F007C117D /* Debug-prod */ = { + isa = XCBuildConfiguration; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-prod"; + }; + 97C147041CF9000F007C117D /* Release-prod */ = { + isa = XCBuildConfiguration; + 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 = 11.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-prod"; + }; + 97C147061CF9000F007C117D /* Debug-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = Gamestore; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-prod"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YY8TRZ9JW3; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "AequoPlay Gamestore"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.aequoplay.gamestore; + 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-prod"; + }; + 97C147071CF9000F007C117D /* Release-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + APP_DISPLAY_NAME = Gamestore; + ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-prod"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YY8TRZ9JW3; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "AequoPlay Gamestore"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.aequoplay.gamestore; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Release-prod"; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug-prod */, + 24ED26942A955A6300DA3478 /* Debug-develop */, + 331C8089294A63A400263BE5 /* Release-prod */, + 24ED26972A955A6500DA3478 /* Release-develop */, + 331C808A294A63A400263BE5 /* Profile-prod */, + 24ED269A2A955A6700DA3478 /* Profile-develop */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = "Release-prod"; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug-prod */, + 24ED26922A955A6300DA3478 /* Debug-develop */, + 97C147041CF9000F007C117D /* Release-prod */, + 24ED26952A955A6500DA3478 /* Release-develop */, + 249021D3217E4FDB00AE95B9 /* Profile-prod */, + 24ED26982A955A6700DA3478 /* Profile-develop */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = "Release-prod"; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug-prod */, + 24ED26932A955A6300DA3478 /* Debug-develop */, + 97C147071CF9000F007C117D /* Release-prod */, + 24ED26962A955A6500DA3478 /* Release-develop */, + 249021D4217E4FDB00AE95B9 /* Profile-prod */, + 24ED26992A955A6700DA3478 /* Profile-develop */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = "Release-prod"; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/gamestore/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gamestore/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/gamestore/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/gamestore/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/gamestore/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/gamestore/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/develop.xcscheme b/gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/develop.xcscheme new file mode 100644 index 0000000..9e7c733 --- /dev/null +++ b/gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/develop.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme b/gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme new file mode 100644 index 0000000..a434fbd --- /dev/null +++ b/gamestore/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gamestore/ios/Runner.xcworkspace/contents.xcworkspacedata b/gamestore/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/gamestore/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/gamestore/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/gamestore/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/gamestore/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/gamestore/ios/Runner/AppDelegate.swift b/gamestore/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/gamestore/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +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/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-1024x1024@1x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..bee68e790df5597a58b9c1f872d25174db4ef38b GIT binary patch literal 29416 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 Ef_X8KrvLx| literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-20x20@2x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ce0b78dbac16839d8c4cf82c5b4727c79ab097 GIT binary patch literal 1672 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 literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@1x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2d82a86e33619d67a1214d8c22871a297eca3bc GIT binary patch literal 1245 zcmV<31S0#1P)R7zN{WO0pSUmZ)=Emf@B; zNGX&8g=MUAS+A$6?u93NZ{!#5Bs%iKnW-i`~Nd&uEN0+IKHRUr9umHr~UI#DL~bToas|~;knkgI@{GC{MhnZC<7%jP?Let zLiAjveNmFMK@uUStK?W$CywK4FvSbJAi}29Zq-4AAmA6S&LRj~1x ziWUSxmPE#2obt_$j(l~X%2NJp$KBwX_5u(kIm#xLJ-FCyw;=VPqN1R^DF6*7t*od> zCFB1207UEt+_LcNY(QLDU9~kI)}Eod%qByb(*|gCW&D%c@keyaB* z44W*cA?cG(hnMHPErtkjCs-IVL5f_}eaE_nN51z5mK1cc z*$l(ld*U6t&8k*0)N}OnGyO@Hp^I~Vih8eN1adUDBZR7UxfRj13sDr+cjD-0qvrrE z3PL;<%^agmGy_=z!G8YU@5A<{okDR^n=S?_` z^4(C`w1NOymPM@~Ti(BkY^5B>|1~uYMg(ZnzB(hrRPA!1#s=tm=Emi11S!l_+K1UA z5m{Vhf@1gA*Jhz^_~Ql%hXy``A)LK=Z7V?vaFzCzF@+nXslE<&43+0of<)~@XMP#} zI8${YLG)aueeLW+Uld7hHb0;b4W5S0WU-qgRd+vNy82q#lKL!(lMZAWMhO%SgQ zp5D8^b!}F4#Y!9`c@c03A8x4>KVZ7*Z+$*z9@L77U{CdlQW00000NkvXX Hu0mjfx2#LN literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@2x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9839763fc944a976faa7169341dfc35d824e4940 GIT binary patch literal 2442 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 IM6N<$g6%K4rvLx| literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@3x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..63d2ad8578ac96d0663a9a8b7fc4f3977b749649 GIT binary patch literal 3496 zcmV;Z4OjAsP)}6lTg$I@3ZXOgod(LV-YOLO6nlKqehX zpb#?TCi&ebig`pIjAEImp4c2{v`%6~i_dGG!0d*Ane-#%HANF<2= zdr2nx0xk=EPa&zxh(ah7?zat5{=ksk0e`AhDvesD*J-V0lR_ac>ZvE5!Z*GBpPc#f zd{6I?eI(a57IW#;#)fGvjTPnAVqC+7QHaH2Cr*F%&ao37udm?70LV7%IP$^qn###H zFIiY$Qzh)hObmrjzc_o~t#|X>KV+_GBpi)KW3gyF7N_Yrv)t(zb~xaoPJ8oSrlS+$mVV8~q1plZ0@ydV=jUW;UQ(g~E)7h&mW#-N8YnmGB zig#_7h=RvQJ^8{*$SeRMAmFEh0Y7rb`EzD-AdlFYMqXWR0nkky`e{zZQP(c7UFc-=0@0@m1`{<1cXo&av{j2 zcr50p5SD56ZMUqrVKK{t(1}Ffki#EDpk%}n0U-zlTm;EoPzc&r-FD;Rh3pSvbGQUS zK=7vk;Sgd076OO`(X75OcjgQ%1WYW zb?lEo(+S&%C)ZkoR&6%uur7%^1wioZzVDJEdnFR%3?hsUetOrP>@xyr#N&&_hXs)mA>mQKG1smtaFm^%JAV5?wR9d2Cd5{zWMtBsi zX>Hkm;GnKVFCd8WG85MJFjPi12V_q{3byPUcBDsGJPMOX3*lam8?v2Th|0&bD;q6l zJPKkGO#!S_G!`r9JHnA@ug#I3Wk}q(;Ps7--h5s+LGT4pS5w*EwgPuAu~CrqSe@Nr7>Pp-{NBseW>~1(x*m_J4TlBd0s(NS0s?f~MmnDb8LFt|1QyZV1>& zuTg1K$!i`*A-!bs&ao4a5!oLRK#-(SDwE~fAQTMvDN1iNip7Wq2q0jDwswBA?fpHa zwNq!VyH6}l9?I_W76}3P4vSGg_BpjQqhtcUC^-c7Vu0{^T)Gki5(FTie97Uk$L%W7 z8Uyh=}r4T$MiwXD2(Sxr?1d=3UfM?U!Q;*f(u084JW=?0xf z^ZdS7Q`<8jt}uvO$v#q)bGBii_l*7MUiKg$=9L*sAp52al0+g_$z|#7AFStLf@|S-I*4-8*GhWHLLHwy2)R^JWi`WN zFL1;xNnmWRkjo%0a0apZ))nap@+cjIG45%WyGRi$uf+xgAgC@kOHkRTppwlMyb3g3 zZXoJwtC#(75&QEoAl}^jY-Qx4D<;yYBnp&&%~pO8d=L<+ObH-hko&@`2MX>0AYw6f zYSP7md9!g(Ii*Bg6&@f)J%9fYRb|!6q^zzUK#ZK|G|gL;kv<_7Ku6$=fJk>u&^5q5 zcOE*Ne}_;gm_F~MwhDXFUC)`1QlI1TM6b+3bkSSO(_tJ|KSh|(lzef zOgT6Y2tYu2#|-8(nojMx$_Ba5d-$qqf*@EzV{;zn*&-e&HP*ZNsAOG1X z^Tc^TWFr9m_p9@hG3TQiCsp5Z|BhE5+x{I08V>~HBdm)$1VKO`>yAheNCcq6?;o2z z<7%v_H^eB2Yd35^x_d{2;s_!cEZ_c1?fM6ZB2gelL1@&fl#j@TfEaa(;0|!l+I6AN z9VHrX{mHol&u|9ev-O<(`y+GidPuIuem$F^oaamV2tSO6b0C;D^~zst*@*SJnHWWI zacCGm$aO{l@%6#yLLMix3cG9A2Lu6;?_`iZH?3W{^UqHq*K$LUQ8ED#mZcs2NA|_t z!_1Ni0a4&g%?)+G+`9RXPd*bJU;O5SK&4Iw5hmRZyF4~;P&{Kfar)2%f+&2Nsm+aB zH+1ZJ`nlAS<|`WRy?X;Lg7m5pfJo5v#bLY6Ich^CGV%0fiIcC>fw7uO9Mez%h=1>W zbl%2?nF8%^q-NE>OXa#@(cUCqa$fz0xqOpPW7r#=4EPzggJ&&%~vgTB7H z>imV?)Dm0-jQE4dW2gk6P;h=hWw})*l|Xce$LX?CV{_ea3(;hE=Shj zOM&GS3yaBQ)azk*u2jg=!y)e5BnHH5J0BF*NARM6HOmB&U&b(u+p81+A-Ip=PJ!n{ z8$NH7Abqa7f5-mEwhIM18>-VUKR$2MZwYP`vaJ!81bLf82w|vP zeP5kDvae~$I&2F35eW4vg%H9}^_)0VIpcaf3gJl9aoHeX#4~-;@mTlqLwFRNUW)Vo zxGDw$Mm#~d`@hDc!2UZ38DejZxQP!4%HEGhArwJ;MZTaoPqe`jA4662|HZ*`mI;=) z87hsr0*``1CdFzFml6S^T!v~=nMS2R->j*w6_bKo#-0LyYs5`xLuK&Imz^KR|h`a?sZD-_FUX}u4 z4K$P1(pN&$Ce3SK@gxh&cC)(;GK^<-cJAKIy`MezeD66oSUR27{2zur&R~{h`v!xd z;V{c`RIvx2;@@QZX#DU|dE?n*4AE{I_8jYm6%omh+i#D%cTV7g{ z=Tv!teg43u_UrTJ%xt^bap~F(z7rfBi$?hNoM##~zqJ9~w+;Qvg-3N|x*$|2?l}dt? zps{@EqFgG=ad(5m>Qptb5)}-`2@KOU)YUYvXv%#%5{jVT;wS!mgFeiz$kxXhwJh zhDlGNs8&KH37rhM<;;11cMmjxZMND7f|Lb+f8+%0-I>#Bg`Olub@zu@QH&z71YAHd zkOX{CEO|ftHk0u_7}WH0>)G;Rcc7=Y{l=dUKY4USGoDS;G=^b-1QF~xcr48^Wu~;N zayn20{XveCDY7Y=Nr{#Lz5_&;0Yh%$vxM)CKQD2ylfnY$jufQQmfHC$NDS4&3Oj6OG^;+W<=jPK1AviwU?b7U{ft;vQvCjg^+ldS zsP}f870LiflArJVhDyY1^n-3ZAq*V8a+G6fTirs9C~1R;N?Z<*70ii`*AupBT{F~x z+x~8$iy-xx6^@MRNpky#@0m@RB;a;A`M0xYOxv=4^{FpEHc@HFVdA+)+E1n#%HFVq zXX^>P)Z;`&yK5X6oY=VL)g9mN3;c6e=;iCdl!{3_Rbn2!#=?&EhcfeE{EMNdj^ds5@gl0-h1J`E3LBZ(3Ru2 zain_j+KIse`;*VU@@2tOtE;wc-6%O!XtKE}09k_N%v0y;B5~SxQI_pLe~hJ5wT*8} z4hS+}p1u8pEuZe#1?>zKms0uM1hHi_+Q7gNQa&BiqD<#`S$6m3(=0>RFW)4~mc|dq z@oif-WE(P6J~xd-BDe1N`5=%L4Q7j>|I)9r?B4cP6w^&z_Rhp$o}JqXD-6B@bu=2i z-s$7ASUpKhDk{WEi*YT|-S&%;->8nrjdxzB%xqkPkp00|pz>wFXwWy*RHF!zW~t}j z{ivpfU{80ltc;nM6kD$~>izCFV76#Bk!m;qUU)+5}*6rGo>4 z({6)5F9KDPo1R@YfTX> zs7c%jY)>|6!wQ!wWJK^A*h=vhv?dQ0;wt+#8&{W7_6LJ_!(BydCRedM7>=L+nJTbV zwAOX@hzuBXn@CZz)2UZFiK%EU9v+nSSU$T>Sm|<2thFLIv^-!N9bOr*R*M+*gz$%e zHx)Iho1nG+U@S658TA^%ciwcV}O-?`$@k zkOx_U1fql#C@2y^5fl(aK)`}IsditmKoVLe4)D}I~2NsJ!OQ|B-qMV9_ z_6P)m7{TydFyy(f?0aT*duNAiHaoMkznPs4J;#1e&XW1f%>L#x_s;#@-~A22lgT9Z zbrOEFFJPqgf8Y^RFcdz2*?r~eSH8eNS8pG*n2kn4udA$ZR#iA_t15Lmt?ZrN1mM6x z@Yty{$4{T>?(NUo#kRDypMy`8N_mT`c1mNz#PQ=a8ns-#k0@|78vDn`M?U$qm8R)j z$0QOoMUrp;MAH+e+FILAI~}F#RxTYgx>}ZN7&+jx=P&Mh=L3IWfOjtt#-fo}G)mJ{ zX1iXmzhlaz>dFeaE@Om%-#_%p!NW&+cadZ~5(>rRv8;9+$LG(Pz3BdXby_)}OW?G@fdCkmyQ}fm32Rp_D=W3jem%tn2HNd=_I-ZtJa-oub|BzSa2{qb z>?6w_oI7h~kuFJ2V2DXD%&1hVTU<48-4sQ=x^wTj3zxV@#$(Zd-^Xn)FLV58(-UQm zQuIzqii*VIbRr2+K%>TSl}e}8C>4ra$IAxX+wXn;)jx*9jDI>E_Kj;-?c8^OmzE^S zK)}y!udS)xx~0WvAW*ua6A6z$=nIBOYM74zXtlG{Na%8%C=W2uzVznXEG?EAPM>}L zWs;=0N757(@Ody!0>5DHJpsgyi3(#V+0B71ZEnZrP zQUe2i?sR481M`ov?KzH@?DVpx__(cGV zjZ(Y<=3{N2PoLamAW$zi$_LDQ7X$?9%9ZQA6rDf?22N?7%oXHe2M!&6_<{QnkEi&C zq8OwgG!286JIlWnKrA;j@QD@+wm2l~OdO3B+EiIHYQo^v7Kxx0p?q9TB;R!bt0@OwQF zYztuqXPJL@Gy3tl{5BHJ4&7M-+h)_Mlp=t;dwQ`{3IRil#b%f6+shWtvso?Z$MYsw zplF=rZD++ssjPD~DATdDj-5Qs{*tnDzr|Xj5_5W5f8PIhyVZhHmxG(z+3O92_#-7u z4FIu42Gjs7sG`j!b$Ia8H04;1*mOH=S^6j7h_V?sq z#>2!gzh|1YpO5y2yeHmM=?uoYsd?GhG5~~zMDoTsq*md)oN3{YE?Wel5(Wu@gL1_% zcw#p{wr7#p-8#rw{h72w;V?Ch$ko;JA&u^V7+d1T4KKm0X;sxXUTJS*e`lDxf>lV&!(v#fG;5bk zi)E#j@H|6u%NxUhc3}95Zg=WMBXmt$ygG>`kN)+>B!o^RuL3iYZ{LVvwu!T)J-3<4 z?u<8vacMy(+CE!2_ns1)6}_|Ri`V#qk@kasVK>G4wmuOi7C(;O9j|zL%8FsUv>5X& zsYJb}38`4eWj8T)a!okmKJq@h&Xf>gXRPz&A&iPOKG>pENnaA;`DtJ1%1M=!xysoG*m?cRhko|! z7rDEP2E$LD+9YcAptH{#%BZ>78gB3D>4|n6XE#N~Fkr^D#BB>Vp!c3Bp$_V5Yo2~` z<8NMiHJuD&DcY@DT1J&S5j#lNrHm$XSgD9cA|yp$y55~|O;)SaQ5dWz?l0<24w~Kzr7GDV{1gDQYId@RDX88Q;$T z)qwZoEiJ!%;U&nE;kiZkWNuw59w$58*WwxFH7>J=7?xrdYiFcGT{Tr;XP7F8qRpyH z#p3ak?O$-K=fGTQB>Ikj#BLVb&ZzfBlpAB5x)j)!mljmzu$R=0)+Fi96aQpeiWbO88VyHyYJ>Hz+KRHF)$m+(soASH=}i_%bICk0Oa@@yRWCxPGZ6Z$ zdMMa7lUBGcRV3do2v}f^PpMQkO&EXXT!%mPeq}mJr4K-;YtSI;r|d|MoFA+{}~dd{lA7-n=-jcr~c4)|(Me=samsn4YXtLJGIV&^Xp?Q+&n z6#*Owg{9FJUOmrLAu;Uoryqy__5`y3#{!C^MJZuPj$yuQ9U_1uQE_kVVueL1VM+7t zVBc4$z_B0(4FVP(ZIhPgXvHfSs+tzN5QeUqXSQ4*`3GDifk z!(z@0T)ZeHtSsNgm_alSKZ?{JPhj3hOeE)Rc*=Gtrft+6V0loA#& z>ka0^dtM`BLsm(qY>TVa_pRUDFq3)PMqH+4x0uwp3bIS?!>m=~HRYw;w^c_{jdK={ zojUW>hkv_#=0vZXdD+=fJ;v4e&BnVQFxYM^A&9;{vwP1MLC=f*>j)U~8jjk5etZI9>D4bUFV_)!0*IPiZe@TT&{G-90qe3W%)^ zaZF=t!w_~70wjd&Z{PR%z1&Q=x$o}h-uGU*`Bo~VZcffSd~@=-zu!5(bDuJk$zZo7 zy_AI>z~75*8=WWJHabuG+cDY~2#&hk_}5i499oUKu;U?V8XJ9cXt?`o@72D3_`>7$ z=Qgle%`?i&oRy9_HPv%#s`EcWqNbnGBV+DQzc_LBQg<{OV{QrV!^efL9t`WyYBfy@ z=P$c^@k~cWe#S}Cv@tp!PnQkeaGA@AMBL}~V2rD~K;-A1+R?mdp{N7ILXntUF4GB0?(=Ol z%-MrS|AgmtW}~64rD@Ho}8qUVQFp=gdl! zLB9ySZ%%9OPmx(S<>g&_z;9@Au^uNN!Gd*xQo8!^zo)ya;-@HMq z(Fh(Sz`^AU1S3)AW^$R#=_uv3K$s_^naRNFa<)yt&m1W~ykYI8wW|e=Z(IXo9&dm> z%Lh!?ILi1g!{)Z$`ljIiQ|a{eq0v~JC0N8Yv)nFhOF>$r>A1{G01dj_Poq}9@XWWH>g!PY z9~gCWaT(?^xD1houvd}LXpRvZvyzEKG)hbGM;=;_=<<-u8wj)9`Y@qfCQ2%!(YcH( zM4w~>m)Cr21ybjcnA^{i#A66tCQ2%!5xI;j1zC2SdX04D(j~jLKZe-j z(owPJx$hwM43Wkt)y6qd=v*dBWTQnP20=2TDZ7|J^!oXyccAwhj>ghyrUesGxJ;C2 zMvF*{smgjSmn-n4=Peu7)i|rrJM{;da!~;pHmk%jT9inRUNXJG2>;YLD<4{WzbHLM zV$}4<|2r zV6@m=rjzWio#$mT*|tsV5j$e_F~n`(omH_!0$hfhK|GN}GFmb&)9UNf=W1uyv@{}Z zouo4?o4JsYCsQe&~F?KQl#8JX$ zoEXHw2FYl<)w1Efm2d9*oyly0KWdb&xXT}8PnyvMzYM`f=emrcM;(jm=Eq~vfG=aR zSo7m`S&1F72bGeY3Cv*$gC@C5x{hkJL9eT+uDagW@AG=h7OPw?N9>SQZFe;x_MqYr z0&rZOCjS(H%Or`Gup|?4ug7Jzl}PIKkHKe)Z08_dNTgfO!or-xzjrZx6o@Zy@9y|5`4W8MGSx_y@5hjF}j?;Ff?i zqX8Oky!{)x?@GrI@cQ+=`(Jo!8!xZH5tz$@UlgnigroTGB5t}-r&TBv17mJxmqBIL z>`Jddqc30S`H$D%AksNkQZr=NwnxfKImOhxh`}nN>8w&Kl{n~WjmB3#?{2DJx#Vu* z^-wtS@qf1;JbaAH%VaA*JuZs`F(1t9SAYHXo@bt9^&0;C2gW?&zB+eRl}`+h+UUuZ z&-Xw2?ARyA?_N9+Q~@qdojJ$rl~Vj;J_r-xvz%>BCmM~tx&ObIc@1;9fG)#ap4>g4 zHk!Ed8HmIV9{w1^g#X>~;&rx|(VK;-#cF5u8t3)S2bOle_wUJAxOU~1+EtHCeixC; zhys-3bjC$CI(Ow$rBYdJ_JGgBG0vwHM_$8AK(o~NjP`om@OQwvVjdW}{^z})X=K@j z{O8k-Hz0_*Cjw(6t7u%4a9)CjJu4DS3`s8 zRvXj2Heulw?21BmYg8j$r%t@}a{bmH4|;i={uEabbk{h_6pAVT&09t@??^!?W3t$M z9yba@7R$cjn*&4SGxgv#iPu03n9Fo7XO&5hw7+9-dC)w6 zIVSxoxk4@niy_8fSQk|CtrQT+brbuwk6Gt3u@JlOJ(8|0Yg52w|vD8VP1pFGt0869WPHQrQEh@z1?a#cD#e{ zPjcb)s^x9l9^Ocox#hZyt9oYTPhNVF#A|&fy3*t^Dft68of5`tNH@42BV<+f_OfQx za+}ri-XZeJGOL(*-Mpy&J5LBKVJ7iflZnrX-B4!W7bfVjG5mQguFKeDcn6^Lczpuq zH65?D8qKp$K7lf_NnR&|p4wQSGLsx}hn)_SGABgkDDJ!lVuUniipsZd|P!x0_2Vj=u3z(sglo z9rDe)Z=2LEW6Ybg47{e~GEt|`p1;_2Wx>3;h~vZMY+5#FRd>(v_sPRR=k?^4e-d_$nJb+t-w?)&0!W@^bkDz7o@X6NUL zNO19%?qSP0Wo^|ZuAe+?6*xYn-Hb71 zRh`9R^Z(^ADY_ShAt&B?x$WtnpnHu}@h^(S7=6uWhKtJ>X3%PCX1BVPH1RbWLjuFS zr~mL8I(15{Wg0AZub{BJE{xF=r^cwN#JO-8cRBk!jcl>QlpK9VMfu!WPHfipfNS{7 z=i={y3FdVHj7H?L-D;_?t(`1DCg$ih&MN1OiMPVK_vs&)N+j3=6Plyv+h}Ain}{ys z!gF++QCH=dvi07&aXWmbW=P(1^t>9)5XoJ>dW|D7a*OFfc8dwGMkEQmresL|bM(AE zdY+EUp>Skqbd34Oje7kAmvb~(^GPXS2z-`;*SywL^JFyh8L2qq8(d+GE_10AC}KVzn-; zolEI5O3kNKbx&+Lx>QCBJM9jnZmzHM2ZBna0&akmXUEZNKIbpJ&p$St=Nw%Uqft(~ zE97#Ug_a3o)qK+NTDlxve50j1?JjQ3XP$X2veA5>Tf|*bRMzH`*J2ti-SaV|s}j!} zuf=@yJY9y3DCP_sU6S&;|8#p*Q}#Iv;ut+$xJ)PMczx#mU#fJ*iaYNT!RSaVK8?6c zC+TwZ3rF{s)YOS!^st-ht=R-i>eD;9k|;-y_{M-Cs78k(vD}mY=#rYtbdqRI)ph*> zs?nZ+_|GTLCoys*1+RUB*HDdSeS22EDy+-6MCWzLHHc(%9A262$(+2De=gHWTwbT* zQ6!^T-#v|&ieWAjB_cyqdQ;(R?{G)#~DU#7z`o~xElBB2I5yg_DR~VH_ zcCS(6XoW(qQYsJuQaoIy6GM*PI~bT*VbHQYhTA@C0rJ~}=(Jqkw46@G#$`Iu@j97G z_YMTCCXLms(NG~98tBVrmCmk5HM+uP@dv}gRyn4N%ed%xjb%6OV($FO(TA@(L z(&?f$FxuIPA;3rGSVq>F2x{ZUEP9hfMqcNKPv zKNRK_P!}r0Mi*|=lYqFWEI6eo_>s8n;Ejv<$q`Tfl0av4ly zQQrNzu&SKbu;s_ExcaYN?D%B3w`ZX14BVt-GOW~jM|Iue`EB>$xFAZ*gvC)}1tyGn z{kiYx08yaTXt0}&lyw@@RN&_Ft-Cok7CAH2Y1Gb&(o`xPjVBVxB!t*{tp-ARnDXMj z(6o~zDL72q@u#Lr^^lS2sA5^`_?y>lqw}QOM(0WY2Z3giC55P#=Kufz07*qoM6N<$ Eg1_Bs%>V!Z literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-50x50@1x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-50x50@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..f924c08a7c9a7ad0deebbca8edd39a263baf2057 GIT binary patch literal 2121 zcmV-P2)6f$P)q$gGRCoc+nR##%bri=p+1(_YY&J=o z#HOW|Qrl8m(n1R;ilZ=tIEsJ{j^cqL6%WMm8vk*|ade!)8UGL+j{)%>P!X*R;CSKq z2a1T$Vk@N-Tj`n5Hutfc-T0DU*)GZMCK0bUov^#V-QRxpz3+SPw+oR>Cb9pY5&t!S zy!~xhp>X6#M`v%}A48*FUm%EUwTzi|Iqfx7m2(>EOh)S8#)?FvUw!|>!NW(nL_$26 zNF;_wMg|544;?xBQJe10)vH>XX8(IwT_<~Yw(SE~p=g<0rzED^YCa<+XIyiJ0r{#+U&UpWmJsrQD z#M00D! z?S{3t$uhxd;3p{)#18zVbkiJINKYtsN`@1Jz_OsEjqBHvr2K@wP=rhHQl?UeEjxC3 zVM+C*WH2>jv4ul{);rf2DaBIm3x>sQ#zd(zL6RzBsp~0&j5b?*fso2MAS~(mDomkB zY`{CFh&Ajv+u7Yi5c#I+frCF?+T18R1Vur*8;QnMn9huzO{xU3ytITOwUIbW>N1Op ztU2v6RSFq?eiCpz58ac@dSH_?8Zg2aSc{fQHPjV$s$bFxbqXD*kab}($!B|pGG|1P{5ykF+{-+WD=dR z@i??X9LE`}4SvxWSlKNyYP$18s-zRg? zIiCR;%d7f{9*yb!%65kHGUlR%IjI+Wr(1dIX;H ze7jwR%xt7k9uTbIRgS43vwN=xzOF57w8H*TAg1{ep@ZS2`nvByP-mq@-me)`B z^_%&STN4nOa*}~#Ktu9=LwCGt;e1%s?%wxRMh-(X;TMrzzjR496BsP2p4@cb%P%~S z|9&DKGm^&4RGlQddM#C2D;|V}LlHx(Fkz^iUOsOQ)CI`I3^H-IsX_4t0mv+4-4QG~ zMWf+h0BuKOF_kHnwLa0d2*vM$B2t9s4>d zB+_IiIx7P}t;cr1l6ur!WHPOK@uGzWgZ_=TKbTQ*@e>biP+D`M9t^*f(d3=*4SL5l z_KV5pW!x`cB>9AL1|*K|dP!J$f0=4DNO z8$yTnsOSuQ2GN9nRmc<Ze5R4OayM2c-a``*n-rlPZgzd;~9 zAwLayJl&`J#37r7xum=-9*vmGW?X*zri1Tq;U~!o)>&a#qMop{pE8)-wKdS!(oNS| zR?_S!wwlr{04L)tMSrp6>`b z*L3HR<2yh1kiG zP3g=Vro${v!F#`kO9->)U909Tm)!=c|0kG`fzDPv`t1HUHi!Kap$G?mI8I!(W<$CA zGPMH1n5c>phiAf%v~SRn4jW@G@IRH*t-P-3?#*xY9X~ui*l)5HO?S_yZFVeYIW8*;OpX+Va3c zv=#*<#hrvO*;s`%PY)OlG=!reAj_S<8Q=Qj?zUp4Y#5?|c9Ez1JO0JRVp5 zsNAF(>;n8h=|@;1^dl@08oID(I(oXPxw+Nd(t6S3^Lc#!?ob%E7Zv1_T1|0bKD;O| zbyZcAlcaWFiZm2q9c?`M>A|lXPo3d>x2>ZSez#n>i2l@SH8mrvep)-ZdgO4W3pTW1 z9XfpU!%q$%961Uq;5Xkj!VlE41+!<2tSncqctZu&@sp?bzP~>!CNMfo6hy=CSS-e} zv846s>S%{nTX*Nm%Cb_03OV?&e1YKJ_dYy)tWjVeAQGi%ii*%wgwq(7m6pt%Iiq&+ zL{h6@{2F9fr_MFM_I5pr+?)b5z$nxmWMeVT9dtT!!JL`%X3kKojC~qRSP;nH*z-;_ z%JA*LFwtPZ4=s*whuX=L7T>fW-|0}Mfaw}ESWu^4-@TV%xa$ij9D@4f=X)0_)a{FJ znN~YRnbL7cnxyg$1hbNeQ$*s89l==3F!V)*I*Jm4}JNLJ>Mb(G1H%0pME!L#xiq)9bWmgI+@r z!iOse3rGQ!(@ibt&;NY!UK3(=iI;4R-s2q3$r1{&5ry zzl}Q5YBXd$iBhoANPz$lY(X#hj-n!AfW`TijwEkif)k|t-QhNmkLLeSAXVWiP^;Bh zPo)SfuuiY;+>;!UBqe~U=UqDB_i?`Eu-oeHS~a}9OjI#gHs0FN1+WD6v6>8}1x~d( zFP9U_539@TdvV)N825@gie=e=&&&DNh{}rft5@VZ?4nLcGfb1aL!d%|>=sjLfrws0 zW>|QnR6U^zcx7&{89nlMYga=X6m>Q@)w$O8D36at>Zw!W`cpY!VUvo*7zkFG+Y1Zw zF-U=+P6?BOI0daw>}h3#1#t?GlqylJx-&Nxeh;lQ>q>()!_{Y?2vokmnj)wA(xQZ_vI+~e$@n#Hcq}5 zB082q2T}s_RZ>W)q{GVeQ(^_AY<8#5+m+;X-K=Y>M^<5+3gWsaz|o?SB$84|gvIBl z#EKvYyTj@CdKo5KR$6lX+*z3A35NKpl_)>OCwy4geIKXPYQpAlQsHhGA!{|5r3!{4 zoZAVtx~wQ)Lg^B&4H`IRvE(I%lm`P^qxo!eYe{ht-Wgz!%(*?rvT(H|?sovkf@_1| zigUaYq>|d*un#&xys4TPm#sw#MJUpYbFqjNa&0)r@BZgLg-9VCI(!5J7De+WR6*S# z%5FA^J!dK@6&|eXXJ7sM&CeK3W+^?3fZXjJ7)P;!D_o#vi9KN&DHR^9;=%$~p|iQw z4PCwxyj(pwLb1|ngi?2K&7#6qCMgwmZ#cZ7{A^PTm?I^4U3uB17)NEzb4I9Wj<7gM z<>3YR#OdfnzY}8^*?HYOZ&p=>xV%+Tq*f!4lYy29ZY%3aqD+i4V*#KsVI6BcfnFqd zdAh82J3+`Wax&<3Wu-2>W7|D`;p|l)6n5oj8EgWnCO3C($Dku|uJE&ihrB7hVJyaY zJzZeIrSl3$s28^FShr$HxkzL{s@%9+FDbK8FZ%N6XmroJ z|4!Q&XIU7mfCZP{9-~nPhEVHQEpys!IUeHi2eXnw@^y#c2VQ6i!erDN^<)y9Fexz1 zCcSuAue`pav&)mY9qO0g3++(`UjAS=nBKK37U#kXNL}dU&PNLfpm+n_-kwo6fCFR@ z(FF2^4vUE()ZDOWItn)3Rn)Hwr)YZH&Rqw;KFoJUhLMdInBH7?;gL!cFhbRhPf)F# zHnWP;I-sn}g|_x-QzneBsqWcAe{<~k$DbYu26+=8NTPVf<8del-@93P$wDd@xtuoC zRMTOl=BM8O_|si`8^oSEM_w$;g6%MwETm4yw-4gA^2V9x_HTzj$IV)1EA7p54Hzkt zLFcfV(d&M&(lU9ZPH(l@{X8>N0?NvZO>_tzupNG%$7*v3@Cx|4KH2uTB`=YCIq=$} z)0RIByatSvQAd`i7kEy%B(e7vF#P_jrz`NnZ}cae+-$Mx4aUrq7*y0G z)fsbMZIy3El;xe-4 zr{HQ)np`Zecu!zT`c)vcdg(&D#r)(mFSd8~TRs{JCZ=SPyf{fAMSX4V5B{tiFT2H5 z*FJZqy#T;TQ;*1esuh+ z>NUCNJbQV0I)&pGVEXm^xzn$jmYg4LI)7nj{l9L$ZdP*Lb-vR9ydK-~oX6X5B?#~$ zRk2CNRsm8-*u09JHZbjUN~Vw?2)$05OF}|(&CjOoZrGROCjl?$yr6#Z?NH(>+PH2_ zfwSMtc*U@iP3u;r?FqcqYTOlEPM^?uq5a z=fBpkUXeQ~r0S6)5U*IIdoj)pCl_QxQcN>sGuVb-z%f(=Y%Oa|N(VZ>s zeJ^FUM<7+64`SEa<47@HhJUi@`I+b-SUSase+vz~O4~HYE zega4(hC4j=Jwj1ZTB5tX<9t_O%>0#&@4hOX7ZVN~+_CxcC7Ya;a`F=Dp;P^rFe%WQ z+m?u3r=Ap$I&tP)qBI6G@H$?6oZxAN6a_OSl z$rJHP(C+afQoRK-m`BZ7cD()-hU!~rip}fLTTlIDIQFAbsI`ucX7 zYncj3l2E54kn*>CgC?`3JJ`2smLknW?R@s@_t;S12p@Q1_*E+C{ruI3F1vN3EcGj= z4+a)C>s`q~Tv9rn4hAb=!SOyjIWwv^7}aVux)&u73OBji<3^k2@&(LS4Q!xq+6~XI z0 zdj4f-kJ3qH&Nu|Zk#kU|QUfCwFDda}A}?_>(m-d;ZA<_1=35)qu9lZnr`LO=@dU?$ zw4uaH^z=Q%ubR;#E#j9PB8el_BemW*YVL~W54KD9UlMuYta}+yQtG^_l47G?CzoH9 z!fW7eD3?M?H8lL{0Kwv1Kh@slIeOwGpV!svbYq5B#F@UO?ZB&M{>oDge+zi}riJkQ z7n-lFU9w3OuYrKYNeb$e04bwhf9bdy9ZAwuB=uh4iIb;ZHfcgyegZRJ7z&8>Uy8%x zTxo_{pFo{Lq*UMgFT|_5YB;*7E;FAqF#bzfSQv3iLl6_jj845L6Y(l3a1YIzH!DkBX_>r1;iVKTzEwdjZnrQgYsO?6-z?U^^HKzs z!1^h^rTt<_Aq_Au`C$pKG^-p|+Trn1biaGu@JJycUVne0F4*5sDB-_khLv?aIz;X% zHAmG(RWjG0kqY2~5^o>AI=$p#DRR4$}?Kb0UZsUFR@S{ZL%ZiI zmHRyosp2FhWoA_AcrODi8P^U=U+bbMFR8GG6e%R-cu9ga1W6&u%j>`OFHKwikilMv z4{OMhLXy#cMSL9zUMn8PgcYXfp-c)1crCd1kzIe-5KWoE!{g;?I^J>mTO3#{8*gb7 z@vLY*L0>qmNS-x$d@8COz3{#*?>zU2bidkqS_4ElngpgB1 zffN#_UyZQ|KVi4%oHo5y)350y{?7qRl#IU;2bS5Whp&L|F=&|@06!&GocThKH$cIU zUPtJ(gj$^k!I_D%5sJC`H|zBl2d0B}71+<5ZxeX9SE_~@DI}CH-1EncsrM@&MW`73 zpx1eMs%w|uJO1Z$RM-P)Qllv=&Tn#eWW9HKApMkBLH%0x_}2YzJb&!7k2o*GY_re4 zV`KUFspwDqfwW1lt12yOZtLWGTu$P#gvI$X-VLIJG^Bp!s*SaC7ajj%|JiR3wVyi) z)C^|purU)xOqg1I#dO%AZ)Yi=q$9PX%3PVxr8nwGi^<@ym=t<+o9uFwlux_iHuw?V zO@>UV-E2aS)1#S06~lgLOh7wGSsKG>QVxqheA51hp@xqh(1`mn{N6;!qfl|sLP%4F% z)*iIbcDviXW{;WOS^wLCVY<6>ZMQLenQUginNENG=0D&6|7{nKMx)4M((wNqprXx} zb<*J+92uRkJKP?xMx(KqO}W{brM994`MD`yGtJg;IMR8wtK-VG@yV&gqY!Vo*;(sX zuUxmP8pkoU7f+}4W?%oIV}HUx3Ogf_2ptO2bSM%Ivn=bdPlN(gQ9)jLX|dYtr_Fl& zE)kn4bqvcUMoZ@F)zY5So{p^XZ50*$NB9uI8lzQ*Lh{MDslc zowhhXJMm1_RvrrN-ozwq!lR&syU)KZwiWGZ*=;f!lU^#qvSW6q&mR8U$METHtdx&NfLe*KNq0syk#b@jiThS*Uyesh}-J6^A82Vkc99kcSEgdt{+Xt+G&Pu|%3-b-P?Rj>3qF#VFSt?pf2B z5~w1p5-8UQQk!A5Zrrf8bfHb+G>BAR;L-DhW2h3S%SXvrl|y;%ox#yyh}LOIv2#L9 zSok&^VP&h*affT#D`}+}=H$5!-z+#l1gihv0#GlJsae5*eGCj_ZW@_WA=b8wmdlArzUJE2OOLotOIt z2DyFZ-2TCl?+zZ?)x0f{3((>5skjsX4W6yL6AswXkp!4vgOL_Op;=AFS=Q?}Z&#ER z8x01Urcaz{|M9nD!lQHKia~`fNHeg-DUq2$HR=W9%1uvUhDM{TkD}l{CSEHk7cv&~ zlUf}ikOBAmgNN!0S*^jc=$TiPK*bsaMqy4S!arO5Jc<(}6iP{bo*x{F-PxeutF3HE8Cp`116A?^Yutpd(;MK`=kpwe5V|NfO-RqQVtbl{C$C_YSP7 zS<(1n!-m>bU+>%Rn<=t@n_XD0AsTj8FTj~;T_Ma-a$3?y7niVILE35`fS_`uw`StG!!yZ_w76W5M92x zd7$;667Epvad=hEO;Wo6*YBr(KXFxLiMXt_o|?HB;F_TQC@!bULM>Y2hlhiY@M-R;;Wj z&v)gRjRq}AN%PJ~-m0Xqfwe+i>jZOiPyZWjFIsq z-&#m7RLDKDZ|`u=b$AO;HEeKeqX@FJwytDlos89_*A--2#~m(VCyci(51^_4cU^+p z^x0Qe|M)b5QPmz zu~l2&f-T^U4Upb!ee{-jb+9O2rnbV$+gin8i4qec!Z&t~zG85~$!&bJ*ra`dNt2RuH%nEhKXw8PK$yY^U2 z#%roZPMdUXSxK?ng=8n+vATPDw|@Th;iD%cycgPzytUzSj*Wc71I4p91nvO=o;b=5U!%vKk#bU&jCb^=!tFx!O`-z8_nN3ES3d~NP zV%>Z2@CVz!3WX@aJweG(Fc1m`0V~%&g|31J@4dUWdMws5@+I%EhQpCBzWL$1ox271 z1dhQ#fC>e9I*N9iZNa>|rcIfMwT!~aJFIVi@QGke3LFD|UoaqW`nvU|>G#c@W6E(2rHbOHf(yYv#Xnbw{V#9c|9?j=GmvRqI~(Hdxw>kVl7|>$rr4_P)Lv|ND796 zr~HSSecLT}-#JUC)nYARX2}bzVmyU2yVuhL=X#!f>^AF?`{z%pt;SuzjFVNYjm^jZ zx9Z%?6!LONu#8_OO2W?T#5;QUB(& zAJOXzcmhFxFtte+i}eK(?Yu}NYB7oZon;9tn<*105ysuCw9$T?Ya^DFm&@*kF@EzyhEmKdK$cq() zDV(PKUN6_H&H~31tCmY{nR)}k)(*GeJe~wknaGG0g((Dj`dn42!JvQk@ioPTE@?-G z?|w^rm*8&FJY^ymRz#+7YUcX-Yqi?7YgS5TO2=YnFI*JdO|qvVY@A*TNH^AAhV1no=6UX{Z5W+>L*YMvaT; zd$9RLWApKGRU=W36QuYCYWZIkpYs>Hdwl_L9|^16OqnoaU29h@MOi}8$J_Uhca(#a zQIAy5fTzF|9zeTTI@XSh?kq4(rv5-93RWt@Io-{~8wjFcWjswjm5#O0>6lVG?uT8w zb$Wy3gNV<`Gc71@=c!nk_(iNq;7ZcdWRNO>aaAL}`1;?_e>WISD8~_#QnW=>YNe8Y z2Pzzi!k1U2%Jj%7o?iO6Opn6O_-o?*$oQCuLSZn-y9j4u4O0I~qZZ~xg`;YHW>^P$ z$^=ilHQ@6?wJ)Euvt~|5TvDkLp<#f^?5vg6QwXV1BVoPJ-f^W&vN?P6v?;S@&Okhf zm@7|$p$wW?T%JNmH5%5YW5?M~Wpehw;pSN>%Tp$L9f^eX zn;kn-wt%w=g+hejeYSPrcE8Wthuhguh}y8}z10uipD9^p&Px3L&>nyvw9iCFg?Y~1+n`&_Te=j@})77i^g68RSKo(@cWQDTS+TyD%lL&B)n(KIbM z3SQ)}5&SKIUa!w;P9xpU-Suy5evkj?GCBL|o10fIzIQ}Lnc&WuddeSY)A9^}B?GE5 zwFf6w=;EaPlNvGe?)AJwF; zq-HvM2fUt&kIQD!Utai@1}l49iX^q+a5(L$Nn}Ji3-rCcJ&{P5jzldsd)m3IWPt1& zo8O=9==8OphNl2`^1|ORFXhTplV0btTar&xu?`&TBT3R?wRw7bB!6VWS;AoCBpYA5 znqW#K76^HIy3JM_kFyG*Z)EtGul-VyI*#t$v*oW7?s*~*jpf8sU|L$(uZhwRE7$lb zsnuC*4o{Et5(oTV@Gq^iNl%ko;4y6Bau%4@5T^?jz3h!ZcJH>0#tC;yE}`TA)AHif z%R#STfvXRSKU^_$e{Bk%uYvy$5@2}hNW_`oKl${4Us~}=E98BZs>vQk^6#j1+d!ytMijUP~D70I- z2FBu8#m}9fI9puk^1+$j2V@n@$T!0j9;{jZ!1|5vq$QhlR!u}}iPLt4!1WmJJ)gmU z<#Se}Qkji_OBk7tPO9SVEk$ zzkB-e%JTHR%(S!9X`NLPv8jemmnOse^hk0RXjYaKs#F5gGh!0|wJfZgqf)7M)i-4H zPJU;G$UsjPq8p1k}ZMz?wU>0G%jan&X_i#W}LJF zC7s>Z&;U#gbkNf_DU$@*v#saQi#23a^?lF1{I8dO zokA9^Hi%u^@lT~n1J2@IBs?&j?OuLo`+3SvVhX6S>DV~doPxAC%ZAsjec|I*o~QcX z-+nrcVBt&dGx~RTxC`B)*RWoArkD@ZAEo< z=Z8&!&f2<1&`Zb_fnM4`XE{A(Wx{w2H%f5#^d32WlC(HR-?{YYwtoyHi_+>k*YLek zrLMW_Vf1pQjR4jZX9YY>Waji~OYgr2u~@*g@#v)`GkRyqn7dasZG8==vjowy_dhW@ zDwDIK#uON5_Z?^yWP01pGtilOe1WDDr`TJxmV$({Z$*Om>RCCR6@`^?cAd{#zn>2) z7Ej~zrk!q`-r)E3zckJ4R8O5t|MY2WFgTmR2-uosi`TzJ)bBr#_EjvNCg-A=aqcA9 zAQe7!p@Y_%fNXT{=P_@;dG$PWHUq5jL6B9;*KOEX-;hccm#6Hx=pP9#O%|`G>;PF`Ab9FRYrmEMKsN84%@}K9;O>gEa(H@W zyWfBK#Ho~_oJ1k=-C2pV3yiZin?)v1i3HOFO-Iu(Ws-1~-ungZ?f2e1aaJN$##zMA zCU`yF*LZ}JX(C3eqjc_y=8s<-wL`r z*stc?*_>fT@>Hi~n8IU?$vS$@vLhdD$SY@agB8V7yTv@zX;-plP=IXQ*=-wx-JR?` zbLeaiu%dWsHJfXys%Sdm?LT{Fuou)l^~aC?@@&YT7j1)VV@2__$XQTTS*cPfRVuC7 zV)c41ed~2PZFSWsy;i&M_v^O)?YZ8IxvyuliWS9EU^;fh@Z>T#QmZpt72vE!qh^@G zMqAO)yPtV!%L`BD+}Z45Mf7yc@XD0st|X~-6gY>M7VBB}8v(NU;B1z#a(POH!}|_5 z(Y*KjO7S!qrBYE@S~76%Bp;m323DSHBs#j>f=mZ`N(jxH=GdUvoxkG__-@8k(AuWVt*g)#|e1f=uW4bK^qAetF&t))hgBK%3)luqOXx4i-<@k;&O3Uv9D#4=WgU4Jy_k6&^&M zvLlnTN4|Pz+Op@7u+p(uYeyH}zZoyLr|ih#tmne1_U1iESbMzwNL1h+{uw1Zp0Xo{ zvmM9wBViT1dr?Norl;&+ch-0D91>Ps_dX_a;VCz#9;3+#;oHf{7(y=1m_ngQlPubyjwxrM~cpFjYh#DkY zb)<&*!<`b6Z=SNl<7`WtugGCA8%dr?xZ<(bAz?Ke_0q8Br>E?2IU9@hUAXA)_J*t` ztx>1eT&`{5>}*9WG~ycq@nwQSrODs+0i-eFZ~Gr_{xl{UTviDV0NAj*P}x^50W-7-v6v`L{g-Zh*!FnnTGJk+Y<% z?&%kq$EYmVs;)Zp0WdEANbSyZLj{}bR*w=K}JuS_KOwIkorq^PQ%c^ za@j4=>}YfM^7jr*dR>XjKDd}N(dhK^p850nV}}lYyZy|ey?)P?^~q*?LCMIm<8HjY zqGl@lEqL0kc8kem(06qAroC^pMy)C?uz}ZDJ}Xx#8C4BG@WAKp@OH)P1cTLKElhu_ z4{Y55UP1MLC=f*>j)U~8jjk5etZI9>D4bUFV_)!0*IPiZe@TT&{G-90qe3W%)^ zaZF=t!w_~70wjd&Z{PR%z1&Q=x$o}h-uGU*`Bo~VZcffSd~@=-zu!5(bDuJk$zZo7 zy_AI>z~75*8=WWJHabuG+cDY~2#&hk_}5i499oUKu;U?V8XJ9cXt?`o@72D3_`>7$ z=Qgle%`?i&oRy9_HPv%#s`EcWqNbnGBV+DQzc_LBQg<{OV{QrV!^efL9t`WyYBfy@ z=P$c^@k~cWe#S}Cv@tp!PnQkeaGA@AMBL}~V2rD~K;-A1+R?mdp{N7ILXntUF4GB0?(=Ol z%-MrS|AgmtW}~64rD@Ho}8qUVQFp=gdl! zLB9ySZ%%9OPmx(S<>g&_z;9@Au^uNN!Gd*xQo8!^zo)ya;-@HMq z(Fh(Sz`^AU1S3)AW^$R#=_uv3K$s_^naRNFa<)yt&m1W~ykYI8wW|e=Z(IXo9&dm> z%Lh!?ILi1g!{)Z$`ljIiQ|a{eq0v~JC0N8Yv)nFhOF>$r>A1{G01dj_Poq}9@XWWH>g!PY z9~gCWaT(?^xD1houvd}LXpRvZvyzEKG)hbGM;=;_=<<-u8wj)9`Y@qfCQ2%!(YcH( zM4w~>m)Cr21ybjcnA^{i#A66tCQ2%!5xI;j1zC2SdX04D(j~jLKZe-j z(owPJx$hwM43Wkt)y6qd=v*dBWTQnP20=2TDZ7|J^!oXyccAwhj>ghyrUesGxJ;C2 zMvF*{smgjSmn-n4=Peu7)i|rrJM{;da!~;pHmk%jT9inRUNXJG2>;YLD<4{WzbHLM zV$}4<|2r zV6@m=rjzWio#$mT*|tsV5j$e_F~n`(omH_!0$hfhK|GN}GFmb&)9UNf=W1uyv@{}Z zouo4?o4JsYCsQe&~F?KQl#8JX$ zoEXHw2FYl<)w1Efm2d9*oyly0KWdb&xXT}8PnyvMzYM`f=emrcM;(jm=Eq~vfG=aR zSo7m`S&1F72bGeY3Cv*$gC@C5x{hkJL9eT+uDagW@AG=h7OPw?N9>SQZFe;x_MqYr z0&rZOCjS(H%Or`Gup|?4ug7Jzl}PIKkHKe)Z08_dNTgfO!or-xzjrZx6o@Zy@9y|5`4W8MGSx_y@5hjF}j?;Ff?i zqX8Oky!{)x?@GrI@cQ+=`(Jo!8!xZH5tz$@UlgnigroTGB5t}-r&TBv17mJxmqBIL z>`Jddqc30S`H$D%AksNkQZr=NwnxfKImOhxh`}nN>8w&Kl{n~WjmB3#?{2DJx#Vu* z^-wtS@qf1;JbaAH%VaA*JuZs`F(1t9SAYHXo@bt9^&0;C2gW?&zB+eRl}`+h+UUuZ z&-Xw2?ARyA?_N9+Q~@qdojJ$rl~Vj;J_r-xvz%>BCmM~tx&ObIc@1;9fG)#ap4>g4 zHk!Ed8HmIV9{w1^g#X>~;&rx|(VK;-#cF5u8t3)S2bOle_wUJAxOU~1+EtHCeixC; zhys-3bjC$CI(Ow$rBYdJ_JGgBG0vwHM_$8AK(o~NjP`om@OQwvVjdW}{^z})X=K@j z{O8k-Hz0_*Cjw(6t7u%4a9)CjJu4DS3`s8 zRvXj2Heulw?21BmYg8j$r%t@}a{bmH4|;i={uEabbk{h_6pAVT&09t@??^!?W3t$M z9yba@7R$cjn*&4SGxgv#iPu03n9Fo7XO&5hw7+9-dC)w6 zIVSxoxk4@niy_8fSQk|CtrQT+brbuwk6Gt3u@JlOJ(8|0Yg52w|vD8VP1pFGt0869WPHQrQEh@z1?a#cD#e{ zPjcb)s^x9l9^Ocox#hZyt9oYTPhNVF#A|&fy3*t^Dft68of5`tNH@42BV<+f_OfQx za+}ri-XZeJGOL(*-Mpy&J5LBKVJ7iflZnrX-B4!W7bfVjG5mQguFKeDcn6^Lczpuq zH65?D8qKp$K7lf_NnR&|p4wQSGLsx}hn)_SGABgkDDJ!lVuUniipsZd|P!x0_2Vj=u3z(sglo z9rDe)Z=2LEW6Ybg47{e~GEt|`p1;_2Wx>3;h~vZMY+5#FRd>(v_sPRR=k?^4e-d_$nJb+t-w?)&0!W@^bkDz7o@X6NUL zNO19%?qSP0Wo^|ZuAe+?6*xYn-Hb71 zRh`9R^Z(^ADY_ShAt&B?x$WtnpnHu}@h^(S7=6uWhKtJ>X3%PCX1BVPH1RbWLjuFS zr~mL8I(15{Wg0AZub{BJE{xF=r^cwN#JO-8cRBk!jcl>QlpK9VMfu!WPHfipfNS{7 z=i={y3FdVHj7H?L-D;_?t(`1DCg$ih&MN1OiMPVK_vs&)N+j3=6Plyv+h}Ain}{ys z!gF++QCH=dvi07&aXWmbW=P(1^t>9)5XoJ>dW|D7a*OFfc8dwGMkEQmresL|bM(AE zdY+EUp>Skqbd34Oje7kAmvb~(^GPXS2z-`;*SywL^JFyh8L2qq8(d+GE_10AC}KVzn-; zolEI5O3kNKbx&+Lx>QCBJM9jnZmzHM2ZBna0&akmXUEZNKIbpJ&p$St=Nw%Uqft(~ zE97#Ug_a3o)qK+NTDlxve50j1?JjQ3XP$X2veA5>Tf|*bRMzH`*J2ti-SaV|s}j!} zuf=@yJY9y3DCP_sU6S&;|8#p*Q}#Iv;ut+$xJ)PMczx#mU#fJ*iaYNT!RSaVK8?6c zC+TwZ3rF{s)YOS!^st-ht=R-i>eD;9k|;-y_{M-Cs78k(vD}mY=#rYtbdqRI)ph*> zs?nZ+_|GTLCoys*1+RUB*HDdSeS22EDy+-6MCWzLHHc(%9A262$(+2De=gHWTwbT* zQ6!^T-#v|&ieWAjB_cyqdQ;(R?{G)#~DU#7z`o~xElBB2I5yg_DR~VH_ zcCS(6XoW(qQYsJuQaoIy6GM*PI~bT*VbHQYhTA@C0rJ~}=(Jqkw46@G#$`Iu@j97G z_YMTCCXLms(NG~98tBVrmCmk5HM+uP@dv}gRyn4N%ed%xjb%6OV($FO(TA@(L z(&?f$FxuIPA;3rGSVq>F2x{ZUEP9hfMqcNKPv zKNRK_P!}r0Mi*|=lYqFWEI6eo_>s8n;Ejv<$q`Tfl0av4ly zQQrNzu&SKbu;s_ExcaYN?D%B3w`ZX14BVt-GOW~jM|Iue`EB>$xFAZ*gvC)}1tyGn z{kiYx08yaTXt0}&lyw@@RN&_Ft-Cok7CAH2Y1Gb&(o`xPjVBVxB!t*{tp-ARnDXMj z(6o~zDL72q@u#Lr^^lS2sA5^`_?y>lqw}QOM(0WY2Z3giC55P#=Kufz07*qoM6N<$ Eg1_Bs%>V!Z literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-60x60@3x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c981fa4f2b4056fd5b6458566b5b605f2288a25f GIT binary patch literal 6095 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 V6y|WWP7weA002ovPDHLkV1nY~&|?4q literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-72x72@1x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-72x72@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..37b8e7cedb7a8f092e45f5ed2f311526a8ec4105 GIT binary patch literal 2941 zcmV-@3xf2CP)(v2?HchY8)2`^~9b+4TL64A%qM~Thh{W`Ujm%nvyh38cHWaQ`(dvhH`|< zCT>GRni-&mq=kZw$0t4{TlZldyHbDlVj=IYR&Up`Gn4OVVDMb`ll4^&b{{5_Rh|p-afM>6e6PO=?49bX~u%w zS@Y)>;&ORX+L{V5k|eKxdF$g(KeszvtQm%EcKF=*@BdDmyHr|IRJmfAL8qNyqmvE> zqjch2qut4Z6b^?&!9Xw=B#2O$Bq=l2G-L@AL|x7L3AQ_lU@%Z;8bA5$S~JT}1mW{} z1Aae-jkC#1A1kk3^Aya?iMKvkU|<{ma^mdWwsu;2Bog*|JpN%HEj`<0+*DgVx3C~t z9hej_hs*um2gmy@gS7NeFz9wU!(oz^UiGb&HS4OxVsR4tkOVN8a<^LATy77THDgA) z&Eb6a{iDo91ryKha?lbrYSpf7&lcwAp)?c>5yOEXNrqujrb@&Tu~;FO!3AsPiGl&u zpXyKFZfS#Skw{d#t`e3NlPVMnGO1=x&)&WLxr8eUjEckKv$;HhU}#*|#o`=OM!ZrJ z0*j@>My=ej(-)Z8z~Z?abgI(%B|Em($)r;5CWigN-a#7-5iMOLN||X)2mcb&_FzMyeRF1L&!4RoH!GIrZMr=yO zisf}R-$_`|=MQw7hnVRU6)sCK)Iz|}sbILgUQcXF+5D34R=u{x^xjLP}>9oThYWuTw3LHl%<#2oHy%dYV269^q zdJ)8Y=C?|qz(NFlCy9-Mp|nC#QTGK2 zY{{a9AD;S1hAZLTqvU6mmodRu#d^2|v|v#<_8HiCDhv@!Dovd=eOgOfhgNS8%vM~O zkJMJ2-oy5n1B^z6p&O52Fhr7s({2;SHYY!K)w0J?a>9s-MIxpXgW0H6DOigzso)kM zfk8;p(cL{-g+Mm*;E>zv(YV3fZyXfI&K-JaH za^tzh>KH(#bUn2D5G?A2p-<;7HPK=Xra0Cc)ZlTC1kozBhQuv6bq~>G$ z7uM_!>T?p#Ktvfdsw~5Uxgf#Vc1#c0>^A5+Up8?H7Nw#tV%c&qb6!e6^(7J}zc~GS zW5sr<-ZXJ4qd{lTs-j;d@%DkxQRpsTw(lYw+Yz_^Yd0NTasJ6<{Q@gejLX|zcwlmp^G(j5G z7@ODp_ru1@7bJ=V=k*YhX_bno%@B)4VEVzb!v!<5M6czlE*=}ywW0dyiWSSLuQR7- zm(D95O&>AA5O>koGQ-x{m@A&+BRsZ&ONU@ia>O;>Yo3ZyQKFsW z#_d%afGemVAeOEqpddq;WHLB_p6^=3jH{Bu_`8LeAqPYJB^J=1-gBwrMtIpX7)6c22ycl$um2=e?8#t>%{o5 z^`3n@3*U_wE<$D*CzjfyY^+qEC5sm!QiUUtyKU`ukFTI=OUp-xy_WkJG8^nmZq&bB zzVVgxyb@HJ7_nCkY+j%5!;@#2RAuu^wr;3FsT#~pdrzO$KJuJJlq$`y+I0JGhX}VF zW zBr5&3=-=nU-VszpHZthH_UG3g-Mp7C8&{>@duHU(eUy!&LOG+3jfEA;k&S6rZ{MK9 zg~=3>MQaG2Y(&5(fGvR~1vaHZaq`^7B?pXlau$zDt5(gMQyBCQQ+85{N}pcy(>IR4zK0hZx9=7X#(E;1DoK?{#6-+d<`|VU9u*~ZT9yDd4&N>GJ&!mi z(m=JKXwHA`wgyLIZCF<@1EXWb9SZ|n?cO&}|MnNL>rJrl7WAG6=ZQ4Hloroz@9u%I z%bhtRx~@=S;n6wyo7nhGuf&niobC%BxSY zN(vhfFz)A9@g(5n44W9+qnm!7mQ#cZHkDMAC^iAUyZPAuCto^%3TCmprjm-1Fy9S! zvg=v{5?F{Jtxh+uK24m8k}%(GZfQmWLwrRes$@}765zYNwgDtCUXL4vok(+wukVhK zBoY|<3j%^qq!WtWcW0?_IZIp0G$T?E5O4oPPNY%9^Z`9)w=qqrR!V7iJ|lktQYTcn zob_#)Sn>73!bD?>M6muLuifp}D5Y|#Bt-;vE*uJrpD16A1SS@XGW41OEBzJosFG_f zxJ9v@dUJ1odn=XV50L)AgQwnNiDb>rSCzUn)M;bTsDdHF=JGIql88k!veKu9iW0EZ z{OqmI>fihFlk;TEEBRToa#wEJWy~9S%Ee56N$#tCcu>sJ91UpukS>dZQ}ok|~sVWlLFq n5@Nw%e5QVg`08u>SGE5K$}%+Kn*;~$00000NkvXXu0mjf9Z z7X?K_K#<5|7nj9d_WhdodwOQ>H`8S3o9XHPclW=0X4d^yyEW7EpYC=(eEzxfoT?4foT?4f$56~>{|bg)a%N!(jucFhZnX^|j6QwfT&2#sa%=xu?6g@5b=x_~bN7`M&-^*gib_3B0Z- zD`{`>5($Tb zfl#96WNMs)l4g_X8=E&R?PwQpnb=gozyiVG8^1lqwGIR`B{+qGv1pXFaCvFzeQUq6 zV(IM$y`Jx7VpgF7gKF@FgTF+K07-#Y{625M??WjJ)!_Oy_iXOEpYH{VrGf+ov|f7k zSLn0=RWRTOT8NJ(=C{u4+OV#*xlzD1ilxE>23hcn2VX-k4>5(?eV*+3UYSEDU}M1pEPHV=ZW#_pKeLt860kEDF24TuQN+Sv zDUaJ3i9}Ee!yRkuBVB7(-zDJcBvQcugYX@l7KDN>$26j`YUWfwvuCHxY7uaC(kWkn zK^$@J;^j*{z2w`4Z7rSc3sQ}+oV*o{5^kp*k=BZ(OSV6@347E|M5F#-I24Zf{@g<5 zPrlG<)JlZ{UKn*+twv?k>6A(Zrz7VDFrfAPfrBo$C$*=qfAGXdXP?=%9hhD@X5(?9+yjHC zZ)9wO_9NJjP7CDoxFLvVEmmT)?cckz8eaoEIBImt8AY=-$e`2mqb18NFz^=8g4z$y z(E|QZD9Bo@zP1Kv;fmeCSR+$*kDvX#DFLmT@)F)>%q1|4w1`Lq?8RElYO(C!yUSE$ z#Bx&5;KX#c+ZC;VR((~OkTd267+!BdK40JP zmMocg1p`dL%1TT2?b(Sj%79FZQScmLkq7-@wg#JJss zULLQvNJ#{YAv@+RW_!uy^4;6FVx%QY+6%p~knEU2q65Pl!BeGB$c;rsJ}-^QfYx`v zvj<~ahAbItxO^=4%apK0@U#*gm`JpelIsnL28&E)8}DD=*3yLcWK&KLVq_>hJ7$oG zz{K+wReD3B(xWn~udTt}1`l$1k?bX&w@8Tv410E*T?wBl6iSaf5e`6Q_|0wDQm&Mo z9v@1hh8R&snnVF6Mg-3+txgZ9+%D&qN4jd}RAWCr%0m;qRwF7cUmye-1%6;+WXCAd zXmwT9)hm~Eig9osLhcm^g~d4a%?k*G1}CPBIxS{k(tC@l2oZy`lh3K~9vLxNhM(1_ z*Wx`jdDwxmNm()x#0gBK?3k0t=hXXl|5Z-T9t?-E10%gfz7F99CPsG5LvRfjF86dS zXv1|t^p->HwPMO!DdBY(|1orU)jv3l5m+cpAeO`njOwkFa01)9@qvGM?s51ff=8_*FB#MG7ad%JNdPQ9tdln=Hi|jRxb9xeD*tWTirmUfAOg z+RQ>bjL>?E6y_*#$>R3kz4yM`=`fisTAdE>!O_)(6_`%T;U6EwlLCQ3l0Gu!$o45_ zU`7Mkg*NVSJ7qF!PM9s8-^5!|zSiSc!E=x8<5u@bo=}UomQn(qLfGR7O5hG4kxhxJ$WkIN8mGsLZOx<)(2+A zR?Bk1vow(2;z|nyb{v|p%aXSogI1$YZt$A6Frv4}qrtxbY`~8F{zOl2U-r-AZkNMS zY?CIZe*NvE8ns$TV+TKPr3vB`*c_fjw@C=_jCw8D&ScP~?nLO`0u`GQk81G%```~} ze)%TL>?ZMe+~u&FEydFK?3G_13P&RRe8$^b3w`H{E|lXD*q)Zd+Oz9{H9us<2t8X*fNw%xA|C-I*-K9+v~-!USA>2B!vE zWN%;KZ8BRqF;h+Ugs%Lad^`R5<>lMHr!|_%w|Ps;Qe-Hxn5cW`fzduY)@U>kmqVnN zE1#ukfx@8>ye%@B5zkaEa|EwkNa6L24}AFYcUSFv4wzwy;KdN_K#Fu=%)LKJpShh5 z<~asA2_>hddMhRJt+B|&>NB9VKsK0GDCoAIdG*=O$Nz5B6V5|g*}6EU17q#03qFIm zJn0NvV$Z2FX^|p#GW!f@waW)+k%G_89eJhXOB-d#RjV|Dn6R?MO8e0*VCX%olQoz% zc?ZJdGv=JSv3Bm|?(S^gW%e1Zx2W=bc3Q61*_PawC(INIc};mKL)WXDz_|9T24-@F z0%Hu4EvH`AvGB2nH{2K=`PctE;BwQCJO^g6STr*RsgsR2%STx`xG$d|y!O&nUsI@Z z*{wmXQbK%TF&daBGfDvC*ZWg~7^JDb257;H+Bwxf`1_~7|D%7)#tdQ*s8^}6eywZ* zg%&CQz^7AS$Gf-Y#Aix{qSR_iiw3hvC8TGy@L0dCrRlbL&80RQq~txl*B~GNw7ZuC z2DEl;zBM+v*lOAT?OhB$i-g0eSRc__Q~@*l`J+dQN>$RRVif^Y&SD zL){ZwH_xf6Ozi=3vgAqu2Y&uWsm+@C>=@B!Ef#sRf*UPTP&dlrFT5!n#HTReQWWz)m!?)ft9N0sHJ&+OWstsZCfS*6@HU+(7pd%Lf^ zFOw^T`z$p|Obx#d*2nrPvXM<7GjyMsii}U~ezLi-o}mo$PzDB{RVzFzEnf8I4_XQL zndl=hu`ol-sW*2$$V>}Gq|cuF$%{VUttnN?V$MeSv|Ns16uJU;0` z@?Cc<7jlY}z-Qmtwd2`;e<2=EGynpvxuMaJQXY%N6A2cJMC%vae0d>V79)|*mq_$wI>iFhQ_>eD~s?jL(Zus7~M=NJ%Cx> z(XLUec`QFeRV+#~KBujvS;#SIb^ZLQzB4D&c7`I+kqKW-Ws$(>gA__mjeUM12GK;E z9ShpRkqB>}1p|IB-CUDonuS-xS1;1;2cHd&VXGUNb85-FMT$N}0G~OWE*|%@bXxF# zDCSD+tt-BA?wv!lX8>jxeU>c-5ovxR24&6Zc*G##P$=D7V$uSYH?-aR^XD4N` zm~H6;@P8yh1WzlLRue>KWFubIkCVUUg-hLH00T93-YK2Wx<7zef9|S{(tC>(dovd+ zGbV3Q^v83bEW3SCb3+}c>qAu2^3{u7{!ib0nKnSh?6WH;uMb_U+WDN)h}xqBqmbGq z8JMwniz2(jar)!)VgQQ}#HFjfs**WP>mKVn{#rI>7=1?e2ch=6l1!)#$+S6jwg{e9 zt5@Bz^^q=aSBD^Vb!jFb7 z4lVy_IW;F*3vX-NvE@a?Dv4r?)uh`rSuuM zM>VOOnk%inPkx>IwXw(_3|;KL8qS!p9+*j1HPEP;oE!4Ivp!K)k z-o^DStRkY(!SQLOS|g)dV!%|}YFX9g{O~t%x(g$CfN2FIs-x?)Yo+VF*UvN0>r7=-83>j&>$1AqVLw?`Pt zi03V8&+1HOqtgy@HsyFpt#;{#(8ot+lF#^eHz1j1^O>mLO6ysjVg^?Nw5BMNmB%cV zGt6g#`iErmnKa&_ie%PzV{j^CYWW%FGoc-NGJPhcw^EA5M;R&I@)kvwx^LQjTHW3{&rDfQ5tu2J%G5Kw zs*3XFx*GCz+sZZO(uza>@lQdz6*coMr_L8(xUyqe(pzb?NNIJ6xC59~l$E7uk*c28 z{?K3l;~PKPPwTV1%Bk}L7|!fCSrcZ`A_dHB7E@hyW#&h~OtQLBNKT!5V65{z^<4iP zHG=H8kQ@VJrRDbe#;2xH4n>VJXob?VTFO4D{9=$?0z;XV zD-c9lXaU7rh&`+G+-ErhhB&XTL9b^nAj9M>s`A-qxdDbgvBufBT0=$UO>$f|(YsamV?VQ%eU-_?*=ZHFK>Nv(x2PC>3SJ#SHNX z-f_oyl~YRu4A(5k#bz^X%w@zFcbq>lh!nu2oU>ZIamRTQgNP1H$~mjW9(SA%J`)$1 z7^}`?lQd)cbM7+{fz2duQI%Vti3M!td5bEEeRk>ae|2tthI}guFez7^k$C2yl%&k5 z$FF{T`rr>%Z2!JY3}8~O=p^N=T$z$Gr?wAtk6u1qwO|EiV9{vo#!UAXRZ`~E*FJa~ zKQO!78;a0$&BQM0XXVN!$zl))K&Jbz-~uR1a$X^vtMbiTR7v2oNYIZHSTIa8Wd=s&r?;pQ+h=ea!wXDAhvl=k zs1n;}IDv_G1Ivd99$n())Ot&4?mLpQD!17&KZ%r6>#b!tfvHu>2!Xlru&}&El^8j- zxw0NFFcn^4`I8;<6Kf0tbtCwUc}YI1D%zIf1ZLD}{lO5fqZLY&!7Sz&1nS2A5qDX! z!DQ61){ZKzp`?C3PGIm8V?0!zNAT!k_8Ae4k52iVo?wYpZ`9MTvm1}cJ^o0?UnEv{ z$LcV>)_}ugGs9a{G5buGs2-z3<6gB&q1UQ(S|wDH3V9;x2Ash#5eO2t>bl0x#1eU! zqePq8C=l38@)lLhJ|h(&Vi6+j&KQkdWU)T<)DJcKL?=wlz|2NNu_@&6(2M{_(aiG} zRp7Jr-`scnr_V>ZB&;TD@xxF5b5U_A`4)d3R#jRYi^pAFnuX1oRk#s6x?1m8Q@e24 zu>;TcU;YzoVF*Lo@BYhGo1V}W-5NX~O5zN^J5<7UH%*?OO%*l^;zGuSF1^XpweMf9 zpFef-^_QKKSywu*s&BaG>wi<;(3ZAetd@?-5-ZeilMWZ_^Gry$D{NM?k$oK4Oj6^L zJ7Jq1x_4uS!WXqtL9FB~jzAMy-M^ y@e0GLy$KVj@1OFcLMSjRy$G2|B;WmT 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 O00000ssI2m!P+H0000PbVXQnQ*UN; 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 B1(N^( literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-83.5x83.5@2x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/AppIcon-develop-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1bdd2d574f103e2373bbf8dc6b6a0741357f4057 GIT binary patch literal 5462 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 literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/Contents.json b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/Contents.json new file mode 100644 index 0000000..20122a1 --- /dev/null +++ b/gamestore/ios/Runner/Assets.xcassets/AppIcon-develop.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-develop-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-develop-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-develop-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-develop-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-develop-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-develop-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-develop-40x40@3x.png","scale":"3x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-develop-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-develop-50x50@2x.png","scale":"2x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-develop-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-develop-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-develop-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-develop-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-develop-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-develop-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-develop-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-develop-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-develop-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-develop-40x40@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-develop-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-develop-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-develop-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-develop-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-develop-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-develop-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4dfcbf2ebc5397e60b6e3088ee987c987c06c099 GIT binary patch literal 79691 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 literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..adcee5fd2dfb73fd6baa6433c6c515bc04987aff GIT binary patch literal 3430 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 literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ac537135f4192406ea64fd209fd9c689393783a9 GIT binary patch literal 1473 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 BE0+KO literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ba71205eceac6fbf11f949841a8cca8c40f41606 GIT binary patch literal 5017 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 jGuN2m@eocASq%Iycy}p6|Ur?;DPmDJx6M zUi-zH3Z*i+#PjdJ`_5qR-DRD_Ef;v>Q`=HdAqvIDtu6mwV6{fG-nl7ry{4|-U^2~4 zPyesLDvs0Ybh9%v@Uo!eS*n=IGVYV|oe`;Q#md+^Y$ z&j0-DZyyc1`pa#V&X(=94NapX!ylY@I})CI46stAI`Wg(Y&CX#chqliG&GV@VJTaq zO!I3t(P*@rT6b>RzSHyVAn}Mf9*d=GtuOub^}il}D>gsBC@^#dYNca6dxS>|ii`32 zSjZGn5G({3|JYbG62ZcnighsI**~6;V<&;(SNzO$h3E{16~)Er0ZfF=a3tKe5Ra2+ zAzT+O;4~UVst!dK%jEd@Y%qvN9Q*R?KR&R#(DC{)V(J+~JH zMl@Q=*UBx-P>lxtu^0B06s}0Vx)3FQ2k|i~Xd#tgSfxVIXs<3`weo|1v`qzqlRh5{ zI`;ai)um+>w&4f&vjguvcv#9;xD9?~x~8BaJA=2$cbQ@V;c@yV6+S~ICnuvH+tZZrrwAdPFF)Xo7{4sB=R!c8S8n$;-xP z$@@>5x!;hlr{_h3ba)#`{OuRR!yMy)}2a>bS;qkT${1J(068f|} zy}P=0eNXpSUDw(*Q4%ohs!^+(oSPe)zQ;)^i=dazVd|nv7*gnnr?5x3fx$|;)hwEXSQ{T9kBht^ z5?O(XUZ+E#O-xPC%j&ZP0nj9voPSsy7HU(b@No(a2sbdSqcBe+{WKTM@*1}1hMxqA1A@kETtKePeO2lW5l~5 z0x1z+C_4B=^$$lPI$6*?xkRE-*jYGAR)FKNgxPtXd;j=b=n?Jp8xTgweAUi!Aj!ud(KoRbkoMI0IGC=x*VR~CO}bT7^BbD}njZXtW*?+O8cV75msHx!o?Py4heri= z0Xa&%4qe;MoeoY;vd5$Wqv0@mM09KHF~?{`U4`Q>|GTr?vJy!tteP6B;XQizF%7*( zak2U3^yGMj?8iv;=*GcN=wf>Zi4kf{urj3QW>+AAN@?kY&U91j4wgp9ar6>kb?_^g z?#Bn7D=>+tAoVRjprSnjHaAP_UnN7abOKOM{k@IFGq$tr5QL|;^QYxlDZuE5J#IHx znLVO|$uBAbvw~m$eBl#t4yykn)2Yp5dxLDrz3{8cJ#?}CIzu(DSfP{EpHa{7K<~Xp zfy-^{a5XRlODDnLViy5y@GF=Ooa3ykt+tlyWwDCPK@20Bm|q#H(PWZdfWP=y+-i5o z=c^Q8XG<&Ne{`l&PyieEz#{g8={(-63X$+p5%CK2L%#BfDh=Dh!g5`O1ARV3R`b)l zvIAqz!Nfsg#{(5%WC(9qA%KWgZ~Gw7}KdgQAjwL0@6>P%vU z9Q)1_nGI#p7?lgt73LgF93-|r=!emn%IOkEgIqOPN4HdgVPIjVD`dnyc<$R z9Q`ml)8~KqQsb7VQv8=8K)QRg>(ldR?)TocR@ESyDr@UtVd(n!F_mFsy2{PVn@CI? z=!f6^-LKIjqW|5x`&l$FDrqq1c{Z4TaqUXmxif)DKik460C@##%PqVVFbRPjp75oU zJSym?=T28S>NOce30;NipFoua(^S^;7X@BSaQB|Cx|*7|rmchN80S2>Ec>rMT^&~& lw=^phDSvJPzb^Nj{{oan>1n4rC9(hj002ovPDHLkV1j)@KfeF~ literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f16084f7e08aa9d4af92dfaa2b1f303c67dc2461 GIT binary patch literal 4691 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 VE-b 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 BeW+E`HC!!qZHGSu77Lp}K=vIv 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 literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5080d8184a1404bf1978157e886161bbae48666d GIT binary patch literal 6876 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 literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..33443b0b410d0c3bdfdb3e27dca6d0a5046483d1 GIT binary patch literal 4049 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 Dp(47V literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/AppIcon-prod-72x72@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bbbb465077184608c0c288ad89cd390a0ef722de GIT binary patch literal 8448 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℞w5l{Ks3|b?Pxd@VGk=DGvR~tB4nfsEIgKR9fCW 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

c*Adh`nwN>IHn8CB*VG|2tvS?FlC$Zged(P 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 XaBy~46VrAN00000NkvXXu0mjf{2y)7 literal 0 HcmV?d00001 diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json new file mode 100644 index 0000000..c1baccf --- /dev/null +++ b/gamestore/ios/Runner/Assets.xcassets/AppIcon-prod.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"AppIcon-prod-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"AppIcon-prod-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"AppIcon-prod-40x40@3x.png","scale":"3x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-prod-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"AppIcon-prod-50x50@2x.png","scale":"2x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-prod-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"AppIcon-prod-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"AppIcon-prod-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"AppIcon-prod-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"AppIcon-prod-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"AppIcon-prod-40x40@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-prod-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"AppIcon-prod-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"AppIcon-prod-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"AppIcon-prod-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"AppIcon-prod-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/gamestore/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/gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/gamestore/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/gamestore/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/gamestore/ios/Runner/Base.lproj/LaunchScreen.storyboard b/gamestore/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/gamestore/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gamestore/ios/Runner/Base.lproj/Main.storyboard b/gamestore/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/gamestore/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gamestore/ios/Runner/Info.plist b/gamestore/ios/Runner/Info.plist new file mode 100644 index 0000000..28e671f --- /dev/null +++ b/gamestore/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + $(APP_DISPLAY_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(BUNDLE_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/gamestore/ios/Runner/Runner-Bridging-Header.h b/gamestore/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/gamestore/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/gamestore/ios/RunnerTests/RunnerTests.swift b/gamestore/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/gamestore/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/gamestore/lib/app.dart b/gamestore/lib/app.dart new file mode 100644 index 0000000..3774e5e --- /dev/null +++ b/gamestore/lib/app.dart @@ -0,0 +1,54 @@ +import 'dart:async'; + +import 'package:flutter/material.dart' show Theme; +import 'package:flutter/widgets.dart'; +import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +import 'features/core/abstracts/app_setup.dart'; +import 'features/core/abstracts/router/app_router.dart'; +import 'features/core/data/constants/const_colours.dart' as custom_app_themes; +import 'features/core/data/constants/const_values.dart'; +import 'features/core/data/extensions/context_extensions.dart'; + +/// Root entry-point for Dart +Future mainRoot() async { + await runZonedGuarded( + () async { + await AppSetup.initialise(); + runApp(const GamestoreApp()); + }, + AppSetup.onUncaughtException, + ); +} + +/// Base app widget +class GamestoreApp extends StatelessWidget { + ///Constructor + const GamestoreApp({super.key}); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return ScreenUtilInit( + builder: (context, __) => Theme( + data: platformThemeData( + context, + material: (_) => context.isDarkMode + ? custom_app_themes.materialDarkTheme + : custom_app_themes.materialLightTheme, + cupertino: (_) => context.isDarkMode + ? custom_app_themes.cupertinoThemeDarkHack + : custom_app_themes.cupertinoThemeLightHack, + ), + child: PlatformApp.router( + title: ConstValues.appTitle, + debugShowCheckedModeBanner: false, + routerConfig: AppRouter.router, + localizationsDelegates: AppSetup.localizationDelegates, + supportedLocales: AppSetup.supportedLocales, + ), + ), + ); + } +} diff --git a/gamestore/lib/env/.gitignore b/gamestore/lib/env/.gitignore new file mode 100644 index 0000000..45be6a3 --- /dev/null +++ b/gamestore/lib/env/.gitignore @@ -0,0 +1,2 @@ +keystore/** +env.g.dart \ No newline at end of file diff --git a/gamestore/lib/env/env.dart b/gamestore/lib/env/env.dart new file mode 100644 index 0000000..2543b74 --- /dev/null +++ b/gamestore/lib/env/env.dart @@ -0,0 +1,26 @@ +import 'package:envied/envied.dart'; + +import '/features/core/data/enums/environment_type.dart'; + +// part 'env.g.dart'; + +/// Wrapper for providing the correct Environment-specific keys +class EnvConfig { + /// Constructor + EnvConfig({required EnvironmentType environmentType}) { + switch (environmentType) { + case EnvironmentType.dev: + break; + case EnvironmentType.live: + break; + } + } +} + +/// Envied path for the dev environment +@Envied(path: 'lib/env/keystore/.env.dev') +class _EnvDev implements EnvConfig {} + +/// Envied path for the production environment +@Envied(path: 'lib/env/keystore/.env.prod') +class _EnvProd implements EnvConfig {} diff --git a/gamestore/lib/features/auth/services/auth_service.dart b/gamestore/lib/features/auth/services/auth_service.dart new file mode 100644 index 0000000..23e46d7 --- /dev/null +++ b/gamestore/lib/features/auth/services/auth_service.dart @@ -0,0 +1,37 @@ +import 'dart:io'; + +import '/features/core/data/typedefs/http_status_code.dart'; +import '/features/core/services/logging_service.dart'; +import '/locator.dart'; + +/// Responsible for authentication +class AuthService { + /// Constructor + AuthService(); + + final _loggingService = LoggingService.locate; + + /// (On success): Sets the received [AuthDTO] and returns a [HttpStatus.ok] + /// + /// (on Failures): Auth failed -> [HttpStatus.forbidden]
+ /// No data for account -> [HttpStatus.noContent]
+ /// Any other exceptions encountered -> [HttpStatus.serviceUnavailable] + Future login({ + required String username, + required String password, + }) async { + _loggingService.info('Sending logging credentials'); + + _loggingService.info('Received auth response from the mavis client'); + + throw UnimplementedError('Implement me!'); + } + + /// Handles logout + Future logout() async { + throw UnimplementedError('Implement me!'); + } + + /// Locator DI + static AuthService get locate => Locator.locate(); +} diff --git a/gamestore/lib/features/core/abstracts/app_setup.dart b/gamestore/lib/features/core/abstracts/app_setup.dart new file mode 100644 index 0000000..b3c987b --- /dev/null +++ b/gamestore/lib/features/core/abstracts/app_setup.dart @@ -0,0 +1,89 @@ +import 'dart:async'; + +import 'package:firebase_crashlytics/firebase_crashlytics.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +import '/l10n/generated/l10n.dart'; +import '/locator.dart'; +import '../data/enums/supported_language.dart'; + +/// Handles setting up of the app. +abstract class AppSetup { + // TODO(mehul): When locator is properly refactored we should not have to use these stub methods for testing + /// Initializes everything before the app is run. + static Future initialise({ + List? locatorSetupStubs, + List? locatorInitStubs, + }) async { + WidgetsFlutterBinding.ensureInitialized(); + + await SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + DeviceOrientation.portraitDown, + ]); + + // await Firebase.initializeApp(); + + await Locator.setup(); + + await initialiseAppSetupServices(); + + await setupStrings(); + } + + /// Setup any other services that other services need access to. + @visibleForTesting + static Future initialiseAppSetupServices() async {} + + /// Resolves the supported locales + static List get supportedLocales => kReleaseMode + ? [ + for (final languageCode in SupportedLanguage.values) + Locale.fromSubtags(languageCode: languageCode.name), + ] + : Strings.delegate.supportedLocales; + + /// Resolves localization delegates + static Iterable> get localizationDelegates => const [ + ...AppLocalizations.localizationsDelegates, + Strings.delegate, + ]; + + /// Sets up strings for the correct locale. + static Future setupStrings() { + return Strings.load( + _resolveLocale( + preferredLocales: PlatformDispatcher.instance.locales, + supportedLocales: supportedLocales, + ), + ); + } + + static Locale _resolveLocale({ + required Iterable supportedLocales, + List? preferredLocales, + }) { + for (final locale in preferredLocales ?? const []) { + // Check if the current device locale is supported + for (final supportedLocale in supportedLocales) { + if (supportedLocale.languageCode == locale.languageCode) { + return supportedLocale; + } + } + } + return supportedLocales.first; + } + + /// Callback for any missed exception + static void Function(Object error, StackTrace stackTrace) get onUncaughtException => ( + error, + stackTrace, + ) => + FirebaseCrashlytics.instance.recordError( + 'Location: Zoned | Unhandled exception caught: $error', + stackTrace, + ); +} diff --git a/gamestore/lib/features/core/abstracts/base_view_model.dart b/gamestore/lib/features/core/abstracts/base_view_model.dart new file mode 100644 index 0000000..c79e1e9 --- /dev/null +++ b/gamestore/lib/features/core/abstracts/base_view_model.dart @@ -0,0 +1,120 @@ +// ignore_for_file: avoid_positional_boolean_parameters + +import 'dart:ui'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; + +import '/l10n/generated/l10n.dart'; +import '../data/enums/view_model_state.dart'; +import '../services/logging_service.dart'; + +/// Base class for a View Model +abstract class BaseViewModel extends ChangeNotifier { + final ValueNotifier _isInitialised = ValueNotifier(false); + + /// initialized + ValueListenable get isInitialised => _isInitialised; + + final ValueNotifier _isBusy = ValueNotifier(false); + + /// busy + ValueListenable get isBusy => _isBusy; + + final ValueNotifier _hasError = ValueNotifier(false); + + /// has error + ValueListenable get hasError => _hasError; + + final ValueNotifier _state = ValueNotifier(ViewModelState.isInitialising); + + /// VM state + ValueListenable get state => _state; + + /// All possible [Listenable]s. + List> get stateListenables => [ + _isInitialised, + _isBusy, + _hasError, + ]; + + @protected + // ignore: public_member_api_docs + final loggingService = LoggingService.locate; + + String? _errorMessage; + + /// Error message + String get errorMessage => _errorMessage ?? Strings.current.somethingWentWrong; + + /// Setup before ViewModel is ready + /// [disposableBuildContext] provides a temporary [BuildContext] that should not be used further. + /// [mounted] is a callback for indicating a successful frame mount. + /// [arguments] That need to be passed to the VM. + @mustCallSuper + void initialise(BuildContext disposableBuildContext, bool Function() mounted, [E? arguments]) { + isMounted = mounted; + _isInitialised.value = true; + _state.value = ViewModelState.isInitialised; + + loggingService.successfulInit(location: runtimeType.toString()); + } + + /// Set _isInitialised. + // ignore: use_setters_to_change_properties + void setInitialised(bool isInitialised) => _isInitialised.value = isInitialised; + + /// Set state as busy + void setBusy(bool isBusy) { + _isBusy.value = isBusy; + if (isBusy) { + _state.value = ViewModelState.isBusy; + } else { + _state.value = ViewModelState.isInitialised; + } + } + + /// Set state as error + void setError(bool hasError, {String? message}) { + _errorMessage = hasError ? message : null; + _hasError.value = hasError; + if (hasError) { + _state.value = ViewModelState.hasError; + } else { + _state.value = ViewModelState.isInitialised; + } + } + + @override + void dispose() { + super.dispose(); + + loggingService.successfulDispose(location: runtimeType.toString()); + } + + /// isMounted + late final bool Function() isMounted; + + /// Callback for after successful mount. + void ifMounted(VoidCallback voidCallback) { + if (isMounted()) { + voidCallback(); + } + } + + /// Awaits the [future], while setting [isBusy] and releasing it after completion. + Future runBusyFuture(Future future) async { + try { + setBusy(true); + return await future; + } catch (e) { + rethrow; + } finally { + setBusy(false); + } + } + + /// Callback to be executed after the widget tree is fully built and mounted + void addPostFrameCallback(FrameCallback frameCallback) => + WidgetsBinding.instance.addPostFrameCallback(frameCallback); +} diff --git a/gamestore/lib/features/core/abstracts/mwa_navigation.dart b/gamestore/lib/features/core/abstracts/mwa_navigation.dart new file mode 100644 index 0000000..81107e9 --- /dev/null +++ b/gamestore/lib/features/core/abstracts/mwa_navigation.dart @@ -0,0 +1,3 @@ +/// For any common methods for all the navigation such as custom-pop, and for easy +/// analytics injections +abstract class GsNavigation {} diff --git a/gamestore/lib/features/core/abstracts/router/app_router.dart b/gamestore/lib/features/core/abstracts/router/app_router.dart new file mode 100644 index 0000000..d8bb48f --- /dev/null +++ b/gamestore/lib/features/core/abstracts/router/app_router.dart @@ -0,0 +1,29 @@ +import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; + +import '../../views/home/home_view.dart'; +import 'routes.dart'; + +// TODO(mehul): Use Shell navigation later +// final _rootNavigatorKey = GlobalKey(); +// final _shellNavigatorKey = GlobalKey(); + +/// App's router +class AppRouter { + /// Main router object to persist. + static final router = GoRouter( + initialLocation: AppRoute.home.routeAddress, + routes: [ + GoRoute( + path: AppRoute.onboarding.routeAddress, + name: AppRoute.onboarding.name, + builder: (_, __) => const SizedBox.shrink(), + ), + GoRoute( + path: AppRoute.home.routeAddress, + name: AppRoute.home.name, + builder: (_, __) => const HomeView(), + ), + ], + ); +} diff --git a/gamestore/lib/features/core/abstracts/router/routes.dart b/gamestore/lib/features/core/abstracts/router/routes.dart new file mode 100644 index 0000000..acdfe79 --- /dev/null +++ b/gamestore/lib/features/core/abstracts/router/routes.dart @@ -0,0 +1,31 @@ +// ignore_for_file: library_private_types_in_public_api + +/// Page-routes in the app +enum AppRoute { + /// First + home( + _RoutesInfo( + routeAddress: '/', + ), + ), + + /// Signup/Sign-in + onboarding( + _RoutesInfo( + routeAddress: '/onboarding', + ), + ); + + final _RoutesInfo _routeInfo; + + /// Address of the route + String get routeAddress => _routeInfo.routeAddress; + + const AppRoute(this._routeInfo); +} + +class _RoutesInfo { + final String routeAddress; + + const _RoutesInfo({required this.routeAddress}); +} diff --git a/gamestore/lib/features/core/data/constants/const_app.dart b/gamestore/lib/features/core/data/constants/const_app.dart new file mode 100644 index 0000000..27c8044 --- /dev/null +++ b/gamestore/lib/features/core/data/constants/const_app.dart @@ -0,0 +1,2 @@ +/// App constants for native-channel communication +abstract class ConstApp {} diff --git a/gamestore/lib/features/core/data/constants/const_colours.dart b/gamestore/lib/features/core/data/constants/const_colours.dart new file mode 100644 index 0000000..69fb954 --- /dev/null +++ b/gamestore/lib/features/core/data/constants/const_colours.dart @@ -0,0 +1,66 @@ +// ignore_for_file: public_member_api_docs + +import 'dart:ui'; + +import 'package:flutter/cupertino.dart' show CupertinoColors, CupertinoThemeData; +import 'package:flutter/material.dart' show CardTheme, Color, ThemeData; +import 'package:flutter/painting.dart'; + +import 'ui/const_sizes.dart'; + +/// Colours and themes +abstract class ConstColours { + static const vampireBlack = Color(0xFF050505); + static const indigoDye = Color(0xFF171C8F); + static const orangeRed = Color(0xFFFF671F); + + static const transparent = Color(0x00000000); + static const white = Color(0xFFFFFFFF); + static const darkSilver = Color(0xFF707070); + + static const cupertinoBackground = CupertinoColors.systemBackground; + static const cupertinoBackgroundGrouped = CupertinoColors.systemGroupedBackground; + static const cupertinoBackgroundGroupedSecondary = + CupertinoColors.secondarySystemGroupedBackground; + + static const cupertinoActiveGreen = CupertinoColors.activeGreen; + static const cupertinoActiveOrange = CupertinoColors.activeOrange; + static const cupertinoDestructiveRed = CupertinoColors.destructiveRed; +} + +ThemeData get materialLightTheme => ThemeData( + useMaterial3: true, + brightness: Brightness.light, + colorSchemeSeed: ConstColours.indigoDye, + cardTheme: const CardTheme( + shape: RoundedRectangleBorder( + borderRadius: ConstSizes.genericCurvatureBorderRadius, + ), + elevation: ConstSizes.defaultElevation, + ), + ); + +ThemeData get materialDarkTheme => ThemeData( + useMaterial3: true, + brightness: Brightness.dark, + colorSchemeSeed: ConstColours.indigoDye, + ); + +CupertinoThemeData get cupertinoLightTheme => const CupertinoThemeData( + brightness: Brightness.light, + scaffoldBackgroundColor: CupertinoColors.systemGroupedBackground, + // primaryColor: ConstColours.indigoDye, + // primaryContrastingColor: ConstColours.orangeRed, + ); + +CupertinoThemeData get cupertinoDarkTheme => const CupertinoThemeData( + brightness: Brightness.dark, + // primaryColor: ConstColours.indigoDye, + // primaryContrastingColor: ConstColours.orangeRed, + ); + +ThemeData get cupertinoThemeLightHack => + materialLightTheme.copyWith(cupertinoOverrideTheme: cupertinoLightTheme); + +ThemeData get cupertinoThemeDarkHack => + materialDarkTheme.copyWith(cupertinoOverrideTheme: cupertinoDarkTheme); diff --git a/gamestore/lib/features/core/data/constants/const_durations.dart b/gamestore/lib/features/core/data/constants/const_durations.dart new file mode 100644 index 0000000..0c2147a --- /dev/null +++ b/gamestore/lib/features/core/data/constants/const_durations.dart @@ -0,0 +1,12 @@ +// ignore_for_file: public_member_api_docs + +/// Standard durations +abstract class ConstDurations { + static const Duration tripleDefaultAnimationDuration = Duration(milliseconds: 1200); + static const Duration doubleDefaultAnimationDuration = Duration(milliseconds: 800); + static const Duration oneAndHalfDefaultAnimationDuration = Duration(milliseconds: 600); + static const Duration defaultAnimationDuration = Duration(milliseconds: 400); + static const Duration halfDefaultAnimationDuration = Duration(milliseconds: 200); + static const Duration quarterDefaultAnimationDuration = Duration(milliseconds: 100); + static const Duration zero = Duration.zero; +} diff --git a/gamestore/lib/features/core/data/constants/const_media.dart b/gamestore/lib/features/core/data/constants/const_media.dart new file mode 100644 index 0000000..c65de47 --- /dev/null +++ b/gamestore/lib/features/core/data/constants/const_media.dart @@ -0,0 +1,86 @@ +// ignore_for_file: public_member_api_docs + +import 'dart:typed_data'; + +import 'package:dartz/dartz.dart'; +import 'package:flutter/painting.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +import 'const_values.dart'; + +/// Wrapper for all Icons, [Svg]s, local Json files and other assets. +abstract class ConstMedia { + // PNGs + + // SVGs + + // JSONs + + static SvgPicture buildIcon( + String iconReference, { + BoxFit fit = BoxFit.contain, + Clip clipBehavior = Clip.hardEdge, + Alignment alignment = Alignment.center, + }) => + SvgPicture.asset( + iconReference, + fit: fit, + clipBehavior: clipBehavior, + alignment: alignment, + ); + + static SvgPicture buildIconWithSize( + String iconReference, { + double? width, + double? height, + Clip clipBehavior = Clip.hardEdge, + }) => + SvgPicture.asset( + iconReference, + width: width, + height: height, + fit: BoxFit.fitWidth, + clipBehavior: clipBehavior, + ); + + /// Fetches an SVG image from a [Uri] or a [Uint8List] directly. + /// + /// Can be a URL(https scheme) or a local asset path. + /// Does NOT check for XML validity though. + /// So would fail silently if XML is unacceptable. + static SvgPicture buildIconWithLocalUriOrByteData({ + required Either uriOrUint8List, + double? height, + double? width, + BoxFit fit = BoxFit.fitHeight, + }) { + return uriOrUint8List.fold( + (Uri iconReference) => (iconReference.isScheme(ConstValues.httpsScheme)) + ? SvgPicture.network( + iconReference.toString(), + height: height, + width: width, + fit: fit, + ) + : SvgPicture.asset( + iconReference.toString(), + height: height, + width: width, + fit: fit, + ), + (Uint8List dataBytes) => SvgPicture.memory( + dataBytes, + height: height, + width: width, + fit: fit, + ), + ); + } + + ///Builds an [ImageProvider] of respective type, given the [urlPath]. + static ImageProvider imageFromProviderPath({required String urlPath}) { + final uri = Uri.parse(urlPath); + if (uri.isScheme(ConstValues.httpsScheme)) return NetworkImage(urlPath); + return AssetImage(uri.toString()); + } +} diff --git a/gamestore/lib/features/core/data/constants/const_text.dart b/gamestore/lib/features/core/data/constants/const_text.dart new file mode 100644 index 0000000..814750e --- /dev/null +++ b/gamestore/lib/features/core/data/constants/const_text.dart @@ -0,0 +1,58 @@ +import 'package:flutter/painting.dart'; + +import 'const_colours.dart'; + +/// Wrapper for standard [TextStyle]s. +abstract class ConstText { + static const _roboto = 'Roboto'; + + /// Level-1 header + static const header1 = TextStyle( + color: ConstColours.white, + fontSize: 20, + fontFamily: _roboto, + fontWeight: FontWeight.bold, + height: 16 / 20, + letterSpacing: 0, + ); + + /// Level-2 header + static const header2 = TextStyle( + color: ConstColours.white, + fontSize: 14, + fontFamily: _roboto, + fontWeight: FontWeight.normal, + height: 17 / 14, + letterSpacing: 0, + ); + + /// Tab-label + static const tab = TextStyle( + fontSize: 16, + fontFamily: _roboto, + height: 19 / 16, + letterSpacing: 0, + ); + + /// Level-1 body + static const body1 = TextStyle( + color: ConstColours.vampireBlack, + fontSize: 14, + fontFamily: _roboto, + fontWeight: FontWeight.w400, + height: 17 / 14, + letterSpacing: 0, + ); + + /// Level-1 body with a link + static TextStyle get bodyLink1 => body1.copyWith( + fontWeight: FontWeight.w600, + color: ConstColours.darkSilver, + decoration: TextDecoration.underline, + ); + + /// Destructive action (red) for iOS + static const cupertinoDestructiveAction = TextStyle( + color: ConstColours.cupertinoDestructiveRed, + ); +} diff --git a/gamestore/lib/features/core/data/constants/const_validators.dart b/gamestore/lib/features/core/data/constants/const_validators.dart new file mode 100644 index 0000000..95fe11d --- /dev/null +++ b/gamestore/lib/features/core/data/constants/const_validators.dart @@ -0,0 +1,21 @@ +import 'package:flutter/widgets.dart'; +import 'package:form_builder_validators/form_builder_validators.dart'; + +import '/l10n/generated/l10n.dart'; + +/// Validation functions +abstract class ConstValidators { + /// Defines multiple [FormFieldValidator]s to be checked + static FormFieldValidator multiple(List> validators) => + FormBuilderValidators.compose(validators); + + /// Prevents a field from sending null ot empty values + static FormFieldValidator required() { + return (T? valueCandidate) { + if (valueCandidate == null || valueCandidate is String && valueCandidate.trim().isEmpty) { + return Strings.current.formFieldRequired.toUpperCase(); + } + return null; + }; + } +} diff --git a/gamestore/lib/features/core/data/constants/const_values.dart b/gamestore/lib/features/core/data/constants/const_values.dart new file mode 100644 index 0000000..9c1ad7d --- /dev/null +++ b/gamestore/lib/features/core/data/constants/const_values.dart @@ -0,0 +1,59 @@ +// ignore_for_file: public_member_api_docs + +/// Stores the literals/constants used throughout the app +abstract class ConstValues { + // A + static const appTitle = 'AequoPlay Gamestore'; + + // B + + // C + + // D + + // E + static const euroSign = '€'; + + // F + + // G + + // H + static const httpsScheme = 'https'; + + // I + + // J + + // K + + // L + + // M + + // N + + // O + + // P + + // Q + + // R + + // S + + // T + + // U + + // V + + // W + + // X + + // Y + + // Z +} diff --git a/gamestore/lib/features/core/data/constants/ui/const_box_shadows.dart b/gamestore/lib/features/core/data/constants/ui/const_box_shadows.dart new file mode 100644 index 0000000..2e2cf26 --- /dev/null +++ b/gamestore/lib/features/core/data/constants/ui/const_box_shadows.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart' show Colors; +import 'package:flutter/painting.dart'; + +/// Defines the shadow for layering +abstract class ConstBoxShadows { + /// Default + static BoxShadow get defaultShadow => BoxShadow( + color: Colors.black.withOpacity(0.1), + offset: const Offset(0, 4), + blurRadius: 5, + ); + + /// Lowest elevation + static List get elevation3 => [ + BoxShadow( + color: Colors.black.withOpacity(0.12), + blurRadius: 4, + offset: const Offset(0, 3), + ), + BoxShadow( + color: Colors.black.withOpacity(0.04), + blurRadius: 3, + offset: const Offset(3, 3), + ), + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 8, + offset: const Offset(0, 1), + ), + ]; + + /// Medium elevation + static List get elevation4 => [ + BoxShadow( + color: Colors.black.withOpacity(0.10), + blurRadius: 5, + offset: const Offset(0, 4), + ), + BoxShadow( + color: Colors.black.withOpacity(0.04), + blurRadius: 10, + offset: const Offset(0, 1), + ), + BoxShadow( + color: Colors.black.withOpacity(0.12), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ]; +} diff --git a/gamestore/lib/features/core/data/constants/ui/const_opacities.dart b/gamestore/lib/features/core/data/constants/ui/const_opacities.dart new file mode 100644 index 0000000..0ade02b --- /dev/null +++ b/gamestore/lib/features/core/data/constants/ui/const_opacities.dart @@ -0,0 +1,5 @@ +/// Opacity values +abstract class ConstOpacities { + /// Disabled look + static const defaultDisabled = 0.2; +} diff --git a/gamestore/lib/features/core/data/constants/ui/const_sizes.dart b/gamestore/lib/features/core/data/constants/ui/const_sizes.dart new file mode 100644 index 0000000..9216f0e --- /dev/null +++ b/gamestore/lib/features/core/data/constants/ui/const_sizes.dart @@ -0,0 +1,10 @@ +import 'package:flutter/painting.dart'; + +/// App sizes +abstract class ConstSizes { + /// Borders + static const genericCurvatureBorderRadius = BorderRadius.all(Radius.circular(24)); + + /// Elevation + static const defaultElevation = 6.0; +} diff --git a/gamestore/lib/features/core/data/converters/timestamp_converters.dart b/gamestore/lib/features/core/data/converters/timestamp_converters.dart new file mode 100644 index 0000000..f5bbb6a --- /dev/null +++ b/gamestore/lib/features/core/data/converters/timestamp_converters.dart @@ -0,0 +1,32 @@ +// ignore_for_file: sort_constructors_first + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:json_annotation/json_annotation.dart'; + +export 'package:cloud_firestore/cloud_firestore.dart'; + +/// Conversion between [DateTime] and Firestore's [Timestamp]. +class TimestampConverter implements JsonConverter { + @override + DateTime fromJson(Timestamp timestamp) { + return timestamp.toDate(); + } + + @override + Timestamp toJson(DateTime date) => Timestamp.fromDate(date); + + /// const Constructor + const TimestampConverter(); +} + +/// Nullable variant of [TimestampConverter]. +class TimestampConverterNullable implements JsonConverter { + @override + DateTime? fromJson(Timestamp? json) => json?.toDate(); + + @override + Timestamp? toJson(DateTime? object) => object != null ? Timestamp.fromDate(object) : null; + + /// const Constructor + const TimestampConverterNullable(); +} diff --git a/gamestore/lib/features/core/data/enums/date_formats.dart b/gamestore/lib/features/core/data/enums/date_formats.dart new file mode 100644 index 0000000..960d464 --- /dev/null +++ b/gamestore/lib/features/core/data/enums/date_formats.dart @@ -0,0 +1,18 @@ +import 'package:intl/intl.dart'; + +/// All the [DateFormat]s formats to be used in the app. +enum DateTimeFormats { + /// (04-20-2009) + shortDayMonthLongYearHyphens('dd-MM-yyyy'), + + /// (5:30) + timeOnlyColons('H:m'); + + /// Format string + final String format; + + /// Wrapper for format string + DateFormat get dateFormat => DateFormat(format); + + const DateTimeFormats(this.format); +} diff --git a/gamestore/lib/features/core/data/enums/environment_type.dart b/gamestore/lib/features/core/data/enums/environment_type.dart new file mode 100644 index 0000000..96fe540 --- /dev/null +++ b/gamestore/lib/features/core/data/enums/environment_type.dart @@ -0,0 +1,20 @@ +import 'package:flutter/widgets.dart'; + +import '/env/env.dart'; +import 'supported_language.dart'; + +/// Defines the app flavours/environments in use +enum EnvironmentType { + /// Development + dev, + + /// Live + live; + + /// Override and sets up the environment-specific configuration + void override() => EnvConfig(environmentType: this); + + /// Resolves the current app language + static SupportedLanguage currentLanguage(BuildContext context) => + Localizations.localeOf(context).languageCode.toSupportedLanguage; +} diff --git a/gamestore/lib/features/core/data/enums/form_field_type.dart b/gamestore/lib/features/core/data/enums/form_field_type.dart new file mode 100644 index 0000000..91bcf6c --- /dev/null +++ b/gamestore/lib/features/core/data/enums/form_field_type.dart @@ -0,0 +1,11 @@ +/// Functional types of form fields +enum FormFieldType { + /// General text + text, + + /// Email + email, + + /// Masked password value + password; +} diff --git a/gamestore/lib/features/core/data/enums/supported_language.dart b/gamestore/lib/features/core/data/enums/supported_language.dart new file mode 100644 index 0000000..5412cac --- /dev/null +++ b/gamestore/lib/features/core/data/enums/supported_language.dart @@ -0,0 +1,17 @@ +/// languages supported by the app +enum SupportedLanguage { + /// English + en, + + /// Dutch + nl; +} + +///extension +extension SupportedLanguagesExtension on String? { + /// Resolves the default supported language + SupportedLanguage get toSupportedLanguage => SupportedLanguage.values.firstWhere( + (element) => element.name == this?.trim().toLowerCase(), + orElse: () => SupportedLanguage.en, + ); +} diff --git a/gamestore/lib/features/core/data/enums/supported_phone_number.dart b/gamestore/lib/features/core/data/enums/supported_phone_number.dart new file mode 100644 index 0000000..f690874 --- /dev/null +++ b/gamestore/lib/features/core/data/enums/supported_phone_number.dart @@ -0,0 +1,28 @@ +/// Phone numbers supported by the app +enum SupportedPhoneNumber { + /// Dutch + nl, + + /// Belgium + be; + + /// phone-number number code + String get countryPhoneCode { + switch (this) { + case SupportedPhoneNumber.nl: + return '+31'; + case SupportedPhoneNumber.be: + return '+32'; + } + } + + /// phone-number country-name code + String get countryCode { + switch (this) { + case SupportedPhoneNumber.nl: + return 'NL'; + case SupportedPhoneNumber.be: + return 'BE'; + } + } +} diff --git a/gamestore/lib/features/core/data/enums/view_model_state.dart b/gamestore/lib/features/core/data/enums/view_model_state.dart new file mode 100644 index 0000000..600a458 --- /dev/null +++ b/gamestore/lib/features/core/data/enums/view_model_state.dart @@ -0,0 +1,14 @@ +/// Initialing states of a ViewModel. +enum ViewModelState { + /// Initializing + isInitialising, + + /// Initializing done + isInitialised, + + /// Busy with some other task + isBusy, + + /// Error + hasError; +} diff --git a/gamestore/lib/features/core/data/extensions/context_extensions.dart b/gamestore/lib/features/core/data/extensions/context_extensions.dart new file mode 100644 index 0000000..6f0d9ca --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/context_extensions.dart @@ -0,0 +1,16 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; + +import '/l10n/generated/l10n.dart'; + +/// extension +extension DarkMode on BuildContext { + /// is dark mode currently enabled? + /// + /// Using the context version in release throws exception. + bool get isDarkMode => + WidgetsBinding.instance.platformDispatcher.platformBrightness == Brightness.dark; + + /// Returns the instance of [Strings.current] + Strings get strings => Strings.current; +} diff --git a/gamestore/lib/features/core/data/extensions/date_time_extensions.dart b/gamestore/lib/features/core/data/extensions/date_time_extensions.dart new file mode 100644 index 0000000..e4a788b --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/date_time_extensions.dart @@ -0,0 +1,17 @@ +import 'package:intl/intl.dart'; + +import '../enums/date_formats.dart'; + +/// Extensions on [DateTime]. +extension DateTimeExtensions on DateTime { + /// Formats given [DateTime] into a [String], according to [dateTimeFormat] format. + String inFormat({required DateTimeFormats dateTimeFormat}) => + DateFormat(dateTimeFormat.format).format(this); + + /// Start of actual new day + DateTime get dayStart => DateTime(year, month, day); + + /// Returns whether 2 [DateTime]s are on the same day of the year, ignoring time. + bool isSameDateAs(DateTime other) => + year == other.year && month == other.month && day == other.day; +} diff --git a/gamestore/lib/features/core/data/extensions/future_extensions.dart b/gamestore/lib/features/core/data/extensions/future_extensions.dart new file mode 100644 index 0000000..beae94e --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/future_extensions.dart @@ -0,0 +1,7 @@ +import 'dart:async' as async; + +///extension +extension FutureExtension on Future { + /// Decorator instead of wrapper + void get unawaited => async.unawaited(this); +} diff --git a/gamestore/lib/features/core/data/extensions/list_extensions.dart b/gamestore/lib/features/core/data/extensions/list_extensions.dart new file mode 100644 index 0000000..a557aae --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/list_extensions.dart @@ -0,0 +1,13 @@ +///extension +extension ListExtensions on List { + /// Creates an unaliased deep copy + List get deepCopy => [...this]; + + /// Create an [List.unmodifiable] from given list + List get unmodifiable => List.unmodifiable(this); + + /// Removes the last object in this list iff the list is not empty + void removeLastSafely() { + if (isNotEmpty) removeLast(); + } +} diff --git a/gamestore/lib/features/core/data/extensions/map_extensions.dart b/gamestore/lib/features/core/data/extensions/map_extensions.dart new file mode 100644 index 0000000..8cc1538 --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/map_extensions.dart @@ -0,0 +1,5 @@ +///extension +extension MapExtensions on Map { + /// Creates an unaliased deep copy + Map get deepCopy => {...this}; +} diff --git a/gamestore/lib/features/core/data/extensions/object_extensions.dart b/gamestore/lib/features/core/data/extensions/object_extensions.dart new file mode 100644 index 0000000..a39f26e --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/object_extensions.dart @@ -0,0 +1,11 @@ +///extension +extension ObjectExtensions on Object? { + /// Syntactic sugar for explicit type-casting + E asType() => this as E; +} + +///extension +extension AsCallback on T { + /// Syntactic sugar for creating a lazy-evaluation + T Function() get asCallback => () => this; +} diff --git a/gamestore/lib/features/core/data/extensions/response_extensions.dart b/gamestore/lib/features/core/data/extensions/response_extensions.dart new file mode 100644 index 0000000..37c4ed7 --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/response_extensions.dart @@ -0,0 +1,10 @@ +import 'dart:io'; + +import 'package:dio/dio.dart'; + +///extension +extension ResponseExtension on Response { + /// Returns whether the received response was successful. + /// If the response did not have status-code key, then it will return false. + bool get wasSuccessful => statusCode == HttpStatus.ok; +} diff --git a/gamestore/lib/features/core/data/extensions/stream_extensions.dart b/gamestore/lib/features/core/data/extensions/stream_extensions.dart new file mode 100644 index 0000000..5bab54a --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/stream_extensions.dart @@ -0,0 +1,41 @@ +import 'package:flutter/foundation.dart'; + +///extension +extension StreamExtensions on Stream { + /// Convert to a [ValueListenable]. + ValueListenable toValueNotifier( + T initialValue, { + bool Function(T previous, T current)? notifyWhen, + }) { + final notifier = ValueNotifier(initialValue); + listen((value) { + if (notifyWhen == null || notifyWhen(notifier.value, value)) { + notifier.value = value; + } + }); + return notifier; + } + + /// Convert to a [ValueListenable]?. + ValueListenable toNullableValueNotifier({ + bool Function(T? previous, T? current)? notifyWhen, + }) { + final notifier = ValueNotifier(null); + listen((value) { + if (notifyWhen == null || notifyWhen(notifier.value, value)) { + notifier.value = value; + } + }); + return notifier; + } + + /// Convert to a [Listenable]. + Listenable toListenable() { + final notifier = ChangeNotifier(); + listen((_) { + // ignore: invalid_use_of_protected_member, invalid_use_of_visible_for_testing_member + notifier.notifyListeners(); + }); + return notifier; + } +} diff --git a/gamestore/lib/features/core/data/extensions/string_extensions.dart b/gamestore/lib/features/core/data/extensions/string_extensions.dart new file mode 100644 index 0000000..f0967ed --- /dev/null +++ b/gamestore/lib/features/core/data/extensions/string_extensions.dart @@ -0,0 +1,41 @@ +///extension +extension StringExtensions on String { + /// Capitalizes the first letter of every word, except some exceptions such as + /// articles, numeral-names, place-words etc. + String get capitalizeWithBlockedValues { + final blockedValues = ['op', 'de', 'het', 'een', "'s-", 'β€˜s-']; + + String capitaliseFirst(String value, List blockedValues) => + value.isNotEmpty && !value._isBlocked(blockedValues) + ? value[0].toUpperCase() + (value.length > 1 ? value.substring(1).toLowerCase() : '') + : value.toLowerCase(); + + return split(' ') + .map( + (nonCapitalised) => nonCapitalised + .split('-') + .map((nonCapitalised) => capitaliseFirst(nonCapitalised, blockedValues)) + .join('-'), + ) + .join(' '); + } + + /// Returns the character-wise difference. + String difference(String? other) { + if (other != null) { + if (length == other.length) { + return ''; + } else if (length > other.length) { + return replaceAll(other, ''); + } else { + return other.replaceAll(this, ''); + } + } else if (other == null) { + return this; + } else { + return ''; + } + } + + bool _isBlocked(List blockedValues) => blockedValues.contains(toLowerCase()); +} diff --git a/gamestore/lib/features/core/data/formatters/decimal_length_limiting.dart b/gamestore/lib/features/core/data/formatters/decimal_length_limiting.dart new file mode 100644 index 0000000..93ebabf --- /dev/null +++ b/gamestore/lib/features/core/data/formatters/decimal_length_limiting.dart @@ -0,0 +1,67 @@ +import 'package:flutter/services.dart'; + +/// Formatting decimals +class DecimalLengthLimitingTextInputFormatter extends TextInputFormatter { + /// maximum length of a whole number + final int maxWholeNumberLength; + + /// maximum length of a floating-point number + final int maxDecimalNumberLength; + + /// Constructor + DecimalLengthLimitingTextInputFormatter( + this.maxWholeNumberLength, [ + this.maxDecimalNumberLength = 2, + ]) : assert( + maxWholeNumberLength >= 0 && maxDecimalNumberLength >= 0, + "Arguments can't be negative", + ); + + @override + TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { + final text = newValue.text.replaceAll(',', '.').trim(); + if (text == '.' || text.isEmpty) { + return newValue.copyWith(text: newValue.text.replaceAll('.', ',').trim()); + } + + if (!_canParseToDouble(text) || text.contains('-')) return oldValue; + + final splitNumber = text.split('.'); + final wholeNumbers = splitNumber[0]; + String? decimalNumbers; + + if (splitNumber.length > 1) { + decimalNumbers = splitNumber[1]; + } + + final parsedWholeNumbers = int.tryParse(wholeNumbers)?.toString() ?? ''; + + if (parsedWholeNumbers.length > maxWholeNumberLength) return oldValue; + if (decimalNumbers != null && decimalNumbers.length > maxDecimalNumberLength) { + return oldValue; + } + + final newText = parsedWholeNumbers + (decimalNumbers == null ? '' : ',$decimalNumbers'); + final selection = newValue.selection; + final composing = newValue.composing; + + if (newText == oldValue.text) return oldValue; + + return newValue.copyWith( + text: newText, + selection: selection.copyWith( + baseOffset: selection.baseOffset.clamp(0, newText.length), + extentOffset: selection.extentOffset.clamp(0, newText.length), + ), + composing: TextRange( + start: composing.start.clamp(0, newText.length), + end: composing.start.clamp(0, newText.length), + ), + ); + } + + bool _canParseToDouble(String value) { + final formattedValue = value.replaceAll(',', '.'); + return double.tryParse(formattedValue) != null; + } +} diff --git a/gamestore/lib/features/core/data/formatters/text_input_formatters.dart b/gamestore/lib/features/core/data/formatters/text_input_formatters.dart new file mode 100644 index 0000000..532de0d --- /dev/null +++ b/gamestore/lib/features/core/data/formatters/text_input_formatters.dart @@ -0,0 +1,95 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; + +import '../../data/enums/supported_phone_number.dart'; +import '../../data/extensions/string_extensions.dart'; + +/// Text input formatters +abstract class TextInputFormatters { + /// Formats input to capitalize each first letter. + static TextInputFormatter capitalize() => TextInputFormatter.withFunction( + (oldValue, newValue) { + final newText = newValue.text; + if (oldValue.text.difference(newText) == ' ') return newValue; + return newValue.copyWith(text: newText.capitalizeWithBlockedValues); + }, + ); + + /// Formats input to only allow for numbers. + static TextInputFormatter numbers([int? maxLength]) => TextInputFormatter.withFunction( + (oldValue, newValue) { + if ((maxLength != null && maxLength >= newValue.text.length) || maxLength == null) { + final newText = newValue.text; + final isNumeric = RegExp(r'^-?[0-9]+$'); + + /// check if the string contains only numbers + return newText.isEmpty || isNumeric.hasMatch(newText) ? newValue : oldValue; + } else { + return oldValue; + } + }, + ); + + /// Formats input to only allow for letters. + static TextInputFormatter letters([int? maxLength]) => TextInputFormatter.withFunction( + (oldValue, newValue) { + if ((maxLength != null && maxLength >= newValue.text.length) || maxLength == null) { + final newText = newValue.text; + final isNumeric = RegExp(r'^-?[0-9]+$'); + + return newText.isEmpty || !isNumeric.hasMatch(newText.difference(oldValue.text)) + ? newValue + : oldValue; + } else { + return oldValue; + } + }, + ); + + /// Formats into lowercase + static TextInputFormatter lowerCase() => TextInputFormatter.withFunction( + (oldValue, newValue) => newValue.copyWith(text: newValue.text.toLowerCase()), + ); + + /// Formats into uppercase + static TextInputFormatter upperCase() => TextInputFormatter.withFunction( + (oldValue, newValue) => newValue.copyWith(text: newValue.text.toUpperCase()), + ); + + /// Strips country codes from the beginning of text. + /// + /// Stripping happens only WHEN the country-code has been typed. + static TextInputFormatter phoneNumber({ + required ValueListenable supportedPhoneNumber, + }) => + TextInputFormatter.withFunction( + (_, newValue) { + final sanitizedText = newValue.text + // Remove ANY occurring spaces + .replaceAll(r'\s', '') + // Remove custom characters + .replaceAll( + RegExp(r'[()\[\]]'), + '', + ) + // Remove country-code and any other abbreviations + .replaceFirst( + RegExp('^(\\${supportedPhoneNumber.value.countryPhoneCode}|0)'), + '', + ); + + final replaceLength = newValue.text.length - sanitizedText.length; + if (replaceLength != 0) { + return newValue.copyWith( + text: sanitizedText, + selection: newValue.selection.copyWith( + baseOffset: sanitizedText.length, + extentOffset: sanitizedText.length, + ), + ); + } else { + return newValue; + } + }, + ); +} diff --git a/gamestore/lib/features/core/data/formatters/whole_number_length_limiting.dart b/gamestore/lib/features/core/data/formatters/whole_number_length_limiting.dart new file mode 100644 index 0000000..094037c --- /dev/null +++ b/gamestore/lib/features/core/data/formatters/whole_number_length_limiting.dart @@ -0,0 +1,34 @@ +import 'package:flutter/services.dart'; + +/// Formatting for whole numbers +class WholeNumberLengthLimitingTextInputFormatter extends TextInputFormatter { + /// maximum length of number + final int maxNumbers; + + /// Constructor + WholeNumberLengthLimitingTextInputFormatter( + this.maxNumbers, + ) : assert(maxNumbers >= 0, "Argument can't be negative"); + + @override + TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { + final text = newValue.text.trim(); + if (text.isEmpty) return newValue.copyWith(text: text); + + if (text.length > maxNumbers || text.contains(RegExp(r'[\D]'))) return oldValue; + + final parsed = int.tryParse(text); + + if (parsed == null) return oldValue; + + final selection = newValue.selection; + final parsedString = parsed.toString(); + return newValue.copyWith( + text: parsedString, + selection: selection.copyWith( + baseOffset: selection.baseOffset.clamp(0, parsedString.length), + extentOffset: selection.extentOffset.clamp(0, parsedString.length), + ), + ); + } +} diff --git a/gamestore/lib/features/core/data/typedefs/http_status_code.dart b/gamestore/lib/features/core/data/typedefs/http_status_code.dart new file mode 100644 index 0000000..fabc076 --- /dev/null +++ b/gamestore/lib/features/core/data/typedefs/http_status_code.dart @@ -0,0 +1,10 @@ +import 'dart:io'; + +/// Special int as an HttpStatusCode +typedef HttpStatusCode = int; + +/// extension +extension HttpStatusCodeExtension on HttpStatusCode { + /// Whether the received status was [HttpStatus.ok] + bool get wasSuccessful => this == HttpStatus.ok; +} diff --git a/gamestore/lib/features/core/data/typedefs/json.dart b/gamestore/lib/features/core/data/typedefs/json.dart new file mode 100644 index 0000000..acf909a --- /dev/null +++ b/gamestore/lib/features/core/data/typedefs/json.dart @@ -0,0 +1,2 @@ +/// Wrapper for Json data received as [Map] +typedef Json = Map; diff --git a/gamestore/lib/features/core/forms/form_field_config.dart b/gamestore/lib/features/core/forms/form_field_config.dart new file mode 100644 index 0000000..0b4d315 --- /dev/null +++ b/gamestore/lib/features/core/forms/form_field_config.dart @@ -0,0 +1,25 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; + +/// Complete store of all definitions for all kinds of fields for forms +class FormFieldConfig { + /// Constructor + FormFieldConfig({ + this.hintText, + this.textEditingController, + this.focusNode, + ValueListenable? isEnabledListenable, + }) : isEnabledListenable = isEnabledListenable ?? ValueNotifier(true); + + /// Hint for a field + final String? hintText; + + /// Field controller + final TextEditingController? textEditingController; + + /// Focus definition + final FocusNode? focusNode; + + /// Field enabled + final ValueListenable isEnabledListenable; +} diff --git a/gamestore/lib/features/core/services/logging_service.dart b/gamestore/lib/features/core/services/logging_service.dart new file mode 100644 index 0000000..73f9eaf --- /dev/null +++ b/gamestore/lib/features/core/services/logging_service.dart @@ -0,0 +1,98 @@ +import 'dart:io'; + +import 'package:dio/dio.dart'; +import 'package:talker/talker.dart'; +import 'package:talker_dio_logger/talker_dio_logger_interceptor.dart'; +import 'package:talker_dio_logger/talker_dio_logger_settings.dart'; + +import '/locator.dart'; + +/// Logs important events +class LoggingService { + final Talker _talker = Talker( + // observer: _CrashlyticsObserver(), + settings: TalkerSettings( + useHistory: false, + ), + logger: TalkerLogger( + formatter: !Platform.isIOS ? const ColoredLoggerFormatter() : const ExtendedLoggerFormatter(), + settings: TalkerLoggerSettings( + enableColors: !Platform.isIOS, + ), + ), + ); + + /// Successful critical event + void Function(dynamic msg, [Object? exception, StackTrace? stackTrace]) get good => _talker.good; + + /// Common/general event + void Function(dynamic msg, [Object? exception, StackTrace? stackTrace]) get info => + _talker.verbose; + + /// Non-fatal but important/recovered event + void Function(dynamic msg, [Object exception, StackTrace stackTrace]) get warning => + _talker.warning; + + /// Fatal and important recorded event + void Function(dynamic msg, [Object? exception, StackTrace? stackTrace]) get error => + _talker.error; + + /// Initialised successfully + /// Generally reserved for ViewModels + void successfulInit({required String location}) => + _talker.good('[$location] πŸ“š I am initialized'); + + /// Disposed successfully + /// Generally reserved for ViewModels + void successfulDispose({required String location}) => + _talker.good('[$location] πŸ—‘ I am disposed'); + + /// Adds logging to dio calls + void addLoggingInterceptor({ + required Dio dio, + required TalkerDioLoggerSettings? talkerDioLoggerSettings, + }) { + dio.interceptors.add( + TalkerDioLogger( + talker: Talker( + logger: TalkerLogger(formatter: const ColoredLoggerFormatter()), + settings: TalkerSettings( + useHistory: false, + ), + ), + settings: talkerDioLoggerSettings ?? + const TalkerDioLoggerSettings( + printRequestHeaders: true, + printResponseHeaders: true, + ), + ), + ); + } + + /// Locates for DI + static LoggingService get locate => Locator.locate(); +} + +// class _CrashlyticsObserver implements TalkerObserver { +// final crashlyticsInstance = FirebaseCrashlytics.instance; +// +// @override +// void onLog(TalkerDataInterface talkerLog) => +// crashlyticsInstance.log('[${talkerLog.title}] | ${talkerLog.displayMessage}'); +// +// @override +// void onError(TalkerError talkerError) => crashlyticsInstance.recordError( +// talkerError.error, +// talkerError.stackTrace, +// reason: '[${talkerError.title}]\n${talkerError.displayMessage}', +// fatal: true, +// ); +// +// @override +// void onException(TalkerException talkerException) => crashlyticsInstance.recordError( +// talkerException.exception, +// talkerException.stackTrace, +// reason: '[${talkerException.title}]\n${talkerException.displayMessage}', +// fatal: true, +// ); +// } diff --git a/gamestore/lib/features/core/services/navigation/core_router.dart b/gamestore/lib/features/core/services/navigation/core_router.dart new file mode 100644 index 0000000..92276f3 --- /dev/null +++ b/gamestore/lib/features/core/services/navigation/core_router.dart @@ -0,0 +1,5 @@ +part of 'navigation_service.dart'; + +/// Use for controlling popups, bottomsheet-pull-ups, inter-tab nav (such as +/// notificare alert appearing -> notificare inbox) +class _CoreRouter extends GsNavigation {} diff --git a/gamestore/lib/features/core/services/navigation/home_router.dart b/gamestore/lib/features/core/services/navigation/home_router.dart new file mode 100644 index 0000000..a060a9f --- /dev/null +++ b/gamestore/lib/features/core/services/navigation/home_router.dart @@ -0,0 +1,10 @@ +part of 'navigation_service.dart'; + +/// Use for programmatically changing navigation tabs. +class _HomeRouter extends GsNavigation { + static const _tabs = []; + + void popUntilLogin(BuildContext context) => context.goNamed(AppRoute.onboarding.name); + + static AppRoute get lastActiveRoute => _tabs[0]; +} diff --git a/gamestore/lib/features/core/services/navigation/navigation_service.dart b/gamestore/lib/features/core/services/navigation/navigation_service.dart new file mode 100644 index 0000000..fbd400f --- /dev/null +++ b/gamestore/lib/features/core/services/navigation/navigation_service.dart @@ -0,0 +1,34 @@ +// ignore_for_file: library_private_types_in_public_api + +import 'package:flutter/widgets.dart'; +import 'package:go_router/go_router.dart'; + +import '/locator.dart'; +import '../../abstracts/mwa_navigation.dart'; +import '../../abstracts/router/routes.dart'; + +part 'core_router.dart'; +part 'home_router.dart'; + +/// Provides convenient navigation functions +class NavigationService { + /// Constructor + NavigationService() + : core = _CoreRouter(), + home = _HomeRouter(); + + /// Core + final _CoreRouter core; + + /// Home + final _HomeRouter home; + + /// Dismisses any pop-up dialogs + void dismissPopup(BuildContext context) => context.pop(); + + /// Close any pop-up dialogs + void closeModalSheet(BuildContext context) => context.pop(); + + /// Locator + static NavigationService get locate => Locator.locate(); +} diff --git a/gamestore/lib/features/core/utils/iterable_utils.dart b/gamestore/lib/features/core/utils/iterable_utils.dart new file mode 100644 index 0000000..c43c488 --- /dev/null +++ b/gamestore/lib/features/core/utils/iterable_utils.dart @@ -0,0 +1,23 @@ +/// Allows for parallel iteration +/// Synonymous to the `zip` function in Python +class Pair { + /// Constructor + const Pair(this.a, this.b); + + /// Iterable 1 + final A a; + + /// Iterable 2 + final B b; +} + +/// Zips up the given Iterables for parallel iteration, and yielding +Iterable> zip(List
listA, List listB) sync* { + assert( + listA.length == listB.length, + 'For zipping, lengths of the lists must match', + ); + for (var i = 0; i < listA.length; i++) { + yield Pair(listA[i], listB[i]); + } +} diff --git a/gamestore/lib/features/core/views/home/home_view.dart b/gamestore/lib/features/core/views/home/home_view.dart new file mode 100644 index 0000000..07e0a8f --- /dev/null +++ b/gamestore/lib/features/core/views/home/home_view.dart @@ -0,0 +1,33 @@ +import 'package:flutter/widgets.dart'; +import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; +import 'package:gamestore/features/core/widgets/gs_app_bar.dart'; + +import '../../widgets/state/view_model_builder.dart'; +import 'home_view_model.dart'; + +/// Home view with the tabs +class HomeView extends StatelessWidget { + /// Constructor + const HomeView({super.key}); + + @override + Widget build(BuildContext context) { + return ViewModelBuilder( + disposableBuildContext: context, + viewModelBuilder: () => HomeViewModel.locate, + builder: (context, model) => PlatformScaffold( + appBar: GsAppBar(), + body: const Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Center( + child: Text( + 'You have pushed the button this many times:', + ), + ), + ], + ), + ), + ); + } +} diff --git a/gamestore/lib/features/core/views/home/home_view_model.dart b/gamestore/lib/features/core/views/home/home_view_model.dart new file mode 100644 index 0000000..d2df61b --- /dev/null +++ b/gamestore/lib/features/core/views/home/home_view_model.dart @@ -0,0 +1,37 @@ +import 'package:flutter/widgets.dart'; + +import '/features/auth/services/auth_service.dart'; +import '/features/core/abstracts/base_view_model.dart'; +import '/locator.dart'; +import '../../services/navigation/navigation_service.dart'; + +/// Home VM +class HomeViewModel extends BaseViewModel { + /// Constructor + HomeViewModel({ + required AuthService authService, + required NavigationService navigationService, + }) : _authService = authService, + _navigationService = navigationService; + + @override + Future initialise( + BuildContext disposableBuildContext, + bool Function() mounted, [ + Object? arguments, + ]) async { + super.initialise(disposableBuildContext, mounted, arguments); + } + + final AuthService _authService; + final NavigationService _navigationService; + + /// On press of the logout button + Future onLogoutPressed(BuildContext context) async { + await _authService.logout(); + _navigationService.home.popUntilLogin(context); + } + + /// Locator DI + static HomeViewModel get locate => Locator.locate(); +} diff --git a/gamestore/lib/features/core/widgets/animations/animated_column.dart b/gamestore/lib/features/core/widgets/animations/animated_column.dart new file mode 100644 index 0000000..6c2a27f --- /dev/null +++ b/gamestore/lib/features/core/widgets/animations/animated_column.dart @@ -0,0 +1,74 @@ +import 'package:flutter/widgets.dart'; + +import '../../data/constants/const_durations.dart'; + +/// [AnimatedColumn] Animates its children when they get added or removed, +/// at its end. +class AnimatedColumn extends StatelessWidget { + /// Constructor + const AnimatedColumn({ + required this.children, + this.duration = ConstDurations.defaultAnimationDuration, + this.mainAxisAlignment = MainAxisAlignment.start, + this.mainAxisSize = MainAxisSize.max, + this.crossAxisAlignment = CrossAxisAlignment.center, + this.textDirection, + this.verticalDirection = VerticalDirection.down, + this.textBaseline, + this.maxAnimatingChildren = 2, + super.key, + }); + + /// [duration] specifies the duration of the add/remove animation + final Duration duration; + + /// [maxAnimatingChildren] determines the maximum number of chidren that can + /// be animating at once, if more are removed or added at within an animation + /// duration they will pop in instead + final int maxAnimatingChildren; + + /// [Column] property + final MainAxisAlignment mainAxisAlignment; + + /// [Column] property + final MainAxisSize mainAxisSize; + + /// [Column] property + final CrossAxisAlignment crossAxisAlignment; + + /// [Column] property + final TextDirection? textDirection; + + /// [Column] property + final VerticalDirection verticalDirection; + + /// [Column] property + final TextBaseline? textBaseline; + + /// [Column] property + final List children; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: crossAxisAlignment, + children: [ + for (int i = 0; i < children.length + maxAnimatingChildren; i++) + AnimatedSwitcher( + duration: duration, + switchInCurve: Curves.easeInOut, + switchOutCurve: Curves.easeInOut, + transitionBuilder: (child, animation) => FadeTransition( + opacity: animation, + child: SizeTransition( + sizeFactor: animation, + axisAlignment: -1, + child: child, + ), + ), + child: i < children.length ? children[i] : const SizedBox.shrink(), + ), + ], + ); + } +} diff --git a/gamestore/lib/features/core/widgets/animations/animated_enabled.dart b/gamestore/lib/features/core/widgets/animations/animated_enabled.dart new file mode 100644 index 0000000..7146e24 --- /dev/null +++ b/gamestore/lib/features/core/widgets/animations/animated_enabled.dart @@ -0,0 +1,35 @@ +import 'package:flutter/widgets.dart'; + +import '../../data/constants/const_durations.dart'; +import '../../data/constants/ui/const_opacities.dart'; + +/// Switches the enabled/disabled state of child with animation. +class AnimatedEnabled extends StatelessWidget { + /// Constructor + const AnimatedEnabled({ + required this.isEnabled, + required this.child, + this.animationDuration = ConstDurations.defaultAnimationDuration, + super.key, + }); + + /// Current state of [child]. + final bool isEnabled; + + /// Child + final Widget child; + + /// Animation duration + final Duration animationDuration; + + @override + Widget build(BuildContext context) => AnimatedOpacity( + opacity: isEnabled ? 1 : ConstOpacities.defaultDisabled, + duration: animationDuration, + curve: Curves.easeInOut, + child: IgnorePointer( + ignoring: !isEnabled, + child: child, + ), + ); +} diff --git a/gamestore/lib/features/core/widgets/animations/custom_ticker_provider.dart b/gamestore/lib/features/core/widgets/animations/custom_ticker_provider.dart new file mode 100644 index 0000000..c2254e9 --- /dev/null +++ b/gamestore/lib/features/core/widgets/animations/custom_ticker_provider.dart @@ -0,0 +1,89 @@ +// ignore_for_file: library_private_types_in_public_api + +import 'package:flutter/widgets.dart'; + +/// Provider for Animation controller +class AnimationControllerProvider extends StatefulWidget { + /// Constructor + const AnimationControllerProvider({ + required this.builder, + double? value, + Duration? duration, + Duration? reverseDuration, + String? debugLabel, + double lowerBound = 0.0, + double upperBound = 1.0, + AnimationBehavior animationBehavior = AnimationBehavior.normal, + bool repeatAnimation = true, + super.key, + }) : _value = value, + _duration = duration, + _reverseDuration = reverseDuration, + _debugLabel = debugLabel, + _lowerBound = lowerBound, + _upperBound = upperBound, + _animationBehavior = animationBehavior, + _repeatAnimation = repeatAnimation; + + ///Builder + final Widget Function( + BuildContext context, + AnimationController animationController, + ) builder; + + final double? _value; + final Duration? _duration; + final Duration? _reverseDuration; + final String? _debugLabel; + final double _lowerBound; + final double _upperBound; + final AnimationBehavior _animationBehavior; + final bool _repeatAnimation; + + @override + _AnimationControllerProviderState createState() => _AnimationControllerProviderState(); +} + +class _AnimationControllerProviderState extends State + with TickerProviderStateMixin { + late final AnimationController _animationController = AnimationController( + vsync: this, + value: widget._value, + duration: widget._duration, + reverseDuration: widget._reverseDuration, + debugLabel: widget._debugLabel, + lowerBound: widget._lowerBound, + upperBound: widget._upperBound, + animationBehavior: widget._animationBehavior, + ); + + @override + void initState() { + if (widget._repeatAnimation) { + _animationController.addStatusListener(_repeatListener); + } + super.initState(); + } + + void _repeatListener(AnimationStatus status) { + if (status == AnimationStatus.completed) { + _animationController.forward(from: 0); + } + } + + @override + void dispose() { + _animationController.stop(); + if (widget._repeatAnimation) { + _animationController.removeStatusListener(_repeatListener); + } + _animationController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) => widget.builder( + context, + _animationController, + ); +} diff --git a/gamestore/lib/features/core/widgets/animations/dropdown_shrink.dart b/gamestore/lib/features/core/widgets/animations/dropdown_shrink.dart new file mode 100644 index 0000000..c5885ac --- /dev/null +++ b/gamestore/lib/features/core/widgets/animations/dropdown_shrink.dart @@ -0,0 +1,151 @@ +import 'package:flutter/material.dart'; + +import '/features/core/data/constants/const_durations.dart'; + +/// Creates a shrink animation for a dropdown. +class DropdownShrink extends StatelessWidget { + /// Main constructor + const DropdownShrink.showHide({ + required this.show, + required this.child, + required this.clipFieldRadius, + required this.clipPadding, + super.key, + this.fadeDuration = ConstDurations.defaultAnimationDuration, + this.sizeDuration = ConstDurations.defaultAnimationDuration, + this.fadeInCurve = Curves.easeInOut, + this.fadeOutCurve = Curves.easeInOut, + this.sizeCurve = Curves.easeInOut, + this.alignment = Alignment.center, + this.hide, + this.width, + }); + + static final _key = UniqueKey(); + + /// Child + final Widget child; + + /// Fade [Duration] + final Duration fadeDuration; + + /// Size change animation [Duration] + final Duration sizeDuration; + + /// Curve definition for fade-in + final Curve fadeInCurve; + + /// Curve definition for fade-out + final Curve fadeOutCurve; + + /// Curve definition for resizing + final Curve sizeCurve; + + /// Alignment property. + final AlignmentGeometry alignment; + + /// Whether to show the content + final bool show; + + /// Widget to hide with + final Widget? hide; + + /// Width of the dropdown + final double? width; + + /// Radial distance from the clip + final double clipFieldRadius; + + /// Clip padding + final EdgeInsets clipPadding; + + @override + Widget build(BuildContext context) { + return ClipPath( + clipper: _DropdownClipper( + fieldRadius: clipFieldRadius, + padding: clipPadding, + ), + child: AnimatedSize( + duration: sizeDuration, + curve: sizeCurve, + alignment: alignment, + child: AnimatedSwitcher( + duration: fadeDuration, + switchInCurve: fadeInCurve, + switchOutCurve: fadeOutCurve, + transitionBuilder: hide != null + ? (child, animation) => FadeTransition( + opacity: Tween(begin: 0, end: 1).animate( + CurvedAnimation( + parent: animation, + curve: const Interval(0.15, 1, curve: Curves.easeInOut), + ), + ), + child: child, + ) + : AnimatedSwitcher.defaultTransitionBuilder, + layoutBuilder: (currentChild, previousChildren) { + var children = previousChildren; + if (currentChild != null) { + if (previousChildren.isEmpty) { + children = [currentChild]; + } else { + children = [ + Positioned( + left: 0, + right: 0, + child: previousChildren[0], + ), + currentChild, + ]; + } + } + return Stack( + clipBehavior: Clip.none, + alignment: alignment, + children: children, + ); + }, + child: show + ? child + : (hide ?? + SizedBox( + key: _key, + width: width ?? double.infinity, + height: 0, + )), + ), + ), + ); + } +} + +class _DropdownClipper extends CustomClipper { + const _DropdownClipper({ + required this.padding, + required this.fieldRadius, + }); + + final EdgeInsets padding; + final double fieldRadius; + + @override + Path getClip(Size size) { + final path = Path() + ..moveTo(fieldRadius, 0) + ..relativeQuadraticBezierTo(-fieldRadius, 0, -fieldRadius, -fieldRadius) + ..lineTo(0, 0) + ..lineTo(-padding.left, 0) + ..lineTo(-padding.left, size.height + padding.bottom) + ..lineTo(size.width + padding.right, size.height + padding.bottom) + ..lineTo(size.width + padding.right, -fieldRadius) + ..lineTo(size.width, -fieldRadius) + ..relativeQuadraticBezierTo(0, fieldRadius, -fieldRadius, fieldRadius) + ..close(); + return path; + } + + @override + bool shouldReclip(CustomClipper oldClipper) => false; +} diff --git a/gamestore/lib/features/core/widgets/animations/fade_in_fade_out_switcher.dart b/gamestore/lib/features/core/widgets/animations/fade_in_fade_out_switcher.dart new file mode 100644 index 0000000..8536ca2 --- /dev/null +++ b/gamestore/lib/features/core/widgets/animations/fade_in_fade_out_switcher.dart @@ -0,0 +1,50 @@ +import 'package:animated_list_plus/transitions.dart'; +import 'package:flutter/widgets.dart'; + +import '/features/core/data/constants/const_durations.dart'; + +/// Switches in a [Widget] when it is changed, with a Fade Effect. +class FadeInFadeOutSwitcher extends StatelessWidget { + /// Constructor + const FadeInFadeOutSwitcher({ + required Widget child, + bool transformSize = false, + this.animationDuration = ConstDurations.defaultAnimationDuration, + super.key, + }) : _child = child, + _transformSize = transformSize; + + final Widget _child; + final bool _transformSize; + + /// Animation timing + final Duration animationDuration; + + @override + Widget build(BuildContext context) { + return AnimatedSize( + duration: animationDuration, + child: AnimatedSwitcher( + duration: animationDuration, + transitionBuilder: (child, animation) { + final animationTween = Tween(begin: 0, end: 1).animate( + CurvedAnimation( + parent: animation, + curve: const Interval(0.15, 1, curve: Curves.easeInOut), + ), + ); + return _transformSize + ? SizeFadeTransition( + animation: animationTween, + child: child, + ) + : FadeTransition( + opacity: animationTween, + child: child, + ); + }, + child: _child, + ), + ); + } +} diff --git a/gamestore/lib/features/core/widgets/animations/shrink.dart b/gamestore/lib/features/core/widgets/animations/shrink.dart new file mode 100644 index 0000000..30c58d1 --- /dev/null +++ b/gamestore/lib/features/core/widgets/animations/shrink.dart @@ -0,0 +1,220 @@ +import 'package:flutter/material.dart'; + +import '../../data/constants/const_durations.dart'; + +/// Animates the vertical shrinking and fading of its child widgets. +class VerticalShrink extends StatelessWidget { + /// Main constructor + const VerticalShrink.showHide({ + required this.show, + required this.showChild, + this.fadeDuration = ConstDurations.defaultAnimationDuration, + this.sizeDuration = ConstDurations.defaultAnimationDuration, + this.fadeInCurve = Curves.easeInOut, + this.fadeOutCurve = Curves.easeInOut, + this.sizeCurve = Curves.easeInOut, + this.alignment = Alignment.center, + this.curveIntervalStart = 0.15, + this.hideChild, + this.width, + super.key, + }); + + static final _key = UniqueKey(); + + /// The widget to be shown when show is true + final Widget showChild; + + /// Duration of the fade animation + final Duration fadeDuration; + + /// Duration of the size (vertical shrink) animation + final Duration sizeDuration; + + /// Curve for the fade-in animation + final Curve fadeInCurve; + + /// Curve for the fade-out animation + final Curve fadeOutCurve; + + /// Curve for the size animation + final Curve sizeCurve; + + /// Alignment of the child widgets + final AlignmentGeometry alignment; + + /// Should be shown + final bool show; + + /// An optional widget to be shown when show is false. + /// If not provided, a SizedBox with no dimensions is used + final Widget? hideChild; + + /// The start point of the curve interval for the fade-in animation + final double curveIntervalStart; + + /// An optional width to be applied to the SizedBox when hideChild is used + final double? width; + + @override + Widget build(BuildContext context) { + return ClipRect( + child: AnimatedSize( + duration: sizeDuration, + curve: sizeCurve, + alignment: alignment, + child: AnimatedSwitcher( + duration: fadeDuration, + switchInCurve: fadeInCurve, + switchOutCurve: fadeOutCurve, + transitionBuilder: hideChild != null + ? (child, animation) => FadeTransition( + opacity: Tween(begin: 0, end: 1).animate( + CurvedAnimation( + parent: animation, + curve: Interval( + curveIntervalStart, + 1, + curve: Curves.easeInOut, + ), + ), + ), + child: child, + ) + : AnimatedSwitcher.defaultTransitionBuilder, + layoutBuilder: (currentChild, previousChildren) { + final children = List.empty(growable: true); + if (currentChild != null) { + if (previousChildren.isEmpty) { + children.add(currentChild); + } else { + children.addAll( + [ + Positioned( + left: 0, + right: 0, + child: previousChildren[0], + ), + currentChild, + ], + ); + } + } + return Stack( + clipBehavior: Clip.none, + alignment: alignment, + children: children.isNotEmpty ? children : previousChildren, + ); + }, + child: show + ? showChild + : (hideChild ?? + SizedBox( + key: _key, + width: width ?? double.infinity, + height: 0, + )), + ), + ), + ); + } +} + +/// Animates the horizontal shrinking and fading of its child widgets. +class HorizontalShrink extends StatelessWidget { + /// Main constructor + const HorizontalShrink.showHide({ + required this.show, + required this.showChild, + this.fadeDuration = ConstDurations.defaultAnimationDuration, + this.sizeDuration = ConstDurations.defaultAnimationDuration, + this.fadeInCurve = Curves.easeInOut, + this.fadeOutCurve = Curves.easeInOut, + this.sizeCurve = Curves.easeInOut, + this.alignment = Alignment.center, + this.hideChild, + this.height, + super.key, + }); + + static final _key = UniqueKey(); + + /// The widget to be shown when show is true + final Widget showChild; + + /// Duration of the fade animation + final Duration fadeDuration; + + /// Duration of the size (vertical shrink) animation + final Duration sizeDuration; + + /// Curve for the fade-in animation + final Curve fadeInCurve; + + /// Curve for the fade-out animation + final Curve fadeOutCurve; + + /// Curve for the size animation + final Curve sizeCurve; + + /// Alignment of the child widgets + final AlignmentGeometry alignment; + + /// Should be shown + final bool show; + + /// An optional widget to be shown when show is false. + /// If not provided, a SizedBox with no dimensions is used + final Widget? hideChild; + + /// An optional width to be applied to the SizedBox when hideChild is used + final double? height; + + @override + Widget build(BuildContext context) { + return ClipRect( + child: AnimatedSize( + duration: sizeDuration, + curve: sizeCurve, + alignment: alignment, + child: AnimatedSwitcher( + duration: fadeDuration, + switchInCurve: fadeInCurve, + layoutBuilder: (currentChild, previousChildren) { + final children = List.empty(growable: true); + if (currentChild != null) { + if (previousChildren.isEmpty) { + children.add(currentChild); + } else { + children.addAll( + [ + Positioned( + top: 0, + bottom: 0, + child: previousChildren[0], + ), + currentChild, + ], + ); + } + } + return Stack( + clipBehavior: Clip.none, + alignment: alignment, + children: children.isNotEmpty ? children : previousChildren, + ); + }, + switchOutCurve: fadeOutCurve, + child: show + ? showChild + : (hideChild ?? + SizedBox( + key: _key, + width: 0, + height: height ?? double.infinity, + )), + ), + ), + ); + } +} diff --git a/gamestore/lib/features/core/widgets/gap.dart b/gamestore/lib/features/core/widgets/gap.dart new file mode 100644 index 0000000..39cbf6f --- /dev/null +++ b/gamestore/lib/features/core/widgets/gap.dart @@ -0,0 +1,268 @@ +// ignore_for_file: library_private_types_in_public_api + +import 'package:flutter/rendering.dart'; +import 'package:flutter/widgets.dart'; + +/// Create constant size based on parent layout. +class Gap extends LeafRenderObjectWidget { + /// Constructor + const Gap(this.size, {super.key}); + + /// Pixel-size + final double size; + + @override + _RenderGap createRenderObject(BuildContext context) => _RenderGap(size); + + @override + void updateRenderObject( + BuildContext context, + covariant _RenderGap renderObject, + ) { + renderObject.gap = size; + super.updateRenderObject(context, renderObject); + } + + /// 4 pixels + static const size4 = Gap(4); + + /// 8 pixels + static const size8 = Gap(8); + + /// 16 pixels + static const size16 = Gap(16); + + /// 24 pixels + static const size24 = Gap(24); + + /// 32 pixels + static const size32 = Gap(32); + + /// 48 pixels + static const size48 = Gap(48); + + /// 64 pixels + static const size64 = Gap(64); +} + +class _RenderGap extends RenderBox { + _RenderGap(this._gap) : super() { + markNeedsLayout(); + } + + double _gap; + double get gap => _gap; + + set gap(double value) { + if (_gap != value) { + _gap = value; + markNeedsLayout(); + } + } + + @override + void performLayout() { + final parent = this.parent; + Size newSize; + if (parent is RenderFlex) { + switch (parent.direction) { + case Axis.vertical: + newSize = Size(0, gap); + case Axis.horizontal: + newSize = Size(gap, 0); + } + } else { + newSize = Size.square(gap); + } + size = constraints.constrain(newSize); + } +} + +/// Animated version of the [Gap] widget. +class AnimatedGap extends StatefulWidget { + /// Constructor + const AnimatedGap( + this.gap, { + super.key, + this.duration = const Duration(milliseconds: 200), + this.curve = Curves.easeInOut, + }); + + /// Time of animation + final Duration duration; + + /// Pixel size + final double gap; + + /// Rate of change of animation + final Curve curve; + + @override + State createState() => _AnimatedGapState(); +} + +class _AnimatedGapState extends State with SingleTickerProviderStateMixin { + late final _controller = AnimationController( + vsync: this, + value: widget.gap, + ); + + @override + void didUpdateWidget(covariant AnimatedGap oldWidget) { + if (oldWidget.gap != widget.gap) { + _controller.animateTo( + widget.gap, + curve: widget.curve, + duration: widget.duration, + ); + } + super.didUpdateWidget(oldWidget); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + builder: (context, _) { + return Gap(_controller.value); + }, + ); + } +} + +/// An [SliverGap] that can be used inside of a [RenderSliver]. +class SliverGap extends LeafRenderObjectWidget { + /// Constructor + const SliverGap(this.gap, {super.key}); + + /// Pixel size + final double gap; + + /// 4 pixels + static const size4 = SliverGap(4); + + /// 8 pixels + static const size8 = SliverGap(8); + + /// 16 pixels + static const size16 = SliverGap(16); + + /// 24 pixels + static const size24 = SliverGap(24); + + /// 32 pixels + static const size32 = SliverGap(32); + + /// 48 pixels + static const size48 = SliverGap(48); + + /// 64 pixels + static const size64 = SliverGap(64); + + @override + _RenderSliverGap createRenderObject(BuildContext context) => _RenderSliverGap(gap); + + @override + void updateRenderObject( + BuildContext context, + covariant _RenderSliverGap renderObject, + ) { + renderObject.gap = gap; + super.updateRenderObject(context, renderObject); + } +} + +class _RenderSliverGap extends RenderSliver { + _RenderSliverGap(this._gap) : super() { + markNeedsLayout(); + } + + double _gap; + + double get gap => _gap; + + set gap(double value) { + if (_gap != value) { + _gap = value; + markNeedsLayout(); + } + } + + @override + void performLayout() { + final cacheExtent = calculateCacheOffset(constraints, from: 0, to: gap); + final paintExtent = calculatePaintOffset(constraints, from: 0, to: gap); + geometry = SliverGeometry( + paintExtent: paintExtent, + scrollExtent: gap, + visible: false, + cacheExtent: cacheExtent, + maxPaintExtent: gap, + ); + } +} + +/// An [AnimatedGap] that can be used inside of a [RenderSliver]. +class AnimatedSliverGap extends StatefulWidget { + /// Constructor + const AnimatedSliverGap( + this.gap, { + super.key, + this.duration = const Duration(milliseconds: 200), + this.curve = Curves.easeInOut, + }); + + /// Time of animation + final Duration duration; + + /// Pixel size + final double gap; + + /// Rate of change of animation + final Curve curve; + + @override + State createState() => _AnimatedSliverGapState(); +} + +class _AnimatedSliverGapState extends State with SingleTickerProviderStateMixin { + late final _controller = AnimationController( + vsync: this, + duration: widget.duration, + ); + + late final _gapTween = Tween( + begin: 0, + end: widget.gap, + ); + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + void didUpdateWidget(covariant AnimatedSliverGap oldWidget) { + if (oldWidget.gap != widget.gap) { + _gapTween + ..begin = oldWidget.gap + ..end = widget.gap; + _controller + ..reset() + ..forward(); + } + super.didUpdateWidget(oldWidget); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + builder: (context, child) { + final gap = _gapTween.evaluate(_controller); + return SliverGap(gap); + }, + ); + } +} diff --git a/gamestore/lib/features/core/widgets/gs_app_bar.dart b/gamestore/lib/features/core/widgets/gs_app_bar.dart new file mode 100644 index 0000000..93a9a35 --- /dev/null +++ b/gamestore/lib/features/core/widgets/gs_app_bar.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart' show kToolbarHeight; +import 'package:flutter/widgets.dart'; +import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; + +import '../data/constants/const_colours.dart'; + +/// Standard [PlatformAppBar] for the app +class GsAppBar extends PlatformAppBar implements PreferredSizeWidget { + /// Customized app bar for the app + GsAppBar({ + Widget? title, + bool centerTitle = true, + Widget? leading, + Widget? trailing, + super.automaticallyImplyLeading = true, + super.key, + }) : super( + title: centerTitle + ? Center( + child: title, + ) + : title, + backgroundColor: ConstColours.indigoDye, + leading: leading ?? + IgnorePointer( + child: Opacity( + opacity: 0, + child: trailing, + ), + ), + trailingActions: trailing != null + ? [trailing] + : (centerTitle + ? [ + IgnorePointer( + child: Opacity(opacity: 0, child: leading), + ), + ] + : []), + cupertino: (_, __) => CupertinoNavigationBarData( + noMaterialParent: true, + transitionBetweenRoutes: true, + ), + ); + + @override + Size get preferredSize => const Size.fromHeight(kToolbarHeight); +} diff --git a/gamestore/lib/features/core/widgets/platform_custom_form.dart b/gamestore/lib/features/core/widgets/platform_custom_form.dart new file mode 100644 index 0000000..e21cb62 --- /dev/null +++ b/gamestore/lib/features/core/widgets/platform_custom_form.dart @@ -0,0 +1,83 @@ +import 'package:flutter/cupertino.dart' show CupertinoFormSection, CupertinoTextFormFieldRow; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart' show InputDecoration, TextFormField; +import 'package:flutter/widgets.dart'; +import 'package:flutter_form_builder/flutter_form_builder.dart'; +import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; + +import '../data/enums/form_field_type.dart'; +import '../forms/form_field_config.dart'; + +/// Standard form +class PlatformCustomForm extends StatelessWidget { + /// Constructor + const PlatformCustomForm({ + required this.fields, + super.key, + }); + + /// Fields to be included inside the form. + final Map fields; + + @override + Widget build(BuildContext context) { + return FormBuilder( + child: PlatformWidget( + material: (context, _) => Padding( + padding: const EdgeInsets.symmetric(horizontal: 24), + child: Column( + children: [ + for (final field in fields.entries) + ValueListenableBuilder( + valueListenable: field.value.isEnabledListenable, + builder: (context, isEnabled, _) => TextFormField( + decoration: InputDecoration(labelText: field.value.hintText), + obscureText: field.key == FormFieldType.password, + controller: field.value.textEditingController, + enabled: isEnabled, + ), + ), + ], + ), + ), + cupertino: (context, _) => fields.length == 1 + ? _ListenableCupertinoTextFormField( + field: fields.entries.first, + isEnabledListenable: fields.entries.first.value.isEnabledListenable, + ) + : CupertinoFormSection.insetGrouped( + children: [ + for (final field in fields.entries) + _ListenableCupertinoTextFormField( + field: field, + isEnabledListenable: field.value.isEnabledListenable, + ), + ], + ), + ), + ); + } +} + +class _ListenableCupertinoTextFormField extends StatelessWidget { + const _ListenableCupertinoTextFormField({ + required this.field, + required this.isEnabledListenable, + }); + + final MapEntry field; + final ValueListenable isEnabledListenable; + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: field.value.isEnabledListenable, + builder: (context, isEnabled, _) => CupertinoTextFormFieldRow( + prefix: Text(field.value.hintText ?? ''), + obscureText: field.key == FormFieldType.password, + controller: field.value.textEditingController, + enabled: isEnabled, + ), + ); + } +} diff --git a/gamestore/lib/features/core/widgets/state/multi_value_listenable_builder.dart b/gamestore/lib/features/core/widgets/state/multi_value_listenable_builder.dart new file mode 100644 index 0000000..be35c3e --- /dev/null +++ b/gamestore/lib/features/core/widgets/state/multi_value_listenable_builder.dart @@ -0,0 +1,43 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; + +/// This widget listens to multiple [ValueListenable]s and calls given builder function +/// if any one of them changes. +class MultiValueListenableBuilder extends StatelessWidget { + /// Constructor + const MultiValueListenableBuilder({ + required this.valueListenables, + required this.builder, + this.child, + super.key, + }) : assert( + valueListenables.length != 0, + 'Attached valueListenables must not be empty', + ); + + /// List of [ValueListenable]s to be listened to. + final List> valueListenables; + + /// The builder function to be called when value of any of the [ValueListenable] changes. + /// The order of values list will be same as [valueListenables] list. + final Widget Function(BuildContext context, List values, Widget? child) builder; + + /// An optional child widget which will be available as child parameter in [builder]. + final Widget? child; + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: Listenable.merge(valueListenables), + builder: (context, child) { + final providedValues = valueListenables.map((listenable) => listenable.value); + return builder( + context, + List.unmodifiable(providedValues), + child, + ); + }, + child: child, + ); + } +} diff --git a/gamestore/lib/features/core/widgets/state/view_model_builder.dart b/gamestore/lib/features/core/widgets/state/view_model_builder.dart new file mode 100644 index 0000000..c2a3d7d --- /dev/null +++ b/gamestore/lib/features/core/widgets/state/view_model_builder.dart @@ -0,0 +1,74 @@ +import 'package:flutter/widgets.dart'; +import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; +import 'package:provider/provider.dart'; + +import '/features/core/abstracts/base_view_model.dart'; +import '../../data/constants/const_durations.dart'; +import '../animations/fade_in_fade_out_switcher.dart'; + +/// Builds the bridge between a View and the View Model +class ViewModelBuilder extends StatefulWidget { + /// Builds the bridge between a View and the View Model + const ViewModelBuilder({ + required Widget Function(BuildContext context, T model) builder, + required T Function() viewModelBuilder, + required BuildContext disposableBuildContext, + dynamic Function()? argumentBuilder, + Widget? loadingIndicator, + super.key, + }) : _builder = builder, + _viewModelBuilder = viewModelBuilder, + _argumentBuilder = argumentBuilder, + _loadingIndicator = loadingIndicator, + _disposableBuildContext = disposableBuildContext; + + final Widget Function(BuildContext context, T model) _builder; + final T Function() _viewModelBuilder; + final dynamic Function()? _argumentBuilder; + + final Widget? _loadingIndicator; + final BuildContext _disposableBuildContext; + + @override + // ignore: library_private_types_in_public_api + _ViewModelBuilderState createState() => _ViewModelBuilderState(); +} + +class _ViewModelBuilderState extends State> { + late final T _viewModel; + + @override + void initState() { + _viewModel = widget._viewModelBuilder(); + _viewModel.initialise( + widget._disposableBuildContext, + () => mounted, + widget._argumentBuilder?.call(), + ); + super.initState(); + } + + @override + void dispose() { + _viewModel.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext _) => ChangeNotifierProvider.value( + value: _viewModel, + child: Consumer( + builder: (context, model, _) => ValueListenableBuilder( + valueListenable: _viewModel.isInitialised, + builder: (context, isInitialised, _) => FadeInFadeOutSwitcher( + animationDuration: ConstDurations.oneAndHalfDefaultAnimationDuration, + child: isInitialised + ? widget._builder(context, model) + : Center( + child: widget._loadingIndicator ?? PlatformCircularProgressIndicator(), + ), + ), + ), + ), + ); +} diff --git a/gamestore/lib/features/core/widgets/state/view_model_widget.dart b/gamestore/lib/features/core/widgets/state/view_model_widget.dart new file mode 100644 index 0000000..5eab2a9 --- /dev/null +++ b/gamestore/lib/features/core/widgets/state/view_model_widget.dart @@ -0,0 +1,38 @@ +// ignore_for_file: library_private_types_in_public_api + +import 'package:flutter/widgets.dart'; +import 'package:provider/provider.dart'; + +/// Provides a model to a widget and rebuilds when notifyListeners is called. +/// +/// Do keep in mind that you need to have the model in the context, +/// so only use these widgets inside the views of the view models +/// where the view model is present. +abstract class ViewModelWidget extends Widget { + /// Constructor + const ViewModelWidget({super.key}); + + /// Build abstract method + @protected + Widget build(BuildContext context, T model); + + @override + _DataProviderElement createElement() => _DataProviderElement(this); +} + +class _DataProviderElement extends ComponentElement { + _DataProviderElement(ViewModelWidget super.widget); + + @override + ViewModelWidget get widget => super.widget as ViewModelWidget; + + @override + Widget build() => widget.build(this, Provider.of(this)); + + @override + void update(ViewModelWidget newWidget) { + super.update(newWidget); + assert(widget == newWidget, 'widget is the same as newWidget'); + rebuild(); + } +} diff --git a/gamestore/lib/l10n/generated/intl/messages_all.dart b/gamestore/lib/l10n/generated/intl/messages_all.dart new file mode 100644 index 0000000..203415c --- /dev/null +++ b/gamestore/lib/l10n/generated/intl/messages_all.dart @@ -0,0 +1,63 @@ +// 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. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:implementation_imports, file_names, unnecessary_new +// ignore_for_file:unnecessary_brace_in_string_interps, directives_ordering +// ignore_for_file:argument_type_not_assignable, invalid_assignment +// ignore_for_file:prefer_single_quotes, prefer_generic_function_type_aliases +// ignore_for_file:comment_references + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; +import 'package:intl/src/intl_helpers.dart'; + +import 'messages_en.dart' as messages_en; + +typedef Future LibraryLoader(); +Map _deferredLibraries = { + 'en': () => new SynchronousFuture(null), +}; + +MessageLookupByLibrary? _findExact(String localeName) { + switch (localeName) { + case 'en': + return messages_en.messages; + default: + return null; + } +} + +/// User programs should call this before using [localeName] for messages. +Future initializeMessages(String localeName) { + var availableLocale = Intl.verifiedLocale( + localeName, (locale) => _deferredLibraries[locale] != null, + onFailure: (_) => null); + if (availableLocale == null) { + return new SynchronousFuture(false); + } + var lib = _deferredLibraries[availableLocale]; + lib == null ? new SynchronousFuture(false) : lib(); + initializeInternalMessageLookup(() => new CompositeMessageLookup()); + messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor); + return new SynchronousFuture(true); +} + +bool _messagesExistFor(String locale) { + try { + return _findExact(locale) != null; + } catch (e) { + return false; + } +} + +MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) { + var actualLocale = + Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null); + if (actualLocale == null) return null; + return _findExact(actualLocale); +} diff --git a/gamestore/lib/l10n/generated/intl/messages_en.dart b/gamestore/lib/l10n/generated/intl/messages_en.dart new file mode 100644 index 0000000..2952cbb --- /dev/null +++ b/gamestore/lib/l10n/generated/intl/messages_en.dart @@ -0,0 +1,30 @@ +// 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 +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes +// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'en'; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "formFieldRequired": + MessageLookupByLibrary.simpleMessage("This is required"), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Something went wrong") + }; +} diff --git a/gamestore/lib/l10n/generated/l10n.dart b/gamestore/lib/l10n/generated/l10n.dart new file mode 100644 index 0000000..4c14d0e --- /dev/null +++ b/gamestore/lib/l10n/generated/l10n.dart @@ -0,0 +1,98 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'intl/messages_all.dart'; + +// ************************************************************************** +// Generator: Flutter Intl IDE plugin +// Made by Localizely +// ************************************************************************** + +// ignore_for_file: non_constant_identifier_names, lines_longer_than_80_chars +// ignore_for_file: join_return_with_assignment, prefer_final_in_for_each +// ignore_for_file: avoid_redundant_argument_values, avoid_escaping_inner_quotes + +class Strings { + Strings(); + + static Strings? _current; + + static Strings get current { + assert(_current != null, + 'No instance of Strings was loaded. Try to initialize the Strings delegate before accessing Strings.current.'); + return _current!; + } + + static const AppLocalizationDelegate delegate = AppLocalizationDelegate(); + + static Future load(Locale locale) { + final name = (locale.countryCode?.isEmpty ?? false) + ? locale.languageCode + : locale.toString(); + final localeName = Intl.canonicalizedLocale(name); + return initializeMessages(localeName).then((_) { + Intl.defaultLocale = localeName; + final instance = Strings(); + Strings._current = instance; + + return instance; + }); + } + + static Strings of(BuildContext context) { + final instance = Strings.maybeOf(context); + assert(instance != null, + 'No instance of Strings present in the widget tree. Did you add Strings.delegate in localizationsDelegates?'); + return instance!; + } + + static Strings? maybeOf(BuildContext context) { + return Localizations.of(context, Strings); + } + + /// `Something went wrong` + String get somethingWentWrong { + return Intl.message( + 'Something went wrong', + name: 'somethingWentWrong', + desc: '', + args: [], + ); + } + + /// `This is required` + String get formFieldRequired { + return Intl.message( + 'This is required', + name: 'formFieldRequired', + desc: '', + args: [], + ); + } +} + +class AppLocalizationDelegate extends LocalizationsDelegate { + const AppLocalizationDelegate(); + + List get supportedLocales { + return const [ + Locale.fromSubtags(languageCode: 'en'), + ]; + } + + @override + bool isSupported(Locale locale) => _isSupported(locale); + @override + Future load(Locale locale) => Strings.load(locale); + @override + bool shouldReload(AppLocalizationDelegate old) => false; + + bool _isSupported(Locale locale) { + for (var supportedLocale in supportedLocales) { + if (supportedLocale.languageCode == locale.languageCode) { + return true; + } + } + return false; + } +} diff --git a/gamestore/lib/l10n/intl_en.arb b/gamestore/lib/l10n/intl_en.arb new file mode 100644 index 0000000..b8a2ca0 --- /dev/null +++ b/gamestore/lib/l10n/intl_en.arb @@ -0,0 +1,6 @@ +{ + "@@locale": "en", + + "somethingWentWrong": "Something went wrong", + "formFieldRequired": "This is required" +} \ No newline at end of file diff --git a/gamestore/lib/locator.dart b/gamestore/lib/locator.dart new file mode 100644 index 0000000..ae3d1b8 --- /dev/null +++ b/gamestore/lib/locator.dart @@ -0,0 +1,70 @@ +import 'dart:async'; + +import 'package:gamestore/features/auth/services/auth_service.dart'; +import 'package:gamestore/features/core/services/navigation/navigation_service.dart'; +import 'package:gamestore/features/core/views/home/home_view_model.dart'; +import 'package:get_it/get_it.dart'; + +import 'features/core/services/logging_service.dart'; + +/// Locates dependency for DI +GetIt get locate => Locator.instance(); + +/// Dependency Injection +class Locator { + /// Instance of [GetIt] + static GetIt instance() => GetIt.instance; + + /// Callback for performing a DI lookup + static T locate() => instance().get(); + + /// Set up of all DI registrations + static Future setup() async { + final locator = instance()..registerFactory(LoggingService.new); + + _registerStores(locator); + _registerAPIs(locator); + _registerViewModels(locator); + _registerLazySingletons(); + _registerFactories(); + + await _registerDaos(locator); + await _registerServices(locator); + + await _registerRepos(locator); + await _registerBlocs(locator); + + _registerSingletons(); + } + + static void _registerAPIs(GetIt it) {} + + static void _registerLazySingletons() {} + + static void _registerSingletons() {} + + static void _registerFactories() {} + + static void _registerStores(GetIt it) {} + + static Future _registerBlocs(GetIt it) async {} + + static Future _registerDaos(GetIt it) async {} + + static Future _registerRepos(GetIt it) async {} + + static Future _registerServices(GetIt it) async { + it + ..registerLazySingleton(AuthService.new) + ..registerLazySingleton(NavigationService.new); + } + + static void _registerViewModels(GetIt it) { + it.registerFactory( + () => HomeViewModel( + authService: AuthService.locate, + navigationService: NavigationService.locate, + ), + ); + } +} diff --git a/gamestore/lib/main_dev.dart b/gamestore/lib/main_dev.dart new file mode 100644 index 0000000..e82d712 --- /dev/null +++ b/gamestore/lib/main_dev.dart @@ -0,0 +1,7 @@ +import 'app.dart'; +import 'features/core/data/enums/environment_type.dart'; + +Future main() async { + EnvironmentType.dev.override(); + await mainRoot(); +} diff --git a/gamestore/lib/main_prod.dart b/gamestore/lib/main_prod.dart new file mode 100644 index 0000000..e82d712 --- /dev/null +++ b/gamestore/lib/main_prod.dart @@ -0,0 +1,7 @@ +import 'app.dart'; +import 'features/core/data/enums/environment_type.dart'; + +Future main() async { + EnvironmentType.dev.override(); + await mainRoot(); +} diff --git a/gamestore/pubspec.yaml b/gamestore/pubspec.yaml new file mode 100644 index 0000000..197eb89 --- /dev/null +++ b/gamestore/pubspec.yaml @@ -0,0 +1,107 @@ +name: gamestore +description: A new Flutter project. +publish_to: 'none' +version: 1.0.0+1 +environment: + flutter: '>=3.13.0 <4.0.0' + sdk: '>=3.0.0 <4.0.0' + + + + + + +dependencies: + flutter: + sdk: flutter + + # Firebase + cloud_firestore: ^4.12.1 + firebase_core: ^2.20.0 + firebase_crashlytics: ^3.4.2 + + # Backend + get_it: ^7.6.4 + + # UI + animated_list_plus: ^0.5.2 + cupertino_icons: ^1.0.6 + flutter_form_builder: ^9.1.1 + enough_platform_widgets: ^0.7.4 + + # Utils + flutter_screenutil: ^5.9.0 + flutter_svg: ^2.0.8 + form_builder_validators: ^9.1.0 + go_router: ^12.0.0 + intl: 0.18.1 + intl_utils: ^2.8.5 + + # Data + dartz: ^0.10.1 + envied: ^0.3.0+3 + hive: ^2.2.3 + hive_flutter: ^1.1.0 + json_annotation: ^4.8.1 + json_serializable: ^6.7.1 + + # Networking + dio: ^5.3.3 + + # Logging + talker: ^3.1.4 + talker_dio_logger: ^2.3.1 + + # State management + equatable: ^2.0.5 + informers: ^0.0.3+1 + provider: ^6.0.5 + + + + + + +dev_dependencies: + # Generators + build_runner: ^2.4.6 + envied_generator: ^0.3.0+3 + + # Analysis + analyzer: ^5.13.0 + flutter_lints: ^3.0.0 + very_good_analysis: ^5.1.0 + + # Testing + flutter_test: + sdk: flutter + + # Bundling + flutter_flavorizr: ^2.2.1 + flutter_native_splash: ^2.3.4 + flutter_launcher_icons: ^0.13.1 + + + + + + +flutter: + generate: true + uses-material-design: true + + assets: + - assets/icons/ + - assets/logos/ + + + + + + +flutter_intl: + enabled: true + class_name: Strings + main_locale: "en" + output_dir: lib/l10n/generated + # use_deferred_loading: true diff --git a/gamestore/test/widget_test.dart b/gamestore/test/widget_test.dart new file mode 100644 index 0000000..62e6a58 --- /dev/null +++ b/gamestore/test/widget_test.dart @@ -0,0 +1,29 @@ +// 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/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:gamestore/app.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const GamestoreApp()); + + // 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); + }); +}