From 32f38d493a7f61ffd8b1af30e2224686b4d8d5db Mon Sep 17 00:00:00 2001 From: venkat9507 <70470427+venkat9507@users.noreply.github.com> Date: Sun, 24 Nov 2024 19:47:53 +0530 Subject: [PATCH] integrated-local-database-with-talker 1. Local database integrated initially made it as beta will change that in next release 2. Now when the user restarts the app it will still maintain logs 3. Created sample app with local database separately --- .../{ => shop_app_example}/.firebaserc | 0 .../{ => shop_app_example}/.gitignore | 2 +- .../{ => shop_app_example}/.metadata | 0 .../{ => shop_app_example}/README.md | 0 .../analysis_options.yaml | 0 .../{ => shop_app_example}/android/.gitignore | 0 .../shop_app_example/android/app/build.gradle | 76 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 + .../example/shop_app_example/MainActivity.kt | 0 .../res/drawable-v21/launch_background.xml | 0 .../main/res/drawable/launch_background.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app/src/main/res/values-night/styles.xml | 0 .../app/src/main/res/values/styles.xml | 0 .../app/src/profile/AndroidManifest.xml | 7 + .../shop_app_example/android/build.gradle | 31 + .../android/gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../shop_app_example/android/settings.gradle | 29 + .../assets/air_max_plus.png | Bin .../assets/air_max_plus_white.png | Bin .../{ => shop_app_example}/assets/black.png | Bin .../assets/blue_shoe.png | Bin .../{ => shop_app_example}/assets/flutter.png | Bin .../{ => shop_app_example}/assets/github.png | Bin .../assets/iphone_mockup.png | Bin .../assets/red_shoe.png | Bin .../devtools_options.yaml | 0 .../{ => shop_app_example}/firebase.json | 0 .../{ => shop_app_example}/ios/.gitignore | 0 .../ios/Flutter/AppFrameworkInfo.plist | 0 .../ios/Flutter/Debug.xcconfig | 0 .../ios/Flutter/Release.xcconfig | 0 .../{ => shop_app_example}/ios/Podfile | 0 .../shop_app_example/ios/Podfile.lock | 161 +++++ .../ios/Runner.xcodeproj/project.pbxproj | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/WorkspaceSettings.xcsettings | 0 .../ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 0 .../Icon-App-1024x1024@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin .../Icon-App-83.5x83.5@2x.png | Bin .../LaunchImage.imageset/Contents.json | 0 .../LaunchImage.imageset/LaunchImage.png | Bin .../LaunchImage.imageset/LaunchImage@2x.png | Bin .../LaunchImage.imageset/LaunchImage@3x.png | Bin .../LaunchImage.imageset/README.md | 0 .../Runner/Base.lproj/LaunchScreen.storyboard | 0 .../ios/Runner/Base.lproj/Main.storyboard | 0 .../ios/Runner/Info.plist | 0 .../ios/Runner/Runner-Bridging-Header.h | 0 .../lib/features/product/bloc/bloc.dart | 0 .../product/bloc/product/product_bloc.dart | 0 .../product/bloc/product/product_event.dart | 0 .../product/bloc/product/product_state.dart | 0 .../lib/features/product/product.dart | 0 .../features/product/view/product_screen.dart | 0 .../lib/features/product/view/view.dart | 0 .../lib/features/products/bloc/bloc.dart | 0 .../products/bloc/products/products_bloc.dart | 0 .../bloc/products/products_event.dart | 0 .../bloc/products/products_state.dart | 0 .../lib/features/products/products.dart | 0 .../products/view/products_screen.dart | 0 .../lib/features/products/view/view.dart | 0 .../products/widgets/product_card.dart | 0 .../features/products/widgets/widgets.dart | 0 .../lib/firebase_options.dart | 0 .../{ => shop_app_example}/lib/main.dart | 6 +- .../abstarct_products_repository.dart | 0 .../repositories/products/models/models.dart | 0 .../repositories/products/models/product.dart | 0 .../lib/repositories/products/products.dart | 0 .../products/products_repository.dart | 0 .../lib/ui/presentation_frame.dart | 0 .../lib/ui/presentation_widget.dart | 0 .../{ => shop_app_example}/lib/ui/router.dart | 0 .../shop_app_example/lib/ui/theme.dart | 43 ++ .../{ => shop_app_example}/lib/ui/ui.dart | 0 .../{ => shop_app_example}/lib/utils/di.dart | 0 .../shop_app_example/lib/utils/good_log.dart | 22 + .../lib/utils/scroll_behavior.dart | 0 .../lib/utils/utils.dart | 0 .../{ => shop_app_example}/linux/.gitignore | 0 .../linux/CMakeLists.txt | 0 .../linux/flutter/CMakeLists.txt | 0 .../flutter/generated_plugin_registrant.cc | 0 .../flutter/generated_plugin_registrant.h | 0 .../linux/flutter/generated_plugins.cmake | 0 .../{ => shop_app_example}/linux/main.cc | 0 .../linux/my_application.cc | 0 .../linux/my_application.h | 0 .../{ => shop_app_example}/macos/.gitignore | 0 .../macos/Flutter/Flutter-Debug.xcconfig | 0 .../macos/Flutter/Flutter-Release.xcconfig | 0 .../Flutter/GeneratedPluginRegistrant.swift | 0 .../{ => shop_app_example}/macos/Podfile | 0 .../{ => shop_app_example}/macos/Podfile.lock | 0 .../macos/Runner.xcodeproj/project.pbxproj | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../macos/Runner/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/app_icon_1024.png | Bin .../AppIcon.appiconset/app_icon_128.png | Bin .../AppIcon.appiconset/app_icon_16.png | Bin .../AppIcon.appiconset/app_icon_256.png | Bin .../AppIcon.appiconset/app_icon_32.png | Bin .../AppIcon.appiconset/app_icon_512.png | Bin .../AppIcon.appiconset/app_icon_64.png | Bin .../macos/Runner/Base.lproj/MainMenu.xib | 0 .../macos/Runner/Configs/AppInfo.xcconfig | 0 .../macos/Runner/Configs/Debug.xcconfig | 0 .../macos/Runner/Configs/Release.xcconfig | 0 .../macos/Runner/Configs/Warnings.xcconfig | 0 .../macos/Runner/DebugProfile.entitlements | 0 .../macos/Runner/Info.plist | 0 .../macos/Runner/MainFlutterWindow.swift | 0 .../macos/Runner/Release.entitlements | 0 .../shop_app_example/pubspec.yaml | 32 + .../pubspec_overrides.yaml | 0 .../{ => shop_app_example}/web/favicon.png | Bin .../web/icons/Icon-192.png | Bin .../web/icons/Icon-512.png | Bin .../web/icons/Icon-maskable-192.png | Bin .../web/icons/Icon-maskable-512.png | Bin .../{ => shop_app_example}/web/index.html | 0 .../{ => shop_app_example}/web/manifest.json | 0 .../{ => shop_app_example}/windows/.gitignore | 0 .../windows/CMakeLists.txt | 0 .../windows/flutter/CMakeLists.txt | 0 .../flutter/generated_plugin_registrant.cc | 0 .../flutter/generated_plugin_registrant.h | 0 .../windows/flutter/generated_plugins.cmake | 0 .../windows/runner/CMakeLists.txt | 0 .../windows/runner/Runner.rc | 0 .../windows/runner/flutter_window.cpp | 0 .../windows/runner/flutter_window.h | 0 .../windows/runner/main.cpp | 0 .../windows/runner/resource.h | 0 .../windows/runner/resources/app_icon.ico | Bin .../windows/runner/runner.exe.manifest | 0 .../windows/runner/utils.cpp | 0 .../windows/runner/utils.h | 0 .../windows/runner/win32_window.cpp | 0 .../windows/runner/win32_window.h | 0 .../.firebaserc | 5 + .../.fvmrc | 3 + .../.gitignore | 49 ++ .../.metadata | 45 ++ .../.vscode/settings.json | 3 + .../README.md | 16 + .../analysis_options.yaml | 29 + .../android/.gitignore | 13 + .../android/app/build.gradle | 76 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 + .../example/shop_app_example/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 + .../app/src/profile/AndroidManifest.xml | 7 + .../android/build.gradle | 31 + .../android/gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../android/settings.gradle | 29 + .../assets/air_max_plus.png | Bin 0 -> 52070 bytes .../assets/air_max_plus_white.png | Bin 0 -> 47038 bytes .../assets/black.png | Bin 0 -> 14952 bytes .../assets/blue_shoe.png | Bin 0 -> 46529 bytes .../assets/flutter.png | Bin 0 -> 4436 bytes .../assets/github.png | Bin 0 -> 105814 bytes .../assets/iphone_mockup.png | Bin 0 -> 54534 bytes .../assets/red_shoe.png | Bin 0 -> 82014 bytes .../devtools_options.yaml | 1 + .../firebase.json | 16 + .../ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../ios/Flutter/Debug.xcconfig | 2 + .../ios/Flutter/Release.xcconfig | 2 + .../ios/Podfile | 41 ++ .../ios/Podfile.lock | 0 .../ios/Runner.xcodeproj/project.pbxproj | 555 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../ios/Runner/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 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 + .../ios/Runner/Info.plist | 51 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../lib/features/product/bloc/bloc.dart | 1 + .../product/bloc/product/product_bloc.dart | 59 ++ .../product/bloc/product/product_event.dart | 35 + .../product/bloc/product/product_state.dart | 22 + .../lib/features/product/product.dart | 1 + .../features/product/view/product_screen.dart | 284 ++++++++ .../lib/features/product/view/view.dart | 1 + .../lib/features/products/bloc/bloc.dart | 1 + .../products/bloc/products/products_bloc.dart | 32 + .../bloc/products/products_event.dart | 13 + .../bloc/products/products_state.dart | 25 + .../lib/features/products/products.dart | 1 + .../products/view/products_screen.dart | 220 ++++++ .../lib/features/products/view/view.dart | 1 + .../products/widgets/product_card.dart | 83 +++ .../features/products/widgets/widgets.dart | 1 + .../lib/firebase_options.dart | 64 ++ .../lib/main.dart | 115 +++ .../abstarct_products_repository.dart | 8 + .../repositories/products/models/models.dart | 1 + .../repositories/products/models/product.dart | 43 ++ .../lib/repositories/products/products.dart | 3 + .../products/products_repository.dart | 92 +++ .../lib/ui/presentation_frame.dart | 312 +++++++++ .../lib/ui/presentation_widget.dart | 33 + .../lib/ui/router.dart | 22 + .../lib/ui/theme.dart | 0 .../lib/ui/ui.dart | 2 + .../lib/utils/di.dart | 6 + .../lib/utils/scroll_behavior.dart | 25 + .../lib/utils/utils.dart | 1 + .../linux/.gitignore | 1 + .../linux/CMakeLists.txt | 138 ++++ .../linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 19 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 25 + .../linux/main.cc | 6 + .../linux/my_application.cc | 104 +++ .../linux/my_application.h | 18 + .../macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 22 + .../macos/Podfile | 40 ++ .../macos/Podfile.lock | 152 ++++ .../macos/Runner.xcodeproj/project.pbxproj | 633 +++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../pubspec.lock | 653 ++++++++++++++++++ .../pubspec.yaml | 40 ++ .../pubspec_overrides.yaml | 16 + .../web/favicon.png | Bin 0 -> 917 bytes .../web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../web/index.html | 52 ++ .../web/manifest.json | 23 + .../windows/.gitignore | 17 + .../windows/CMakeLists.txt | 101 +++ .../windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 23 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 27 + .../windows/runner/CMakeLists.txt | 39 ++ .../windows/runner/Runner.rc | 121 ++++ .../windows/runner/flutter_window.cpp | 61 ++ .../windows/runner/flutter_window.h | 33 + .../windows/runner/main.cpp | 43 ++ .../windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 20 + .../windows/runner/utils.cpp | 64 ++ .../windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 245 +++++++ .../windows/runner/win32_window.h | 98 +++ packages/talker/.flutter-plugins | 7 + packages/talker/lib/objectbox-model.json | 77 +++ packages/talker/lib/objectbox.g.dart | 233 +++++++ packages/talker/lib/src/database/db.dart | 63 ++ packages/talker/lib/src/history.dart | 15 +- .../talker/lib/src/models/talker_data.dart | 174 +++-- packages/talker/lib/src/settings.dart | 7 + packages/talker/lib/src/talker.dart | 47 +- packages/talker/pubspec.yaml | 5 + .../talker_dio_logger/example/pubspec.lock | 4 +- .../.plugin_symlinks/path_provider_linux | 2 +- .../ephemeral/.plugin_symlinks/share_plus | 2 +- .../.plugin_symlinks/url_launcher_linux | 2 +- packages/talker_flutter/example/pubspec.lock | 4 +- .../lib/src/extensions/talker_flutter.dart | 17 + .../talker_settings_bottom_sheet.dart | 28 + .../lib/src/ui/talker_view.dart | 21 +- 361 files changed, 7853 insertions(+), 74 deletions(-) rename examples/shop_app_example/{ => shop_app_example}/.firebaserc (100%) rename examples/shop_app_example/{ => shop_app_example}/.gitignore (98%) rename examples/shop_app_example/{ => shop_app_example}/.metadata (100%) rename examples/shop_app_example/{ => shop_app_example}/README.md (100%) rename examples/shop_app_example/{ => shop_app_example}/analysis_options.yaml (100%) rename examples/shop_app_example/{ => shop_app_example}/android/.gitignore (100%) create mode 100644 examples/shop_app_example/shop_app_example/android/app/build.gradle create mode 100644 examples/shop_app_example/shop_app_example/android/app/src/debug/AndroidManifest.xml create mode 100644 examples/shop_app_example/shop_app_example/android/app/src/main/AndroidManifest.xml rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/drawable-v21/launch_background.xml (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/drawable/launch_background.xml (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/values-night/styles.xml (100%) rename examples/shop_app_example/{ => shop_app_example}/android/app/src/main/res/values/styles.xml (100%) create mode 100644 examples/shop_app_example/shop_app_example/android/app/src/profile/AndroidManifest.xml create mode 100644 examples/shop_app_example/shop_app_example/android/build.gradle create mode 100644 examples/shop_app_example/shop_app_example/android/gradle.properties create mode 100644 examples/shop_app_example/shop_app_example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/shop_app_example/shop_app_example/android/settings.gradle rename examples/shop_app_example/{ => shop_app_example}/assets/air_max_plus.png (100%) rename examples/shop_app_example/{ => shop_app_example}/assets/air_max_plus_white.png (100%) rename examples/shop_app_example/{ => shop_app_example}/assets/black.png (100%) rename examples/shop_app_example/{ => shop_app_example}/assets/blue_shoe.png (100%) rename examples/shop_app_example/{ => shop_app_example}/assets/flutter.png (100%) rename examples/shop_app_example/{ => shop_app_example}/assets/github.png (100%) rename examples/shop_app_example/{ => shop_app_example}/assets/iphone_mockup.png (100%) rename examples/shop_app_example/{ => shop_app_example}/assets/red_shoe.png (100%) rename examples/shop_app_example/{ => shop_app_example}/devtools_options.yaml (100%) rename examples/shop_app_example/{ => shop_app_example}/firebase.json (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/.gitignore (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Flutter/AppFrameworkInfo.plist (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Flutter/Debug.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Flutter/Release.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Podfile (100%) create mode 100644 examples/shop_app_example/shop_app_example/ios/Podfile.lock rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcodeproj/project.pbxproj (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcworkspace/contents.xcworkspacedata (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (100%) create mode 100644 examples/shop_app_example/shop_app_example/ios/Runner/AppDelegate.swift rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Base.lproj/LaunchScreen.storyboard (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Base.lproj/Main.storyboard (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Info.plist (100%) rename examples/shop_app_example/{ => shop_app_example}/ios/Runner/Runner-Bridging-Header.h (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/product/bloc/bloc.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/product/bloc/product/product_bloc.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/product/bloc/product/product_event.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/product/bloc/product/product_state.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/product/product.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/product/view/product_screen.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/product/view/view.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/bloc/bloc.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/bloc/products/products_bloc.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/bloc/products/products_event.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/bloc/products/products_state.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/products.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/view/products_screen.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/view/view.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/widgets/product_card.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/features/products/widgets/widgets.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/firebase_options.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/main.dart (92%) rename examples/shop_app_example/{ => shop_app_example}/lib/repositories/products/abstarct_products_repository.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/repositories/products/models/models.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/repositories/products/models/product.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/repositories/products/products.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/repositories/products/products_repository.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/ui/presentation_frame.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/ui/presentation_widget.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/ui/router.dart (100%) create mode 100644 examples/shop_app_example/shop_app_example/lib/ui/theme.dart rename examples/shop_app_example/{ => shop_app_example}/lib/ui/ui.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/utils/di.dart (100%) create mode 100644 examples/shop_app_example/shop_app_example/lib/utils/good_log.dart rename examples/shop_app_example/{ => shop_app_example}/lib/utils/scroll_behavior.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/lib/utils/utils.dart (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/.gitignore (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/CMakeLists.txt (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/flutter/CMakeLists.txt (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/flutter/generated_plugin_registrant.cc (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/flutter/generated_plugin_registrant.h (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/flutter/generated_plugins.cmake (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/main.cc (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/my_application.cc (100%) rename examples/shop_app_example/{ => shop_app_example}/linux/my_application.h (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/.gitignore (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Flutter/Flutter-Debug.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Flutter/Flutter-Release.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Flutter/GeneratedPluginRegistrant.swift (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Podfile (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Podfile.lock (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner.xcodeproj/project.pbxproj (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner.xcworkspace/contents.xcworkspacedata (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/AppDelegate.swift (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Base.lproj/MainMenu.xib (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Configs/AppInfo.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Configs/Debug.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Configs/Release.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Configs/Warnings.xcconfig (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/DebugProfile.entitlements (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Info.plist (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/MainFlutterWindow.swift (100%) rename examples/shop_app_example/{ => shop_app_example}/macos/Runner/Release.entitlements (100%) create mode 100644 examples/shop_app_example/shop_app_example/pubspec.yaml rename examples/shop_app_example/{ => shop_app_example}/pubspec_overrides.yaml (100%) rename examples/shop_app_example/{ => shop_app_example}/web/favicon.png (100%) rename examples/shop_app_example/{ => shop_app_example}/web/icons/Icon-192.png (100%) rename examples/shop_app_example/{ => shop_app_example}/web/icons/Icon-512.png (100%) rename examples/shop_app_example/{ => shop_app_example}/web/icons/Icon-maskable-192.png (100%) rename examples/shop_app_example/{ => shop_app_example}/web/icons/Icon-maskable-512.png (100%) rename examples/shop_app_example/{ => shop_app_example}/web/index.html (100%) rename examples/shop_app_example/{ => shop_app_example}/web/manifest.json (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/.gitignore (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/CMakeLists.txt (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/flutter/CMakeLists.txt (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/flutter/generated_plugin_registrant.cc (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/flutter/generated_plugin_registrant.h (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/flutter/generated_plugins.cmake (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/CMakeLists.txt (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/Runner.rc (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/flutter_window.cpp (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/flutter_window.h (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/main.cpp (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/resource.h (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/resources/app_icon.ico (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/runner.exe.manifest (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/utils.cpp (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/utils.h (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/win32_window.cpp (100%) rename examples/shop_app_example/{ => shop_app_example}/windows/runner/win32_window.h (100%) create mode 100644 examples/shop_app_with_local_database_example/.firebaserc create mode 100644 examples/shop_app_with_local_database_example/.fvmrc create mode 100644 examples/shop_app_with_local_database_example/.gitignore create mode 100644 examples/shop_app_with_local_database_example/.metadata create mode 100644 examples/shop_app_with_local_database_example/.vscode/settings.json create mode 100644 examples/shop_app_with_local_database_example/README.md create mode 100644 examples/shop_app_with_local_database_example/analysis_options.yaml create mode 100644 examples/shop_app_with_local_database_example/android/.gitignore create mode 100644 examples/shop_app_with_local_database_example/android/app/build.gradle create mode 100644 examples/shop_app_with_local_database_example/android/app/src/debug/AndroidManifest.xml create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/AndroidManifest.xml create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/values-night/styles.xml create mode 100644 examples/shop_app_with_local_database_example/android/app/src/main/res/values/styles.xml create mode 100644 examples/shop_app_with_local_database_example/android/app/src/profile/AndroidManifest.xml create mode 100644 examples/shop_app_with_local_database_example/android/build.gradle create mode 100644 examples/shop_app_with_local_database_example/android/gradle.properties create mode 100644 examples/shop_app_with_local_database_example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 examples/shop_app_with_local_database_example/android/settings.gradle create mode 100644 examples/shop_app_with_local_database_example/assets/air_max_plus.png create mode 100644 examples/shop_app_with_local_database_example/assets/air_max_plus_white.png create mode 100644 examples/shop_app_with_local_database_example/assets/black.png create mode 100644 examples/shop_app_with_local_database_example/assets/blue_shoe.png create mode 100644 examples/shop_app_with_local_database_example/assets/flutter.png create mode 100644 examples/shop_app_with_local_database_example/assets/github.png create mode 100644 examples/shop_app_with_local_database_example/assets/iphone_mockup.png create mode 100644 examples/shop_app_with_local_database_example/assets/red_shoe.png create mode 100644 examples/shop_app_with_local_database_example/devtools_options.yaml create mode 100644 examples/shop_app_with_local_database_example/firebase.json create mode 100644 examples/shop_app_with_local_database_example/ios/.gitignore create mode 100644 examples/shop_app_with_local_database_example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 examples/shop_app_with_local_database_example/ios/Flutter/Debug.xcconfig create mode 100644 examples/shop_app_with_local_database_example/ios/Flutter/Release.xcconfig create mode 100644 examples/shop_app_with_local_database_example/ios/Podfile rename examples/{shop_app_example => shop_app_with_local_database_example}/ios/Podfile.lock (100%) create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename examples/{shop_app_example => shop_app_with_local_database_example}/ios/Runner/AppDelegate.swift (100%) create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Info.plist create mode 100644 examples/shop_app_with_local_database_example/ios/Runner/Runner-Bridging-Header.h create mode 100644 examples/shop_app_with_local_database_example/lib/features/product/bloc/bloc.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_bloc.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_event.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_state.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/product/product.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/product/view/product_screen.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/product/view/view.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/bloc/bloc.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_bloc.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_event.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_state.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/products.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/view/products_screen.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/view/view.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/widgets/product_card.dart create mode 100644 examples/shop_app_with_local_database_example/lib/features/products/widgets/widgets.dart create mode 100644 examples/shop_app_with_local_database_example/lib/firebase_options.dart create mode 100644 examples/shop_app_with_local_database_example/lib/main.dart create mode 100644 examples/shop_app_with_local_database_example/lib/repositories/products/abstarct_products_repository.dart create mode 100644 examples/shop_app_with_local_database_example/lib/repositories/products/models/models.dart create mode 100644 examples/shop_app_with_local_database_example/lib/repositories/products/models/product.dart create mode 100644 examples/shop_app_with_local_database_example/lib/repositories/products/products.dart create mode 100644 examples/shop_app_with_local_database_example/lib/repositories/products/products_repository.dart create mode 100644 examples/shop_app_with_local_database_example/lib/ui/presentation_frame.dart create mode 100644 examples/shop_app_with_local_database_example/lib/ui/presentation_widget.dart create mode 100644 examples/shop_app_with_local_database_example/lib/ui/router.dart rename examples/{shop_app_example => shop_app_with_local_database_example}/lib/ui/theme.dart (100%) create mode 100644 examples/shop_app_with_local_database_example/lib/ui/ui.dart create mode 100644 examples/shop_app_with_local_database_example/lib/utils/di.dart create mode 100644 examples/shop_app_with_local_database_example/lib/utils/scroll_behavior.dart create mode 100644 examples/shop_app_with_local_database_example/lib/utils/utils.dart create mode 100644 examples/shop_app_with_local_database_example/linux/.gitignore create mode 100644 examples/shop_app_with_local_database_example/linux/CMakeLists.txt create mode 100644 examples/shop_app_with_local_database_example/linux/flutter/CMakeLists.txt create mode 100644 examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.cc create mode 100644 examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.h create mode 100644 examples/shop_app_with_local_database_example/linux/flutter/generated_plugins.cmake create mode 100644 examples/shop_app_with_local_database_example/linux/main.cc create mode 100644 examples/shop_app_with_local_database_example/linux/my_application.cc create mode 100644 examples/shop_app_with_local_database_example/linux/my_application.h create mode 100644 examples/shop_app_with_local_database_example/macos/.gitignore create mode 100644 examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 examples/shop_app_with_local_database_example/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 examples/shop_app_with_local_database_example/macos/Podfile create mode 100644 examples/shop_app_with_local_database_example/macos/Podfile.lock create mode 100644 examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/AppDelegate.swift create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Configs/Debug.xcconfig create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Configs/Release.xcconfig create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/DebugProfile.entitlements create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Info.plist create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/MainFlutterWindow.swift create mode 100644 examples/shop_app_with_local_database_example/macos/Runner/Release.entitlements create mode 100644 examples/shop_app_with_local_database_example/pubspec.lock create mode 100644 examples/shop_app_with_local_database_example/pubspec.yaml create mode 100644 examples/shop_app_with_local_database_example/pubspec_overrides.yaml create mode 100644 examples/shop_app_with_local_database_example/web/favicon.png create mode 100644 examples/shop_app_with_local_database_example/web/icons/Icon-192.png create mode 100644 examples/shop_app_with_local_database_example/web/icons/Icon-512.png create mode 100644 examples/shop_app_with_local_database_example/web/icons/Icon-maskable-192.png create mode 100644 examples/shop_app_with_local_database_example/web/icons/Icon-maskable-512.png create mode 100644 examples/shop_app_with_local_database_example/web/index.html create mode 100644 examples/shop_app_with_local_database_example/web/manifest.json create mode 100644 examples/shop_app_with_local_database_example/windows/.gitignore create mode 100644 examples/shop_app_with_local_database_example/windows/CMakeLists.txt create mode 100644 examples/shop_app_with_local_database_example/windows/flutter/CMakeLists.txt create mode 100644 examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.cc create mode 100644 examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.h create mode 100644 examples/shop_app_with_local_database_example/windows/flutter/generated_plugins.cmake create mode 100644 examples/shop_app_with_local_database_example/windows/runner/CMakeLists.txt create mode 100644 examples/shop_app_with_local_database_example/windows/runner/Runner.rc create mode 100644 examples/shop_app_with_local_database_example/windows/runner/flutter_window.cpp create mode 100644 examples/shop_app_with_local_database_example/windows/runner/flutter_window.h create mode 100644 examples/shop_app_with_local_database_example/windows/runner/main.cpp create mode 100644 examples/shop_app_with_local_database_example/windows/runner/resource.h create mode 100644 examples/shop_app_with_local_database_example/windows/runner/resources/app_icon.ico create mode 100644 examples/shop_app_with_local_database_example/windows/runner/runner.exe.manifest create mode 100644 examples/shop_app_with_local_database_example/windows/runner/utils.cpp create mode 100644 examples/shop_app_with_local_database_example/windows/runner/utils.h create mode 100644 examples/shop_app_with_local_database_example/windows/runner/win32_window.cpp create mode 100644 examples/shop_app_with_local_database_example/windows/runner/win32_window.h create mode 100644 packages/talker/.flutter-plugins create mode 100644 packages/talker/lib/objectbox-model.json create mode 100644 packages/talker/lib/objectbox.g.dart create mode 100644 packages/talker/lib/src/database/db.dart diff --git a/examples/shop_app_example/.firebaserc b/examples/shop_app_example/shop_app_example/.firebaserc similarity index 100% rename from examples/shop_app_example/.firebaserc rename to examples/shop_app_example/shop_app_example/.firebaserc diff --git a/examples/shop_app_example/.gitignore b/examples/shop_app_example/shop_app_example/.gitignore similarity index 98% rename from examples/shop_app_example/.gitignore rename to examples/shop_app_example/shop_app_example/.gitignore index 1eab1a228..d4848c1ec 100644 --- a/examples/shop_app_example/.gitignore +++ b/examples/shop_app_example/shop_app_example/.gitignore @@ -31,7 +31,7 @@ migrate_working_dir/ .pub-cache/ .pub/ /build/ - +pubspec.lock # Web related # Symbolication related diff --git a/examples/shop_app_example/.metadata b/examples/shop_app_example/shop_app_example/.metadata similarity index 100% rename from examples/shop_app_example/.metadata rename to examples/shop_app_example/shop_app_example/.metadata diff --git a/examples/shop_app_example/README.md b/examples/shop_app_example/shop_app_example/README.md similarity index 100% rename from examples/shop_app_example/README.md rename to examples/shop_app_example/shop_app_example/README.md diff --git a/examples/shop_app_example/analysis_options.yaml b/examples/shop_app_example/shop_app_example/analysis_options.yaml similarity index 100% rename from examples/shop_app_example/analysis_options.yaml rename to examples/shop_app_example/shop_app_example/analysis_options.yaml diff --git a/examples/shop_app_example/android/.gitignore b/examples/shop_app_example/shop_app_example/android/.gitignore similarity index 100% rename from examples/shop_app_example/android/.gitignore rename to examples/shop_app_example/shop_app_example/android/.gitignore diff --git a/examples/shop_app_example/shop_app_example/android/app/build.gradle b/examples/shop_app_example/shop_app_example/android/app/build.gradle new file mode 100644 index 000000000..5998d897c --- /dev/null +++ b/examples/shop_app_example/shop_app_example/android/app/build.gradle @@ -0,0 +1,76 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +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' +} + + + +android { + compileSdkVersion 34 + 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.example.shop_app_example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + 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 + } + } + namespace 'com.example.shop_app_example' +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/examples/shop_app_example/shop_app_example/android/app/src/debug/AndroidManifest.xml b/examples/shop_app_example/shop_app_example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..399f6981d --- /dev/null +++ b/examples/shop_app_example/shop_app_example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/shop_app_example/shop_app_example/android/app/src/main/AndroidManifest.xml b/examples/shop_app_example/shop_app_example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..f9a277caf --- /dev/null +++ b/examples/shop_app_example/shop_app_example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/examples/shop_app_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt b/examples/shop_app_example/shop_app_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt similarity index 100% rename from examples/shop_app_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt rename to examples/shop_app_example/shop_app_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt diff --git a/examples/shop_app_example/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/shop_app_example/shop_app_example/android/app/src/main/res/drawable-v21/launch_background.xml similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/drawable-v21/launch_background.xml rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/drawable-v21/launch_background.xml diff --git a/examples/shop_app_example/android/app/src/main/res/drawable/launch_background.xml b/examples/shop_app_example/shop_app_example/android/app/src/main/res/drawable/launch_background.xml similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/drawable/launch_background.xml rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/drawable/launch_background.xml diff --git a/examples/shop_app_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/examples/shop_app_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/examples/shop_app_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/examples/shop_app_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/examples/shop_app_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/examples/shop_app_example/android/app/src/main/res/values-night/styles.xml b/examples/shop_app_example/shop_app_example/android/app/src/main/res/values-night/styles.xml similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/values-night/styles.xml rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/values-night/styles.xml diff --git a/examples/shop_app_example/android/app/src/main/res/values/styles.xml b/examples/shop_app_example/shop_app_example/android/app/src/main/res/values/styles.xml similarity index 100% rename from examples/shop_app_example/android/app/src/main/res/values/styles.xml rename to examples/shop_app_example/shop_app_example/android/app/src/main/res/values/styles.xml diff --git a/examples/shop_app_example/shop_app_example/android/app/src/profile/AndroidManifest.xml b/examples/shop_app_example/shop_app_example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..399f6981d --- /dev/null +++ b/examples/shop_app_example/shop_app_example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/shop_app_example/shop_app_example/android/build.gradle b/examples/shop_app_example/shop_app_example/android/build.gradle new file mode 100644 index 000000000..b8fa58237 --- /dev/null +++ b/examples/shop_app_example/shop_app_example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.9.20' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:8.1.4' + 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/examples/shop_app_example/shop_app_example/android/gradle.properties b/examples/shop_app_example/shop_app_example/android/gradle.properties new file mode 100644 index 000000000..b9a9a2464 --- /dev/null +++ b/examples/shop_app_example/shop_app_example/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/examples/shop_app_example/shop_app_example/android/gradle/wrapper/gradle-wrapper.properties b/examples/shop_app_example/shop_app_example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..8bc9958ab --- /dev/null +++ b/examples/shop_app_example/shop_app_example/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/examples/shop_app_example/shop_app_example/android/settings.gradle b/examples/shop_app_example/shop_app_example/android/settings.gradle new file mode 100644 index 000000000..45d92d220 --- /dev/null +++ b/examples/shop_app_example/shop_app_example/android/settings.gradle @@ -0,0 +1,29 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } + + plugins { + id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.3.0" apply false +} + +include ":app" \ No newline at end of file diff --git a/examples/shop_app_example/assets/air_max_plus.png b/examples/shop_app_example/shop_app_example/assets/air_max_plus.png similarity index 100% rename from examples/shop_app_example/assets/air_max_plus.png rename to examples/shop_app_example/shop_app_example/assets/air_max_plus.png diff --git a/examples/shop_app_example/assets/air_max_plus_white.png b/examples/shop_app_example/shop_app_example/assets/air_max_plus_white.png similarity index 100% rename from examples/shop_app_example/assets/air_max_plus_white.png rename to examples/shop_app_example/shop_app_example/assets/air_max_plus_white.png diff --git a/examples/shop_app_example/assets/black.png b/examples/shop_app_example/shop_app_example/assets/black.png similarity index 100% rename from examples/shop_app_example/assets/black.png rename to examples/shop_app_example/shop_app_example/assets/black.png diff --git a/examples/shop_app_example/assets/blue_shoe.png b/examples/shop_app_example/shop_app_example/assets/blue_shoe.png similarity index 100% rename from examples/shop_app_example/assets/blue_shoe.png rename to examples/shop_app_example/shop_app_example/assets/blue_shoe.png diff --git a/examples/shop_app_example/assets/flutter.png b/examples/shop_app_example/shop_app_example/assets/flutter.png similarity index 100% rename from examples/shop_app_example/assets/flutter.png rename to examples/shop_app_example/shop_app_example/assets/flutter.png diff --git a/examples/shop_app_example/assets/github.png b/examples/shop_app_example/shop_app_example/assets/github.png similarity index 100% rename from examples/shop_app_example/assets/github.png rename to examples/shop_app_example/shop_app_example/assets/github.png diff --git a/examples/shop_app_example/assets/iphone_mockup.png b/examples/shop_app_example/shop_app_example/assets/iphone_mockup.png similarity index 100% rename from examples/shop_app_example/assets/iphone_mockup.png rename to examples/shop_app_example/shop_app_example/assets/iphone_mockup.png diff --git a/examples/shop_app_example/assets/red_shoe.png b/examples/shop_app_example/shop_app_example/assets/red_shoe.png similarity index 100% rename from examples/shop_app_example/assets/red_shoe.png rename to examples/shop_app_example/shop_app_example/assets/red_shoe.png diff --git a/examples/shop_app_example/devtools_options.yaml b/examples/shop_app_example/shop_app_example/devtools_options.yaml similarity index 100% rename from examples/shop_app_example/devtools_options.yaml rename to examples/shop_app_example/shop_app_example/devtools_options.yaml diff --git a/examples/shop_app_example/firebase.json b/examples/shop_app_example/shop_app_example/firebase.json similarity index 100% rename from examples/shop_app_example/firebase.json rename to examples/shop_app_example/shop_app_example/firebase.json diff --git a/examples/shop_app_example/ios/.gitignore b/examples/shop_app_example/shop_app_example/ios/.gitignore similarity index 100% rename from examples/shop_app_example/ios/.gitignore rename to examples/shop_app_example/shop_app_example/ios/.gitignore diff --git a/examples/shop_app_example/ios/Flutter/AppFrameworkInfo.plist b/examples/shop_app_example/shop_app_example/ios/Flutter/AppFrameworkInfo.plist similarity index 100% rename from examples/shop_app_example/ios/Flutter/AppFrameworkInfo.plist rename to examples/shop_app_example/shop_app_example/ios/Flutter/AppFrameworkInfo.plist diff --git a/examples/shop_app_example/ios/Flutter/Debug.xcconfig b/examples/shop_app_example/shop_app_example/ios/Flutter/Debug.xcconfig similarity index 100% rename from examples/shop_app_example/ios/Flutter/Debug.xcconfig rename to examples/shop_app_example/shop_app_example/ios/Flutter/Debug.xcconfig diff --git a/examples/shop_app_example/ios/Flutter/Release.xcconfig b/examples/shop_app_example/shop_app_example/ios/Flutter/Release.xcconfig similarity index 100% rename from examples/shop_app_example/ios/Flutter/Release.xcconfig rename to examples/shop_app_example/shop_app_example/ios/Flutter/Release.xcconfig diff --git a/examples/shop_app_example/ios/Podfile b/examples/shop_app_example/shop_app_example/ios/Podfile similarity index 100% rename from examples/shop_app_example/ios/Podfile rename to examples/shop_app_example/shop_app_example/ios/Podfile diff --git a/examples/shop_app_example/shop_app_example/ios/Podfile.lock b/examples/shop_app_example/shop_app_example/ios/Podfile.lock new file mode 100644 index 000000000..ff7596b0f --- /dev/null +++ b/examples/shop_app_example/shop_app_example/ios/Podfile.lock @@ -0,0 +1,161 @@ +PODS: + - Firebase/Analytics (10.25.0): + - Firebase/Core + - Firebase/Core (10.25.0): + - Firebase/CoreOnly + - FirebaseAnalytics (~> 10.25.0) + - Firebase/CoreOnly (10.25.0): + - FirebaseCore (= 10.25.0) + - firebase_analytics (10.10.7): + - Firebase/Analytics (= 10.25.0) + - firebase_core + - Flutter + - firebase_core (2.32.0): + - Firebase/CoreOnly (= 10.25.0) + - Flutter + - FirebaseAnalytics (10.25.0): + - FirebaseAnalytics/AdIdSupport (= 10.25.0) + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - FirebaseAnalytics/AdIdSupport (10.25.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleAppMeasurement (= 10.25.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - FirebaseCore (10.25.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.12) + - GoogleUtilities/Logger (~> 7.12) + - FirebaseCoreInternal (10.29.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseInstallations (10.29.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - Flutter (1.0.0) + - GoogleAppMeasurement (10.25.0): + - GoogleAppMeasurement/AdIdSupport (= 10.25.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (10.25.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 10.25.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (10.25.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30911.0, >= 2.30908.0) + - GoogleUtilities/AppDelegateSwizzler (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.3): + - GoogleUtilities/Privacy + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/MethodSwizzler (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.3): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (7.13.3)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.3) + - GoogleUtilities/Reachability (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.4.0) + - share_plus (0.0.1): + - Flutter + - url_launcher_ios (0.0.1): + - Flutter + +DEPENDENCIES: + - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) + - Flutter (from `Flutter`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - share_plus (from `.symlinks/plugins/share_plus/ios`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + +SPEC REPOS: + trunk: + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - GoogleAppMeasurement + - GoogleUtilities + - nanopb + - PromisesObjC + +EXTERNAL SOURCES: + firebase_analytics: + :path: ".symlinks/plugins/firebase_analytics/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" + Flutter: + :path: Flutter + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + share_plus: + :path: ".symlinks/plugins/share_plus/ios" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + +SPEC CHECKSUMS: + Firebase: 0312a2352584f782ea56f66d91606891d4607f06 + firebase_analytics: cc06e24d6a2343c44f845b3112143db72d10ef78 + firebase_core: a626d00494efa398e7c54f25f1454a64c8abf197 + FirebaseAnalytics: ec00fe8b93b41dc6fe4a28784b8e51da0647a248 + FirebaseCore: 7ec4d0484817f12c3373955bc87762d96842d483 + FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934 + FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + GoogleAppMeasurement: 9abf64b682732fed36da827aa2a68f0221fd2356 + GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 + nanopb: 438bc412db1928dac798aa6fd75726007be04262 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe + +PODFILE CHECKSUM: c4c93c5f6502fe2754f48404d3594bf779584011 + +COCOAPODS: 1.15.2 diff --git a/examples/shop_app_example/ios/Runner.xcodeproj/project.pbxproj b/examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.pbxproj similarity index 100% rename from examples/shop_app_example/ios/Runner.xcodeproj/project.pbxproj rename to examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.pbxproj diff --git a/examples/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from examples/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/examples/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from examples/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/examples/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from examples/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/examples/shop_app_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from examples/shop_app_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to examples/shop_app_example/shop_app_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/examples/shop_app_example/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/shop_app_example/shop_app_example/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from examples/shop_app_example/ios/Runner.xcworkspace/contents.xcworkspacedata rename to examples/shop_app_example/shop_app_example/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/examples/shop_app_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_example/shop_app_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from examples/shop_app_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to examples/shop_app_example/shop_app_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/examples/shop_app_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/shop_app_example/shop_app_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from examples/shop_app_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to examples/shop_app_example/shop_app_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/examples/shop_app_example/shop_app_example/ios/Runner/AppDelegate.swift b/examples/shop_app_example/shop_app_example/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..b63630348 --- /dev/null +++ b/examples/shop_app_example/shop_app_example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png diff --git a/examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md similarity index 100% rename from examples/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md rename to examples/shop_app_example/shop_app_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md diff --git a/examples/shop_app_example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/shop_app_example/shop_app_example/ios/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from examples/shop_app_example/ios/Runner/Base.lproj/LaunchScreen.storyboard rename to examples/shop_app_example/shop_app_example/ios/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/examples/shop_app_example/ios/Runner/Base.lproj/Main.storyboard b/examples/shop_app_example/shop_app_example/ios/Runner/Base.lproj/Main.storyboard similarity index 100% rename from examples/shop_app_example/ios/Runner/Base.lproj/Main.storyboard rename to examples/shop_app_example/shop_app_example/ios/Runner/Base.lproj/Main.storyboard diff --git a/examples/shop_app_example/ios/Runner/Info.plist b/examples/shop_app_example/shop_app_example/ios/Runner/Info.plist similarity index 100% rename from examples/shop_app_example/ios/Runner/Info.plist rename to examples/shop_app_example/shop_app_example/ios/Runner/Info.plist diff --git a/examples/shop_app_example/ios/Runner/Runner-Bridging-Header.h b/examples/shop_app_example/shop_app_example/ios/Runner/Runner-Bridging-Header.h similarity index 100% rename from examples/shop_app_example/ios/Runner/Runner-Bridging-Header.h rename to examples/shop_app_example/shop_app_example/ios/Runner/Runner-Bridging-Header.h diff --git a/examples/shop_app_example/lib/features/product/bloc/bloc.dart b/examples/shop_app_example/shop_app_example/lib/features/product/bloc/bloc.dart similarity index 100% rename from examples/shop_app_example/lib/features/product/bloc/bloc.dart rename to examples/shop_app_example/shop_app_example/lib/features/product/bloc/bloc.dart diff --git a/examples/shop_app_example/lib/features/product/bloc/product/product_bloc.dart b/examples/shop_app_example/shop_app_example/lib/features/product/bloc/product/product_bloc.dart similarity index 100% rename from examples/shop_app_example/lib/features/product/bloc/product/product_bloc.dart rename to examples/shop_app_example/shop_app_example/lib/features/product/bloc/product/product_bloc.dart diff --git a/examples/shop_app_example/lib/features/product/bloc/product/product_event.dart b/examples/shop_app_example/shop_app_example/lib/features/product/bloc/product/product_event.dart similarity index 100% rename from examples/shop_app_example/lib/features/product/bloc/product/product_event.dart rename to examples/shop_app_example/shop_app_example/lib/features/product/bloc/product/product_event.dart diff --git a/examples/shop_app_example/lib/features/product/bloc/product/product_state.dart b/examples/shop_app_example/shop_app_example/lib/features/product/bloc/product/product_state.dart similarity index 100% rename from examples/shop_app_example/lib/features/product/bloc/product/product_state.dart rename to examples/shop_app_example/shop_app_example/lib/features/product/bloc/product/product_state.dart diff --git a/examples/shop_app_example/lib/features/product/product.dart b/examples/shop_app_example/shop_app_example/lib/features/product/product.dart similarity index 100% rename from examples/shop_app_example/lib/features/product/product.dart rename to examples/shop_app_example/shop_app_example/lib/features/product/product.dart diff --git a/examples/shop_app_example/lib/features/product/view/product_screen.dart b/examples/shop_app_example/shop_app_example/lib/features/product/view/product_screen.dart similarity index 100% rename from examples/shop_app_example/lib/features/product/view/product_screen.dart rename to examples/shop_app_example/shop_app_example/lib/features/product/view/product_screen.dart diff --git a/examples/shop_app_example/lib/features/product/view/view.dart b/examples/shop_app_example/shop_app_example/lib/features/product/view/view.dart similarity index 100% rename from examples/shop_app_example/lib/features/product/view/view.dart rename to examples/shop_app_example/shop_app_example/lib/features/product/view/view.dart diff --git a/examples/shop_app_example/lib/features/products/bloc/bloc.dart b/examples/shop_app_example/shop_app_example/lib/features/products/bloc/bloc.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/bloc/bloc.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/bloc/bloc.dart diff --git a/examples/shop_app_example/lib/features/products/bloc/products/products_bloc.dart b/examples/shop_app_example/shop_app_example/lib/features/products/bloc/products/products_bloc.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/bloc/products/products_bloc.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/bloc/products/products_bloc.dart diff --git a/examples/shop_app_example/lib/features/products/bloc/products/products_event.dart b/examples/shop_app_example/shop_app_example/lib/features/products/bloc/products/products_event.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/bloc/products/products_event.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/bloc/products/products_event.dart diff --git a/examples/shop_app_example/lib/features/products/bloc/products/products_state.dart b/examples/shop_app_example/shop_app_example/lib/features/products/bloc/products/products_state.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/bloc/products/products_state.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/bloc/products/products_state.dart diff --git a/examples/shop_app_example/lib/features/products/products.dart b/examples/shop_app_example/shop_app_example/lib/features/products/products.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/products.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/products.dart diff --git a/examples/shop_app_example/lib/features/products/view/products_screen.dart b/examples/shop_app_example/shop_app_example/lib/features/products/view/products_screen.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/view/products_screen.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/view/products_screen.dart diff --git a/examples/shop_app_example/lib/features/products/view/view.dart b/examples/shop_app_example/shop_app_example/lib/features/products/view/view.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/view/view.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/view/view.dart diff --git a/examples/shop_app_example/lib/features/products/widgets/product_card.dart b/examples/shop_app_example/shop_app_example/lib/features/products/widgets/product_card.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/widgets/product_card.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/widgets/product_card.dart diff --git a/examples/shop_app_example/lib/features/products/widgets/widgets.dart b/examples/shop_app_example/shop_app_example/lib/features/products/widgets/widgets.dart similarity index 100% rename from examples/shop_app_example/lib/features/products/widgets/widgets.dart rename to examples/shop_app_example/shop_app_example/lib/features/products/widgets/widgets.dart diff --git a/examples/shop_app_example/lib/firebase_options.dart b/examples/shop_app_example/shop_app_example/lib/firebase_options.dart similarity index 100% rename from examples/shop_app_example/lib/firebase_options.dart rename to examples/shop_app_example/shop_app_example/lib/firebase_options.dart diff --git a/examples/shop_app_example/lib/main.dart b/examples/shop_app_example/shop_app_example/lib/main.dart similarity index 92% rename from examples/shop_app_example/lib/main.dart rename to examples/shop_app_example/shop_app_example/lib/main.dart index 5166a4a12..d4e4f7dea 100644 --- a/examples/shop_app_example/lib/main.dart +++ b/examples/shop_app_example/shop_app_example/lib/main.dart @@ -12,6 +12,7 @@ import 'package:talker_flutter/talker_flutter.dart'; import 'package:talker_shop_app_example/repositories/products/products.dart'; import 'package:talker_shop_app_example/ui/presentation_frame.dart'; import 'package:talker_shop_app_example/ui/ui.dart'; +import 'package:talker_shop_app_example/utils/good_log.dart'; import 'package:talker_shop_app_example/utils/scroll_behavior.dart'; import 'package:talker_shop_app_example/utils/utils.dart'; @@ -32,7 +33,8 @@ void _initDependencies() { final talker = TalkerFlutter.init( settings: TalkerSettings( colors: { - TalkerLogType.verbose: AnsiPen()..yellow(), + TalkerLogType.verbose.key: AnsiPen()..yellow(), + GoodLog.getKey: GoodLog.getPen, }, ), ); @@ -55,7 +57,7 @@ void _initDependencies() { DI.registerSingleton( ProductsRepository(dio: dio), ); - talker.info('Repositories initialization completed'); + talker.logCustom(GoodLog('Repositories initialization completed')); Bloc.observer = TalkerBlocObserver( talker: talker, diff --git a/examples/shop_app_example/lib/repositories/products/abstarct_products_repository.dart b/examples/shop_app_example/shop_app_example/lib/repositories/products/abstarct_products_repository.dart similarity index 100% rename from examples/shop_app_example/lib/repositories/products/abstarct_products_repository.dart rename to examples/shop_app_example/shop_app_example/lib/repositories/products/abstarct_products_repository.dart diff --git a/examples/shop_app_example/lib/repositories/products/models/models.dart b/examples/shop_app_example/shop_app_example/lib/repositories/products/models/models.dart similarity index 100% rename from examples/shop_app_example/lib/repositories/products/models/models.dart rename to examples/shop_app_example/shop_app_example/lib/repositories/products/models/models.dart diff --git a/examples/shop_app_example/lib/repositories/products/models/product.dart b/examples/shop_app_example/shop_app_example/lib/repositories/products/models/product.dart similarity index 100% rename from examples/shop_app_example/lib/repositories/products/models/product.dart rename to examples/shop_app_example/shop_app_example/lib/repositories/products/models/product.dart diff --git a/examples/shop_app_example/lib/repositories/products/products.dart b/examples/shop_app_example/shop_app_example/lib/repositories/products/products.dart similarity index 100% rename from examples/shop_app_example/lib/repositories/products/products.dart rename to examples/shop_app_example/shop_app_example/lib/repositories/products/products.dart diff --git a/examples/shop_app_example/lib/repositories/products/products_repository.dart b/examples/shop_app_example/shop_app_example/lib/repositories/products/products_repository.dart similarity index 100% rename from examples/shop_app_example/lib/repositories/products/products_repository.dart rename to examples/shop_app_example/shop_app_example/lib/repositories/products/products_repository.dart diff --git a/examples/shop_app_example/lib/ui/presentation_frame.dart b/examples/shop_app_example/shop_app_example/lib/ui/presentation_frame.dart similarity index 100% rename from examples/shop_app_example/lib/ui/presentation_frame.dart rename to examples/shop_app_example/shop_app_example/lib/ui/presentation_frame.dart diff --git a/examples/shop_app_example/lib/ui/presentation_widget.dart b/examples/shop_app_example/shop_app_example/lib/ui/presentation_widget.dart similarity index 100% rename from examples/shop_app_example/lib/ui/presentation_widget.dart rename to examples/shop_app_example/shop_app_example/lib/ui/presentation_widget.dart diff --git a/examples/shop_app_example/lib/ui/router.dart b/examples/shop_app_example/shop_app_example/lib/ui/router.dart similarity index 100% rename from examples/shop_app_example/lib/ui/router.dart rename to examples/shop_app_example/shop_app_example/lib/ui/router.dart diff --git a/examples/shop_app_example/shop_app_example/lib/ui/theme.dart b/examples/shop_app_example/shop_app_example/lib/ui/theme.dart new file mode 100644 index 000000000..f77341c68 --- /dev/null +++ b/examples/shop_app_example/shop_app_example/lib/ui/theme.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:talker_flutter/talker_flutter.dart'; +import 'package:talker_shop_app_example/utils/good_log.dart'; + +final lightTheme = ThemeData( + primaryColor: primaryColor, + primarySwatch: primaryColor, + scaffoldBackgroundColor: const Color(0xffF9F9F9), + cardColor: Colors.white, + appBarTheme: const AppBarTheme(color: Colors.white), +); + +const cardShadow = [ + BoxShadow( + color: Color(0x11272749), + blurRadius: 16, + offset: Offset(0, 3), + spreadRadius: 0, + ) +]; + +MaterialColor get primaryColor => MaterialColor( + _primaryColor.value, + _primaryColorCodes, + ); + +Color get _primaryColor => Colors.deepPurple; +final Map _primaryColorCodes = { + 50: _primaryColor.withOpacity(.1), + 100: _primaryColor.withOpacity(.2), + 200: _primaryColor.withOpacity(.3), + 300: _primaryColor.withOpacity(.4), + 400: _primaryColor.withOpacity(.5), + 500: _primaryColor.withOpacity(.6), + 600: _primaryColor.withOpacity(.7), + 700: _primaryColor.withOpacity(.8), + 800: _primaryColor.withOpacity(.9), + 900: _primaryColor, +}; + +final talkerTheme = TalkerScreenTheme(logColors: { + GoodLog.getKey: const Color(0xff4CAF50), +}); diff --git a/examples/shop_app_example/lib/ui/ui.dart b/examples/shop_app_example/shop_app_example/lib/ui/ui.dart similarity index 100% rename from examples/shop_app_example/lib/ui/ui.dart rename to examples/shop_app_example/shop_app_example/lib/ui/ui.dart diff --git a/examples/shop_app_example/lib/utils/di.dart b/examples/shop_app_example/shop_app_example/lib/utils/di.dart similarity index 100% rename from examples/shop_app_example/lib/utils/di.dart rename to examples/shop_app_example/shop_app_example/lib/utils/di.dart diff --git a/examples/shop_app_example/shop_app_example/lib/utils/good_log.dart b/examples/shop_app_example/shop_app_example/lib/utils/good_log.dart new file mode 100644 index 000000000..ec08e48cf --- /dev/null +++ b/examples/shop_app_example/shop_app_example/lib/utils/good_log.dart @@ -0,0 +1,22 @@ +import 'package:talker_flutter/talker_flutter.dart'; + +/// `GoodLog` - This class contains the basic structure of the log. +class GoodLog extends TalkerLog { + GoodLog(String super.message); + + /// Log title + @override + String get title => 'good'; + + /// Log key + @override + String get key => getKey; + + /// Log color + @override + AnsiPen get pen => getPen; + + static get getPen => AnsiPen()..xterm(121); + + static get getKey => 'good'; +} diff --git a/examples/shop_app_example/lib/utils/scroll_behavior.dart b/examples/shop_app_example/shop_app_example/lib/utils/scroll_behavior.dart similarity index 100% rename from examples/shop_app_example/lib/utils/scroll_behavior.dart rename to examples/shop_app_example/shop_app_example/lib/utils/scroll_behavior.dart diff --git a/examples/shop_app_example/lib/utils/utils.dart b/examples/shop_app_example/shop_app_example/lib/utils/utils.dart similarity index 100% rename from examples/shop_app_example/lib/utils/utils.dart rename to examples/shop_app_example/shop_app_example/lib/utils/utils.dart diff --git a/examples/shop_app_example/linux/.gitignore b/examples/shop_app_example/shop_app_example/linux/.gitignore similarity index 100% rename from examples/shop_app_example/linux/.gitignore rename to examples/shop_app_example/shop_app_example/linux/.gitignore diff --git a/examples/shop_app_example/linux/CMakeLists.txt b/examples/shop_app_example/shop_app_example/linux/CMakeLists.txt similarity index 100% rename from examples/shop_app_example/linux/CMakeLists.txt rename to examples/shop_app_example/shop_app_example/linux/CMakeLists.txt diff --git a/examples/shop_app_example/linux/flutter/CMakeLists.txt b/examples/shop_app_example/shop_app_example/linux/flutter/CMakeLists.txt similarity index 100% rename from examples/shop_app_example/linux/flutter/CMakeLists.txt rename to examples/shop_app_example/shop_app_example/linux/flutter/CMakeLists.txt diff --git a/examples/shop_app_example/linux/flutter/generated_plugin_registrant.cc b/examples/shop_app_example/shop_app_example/linux/flutter/generated_plugin_registrant.cc similarity index 100% rename from examples/shop_app_example/linux/flutter/generated_plugin_registrant.cc rename to examples/shop_app_example/shop_app_example/linux/flutter/generated_plugin_registrant.cc diff --git a/examples/shop_app_example/linux/flutter/generated_plugin_registrant.h b/examples/shop_app_example/shop_app_example/linux/flutter/generated_plugin_registrant.h similarity index 100% rename from examples/shop_app_example/linux/flutter/generated_plugin_registrant.h rename to examples/shop_app_example/shop_app_example/linux/flutter/generated_plugin_registrant.h diff --git a/examples/shop_app_example/linux/flutter/generated_plugins.cmake b/examples/shop_app_example/shop_app_example/linux/flutter/generated_plugins.cmake similarity index 100% rename from examples/shop_app_example/linux/flutter/generated_plugins.cmake rename to examples/shop_app_example/shop_app_example/linux/flutter/generated_plugins.cmake diff --git a/examples/shop_app_example/linux/main.cc b/examples/shop_app_example/shop_app_example/linux/main.cc similarity index 100% rename from examples/shop_app_example/linux/main.cc rename to examples/shop_app_example/shop_app_example/linux/main.cc diff --git a/examples/shop_app_example/linux/my_application.cc b/examples/shop_app_example/shop_app_example/linux/my_application.cc similarity index 100% rename from examples/shop_app_example/linux/my_application.cc rename to examples/shop_app_example/shop_app_example/linux/my_application.cc diff --git a/examples/shop_app_example/linux/my_application.h b/examples/shop_app_example/shop_app_example/linux/my_application.h similarity index 100% rename from examples/shop_app_example/linux/my_application.h rename to examples/shop_app_example/shop_app_example/linux/my_application.h diff --git a/examples/shop_app_example/macos/.gitignore b/examples/shop_app_example/shop_app_example/macos/.gitignore similarity index 100% rename from examples/shop_app_example/macos/.gitignore rename to examples/shop_app_example/shop_app_example/macos/.gitignore diff --git a/examples/shop_app_example/macos/Flutter/Flutter-Debug.xcconfig b/examples/shop_app_example/shop_app_example/macos/Flutter/Flutter-Debug.xcconfig similarity index 100% rename from examples/shop_app_example/macos/Flutter/Flutter-Debug.xcconfig rename to examples/shop_app_example/shop_app_example/macos/Flutter/Flutter-Debug.xcconfig diff --git a/examples/shop_app_example/macos/Flutter/Flutter-Release.xcconfig b/examples/shop_app_example/shop_app_example/macos/Flutter/Flutter-Release.xcconfig similarity index 100% rename from examples/shop_app_example/macos/Flutter/Flutter-Release.xcconfig rename to examples/shop_app_example/shop_app_example/macos/Flutter/Flutter-Release.xcconfig diff --git a/examples/shop_app_example/macos/Flutter/GeneratedPluginRegistrant.swift b/examples/shop_app_example/shop_app_example/macos/Flutter/GeneratedPluginRegistrant.swift similarity index 100% rename from examples/shop_app_example/macos/Flutter/GeneratedPluginRegistrant.swift rename to examples/shop_app_example/shop_app_example/macos/Flutter/GeneratedPluginRegistrant.swift diff --git a/examples/shop_app_example/macos/Podfile b/examples/shop_app_example/shop_app_example/macos/Podfile similarity index 100% rename from examples/shop_app_example/macos/Podfile rename to examples/shop_app_example/shop_app_example/macos/Podfile diff --git a/examples/shop_app_example/macos/Podfile.lock b/examples/shop_app_example/shop_app_example/macos/Podfile.lock similarity index 100% rename from examples/shop_app_example/macos/Podfile.lock rename to examples/shop_app_example/shop_app_example/macos/Podfile.lock diff --git a/examples/shop_app_example/macos/Runner.xcodeproj/project.pbxproj b/examples/shop_app_example/shop_app_example/macos/Runner.xcodeproj/project.pbxproj similarity index 100% rename from examples/shop_app_example/macos/Runner.xcodeproj/project.pbxproj rename to examples/shop_app_example/shop_app_example/macos/Runner.xcodeproj/project.pbxproj diff --git a/examples/shop_app_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_example/shop_app_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from examples/shop_app_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to examples/shop_app_example/shop_app_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/examples/shop_app_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/shop_app_example/shop_app_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from examples/shop_app_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to examples/shop_app_example/shop_app_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/examples/shop_app_example/macos/Runner.xcworkspace/contents.xcworkspacedata b/examples/shop_app_example/shop_app_example/macos/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from examples/shop_app_example/macos/Runner.xcworkspace/contents.xcworkspacedata rename to examples/shop_app_example/shop_app_example/macos/Runner.xcworkspace/contents.xcworkspacedata diff --git a/examples/shop_app_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_example/shop_app_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from examples/shop_app_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to examples/shop_app_example/shop_app_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/examples/shop_app_example/macos/Runner/AppDelegate.swift b/examples/shop_app_example/shop_app_example/macos/Runner/AppDelegate.swift similarity index 100% rename from examples/shop_app_example/macos/Runner/AppDelegate.swift rename to examples/shop_app_example/shop_app_example/macos/Runner/AppDelegate.swift diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png diff --git a/examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png similarity index 100% rename from examples/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png rename to examples/shop_app_example/shop_app_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png diff --git a/examples/shop_app_example/macos/Runner/Base.lproj/MainMenu.xib b/examples/shop_app_example/shop_app_example/macos/Runner/Base.lproj/MainMenu.xib similarity index 100% rename from examples/shop_app_example/macos/Runner/Base.lproj/MainMenu.xib rename to examples/shop_app_example/shop_app_example/macos/Runner/Base.lproj/MainMenu.xib diff --git a/examples/shop_app_example/macos/Runner/Configs/AppInfo.xcconfig b/examples/shop_app_example/shop_app_example/macos/Runner/Configs/AppInfo.xcconfig similarity index 100% rename from examples/shop_app_example/macos/Runner/Configs/AppInfo.xcconfig rename to examples/shop_app_example/shop_app_example/macos/Runner/Configs/AppInfo.xcconfig diff --git a/examples/shop_app_example/macos/Runner/Configs/Debug.xcconfig b/examples/shop_app_example/shop_app_example/macos/Runner/Configs/Debug.xcconfig similarity index 100% rename from examples/shop_app_example/macos/Runner/Configs/Debug.xcconfig rename to examples/shop_app_example/shop_app_example/macos/Runner/Configs/Debug.xcconfig diff --git a/examples/shop_app_example/macos/Runner/Configs/Release.xcconfig b/examples/shop_app_example/shop_app_example/macos/Runner/Configs/Release.xcconfig similarity index 100% rename from examples/shop_app_example/macos/Runner/Configs/Release.xcconfig rename to examples/shop_app_example/shop_app_example/macos/Runner/Configs/Release.xcconfig diff --git a/examples/shop_app_example/macos/Runner/Configs/Warnings.xcconfig b/examples/shop_app_example/shop_app_example/macos/Runner/Configs/Warnings.xcconfig similarity index 100% rename from examples/shop_app_example/macos/Runner/Configs/Warnings.xcconfig rename to examples/shop_app_example/shop_app_example/macos/Runner/Configs/Warnings.xcconfig diff --git a/examples/shop_app_example/macos/Runner/DebugProfile.entitlements b/examples/shop_app_example/shop_app_example/macos/Runner/DebugProfile.entitlements similarity index 100% rename from examples/shop_app_example/macos/Runner/DebugProfile.entitlements rename to examples/shop_app_example/shop_app_example/macos/Runner/DebugProfile.entitlements diff --git a/examples/shop_app_example/macos/Runner/Info.plist b/examples/shop_app_example/shop_app_example/macos/Runner/Info.plist similarity index 100% rename from examples/shop_app_example/macos/Runner/Info.plist rename to examples/shop_app_example/shop_app_example/macos/Runner/Info.plist diff --git a/examples/shop_app_example/macos/Runner/MainFlutterWindow.swift b/examples/shop_app_example/shop_app_example/macos/Runner/MainFlutterWindow.swift similarity index 100% rename from examples/shop_app_example/macos/Runner/MainFlutterWindow.swift rename to examples/shop_app_example/shop_app_example/macos/Runner/MainFlutterWindow.swift diff --git a/examples/shop_app_example/macos/Runner/Release.entitlements b/examples/shop_app_example/shop_app_example/macos/Runner/Release.entitlements similarity index 100% rename from examples/shop_app_example/macos/Runner/Release.entitlements rename to examples/shop_app_example/shop_app_example/macos/Runner/Release.entitlements diff --git a/examples/shop_app_example/shop_app_example/pubspec.yaml b/examples/shop_app_example/shop_app_example/pubspec.yaml new file mode 100644 index 000000000..5ac2aed3a --- /dev/null +++ b/examples/shop_app_example/shop_app_example/pubspec.yaml @@ -0,0 +1,32 @@ +name: talker_shop_app_example +description: Talker flutter example shop application +publish_to: "none" +version: 1.0.0+1 + +environment: + sdk: '>=2.17.1 <4.0.0' +dependencies: + flutter: + sdk: flutter + + talker_flutter: ^4.5.1 + talker_dio_logger: ^4.5.1 + talker_bloc_logger: ^4.5.1 + + get_it: ^7.6.7 + flutter_bloc: ^8.1.3 + equatable: ^2.0.5 + dio: ^5.4.0 + url_launcher: ^6.3.1 + firebase_core: ^2.24.2 + firebase_analytics: ^10.8.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^3.0.1 + +flutter: + uses-material-design: true + assets: + - assets/ diff --git a/examples/shop_app_example/pubspec_overrides.yaml b/examples/shop_app_example/shop_app_example/pubspec_overrides.yaml similarity index 100% rename from examples/shop_app_example/pubspec_overrides.yaml rename to examples/shop_app_example/shop_app_example/pubspec_overrides.yaml diff --git a/examples/shop_app_example/web/favicon.png b/examples/shop_app_example/shop_app_example/web/favicon.png similarity index 100% rename from examples/shop_app_example/web/favicon.png rename to examples/shop_app_example/shop_app_example/web/favicon.png diff --git a/examples/shop_app_example/web/icons/Icon-192.png b/examples/shop_app_example/shop_app_example/web/icons/Icon-192.png similarity index 100% rename from examples/shop_app_example/web/icons/Icon-192.png rename to examples/shop_app_example/shop_app_example/web/icons/Icon-192.png diff --git a/examples/shop_app_example/web/icons/Icon-512.png b/examples/shop_app_example/shop_app_example/web/icons/Icon-512.png similarity index 100% rename from examples/shop_app_example/web/icons/Icon-512.png rename to examples/shop_app_example/shop_app_example/web/icons/Icon-512.png diff --git a/examples/shop_app_example/web/icons/Icon-maskable-192.png b/examples/shop_app_example/shop_app_example/web/icons/Icon-maskable-192.png similarity index 100% rename from examples/shop_app_example/web/icons/Icon-maskable-192.png rename to examples/shop_app_example/shop_app_example/web/icons/Icon-maskable-192.png diff --git a/examples/shop_app_example/web/icons/Icon-maskable-512.png b/examples/shop_app_example/shop_app_example/web/icons/Icon-maskable-512.png similarity index 100% rename from examples/shop_app_example/web/icons/Icon-maskable-512.png rename to examples/shop_app_example/shop_app_example/web/icons/Icon-maskable-512.png diff --git a/examples/shop_app_example/web/index.html b/examples/shop_app_example/shop_app_example/web/index.html similarity index 100% rename from examples/shop_app_example/web/index.html rename to examples/shop_app_example/shop_app_example/web/index.html diff --git a/examples/shop_app_example/web/manifest.json b/examples/shop_app_example/shop_app_example/web/manifest.json similarity index 100% rename from examples/shop_app_example/web/manifest.json rename to examples/shop_app_example/shop_app_example/web/manifest.json diff --git a/examples/shop_app_example/windows/.gitignore b/examples/shop_app_example/shop_app_example/windows/.gitignore similarity index 100% rename from examples/shop_app_example/windows/.gitignore rename to examples/shop_app_example/shop_app_example/windows/.gitignore diff --git a/examples/shop_app_example/windows/CMakeLists.txt b/examples/shop_app_example/shop_app_example/windows/CMakeLists.txt similarity index 100% rename from examples/shop_app_example/windows/CMakeLists.txt rename to examples/shop_app_example/shop_app_example/windows/CMakeLists.txt diff --git a/examples/shop_app_example/windows/flutter/CMakeLists.txt b/examples/shop_app_example/shop_app_example/windows/flutter/CMakeLists.txt similarity index 100% rename from examples/shop_app_example/windows/flutter/CMakeLists.txt rename to examples/shop_app_example/shop_app_example/windows/flutter/CMakeLists.txt diff --git a/examples/shop_app_example/windows/flutter/generated_plugin_registrant.cc b/examples/shop_app_example/shop_app_example/windows/flutter/generated_plugin_registrant.cc similarity index 100% rename from examples/shop_app_example/windows/flutter/generated_plugin_registrant.cc rename to examples/shop_app_example/shop_app_example/windows/flutter/generated_plugin_registrant.cc diff --git a/examples/shop_app_example/windows/flutter/generated_plugin_registrant.h b/examples/shop_app_example/shop_app_example/windows/flutter/generated_plugin_registrant.h similarity index 100% rename from examples/shop_app_example/windows/flutter/generated_plugin_registrant.h rename to examples/shop_app_example/shop_app_example/windows/flutter/generated_plugin_registrant.h diff --git a/examples/shop_app_example/windows/flutter/generated_plugins.cmake b/examples/shop_app_example/shop_app_example/windows/flutter/generated_plugins.cmake similarity index 100% rename from examples/shop_app_example/windows/flutter/generated_plugins.cmake rename to examples/shop_app_example/shop_app_example/windows/flutter/generated_plugins.cmake diff --git a/examples/shop_app_example/windows/runner/CMakeLists.txt b/examples/shop_app_example/shop_app_example/windows/runner/CMakeLists.txt similarity index 100% rename from examples/shop_app_example/windows/runner/CMakeLists.txt rename to examples/shop_app_example/shop_app_example/windows/runner/CMakeLists.txt diff --git a/examples/shop_app_example/windows/runner/Runner.rc b/examples/shop_app_example/shop_app_example/windows/runner/Runner.rc similarity index 100% rename from examples/shop_app_example/windows/runner/Runner.rc rename to examples/shop_app_example/shop_app_example/windows/runner/Runner.rc diff --git a/examples/shop_app_example/windows/runner/flutter_window.cpp b/examples/shop_app_example/shop_app_example/windows/runner/flutter_window.cpp similarity index 100% rename from examples/shop_app_example/windows/runner/flutter_window.cpp rename to examples/shop_app_example/shop_app_example/windows/runner/flutter_window.cpp diff --git a/examples/shop_app_example/windows/runner/flutter_window.h b/examples/shop_app_example/shop_app_example/windows/runner/flutter_window.h similarity index 100% rename from examples/shop_app_example/windows/runner/flutter_window.h rename to examples/shop_app_example/shop_app_example/windows/runner/flutter_window.h diff --git a/examples/shop_app_example/windows/runner/main.cpp b/examples/shop_app_example/shop_app_example/windows/runner/main.cpp similarity index 100% rename from examples/shop_app_example/windows/runner/main.cpp rename to examples/shop_app_example/shop_app_example/windows/runner/main.cpp diff --git a/examples/shop_app_example/windows/runner/resource.h b/examples/shop_app_example/shop_app_example/windows/runner/resource.h similarity index 100% rename from examples/shop_app_example/windows/runner/resource.h rename to examples/shop_app_example/shop_app_example/windows/runner/resource.h diff --git a/examples/shop_app_example/windows/runner/resources/app_icon.ico b/examples/shop_app_example/shop_app_example/windows/runner/resources/app_icon.ico similarity index 100% rename from examples/shop_app_example/windows/runner/resources/app_icon.ico rename to examples/shop_app_example/shop_app_example/windows/runner/resources/app_icon.ico diff --git a/examples/shop_app_example/windows/runner/runner.exe.manifest b/examples/shop_app_example/shop_app_example/windows/runner/runner.exe.manifest similarity index 100% rename from examples/shop_app_example/windows/runner/runner.exe.manifest rename to examples/shop_app_example/shop_app_example/windows/runner/runner.exe.manifest diff --git a/examples/shop_app_example/windows/runner/utils.cpp b/examples/shop_app_example/shop_app_example/windows/runner/utils.cpp similarity index 100% rename from examples/shop_app_example/windows/runner/utils.cpp rename to examples/shop_app_example/shop_app_example/windows/runner/utils.cpp diff --git a/examples/shop_app_example/windows/runner/utils.h b/examples/shop_app_example/shop_app_example/windows/runner/utils.h similarity index 100% rename from examples/shop_app_example/windows/runner/utils.h rename to examples/shop_app_example/shop_app_example/windows/runner/utils.h diff --git a/examples/shop_app_example/windows/runner/win32_window.cpp b/examples/shop_app_example/shop_app_example/windows/runner/win32_window.cpp similarity index 100% rename from examples/shop_app_example/windows/runner/win32_window.cpp rename to examples/shop_app_example/shop_app_example/windows/runner/win32_window.cpp diff --git a/examples/shop_app_example/windows/runner/win32_window.h b/examples/shop_app_example/shop_app_example/windows/runner/win32_window.h similarity index 100% rename from examples/shop_app_example/windows/runner/win32_window.h rename to examples/shop_app_example/shop_app_example/windows/runner/win32_window.h diff --git a/examples/shop_app_with_local_database_example/.firebaserc b/examples/shop_app_with_local_database_example/.firebaserc new file mode 100644 index 000000000..7b21a1c51 --- /dev/null +++ b/examples/shop_app_with_local_database_example/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "talker-7ac5e" + } +} diff --git a/examples/shop_app_with_local_database_example/.fvmrc b/examples/shop_app_with_local_database_example/.fvmrc new file mode 100644 index 000000000..7c3d0b51c --- /dev/null +++ b/examples/shop_app_with_local_database_example/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.22.0" +} \ No newline at end of file diff --git a/examples/shop_app_with_local_database_example/.gitignore b/examples/shop_app_with_local_database_example/.gitignore new file mode 100644 index 000000000..4741c6ae6 --- /dev/null +++ b/examples/shop_app_with_local_database_example/.gitignore @@ -0,0 +1,49 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# FVM Version Cache +.fvm/ \ No newline at end of file diff --git a/examples/shop_app_with_local_database_example/.metadata b/examples/shop_app_with_local_database_example/.metadata new file mode 100644 index 000000000..9e70ade37 --- /dev/null +++ b/examples/shop_app_with_local_database_example/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + - platform: android + create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + - platform: ios + create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + - platform: linux + create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + - platform: macos + create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + - platform: web + create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + - platform: windows + create_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + base_revision: 52b3dc25f6471c27b2144594abb11c741cb88f57 + + # 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/examples/shop_app_with_local_database_example/.vscode/settings.json b/examples/shop_app_with_local_database_example/.vscode/settings.json new file mode 100644 index 000000000..cfd20b7bd --- /dev/null +++ b/examples/shop_app_with_local_database_example/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "dart.flutterSdkPath": ".fvm/versions/3.22.0" +} \ No newline at end of file diff --git a/examples/shop_app_with_local_database_example/README.md b/examples/shop_app_with_local_database_example/README.md new file mode 100644 index 000000000..63efe187b --- /dev/null +++ b/examples/shop_app_with_local_database_example/README.md @@ -0,0 +1,16 @@ +# talker_shop_app_example + +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/examples/shop_app_with_local_database_example/analysis_options.yaml b/examples/shop_app_with_local_database_example/analysis_options.yaml new file mode 100644 index 000000000..61b6c4de1 --- /dev/null +++ b/examples/shop_app_with_local_database_example/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/examples/shop_app_with_local_database_example/android/.gitignore b/examples/shop_app_with_local_database_example/android/.gitignore new file mode 100644 index 000000000..6f568019d --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/.gitignore @@ -0,0 +1,13 @@ +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 diff --git a/examples/shop_app_with_local_database_example/android/app/build.gradle b/examples/shop_app_with_local_database_example/android/app/build.gradle new file mode 100644 index 000000000..5998d897c --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/build.gradle @@ -0,0 +1,76 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +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' +} + + + +android { + compileSdkVersion 34 + 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.example.shop_app_example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + 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 + } + } + namespace 'com.example.shop_app_example' +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/examples/shop_app_with_local_database_example/android/app/src/debug/AndroidManifest.xml b/examples/shop_app_with_local_database_example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..399f6981d --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/shop_app_with_local_database_example/android/app/src/main/AndroidManifest.xml b/examples/shop_app_with_local_database_example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..f9a277caf --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt b/examples/shop_app_with_local_database_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt new file mode 100644 index 000000000..2a8b53de0 --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/main/kotlin/com/example/shop_app_example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.shop_app_example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/examples/shop_app_with_local_database_example/android/app/src/main/res/drawable-v21/launch_background.xml b/examples/shop_app_with_local_database_example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/android/app/src/main/res/drawable/launch_background.xml b/examples/shop_app_with_local_database_example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/android/app/src/main/res/values-night/styles.xml b/examples/shop_app_with_local_database_example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..06952be74 --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/examples/shop_app_with_local_database_example/android/app/src/main/res/values/styles.xml b/examples/shop_app_with_local_database_example/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..cb1ef8805 --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/examples/shop_app_with_local_database_example/android/app/src/profile/AndroidManifest.xml b/examples/shop_app_with_local_database_example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..399f6981d --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/examples/shop_app_with_local_database_example/android/build.gradle b/examples/shop_app_with_local_database_example/android/build.gradle new file mode 100644 index 000000000..b8fa58237 --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.9.20' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:8.1.4' + 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/examples/shop_app_with_local_database_example/android/gradle.properties b/examples/shop_app_with_local_database_example/android/gradle.properties new file mode 100644 index 000000000..b9a9a2464 --- /dev/null +++ b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/android/gradle/wrapper/gradle-wrapper.properties b/examples/shop_app_with_local_database_example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..8bc9958ab --- /dev/null +++ b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/android/settings.gradle b/examples/shop_app_with_local_database_example/android/settings.gradle new file mode 100644 index 000000000..45d92d220 --- /dev/null +++ b/examples/shop_app_with_local_database_example/android/settings.gradle @@ -0,0 +1,29 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } + + plugins { + id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.3.0" apply false +} + +include ":app" \ No newline at end of file diff --git a/examples/shop_app_with_local_database_example/assets/air_max_plus.png b/examples/shop_app_with_local_database_example/assets/air_max_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..8e7491430805725a16ccf6c4014e634507803ec9 GIT binary patch literal 52070 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

Ncnwz0&I<)0vIPhFxSbW?@04 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 O9g<>lqSeBB{{IIsoE={P literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/assets/black.png b/examples/shop_app_with_local_database_example/assets/black.png new file mode 100644 index 0000000000000000000000000000000000000000..6a60b6e4a90674fb0913b044b052fb84eefa72a0 GIT binary patch literal 14952 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 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/assets/flutter.png b/examples/shop_app_with_local_database_example/assets/flutter.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c7f7169d484025f673ce98b2c9f5236fb1bff8 GIT binary patch literal 4436 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 K1-u688vj3ja4L!b literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/assets/github.png b/examples/shop_app_with_local_database_example/assets/github.png new file mode 100644 index 0000000000000000000000000000000000000000..4264efdd73c887a01590824f996b8023bf0c7c42 GIT binary patch literal 105814 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%0D&X@J0n0i# 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�zROhJK;_`fgmm1R6`-C_`p9Pa> zkwK`&?4Az{PYKL87D-LEY&zcfi!`RO}rk+#u(4U+oO#QQ-o ziINmj>w3e?7NnD8{ar_r+3qt_h))e$+a-`wf)YjtzqSh(4nNH1rTOl_K2&wG+mT}y z?*Q<+FLnS`h+idrtdcX8N2u0`kPd^E9cU~}Vp^JSn0i6lzJ+{|CJR$xuXbn*C>nYz z#qfhfrcCSudwGrZ?a_Er2)XANxJ|7qC1DO>QJ^@Pr#Ojj*bl3m$vkRad(*s@xKb?- zvAx>j4irrNtDYm1kJQ^q#-&)P=uz-q%V+mKR$oY0%1`i-bO=jJ!`~q{z*P zh02jHrVw$D+-4wyhAkv{q-+Z9J_=7!DzXUOP zKP6NTDe8}Y(bHAtEK@2GZzOgdSuBuGTIl>aHEA2n!j~X2%{|0HrDox*Zuk}HQVFUi zak&#;H6acCBWLd;T1HcjK8aMwJsR&Cz}a`TDit-r7g=^;zchiMlS$Eo1^ApkhX<7M z{(E3`jS?bWj{^w9hN~&18pVmooK?K=yG|f;L96%uB*z)Pg`N(`DVMf|TxQc8-v^TY8Q<&rfik<+OR z2Y5~i=?hK(-FY11tDywxy1E+=L@p}M%y>IZcP?|$+9``wHjNNy-=*WuEGMLQgxP_?<2Lou2VK z`jt9cWn2vWDOGgw6BU@uP2c=9pEtA_uzp_;r}!0~&9JHW^zD?1`6(n!ayR%1E2Jpe zv@kkhcv@#Pa@xrQAV`ab8c8azO3ENYG@ShSp{yCF@&Cp(JCjBawa=@zB#-D{w2Eau zYudao3Prp{S*>if=OI#Sp9-}m|cyGs&g`Rm0zW^U0U T)baq_?*u`p>)o$awSD=2jPc&& literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/assets/iphone_mockup.png b/examples/shop_app_with_local_database_example/assets/iphone_mockup.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ff5c7c8c31eb39cb06c1ca77f889caeedf7d6b GIT binary patch literal 54534 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 TyvDvCAWJ=6{an^LB{Ts5SAD42 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/assets/red_shoe.png b/examples/shop_app_with_local_database_example/assets/red_shoe.png new file mode 100644 index 0000000000000000000000000000000000000000..c975bf52d225fed7e2ef46e8ea34d4a3f22d4b79 GIT binary patch literal 82014 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

p<7%gUT`1X{tU4}swW}n_B^vaIHUb8C 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 + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/examples/shop_app_with_local_database_example/ios/Flutter/Debug.xcconfig b/examples/shop_app_with_local_database_example/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..ec97fc6f3 --- /dev/null +++ b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/ios/Flutter/Release.xcconfig b/examples/shop_app_with_local_database_example/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..c4855bfe2 --- /dev/null +++ b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/ios/Podfile b/examples/shop_app_with_local_database_example/ios/Podfile new file mode 100644 index 000000000..279576f38 --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Podfile @@ -0,0 +1,41 @@ +# 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_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/examples/shop_app_example/ios/Podfile.lock b/examples/shop_app_with_local_database_example/ios/Podfile.lock similarity index 100% rename from examples/shop_app_example/ios/Podfile.lock rename to examples/shop_app_with_local_database_example/ios/Podfile.lock diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.pbxproj b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..3a975d8ff --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,555 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 8085C882D61E5FDEB14A586C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E371307C1A18E2C5A3240413 /* Pods_Runner.framework */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0A6F4423095F51BC0DB988FE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 5FCA87C01110C9A88C068605 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 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 = ""; }; + A66EB26B3E779516B540894E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E371307C1A18E2C5A3240413 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8085C882D61E5FDEB14A586C /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 44BDBC0FFBC73983292F3E91 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E371307C1A18E2C5A3240413 /* Pods_Runner.framework */, + ); + name = Frameworks; + 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 */, + AC08E13B47D1115C63660D15 /* Pods */, + 44BDBC0FFBC73983292F3E91 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + AC08E13B47D1115C63660D15 /* Pods */ = { + isa = PBXGroup; + children = ( + A66EB26B3E779516B540894E /* Pods-Runner.debug.xcconfig */, + 0A6F4423095F51BC0DB988FE /* Pods-Runner.release.xcconfig */, + 5FCA87C01110C9A88C068605 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 8BA145D81CCCD6EF6B2CF97B /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 175891D37D8EEF6981AEF14F /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 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 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 175891D37D8EEF6981AEF14F /* [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; + }; + 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"; + }; + 8BA145D81CCCD6EF6B2CF97B /* [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; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + 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 = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = B5U2P45VJN; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.shopAppExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + 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 = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + 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 = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = B5U2P45VJN; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.shopAppExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = B5U2P45VJN; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.shopAppExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..5e31d3d34 --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/contents.xcworkspacedata b/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..21a3cc14c --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/examples/shop_app_example/ios/Runner/AppDelegate.swift b/examples/shop_app_with_local_database_example/ios/Runner/AppDelegate.swift similarity index 100% rename from examples/shop_app_example/ios/Runner/AppDelegate.swift rename to examples/shop_app_with_local_database_example/ios/Runner/AppDelegate.swift diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/examples/shop_app_with_local_database_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/examples/shop_app_with_local_database_example/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/examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/Main.storyboard b/examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Info.plist b/examples/shop_app_with_local_database_example/ios/Runner/Info.plist new file mode 100644 index 000000000..dd50cd712 --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Shop App Example + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + shop_app_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/examples/shop_app_with_local_database_example/ios/Runner/Runner-Bridging-Header.h b/examples/shop_app_with_local_database_example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/examples/shop_app_with_local_database_example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/examples/shop_app_with_local_database_example/lib/features/product/bloc/bloc.dart b/examples/shop_app_with_local_database_example/lib/features/product/bloc/bloc.dart new file mode 100644 index 000000000..26e553676 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/product/bloc/bloc.dart @@ -0,0 +1 @@ +export 'product/product_bloc.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_bloc.dart b/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_bloc.dart new file mode 100644 index 000000000..aeabda810 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_bloc.dart @@ -0,0 +1,59 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:talker_flutter/talker_flutter.dart'; +import 'package:talker_shop_app_example/repositories/products/products.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; + +part 'product_event.dart'; +part 'product_state.dart'; + +class ProductBloc extends Bloc { + ProductBloc({ + required AbstractProductsRepository productsRepository, + }) : _productsRepository = productsRepository, + super(ProductInitial()) { + on(_loadProduct); + on(_updateProduct); + on(_addToCard); + } + + final AbstractProductsRepository _productsRepository; + + Future _loadProduct( + LoadProduct event, + Emitter emit, + ) async { + try { + emit(ProductLoading()); + final product = await _productsRepository.getProduct(event.id); + emit(ProductLoaded(product)); + } on Exception catch (e, st) { + DI().handle(e, st); + emit(ProductLoadingFailure()); + } + } + + Future _updateProduct( + UpdateProduct event, + Emitter emit, + ) async { + try { + await _productsRepository.addToFavorites(event.product.id); + emit(ProductLoaded(event.product)); + } on Exception catch (e, st) { + DI().handle(e, st); + // emit(ProductLoadingFailure()); + } + } + + Future _addToCard( + AddProductToCart event, + Emitter emit, + ) async { + try { + await _productsRepository.addToCart(event.id); + } on Exception catch (e, st) { + DI().handle(e, st); + } + } +} diff --git a/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_event.dart b/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_event.dart new file mode 100644 index 000000000..0893fe6b8 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_event.dart @@ -0,0 +1,35 @@ +part of 'product_bloc.dart'; + +abstract class ProductEvent extends Equatable { + const ProductEvent(); + + @override + List get props => []; + + @override + bool? get stringify => true; +} + +class LoadProduct extends ProductEvent { + const LoadProduct(this.id); + final String id; + + @override + List get props => super.props..add(id); +} + +class UpdateProduct extends ProductEvent { + const UpdateProduct(this.product); + final Product product; + + @override + List get props => super.props..add(product); +} + +class AddProductToCart extends ProductEvent { + const AddProductToCart(this.id); + final String id; + + @override + List get props => super.props..add(id); +} diff --git a/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_state.dart b/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_state.dart new file mode 100644 index 000000000..bd835b96f --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/product/bloc/product/product_state.dart @@ -0,0 +1,22 @@ +part of 'product_bloc.dart'; + +abstract class ProductState extends Equatable { + const ProductState(); + + @override + List get props => []; +} + +class ProductInitial extends ProductState {} + +class ProductLoading extends ProductState {} + +class ProductLoaded extends ProductState { + const ProductLoaded(this.product); + final Product product; + + @override + List get props => super.props..add(product); +} + +class ProductLoadingFailure extends ProductState {} diff --git a/examples/shop_app_with_local_database_example/lib/features/product/product.dart b/examples/shop_app_with_local_database_example/lib/features/product/product.dart new file mode 100644 index 000000000..00ffcf94f --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/product/product.dart @@ -0,0 +1 @@ +export 'view/view.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/features/product/view/product_screen.dart b/examples/shop_app_with_local_database_example/lib/features/product/view/product_screen.dart new file mode 100644 index 000000000..4c5768a2f --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/product/view/product_screen.dart @@ -0,0 +1,284 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:talker_shop_app_example/features/product/bloc/bloc.dart'; +import 'package:talker_shop_app_example/repositories/products/products.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; + +class ProductScreen extends StatefulWidget { + const ProductScreen({ + super.key, + }); + + @override + State createState() => _ProductScreenState(); +} + +class _ProductScreenState extends State { + final _productBloc = ProductBloc( + productsRepository: DI(), + ); + + String? _productId; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + final args = ModalRoute.of(context)?.settings.arguments; + if (args != null) { + args as Map; + _productId = args['productId']; + _loadProduct(); + } + } + + void _loadProduct() { + if (_productId != null) { + _productBloc.add(LoadProduct(_productId!)); + } + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0, + foregroundColor: Colors.black, + ), + body: BlocBuilder( + bloc: _productBloc, + builder: (context, state) { + if (state is ProductLoaded) { + final product = state.product; + return Stack( + alignment: Alignment.bottomCenter, + children: [ + Stack( + children: [ + Container( + width: double.infinity, + height: double.infinity, + decoration: const BoxDecoration( + gradient: LinearGradient( + stops: [-0.3, 0.9], + begin: Alignment.topCenter, + end: Alignment.bottomRight, + colors: [ + Color(0xFFF1F3F4), + Color(0xFFE3E4E4), + ], + ), + ), + ), + Align( + alignment: Alignment.topCenter, + child: Image.asset( + product.image, + width: double.infinity, + height: 200, + ), + ), + ], + ), + BlocBuilder( + bloc: _productBloc, + builder: (context, state) { + if (state is ProductLoaded) { + final product = state.product; + return Container( + height: 500, + width: double.infinity, + decoration: BoxDecoration( + color: theme.cardColor, + boxShadow: [ + BoxShadow( + color: Colors.grey[400]!, + blurRadius: 30, + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Flexible( + child: Text( + product.name, + style: const TextStyle( + fontSize: 24, + fontWeight: FontWeight.w600, + ), + ), + ), + Flexible( + child: Text( + product.type, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w400, + color: Colors.grey[600], + ), + ), + ), + Flexible( + child: Text( + '${product.price} \$', + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + const Spacer(flex: 1), + const Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + 'Product details', + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.w600, + ), + ), + ), + Flexible( + child: Text( + '''It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using ''', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + color: Colors.grey, + ), + ), + ), + ], + ), + const Spacer(flex: 2), + SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 10, + vertical: 10, + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + FloatingActionButton( + backgroundColor: Colors.black, + child: Icon( + Icons.favorite, + color: product.isFavorite + ? Colors.red + : Colors.white, + ), + onPressed: () => + _toggleProductIsFavorite(product), + ), + const SizedBox(width: 20), + Expanded( + child: SizedBox( + height: 55, + child: AddToCartButton( + onPressed: () => + _addProductToCart(product), + ), + ), + ), + ], + ), + ), + ), + ], + ), + ), + ); + } + if (state is ProductLoadingFailure) { + return Center( + child: TextButton( + onPressed: _loadProduct, + child: const Text('Try again'), + ), + ); + } + return const Center( + child: CircularProgressIndicator( + color: Colors.black, + ), + ); + }, + ), + ], + ); + } + return const Center(child: CircularProgressIndicator()); + }, + ), + ); + } + + void _addProductToCart(Product product) { + _productBloc.add(AddProductToCart(product.id)); + } + + void _toggleProductIsFavorite(Product product) { + _productBloc.add( + UpdateProduct( + product.copyWith(isFavorite: !product.isFavorite), + ), + ); + } +} + +class AddToCartButton extends StatelessWidget { + const AddToCartButton({ + super.key, + required this.onPressed, + }); + + final VoidCallback onPressed; + + @override + Widget build(BuildContext context) { + return ElevatedButton.icon( + style: ButtonStyle( + backgroundColor: WidgetStateProperty.all(Colors.black), + shape: WidgetStateProperty.all( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + ), + onPressed: onPressed, + icon: const Padding( + padding: EdgeInsets.only( + right: 10.0, + ), + child: Icon( + Icons.shopping_basket, + color: Colors.white, + ), + ), + label: const Row( + children: [ + Text( + 'Add to card', + style: TextStyle(color: Colors.white), + ), + ], + ), + ); + } +} diff --git a/examples/shop_app_with_local_database_example/lib/features/product/view/view.dart b/examples/shop_app_with_local_database_example/lib/features/product/view/view.dart new file mode 100644 index 000000000..d0c017c8c --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/product/view/view.dart @@ -0,0 +1 @@ +export 'product_screen.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/features/products/bloc/bloc.dart b/examples/shop_app_with_local_database_example/lib/features/products/bloc/bloc.dart new file mode 100644 index 000000000..ed8ca9c18 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/bloc/bloc.dart @@ -0,0 +1 @@ +export 'products/products_bloc.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_bloc.dart b/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_bloc.dart new file mode 100644 index 000000000..0d847ef0b --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_bloc.dart @@ -0,0 +1,32 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:talker_flutter/talker_flutter.dart'; +import 'package:talker_shop_app_example/repositories/products/products.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; + +part 'products_event.dart'; +part 'products_state.dart'; + +class ProductsBloc extends Bloc { + ProductsBloc({required AbstractProductsRepository productsRepository}) + : _productsRepository = productsRepository, + super(ProductsInitial()) { + on(_loadProducts); + } + + final AbstractProductsRepository _productsRepository; + + Future _loadProducts( + LoadProducts event, + Emitter emit, + ) async { + try { + emit(ProductsLoading()); + final products = await _productsRepository.getProductsList(); + emit(ProductsLoaded(products)); + } on Exception catch (e, st) { + DI().handle(e, st); + emit(ProductsLoadingFailure()); + } + } +} diff --git a/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_event.dart b/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_event.dart new file mode 100644 index 000000000..07a4b9534 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_event.dart @@ -0,0 +1,13 @@ +part of 'products_bloc.dart'; + +abstract class ProductsEvent extends Equatable { + const ProductsEvent(); + + @override + List get props => []; + + @override + bool? get stringify => true; +} + +class LoadProducts extends ProductsEvent {} diff --git a/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_state.dart b/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_state.dart new file mode 100644 index 000000000..274d9b6fe --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/bloc/products/products_state.dart @@ -0,0 +1,25 @@ +part of 'products_bloc.dart'; + +abstract class ProductsState extends Equatable { + const ProductsState(); + + @override + List get props => []; +} + +class ProductsInitial extends ProductsState {} + +class ProductsLoading extends ProductsState {} + +class ProductsLoaded extends ProductsState { + const ProductsLoaded(this.products); + final List products; + + @override + List get props => super.props..add(products); + + @override + bool? get stringify => true; +} + +class ProductsLoadingFailure extends ProductsState {} diff --git a/examples/shop_app_with_local_database_example/lib/features/products/products.dart b/examples/shop_app_with_local_database_example/lib/features/products/products.dart new file mode 100644 index 000000000..00ffcf94f --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/products.dart @@ -0,0 +1 @@ +export 'view/view.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/features/products/view/products_screen.dart b/examples/shop_app_with_local_database_example/lib/features/products/view/products_screen.dart new file mode 100644 index 000000000..91e48d012 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/view/products_screen.dart @@ -0,0 +1,220 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:talker_shop_app_example/features/products/bloc/products/products_bloc.dart'; +import 'package:talker_shop_app_example/features/products/widgets/widgets.dart'; +import 'package:talker_shop_app_example/repositories/products/products.dart'; +import 'package:talker_shop_app_example/ui/ui.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; + +class ProductsScreen extends StatefulWidget { + const ProductsScreen({ + super.key, + }); + + @override + State createState() => _ProductsScreenState(); +} + +class _ProductsScreenState extends State { + final _productsBloc = ProductsBloc( + productsRepository: DI(), + ); + + @override + void initState() { + _loadProducts(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + pinned: true, + title: const Text( + 'SHOPY', + style: TextStyle(color: Colors.black), + ), + centerTitle: false, + surfaceTintColor: theme.cardColor, + leading: const Icon( + Icons.menu_rounded, + color: Colors.black, + size: 28, + ), + actions: [ + _OpenLogsButton( + onPressed: () => _openTalkerScreen(context), + ), + ], + ), + const SliverToBoxAdapter(child: _ExampleWarning()), + BlocBuilder( + bloc: _productsBloc, + builder: (context, state) { + if (state is ProductsLoaded) { + final products = state.products; + return SliverPadding( + padding: const EdgeInsets.symmetric(horizontal: 12) + .copyWith(bottom: 40), + sliver: SliverGrid( + delegate: SliverChildBuilderDelegate( + (BuildContext context, int i) { + return ProductCard( + product: products[i], + onTap: () => _openProductScreen(context, products, i), + ); + }, + childCount: products.length, + ), + gridDelegate: + const SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: 200, + childAspectRatio: 3 / 4, + crossAxisSpacing: 10, + mainAxisSpacing: 10, + ), + ), + ); + } + if (state is ProductsLoadingFailure) { + return SliverFillRemaining( + child: _ErrorScreen(onReload: _loadProducts), + ); + } + return const SliverFillRemaining( + child: Center( + child: CircularProgressIndicator( + color: Colors.black, + ), + ), + ); + }, + ), + ], + ), + ); + } + + void _openTalkerScreen(BuildContext context) => + Navigator.pushNamed(context, Routes.talker); + + void _openProductScreen(BuildContext context, List products, int i) { + Navigator.pushNamed( + context, + Routes.product, + arguments: {'productId': products[i].id}, + ); + } + + void _loadProducts() { + _productsBloc.add(LoadProducts()); + } +} + +class _OpenLogsButton extends StatelessWidget { + const _OpenLogsButton({required this.onPressed}); + + final VoidCallback onPressed; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton.icon( + style: ButtonStyle( + backgroundColor: const WidgetStatePropertyAll(Colors.black), + shape: WidgetStateProperty.all( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.0), + ), + ), + ), + onPressed: onPressed, + icon: const Icon( + Icons.document_scanner, + color: Colors.white, + ), + label: const Text( + 'Open logs', + style: TextStyle( + color: Colors.white, + ), + ), + ), + ); + } +} + +class _ErrorScreen extends StatelessWidget { + const _ErrorScreen({ + required this.onReload, + }); + + final VoidCallback onReload; + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Text( + 'Ops! Something not working', + style: TextStyle(fontSize: 20, fontWeight: FontWeight.w700), + ), + const Text( + 'It is special error to check how logs working in differend ways of logic', + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w400), + textAlign: TextAlign.center, + ), + TextButton( + onPressed: onReload, + child: const Text('Try again'), + ), + ], + ), + ); + } +} + +class _ExampleWarning extends StatelessWidget { + const _ExampleWarning(); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Container( + margin: const EdgeInsets.symmetric(vertical: 12, horizontal: 12), + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + border: Border.all(color: Colors.orange[800]!), + borderRadius: BorderRadius.circular(15), + color: theme.cardColor, + boxShadow: cardShadow, + ), + child: Row( + children: [ + Icon( + Icons.warning_amber_rounded, + color: Colors.orange[800]!, + ), + const SizedBox(width: 10), + Expanded( + child: Text( + _waringText, + style: TextStyle(color: Colors.orange[800]!), + ), + ), + ], + ), + ); + } +} + +const _waringText = + 'In this example, every second http - request will be intentionally incorrect to show all types of logs in TalkerMonitor'; diff --git a/examples/shop_app_with_local_database_example/lib/features/products/view/view.dart b/examples/shop_app_with_local_database_example/lib/features/products/view/view.dart new file mode 100644 index 000000000..36ee4ed04 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/view/view.dart @@ -0,0 +1 @@ +export 'products_screen.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/features/products/widgets/product_card.dart b/examples/shop_app_with_local_database_example/lib/features/products/widgets/product_card.dart new file mode 100644 index 000000000..0139187b6 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/widgets/product_card.dart @@ -0,0 +1,83 @@ +import 'package:flutter/material.dart'; +import 'package:talker_shop_app_example/repositories/products/products.dart'; +import 'package:talker_shop_app_example/ui/ui.dart'; + +class ProductCard extends StatelessWidget { + const ProductCard({ + super.key, + required this.product, + required this.onTap, + }); + + final Product product; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return GestureDetector( + onTap: onTap, + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + color: theme.cardColor, + borderRadius: BorderRadius.circular(15), + boxShadow: cardShadow, + ), + child: Stack( + children: [ + Align( + alignment: Alignment.topCenter, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Image.asset( + product.image, + width: double.infinity, + ), + ), + ), + Positioned( + bottom: 10, + left: 10, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Flexible( + child: Text( + product.name, + overflow: TextOverflow.fade, + style: const TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ), + Flexible( + child: Text( + product.type, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + color: Colors.grey[600], + ), + ), + ), + Flexible( + child: Text( + '${product.price} \$', + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/examples/shop_app_with_local_database_example/lib/features/products/widgets/widgets.dart b/examples/shop_app_with_local_database_example/lib/features/products/widgets/widgets.dart new file mode 100644 index 000000000..5e1cb318e --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/features/products/widgets/widgets.dart @@ -0,0 +1 @@ +export 'product_card.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/firebase_options.dart b/examples/shop_app_with_local_database_example/lib/firebase_options.dart new file mode 100644 index 000000000..1a743cd27 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/firebase_options.dart @@ -0,0 +1,64 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for android - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.iOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for ios - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyAn0rfTu-c83sBQzkCOKy-P8Jln4Btietk', + appId: '1:910867081702:web:05b869f960f934ab2a4e27', + messagingSenderId: '910867081702', + projectId: 'talker-7ac5e', + authDomain: 'talker-7ac5e.firebaseapp.com', + storageBucket: 'talker-7ac5e.appspot.com', + measurementId: 'G-N39HBH14D7', + ); +} diff --git a/examples/shop_app_with_local_database_example/lib/main.dart b/examples/shop_app_with_local_database_example/lib/main.dart new file mode 100644 index 000000000..da5240320 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/main.dart @@ -0,0 +1,115 @@ +import 'dart:async'; + +import 'package:dio/dio.dart'; +import 'package:firebase_analytics/firebase_analytics.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:talker_bloc_logger/talker_bloc_logger.dart'; +import 'package:talker_dio_logger/talker_dio_logger.dart'; +import 'package:talker_flutter/talker_flutter.dart'; +import 'package:talker_shop_app_example/repositories/products/products.dart'; +import 'package:talker_shop_app_example/ui/presentation_frame.dart'; +import 'package:talker_shop_app_example/ui/ui.dart'; +import 'package:talker_shop_app_example/utils/scroll_behavior.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; + +import 'firebase_options.dart'; + +void main() { + runZonedGuarded(() async { + WidgetsFlutterBinding.ensureInitialized(); + await _initFirebase(); + _initDependencies(); + runApp(const MyApp()); + }, (Object error, StackTrace stack) { + DI().handle(error, stack, 'Uncaught app exception'); + }); +} + +Future _initDependencies() async { + final talker = await TalkerFlutter.initWithDB( + settings: TalkerSettings( + colors: { + TalkerLogType.verbose: AnsiPen()..red(), + }, + ), + ); + talker.settings.colors.forEach((val1,val2){ + + }); + + talker.verbose('Talker initialization completed-1'); + // talker.verbose('Talker initialization completed-2'); + // talker.verbose('Talker initialization completed-3'); + + + DI.registerSingleton(talker); + + + final talkerDioLogger = TalkerDioLogger( + talker: talker, + settings: const TalkerDioLoggerSettings( + printRequestHeaders: true, + printResponseHeaders: false, + printRequestData: true, + printResponseData: false, + ), + ); + + final dio = Dio(); + dio.interceptors.add(talkerDioLogger); + + DI.registerSingleton( + ProductsRepository(dio: dio), + ); + talker.info('Repositories initialization completed'); + + Bloc.observer = TalkerBlocObserver( + talker: talker, + settings: const TalkerBlocLoggerSettings( + printCreations: false, + printClosings: false, + printStateFullData: false, + ), + ); +} + +Future _initFirebase() async { + if (kIsWeb) { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + final analytics = FirebaseAnalytics.instance; + analytics.logAppOpen(); + } +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + scrollBehavior: kIsWeb ? WebScrollBehavior() : null, + title: 'Talker shop app', + theme: lightTheme, + initialRoute: Routes.productsList, + debugShowCheckedModeBanner: false, + routes: appRoutes, + navigatorObservers: [ + TalkerRouteObserver(DI()), + ], + builder: (context, child) { + return PresentationFrame( + talkerTheme: talkerTheme, + child: TalkerWrapper( + talker: DI(), + child: child!, + ), + ); + }, + ); + } +} diff --git a/examples/shop_app_with_local_database_example/lib/repositories/products/abstarct_products_repository.dart b/examples/shop_app_with_local_database_example/lib/repositories/products/abstarct_products_repository.dart new file mode 100644 index 000000000..97eef77f0 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/repositories/products/abstarct_products_repository.dart @@ -0,0 +1,8 @@ +import 'package:talker_shop_app_example/repositories/products/products.dart'; + +abstract class AbstractProductsRepository { + Future> getProductsList(); + Future getProduct(String id); + Future addToFavorites(String id); + Future addToCart(String id); +} diff --git a/examples/shop_app_with_local_database_example/lib/repositories/products/models/models.dart b/examples/shop_app_with_local_database_example/lib/repositories/products/models/models.dart new file mode 100644 index 000000000..4c79dc1df --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/repositories/products/models/models.dart @@ -0,0 +1 @@ +export 'product.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/repositories/products/models/product.dart b/examples/shop_app_with_local_database_example/lib/repositories/products/models/product.dart new file mode 100644 index 000000000..606dafd78 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/repositories/products/models/product.dart @@ -0,0 +1,43 @@ +import 'package:equatable/equatable.dart'; + +class Product extends Equatable { + const Product({ + required this.id, + required this.name, + required this.type, + required this.price, + required this.image, + this.isFavorite = false, + }); + + final String id; + final String name; + final String type; + final double price; + final String image; + final bool isFavorite; + + @override + List get props => [id, name, type, price, image, isFavorite]; + + @override + bool? get stringify => true; + + Product copyWith({ + String? id, + String? name, + String? type, + double? price, + String? image, + bool? isFavorite, + }) { + return Product( + id: id ?? this.id, + name: name ?? this.name, + type: type ?? this.type, + price: price ?? this.price, + image: image ?? this.image, + isFavorite: isFavorite ?? this.isFavorite, + ); + } +} diff --git a/examples/shop_app_with_local_database_example/lib/repositories/products/products.dart b/examples/shop_app_with_local_database_example/lib/repositories/products/products.dart new file mode 100644 index 000000000..893f1f7b5 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/repositories/products/products.dart @@ -0,0 +1,3 @@ +export 'abstarct_products_repository.dart'; +export 'products_repository.dart'; +export 'models/models.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/repositories/products/products_repository.dart b/examples/shop_app_with_local_database_example/lib/repositories/products/products_repository.dart new file mode 100644 index 000000000..f881a09b9 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/repositories/products/products_repository.dart @@ -0,0 +1,92 @@ +import 'package:dio/dio.dart'; +import 'package:talker_shop_app_example/repositories/products/products.dart'; + +const _mockProducts = [ + Product( + id: '1', + name: 'Nike Air Plus', + type: 'Running shoes', + price: 299, + image: 'assets/air_max_plus.png', + ), + Product( + id: '2', + name: 'Nike Air White', + type: 'Running shoes', + price: 299, + image: 'assets/air_max_plus_white.png', + ), + Product( + id: '3', + name: 'Dark shoes', + type: 'Walking shoes', + price: 449, + image: 'assets/black.png', + ), + Product( + id: '4', + name: 'Blue shoes', + type: 'Running shoes', + price: 300, + image: 'assets/blue_shoe.png', + ), + Product( + id: '5', + name: 'Red shoes', + type: 'Walking shoes', + price: 300, + image: 'assets/red_shoe.png', + ), +]; + +/// [_requestsCount > 1] - special mock logic +/// to check how logs working in differend ways of logic +class ProductsRepository implements AbstractProductsRepository { + ProductsRepository({required Dio dio}) : _dio = dio; + var _requestsCount = 0; + + final Dio _dio; + + @override + Future> getProductsList() async { + _requestsCount += 1; + if (_requestsCount % 2 != 0) { + await _dio.get('https://jsonplaceholder.typicode.com/users/1'); + return _mockProducts; + } + + /// Incorrect http request path + await _dio.get('https://jsonplaceholder.typicode.com/usetyrtyergvf/1'); + return _mockProducts; + } + + @override + Future getProduct(String id) async { + await _dio.get('https://jsonplaceholder.typicode.com/users/1'); + return _mockProducts.firstWhere((e) => e.id == id); + } + + @override + Future addToFavorites(String id) async { + _requestsCount += 1; + if (_requestsCount % 2 != 0) { + await _dio.put('https://jsonplaceholder.typicode.com/users/1'); + return; + } + + /// Incorrect request + await _dio.put('https://jsonplaceholder.typicode.comuseahstdfr/1'); + } + + @override + Future addToCart(String id) async { + _requestsCount += 1; + if (_requestsCount % 2 != 0) { + await _dio.post('https://jsonplaceholder.typicode.com/users/1'); + return; + } + + /// Incorrect request + await _dio.post('https://jsonplaceholder.typicode.comusyeyrutwyetf/1'); + } +} diff --git a/examples/shop_app_with_local_database_example/lib/ui/presentation_frame.dart b/examples/shop_app_with_local_database_example/lib/ui/presentation_frame.dart new file mode 100644 index 000000000..f5533db6c --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/ui/presentation_frame.dart @@ -0,0 +1,312 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:talker_flutter/talker_flutter.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class PresentationFrame extends StatelessWidget { + const PresentationFrame({ + super.key, + required this.child, + required this.talkerTheme, + }); + + final Widget child; + final TalkerScreenTheme talkerTheme; + + @override + Widget build(BuildContext context) { + if (kIsWeb && MediaQuery.of(context).size.width > 600) { + const MediaQueryData mq = MediaQueryData( + size: Size(414, 896), + padding: EdgeInsets.only(top: 44, bottom: 34), + devicePixelRatio: 2, + ); + return Material( + child: Stack( + children: [ + Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), + width: double.infinity, + decoration: const BoxDecoration(color: Colors.red), + child: const Text( + 'Interact with Application to see changes in Logs Preview', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.w400, + fontSize: 20, + ), + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 60, top: 50), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _LogsPreview(talkerTheme: talkerTheme), + const SizedBox(width: 20), + _ApplicationPreview(mq: mq, child: child), + const SizedBox(width: 60), + const _TalkerAboutSection(mq: mq), + ], + ), + ), + ], + ), + ); + } + return child; + } +} + +class _TalkerAboutSection extends StatelessWidget { + const _TalkerAboutSection({ + required this.mq, + }); + + final MediaQueryData mq; + + @override + Widget build(BuildContext context) { + return Flexible( + flex: 2, + child: FittedBox( + fit: BoxFit.scaleDown, + child: Container( + padding: const EdgeInsets.only(bottom: 40), + width: mq.size.width, + height: mq.size.height, + alignment: Alignment.center, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Spacer(), + GestureDetector( + onTap: _openGitHub, + child: Row( + children: [ + const Text( + 'Talker', + style: TextStyle( + fontWeight: FontWeight.w900, + fontSize: 70, + ), + maxLines: 3, + overflow: TextOverflow.clip, + ), + const SizedBox(width: 10), + Container( + padding: const EdgeInsets.symmetric( + vertical: 4, horizontal: 12), + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(16), + ), + child: const Text( + 'v4.0.0', + style: TextStyle( + fontWeight: FontWeight.w900, + fontSize: 30, + color: Colors.white, + ), + ), + ), + ], + ), + ), + const Text( + 'Now your app is not\na black box', + style: TextStyle( + fontWeight: FontWeight.w900, + fontSize: 30, + ), + maxLines: 3, + overflow: TextOverflow.clip, + ), + const Spacer(), + Row( + children: [ + InkWell( + onTap: _openPubDev, + child: Row( + children: [ + Image.asset('assets/flutter.png', height: 70), + const SizedBox(width: 10), + const Text( + 'Flutter', + style: TextStyle( + fontSize: 32, + color: Color(0xFF01579B), + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + const SizedBox(width: 20), + InkWell( + onTap: _openGitHub, + child: Row( + children: [ + Image.asset('assets/github.png', height: 70), + const SizedBox(width: 10), + const Text( + 'GitHub', + style: TextStyle( + fontSize: 32, + color: Colors.black, + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + ], + ), + const Spacer(), + ], + ), + ), + ), + ); + } + + void _openGitHub() { + launchUrl(Uri.parse('https://github.com/Frezyx/talker')); + } + + void _openPubDev() { + launchUrl(Uri.parse('https://pub.dev/packages/talker')); + } +} + +class _ApplicationPreview extends StatelessWidget { + const _ApplicationPreview({ + required this.mq, + required this.child, + }); + + final MediaQueryData mq; + final Widget child; + + @override + Widget build(BuildContext context) { + return Flexible( + flex: 3, + child: FittedBox( + fit: BoxFit.contain, + child: Builder(builder: (context) { + final device = MediaQuery( + data: mq, + child: Container( + width: mq.size.width, + height: mq.size.height, + alignment: Alignment.center, + child: child, + ), + ); + return Column( + children: [ + const Text( + 'Application', + style: TextStyle(fontSize: 50), + ), + const SizedBox(height: 16), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(50), + border: Border.all(color: Colors.black, width: 12)), + child: ClipRRect( + clipBehavior: Clip.antiAlias, + borderRadius: BorderRadius.circular(38.5), + child: device, + ), + ), + ], + ); + }), + ), + ); + } +} + +class _LogsPreview extends StatelessWidget { + const _LogsPreview({ + required this.talkerTheme, + }); + + final TalkerScreenTheme talkerTheme; + + @override + Widget build(BuildContext context) { + const MediaQueryData mediaQuery = MediaQueryData( + size: Size(800, 896), + padding: EdgeInsets.only(top: 44, bottom: 34), + devicePixelRatio: 2, + ); + return Flexible( + flex: 5, + child: FittedBox( + fit: BoxFit.contain, + child: Builder(builder: (context) { + final device = MediaQuery( + data: mediaQuery, + child: Container( + width: mediaQuery.size.width, + height: mediaQuery.size.height, + alignment: Alignment.center, + child: TalkerBuilder( + talker: DI(), + builder: (context, data) { + final reversedLogs = data.reversed.toList(); + return Container( + color: const Color(0xFF212121), + child: CustomScrollView( + slivers: [ + const SliverToBoxAdapter(child: SizedBox(height: 40)), + SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) { + final data = reversedLogs[index]; + return TalkerDataCard( + data: data, + color: data.getFlutterColor(talkerTheme), + ); + }, + childCount: reversedLogs.length, + ), + ), + ], + ), + ); + }), + ), + ); + return Column( + children: [ + const Text( + 'Logs preview', + style: TextStyle(fontSize: 50), + ), + const SizedBox(height: 16), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + border: Border.all(color: Colors.grey[700]!, width: 6), + ), + child: ClipRRect( + clipBehavior: Clip.antiAlias, + borderRadius: BorderRadius.circular(7), + child: device, + ), + ), + ], + ); + }), + ), + ); + } +} diff --git a/examples/shop_app_with_local_database_example/lib/ui/presentation_widget.dart b/examples/shop_app_with_local_database_example/lib/ui/presentation_widget.dart new file mode 100644 index 000000000..e272efd7a --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/ui/presentation_widget.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:talker_flutter/talker_flutter.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; + +class PresentationWidget extends StatelessWidget { + const PresentationWidget({super.key, required this.child}); + + final Widget child; + + @override + Widget build(BuildContext context) { + return Row( + children: [ + const Spacer(flex: 2), + Expanded( + flex: 4, + child: Stack( + children: [ + child, + Image.asset('assets/iphone_mockup.png'), + ], + ), + ), + const Spacer(flex: 1), + Expanded( + flex: 4, + child: TalkerScreen(talker: DI()), + ), + const Spacer(flex: 2), + ], + ); + } +} diff --git a/examples/shop_app_with_local_database_example/lib/ui/router.dart b/examples/shop_app_with_local_database_example/lib/ui/router.dart new file mode 100644 index 000000000..1714af417 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/ui/router.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; +import 'package:talker_flutter/talker_flutter.dart'; +import 'package:talker_shop_app_example/features/product/product.dart'; +import 'package:talker_shop_app_example/features/products/view/products_screen.dart'; +import 'package:talker_shop_app_example/ui/ui.dart'; +import 'package:talker_shop_app_example/utils/utils.dart'; + +abstract class Routes { + static const productsList = '/products-list'; + static const product = '/product'; + static const talker = '/talker'; +} + +final appRoutes = { + Routes.product: (context) => const ProductScreen(), + Routes.productsList: (context) => const ProductsScreen(), + Routes.talker: (context) => TalkerScreen( + talker: DI(), + theme: talkerTheme, + appBarTitle: "Logger", + ), +}; diff --git a/examples/shop_app_example/lib/ui/theme.dart b/examples/shop_app_with_local_database_example/lib/ui/theme.dart similarity index 100% rename from examples/shop_app_example/lib/ui/theme.dart rename to examples/shop_app_with_local_database_example/lib/ui/theme.dart diff --git a/examples/shop_app_with_local_database_example/lib/ui/ui.dart b/examples/shop_app_with_local_database_example/lib/ui/ui.dart new file mode 100644 index 000000000..9653a7270 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/ui/ui.dart @@ -0,0 +1,2 @@ +export 'router.dart'; +export 'theme.dart'; diff --git a/examples/shop_app_with_local_database_example/lib/utils/di.dart b/examples/shop_app_with_local_database_example/lib/utils/di.dart new file mode 100644 index 000000000..f9fc7ecca --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/utils/di.dart @@ -0,0 +1,6 @@ +// ignore_for_file: non_constant_identifier_names + +import 'package:get_it/get_it.dart'; + +/// Simplified name for dependency injection / service locator +final DI = GetIt.instance; diff --git a/examples/shop_app_with_local_database_example/lib/utils/scroll_behavior.dart b/examples/shop_app_with_local_database_example/lib/utils/scroll_behavior.dart new file mode 100644 index 000000000..535ead558 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/utils/scroll_behavior.dart @@ -0,0 +1,25 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +/// This class is used to override the default scroll behavior of the +/// [MaterialApp] widget. +/// +/// The default scroll behavior of the [MaterialApp] widget is to only +/// scroll when the user is using a touch device. This class overrides +/// that behavior to allow scrolling when the user is using a mouse +/// device. +/// +/// This class is used in the [MaterialApp.scrollBehavior] property. +/// +/// See: https://docs.flutter.dev/release/breaking-changes/default-scroll-behavior-drag +class WebScrollBehavior extends MaterialScrollBehavior { + @override + Set get dragDevices => { + PointerDeviceKind.touch, + PointerDeviceKind.mouse, + PointerDeviceKind.invertedStylus, + PointerDeviceKind.stylus, + PointerDeviceKind.trackpad, + PointerDeviceKind.unknown, + }; +} diff --git a/examples/shop_app_with_local_database_example/lib/utils/utils.dart b/examples/shop_app_with_local_database_example/lib/utils/utils.dart new file mode 100644 index 000000000..fc631eb26 --- /dev/null +++ b/examples/shop_app_with_local_database_example/lib/utils/utils.dart @@ -0,0 +1 @@ +export 'di.dart'; diff --git a/examples/shop_app_with_local_database_example/linux/.gitignore b/examples/shop_app_with_local_database_example/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/examples/shop_app_with_local_database_example/linux/CMakeLists.txt b/examples/shop_app_with_local_database_example/linux/CMakeLists.txt new file mode 100644 index 000000000..c35b5cc2d --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/CMakeLists.txt @@ -0,0 +1,138 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "shop_app_example") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.shop_app_example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/examples/shop_app_with_local_database_example/linux/flutter/CMakeLists.txt b/examples/shop_app_with_local_database_example/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.cc b/examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..72830e358 --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,19 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) objectbox_flutter_libs_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "ObjectboxFlutterLibsPlugin"); + objectbox_flutter_libs_plugin_register_with_registrar(objectbox_flutter_libs_registrar); + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); +} diff --git a/examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.h b/examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/examples/shop_app_with_local_database_example/linux/flutter/generated_plugins.cmake b/examples/shop_app_with_local_database_example/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..f869d600f --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/flutter/generated_plugins.cmake @@ -0,0 +1,25 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + objectbox_flutter_libs + url_launcher_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/examples/shop_app_with_local_database_example/linux/main.cc b/examples/shop_app_with_local_database_example/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/examples/shop_app_with_local_database_example/linux/my_application.cc b/examples/shop_app_with_local_database_example/linux/my_application.cc new file mode 100644 index 000000000..19403d018 --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "shop_app_example"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "shop_app_example"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/examples/shop_app_with_local_database_example/linux/my_application.h b/examples/shop_app_with_local_database_example/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/examples/shop_app_with_local_database_example/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/examples/shop_app_with_local_database_example/macos/.gitignore b/examples/shop_app_with_local_database_example/macos/.gitignore new file mode 100644 index 000000000..746adbb6b --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Debug.xcconfig b/examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 000000000..4b81f9b2d --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Release.xcconfig b/examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 000000000..5caa9d157 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/examples/shop_app_with_local_database_example/macos/Flutter/GeneratedPluginRegistrant.swift b/examples/shop_app_with_local_database_example/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 000000000..72be872e9 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,22 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import firebase_analytics +import firebase_core +import objectbox_flutter_libs +import path_provider_foundation +import share_plus +import url_launcher_macos + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAnalyticsPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + ObjectboxFlutterLibsPlugin.register(with: registry.registrar(forPlugin: "ObjectboxFlutterLibsPlugin")) + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) +} diff --git a/examples/shop_app_with_local_database_example/macos/Podfile b/examples/shop_app_with_local_database_example/macos/Podfile new file mode 100644 index 000000000..049abe295 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Podfile @@ -0,0 +1,40 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/examples/shop_app_with_local_database_example/macos/Podfile.lock b/examples/shop_app_with_local_database_example/macos/Podfile.lock new file mode 100644 index 000000000..ae4b3e8da --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Podfile.lock @@ -0,0 +1,152 @@ +PODS: + - Firebase/Analytics (10.18.0): + - Firebase/Core + - Firebase/Core (10.18.0): + - Firebase/CoreOnly + - FirebaseAnalytics (~> 10.18.0) + - Firebase/CoreOnly (10.18.0): + - FirebaseCore (= 10.18.0) + - firebase_analytics (10.8.0): + - Firebase/Analytics (= 10.18.0) + - firebase_core + - FlutterMacOS + - firebase_core (2.24.2): + - Firebase/CoreOnly (~> 10.18.0) + - FlutterMacOS + - FirebaseAnalytics (10.18.0): + - FirebaseAnalytics/AdIdSupport (= 10.18.0) + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseAnalytics/AdIdSupport (10.18.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleAppMeasurement (= 10.18.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseCore (10.18.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.12) + - GoogleUtilities/Logger (~> 7.12) + - FirebaseCoreInternal (10.20.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseInstallations (10.20.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FlutterMacOS (1.0.0) + - GoogleAppMeasurement (10.18.0): + - GoogleAppMeasurement/AdIdSupport (= 10.18.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (10.18.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 10.18.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (10.18.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleUtilities/AppDelegateSwizzler (7.12.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Environment (7.12.0): + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.12.0): + - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (7.12.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (7.12.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (7.12.0)" + - GoogleUtilities/Reachability (7.12.0): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (7.12.0): + - GoogleUtilities/Logger + - nanopb (2.30909.1): + - nanopb/decode (= 2.30909.1) + - nanopb/encode (= 2.30909.1) + - nanopb/decode (2.30909.1) + - nanopb/encode (2.30909.1) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.3.1) + - share_plus (0.0.1): + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - firebase_analytics (from `Flutter/ephemeral/.symlinks/plugins/firebase_analytics/macos`) + - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + +SPEC REPOS: + trunk: + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - GoogleAppMeasurement + - GoogleUtilities + - nanopb + - PromisesObjC + +EXTERNAL SOURCES: + firebase_analytics: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_analytics/macos + firebase_core: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos + FlutterMacOS: + :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + share_plus: + :path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + +SPEC CHECKSUMS: + Firebase: 414ad272f8d02dfbf12662a9d43f4bba9bec2a06 + firebase_analytics: 687a47ef9af9c5a8a9fc612c100987f843d0a281 + firebase_core: a74ee8b3ab5f91ae6b73f4913eaca996c24458b6 + FirebaseAnalytics: 4d310b35c48eaa4a058ddc04bdca6bdb5dc0fe80 + FirebaseCore: 2322423314d92f946219c8791674d2f3345b598f + FirebaseCoreInternal: efeeb171ac02d623bdaefe121539939821e10811 + FirebaseInstallations: 558b1da7d65afeb996fd5c814332f013234ece4e + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + GoogleAppMeasurement: 70ce9aa438cff1cfb31ea3e660bcc67734cb716e + GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 + nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 + path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c + PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 + share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7 + url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95 + +PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 + +COCOAPODS: 1.15.2 diff --git a/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.pbxproj b/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..15ea646f7 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,633 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + D4A1563B3CA8EC3889022EC2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 77EC58E5FD7E30C7D0038B47 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* shop_app_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = shop_app_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4A27279DFB8C88F99AE55955 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 77EC58E5FD7E30C7D0038B47 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 79477C8C921B5EF934B54E01 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + DF150674176AF416ADD84C88 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D4A1563B3CA8EC3889022EC2 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + F6B7B8EC78C2E0B4FA7F0630 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* shop_app_example.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 77EC58E5FD7E30C7D0038B47 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F6B7B8EC78C2E0B4FA7F0630 /* Pods */ = { + isa = PBXGroup; + children = ( + 79477C8C921B5EF934B54E01 /* Pods-Runner.debug.xcconfig */, + 4A27279DFB8C88F99AE55955 /* Pods-Runner.release.xcconfig */, + DF150674176AF416ADD84C88 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 7EF6B422961D32C0F3338614 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 2B6BBD9ADEEA4B87C4F1BB47 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* shop_app_example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 2B6BBD9ADEEA4B87C4F1BB47 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 7EF6B422961D32C0F3338614 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..b8efb95eb --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/contents.xcworkspacedata b/examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..21a3cc14c --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/shop_app_with_local_database_example/macos/Runner/AppDelegate.swift b/examples/shop_app_with_local_database_example/macos/Runner/AppDelegate.swift new file mode 100644 index 000000000..d53ef6437 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..a2ec33f19 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 zcmaiYXH?Tqu=Xz`p-L#B_gI#0we$cm_HcmYFP$?wjD#BaCN4mzC5#`>w9y6=ThxrYZc0WPXprg zYjB`UsV}0=eUtY$(P6YW}npdd;%9pi?zS3k-nqCob zSX_AQEf|=wYT3r?f!*Yt)ar^;l3Sro{z(7deUBPd2~(SzZ-s@0r&~Km2S?8r##9-< z)2UOSVaHqq6}%sA9Ww;V2LG=PnNAh6mA2iWOuV7T_lRDR z&N8-eN=U)-T|;wo^Wv=34wtV0g}sAAe}`Ph@~!|<;z7*K8(qkX0}o=!(+N*UWrkEja*$_H6mhK1u{P!AC39} z|3+Z(mAOq#XRYS)TLoHv<)d%$$I@+x+2)V{@o~~J-!YUI-Q9%!Ldi4Op&Lw&B>jj* zwAgC#Y>gbIqv!d|J5f!$dbCXoq(l3GR(S>(rtZ~Z*agXMMKN!@mWT_vmCbSd3dUUm z4M&+gz?@^#RRGal%G3dDvj7C5QTb@9+!MG+>0dcjtZEB45c+qx*c?)d<%htn1o!#1 zpIGonh>P1LHu3s)fGFF-qS}AXjW|M*2Xjkh7(~r(lN=o#mBD9?jt74=Rz85I4Nfx_ z7Z)q?!};>IUjMNM6ee2Thq7))a>My?iWFxQ&}WvsFP5LP+iGz+QiYek+K1`bZiTV- zHHYng?ct@Uw5!gquJ(tEv1wTrRR7cemI>aSzLI^$PxW`wL_zt@RSfZ1M3c2sbebM* ze0=;sy^!90gL~YKISz*x;*^~hcCoO&CRD)zjT(A2b_uRue=QXFe5|!cf0z1m!iwv5GUnLw9Dr*Ux z)3Lc!J@Ei;&&yxGpf2kn@2wJ2?t6~obUg;?tBiD#uo$SkFIasu+^~h33W~`r82rSa ztyE;ehFjC2hjpJ-e__EH&z?!~>UBb=&%DS>NT)1O3Isn-!SElBV2!~m6v0$vx^a<@ISutdTk1@?;i z<8w#b-%|a#?e5(n@7>M|v<<0Kpg?BiHYMRe!3Z{wYc2hN{2`6(;q`9BtXIhVq6t~KMH~J0~XtUuT06hL8c1BYZWhN zk4F2I;|za*R{ToHH2L?MfRAm5(i1Ijw;f+0&J}pZ=A0;A4M`|10ZskA!a4VibFKn^ zdVH4OlsFV{R}vFlD~aA4xxSCTTMW@Gws4bFWI@xume%smAnuJ0b91QIF?ZV!%VSRJ zO7FmG!swKO{xuH{DYZ^##gGrXsUwYfD0dxXX3>QmD&`mSi;k)YvEQX?UyfIjQeIm! z0ME3gmQ`qRZ;{qYOWt}$-mW*>D~SPZKOgP)T-Sg%d;cw^#$>3A9I(%#vsTRQe%moT zU`geRJ16l>FV^HKX1GG7fR9AT((jaVb~E|0(c-WYQscVl(z?W!rJp`etF$dBXP|EG z=WXbcZ8mI)WBN>3<@%4eD597FD5nlZajwh8(c$lum>yP)F}=(D5g1-WVZRc)(!E3} z-6jy(x$OZOwE=~{EQS(Tp`yV2&t;KBpG*XWX!yG+>tc4aoxbXi7u@O*8WWFOxUjcq z^uV_|*818$+@_{|d~VOP{NcNi+FpJ9)aA2So<7sB%j`$Prje&auIiTBb{oD7q~3g0 z>QNIwcz(V-y{Ona?L&=JaV5`o71nIsWUMA~HOdCs10H+Irew#Kr(2cn>orG2J!jvP zqcVX0OiF}c<)+5&p}a>_Uuv)L_j}nqnJ5a?RPBNi8k$R~zpZ33AA4=xJ@Z($s3pG9 zkURJY5ZI=cZGRt_;`hs$kE@B0FrRx(6K{`i1^*TY;Vn?|IAv9|NrN*KnJqO|8$e1& zb?OgMV&q5|w7PNlHLHF) zB+AK#?EtCgCvwvZ6*u|TDhJcCO+%I^@Td8CR}+nz;OZ*4Dn?mSi97m*CXXc=};!P`B?}X`F-B5v-%ACa8fo0W++j&ztmqK z;&A)cT4ob9&MxpQU41agyMU8jFq~RzXOAsy>}hBQdFVL%aTn~M>5t9go2j$i9=(rZ zADmVj;Qntcr3NIPPTggpUxL_z#5~C!Gk2Rk^3jSiDqsbpOXf^f&|h^jT4|l2ehPat zb$<*B+x^qO8Po2+DAmrQ$Zqc`1%?gp*mDk>ERf6I|42^tjR6>}4`F_Mo^N(~Spjcg z_uY$}zui*PuDJjrpP0Pd+x^5ds3TG#f?57dFL{auS_W8|G*o}gcnsKYjS6*t8VI<) zcjqTzW(Hk*t-Qhq`Xe+x%}sxXRerScbPGv8hlJ;CnU-!Nl=# zR=iTFf9`EItr9iAlAGi}i&~nJ-&+)Y| zMZigh{LXe)uR+4D_Yb+1?I93mHQ5{pId2Fq%DBr7`?ipi;CT!Q&|EO3gH~7g?8>~l zT@%*5BbetH)~%TrAF1!-!=)`FIS{^EVA4WlXYtEy^|@y@yr!C~gX+cp2;|O4x1_Ol z4fPOE^nj(}KPQasY#U{m)}TZt1C5O}vz`A|1J!-D)bR%^+=J-yJsQXDzFiqb+PT0! zIaDWWU(AfOKlSBMS};3xBN*1F2j1-_=%o($ETm8@oR_NvtMDVIv_k zlnNBiHU&h8425{MCa=`vb2YP5KM7**!{1O>5Khzu+5OVGY;V=Vl+24fOE;tMfujoF z0M``}MNnTg3f%Uy6hZi$#g%PUA_-W>uVCYpE*1j>U8cYP6m(>KAVCmbsDf39Lqv0^ zt}V6FWjOU@AbruB7MH2XqtnwiXS2scgjVMH&aF~AIduh#^aT1>*V>-st8%=Kk*{bL zzbQcK(l2~)*A8gvfX=RPsNnjfkRZ@3DZ*ff5rmx{@iYJV+a@&++}ZW+za2fU>&(4y`6wgMpQGG5Ah(9oGcJ^P(H< zvYn5JE$2B`Z7F6ihy>_49!6}(-)oZ(zryIXt=*a$bpIw^k?>RJ2 zQYr>-D#T`2ZWDU$pM89Cl+C<;J!EzHwn(NNnWpYFqDDZ_*FZ{9KQRcSrl5T>dj+eA zi|okW;6)6LR5zebZJtZ%6Gx8^=2d9>_670!8Qm$wd+?zc4RAfV!ZZ$jV0qrv(D`db zm_T*KGCh3CJGb(*X6nXzh!h9@BZ-NO8py|wG8Qv^N*g?kouH4%QkPU~Vizh-D3<@% zGomx%q42B7B}?MVdv1DFb!axQ73AUxqr!yTyFlp%Z1IAgG49usqaEbI_RnbweR;Xs zpJq7GKL_iqi8Md?f>cR?^0CA+Uk(#mTlGdZbuC*$PrdB$+EGiW**=$A3X&^lM^K2s zzwc3LtEs5|ho z2>U(-GL`}eNgL-nv3h7E<*<>C%O^=mmmX0`jQb6$mP7jUKaY4je&dCG{x$`0=_s$+ zSpgn!8f~ya&U@c%{HyrmiW2&Wzc#Sw@+14sCpTWReYpF9EQ|7vF*g|sqG3hx67g}9 zwUj5QP2Q-(KxovRtL|-62_QsHLD4Mu&qS|iDp%!rs(~ah8FcrGb?Uv^Qub5ZT_kn%I^U2rxo1DDpmN@8uejxik`DK2~IDi1d?%~pR7i#KTS zA78XRx<(RYO0_uKnw~vBKi9zX8VnjZEi?vD?YAw}y+)wIjIVg&5(=%rjx3xQ_vGCy z*&$A+bT#9%ZjI;0w(k$|*x{I1c!ECMus|TEA#QE%#&LxfGvijl7Ih!B2 z6((F_gwkV;+oSKrtr&pX&fKo3s3`TG@ye+k3Ov)<#J|p8?vKh@<$YE@YIU1~@7{f+ zydTna#zv?)6&s=1gqH<-piG>E6XW8ZI7&b@-+Yk0Oan_CW!~Q2R{QvMm8_W1IV8<+ zQTyy=(Wf*qcQubRK)$B;QF}Y>V6d_NM#=-ydM?%EPo$Q+jkf}*UrzR?Nsf?~pzIj$ z<$wN;7c!WDZ(G_7N@YgZ``l;_eAd3+;omNjlpfn;0(B7L)^;;1SsI6Le+c^ULe;O@ zl+Z@OOAr4$a;=I~R0w4jO`*PKBp?3K+uJ+Tu8^%i<_~bU!p%so z^sjol^slR`W@jiqn!M~eClIIl+`A5%lGT{z^mRbpv}~AyO%R*jmG_Wrng{B9TwIuS z0!@fsM~!57K1l0%{yy(#no}roy#r!?0wm~HT!vLDfEBs9x#`9yCKgufm0MjVRfZ=f z4*ZRc2Lgr(P+j2zQE_JzYmP0*;trl7{*N341Cq}%^M^VC3gKG-hY zmPT>ECyrhIoFhnMB^qpdbiuI}pk{qPbK^}0?Rf7^{98+95zNq6!RuV_zAe&nDk0;f zez~oXlE5%ve^TmBEt*x_X#fs(-En$jXr-R4sb$b~`nS=iOy|OVrph(U&cVS!IhmZ~ zKIRA9X%Wp1J=vTvHZ~SDe_JXOe9*fa zgEPf;gD^|qE=dl>Qkx3(80#SE7oxXQ(n4qQ#by{uppSKoDbaq`U+fRqk0BwI>IXV3 zD#K%ASkzd7u>@|pA=)Z>rQr@dLH}*r7r0ng zxa^eME+l*s7{5TNu!+bD{Pp@2)v%g6^>yj{XP&mShhg9GszNu4ITW=XCIUp2Xro&1 zg_D=J3r)6hp$8+94?D$Yn2@Kp-3LDsci)<-H!wCeQt$e9Jk)K86hvV^*Nj-Ea*o;G zsuhRw$H{$o>8qByz1V!(yV{p_0X?Kmy%g#1oSmlHsw;FQ%j9S#}ha zm0Nx09@jmOtP8Q+onN^BAgd8QI^(y!n;-APUpo5WVdmp8!`yKTlF>cqn>ag`4;o>i zl!M0G-(S*fm6VjYy}J}0nX7nJ$h`|b&KuW4d&W5IhbR;-)*9Y0(Jj|@j`$xoPQ=Cl literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/examples/shop_app_with_local_database_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Configs/AppInfo.xcconfig b/examples/shop_app_with_local_database_example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 000000000..b22d5f853 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = shop_app_example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.shopAppExample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Configs/Debug.xcconfig b/examples/shop_app_with_local_database_example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 000000000..36b0fd946 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Configs/Release.xcconfig b/examples/shop_app_with_local_database_example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 000000000..dff4f4956 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Configs/Warnings.xcconfig b/examples/shop_app_with_local_database_example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 000000000..42bcbf478 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/examples/shop_app_with_local_database_example/macos/Runner/DebugProfile.entitlements b/examples/shop_app_with_local_database_example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 000000000..dddb8a30c --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Info.plist b/examples/shop_app_with_local_database_example/macos/Runner/Info.plist new file mode 100644 index 000000000..4789daa6a --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/examples/shop_app_with_local_database_example/macos/Runner/MainFlutterWindow.swift b/examples/shop_app_with_local_database_example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 000000000..2722837ec --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/examples/shop_app_with_local_database_example/macos/Runner/Release.entitlements b/examples/shop_app_with_local_database_example/macos/Runner/Release.entitlements new file mode 100644 index 000000000..852fa1a47 --- /dev/null +++ b/examples/shop_app_with_local_database_example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/examples/shop_app_with_local_database_example/pubspec.lock b/examples/shop_app_with_local_database_example/pubspec.lock new file mode 100644 index 000000000..202e40a60 --- /dev/null +++ b/examples/shop_app_with_local_database_example/pubspec.lock @@ -0,0 +1,653 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" + url: "https://pub.dev" + source: hosted + version: "1.3.35" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + bloc: + dependency: transitive + description: + name: bloc + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" + source: hosted + version: "8.1.4" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + dio: + dependency: "direct main" + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + equatable: + dependency: "direct main" + description: + name: equatable + sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + url: "https://pub.dev" + source: hosted + version: "2.1.3" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + sha256: dbf1e7ab22cfb1f4a4adb103b46a26276b4edc593d4a78ef6fb942bafc92e035 + url: "https://pub.dev" + source: hosted + version: "10.10.7" + firebase_analytics_platform_interface: + dependency: transitive + description: + name: firebase_analytics_platform_interface + sha256: "3729b74f8cf1d974a27ba70332ecb55ff5ff560edc8164a6469f4a055b429c37" + url: "https://pub.dev" + source: hosted + version: "3.10.8" + firebase_analytics_web: + dependency: transitive + description: + name: firebase_analytics_web + sha256: "019cd7eee74254d33fbd2e29229367ce33063516bf6b3258a341d89e3b0f1655" + url: "https://pub.dev" + source: hosted + version: "0.5.7+7" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" + url: "https://pub.dev" + source: hosted + version: "2.32.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 + url: "https://pub.dev" + source: hosted + version: "5.3.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: f967a7138f5d2ffb1ce15950e2a382924239eaa521150a8f144af34e68b3b3e5 + url: "https://pub.dev" + source: hosted + version: "2.18.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://pub.dev" + source: hosted + version: "1.1.1" + flat_buffers: + dependency: transitive + description: + name: flat_buffers + sha256: "23e2ced0d8e8ecdffbd9f267f49a668c74438393b9acaeac1c724123e3764263" + url: "https://pub.dev" + source: hosted + version: "2.0.5" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a + url: "https://pub.dev" + source: hosted + version: "8.1.6" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + get_it: + dependency: "direct main" + description: + name: get_it + sha256: d85128a5dae4ea777324730dc65edd9c9f43155c109d5cc0a69cab74139fbac1 + url: "https://pub.dev" + source: hosted + version: "7.7.0" + group_button: + dependency: transitive + description: + name: group_button + sha256: "0610fcf28ed122bfb4b410fce161a390f7f2531d55d1d65c5375982001415940" + url: "https://pub.dev" + source: hosted + version: "5.3.4" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + meta: + dependency: transitive + description: + name: meta + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + url: "https://pub.dev" + source: hosted + version: "1.12.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + objectbox: + dependency: transitive + description: + name: objectbox + sha256: c18d41f4e81e5a30fc0e2200e9e8306f5ccc8a9b61fe3746426359690c33dc7b + url: "https://pub.dev" + source: hosted + version: "1.7.2" + objectbox_flutter_libs: + dependency: transitive + description: + name: objectbox_flutter_libs + sha256: "179a2edfca5eb80abee6e829ebff69872ad20c9f07c2527fe9d098f4bf5a5b83" + url: "https://pub.dev" + source: hosted + version: "1.7.2" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" + url: "https://pub.dev" + source: hosted + version: "2.2.10" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + url: "https://pub.dev" + source: hosted + version: "2.4.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + provider: + dependency: transitive + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + share_plus: + dependency: transitive + description: + name: share_plus + sha256: "9c9bafd4060728d7cdb2464c341743adbd79d327cb067ec7afb64583540b47c8" + url: "https://pub.dev" + source: hosted + version: "10.1.2" + share_plus_platform_interface: + dependency: transitive + description: + name: share_plus_platform_interface + sha256: c57c0bbfec7142e3a0f55633be504b796af72e60e3c791b44d5a017b985f7a48 + url: "https://pub.dev" + source: hosted + version: "5.0.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + talker: + dependency: "direct overridden" + description: + path: "../../packages/talker" + relative: true + source: path + version: "4.4.1" + talker_bloc_logger: + dependency: "direct overridden" + description: + path: "../../packages/talker_bloc_logger" + relative: true + source: path + version: "4.4.1" + talker_dio_logger: + dependency: "direct overridden" + description: + path: "../../packages/talker_dio_logger" + relative: true + source: path + version: "4.4.1" + talker_flutter: + dependency: "direct overridden" + description: + path: "../../packages/talker_flutter" + relative: true + source: path + version: "4.4.1" + talker_logger: + dependency: "direct overridden" + description: + path: "../../packages/talker_logger" + relative: true + source: path + version: "4.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79 + url: "https://pub.dev" + source: hosted + version: "6.3.9" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" + url: "https://pub.dev" + source: hosted + version: "3.1.3" + uuid: + dependency: transitive + description: + name: uuid + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + url: "https://pub.dev" + source: hosted + version: "4.5.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a" + url: "https://pub.dev" + source: hosted + version: "5.5.4" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" +sdks: + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/examples/shop_app_with_local_database_example/pubspec.yaml b/examples/shop_app_with_local_database_example/pubspec.yaml new file mode 100644 index 000000000..6a6586acc --- /dev/null +++ b/examples/shop_app_with_local_database_example/pubspec.yaml @@ -0,0 +1,40 @@ +name: talker_shop_app_example +description: Talker flutter example shop application +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: '>=2.17.1 <4.0.0' +dependencies: + flutter: + sdk: flutter + + # # talker_flutter: ^4.4.1 + # talker_flutter: + # path: ../../packages/talker_flutter # Local path to talker_flutter package + + # # talker_dio_logger: ^4.4.1 + # talker_dio_logger: + # path: ../../packages/talker_dio_logger # Local path to talker_dio_logger package + # # talker_bloc_logger: ^4.4.1 + # talker_bloc_logger: + # path: ../../packages/talker_bloc_logger # Local path to talker_bloc_logger package + + + get_it: ^7.6.7 + flutter_bloc: ^8.1.3 + equatable: ^2.0.5 + dio: ^5.4.0 + url_launcher: ^6.2.4 + firebase_core: ^2.24.2 + firebase_analytics: ^10.8.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^3.0.1 + +flutter: + uses-material-design: true + assets: + - assets/ diff --git a/examples/shop_app_with_local_database_example/pubspec_overrides.yaml b/examples/shop_app_with_local_database_example/pubspec_overrides.yaml new file mode 100644 index 000000000..f3666a801 --- /dev/null +++ b/examples/shop_app_with_local_database_example/pubspec_overrides.yaml @@ -0,0 +1,16 @@ +dependency_overrides: + talker_logger: + path: + ../../packages/talker_logger + talker: + path: + ../../packages/talker + talker_flutter: + path: + ../../packages/talker_flutter + talker_dio_logger: + path: + ../../packages/talker_dio_logger + talker_bloc_logger: + path: + ../../packages/talker_bloc_logger \ No newline at end of file diff --git a/examples/shop_app_with_local_database_example/web/favicon.png b/examples/shop_app_with_local_database_example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/web/icons/Icon-192.png b/examples/shop_app_with_local_database_example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 zcmZ`-2T+sGz6~)*FVZ`aW+(v>MIm&M-g^@e2u-B-DoB?qO+b1Tq<5uCCv>ESfRum& zp%X;f!~1{tzL__3=gjVJ=j=J>+nMj%ncXj1Q(b|Ckbw{Y0FWpt%4y%$uD=Z*c-x~o zE;IoE;xa#7Ll5nj-e4CuXB&G*IM~D21rCP$*xLXAK8rIMCSHuSu%bL&S3)8YI~vyp@KBu9Ph7R_pvKQ@xv>NQ`dZp(u{Z8K3yOB zn7-AR+d2JkW)KiGx0hosml;+eCXp6+w%@STjFY*CJ?udJ64&{BCbuebcuH;}(($@@ znNlgBA@ZXB)mcl9nbX#F!f_5Z=W>0kh|UVWnf!At4V*LQP%*gPdCXd6P@J4Td;!Ur z<2ZLmwr(NG`u#gDEMP19UcSzRTL@HsK+PnIXbVBT@oHm53DZr?~V(0{rsalAfwgo zEh=GviaqkF;}F_5-yA!1u3!gxaR&Mj)hLuj5Q-N-@Lra{%<4ONja8pycD90&>yMB` zchhd>0CsH`^|&TstH-8+R`CfoWqmTTF_0?zDOY`E`b)cVi!$4xA@oO;SyOjJyP^_j zx^@Gdf+w|FW@DMdOi8=4+LJl$#@R&&=UM`)G!y%6ZzQLoSL%*KE8IO0~&5XYR9 z&N)?goEiWA(YoRfT{06&D6Yuu@Qt&XVbuW@COb;>SP9~aRc+z`m`80pB2o%`#{xD@ zI3RAlukL5L>px6b?QW1Ac_0>ew%NM!XB2(H+1Y3AJC?C?O`GGs`331Nd4ZvG~bMo{lh~GeL zSL|tT*fF-HXxXYtfu5z+T5Mx9OdP7J4g%@oeC2FaWO1D{=NvL|DNZ}GO?O3`+H*SI z=grGv=7dL{+oY0eJFGO!Qe(e2F?CHW(i!!XkGo2tUvsQ)I9ev`H&=;`N%Z{L zO?vV%rDv$y(@1Yj@xfr7Kzr<~0{^T8wM80xf7IGQF_S-2c0)0D6b0~yD7BsCy+(zL z#N~%&e4iAwi4F$&dI7x6cE|B{f@lY5epaDh=2-(4N05VO~A zQT3hanGy_&p+7Fb^I#ewGsjyCEUmSCaP6JDB*=_()FgQ(-pZ28-{qx~2foO4%pM9e z*_63RT8XjgiaWY|*xydf;8MKLd{HnfZ2kM%iq}fstImB-K6A79B~YoPVa@tYN@T_$ zea+9)<%?=Fl!kd(Y!G(-o}ko28hg2!MR-o5BEa_72uj7Mrc&{lRh3u2%Y=Xk9^-qa zBPWaD=2qcuJ&@Tf6ue&)4_V*45=zWk@Z}Q?f5)*z)-+E|-yC4fs5CE6L_PH3=zI8p z*Z3!it{1e5_^(sF*v=0{`U9C741&lub89gdhKp|Y8CeC{_{wYK-LSbp{h)b~9^j!s z7e?Y{Z3pZv0J)(VL=g>l;<}xk=T*O5YR|hg0eg4u98f2IrA-MY+StQIuK-(*J6TRR z|IM(%uI~?`wsfyO6Tgmsy1b3a)j6M&-jgUjVg+mP*oTKdHg?5E`!r`7AE_#?Fc)&a z08KCq>Gc=ne{PCbRvs6gVW|tKdcE1#7C4e`M|j$C5EYZ~Y=jUtc zj`+?p4ba3uy7><7wIokM79jPza``{Lx0)zGWg;FW1^NKY+GpEi=rHJ+fVRGfXO zPHV52k?jxei_!YYAw1HIz}y8ZMwdZqU%ESwMn7~t zdI5%B;U7RF=jzRz^NuY9nM)&<%M>x>0(e$GpU9th%rHiZsIT>_qp%V~ILlyt^V`=d z!1+DX@ah?RnB$X!0xpTA0}lN@9V-ePx>wQ?-xrJr^qDlw?#O(RsXeAvM%}rg0NT#t z!CsT;-vB=B87ShG`GwO;OEbeL;a}LIu=&@9cb~Rsx(ZPNQ!NT7H{@j0e(DiLea>QD zPmpe90gEKHEZ8oQ@6%E7k-Ptn#z)b9NbD@_GTxEhbS+}Bb74WUaRy{w;E|MgDAvHw zL)ycgM7mB?XVh^OzbC?LKFMotw3r@i&VdUV%^Efdib)3@soX%vWCbnOyt@Y4swW925@bt45y0HY3YI~BnnzZYrinFy;L?2D3BAL`UQ zEj))+f>H7~g8*VuWQ83EtGcx`hun$QvuurSMg3l4IP8Fe`#C|N6mbYJ=n;+}EQm;< z!!N=5j1aAr_uEnnzrEV%_E|JpTb#1p1*}5!Ce!R@d$EtMR~%9# zd;h8=QGT)KMW2IKu_fA_>p_und#-;Q)p%%l0XZOXQicfX8M~7?8}@U^ihu;mizj)t zgV7wk%n-UOb z#!P5q?Ex+*Kx@*p`o$q8FWL*E^$&1*!gpv?Za$YO~{BHeGY*5%4HXUKa_A~~^d z=E*gf6&+LFF^`j4$T~dR)%{I)T?>@Ma?D!gi9I^HqvjPc3-v~=qpX1Mne@*rzT&Xw zQ9DXsSV@PqpEJO-g4A&L{F&;K6W60D!_vs?Vx!?w27XbEuJJP&);)^+VF1nHqHBWu z^>kI$M9yfOY8~|hZ9WB!q-9u&mKhEcRjlf2nm_@s;0D#c|@ED7NZE% zzR;>P5B{o4fzlfsn3CkBK&`OSb-YNrqx@N#4CK!>bQ(V(D#9|l!e9(%sz~PYk@8zt zPN9oK78&-IL_F zhsk1$6p;GqFbtB^ZHHP+cjMvA0(LqlskbdYE_rda>gvQLTiqOQ1~*7lg%z*&p`Ry& zRcG^DbbPj_jOKHTr8uk^15Boj6>hA2S-QY(W-6!FIq8h$<>MI>PYYRenQDBamO#Fv zAH5&ImqKBDn0v5kb|8i0wFhUBJTpT!rB-`zK)^SNnRmLraZcPYK7b{I@+}wXVdW-{Ps17qdRA3JatEd?rPV z4@}(DAMf5EqXCr4-B+~H1P#;t@O}B)tIJ(W6$LrK&0plTmnPpb1TKn3?f?Kk``?D+ zQ!MFqOX7JbsXfQrz`-M@hq7xlfNz;_B{^wbpG8des56x(Q)H)5eLeDwCrVR}hzr~= zM{yXR6IM?kXxauLza#@#u?Y|o;904HCqF<8yT~~c-xyRc0-vxofnxG^(x%>bj5r}N zyFT+xnn-?B`ohA>{+ZZQem=*Xpqz{=j8i2TAC#x-m;;mo{{sLB_z(UoAqD=A#*juZ zCv=J~i*O8;F}A^Wf#+zx;~3B{57xtoxC&j^ie^?**T`WT2OPRtC`xj~+3Kprn=rVM zVJ|h5ux%S{dO}!mq93}P+h36mZ5aZg1-?vhL$ke1d52qIiXSE(llCr5i=QUS?LIjc zV$4q=-)aaR4wsrQv}^shL5u%6;`uiSEs<1nG^?$kl$^6DL z43CjY`M*p}ew}}3rXc7Xck@k41jx}c;NgEIhKZ*jsBRZUP-x2cm;F1<5$jefl|ppO zmZd%%?gMJ^g9=RZ^#8Mf5aWNVhjAS^|DQO+q$)oeob_&ZLFL(zur$)); zU19yRm)z<4&4-M}7!9+^Wl}Uk?`S$#V2%pQ*SIH5KI-mn%i;Z7-)m$mN9CnI$G7?# zo`zVrUwoSL&_dJ92YhX5TKqaRkfPgC4=Q&=K+;_aDs&OU0&{WFH}kKX6uNQC6%oUH z2DZa1s3%Vtk|bglbxep-w)PbFG!J17`<$g8lVhqD2w;Z0zGsh-r zxZ13G$G<48leNqR!DCVt9)@}(zMI5w6Wo=N zpP1*3DI;~h2WDWgcKn*f!+ORD)f$DZFwgKBafEZmeXQMAsq9sxP9A)7zOYnkHT9JU zRA`umgmP9d6=PHmFIgx=0$(sjb>+0CHG)K@cPG{IxaJ&Ueo8)0RWgV9+gO7+Bl1(F z7!BslJ2MP*PWJ;x)QXbR$6jEr5q3 z(3}F@YO_P1NyTdEXRLU6fp?9V2-S=E+YaeLL{Y)W%6`k7$(EW8EZSA*(+;e5@jgD^I zaJQ2|oCM1n!A&-8`;#RDcZyk*+RPkn_r8?Ak@agHiSp*qFNX)&i21HE?yuZ;-C<3C zwJGd1lx5UzViP7sZJ&|LqH*mryb}y|%AOw+v)yc`qM)03qyyrqhX?ub`Cjwx2PrR! z)_z>5*!*$x1=Qa-0uE7jy0z`>|Ni#X+uV|%_81F7)b+nf%iz=`fF4g5UfHS_?PHbr zB;0$bK@=di?f`dS(j{l3-tSCfp~zUuva+=EWxJcRfp(<$@vd(GigM&~vaYZ0c#BTs z3ijkxMl=vw5AS&DcXQ%eeKt!uKvh2l3W?&3=dBHU=Gz?O!40S&&~ei2vg**c$o;i89~6DVns zG>9a*`k5)NI9|?W!@9>rzJ;9EJ=YlJTx1r1BA?H`LWijk(rTax9(OAu;q4_wTj-yj z1%W4GW&K4T=uEGb+E!>W0SD_C0RR91 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/web/icons/Icon-512.png b/examples/shop_app_with_local_database_example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/web/icons/Icon-maskable-192.png b/examples/shop_app_with_local_database_example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/web/icons/Icon-maskable-512.png b/examples/shop_app_with_local_database_example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/web/index.html b/examples/shop_app_with_local_database_example/web/index.html new file mode 100644 index 000000000..123348293 --- /dev/null +++ b/examples/shop_app_with_local_database_example/web/index.html @@ -0,0 +1,52 @@ + + + + + + + + Talker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/shop_app_with_local_database_example/web/manifest.json b/examples/shop_app_with_local_database_example/web/manifest.json new file mode 100644 index 000000000..f82b6c13f --- /dev/null +++ b/examples/shop_app_with_local_database_example/web/manifest.json @@ -0,0 +1,23 @@ +{ + "name": "talker", + "short_name": "talker", + "start_url": ".", + "display": "minimal-ui", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} \ No newline at end of file diff --git a/examples/shop_app_with_local_database_example/windows/.gitignore b/examples/shop_app_with_local_database_example/windows/.gitignore new file mode 100644 index 000000000..d492d0d98 --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/examples/shop_app_with_local_database_example/windows/CMakeLists.txt b/examples/shop_app_with_local_database_example/windows/CMakeLists.txt new file mode 100644 index 000000000..6eef62e6c --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/CMakeLists.txt @@ -0,0 +1,101 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(shop_app_example LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "shop_app_example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/examples/shop_app_with_local_database_example/windows/flutter/CMakeLists.txt b/examples/shop_app_with_local_database_example/windows/flutter/CMakeLists.txt new file mode 100644 index 000000000..903f4899d --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.cc b/examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..54bd8462d --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,23 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include +#include +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); + ObjectboxFlutterLibsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("ObjectboxFlutterLibsPlugin")); + SharePlusWindowsPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); +} diff --git a/examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.h b/examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..dc139d85a --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/examples/shop_app_with_local_database_example/windows/flutter/generated_plugins.cmake b/examples/shop_app_with_local_database_example/windows/flutter/generated_plugins.cmake new file mode 100644 index 000000000..568ca8a0f --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/flutter/generated_plugins.cmake @@ -0,0 +1,27 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + firebase_core + objectbox_flutter_libs + share_plus + url_launcher_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/examples/shop_app_with_local_database_example/windows/runner/CMakeLists.txt b/examples/shop_app_with_local_database_example/windows/runner/CMakeLists.txt new file mode 100644 index 000000000..17411a8ab --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/examples/shop_app_with_local_database_example/windows/runner/Runner.rc b/examples/shop_app_with_local_database_example/windows/runner/Runner.rc new file mode 100644 index 000000000..41f99269b --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "shop_app_example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "shop_app_example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "shop_app_example.exe" "\0" + VALUE "ProductName", "shop_app_example" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/examples/shop_app_with_local_database_example/windows/runner/flutter_window.cpp b/examples/shop_app_with_local_database_example/windows/runner/flutter_window.cpp new file mode 100644 index 000000000..b43b9095e --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/flutter_window.cpp @@ -0,0 +1,61 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/examples/shop_app_with_local_database_example/windows/runner/flutter_window.h b/examples/shop_app_with_local_database_example/windows/runner/flutter_window.h new file mode 100644 index 000000000..6da0652f0 --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/examples/shop_app_with_local_database_example/windows/runner/main.cpp b/examples/shop_app_with_local_database_example/windows/runner/main.cpp new file mode 100644 index 000000000..96b1d516e --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.CreateAndShow(L"shop_app_example", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/examples/shop_app_with_local_database_example/windows/runner/resource.h b/examples/shop_app_with_local_database_example/windows/runner/resource.h new file mode 100644 index 000000000..66a65d1e4 --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/examples/shop_app_with_local_database_example/windows/runner/resources/app_icon.ico b/examples/shop_app_with_local_database_example/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/examples/shop_app_with_local_database_example/windows/runner/runner.exe.manifest b/examples/shop_app_with_local_database_example/windows/runner/runner.exe.manifest new file mode 100644 index 000000000..a42ea7687 --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/examples/shop_app_with_local_database_example/windows/runner/utils.cpp b/examples/shop_app_with_local_database_example/windows/runner/utils.cpp new file mode 100644 index 000000000..f5bf9fa0f --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/utils.cpp @@ -0,0 +1,64 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, utf8_string.data(), + target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/examples/shop_app_with_local_database_example/windows/runner/utils.h b/examples/shop_app_with_local_database_example/windows/runner/utils.h new file mode 100644 index 000000000..3879d5475 --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/examples/shop_app_with_local_database_example/windows/runner/win32_window.cpp b/examples/shop_app_with_local_database_example/windows/runner/win32_window.cpp new file mode 100644 index 000000000..c10f08dc7 --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/win32_window.cpp @@ -0,0 +1,245 @@ +#include "win32_window.h" + +#include + +#include "resource.h" + +namespace { + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + FreeLibrary(user32_module); + } +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::CreateAndShow(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + return OnCreate(); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} diff --git a/examples/shop_app_with_local_database_example/windows/runner/win32_window.h b/examples/shop_app_with_local_database_example/windows/runner/win32_window.h new file mode 100644 index 000000000..17ba43112 --- /dev/null +++ b/examples/shop_app_with_local_database_example/windows/runner/win32_window.h @@ -0,0 +1,98 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates and shows a win32 window with |title| and position and size using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size to will treat the width height passed in to this function + // as logical pixels and scale to appropriate for the default monitor. Returns + // true if the window was created successfully. + bool CreateAndShow(const std::wstring& title, + const Point& origin, + const Size& size); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responsponds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/packages/talker/.flutter-plugins b/packages/talker/.flutter-plugins new file mode 100644 index 000000000..b3802aff4 --- /dev/null +++ b/packages/talker/.flutter-plugins @@ -0,0 +1,7 @@ +# This is a generated file; do not edit or check into version control. +objectbox_flutter_libs=C:\\Users\\venka\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\objectbox_flutter_libs-1.7.0\\ +path_provider=C:\\Users\\venka\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider-2.1.5\\ +path_provider_android=C:\\Users\\venka\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_android-2.2.10\\ +path_provider_foundation=C:\\Users\\venka\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_foundation-2.4.0\\ +path_provider_linux=C:\\Users\\venka\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_linux-2.2.1\\ +path_provider_windows=C:\\Users\\venka\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_windows-2.3.0\\ diff --git a/packages/talker/lib/objectbox-model.json b/packages/talker/lib/objectbox-model.json new file mode 100644 index 000000000..00e6ad75a --- /dev/null +++ b/packages/talker/lib/objectbox-model.json @@ -0,0 +1,77 @@ +{ + "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.", + "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.", + "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.", + "entities": [ + { + "id": "1:2732766526390766766", + "lastPropertyId": "10:3011623524114326227", + "name": "TalkerData", + "properties": [ + { + "id": "1:3498377610127543967", + "name": "id", + "type": 6, + "flags": 1 + }, + { + "id": "2:8804727048679347739", + "name": "message", + "type": 9 + }, + { + "id": "3:2057168434422229462", + "name": "key", + "type": 9 + }, + { + "id": "4:5171479136116245782", + "name": "title", + "type": 9 + }, + { + "id": "5:1327192762666128707", + "name": "time", + "type": 10 + }, + { + "id": "6:6157106738757531849", + "name": "logLevelString", + "type": 9 + }, + { + "id": "7:4125526427669596463", + "name": "exceptionMessage", + "type": 9 + }, + { + "id": "8:9082424071939873438", + "name": "errorMessage", + "type": 9 + }, + { + "id": "9:5102783334174280861", + "name": "stackTraceString", + "type": 9 + }, + { + "id": "10:3011623524114326227", + "name": "penColor", + "type": 9 + } + ], + "relations": [] + } + ], + "lastEntityId": "1:2732766526390766766", + "lastIndexId": "0:0", + "lastRelationId": "0:0", + "lastSequenceId": "0:0", + "modelVersion": 5, + "modelVersionParserMinimum": 5, + "retiredEntityUids": [], + "retiredIndexUids": [], + "retiredPropertyUids": [], + "retiredRelationUids": [], + "version": 1 +} \ No newline at end of file diff --git a/packages/talker/lib/objectbox.g.dart b/packages/talker/lib/objectbox.g.dart new file mode 100644 index 000000000..d42409d73 --- /dev/null +++ b/packages/talker/lib/objectbox.g.dart @@ -0,0 +1,233 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// This code was generated by ObjectBox. To update it run the generator again: +// With a Flutter package, run `flutter pub run build_runner build`. +// With a Dart package, run `dart run build_runner build`. +// See also https://docs.objectbox.io/getting-started#generate-objectbox-code + +// ignore_for_file: camel_case_types +// coverage:ignore-file + +import 'dart:typed_data'; + +import 'package:flat_buffers/flat_buffers.dart' as fb; +import 'package:objectbox/internal.dart'; // generated code can access "internal" functionality +import 'package:objectbox/objectbox.dart'; +import 'package:objectbox_flutter_libs/objectbox_flutter_libs.dart'; + +import 'src/models/talker_data.dart'; + +export 'package:objectbox/objectbox.dart'; // so that callers only have to import this file + +final _entities = [ + ModelEntity( + id: const IdUid(1, 2732766526390766766), + name: 'TalkerData', + lastPropertyId: const IdUid(10, 3011623524114326227), + flags: 0, + properties: [ + ModelProperty( + id: const IdUid(1, 3498377610127543967), + name: 'id', + type: 6, + flags: 1), + ModelProperty( + id: const IdUid(2, 8804727048679347739), + name: 'message', + type: 9, + flags: 0), + ModelProperty( + id: const IdUid(3, 2057168434422229462), + name: 'key', + type: 9, + flags: 0), + ModelProperty( + id: const IdUid(4, 5171479136116245782), + name: 'title', + type: 9, + flags: 0), + ModelProperty( + id: const IdUid(5, 1327192762666128707), + name: 'time', + type: 10, + flags: 0), + ModelProperty( + id: const IdUid(6, 6157106738757531849), + name: 'logLevelString', + type: 9, + flags: 0), + ModelProperty( + id: const IdUid(7, 4125526427669596463), + name: 'exceptionMessage', + type: 9, + flags: 0), + ModelProperty( + id: const IdUid(8, 9082424071939873438), + name: 'errorMessage', + type: 9, + flags: 0), + ModelProperty( + id: const IdUid(9, 5102783334174280861), + name: 'stackTraceString', + type: 9, + flags: 0), + ModelProperty( + id: const IdUid(10, 3011623524114326227), + name: 'penColor', + type: 9, + flags: 0) + ], + relations: [], + backlinks: []) +]; + +/// Open an ObjectBox store with the model declared in this file. +Future openStore( + {String? directory, + int? maxDBSizeInKB, + int? fileMode, + int? maxReaders, + bool queriesCaseSensitiveDefault = true, + String? macosApplicationGroup}) async => + Store(getObjectBoxModel(), + directory: directory ?? (await defaultStoreDirectory()).path, + maxDBSizeInKB: maxDBSizeInKB, + fileMode: fileMode, + maxReaders: maxReaders, + queriesCaseSensitiveDefault: queriesCaseSensitiveDefault, + macosApplicationGroup: macosApplicationGroup); + +/// ObjectBox model definition, pass it to [Store] - Store(getObjectBoxModel()) +ModelDefinition getObjectBoxModel() { + final model = ModelInfo( + entities: _entities, + lastEntityId: const IdUid(1, 2732766526390766766), + lastIndexId: const IdUid(0, 0), + lastRelationId: const IdUid(0, 0), + lastSequenceId: const IdUid(0, 0), + retiredEntityUids: const [], + retiredIndexUids: const [], + retiredPropertyUids: const [], + retiredRelationUids: const [], + modelVersion: 5, + modelVersionParserMinimum: 5, + version: 1); + + final bindings = { + TalkerData: EntityDefinition( + model: _entities[0], + toOneRelations: (TalkerData object) => [], + toManyRelations: (TalkerData object) => {}, + getId: (TalkerData object) => object.id, + setId: (TalkerData object, int id) { + object.id = id; + }, + objectToFB: (TalkerData object, fb.Builder fbb) { + final messageOffset = + object.message == null ? null : fbb.writeString(object.message!); + final keyOffset = + object.key == null ? null : fbb.writeString(object.key!); + final titleOffset = + object.title == null ? null : fbb.writeString(object.title!); + final logLevelStringOffset = object.logLevelString == null + ? null + : fbb.writeString(object.logLevelString!); + final exceptionMessageOffset = object.exceptionMessage == null + ? null + : fbb.writeString(object.exceptionMessage!); + final errorMessageOffset = object.errorMessage == null + ? null + : fbb.writeString(object.errorMessage!); + final stackTraceStringOffset = object.stackTraceString == null + ? null + : fbb.writeString(object.stackTraceString!); + final penColorOffset = object.penColor == null + ? null + : fbb.writeString(object.penColor!); + fbb.startTable(11); + fbb.addInt64(0, object.id); + fbb.addOffset(1, messageOffset); + fbb.addOffset(2, keyOffset); + fbb.addOffset(3, titleOffset); + fbb.addInt64(4, object.time.millisecondsSinceEpoch); + fbb.addOffset(5, logLevelStringOffset); + fbb.addOffset(6, exceptionMessageOffset); + fbb.addOffset(7, errorMessageOffset); + fbb.addOffset(8, stackTraceStringOffset); + fbb.addOffset(9, penColorOffset); + fbb.finish(fbb.endTable()); + return object.id; + }, + objectFromFB: (Store store, ByteData fbData) { + final buffer = fb.BufferContext(fbData); + final rootOffset = buffer.derefObject(0); + + final object = TalkerData( + const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 6), + id: const fb.Int64Reader().vTableGet(buffer, rootOffset, 4, 0), + key: const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 8), + title: const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 10), + time: DateTime.fromMillisecondsSinceEpoch( + const fb.Int64Reader().vTableGet(buffer, rootOffset, 12, 0))) + ..logLevelString = const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 14) + ..exceptionMessage = const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 16) + ..errorMessage = const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 18) + ..stackTraceString = const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 20) + ..penColor = const fb.StringReader(asciiOptimization: true) + .vTableGetNullable(buffer, rootOffset, 22); + + return object; + }) + }; + + return ModelDefinition(model, bindings); +} + +/// [TalkerData] entity fields to define ObjectBox queries. +class TalkerData_ { + /// see [TalkerData.id] + static final id = + QueryIntegerProperty(_entities[0].properties[0]); + + /// see [TalkerData.message] + static final message = + QueryStringProperty(_entities[0].properties[1]); + + /// see [TalkerData.key] + static final key = + QueryStringProperty(_entities[0].properties[2]); + + /// see [TalkerData.title] + static final title = + QueryStringProperty(_entities[0].properties[3]); + + /// see [TalkerData.time] + static final time = + QueryIntegerProperty(_entities[0].properties[4]); + + /// see [TalkerData.logLevelString] + static final logLevelString = + QueryStringProperty(_entities[0].properties[5]); + + /// see [TalkerData.exceptionMessage] + static final exceptionMessage = + QueryStringProperty(_entities[0].properties[6]); + + /// see [TalkerData.errorMessage] + static final errorMessage = + QueryStringProperty(_entities[0].properties[7]); + + /// see [TalkerData.stackTraceString] + static final stackTraceString = + QueryStringProperty(_entities[0].properties[8]); + + /// see [TalkerData.penColor] + static final penColor = + QueryStringProperty(_entities[0].properties[9]); +} diff --git a/packages/talker/lib/src/database/db.dart b/packages/talker/lib/src/database/db.dart new file mode 100644 index 000000000..20a0235e3 --- /dev/null +++ b/packages/talker/lib/src/database/db.dart @@ -0,0 +1,63 @@ +import 'package:talker/objectbox.g.dart'; +import 'package:talker/talker.dart'; + +class TalkerDataStore { + late final Store store; + late final Box _talkerBox; + late final Stream> talkerDataStream; + + static final TalkerDataStore _instance = TalkerDataStore._internal(); + + TalkerDataStore._internal() { + create(); // Ensure this method can handle singleton logic + } + + /// Create an instance of ObjectBox to use throughout the app. + static Future create() async { + // Future openStore() {...} is defined in the generated objectbox.g.dart + final store = await openStore(); + return TalkerDataStore._create(store); + } + + factory TalkerDataStore() { + return _instance; + } + + TalkerDataStore._create(this.store) { + _talkerBox = store.box(); + // Create a query for all items, ordered by time descending + final query = _talkerBox.query() + ..order(TalkerData_.time, flags: Order.descending); + + // Create a stream from the query + talkerDataStream = + query.watch(triggerImmediately: true).map((query) => query.find()); + } + + // Store a single TalkerData + void storeTalkerData(TalkerData data) { + _talkerBox.put(data); + } + + // Delete all TalkerData + void deleteTalkerData() { + _talkerBox.removeAll(); + } + + // Example usage when getting data from ObjectBox + List getTalkerDataWithReconstructedFields() { + final results = _talkerBox.getAll(); + + // Reconstruct transient fields for each result + for (var talkerData in results) { + talkerData.reconstructTransientFields(); + } + + return results; + } + + // Clean up resources + void dispose() { + store.close(); + } +} diff --git a/packages/talker/lib/src/history.dart b/packages/talker/lib/src/history.dart index 20c567425..6bd2b2b2a 100644 --- a/packages/talker/lib/src/history.dart +++ b/packages/talker/lib/src/history.dart @@ -8,6 +8,13 @@ class DefaultTalkerHistory implements TalkerHistory { if (history != null) { _history.addAll(history); } + + if (talkerDataStore?.getTalkerDataWithReconstructedFields().length != + null) { + var result = + talkerDataStore?.getTalkerDataWithReconstructedFields() ?? []; + _history.addAll(result); + } } /// Bring [TalkerSettings] to manage some configuration. @@ -29,14 +36,20 @@ class DefaultTalkerHistory implements TalkerHistory { } @override - void write(TalkerData data) { + void write(TalkerData data) async { /// Check if you are authorized to write. + if (settings.useHistory && settings.enabled) { /// Check if you have reached the max number of history and delete them. if (settings.maxHistoryItems <= _history.length) { _history.removeAt(0); } _history.add(data); + + /// check if the permission to store the data in local database is enabled + if (settings.useLocalDatabase) { + talkerDataStore?.storeTalkerData(data); + } } } } diff --git a/packages/talker/lib/src/models/talker_data.dart b/packages/talker/lib/src/models/talker_data.dart index 6734f445b..f03777256 100644 --- a/packages/talker/lib/src/models/talker_data.dart +++ b/packages/talker/lib/src/models/talker_data.dart @@ -1,78 +1,138 @@ +import 'package:objectbox/objectbox.dart'; import 'package:talker/talker.dart'; /// Base [Talker] Data transfer object /// Objects of this type are passed through /// handlers observer and stream +@Entity() class TalkerData { + @Id() + int id; + String? message; + String? key; + String? title; + + @Property(type: PropertyType.date) + DateTime time; + + // Stored versions of previously transient fields + String? logLevelString; // Store enum as string + String? exceptionMessage; // Store exception message + String? errorMessage; // Store error message + String? stackTraceString; // Store stack trace as string + String? penColor; // Store pen color information + + // Runtime-only fields + @Transient() + LogLevel? _logLevel; + @Transient() + Object? _exception; + @Transient() + Error? _error; + @Transient() + StackTrace? _stackTrace; + @Transient() + AnsiPen? _pen; + + // Getters and setters for runtime fields + LogLevel? get logLevel => _logLevel; + set logLevel(LogLevel? value) { + _logLevel = value; + logLevelString = value?.toString(); + } + + Object? get exception => _exception; + set exception(Object? value) { + _exception = value; + exceptionMessage = value?.toString(); + } + + Error? get error => _error; + set error(Error? value) { + _error = value; + errorMessage = value?.toString(); + } + + StackTrace? get stackTrace => _stackTrace; + set stackTrace(StackTrace? value) { + _stackTrace = value; + stackTraceString = value?.toString(); + } + + AnsiPen? get pen => _pen; + set pen(AnsiPen? value) { + _pen = value; + penColor = value?.toString(); + } + TalkerData( this.message, { - this.logLevel, - this.exception, - this.error, - this.stackTrace, + this.id = 0, + this.key, this.title = 'log', DateTime? time, - this.pen, - this.key, - }) { - _time = time ?? DateTime.now(); + LogLevel? logLevel, + Object? exception, + Error? error, + StackTrace? stackTrace, + AnsiPen? pen, + }) : time = time ?? DateTime.now() { + this.logLevel = logLevel; + this.exception = exception; + this.error = error; + this.stackTrace = stackTrace; + this.pen = pen; } - late DateTime _time; - - /// {@template talker_data_message} - /// [String] [message] - message describes what happened - /// {@endtemplate} - final String? message; + String generateTextMessage( + {TimeFormat timeFormat = TimeFormat.timeAndSeconds}) { + return '${displayTitleWithTime(timeFormat: timeFormat)}$message$stackTraceString'; + } - final String? key; + // Method to reconstruct all transient fields from stored strings + void reconstructTransientFields() { + reconstructLogLevel(); + reconstructException(); + reconstructError(); + reconstructStackTrace(); + reconstructPen(); + } - /// {@template talker_data_loglevel} - /// [LogLevel] [logLevel] - to control logging output - /// {@endtemplate} - final LogLevel? logLevel; + // Individual reconstruction methods + void reconstructLogLevel() { + if (logLevelString != null) { + _logLevel = LogLevel.values.firstWhere( + (e) => e.toString() == logLevelString, + orElse: () => LogLevel.debug // Provide a default value + ); + } + } - /// {@template talker_data_exception} - /// [Exception?] [exception] - exception if it happened - /// {@endtemplate} - final Object? exception; + void reconstructException() { + if (exceptionMessage != null) { + _exception = Exception(exceptionMessage); + } + } - /// {@template talker_data_error} - /// [Error?] [error] - error if it happened - /// {@endtemplate} - final Error? error; + void reconstructError() { + if (errorMessage != null) { + _error = + ArgumentError(errorMessage!); // Assuming Error has such constructor + } + } - /// {@template talker_data_title} - /// Title of Talker log - /// {@endtemplate} - String? title; + void reconstructStackTrace() { + if (stackTraceString != null) { + _stackTrace = StackTrace.fromString(stackTraceString!); + } + } - /// {@template talker_data_stackTrace} - /// StackTrace?] [stackTrace] - stackTrace if [exception] or [error] happened - /// {@endtemplate} - final StackTrace? stackTrace; - - /// {@template talker_data_time} - /// Internal time when the log occurred - /// {@endtemplate} - DateTime get time => _time; - - /// [AnsiPen?] [pen] - sets your own log color for console - final AnsiPen? pen; - - /// {@template talker_data_generateTextMessage} - /// Internal method that generates - /// a complete message about the event - /// - /// See examples: - /// [TalkerLog] -> [TalkerLog.generateTextMessage] - /// [TalkerException] -> [TalkerException.generateTextMessage] - /// [TalkerError] -> [TalkerError.generateTextMessage] - /// - /// {@endtemplate} - String generateTextMessage( - {TimeFormat timeFormat = TimeFormat.timeAndSeconds}) { - return '${displayTitleWithTime(timeFormat: timeFormat)}$message$displayStackTrace'; + /// this is not working now facing some issue with penColor + void reconstructPen() { + if (penColor != null) { + // Reconstruct AnsiPen based on your pen color format + // _pen = AnsiPen()..xterm(int.parse(penColor!)); // Example reconstruction + } } } diff --git a/packages/talker/lib/src/settings.dart b/packages/talker/lib/src/settings.dart index a4f873f8d..cc8e82aca 100644 --- a/packages/talker/lib/src/settings.dart +++ b/packages/talker/lib/src/settings.dart @@ -69,12 +69,14 @@ class TalkerSettings { TalkerSettings({ this.enabled = true, bool useHistory = true, + bool useLocalDatabase = true, bool useConsoleLogs = true, int maxHistoryItems = 1000, this.titles = _defaultTitles, Map? colors, TimeFormat timeFormat = TimeFormat.timeAndSeconds, }) : _useHistory = useHistory, + _useLocalDatabase = useLocalDatabase, _useConsoleLogs = useConsoleLogs, _maxHistoryItems = maxHistoryItems, _timeFormat = timeFormat { @@ -92,6 +94,9 @@ class TalkerSettings { bool get useHistory => _useHistory && enabled; final bool _useHistory; + bool get useLocalDatabase => _useLocalDatabase && _useHistory && enabled; + final bool _useLocalDatabase; + /// By default talker print all Errors / Exceptions and logs in console. /// If [true] - printing in console [false] - not printing. bool get useConsoleLogs => _useConsoleLogs && enabled; @@ -173,6 +178,7 @@ class TalkerSettings { TalkerSettings copyWith({ bool? enabled, bool? useHistory, + bool? useLocalDatabase, bool? useConsoleLogs, int? maxHistoryItems, Map? titles, @@ -180,6 +186,7 @@ class TalkerSettings { }) { return TalkerSettings( useHistory: useHistory ?? _useHistory, + useLocalDatabase: useLocalDatabase ?? _useLocalDatabase, useConsoleLogs: useConsoleLogs ?? _useConsoleLogs, maxHistoryItems: maxHistoryItems ?? _maxHistoryItems, enabled: enabled ?? this.enabled, diff --git a/packages/talker/lib/src/talker.dart b/packages/talker/lib/src/talker.dart index 1c6477d08..6a591ddde 100644 --- a/packages/talker/lib/src/talker.dart +++ b/packages/talker/lib/src/talker.dart @@ -1,7 +1,11 @@ import 'dart:async'; +import 'package:talker/src/database/db.dart'; import 'package:talker/talker.dart'; +/// local database - objectbox +late TalkerDataStore? talkerDataStore; + /// Talker - advanced exception handling and logging /// for dart/flutter applications class Talker { @@ -44,6 +48,39 @@ class Talker { _init(filter, settings, logger, observer, errorHandler, history); } + Talker._internal({ + required this.settings, + required TalkerLogger logger, + required TalkerObserver observer, + required TalkerErrorHandler errorHandler, + required TalkerFilter filter, + required TalkerHistory history, + }) : _logger = logger, + _observer = observer, + _errorHandler = errorHandler, + _filter = filter, + _history = history; + + static Future initWithDB({ + TalkerLogger? logger, + TalkerObserver? observer, + TalkerSettings? settings, + TalkerFilter? filter, + TalkerErrorHandler? errorHandler, + TalkerHistory? history, + }) async { + talkerDataStore = await TalkerDataStore.create(); + return Talker._internal( + settings: settings ?? TalkerSettings(), + logger: logger ?? TalkerLogger(), + observer: observer ?? const _DefaultTalkerObserver(), + errorHandler: + errorHandler ?? TalkerErrorHandler(settings ?? TalkerSettings()), + filter: filter ?? _DefaultTalkerFilter(), + history: history ?? DefaultTalkerHistory(settings ?? TalkerSettings()), + ); + } + void _init( TalkerFilter? filter, TalkerSettings? settings, @@ -144,6 +181,9 @@ class Talker { Stream get stream => _talkerStreamController.stream.asBroadcastStream(); + List? get databaseList => + talkerDataStore?.getTalkerDataWithReconstructedFields(); + /// The history stores all information about all events like /// occurred errors [TalkerError]s, exceptions [TalkerException]s /// and logs [TalkerLog]s that have been sent @@ -341,6 +381,9 @@ class Talker { /// Clear log history void cleanHistory() => _history.clean(); + /// Clear local database + void cleanLocalDatabase() => talkerDataStore?.deleteTalkerData(); + /// Method run all [Talker] works /// /// The method will return everything back @@ -353,13 +396,13 @@ class Talker { /// this method stop these processes void disable() => settings.enabled = false; - void _handleLog( + Future _handleLog( dynamic message, Object? exception, StackTrace? stackTrace, LogLevel logLevel, { AnsiPen? pen, - }) { + }) async { final type = TalkerLogType.fromLogLevel(logLevel); final data = TalkerLog( key: type.key, diff --git a/packages/talker/pubspec.yaml b/packages/talker/pubspec.yaml index 9bb15a4a9..75307e385 100644 --- a/packages/talker/pubspec.yaml +++ b/packages/talker/pubspec.yaml @@ -16,8 +16,13 @@ environment: sdk: '>=2.17.0 <4.0.0' dependencies: + objectbox: ^1.0.0 + objectbox_flutter_libs: any talker_logger: ^4.4.1 dev_dependencies: lints: ^2.0.0 + objectbox_generator: any + build_runner: ^2.4.11 + test: ^1.22.1 diff --git a/packages/talker_dio_logger/example/pubspec.lock b/packages/talker_dio_logger/example/pubspec.lock index 05f5ebbdb..a7ba2da99 100644 --- a/packages/talker_dio_logger/example/pubspec.lock +++ b/packages/talker_dio_logger/example/pubspec.lock @@ -337,7 +337,7 @@ packages: dependency: transitive description: name: talker - sha256: "556ffa26387072702199a7bcf7c9a4672c46aaf28d99d122d72a2c5b6c9e1614" + sha256: "30bbc526bb2e7d465c630f087479616b6b84570728539fde536a3b652acad2f6" url: "https://pub.dev" source: hosted version: "4.4.1" @@ -359,7 +359,7 @@ packages: dependency: transitive description: name: talker_logger - sha256: a0d06d9d29792251145bf19be540bb3bd6c8fb15478b2ea9b26c051dbda39669 + sha256: "515d2e5803928b2bab42108f710c814743965f939be2b4261f9c3045ef8a3fba" url: "https://pub.dev" source: hosted version: "4.4.1" diff --git a/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux b/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux index 889d772ea..13c7e3cc6 120000 --- a/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux +++ b/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux @@ -1 +1 @@ -/Users/stanislavilin/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/ \ No newline at end of file +C:/Users/venka/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.1/ \ No newline at end of file diff --git a/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/share_plus b/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/share_plus index 1c5e5452f..45abbb26f 120000 --- a/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/share_plus +++ b/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/share_plus @@ -1 +1 @@ -/Users/stanislavilin/.pub-cache/hosted/pub.dev/share_plus-10.0.1/ \ No newline at end of file +C:/Users/venka/AppData/Local/Pub/Cache/hosted/pub.dev/share_plus-10.0.1/ \ No newline at end of file diff --git a/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux b/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux index 0c8d99f44..ff2ef7794 120000 --- a/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux +++ b/packages/talker_flutter/example/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux @@ -1 +1 @@ -/Users/stanislavilin/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.0/ \ No newline at end of file +C:/Users/venka/AppData/Local/Pub/Cache/hosted/pub.dev/url_launcher_linux-3.2.0/ \ No newline at end of file diff --git a/packages/talker_flutter/example/pubspec.lock b/packages/talker_flutter/example/pubspec.lock index c3ed401de..5c0b9ef4c 100644 --- a/packages/talker_flutter/example/pubspec.lock +++ b/packages/talker_flutter/example/pubspec.lock @@ -329,7 +329,7 @@ packages: dependency: transitive description: name: talker - sha256: "556ffa26387072702199a7bcf7c9a4672c46aaf28d99d122d72a2c5b6c9e1614" + sha256: "30bbc526bb2e7d465c630f087479616b6b84570728539fde536a3b652acad2f6" url: "https://pub.dev" source: hosted version: "4.4.1" @@ -344,7 +344,7 @@ packages: dependency: transitive description: name: talker_logger - sha256: a0d06d9d29792251145bf19be540bb3bd6c8fb15478b2ea9b26c051dbda39669 + sha256: "515d2e5803928b2bab42108f710c814743965f939be2b4261f9c3045ef8a3fba" url: "https://pub.dev" source: hosted version: "4.4.1" diff --git a/packages/talker_flutter/lib/src/extensions/talker_flutter.dart b/packages/talker_flutter/lib/src/extensions/talker_flutter.dart index 55542bd21..8d83bb80b 100644 --- a/packages/talker_flutter/lib/src/extensions/talker_flutter.dart +++ b/packages/talker_flutter/lib/src/extensions/talker_flutter.dart @@ -19,6 +19,23 @@ extension TalkerFlutter on Talker { filter: filter, ); + /// init with local database + static Future initWithDB({ + TalkerLogger? logger, + TalkerObserver? observer, + TalkerSettings? settings, + TalkerFilter? filter, + }) async { + return Talker.initWithDB( + logger: (logger ?? TalkerLogger()).copyWith( + output: _defaultFlutterOutput, + ), + settings: settings, + observer: observer, + filter: filter, + ); + } + static dynamic _defaultFlutterOutput(String message) { if (kIsWeb) { // ignore: avoid_print diff --git a/packages/talker_flutter/lib/src/ui/talker_settings/talker_settings_bottom_sheet.dart b/packages/talker_flutter/lib/src/ui/talker_settings/talker_settings_bottom_sheet.dart index a8d5c46c7..ed384c4a5 100644 --- a/packages/talker_flutter/lib/src/ui/talker_settings/talker_settings_bottom_sheet.dart +++ b/packages/talker_flutter/lib/src/ui/talker_settings/talker_settings_bottom_sheet.dart @@ -79,6 +79,34 @@ class _TalkerSettingsBottomSheetState extends State { useHistory: enabled, ), ); + if (enabled == false) { + widget.talker.value.configure( + settings: widget.talker.value.settings.copyWith( + useLocalDatabase: enabled, + ), + ); + } + widget.talker.notifyListeners(); + }, + ), + TalkerSettingsCard( + canEdit: widget.talker.value.settings.enabled, + talkerScreenTheme: widget.talkerScreenTheme, + title: 'Use Local Database Beta', + enabled: widget.talker.value.settings.useLocalDatabase, + onChanged: (enabled) { + widget.talker.value.configure( + settings: widget.talker.value.settings.copyWith( + useLocalDatabase: enabled, + ), + ); + if (enabled) { + widget.talker.value.configure( + settings: widget.talker.value.settings.copyWith( + useHistory: enabled, + ), + ); + } widget.talker.notifyListeners(); }, ), diff --git a/packages/talker_flutter/lib/src/ui/talker_view.dart b/packages/talker_flutter/lib/src/ui/talker_view.dart index 667cacc10..2363265d5 100644 --- a/packages/talker_flutter/lib/src/ui/talker_view.dart +++ b/packages/talker_flutter/lib/src/ui/talker_view.dart @@ -135,11 +135,14 @@ class _TalkerViewState extends State { showModalBottomSheet( context: context, backgroundColor: Colors.transparent, - isScrollControlled: false, + isScrollControlled: true, builder: (context) { - return TalkerSettingsBottomSheet( - talkerScreenTheme: theme, - talker: talker, + return Container( + height: MediaQuery.of(context).size.height * 0.7, + child: TalkerSettingsBottomSheet( + talkerScreenTheme: theme, + talker: talker, + ), ); }, ); @@ -199,6 +202,11 @@ class _TalkerViewState extends State { title: 'Clean history', icon: Icons.delete_outline, ), + TalkerActionItem( + onTap: _cleanLocalDatabase, + title: 'Clean local database', + icon: Icons.file_copy, + ), TalkerActionItem( onTap: _shareLogsInFile, title: 'Share logs file', @@ -222,6 +230,11 @@ class _TalkerViewState extends State { _controller.update(); } + void _cleanLocalDatabase() { + widget.talker.cleanLocalDatabase(); + _controller.update(); + } + void _toggleLogsExpanded() { _controller.toggleExpandedLogs(); }