From a54a7a4189c1df6dcdb474601f89f77b8da24958 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Thu, 16 Apr 2026 19:45:03 +0300 Subject: [PATCH] new change to use intaleq_map sdk 04-16-4 --- assets/style.json | 607 ++++-- assets/style_dark.json | 868 +++++--- ios/Podfile.lock | 17 - lib/constant/box_name.dart | 1 + lib/constant/country_polygons.dart | 52 +- lib/controller/functions/crud.dart | 2 + .../home/map_passenger_controller.dart | 220 ++- .../home/trip_monitor_controller.dart | 2 +- lib/print.dart | 2 +- lib/services/offline_map_service.dart | 15 + .../map_widget.dart/main_bottom_Menu_map.dart | 1628 ++++----------- .../navigation/navigation_controller.dart | 877 +++++---- .../home/navigation/navigation_view.dart | 1740 ++++++++++------- packages/calendar_builder/CHANGELOG.md | 18 + packages/calendar_builder/LICENSE | 21 + packages/calendar_builder/README.md | 328 ++++ .../calendar_builder/analysis_options.yaml | 28 + packages/calendar_builder/example/README.md | 16 + .../example/analysis_options.yaml | 29 + .../.gradle/6.7/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/6.7/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../example/android/.gradle/6.7/gc.properties | 0 .../android/.gradle/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/configuration-cache/gc.properties | 0 .../android/.gradle/vcs-1/gc.properties | 0 .../example/android/app/build.gradle | 68 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 34 + .../plugins/GeneratedPluginRegistrant.java | 19 + .../com/example/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 + .../example/android/build.gradle | 31 + .../example/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../calendar_builder/example/android/gradlew | 160 ++ .../example/android/gradlew.bat | 90 + .../example/android/local.properties | 5 + .../example/android/settings.gradle | 11 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../example/ios/Flutter/Debug.xcconfig | 1 + .../example/ios/Flutter/Generated.xcconfig | 14 + .../example/ios/Flutter/Release.xcconfig | 1 + .../Flutter/ephemeral/flutter_lldb_helper.py | 32 + .../ios/Flutter/ephemeral/flutter_lldbinit | 5 + .../ios/Flutter/flutter_export_environment.sh | 13 + .../ios/Runner.xcodeproj/project.pbxproj | 484 +++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 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/GeneratedPluginRegistrant.h | 19 + .../ios/Runner/GeneratedPluginRegistrant.m | 14 + .../example/ios/Runner/Info.plist | 47 + .../ios/Runner/Runner-Bridging-Header.h | 1 + .../example/lib/custom_month_builder.dart | 169 ++ .../example/lib/customized_month_builder.dart | 128 ++ .../calendar_builder/example/lib/main.dart | 88 + .../example/lib/month_builder.dart | 28 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../ephemeral/Flutter-Generated.xcconfig | 11 + .../ephemeral/flutter_export_environment.sh | 12 + .../macos/Runner.xcodeproj/project.pbxproj | 572 ++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 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 + .../example/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 8 + .../calendar_builder/example/pubspec.lock | 236 +++ .../calendar_builder/example/pubspec.yaml | 91 + .../example/test/widget_test.dart | 30 + .../calendar_builder/example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../calendar_builder/example/web/index.html | 104 + .../example/web/manifest.json | 35 + .../example/windows/CMakeLists.txt | 95 + .../example/windows/flutter/CMakeLists.txt | 103 + .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../example/windows/runner/CMakeLists.txt | 17 + .../example/windows/runner/Runner.rc | 121 ++ .../example/windows/runner/flutter_window.cpp | 61 + .../example/windows/runner/flutter_window.h | 33 + .../example/windows/runner/main.cpp | 43 + .../example/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 20 + .../example/windows/runner/utils.cpp | 64 + .../example/windows/runner/utils.h | 19 + .../example/windows/runner/win32_window.cpp | 245 +++ .../example/windows/runner/win32_window.h | 98 + .../lib/calendar_builder.dart | 6 + .../lib/src/controllers/cb_controller.dart | 14 + .../controllers/month_builder_controller.dart | 179 ++ .../src/controllers/month_ui_controller.dart | 46 + .../lib/src/models/cb_config.dart | 82 + .../lib/src/models/month_data_model.dart | 685 +++++++ .../lib/src/utils/date_utils_cb.dart | 293 +++ .../lib/src/utils/global.dart | 104 + .../lib/src/utils/widgets.dart | 115 ++ .../lib/src/views/month_builder.dart | 1063 ++++++++++ .../lib/src/views/year_drop_down.dart | 568 ++++++ packages/calendar_builder/pubspec.lock | 221 +++ packages/calendar_builder/pubspec.yaml | 55 + .../test/calendar_builder_test.dart | 5 + .../test/unit_test/date_utils_test.dart | 116 ++ packages/flutter_paypal/CHANGELOG.md | 8 + packages/flutter_paypal/LICENSE | 21 + packages/flutter_paypal/README.md | 31 + packages/flutter_paypal/analysis_options.yaml | 4 + .../plugins/GeneratedPluginRegistrant.java | 24 + .../flutter_paypal/android/local.properties | 2 + packages/flutter_paypal/example/README.md | 16 + .../example/analysis_options.yaml | 29 + .../.gradle/7.5/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/7.5/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.5/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../example/android/.gradle/7.5/gc.properties | 0 .../android/.gradle/vcs-1/gc.properties | 0 .../example/android/app/build.gradle | 72 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 + .../plugins/GeneratedPluginRegistrant.java | 24 + .../com/example/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 + .../example/android/build.gradle | 31 + .../example/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../example/android/local.properties | 2 + .../example/android/settings.gradle | 11 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Generated.xcconfig | 14 + .../example/ios/Flutter/Release.xcconfig | 2 + .../Flutter/ephemeral/flutter_lldb_helper.py | 32 + .../ios/Flutter/ephemeral/flutter_lldbinit | 5 + .../ios/Flutter/flutter_export_environment.sh | 13 + packages/flutter_paypal/example/ios/Podfile | 44 + .../ios/Runner.xcodeproj/project.pbxproj | 616 ++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../ios/Runner/GeneratedPluginRegistrant.h | 19 + .../ios/Runner/GeneratedPluginRegistrant.m | 21 + .../example/ios/Runner/Info.plist | 51 + .../ios/Runner/Runner-Bridging-Header.h | 1 + .../example/ios/RunnerTests/RunnerTests.swift | 12 + packages/flutter_paypal/example/lib/main.dart | 109 ++ .../example/linux/CMakeLists.txt | 139 ++ .../example/linux/flutter/CMakeLists.txt | 88 + .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + packages/flutter_paypal/example/linux/main.cc | 6 + .../example/linux/my_application.cc | 104 + .../example/linux/my_application.h | 18 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 12 + .../ephemeral/Flutter-Generated.xcconfig | 11 + .../ephemeral/flutter_export_environment.sh | 12 + packages/flutter_paypal/example/macos/Podfile | 43 + .../macos/Runner.xcodeproj/project.pbxproj | 695 +++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/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 + .../example/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + packages/flutter_paypal/example/pubspec.lock | 316 +++ packages/flutter_paypal/example/pubspec.yaml | 91 + .../example/test/widget_test.dart | 30 + .../flutter_paypal/example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../flutter_paypal/example/web/index.html | 59 + .../flutter_paypal/example/web/manifest.json | 35 + .../example/windows/CMakeLists.txt | 102 + .../example/windows/flutter/CMakeLists.txt | 104 + .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../example/windows/runner/CMakeLists.txt | 40 + .../example/windows/runner/Runner.rc | 121 ++ .../example/windows/runner/flutter_window.cpp | 66 + .../example/windows/runner/flutter_window.h | 33 + .../example/windows/runner/main.cpp | 43 + .../example/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 20 + .../example/windows/runner/utils.cpp | 65 + .../example/windows/runner/utils.h | 19 + .../example/windows/runner/win32_window.cpp | 288 +++ .../example/windows/runner/win32_window.h | 102 + .../ios/Flutter/Generated.xcconfig | 14 + .../Flutter/ephemeral/flutter_lldb_helper.py | 32 + .../ios/Flutter/ephemeral/flutter_lldbinit | 5 + .../ios/Flutter/flutter_export_environment.sh | 13 + .../ios/Runner/GeneratedPluginRegistrant.h | 19 + .../ios/Runner/GeneratedPluginRegistrant.m | 21 + .../flutter_paypal/lib/flutter_paypal.dart | 331 ++++ .../lib/src/PaypalServices.dart | 109 ++ .../lib/src/assets/icons/cloud_state.svg | 1 + .../lib/src/assets/icons/lock.svg | 18 + .../lib/src/assets/img/cloud_state.png | Bin 0 -> 21969 bytes .../lib/src/errors/network_error.dart | 50 + .../lib/src/screens/complete_payment.dart | 117 ++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + .../Flutter/GeneratedPluginRegistrant.swift | 12 + .../ephemeral/Flutter-Generated.xcconfig | 11 + .../ephemeral/flutter_export_environment.sh | 12 + packages/flutter_paypal/pubspec.lock | 309 +++ packages/flutter_paypal/pubspec.yaml | 61 + .../test/flutter_paypal_test.dart | 11 + .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + packages/get/CHANGELOG.md | 1433 ++++++++++++++ packages/get/LICENSE | 21 + packages/get/README-ar.md | 1307 +++++++++++++ packages/get/README-es.md | 578 ++++++ packages/get/README-fr.md | 1134 +++++++++++ packages/get/README-vi.md | 1176 +++++++++++ packages/get/README.id-ID.md | 1113 +++++++++++ packages/get/README.ja-JP.md | 1256 ++++++++++++ packages/get/README.ko-kr.md | 1266 ++++++++++++ packages/get/README.md | 1276 ++++++++++++ packages/get/README.pl.md | 547 ++++++ packages/get/README.pt-br.md | 1132 +++++++++++ packages/get/README.ru.md | 912 +++++++++ packages/get/README.ur-PK.md | 1054 ++++++++++ packages/get/README.zh-cn.md | 919 +++++++++ packages/get/_config.yml | 1 + packages/get/analysis_options.yaml | 90 + ...9384a97db4862b8ab8db.cache.dill.track.dill | Bin 0 -> 34533184 bytes .../build/unit_test_assets/AssetManifest.json | 1 + .../build/unit_test_assets/FontManifest.json | 1 + packages/get/build/unit_test_assets/NOTICES.Z | Bin 0 -> 67444 bytes .../ar_EG/dependency_management.md | 410 ++++ .../documentation/ar_EG/route_management.md | 569 ++++++ .../documentation/ar_EG/state_management.md | 789 ++++++++ .../en_US/dependency_management.md | 410 ++++ .../documentation/en_US/route_management.md | 569 ++++++ .../documentation/en_US/state_management.md | 789 ++++++++ .../es_ES/dependency_management.md | 266 +++ .../documentation/es_ES/route_management.md | 562 ++++++ .../documentation/es_ES/state_management.md | 601 ++++++ .../fr_FR/dependency_management.md | 383 ++++ .../documentation/fr_FR/route_management.md | 560 ++++++ .../documentation/fr_FR/state_management.md | 721 +++++++ .../id_ID/dependency_management.md | 395 ++++ .../documentation/id_ID/route_management.md | 564 ++++++ .../documentation/id_ID/state_management.md | 746 +++++++ .../ja_JP/dependency_management.md | 405 ++++ .../documentation/ja_JP/route_management.md | 567 ++++++ .../documentation/ja_JP/state_management.md | 787 ++++++++ .../kr_KO/dependency_management.md | 378 ++++ .../documentation/kr_KO/route_management.md | 564 ++++++ .../documentation/kr_KO/state_management.md | 717 +++++++ .../pt_BR/dependency_management.md | 382 ++++ .../documentation/pt_BR/route_management.md | 558 ++++++ .../documentation/pt_BR/state_management.md | 501 +++++ .../ru_RU/dependency_management.md | 379 ++++ .../documentation/ru_RU/route_management.md | 563 ++++++ .../documentation/ru_RU/state_management.md | 732 +++++++ .../vi_VI/dependency_management.md | 380 ++++ .../documentation/vi_VI/route_management.md | 569 ++++++ .../documentation/vi_VI/state_management.md | 784 ++++++++ .../zh_CN/dependency_management.md | 375 ++++ .../documentation/zh_CN/route_management.md | 556 ++++++ .../documentation/zh_CN/state_management.md | 714 +++++++ packages/get/example/README.md | 16 + .../.gradle/6.7/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/6.7/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../example/android/.gradle/6.7/gc.properties | 0 .../android/.gradle/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/configuration-cache/gc.properties | 0 .../android/.gradle/vcs-1/gc.properties | 0 packages/get/example/android/app/build.gradle | 59 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 41 + .../plugins/GeneratedPluginRegistrant.java | 19 + .../com/example/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 + packages/get/example/android/build.gradle | 29 + .../get/example/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + packages/get/example/android/gradlew | 160 ++ packages/get/example/android/gradlew.bat | 90 + packages/get/example/android/local.properties | 2 + packages/get/example/android/settings.gradle | 11 + packages/get/example/example.md | 581 ++++++ packages/get/example/lib/lang/en_us.dart | 12 + packages/get/example/lib/lang/pt_br.dart | 12 + .../example/lib/lang/translation_service.dart | 15 + packages/get/example/lib/main.dart | 129 ++ .../lib/pages/home/bindings/home_binding.dart | 15 + .../pages/home/data/home_api_provider.dart | 19 + .../lib/pages/home/data/home_repository.dart | 18 + .../domain/adapters/repository_adapter.dart | 6 + .../pages/home/domain/entity/cases_model.dart | 167 ++ .../controllers/home_controller.dart | 84 + .../home/presentation/views/country_view.dart | 56 + .../home/presentation/views/details_view.dart | 86 + .../home/presentation/views/home_view.dart | 118 ++ .../get/example/lib/routes/app_pages.dart | 32 + .../get/example/lib/routes/app_routes.dart | 7 + .../lib/shared/logger/logger_utils.dart | 6 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../ephemeral/Flutter-Generated.xcconfig | 11 + .../ephemeral/flutter_export_environment.sh | 12 + .../macos/Runner.xcodeproj/project.pbxproj | 572 ++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 89 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 339 ++++ .../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 + packages/get/example/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 8 + packages/get/example/pubspec.lock | 196 ++ packages/get/example/pubspec.yaml | 72 + packages/get/example/test/main_test.dart | 175 ++ packages/get/example/web/favicon.png | Bin 0 -> 917 bytes packages/get/example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes packages/get/example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes packages/get/example/web/index.html | 98 + packages/get/example/web/manifest.json | 23 + packages/get/example_nav2/README.md | 16 + .../.gradle/6.7/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/6.7/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../android/.gradle/6.7/gc.properties | 0 .../android/.gradle/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/configuration-cache/gc.properties | 0 .../android/.gradle/vcs-1/gc.properties | 0 .../get/example_nav2/android/app/build.gradle | 59 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 41 + .../plugins/GeneratedPluginRegistrant.java | 19 + .../com/get/example_nav2/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 + .../get/example_nav2/android/build.gradle | 29 + .../example_nav2/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../get/example_nav2/android/local.properties | 2 + .../get/example_nav2/android/settings.gradle | 11 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../example_nav2/ios/Flutter/Debug.xcconfig | 1 + .../ios/Flutter/Generated.xcconfig | 14 + .../example_nav2/ios/Flutter/Release.xcconfig | 1 + .../Flutter/ephemeral/flutter_lldb_helper.py | 32 + .../ios/Flutter/ephemeral/flutter_lldbinit | 5 + .../ios/Flutter/flutter_export_environment.sh | 13 + .../ios/Runner.xcodeproj/project.pbxproj | 471 +++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example_nav2/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 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/GeneratedPluginRegistrant.h | 19 + .../ios/Runner/GeneratedPluginRegistrant.m | 14 + .../get/example_nav2/ios/Runner/Info.plist | 45 + .../ios/Runner/Runner-Bridging-Header.h | 1 + .../lib/app/middleware/auth_middleware.dart | 33 + .../dashboard/bindings/dashboard_binding.dart | 12 + .../controllers/dashboard_controller.dart | 17 + .../dashboard/views/dashboard_view.dart | 26 + .../modules/home/bindings/home_binding.dart | 12 + .../home/controllers/home_controller.dart | 3 + .../lib/app/modules/home/views/home_view.dart | 65 + .../modules/login/bindings/login_binding.dart | 12 + .../login/controllers/login_controller.dart | 3 + .../app/modules/login/views/login_view.dart | 44 + .../bindings/product_details_binding.dart | 14 + .../product_details_controller.dart | 18 + .../views/product_details_view.dart | 25 + .../products/bindings/products_binding.dart | 12 + .../controllers/products_controller.dart | 28 + .../modules/products/views/products_view.dart | 49 + .../profile/bindings/profile_binding.dart | 12 + .../controllers/profile_controller.dart | 3 + .../modules/profile/views/profile_view.dart | 51 + .../modules/root/bindings/root_binding.dart | 12 + .../root/controllers/root_controller.dart | 20 + .../lib/app/modules/root/views/drawer.dart | 74 + .../lib/app/modules/root/views/root_view.dart | 31 + .../settings/bindings/settings_binding.dart | 12 + .../controllers/settings_controller.dart | 20 + .../modules/settings/views/settings_view.dart | 19 + .../lib/app/routes/app_pages.dart | 98 + .../lib/app/routes/app_routes.dart | 30 + packages/get/example_nav2/lib/main.dart | 27 + .../example_nav2/lib/models/demo_product.dart | 9 + .../lib/services/auth_service.dart | 17 + packages/get/example_nav2/pubspec.lock | 212 ++ packages/get/example_nav2/pubspec.yaml | 22 + packages/get/example_nav2/web/favicon.png | Bin 0 -> 917 bytes .../get/example_nav2/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../get/example_nav2/web/icons/Icon-512.png | Bin 0 -> 8252 bytes packages/get/example_nav2/web/index.html | 98 + packages/get/example_nav2/web/manifest.json | 23 + .../get/example_nav2/windows/CMakeLists.txt | 95 + .../windows/flutter/CMakeLists.txt | 103 + .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 23 + .../windows/runner/CMakeLists.txt | 18 + .../get/example_nav2/windows/runner/Runner.rc | 121 ++ .../windows/runner/flutter_window.cpp | 64 + .../windows/runner/flutter_window.h | 39 + .../get/example_nav2/windows/runner/main.cpp | 42 + .../example_nav2/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../example_nav2/windows/runner/run_loop.cpp | 66 + .../example_nav2/windows/runner/run_loop.h | 40 + .../windows/runner/runner.exe.manifest | 20 + .../get/example_nav2/windows/runner/utils.cpp | 64 + .../get/example_nav2/windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 245 +++ .../windows/runner/win32_window.h | 98 + packages/get/lib/get.dart | 14 + packages/get/lib/get_common/get_reset.dart | 11 + packages/get/lib/get_connect.dart | 1 + packages/get/lib/get_connect/connect.dart | 396 ++++ .../src/_http/_html/_file_decoder_html.dart | 17 + .../src/_http/_html/_http_request_html.dart | 117 ++ .../http/src/_http/_io/_file_decoder_io.dart | 20 + .../http/src/_http/_io/_http_request_io.dart | 99 + .../src/_http/_stub/_file_decoder_stub.dart | 5 + .../src/_http/_stub/_http_request_stub.dart | 20 + .../src/_http/interface/request_base.dart | 19 + .../src/_http/mock/http_request_mock.dart | 47 + .../http/src/_http/utils/body_decoder.dart | 34 + .../http/src/certificates/certificates.dart | 5 + .../http/src/exceptions/exceptions.dart | 35 + .../get/lib/get_connect/http/src/http.dart | 563 ++++++ .../http/src/interceptors/get_modifiers.dart | 56 + .../http/src/multipart/form_data.dart | 116 ++ .../http/src/multipart/multipart_file.dart | 30 + .../get_connect/http/src/request/request.dart | 131 ++ .../http/src/response/response.dart | 270 +++ .../http/src/status/http_status.dart | 92 + .../lib/get_connect/http/src/utils/utils.dart | 139 ++ .../get/lib/get_connect/sockets/sockets.dart | 9 + .../sockets/src/socket_notifier.dart | 101 + .../get_connect/sockets/src/sockets_html.dart | 116 ++ .../get_connect/sockets/src/sockets_io.dart | 138 ++ .../get_connect/sockets/src/sockets_stub.dart | 54 + packages/get/lib/get_core/get_core.dart | 9 + .../get/lib/get_core/src/get_interface.dart | 15 + packages/get/lib/get_core/src/get_main.dart | 12 + packages/get/lib/get_core/src/log.dart | 10 + .../lib/get_core/src/smart_management.dart | 22 + packages/get/lib/get_core/src/typedefs.dart | 1 + .../get/lib/get_instance/get_instance.dart | 4 + .../get_instance/src/bindings_interface.dart | 65 + .../get_instance/src/extension_instance.dart | 160 ++ .../lib/get_instance/src/get_instance.dart | 551 ++++++ .../get/lib/get_instance/src/lifecycle.dart | 104 + .../lib/get_navigation/get_navigation.dart | 20 + .../src/bottomsheet/bottomsheet.dart | 335 ++++ .../src/dialog/dialog_route.dart | 73 + .../src/extension_navigation.dart | 1372 +++++++++++++ .../src/nav2/get_information_parser.dart | 47 + .../src/nav2/get_nav_config.dart | 60 + .../src/nav2/get_router_delegate.dart | 486 +++++ .../src/nav2/router_outlet.dart | 168 ++ .../src/root/get_cupertino_app.dart | 321 +++ .../src/root/get_material_app.dart | 351 ++++ .../src/root/internacionalization.dart | 11 + .../get_navigation/src/root/parse_route.dart | 188 ++ .../src/root/root_controller.dart | 86 + .../lib/get_navigation/src/router_report.dart | 113 ++ .../src/routes/circular_reveal_clipper.dart | 46 + .../src/routes/custom_transition.dart | 13 + .../src/routes/default_route.dart | 127 ++ .../src/routes/default_transitions.dart | 209 ++ .../get_navigation/src/routes/get_route.dart | 184 ++ .../src/routes/get_transition_mixin.dart | 714 +++++++ .../src/routes/observers/route_observer.dart | 241 +++ .../src/routes/route_middleware.dart | 291 +++ .../src/routes/transitions_type.dart | 22 + .../get_navigation/src/snackbar/snackbar.dart | 660 +++++++ .../src/snackbar/snackbar_controller.dart | 372 ++++ packages/get/lib/get_rx/get_rx.dart | 5 + .../lib/get_rx/src/rx_stream/get_stream.dart | 209 ++ .../lib/get_rx/src/rx_stream/mini_stream.dart | 203 ++ .../lib/get_rx/src/rx_stream/rx_stream.dart | 8 + .../get_rx/src/rx_typedefs/rx_typedefs.dart | 3 + .../get_rx/src/rx_types/rx_core/rx_impl.dart | 394 ++++ .../src/rx_types/rx_core/rx_interface.dart | 41 + .../get_rx/src/rx_types/rx_core/rx_num.dart | 1354 +++++++++++++ .../src/rx_types/rx_core/rx_string.dart | 289 +++ .../src/rx_types/rx_iterables/rx_list.dart | 172 ++ .../src/rx_types/rx_iterables/rx_map.dart | 108 + .../src/rx_types/rx_iterables/rx_set.dart | 151 ++ .../get/lib/get_rx/src/rx_types/rx_types.dart | 17 + .../lib/get_rx/src/rx_workers/rx_workers.dart | 273 +++ .../src/rx_workers/utils/debouncer.dart | 27 + .../get_state_manager/get_state_manager.dart | 13 + .../src/rx_flutter/rx_disposable.dart | 42 + .../src/rx_flutter/rx_getx_widget.dart | 133 ++ .../src/rx_flutter/rx_notifier.dart | 197 ++ .../src/rx_flutter/rx_obx_widget.dart | 92 + .../rx_flutter/rx_ticket_provider_mixin.dart | 203 ++ .../src/simple/get_controllers.dart | 123 ++ .../src/simple/get_responsive.dart | 172 ++ .../src/simple/get_state.dart | 226 +++ .../src/simple/get_view.dart | 105 + .../src/simple/get_widget_cache.dart | 71 + .../src/simple/list_notifier.dart | 175 ++ .../src/simple/mixin_state.dart | 41 + .../src/simple/simple_builder.dart | 108 + packages/get/lib/get_utils/get_utils.dart | 4 + .../src/extensions/context_extensions.dart | 141 ++ .../src/extensions/double_extensions.dart | 8 + .../src/extensions/duration_extensions.dart | 20 + .../src/extensions/dynamic_extensions.dart | 23 + .../src/extensions/event_loop_extensions.dart | 23 + .../lib/get_utils/src/extensions/export.dart | 10 + .../src/extensions/internacionalization.dart | 145 ++ .../src/extensions/iterable_extensions.dart | 9 + .../src/extensions/num_extensions.dart | 68 + .../src/extensions/string_extensions.dart | 89 + .../src/extensions/widget_extensions.dart | 56 + .../get_utils/src/get_utils/get_utils.dart | 639 ++++++ .../lib/get_utils/src/platform/platform.dart | 23 + .../get_utils/src/platform/platform_io.dart | 21 + .../get_utils/src/platform/platform_web.dart | 35 + .../lib/get_utils/src/queue/get_queue.dart | 57 + packages/get/lib/instance_manager.dart | 6 + packages/get/lib/route_manager.dart | 6 + .../responsive/size_percent_extension.dart | 9 + packages/get/lib/state_manager.dart | 6 + packages/get/lib/utils.dart | 6 + packages/get/pubspec.lock | 205 ++ packages/get/pubspec.yaml | 54 + .../get/test/benchmarks/benckmark_test.dart | 190 ++ .../get/test/instance/get_instance_test.dart | 284 +++ packages/get/test/instance/util/matcher.dart | 120 ++ .../internationalization_test.dart | 35 + .../get/test/navigation/bottomsheet_test.dart | 71 + packages/get/test/navigation/dialog_test.dart | 54 + .../navigation/dispose_dependencies_test.dart | 77 + .../get/test/navigation/get_main_test.dart | 513 +++++ .../get/test/navigation/middleware_test.dart | 35 + .../get/test/navigation/parse_route_test.dart | 192 ++ .../get/test/navigation/root_widget_test.dart | 102 + packages/get/test/navigation/routes_test.dart | 120 ++ .../get/test/navigation/snackbar_test.dart | 247 +++ .../get/test/navigation/utils/wrapper.dart | 73 + packages/get/test/rx/rx_workers_test.dart | 210 ++ .../state_manager/get_mixin_state_test.dart | 99 + .../get/test/state_manager/get_obx_test.dart | 67 + .../test/state_manager/get_rxstate_test.dart | 97 + .../test/state_manager/get_state_test.dart | 107 + .../extensions/context_extensions_test.dart | 65 + .../extensions/double_extensions_test.dart | 9 + .../extensions/dynamic_extensions_test.dart | 38 + .../utils/extensions/num_extensions_test.dart | 45 + .../extensions/string_extensions_test.dart | 719 +++++++ .../extensions/widget_extensions_test.dart | 90 + packages/get/test/utils/get_utils_test.dart | 114 ++ packages/get/test/utils/platform_test.dart | 16 + .../get/test/utils/platform_web_test.dart | 16 + packages/get_storage/CHANGELOG.md | 56 + packages/get_storage/LICENSE | 21 + packages/get_storage/README.md | 150 ++ packages/get_storage/delete.png | Bin 0 -> 10239 bytes packages/get_storage/example/README.md | 16 + .../.gradle/6.1.1/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/6.1.1/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../android/.gradle/6.1.1/gc.properties | 0 .../android/.gradle/checksums/checksums.lock | Bin 0 -> 17 bytes .../android/.gradle/vcs-1/gc.properties | 0 .../example/android/app/build.gradle | 63 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 47 + .../plugins/GeneratedPluginRegistrant.java | 29 + .../com/example/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 + .../get_storage/example/android/build.gradle | 31 + .../example/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../example/android/local.properties | 2 + .../example/android/settings.gradle | 15 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Generated.xcconfig | 14 + .../example/ios/Flutter/Release.xcconfig | 2 + .../Flutter/ephemeral/flutter_lldb_helper.py | 32 + .../ios/Flutter/ephemeral/flutter_lldbinit | 5 + .../ios/Flutter/flutter_export_environment.sh | 13 + packages/get_storage/example/ios/Podfile | 41 + .../ios/Runner.xcodeproj/project.pbxproj | 572 ++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 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/GeneratedPluginRegistrant.h | 19 + .../ios/Runner/GeneratedPluginRegistrant.m | 14 + .../get_storage/example/ios/Runner/Info.plist | 45 + .../ios/Runner/Runner-Bridging-Header.h | 1 + packages/get_storage/example/lib/main.dart | 38 + .../get_storage/example/linux/CMakeLists.txt | 106 + .../example/linux/flutter/CMakeLists.txt | 90 + .../flutter/ephemeral/.plugin_symlinks/jni | 1 + .../.plugin_symlinks/path_provider_linux | 1 + .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 24 + packages/get_storage/example/linux/main.cc | 6 + .../example/linux/my_application.cc | 104 + .../example/linux/my_application.h | 18 + packages/get_storage/example/pubspec.lock | 420 ++++ packages/get_storage/example/pubspec.yaml | 74 + packages/get_storage/example/test/test.dart | 17 + .../get_storage/example/test/widget_test.dart | 12 + packages/get_storage/example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes packages/get_storage/example/web/index.html | 33 + .../get_storage/example/web/manifest.json | 23 + packages/get_storage/lib/get_storage.dart | 5 + .../get_storage/lib/src/read_write_value.dart | 32 + .../get_storage/lib/src/storage/html.dart | 100 + packages/get_storage/lib/src/storage/io.dart | 153 ++ .../get_storage/lib/src/storage_impl.dart | 182 ++ packages/get_storage/lib/src/value.dart | 28 + packages/get_storage/pubspec.lock | 405 ++++ packages/get_storage/pubspec.yaml | 53 + packages/get_storage/read.png | Bin 0 -> 10322 bytes .../get_storage/test/getstorage_test.dart | 155 ++ .../get_storage/test/utils/list_equality.dart | 71 + packages/get_storage/write.png | Bin 0 -> 10403 bytes pubspec.lock | 96 +- pubspec.yaml | 75 +- scratch/verify_geo.dart | 43 + 850 files changed, 83282 insertions(+), 3075 deletions(-) create mode 100644 packages/calendar_builder/CHANGELOG.md create mode 100644 packages/calendar_builder/LICENSE create mode 100644 packages/calendar_builder/README.md create mode 100644 packages/calendar_builder/analysis_options.yaml create mode 100644 packages/calendar_builder/example/README.md create mode 100644 packages/calendar_builder/example/analysis_options.yaml create mode 100644 packages/calendar_builder/example/android/.gradle/6.7/fileChanges/last-build.bin create mode 100644 packages/calendar_builder/example/android/.gradle/6.7/fileHashes/fileHashes.lock create mode 100644 packages/calendar_builder/example/android/.gradle/6.7/gc.properties create mode 100644 packages/calendar_builder/example/android/.gradle/checksums/checksums.lock create mode 100644 packages/calendar_builder/example/android/.gradle/configuration-cache/gc.properties create mode 100644 packages/calendar_builder/example/android/.gradle/vcs-1/gc.properties create mode 100644 packages/calendar_builder/example/android/app/build.gradle create mode 100644 packages/calendar_builder/example/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/calendar_builder/example/android/app/src/main/AndroidManifest.xml create mode 100644 packages/calendar_builder/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 packages/calendar_builder/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt create mode 100644 packages/calendar_builder/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 packages/calendar_builder/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/calendar_builder/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/calendar_builder/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/calendar_builder/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/calendar_builder/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/calendar_builder/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/calendar_builder/example/android/app/src/main/res/values-night/styles.xml create mode 100644 packages/calendar_builder/example/android/app/src/main/res/values/styles.xml create mode 100644 packages/calendar_builder/example/android/app/src/profile/AndroidManifest.xml create mode 100644 packages/calendar_builder/example/android/build.gradle create mode 100644 packages/calendar_builder/example/android/gradle.properties create mode 100644 packages/calendar_builder/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 packages/calendar_builder/example/android/gradlew create mode 100644 packages/calendar_builder/example/android/gradlew.bat create mode 100644 packages/calendar_builder/example/android/local.properties create mode 100644 packages/calendar_builder/example/android/settings.gradle create mode 100644 packages/calendar_builder/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/calendar_builder/example/ios/Flutter/Debug.xcconfig create mode 100644 packages/calendar_builder/example/ios/Flutter/Generated.xcconfig create mode 100644 packages/calendar_builder/example/ios/Flutter/Release.xcconfig create mode 100644 packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldb_helper.py create mode 100644 packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldbinit create mode 100755 packages/calendar_builder/example/ios/Flutter/flutter_export_environment.sh create mode 100644 packages/calendar_builder/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/calendar_builder/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/calendar_builder/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/calendar_builder/example/ios/Runner/AppDelegate.swift create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 packages/calendar_builder/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/calendar_builder/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.h create mode 100644 packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.m create mode 100644 packages/calendar_builder/example/ios/Runner/Info.plist create mode 100644 packages/calendar_builder/example/ios/Runner/Runner-Bridging-Header.h create mode 100644 packages/calendar_builder/example/lib/custom_month_builder.dart create mode 100644 packages/calendar_builder/example/lib/customized_month_builder.dart create mode 100644 packages/calendar_builder/example/lib/main.dart create mode 100644 packages/calendar_builder/example/lib/month_builder.dart create mode 100644 packages/calendar_builder/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 packages/calendar_builder/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 packages/calendar_builder/example/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 packages/calendar_builder/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig create mode 100755 packages/calendar_builder/example/macos/Flutter/ephemeral/flutter_export_environment.sh create mode 100644 packages/calendar_builder/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 packages/calendar_builder/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/calendar_builder/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/calendar_builder/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/calendar_builder/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/calendar_builder/example/macos/Runner/AppDelegate.swift create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 packages/calendar_builder/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 packages/calendar_builder/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 packages/calendar_builder/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 packages/calendar_builder/example/macos/Runner/Configs/Release.xcconfig create mode 100644 packages/calendar_builder/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 packages/calendar_builder/example/macos/Runner/DebugProfile.entitlements create mode 100644 packages/calendar_builder/example/macos/Runner/Info.plist create mode 100644 packages/calendar_builder/example/macos/Runner/MainFlutterWindow.swift create mode 100644 packages/calendar_builder/example/macos/Runner/Release.entitlements create mode 100644 packages/calendar_builder/example/pubspec.lock create mode 100644 packages/calendar_builder/example/pubspec.yaml create mode 100644 packages/calendar_builder/example/test/widget_test.dart create mode 100644 packages/calendar_builder/example/web/favicon.png create mode 100644 packages/calendar_builder/example/web/icons/Icon-192.png create mode 100644 packages/calendar_builder/example/web/icons/Icon-512.png create mode 100644 packages/calendar_builder/example/web/icons/Icon-maskable-192.png create mode 100644 packages/calendar_builder/example/web/icons/Icon-maskable-512.png create mode 100644 packages/calendar_builder/example/web/index.html create mode 100644 packages/calendar_builder/example/web/manifest.json create mode 100644 packages/calendar_builder/example/windows/CMakeLists.txt create mode 100644 packages/calendar_builder/example/windows/flutter/CMakeLists.txt create mode 100644 packages/calendar_builder/example/windows/flutter/generated_plugin_registrant.cc create mode 100644 packages/calendar_builder/example/windows/flutter/generated_plugin_registrant.h create mode 100644 packages/calendar_builder/example/windows/flutter/generated_plugins.cmake create mode 100644 packages/calendar_builder/example/windows/runner/CMakeLists.txt create mode 100644 packages/calendar_builder/example/windows/runner/Runner.rc create mode 100644 packages/calendar_builder/example/windows/runner/flutter_window.cpp create mode 100644 packages/calendar_builder/example/windows/runner/flutter_window.h create mode 100644 packages/calendar_builder/example/windows/runner/main.cpp create mode 100644 packages/calendar_builder/example/windows/runner/resource.h create mode 100644 packages/calendar_builder/example/windows/runner/resources/app_icon.ico create mode 100644 packages/calendar_builder/example/windows/runner/runner.exe.manifest create mode 100644 packages/calendar_builder/example/windows/runner/utils.cpp create mode 100644 packages/calendar_builder/example/windows/runner/utils.h create mode 100644 packages/calendar_builder/example/windows/runner/win32_window.cpp create mode 100644 packages/calendar_builder/example/windows/runner/win32_window.h create mode 100644 packages/calendar_builder/lib/calendar_builder.dart create mode 100644 packages/calendar_builder/lib/src/controllers/cb_controller.dart create mode 100644 packages/calendar_builder/lib/src/controllers/month_builder_controller.dart create mode 100644 packages/calendar_builder/lib/src/controllers/month_ui_controller.dart create mode 100644 packages/calendar_builder/lib/src/models/cb_config.dart create mode 100644 packages/calendar_builder/lib/src/models/month_data_model.dart create mode 100644 packages/calendar_builder/lib/src/utils/date_utils_cb.dart create mode 100644 packages/calendar_builder/lib/src/utils/global.dart create mode 100644 packages/calendar_builder/lib/src/utils/widgets.dart create mode 100644 packages/calendar_builder/lib/src/views/month_builder.dart create mode 100644 packages/calendar_builder/lib/src/views/year_drop_down.dart create mode 100644 packages/calendar_builder/pubspec.lock create mode 100644 packages/calendar_builder/pubspec.yaml create mode 100644 packages/calendar_builder/test/calendar_builder_test.dart create mode 100644 packages/calendar_builder/test/unit_test/date_utils_test.dart create mode 100644 packages/flutter_paypal/CHANGELOG.md create mode 100644 packages/flutter_paypal/LICENSE create mode 100644 packages/flutter_paypal/README.md create mode 100644 packages/flutter_paypal/analysis_options.yaml create mode 100644 packages/flutter_paypal/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 packages/flutter_paypal/android/local.properties create mode 100644 packages/flutter_paypal/example/README.md create mode 100644 packages/flutter_paypal/example/analysis_options.yaml create mode 100644 packages/flutter_paypal/example/android/.gradle/7.5/checksums/checksums.lock create mode 100644 packages/flutter_paypal/example/android/.gradle/7.5/fileChanges/last-build.bin create mode 100644 packages/flutter_paypal/example/android/.gradle/7.5/fileHashes/fileHashes.lock create mode 100644 packages/flutter_paypal/example/android/.gradle/7.5/gc.properties create mode 100644 packages/flutter_paypal/example/android/.gradle/vcs-1/gc.properties create mode 100644 packages/flutter_paypal/example/android/app/build.gradle create mode 100644 packages/flutter_paypal/example/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/flutter_paypal/example/android/app/src/main/AndroidManifest.xml create mode 100644 packages/flutter_paypal/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 packages/flutter_paypal/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/values-night/styles.xml create mode 100644 packages/flutter_paypal/example/android/app/src/main/res/values/styles.xml create mode 100644 packages/flutter_paypal/example/android/app/src/profile/AndroidManifest.xml create mode 100644 packages/flutter_paypal/example/android/build.gradle create mode 100644 packages/flutter_paypal/example/android/gradle.properties create mode 100644 packages/flutter_paypal/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 packages/flutter_paypal/example/android/local.properties create mode 100644 packages/flutter_paypal/example/android/settings.gradle create mode 100644 packages/flutter_paypal/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/flutter_paypal/example/ios/Flutter/Debug.xcconfig create mode 100644 packages/flutter_paypal/example/ios/Flutter/Generated.xcconfig create mode 100644 packages/flutter_paypal/example/ios/Flutter/Release.xcconfig create mode 100644 packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldb_helper.py create mode 100644 packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldbinit create mode 100755 packages/flutter_paypal/example/ios/Flutter/flutter_export_environment.sh create mode 100644 packages/flutter_paypal/example/ios/Podfile create mode 100644 packages/flutter_paypal/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/flutter_paypal/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/flutter_paypal/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/flutter_paypal/example/ios/Runner/AppDelegate.swift create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 packages/flutter_paypal/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/flutter_paypal/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.h create mode 100644 packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.m create mode 100644 packages/flutter_paypal/example/ios/Runner/Info.plist create mode 100644 packages/flutter_paypal/example/ios/Runner/Runner-Bridging-Header.h create mode 100644 packages/flutter_paypal/example/ios/RunnerTests/RunnerTests.swift create mode 100644 packages/flutter_paypal/example/lib/main.dart create mode 100644 packages/flutter_paypal/example/linux/CMakeLists.txt create mode 100644 packages/flutter_paypal/example/linux/flutter/CMakeLists.txt create mode 100644 packages/flutter_paypal/example/linux/flutter/generated_plugin_registrant.cc create mode 100644 packages/flutter_paypal/example/linux/flutter/generated_plugin_registrant.h create mode 100644 packages/flutter_paypal/example/linux/flutter/generated_plugins.cmake create mode 100644 packages/flutter_paypal/example/linux/main.cc create mode 100644 packages/flutter_paypal/example/linux/my_application.cc create mode 100644 packages/flutter_paypal/example/linux/my_application.h create mode 100644 packages/flutter_paypal/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 packages/flutter_paypal/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 packages/flutter_paypal/example/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 packages/flutter_paypal/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig create mode 100755 packages/flutter_paypal/example/macos/Flutter/ephemeral/flutter_export_environment.sh create mode 100644 packages/flutter_paypal/example/macos/Podfile create mode 100644 packages/flutter_paypal/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 packages/flutter_paypal/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/flutter_paypal/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/flutter_paypal/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/flutter_paypal/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/flutter_paypal/example/macos/Runner/AppDelegate.swift create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 packages/flutter_paypal/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 packages/flutter_paypal/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 packages/flutter_paypal/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 packages/flutter_paypal/example/macos/Runner/Configs/Release.xcconfig create mode 100644 packages/flutter_paypal/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 packages/flutter_paypal/example/macos/Runner/DebugProfile.entitlements create mode 100644 packages/flutter_paypal/example/macos/Runner/Info.plist create mode 100644 packages/flutter_paypal/example/macos/Runner/MainFlutterWindow.swift create mode 100644 packages/flutter_paypal/example/macos/Runner/Release.entitlements create mode 100644 packages/flutter_paypal/example/macos/RunnerTests/RunnerTests.swift create mode 100644 packages/flutter_paypal/example/pubspec.lock create mode 100644 packages/flutter_paypal/example/pubspec.yaml create mode 100644 packages/flutter_paypal/example/test/widget_test.dart create mode 100644 packages/flutter_paypal/example/web/favicon.png create mode 100644 packages/flutter_paypal/example/web/icons/Icon-192.png create mode 100644 packages/flutter_paypal/example/web/icons/Icon-512.png create mode 100644 packages/flutter_paypal/example/web/icons/Icon-maskable-192.png create mode 100644 packages/flutter_paypal/example/web/icons/Icon-maskable-512.png create mode 100644 packages/flutter_paypal/example/web/index.html create mode 100644 packages/flutter_paypal/example/web/manifest.json create mode 100644 packages/flutter_paypal/example/windows/CMakeLists.txt create mode 100644 packages/flutter_paypal/example/windows/flutter/CMakeLists.txt create mode 100644 packages/flutter_paypal/example/windows/flutter/generated_plugin_registrant.cc create mode 100644 packages/flutter_paypal/example/windows/flutter/generated_plugin_registrant.h create mode 100644 packages/flutter_paypal/example/windows/flutter/generated_plugins.cmake create mode 100644 packages/flutter_paypal/example/windows/runner/CMakeLists.txt create mode 100644 packages/flutter_paypal/example/windows/runner/Runner.rc create mode 100644 packages/flutter_paypal/example/windows/runner/flutter_window.cpp create mode 100644 packages/flutter_paypal/example/windows/runner/flutter_window.h create mode 100644 packages/flutter_paypal/example/windows/runner/main.cpp create mode 100644 packages/flutter_paypal/example/windows/runner/resource.h create mode 100644 packages/flutter_paypal/example/windows/runner/resources/app_icon.ico create mode 100644 packages/flutter_paypal/example/windows/runner/runner.exe.manifest create mode 100644 packages/flutter_paypal/example/windows/runner/utils.cpp create mode 100644 packages/flutter_paypal/example/windows/runner/utils.h create mode 100644 packages/flutter_paypal/example/windows/runner/win32_window.cpp create mode 100644 packages/flutter_paypal/example/windows/runner/win32_window.h create mode 100644 packages/flutter_paypal/ios/Flutter/Generated.xcconfig create mode 100644 packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldb_helper.py create mode 100644 packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldbinit create mode 100755 packages/flutter_paypal/ios/Flutter/flutter_export_environment.sh create mode 100644 packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.h create mode 100644 packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.m create mode 100644 packages/flutter_paypal/lib/flutter_paypal.dart create mode 100644 packages/flutter_paypal/lib/src/PaypalServices.dart create mode 100644 packages/flutter_paypal/lib/src/assets/icons/cloud_state.svg create mode 100644 packages/flutter_paypal/lib/src/assets/icons/lock.svg create mode 100644 packages/flutter_paypal/lib/src/assets/img/cloud_state.png create mode 100644 packages/flutter_paypal/lib/src/errors/network_error.dart create mode 100644 packages/flutter_paypal/lib/src/screens/complete_payment.dart create mode 100644 packages/flutter_paypal/linux/flutter/generated_plugin_registrant.cc create mode 100644 packages/flutter_paypal/linux/flutter/generated_plugin_registrant.h create mode 100644 packages/flutter_paypal/linux/flutter/generated_plugins.cmake create mode 100644 packages/flutter_paypal/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 packages/flutter_paypal/macos/Flutter/ephemeral/Flutter-Generated.xcconfig create mode 100755 packages/flutter_paypal/macos/Flutter/ephemeral/flutter_export_environment.sh create mode 100644 packages/flutter_paypal/pubspec.lock create mode 100644 packages/flutter_paypal/pubspec.yaml create mode 100644 packages/flutter_paypal/test/flutter_paypal_test.dart create mode 100644 packages/flutter_paypal/windows/flutter/generated_plugin_registrant.cc create mode 100644 packages/flutter_paypal/windows/flutter/generated_plugin_registrant.h create mode 100644 packages/flutter_paypal/windows/flutter/generated_plugins.cmake create mode 100644 packages/get/CHANGELOG.md create mode 100644 packages/get/LICENSE create mode 100644 packages/get/README-ar.md create mode 100644 packages/get/README-es.md create mode 100644 packages/get/README-fr.md create mode 100644 packages/get/README-vi.md create mode 100644 packages/get/README.id-ID.md create mode 100644 packages/get/README.ja-JP.md create mode 100644 packages/get/README.ko-kr.md create mode 100644 packages/get/README.md create mode 100644 packages/get/README.pl.md create mode 100644 packages/get/README.pt-br.md create mode 100644 packages/get/README.ru.md create mode 100644 packages/get/README.ur-PK.md create mode 100644 packages/get/README.zh-cn.md create mode 100644 packages/get/_config.yml create mode 100644 packages/get/analysis_options.yaml create mode 100644 packages/get/build/test_cache/build/c075001b96339384a97db4862b8ab8db.cache.dill.track.dill create mode 100644 packages/get/build/unit_test_assets/AssetManifest.json create mode 100644 packages/get/build/unit_test_assets/FontManifest.json create mode 100644 packages/get/build/unit_test_assets/NOTICES.Z create mode 100644 packages/get/documentation/ar_EG/dependency_management.md create mode 100644 packages/get/documentation/ar_EG/route_management.md create mode 100644 packages/get/documentation/ar_EG/state_management.md create mode 100644 packages/get/documentation/en_US/dependency_management.md create mode 100644 packages/get/documentation/en_US/route_management.md create mode 100644 packages/get/documentation/en_US/state_management.md create mode 100644 packages/get/documentation/es_ES/dependency_management.md create mode 100644 packages/get/documentation/es_ES/route_management.md create mode 100644 packages/get/documentation/es_ES/state_management.md create mode 100644 packages/get/documentation/fr_FR/dependency_management.md create mode 100644 packages/get/documentation/fr_FR/route_management.md create mode 100644 packages/get/documentation/fr_FR/state_management.md create mode 100644 packages/get/documentation/id_ID/dependency_management.md create mode 100644 packages/get/documentation/id_ID/route_management.md create mode 100644 packages/get/documentation/id_ID/state_management.md create mode 100644 packages/get/documentation/ja_JP/dependency_management.md create mode 100644 packages/get/documentation/ja_JP/route_management.md create mode 100644 packages/get/documentation/ja_JP/state_management.md create mode 100644 packages/get/documentation/kr_KO/dependency_management.md create mode 100644 packages/get/documentation/kr_KO/route_management.md create mode 100644 packages/get/documentation/kr_KO/state_management.md create mode 100644 packages/get/documentation/pt_BR/dependency_management.md create mode 100644 packages/get/documentation/pt_BR/route_management.md create mode 100644 packages/get/documentation/pt_BR/state_management.md create mode 100644 packages/get/documentation/ru_RU/dependency_management.md create mode 100644 packages/get/documentation/ru_RU/route_management.md create mode 100644 packages/get/documentation/ru_RU/state_management.md create mode 100644 packages/get/documentation/vi_VI/dependency_management.md create mode 100644 packages/get/documentation/vi_VI/route_management.md create mode 100644 packages/get/documentation/vi_VI/state_management.md create mode 100644 packages/get/documentation/zh_CN/dependency_management.md create mode 100644 packages/get/documentation/zh_CN/route_management.md create mode 100644 packages/get/documentation/zh_CN/state_management.md create mode 100644 packages/get/example/README.md create mode 100644 packages/get/example/android/.gradle/6.7/fileChanges/last-build.bin create mode 100644 packages/get/example/android/.gradle/6.7/fileHashes/fileHashes.lock create mode 100644 packages/get/example/android/.gradle/6.7/gc.properties create mode 100644 packages/get/example/android/.gradle/checksums/checksums.lock create mode 100644 packages/get/example/android/.gradle/configuration-cache/gc.properties create mode 100644 packages/get/example/android/.gradle/vcs-1/gc.properties create mode 100644 packages/get/example/android/app/build.gradle create mode 100644 packages/get/example/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/get/example/android/app/src/main/AndroidManifest.xml create mode 100644 packages/get/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 packages/get/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt create mode 100644 packages/get/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 packages/get/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/get/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/get/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/get/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/get/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/get/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/get/example/android/app/src/main/res/values-night/styles.xml create mode 100644 packages/get/example/android/app/src/main/res/values/styles.xml create mode 100644 packages/get/example/android/app/src/profile/AndroidManifest.xml create mode 100644 packages/get/example/android/build.gradle create mode 100644 packages/get/example/android/gradle.properties create mode 100644 packages/get/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 packages/get/example/android/gradlew create mode 100644 packages/get/example/android/gradlew.bat create mode 100644 packages/get/example/android/local.properties create mode 100644 packages/get/example/android/settings.gradle create mode 100644 packages/get/example/example.md create mode 100644 packages/get/example/lib/lang/en_us.dart create mode 100644 packages/get/example/lib/lang/pt_br.dart create mode 100644 packages/get/example/lib/lang/translation_service.dart create mode 100644 packages/get/example/lib/main.dart create mode 100644 packages/get/example/lib/pages/home/bindings/home_binding.dart create mode 100644 packages/get/example/lib/pages/home/data/home_api_provider.dart create mode 100644 packages/get/example/lib/pages/home/data/home_repository.dart create mode 100644 packages/get/example/lib/pages/home/domain/adapters/repository_adapter.dart create mode 100644 packages/get/example/lib/pages/home/domain/entity/cases_model.dart create mode 100644 packages/get/example/lib/pages/home/presentation/controllers/home_controller.dart create mode 100644 packages/get/example/lib/pages/home/presentation/views/country_view.dart create mode 100644 packages/get/example/lib/pages/home/presentation/views/details_view.dart create mode 100644 packages/get/example/lib/pages/home/presentation/views/home_view.dart create mode 100644 packages/get/example/lib/routes/app_pages.dart create mode 100644 packages/get/example/lib/routes/app_routes.dart create mode 100644 packages/get/example/lib/shared/logger/logger_utils.dart create mode 100644 packages/get/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 packages/get/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 packages/get/example/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 packages/get/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig create mode 100755 packages/get/example/macos/Flutter/ephemeral/flutter_export_environment.sh create mode 100644 packages/get/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 packages/get/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/get/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/get/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/get/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/get/example/macos/Runner/AppDelegate.swift create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 packages/get/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 packages/get/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 packages/get/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 packages/get/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 packages/get/example/macos/Runner/Configs/Release.xcconfig create mode 100644 packages/get/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 packages/get/example/macos/Runner/DebugProfile.entitlements create mode 100644 packages/get/example/macos/Runner/Info.plist create mode 100644 packages/get/example/macos/Runner/MainFlutterWindow.swift create mode 100644 packages/get/example/macos/Runner/Release.entitlements create mode 100644 packages/get/example/pubspec.lock create mode 100644 packages/get/example/pubspec.yaml create mode 100644 packages/get/example/test/main_test.dart create mode 100644 packages/get/example/web/favicon.png create mode 100644 packages/get/example/web/icons/Icon-192.png create mode 100644 packages/get/example/web/icons/Icon-512.png create mode 100644 packages/get/example/web/index.html create mode 100644 packages/get/example/web/manifest.json create mode 100644 packages/get/example_nav2/README.md create mode 100644 packages/get/example_nav2/android/.gradle/6.7/fileChanges/last-build.bin create mode 100644 packages/get/example_nav2/android/.gradle/6.7/fileHashes/fileHashes.lock create mode 100644 packages/get/example_nav2/android/.gradle/6.7/gc.properties create mode 100644 packages/get/example_nav2/android/.gradle/checksums/checksums.lock create mode 100644 packages/get/example_nav2/android/.gradle/configuration-cache/gc.properties create mode 100644 packages/get/example_nav2/android/.gradle/vcs-1/gc.properties create mode 100644 packages/get/example_nav2/android/app/build.gradle create mode 100644 packages/get/example_nav2/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/get/example_nav2/android/app/src/main/AndroidManifest.xml create mode 100644 packages/get/example_nav2/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 packages/get/example_nav2/android/app/src/main/kotlin/com/get/example_nav2/MainActivity.kt create mode 100644 packages/get/example_nav2/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 packages/get/example_nav2/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/get/example_nav2/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/get/example_nav2/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/get/example_nav2/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/get/example_nav2/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/get/example_nav2/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/get/example_nav2/android/app/src/main/res/values-night/styles.xml create mode 100644 packages/get/example_nav2/android/app/src/main/res/values/styles.xml create mode 100644 packages/get/example_nav2/android/app/src/profile/AndroidManifest.xml create mode 100644 packages/get/example_nav2/android/build.gradle create mode 100644 packages/get/example_nav2/android/gradle.properties create mode 100644 packages/get/example_nav2/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 packages/get/example_nav2/android/local.properties create mode 100644 packages/get/example_nav2/android/settings.gradle create mode 100644 packages/get/example_nav2/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/get/example_nav2/ios/Flutter/Debug.xcconfig create mode 100644 packages/get/example_nav2/ios/Flutter/Generated.xcconfig create mode 100644 packages/get/example_nav2/ios/Flutter/Release.xcconfig create mode 100644 packages/get/example_nav2/ios/Flutter/ephemeral/flutter_lldb_helper.py create mode 100644 packages/get/example_nav2/ios/Flutter/ephemeral/flutter_lldbinit create mode 100755 packages/get/example_nav2/ios/Flutter/flutter_export_environment.sh create mode 100644 packages/get/example_nav2/ios/Runner.xcodeproj/project.pbxproj create mode 100644 packages/get/example_nav2/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/get/example_nav2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/get/example_nav2/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/get/example_nav2/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/get/example_nav2/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/get/example_nav2/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/get/example_nav2/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/get/example_nav2/ios/Runner/AppDelegate.swift create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 packages/get/example_nav2/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 packages/get/example_nav2/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/get/example_nav2/ios/Runner/Base.lproj/Main.storyboard create mode 100644 packages/get/example_nav2/ios/Runner/GeneratedPluginRegistrant.h create mode 100644 packages/get/example_nav2/ios/Runner/GeneratedPluginRegistrant.m create mode 100644 packages/get/example_nav2/ios/Runner/Info.plist create mode 100644 packages/get/example_nav2/ios/Runner/Runner-Bridging-Header.h create mode 100644 packages/get/example_nav2/lib/app/middleware/auth_middleware.dart create mode 100644 packages/get/example_nav2/lib/app/modules/dashboard/bindings/dashboard_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/dashboard/controllers/dashboard_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/dashboard/views/dashboard_view.dart create mode 100644 packages/get/example_nav2/lib/app/modules/home/bindings/home_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/home/controllers/home_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/home/views/home_view.dart create mode 100644 packages/get/example_nav2/lib/app/modules/login/bindings/login_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/login/controllers/login_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/login/views/login_view.dart create mode 100644 packages/get/example_nav2/lib/app/modules/product_details/bindings/product_details_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/product_details/controllers/product_details_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/product_details/views/product_details_view.dart create mode 100644 packages/get/example_nav2/lib/app/modules/products/bindings/products_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/products/controllers/products_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/products/views/products_view.dart create mode 100644 packages/get/example_nav2/lib/app/modules/profile/bindings/profile_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/profile/controllers/profile_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/profile/views/profile_view.dart create mode 100644 packages/get/example_nav2/lib/app/modules/root/bindings/root_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/root/controllers/root_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/root/views/drawer.dart create mode 100644 packages/get/example_nav2/lib/app/modules/root/views/root_view.dart create mode 100644 packages/get/example_nav2/lib/app/modules/settings/bindings/settings_binding.dart create mode 100644 packages/get/example_nav2/lib/app/modules/settings/controllers/settings_controller.dart create mode 100644 packages/get/example_nav2/lib/app/modules/settings/views/settings_view.dart create mode 100644 packages/get/example_nav2/lib/app/routes/app_pages.dart create mode 100644 packages/get/example_nav2/lib/app/routes/app_routes.dart create mode 100644 packages/get/example_nav2/lib/main.dart create mode 100644 packages/get/example_nav2/lib/models/demo_product.dart create mode 100644 packages/get/example_nav2/lib/services/auth_service.dart create mode 100644 packages/get/example_nav2/pubspec.lock create mode 100644 packages/get/example_nav2/pubspec.yaml create mode 100644 packages/get/example_nav2/web/favicon.png create mode 100644 packages/get/example_nav2/web/icons/Icon-192.png create mode 100644 packages/get/example_nav2/web/icons/Icon-512.png create mode 100644 packages/get/example_nav2/web/index.html create mode 100644 packages/get/example_nav2/web/manifest.json create mode 100644 packages/get/example_nav2/windows/CMakeLists.txt create mode 100644 packages/get/example_nav2/windows/flutter/CMakeLists.txt create mode 100644 packages/get/example_nav2/windows/flutter/generated_plugin_registrant.cc create mode 100644 packages/get/example_nav2/windows/flutter/generated_plugin_registrant.h create mode 100644 packages/get/example_nav2/windows/flutter/generated_plugins.cmake create mode 100644 packages/get/example_nav2/windows/runner/CMakeLists.txt create mode 100644 packages/get/example_nav2/windows/runner/Runner.rc create mode 100644 packages/get/example_nav2/windows/runner/flutter_window.cpp create mode 100644 packages/get/example_nav2/windows/runner/flutter_window.h create mode 100644 packages/get/example_nav2/windows/runner/main.cpp create mode 100644 packages/get/example_nav2/windows/runner/resource.h create mode 100644 packages/get/example_nav2/windows/runner/resources/app_icon.ico create mode 100644 packages/get/example_nav2/windows/runner/run_loop.cpp create mode 100644 packages/get/example_nav2/windows/runner/run_loop.h create mode 100644 packages/get/example_nav2/windows/runner/runner.exe.manifest create mode 100644 packages/get/example_nav2/windows/runner/utils.cpp create mode 100644 packages/get/example_nav2/windows/runner/utils.h create mode 100644 packages/get/example_nav2/windows/runner/win32_window.cpp create mode 100644 packages/get/example_nav2/windows/runner/win32_window.h create mode 100644 packages/get/lib/get.dart create mode 100644 packages/get/lib/get_common/get_reset.dart create mode 100644 packages/get/lib/get_connect.dart create mode 100644 packages/get/lib/get_connect/connect.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/_html/_file_decoder_html.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/_html/_http_request_html.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/_io/_file_decoder_io.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/_io/_http_request_io.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/_stub/_file_decoder_stub.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/_stub/_http_request_stub.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/interface/request_base.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/mock/http_request_mock.dart create mode 100644 packages/get/lib/get_connect/http/src/_http/utils/body_decoder.dart create mode 100644 packages/get/lib/get_connect/http/src/certificates/certificates.dart create mode 100644 packages/get/lib/get_connect/http/src/exceptions/exceptions.dart create mode 100644 packages/get/lib/get_connect/http/src/http.dart create mode 100644 packages/get/lib/get_connect/http/src/interceptors/get_modifiers.dart create mode 100644 packages/get/lib/get_connect/http/src/multipart/form_data.dart create mode 100644 packages/get/lib/get_connect/http/src/multipart/multipart_file.dart create mode 100644 packages/get/lib/get_connect/http/src/request/request.dart create mode 100644 packages/get/lib/get_connect/http/src/response/response.dart create mode 100644 packages/get/lib/get_connect/http/src/status/http_status.dart create mode 100644 packages/get/lib/get_connect/http/src/utils/utils.dart create mode 100644 packages/get/lib/get_connect/sockets/sockets.dart create mode 100644 packages/get/lib/get_connect/sockets/src/socket_notifier.dart create mode 100644 packages/get/lib/get_connect/sockets/src/sockets_html.dart create mode 100644 packages/get/lib/get_connect/sockets/src/sockets_io.dart create mode 100644 packages/get/lib/get_connect/sockets/src/sockets_stub.dart create mode 100644 packages/get/lib/get_core/get_core.dart create mode 100644 packages/get/lib/get_core/src/get_interface.dart create mode 100644 packages/get/lib/get_core/src/get_main.dart create mode 100644 packages/get/lib/get_core/src/log.dart create mode 100644 packages/get/lib/get_core/src/smart_management.dart create mode 100644 packages/get/lib/get_core/src/typedefs.dart create mode 100644 packages/get/lib/get_instance/get_instance.dart create mode 100644 packages/get/lib/get_instance/src/bindings_interface.dart create mode 100644 packages/get/lib/get_instance/src/extension_instance.dart create mode 100644 packages/get/lib/get_instance/src/get_instance.dart create mode 100644 packages/get/lib/get_instance/src/lifecycle.dart create mode 100644 packages/get/lib/get_navigation/get_navigation.dart create mode 100644 packages/get/lib/get_navigation/src/bottomsheet/bottomsheet.dart create mode 100644 packages/get/lib/get_navigation/src/dialog/dialog_route.dart create mode 100644 packages/get/lib/get_navigation/src/extension_navigation.dart create mode 100644 packages/get/lib/get_navigation/src/nav2/get_information_parser.dart create mode 100644 packages/get/lib/get_navigation/src/nav2/get_nav_config.dart create mode 100644 packages/get/lib/get_navigation/src/nav2/get_router_delegate.dart create mode 100644 packages/get/lib/get_navigation/src/nav2/router_outlet.dart create mode 100644 packages/get/lib/get_navigation/src/root/get_cupertino_app.dart create mode 100644 packages/get/lib/get_navigation/src/root/get_material_app.dart create mode 100644 packages/get/lib/get_navigation/src/root/internacionalization.dart create mode 100644 packages/get/lib/get_navigation/src/root/parse_route.dart create mode 100644 packages/get/lib/get_navigation/src/root/root_controller.dart create mode 100644 packages/get/lib/get_navigation/src/router_report.dart create mode 100644 packages/get/lib/get_navigation/src/routes/circular_reveal_clipper.dart create mode 100644 packages/get/lib/get_navigation/src/routes/custom_transition.dart create mode 100644 packages/get/lib/get_navigation/src/routes/default_route.dart create mode 100644 packages/get/lib/get_navigation/src/routes/default_transitions.dart create mode 100644 packages/get/lib/get_navigation/src/routes/get_route.dart create mode 100644 packages/get/lib/get_navigation/src/routes/get_transition_mixin.dart create mode 100644 packages/get/lib/get_navigation/src/routes/observers/route_observer.dart create mode 100644 packages/get/lib/get_navigation/src/routes/route_middleware.dart create mode 100644 packages/get/lib/get_navigation/src/routes/transitions_type.dart create mode 100644 packages/get/lib/get_navigation/src/snackbar/snackbar.dart create mode 100644 packages/get/lib/get_navigation/src/snackbar/snackbar_controller.dart create mode 100644 packages/get/lib/get_rx/get_rx.dart create mode 100644 packages/get/lib/get_rx/src/rx_stream/get_stream.dart create mode 100644 packages/get/lib/get_rx/src/rx_stream/mini_stream.dart create mode 100644 packages/get/lib/get_rx/src/rx_stream/rx_stream.dart create mode 100644 packages/get/lib/get_rx/src/rx_typedefs/rx_typedefs.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_core/rx_impl.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_core/rx_interface.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_core/rx_num.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_core/rx_string.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_iterables/rx_list.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_iterables/rx_map.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_iterables/rx_set.dart create mode 100644 packages/get/lib/get_rx/src/rx_types/rx_types.dart create mode 100644 packages/get/lib/get_rx/src/rx_workers/rx_workers.dart create mode 100644 packages/get/lib/get_rx/src/rx_workers/utils/debouncer.dart create mode 100644 packages/get/lib/get_state_manager/get_state_manager.dart create mode 100644 packages/get/lib/get_state_manager/src/rx_flutter/rx_disposable.dart create mode 100644 packages/get/lib/get_state_manager/src/rx_flutter/rx_getx_widget.dart create mode 100644 packages/get/lib/get_state_manager/src/rx_flutter/rx_notifier.dart create mode 100644 packages/get/lib/get_state_manager/src/rx_flutter/rx_obx_widget.dart create mode 100644 packages/get/lib/get_state_manager/src/rx_flutter/rx_ticket_provider_mixin.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/get_controllers.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/get_responsive.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/get_state.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/get_view.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/get_widget_cache.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/list_notifier.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/mixin_state.dart create mode 100644 packages/get/lib/get_state_manager/src/simple/simple_builder.dart create mode 100644 packages/get/lib/get_utils/get_utils.dart create mode 100644 packages/get/lib/get_utils/src/extensions/context_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/double_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/duration_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/dynamic_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/event_loop_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/export.dart create mode 100644 packages/get/lib/get_utils/src/extensions/internacionalization.dart create mode 100644 packages/get/lib/get_utils/src/extensions/iterable_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/num_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/string_extensions.dart create mode 100644 packages/get/lib/get_utils/src/extensions/widget_extensions.dart create mode 100644 packages/get/lib/get_utils/src/get_utils/get_utils.dart create mode 100644 packages/get/lib/get_utils/src/platform/platform.dart create mode 100644 packages/get/lib/get_utils/src/platform/platform_io.dart create mode 100644 packages/get/lib/get_utils/src/platform/platform_web.dart create mode 100644 packages/get/lib/get_utils/src/queue/get_queue.dart create mode 100644 packages/get/lib/instance_manager.dart create mode 100644 packages/get/lib/route_manager.dart create mode 100644 packages/get/lib/src/responsive/size_percent_extension.dart create mode 100644 packages/get/lib/state_manager.dart create mode 100644 packages/get/lib/utils.dart create mode 100644 packages/get/pubspec.lock create mode 100644 packages/get/pubspec.yaml create mode 100644 packages/get/test/benchmarks/benckmark_test.dart create mode 100644 packages/get/test/instance/get_instance_test.dart create mode 100644 packages/get/test/instance/util/matcher.dart create mode 100644 packages/get/test/internationalization/internationalization_test.dart create mode 100644 packages/get/test/navigation/bottomsheet_test.dart create mode 100644 packages/get/test/navigation/dialog_test.dart create mode 100644 packages/get/test/navigation/dispose_dependencies_test.dart create mode 100644 packages/get/test/navigation/get_main_test.dart create mode 100644 packages/get/test/navigation/middleware_test.dart create mode 100644 packages/get/test/navigation/parse_route_test.dart create mode 100644 packages/get/test/navigation/root_widget_test.dart create mode 100644 packages/get/test/navigation/routes_test.dart create mode 100644 packages/get/test/navigation/snackbar_test.dart create mode 100644 packages/get/test/navigation/utils/wrapper.dart create mode 100644 packages/get/test/rx/rx_workers_test.dart create mode 100644 packages/get/test/state_manager/get_mixin_state_test.dart create mode 100644 packages/get/test/state_manager/get_obx_test.dart create mode 100644 packages/get/test/state_manager/get_rxstate_test.dart create mode 100644 packages/get/test/state_manager/get_state_test.dart create mode 100644 packages/get/test/utils/extensions/context_extensions_test.dart create mode 100644 packages/get/test/utils/extensions/double_extensions_test.dart create mode 100644 packages/get/test/utils/extensions/dynamic_extensions_test.dart create mode 100644 packages/get/test/utils/extensions/num_extensions_test.dart create mode 100644 packages/get/test/utils/extensions/string_extensions_test.dart create mode 100644 packages/get/test/utils/extensions/widget_extensions_test.dart create mode 100644 packages/get/test/utils/get_utils_test.dart create mode 100644 packages/get/test/utils/platform_test.dart create mode 100644 packages/get/test/utils/platform_web_test.dart create mode 100644 packages/get_storage/CHANGELOG.md create mode 100644 packages/get_storage/LICENSE create mode 100644 packages/get_storage/README.md create mode 100644 packages/get_storage/delete.png create mode 100644 packages/get_storage/example/README.md create mode 100644 packages/get_storage/example/android/.gradle/6.1.1/fileChanges/last-build.bin create mode 100644 packages/get_storage/example/android/.gradle/6.1.1/fileHashes/fileHashes.lock create mode 100644 packages/get_storage/example/android/.gradle/6.1.1/gc.properties create mode 100644 packages/get_storage/example/android/.gradle/checksums/checksums.lock create mode 100644 packages/get_storage/example/android/.gradle/vcs-1/gc.properties create mode 100644 packages/get_storage/example/android/app/build.gradle create mode 100644 packages/get_storage/example/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/get_storage/example/android/app/src/main/AndroidManifest.xml create mode 100644 packages/get_storage/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 packages/get_storage/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt create mode 100644 packages/get_storage/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 packages/get_storage/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/get_storage/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/get_storage/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/get_storage/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/get_storage/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/get_storage/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/get_storage/example/android/app/src/main/res/values-night/styles.xml create mode 100644 packages/get_storage/example/android/app/src/main/res/values/styles.xml create mode 100644 packages/get_storage/example/android/app/src/profile/AndroidManifest.xml create mode 100644 packages/get_storage/example/android/build.gradle create mode 100644 packages/get_storage/example/android/gradle.properties create mode 100644 packages/get_storage/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 packages/get_storage/example/android/local.properties create mode 100644 packages/get_storage/example/android/settings.gradle create mode 100644 packages/get_storage/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/get_storage/example/ios/Flutter/Debug.xcconfig create mode 100644 packages/get_storage/example/ios/Flutter/Generated.xcconfig create mode 100644 packages/get_storage/example/ios/Flutter/Release.xcconfig create mode 100644 packages/get_storage/example/ios/Flutter/ephemeral/flutter_lldb_helper.py create mode 100644 packages/get_storage/example/ios/Flutter/ephemeral/flutter_lldbinit create mode 100755 packages/get_storage/example/ios/Flutter/flutter_export_environment.sh create mode 100644 packages/get_storage/example/ios/Podfile create mode 100644 packages/get_storage/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 packages/get_storage/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/get_storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/get_storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/get_storage/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/get_storage/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/get_storage/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/get_storage/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/get_storage/example/ios/Runner/AppDelegate.swift create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 packages/get_storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 packages/get_storage/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/get_storage/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 packages/get_storage/example/ios/Runner/GeneratedPluginRegistrant.h create mode 100644 packages/get_storage/example/ios/Runner/GeneratedPluginRegistrant.m create mode 100644 packages/get_storage/example/ios/Runner/Info.plist create mode 100644 packages/get_storage/example/ios/Runner/Runner-Bridging-Header.h create mode 100644 packages/get_storage/example/lib/main.dart create mode 100644 packages/get_storage/example/linux/CMakeLists.txt create mode 100644 packages/get_storage/example/linux/flutter/CMakeLists.txt create mode 120000 packages/get_storage/example/linux/flutter/ephemeral/.plugin_symlinks/jni create mode 120000 packages/get_storage/example/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux create mode 100644 packages/get_storage/example/linux/flutter/generated_plugin_registrant.cc create mode 100644 packages/get_storage/example/linux/flutter/generated_plugin_registrant.h create mode 100644 packages/get_storage/example/linux/flutter/generated_plugins.cmake create mode 100644 packages/get_storage/example/linux/main.cc create mode 100644 packages/get_storage/example/linux/my_application.cc create mode 100644 packages/get_storage/example/linux/my_application.h create mode 100644 packages/get_storage/example/pubspec.lock create mode 100644 packages/get_storage/example/pubspec.yaml create mode 100644 packages/get_storage/example/test/test.dart create mode 100644 packages/get_storage/example/test/widget_test.dart create mode 100644 packages/get_storage/example/web/favicon.png create mode 100644 packages/get_storage/example/web/icons/Icon-192.png create mode 100644 packages/get_storage/example/web/icons/Icon-512.png create mode 100644 packages/get_storage/example/web/index.html create mode 100644 packages/get_storage/example/web/manifest.json create mode 100644 packages/get_storage/lib/get_storage.dart create mode 100644 packages/get_storage/lib/src/read_write_value.dart create mode 100644 packages/get_storage/lib/src/storage/html.dart create mode 100644 packages/get_storage/lib/src/storage/io.dart create mode 100644 packages/get_storage/lib/src/storage_impl.dart create mode 100644 packages/get_storage/lib/src/value.dart create mode 100644 packages/get_storage/pubspec.lock create mode 100644 packages/get_storage/pubspec.yaml create mode 100644 packages/get_storage/read.png create mode 100644 packages/get_storage/test/getstorage_test.dart create mode 100644 packages/get_storage/test/utils/list_equality.dart create mode 100644 packages/get_storage/write.png create mode 100644 scratch/verify_geo.dart diff --git a/assets/style.json b/assets/style.json index 26ceeef..644d44d 100644 --- a/assets/style.json +++ b/assets/style.json @@ -1,10 +1,10 @@ { "version": 8, - "name": "Intaleq Premium Map Style", + "name": "Intaleq Premium — Light v2.9", "metadata": { "brand": "Intaleq", - "version": "2.0.0", - "description": "Google + OSM hybrid style with 3D buildings, railways, subway, waterways, and Intaleq brand palette" + "version": "2.10.0-light", + "description": "Intaleq light theme — buildings at close zoom only, on-road labels, improved arrows" }, "center": [ 36.276008, @@ -56,6 +56,20 @@ "https://tiles.intaleqapp.com/places_jordan/{z}/{x}/{y}" ], "maxzoom": 14 + }, + "overture_buildings": { + "type": "vector", + "tiles": [ + "https://tiles.intaleqapp.com/overture_building/{z}/{x}/{y}" + ], + "maxzoom": 14 + }, + "overture_segments": { + "type": "vector", + "tiles": [ + "https://tiles.intaleqapp.com/overture_segment/{z}/{x}/{y}" + ], + "maxzoom": 14 } }, "layers": [ @@ -78,7 +92,7 @@ ], "paint": { "fill-color": "#F0F4F8", - "fill-opacity": 1 + "fill-opacity": 1.0 } }, { @@ -93,7 +107,37 @@ ], "paint": { "fill-color": "#FAF5EE", - "fill-opacity": 1 + "fill-opacity": 1.0 + } + }, + { + "id": "landuse-cemetery", + "type": "fill", + "source": "local-osm-polygons", + "source-layer": "planet_osm_polygon", + "filter": [ + "==", + "landuse", + "cemetery" + ], + "paint": { + "fill-color": "#B8D4BA", + "fill-opacity": 1.0 + } + }, + { + "id": "landuse-military", + "type": "fill", + "source": "local-osm-polygons", + "source-layer": "planet_osm_polygon", + "filter": [ + "==", + "landuse", + "military" + ], + "paint": { + "fill-color": "#E2D9CC", + "fill-opacity": 1.0 } }, { @@ -112,36 +156,6 @@ "fill-opacity": 1 } }, - { - "id": "landuse-cemetery", - "type": "fill", - "source": "local-osm-polygons", - "source-layer": "planet_osm_polygon", - "filter": [ - "==", - "landuse", - "cemetery" - ], - "paint": { - "fill-color": "#B8D4BA", - "fill-opacity": 0.9 - } - }, - { - "id": "landuse-military", - "type": "fill", - "source": "local-osm-polygons", - "source-layer": "planet_osm_polygon", - "filter": [ - "==", - "landuse", - "military" - ], - "paint": { - "fill-color": "#E2D9CC", - "fill-opacity": 0.8 - } - }, { "id": "park-layer", "type": "fill", @@ -202,9 +216,9 @@ "nature_reserve" ], "paint": { - "line-color": "#94D4A0", + "line-color": "#9ED4A0", "line-width": 0.8, - "line-opacity": 0.7 + "line-opacity": 0.6 } }, { @@ -594,7 +608,7 @@ ], "minzoom": 14, "paint": { - "line-color": "#C8CDD6", + "line-color": "#D4D8DF", "line-width": [ "interpolate", [ @@ -849,7 +863,7 @@ } }, { - "id": "road-casing-motorway-trunk", + "id": "road-casing-motorway", "type": "line", "source": "local-osm-lines", "source-layer": "planet_osm_line", @@ -880,7 +894,7 @@ } }, { - "id": "road-core-motorway-trunk", + "id": "road-core-motorway", "type": "line", "source": "local-osm-lines", "source-layer": "planet_osm_line", @@ -909,6 +923,68 @@ ] } }, + { + "id": "road-direction-arrows", + "type": "symbol", + "source": "local-osm-lines", + "source-layer": "planet_osm_line", + "minzoom": 15, + "filter": [ + "all", + [ + "in", + "highway", + "motorway", + "trunk", + "primary", + "secondary", + "tertiary", + "residential", + "unclassified", + "living_street" + ], + [ + "==", + "oneway", + "yes" + ] + ], + "layout": { + "symbol-placement": "line", + "symbol-spacing": 120, + "text-field": "→", + "text-font": [ + "Noto Sans Regular" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 15, + 16, + 17, + 22, + 19, + 28 + ], + "text-keep-upright": false, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-padding": 0, + "text-letter-spacing": -0.1 + }, + "paint": { + "text-color": "rgba(80,96,120,0.55)", + "text-halo-color": "rgba(255,255,255,0.25)", + "text-halo-width": 1 + } + }, { "id": "building-fill-flat", "type": "fill", @@ -918,7 +994,8 @@ "has", "building" ], - "maxzoom": 14, + "minzoom": 15, + "maxzoom": 16, "paint": { "fill-color": "#DDD8D0", "fill-opacity": 0.85, @@ -930,39 +1007,77 @@ "type": "fill-extrusion", "source": "local-osm-polygons", "source-layer": "planet_osm_polygon", - "minzoom": 14, + "minzoom": 16, "filter": [ "has", "building" ], + "paint": { + "fill-extrusion-color": "#DDD8D0", + "fill-extrusion-height": [ + "coalesce", + [ + "to-number", + [ + "get", + "height" + ] + ], + [ + "*", + [ + "to-number", + [ + "get", + "building:levels" + ], + 2 + ], + 3.5 + ], + 7 + ], + "fill-extrusion-base": [ + "coalesce", + [ + "to-number", + [ + "get", + "min_height" + ] + ], + 0 + ], + "fill-extrusion-opacity": 0.8, + "fill-extrusion-vertical-gradient": true + } + }, + { + "id": "building-3d-overture", + "type": "fill-extrusion", + "source": "overture_buildings", + "source-layer": "overture_building", + "minzoom": 16, "paint": { "fill-extrusion-color": [ "match", [ "get", - "building" + "subtype" ], "commercial", - "#DDD5C5", + "#D8D0C0", "retail", - "#E5D8C8", + "#E0D0B8", "industrial", - "#D2D8E0", - "church", - "#DDD4EE", - "mosque", - "#CCE4D0", - "hospital", - "#EDD8D8", - "school", - "#E0E6CC", - "university", - "#D8E0C8", - "hotel", - "#D8DCF0", - "apartments", - "#E0DCD4", - "#DDD8D2" + "#C8D0DC", + "religious", + "#C8D4EC", + "education", + "#D4E0C4", + "medical", + "#E8D4D4", + "#DDD8D0" ], "fill-extrusion-height": [ "interpolate", @@ -972,24 +1087,7 @@ [ "zoom" ], - 14, - [ - "*", - [ - "coalesce", - [ - "to-number", - [ - "get", - "building:levels" - ], - null - ], - 3 - ], - 2.5 - ], - 17, + 16, [ "coalesce", [ @@ -997,16 +1095,45 @@ [ "get", "height" - ], - null + ] ], [ "*", [ - "to-number", + "coalesce", [ - "get", - "building:levels" + "to-number", + [ + "get", + "num_floors" + ] + ], + 3 + ], + 3.5 + ], + 9 + ], + 18, + [ + "coalesce", + [ + "to-number", + [ + "get", + "height" + ] + ], + [ + "*", + [ + "coalesce", + [ + "to-number", + [ + "get", + "num_floors" + ] ], 3 ], @@ -1022,8 +1149,7 @@ [ "get", "min_height" - ], - null + ] ], 0 ], @@ -1035,14 +1161,29 @@ [ "zoom" ], - 14, - 0.6, + 15, + 0, 16, + 0.6, + 17, 0.88 ], "fill-extrusion-vertical-gradient": true } }, + { + "id": "overture-building-footprint", + "type": "fill", + "source": "overture_buildings", + "source-layer": "overture_building", + "minzoom": 15, + "maxzoom": 16, + "paint": { + "fill-color": "#DDD8D0", + "fill-opacity": 0.82, + "fill-outline-color": "#C4BEB4" + } + }, { "id": "railway-label", "type": "symbol", @@ -1093,7 +1234,7 @@ "#7722AA", "#4A5568" ], - "text-halo-color": "rgba(255,255,255,0.9)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1143,7 +1284,7 @@ }, "paint": { "text-color": "#2E86AB", - "text-halo-color": "rgba(255,255,255,0.85)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1163,12 +1304,11 @@ "Noto Sans Regular" ], "text-size": 10, - "text-allow-overlap": false, - "text-ignore-placement": false + "text-allow-overlap": false }, "paint": { "text-color": "#5A5048", - "text-halo-color": "rgba(255,255,255,0.95)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 1.5 } }, @@ -1192,7 +1332,40 @@ }, "paint": { "text-color": "#5A5048", - "text-halo-color": "rgba(255,255,255,0.95)", + "text-halo-color": "rgba(255,255,255,0.93)", + "text-halo-width": 1.5 + } + }, + { + "id": "overture-building-names", + "type": "symbol", + "source": "overture_buildings", + "source-layer": "overture_building", + "minzoom": 17, + "filter": [ + "has", + "names" + ], + "layout": { + "text-field": [ + "coalesce", + [ + "get", + "names" + ], + "" + ], + "text-font": [ + "Noto Sans Regular" + ], + "text-size": 10, + "text-anchor": "center", + "text-allow-overlap": false, + "text-max-width": 8 + }, + "paint": { + "text-color": "#5A5048", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 1.5 } }, @@ -1226,16 +1399,33 @@ "text-font": [ "Noto Sans Regular" ], - "text-size": 11, + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 16, + 10, + 18, + 13 + ], "symbol-placement": "line", + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-keep-upright": true, + "text-max-angle": 25, + "symbol-spacing": 300, "text-letter-spacing": 0.04, - "text-padding": 4, + "text-padding": 8, "text-allow-overlap": false }, "paint": { "text-color": "#4A5568", - "text-halo-color": "rgba(255,255,255,0.85)", - "text-halo-width": 1.5 + "text-halo-color": "rgba(255,255,255,0.93)", + "text-halo-width": 1.8 } }, { @@ -1252,7 +1442,7 @@ "motorway", "trunk" ], - "minzoom": 13, + "minzoom": 12, "layout": { "text-field": [ "coalesce", @@ -1266,6 +1456,59 @@ ], "" ], + "text-font": [ + "Noto Sans Bold" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 12, + 10, + 14, + 13, + 18, + 16 + ], + "symbol-placement": "line", + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-keep-upright": true, + "text-max-angle": 22, + "symbol-spacing": 350, + "text-letter-spacing": 0.05, + "text-padding": 12, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#1A2332", + "text-halo-color": "rgba(255,255,255,0.93)", + "text-halo-width": 2.5 + } + }, + { + "id": "overture-street-names", + "type": "symbol", + "source": "overture_segments", + "source-layer": "overture_segment", + "minzoom": 14, + "filter": [ + "has", + "names" + ], + "layout": { + "text-field": [ + "coalesce", + [ + "get", + "names" + ], + "" + ], "text-font": [ "Noto Sans Regular" ], @@ -1277,19 +1520,26 @@ [ "zoom" ], - 13, - 11, + 14, + 9, 16, + 12, + 18, 14 ], "symbol-placement": "line", - "text-letter-spacing": 0.05, - "text-padding": 5, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-keep-upright": true, + "text-max-angle": 28, + "symbol-spacing": 280, + "text-letter-spacing": 0.04, + "text-padding": 15, "text-allow-overlap": false }, "paint": { - "text-color": "#2D3748", - "text-halo-color": "rgba(255,255,255,0.9)", + "text-color": "#4A5568", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1306,7 +1556,7 @@ ], "layout": { "icon-image": "hospital", - "icon-size": 1, + "icon-size": 1.0, "text-field": [ "coalesce", [ @@ -1332,7 +1582,7 @@ }, "paint": { "text-color": "#C0392B", - "text-halo-color": "white", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1365,17 +1615,18 @@ "text-font": [ "Noto Sans Regular" ], - "text-size": 10, + "text-size": 11, "text-offset": [ 0, 1.2 ], - "text-anchor": "top" + "text-anchor": "top", + "text-allow-overlap": false }, "paint": { "text-color": "#1A7A3C", - "text-halo-color": "white", - "text-halo-width": 1.5 + "text-halo-color": "rgba(255,255,255,0.93)", + "text-halo-width": 2 } }, { @@ -1412,11 +1663,57 @@ 0, 1.2 ], - "text-anchor": "top" + "text-anchor": "top", + "text-allow-overlap": false }, "paint": { "text-color": "#1A6B3A", - "text-halo-color": "white", + "text-halo-color": "rgba(255,255,255,0.93)", + "text-halo-width": 2 + } + }, + { + "id": "poi-school", + "type": "symbol", + "source": "local-osm-points", + "source-layer": "planet_osm_point", + "minzoom": 14, + "filter": [ + "in", + "amenity", + "school", + "university", + "college" + ], + "layout": { + "icon-image": "college", + "icon-size": 0.8, + "text-field": [ + "coalesce", + [ + "get", + "name:ar" + ], + [ + "get", + "name" + ], + "" + ], + "text-font": [ + "Noto Sans Regular" + ], + "text-size": 11, + "text-offset": [ + 0, + 1.2 + ], + "text-anchor": "top", + "text-allow-overlap": false + }, + "paint": { + "text-color": "#5A4A8A", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1469,54 +1766,10 @@ }, "paint": { "text-color": "#3D4A5C", - "text-halo-color": "white", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 1.5 } }, - { - "id": "poi-school", - "type": "symbol", - "source": "local-osm-points", - "source-layer": "planet_osm_point", - "minzoom": 14, - "filter": [ - "in", - "amenity", - "school", - "university", - "college" - ], - "layout": { - "icon-image": "college", - "icon-size": 0.8, - "text-field": [ - "coalesce", - [ - "get", - "name:ar" - ], - [ - "get", - "name" - ], - "" - ], - "text-font": [ - "Noto Sans Regular" - ], - "text-size": 11, - "text-offset": [ - 0, - 1.2 - ], - "text-anchor": "top" - }, - "paint": { - "text-color": "#5A4A8A", - "text-halo-color": "white", - "text-halo-width": 2 - } - }, { "id": "poi-transit-station", "type": "symbol", @@ -1579,7 +1832,7 @@ }, "paint": { "text-color": "#CC2233", - "text-halo-color": "rgba(255,255,255,0.95)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1623,12 +1876,11 @@ 13 ], "text-padding": 8, - "text-allow-overlap": false, - "text-ignore-placement": false + "text-allow-overlap": false }, "paint": { "text-color": "#34495E", - "text-halo-color": "rgba(255,255,255,0.85)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1739,15 +1991,13 @@ "#1A2740", "town", "#2C3E50", - "village", - "#3D4F62", "suburb", - "#4A5568", + "#34495E", "neighbourhood", - "#556677", - "#607080" + "#34495E", + "#34495E" ], - "text-halo-color": "rgba(255,255,255,0.92)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": [ "match", [ @@ -1768,6 +2018,11 @@ "source": "places_egypt", "source-layer": "places_egypt", "minzoom": 12, + "filter": [ + "!in", + "category", + "street" + ], "layout": { "text-field": [ "coalesce", @@ -1807,7 +2062,7 @@ }, "paint": { "text-color": "#2D3748", - "text-halo-color": "rgba(255, 255, 255, 0.9)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1817,6 +2072,11 @@ "source": "places_syria", "source-layer": "places_syria", "minzoom": 10, + "filter": [ + "!in", + "category", + "street" + ], "layout": { "text-field": [ "coalesce", @@ -1856,7 +2116,7 @@ }, "paint": { "text-color": "#2D3748", - "text-halo-color": "rgba(255, 255, 255, 0.9)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } }, @@ -1866,6 +2126,11 @@ "source": "places_jordan", "source-layer": "places_jordan", "minzoom": 10, + "filter": [ + "!in", + "category", + "street" + ], "layout": { "text-field": [ "coalesce", @@ -1905,7 +2170,7 @@ }, "paint": { "text-color": "#2D3748", - "text-halo-color": "rgba(255, 255, 255, 0.9)", + "text-halo-color": "rgba(255,255,255,0.93)", "text-halo-width": 2 } } diff --git a/assets/style_dark.json b/assets/style_dark.json index 86c6c0a..86ac3d6 100644 --- a/assets/style_dark.json +++ b/assets/style_dark.json @@ -1,10 +1,10 @@ { "version": 8, - "name": "Intaleq Premium Map Style — Dark", + "name": "Intaleq Premium — Dark v2.9", "metadata": { "brand": "Intaleq", - "version": "2.1.0", - "description": "Dark Theme with road direction arrows" + "version": "2.10.0-dark", + "description": "Intaleq dark theme — buildings at close zoom only, on-road labels, improved arrows" }, "center": [ 36.276008, @@ -56,6 +56,20 @@ "https://tiles.intaleqapp.com/places_jordan/{z}/{x}/{y}" ], "maxzoom": 14 + }, + "overture_buildings": { + "type": "vector", + "tiles": [ + "https://tiles.intaleqapp.com/overture_building/{z}/{x}/{y}" + ], + "maxzoom": 14 + }, + "overture_segments": { + "type": "vector", + "tiles": [ + "https://tiles.intaleqapp.com/overture_segment/{z}/{x}/{y}" + ], + "maxzoom": 14 } }, "layers": [ @@ -63,7 +77,7 @@ "id": "background", "type": "background", "paint": { - "background-color": "#1A1E2A" + "background-color": "#141920" } }, { @@ -77,8 +91,8 @@ "residential" ], "paint": { - "fill-color": "#1E2330", - "fill-opacity": 1 + "fill-color": "#1A2130", + "fill-opacity": 0.9 } }, { @@ -92,24 +106,8 @@ "commercial" ], "paint": { - "fill-color": "#22202D", - "fill-opacity": 1 - } - }, - { - "id": "landuse-industrial", - "type": "fill", - "source": "local-osm-polygons", - "source-layer": "planet_osm_polygon", - "filter": [ - "in", - "landuse", - "industrial", - "railway" - ], - "paint": { - "fill-color": "#252A35", - "fill-opacity": 1 + "fill-color": "#1E1C18", + "fill-opacity": 0.9 } }, { @@ -123,7 +121,7 @@ "cemetery" ], "paint": { - "fill-color": "#1B2D1D", + "fill-color": "#1A2E1A", "fill-opacity": 0.9 } }, @@ -138,8 +136,24 @@ "military" ], "paint": { - "fill-color": "#28241F", - "fill-opacity": 0.8 + "fill-color": "#28241C", + "fill-opacity": 0.9 + } + }, + { + "id": "landuse-industrial", + "type": "fill", + "source": "local-osm-polygons", + "source-layer": "planet_osm_polygon", + "filter": [ + "in", + "landuse", + "industrial", + "railway" + ], + "paint": { + "fill-color": "#1C2028", + "fill-opacity": 1 } }, { @@ -174,7 +188,18 @@ ] ], "paint": { - "fill-color": "#1C2F1E", + "fill-color": [ + "match", + [ + "get", + "leisure" + ], + "pitch", + "#1A3020", + "playground", + "#1C2A1C", + "#172217" + ], "fill-opacity": 0.85 } }, @@ -191,9 +216,9 @@ "nature_reserve" ], "paint": { - "line-color": "#2D5035", + "line-color": "#1A3020", "line-width": 0.8, - "line-opacity": 0.7 + "line-opacity": 0.6 } }, { @@ -228,7 +253,7 @@ ] ], "paint": { - "fill-color": "#0E3A5C", + "fill-color": "#0D2A40", "fill-opacity": 0.95 } }, @@ -259,7 +284,7 @@ ] ], "paint": { - "line-color": "#0A2D4A", + "line-color": "#1A4A6A", "line-width": 0.8, "line-opacity": 0.8 } @@ -294,7 +319,7 @@ ] ], "paint": { - "line-color": "#104E6E", + "line-color": "#1A4A6A", "line-width": [ "interpolate", [ @@ -345,7 +370,7 @@ ], "minzoom": 13, "paint": { - "line-color": "#0E3850", + "line-color": "#153A52", "line-width": [ "interpolate", [ @@ -373,7 +398,7 @@ "railway" ], "paint": { - "fill-color": "#22273A", + "fill-color": "#202830", "fill-opacity": 0.9 } }, @@ -404,7 +429,7 @@ ], "minzoom": 8, "paint": { - "line-color": "#353C4E", + "line-color": "#3A4050", "line-width": [ "interpolate", [ @@ -449,7 +474,7 @@ ], "minzoom": 8, "paint": { - "line-color": "#505A6E", + "line-color": "#4A5568", "line-width": [ "interpolate", [ @@ -493,13 +518,13 @@ "railway" ], "subway", - "#CC2233", + "#AA1122", "light_rail", - "#0066CC", + "#0055AA", "tram", - "#8833BB", + "#7722AA", "monorail", - "#008855", + "#007744", "#BB3344" ], "line-width": [ @@ -541,13 +566,13 @@ "railway" ], "subway", - "#FF3347", + "#FF4455", "light_rail", - "#2288FF", + "#33AAFF", "tram", - "#AA44EE", + "#CC55FF", "monorail", - "#00BB66", + "#00DD88", "#FF4455" ], "line-width": [ @@ -583,7 +608,7 @@ ], "minzoom": 14, "paint": { - "line-color": "#262B38", + "line-color": "#252C38", "line-width": [ "interpolate", [ @@ -618,7 +643,7 @@ "pedestrian" ], "paint": { - "line-color": "#282D3C", + "line-color": "#252C38", "line-width": [ "interpolate", [ @@ -650,7 +675,7 @@ "pedestrian" ], "paint": { - "line-color": "#2F3445", + "line-color": "#2E3848", "line-width": [ "interpolate", [ @@ -707,7 +732,7 @@ "tertiary_link" ], "paint": { - "line-color": "#384050", + "line-color": "#38465A", "line-width": [ "interpolate", [ @@ -735,7 +760,7 @@ "secondary_link" ], "paint": { - "line-color": "#2E3648", + "line-color": "#3A3010", "line-width": [ "interpolate", [ @@ -764,7 +789,7 @@ "secondary_link" ], "paint": { - "line-color": "#3A4558", + "line-color": "#4A3E18", "line-width": [ "interpolate", [ @@ -792,7 +817,7 @@ "primary_link" ], "paint": { - "line-color": "#5C4A10", + "line-color": "#5A4A10", "line-width": [ "interpolate", [ @@ -821,7 +846,7 @@ "primary_link" ], "paint": { - "line-color": "#907018", + "line-color": "#7A6418", "line-width": [ "interpolate", [ @@ -838,7 +863,7 @@ } }, { - "id": "road-casing-motorway-trunk", + "id": "road-casing-motorway", "type": "line", "source": "local-osm-lines", "source-layer": "planet_osm_line", @@ -851,7 +876,7 @@ "trunk_link" ], "paint": { - "line-color": "#6A4E10", + "line-color": "#6A5010", "line-width": [ "interpolate", [ @@ -869,7 +894,7 @@ } }, { - "id": "road-core-motorway-trunk", + "id": "road-core-motorway", "type": "line", "source": "local-osm-lines", "source-layer": "planet_osm_line", @@ -882,7 +907,7 @@ "trunk_link" ], "paint": { - "line-color": "#A07820", + "line-color": "#8A6A18", "line-width": [ "interpolate", [ @@ -898,6 +923,68 @@ ] } }, + { + "id": "road-direction-arrows", + "type": "symbol", + "source": "local-osm-lines", + "source-layer": "planet_osm_line", + "minzoom": 15, + "filter": [ + "all", + [ + "in", + "highway", + "motorway", + "trunk", + "primary", + "secondary", + "tertiary", + "residential", + "unclassified", + "living_street" + ], + [ + "==", + "oneway", + "yes" + ] + ], + "layout": { + "symbol-placement": "line", + "symbol-spacing": 120, + "text-field": "→", + "text-font": [ + "Noto Sans Regular" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 15, + 16, + 17, + 22, + 19, + 28 + ], + "text-keep-upright": false, + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-allow-overlap": true, + "text-ignore-placement": true, + "text-padding": 0, + "text-letter-spacing": -0.1 + }, + "paint": { + "text-color": "rgba(160,180,210,0.5)", + "text-halo-color": "rgba(0,0,0,0.3)", + "text-halo-width": 1 + } + }, { "id": "building-fill-flat", "type": "fill", @@ -907,11 +994,12 @@ "has", "building" ], - "maxzoom": 14, + "minzoom": 15, + "maxzoom": 16, "paint": { - "fill-color": "#2A2825", + "fill-color": "#252C38", "fill-opacity": 0.85, - "fill-outline-color": "#C4BEB4" + "fill-outline-color": "#1E2530" } }, { @@ -919,39 +1007,77 @@ "type": "fill-extrusion", "source": "local-osm-polygons", "source-layer": "planet_osm_polygon", - "minzoom": 14, + "minzoom": 16, "filter": [ "has", "building" ], + "paint": { + "fill-extrusion-color": "#252C38", + "fill-extrusion-height": [ + "coalesce", + [ + "to-number", + [ + "get", + "height" + ] + ], + [ + "*", + [ + "to-number", + [ + "get", + "building:levels" + ], + 2 + ], + 3.5 + ], + 7 + ], + "fill-extrusion-base": [ + "coalesce", + [ + "to-number", + [ + "get", + "min_height" + ] + ], + 0 + ], + "fill-extrusion-opacity": 0.8, + "fill-extrusion-vertical-gradient": true + } + }, + { + "id": "building-3d-overture", + "type": "fill-extrusion", + "source": "overture_buildings", + "source-layer": "overture_building", + "minzoom": 16, "paint": { "fill-extrusion-color": [ "match", [ "get", - "building" + "subtype" ], "commercial", - "#2A2620", + "#2A3A50", "retail", - "#2E2418", + "#2E3A4A", "industrial", - "#222A34", - "church", - "#2A2440", - "mosque", - "#1A2E20", - "hospital", - "#2E2020", - "school", - "#22281A", - "university", - "#202614", - "hotel", - "#1E2238", - "apartments", - "#262420", - "#242220" + "#1E2A38", + "religious", + "#24203A", + "education", + "#1E3024", + "medical", + "#3A2020", + "#2A3245" ], "fill-extrusion-height": [ "interpolate", @@ -961,24 +1087,7 @@ [ "zoom" ], - 14, - [ - "*", - [ - "coalesce", - [ - "to-number", - [ - "get", - "building:levels" - ], - null - ], - 3 - ], - 2.5 - ], - 17, + 16, [ "coalesce", [ @@ -986,16 +1095,45 @@ [ "get", "height" - ], - null + ] ], [ "*", [ - "to-number", + "coalesce", [ - "get", - "building:levels" + "to-number", + [ + "get", + "num_floors" + ] + ], + 3 + ], + 3.5 + ], + 9 + ], + 18, + [ + "coalesce", + [ + "to-number", + [ + "get", + "height" + ] + ], + [ + "*", + [ + "coalesce", + [ + "to-number", + [ + "get", + "num_floors" + ] ], 3 ], @@ -1011,8 +1149,7 @@ [ "get", "min_height" - ], - null + ] ], 0 ], @@ -1024,14 +1161,29 @@ [ "zoom" ], - 14, - 0.6, + 15, + 0, 16, + 0.6, + 17, 0.88 ], "fill-extrusion-vertical-gradient": true } }, + { + "id": "overture-building-footprint", + "type": "fill", + "source": "overture_buildings", + "source-layer": "overture_building", + "minzoom": 15, + "maxzoom": 16, + "paint": { + "fill-color": "#252C38", + "fill-opacity": 0.82, + "fill-outline-color": "#1E2530" + } + }, { "id": "railway-label", "type": "symbol", @@ -1075,14 +1227,14 @@ "railway" ], "subway", - "#CC2233", + "#FF5566", "light_rail", "#0055BB", "tram", "#7722AA", "#4A5568" ], - "text-halo-color": "rgba(15,20,30,0.92)", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1131,8 +1283,263 @@ "text-letter-spacing": 0.1 }, "paint": { - "text-color": "#2E86AB", - "text-halo-color": "rgba(15,20,30,0.92)", + "text-color": "#4AA8D8", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 2 + } + }, + { + "id": "building-number-polygon", + "type": "symbol", + "source": "local-osm-polygons", + "source-layer": "planet_osm_polygon", + "minzoom": 17, + "filter": [ + "has", + "addr:housenumber" + ], + "layout": { + "text-field": "{addr:housenumber}", + "text-font": [ + "Noto Sans Regular" + ], + "text-size": 10, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#8898A8", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 1.5 + } + }, + { + "id": "building-number-point", + "type": "symbol", + "source": "local-osm-points", + "source-layer": "planet_osm_point", + "minzoom": 17, + "filter": [ + "has", + "addr:housenumber" + ], + "layout": { + "text-field": "{addr:housenumber}", + "text-font": [ + "Noto Sans Regular" + ], + "text-size": 10, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#8898A8", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 1.5 + } + }, + { + "id": "overture-building-names", + "type": "symbol", + "source": "overture_buildings", + "source-layer": "overture_building", + "minzoom": 17, + "filter": [ + "has", + "names" + ], + "layout": { + "text-field": [ + "coalesce", + [ + "get", + "names" + ], + "" + ], + "text-font": [ + "Noto Sans Regular" + ], + "text-size": 10, + "text-anchor": "center", + "text-allow-overlap": false, + "text-max-width": 8 + }, + "paint": { + "text-color": "#8898A8", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 1.5 + } + }, + { + "id": "road-labels-minor", + "type": "symbol", + "source": "local-osm-lines", + "source-layer": "planet_osm_line", + "filter": [ + "in", + "highway", + "residential", + "service", + "unclassified", + "living_street" + ], + "minzoom": 16, + "layout": { + "text-field": [ + "coalesce", + [ + "get", + "name:ar" + ], + [ + "get", + "name" + ], + "" + ], + "text-font": [ + "Noto Sans Regular" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 16, + 10, + 18, + 13 + ], + "symbol-placement": "line", + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-keep-upright": true, + "text-max-angle": 25, + "symbol-spacing": 300, + "text-letter-spacing": 0.04, + "text-padding": 8, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#8BA0B8", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 1.8 + } + }, + { + "id": "road-labels-major", + "type": "symbol", + "source": "local-osm-lines", + "source-layer": "planet_osm_line", + "filter": [ + "in", + "highway", + "primary", + "secondary", + "tertiary", + "motorway", + "trunk" + ], + "minzoom": 12, + "layout": { + "text-field": [ + "coalesce", + [ + "get", + "name:ar" + ], + [ + "get", + "name" + ], + "" + ], + "text-font": [ + "Noto Sans Bold" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 12, + 10, + 14, + 13, + 18, + 16 + ], + "symbol-placement": "line", + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-keep-upright": true, + "text-max-angle": 22, + "symbol-spacing": 350, + "text-letter-spacing": 0.05, + "text-padding": 12, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#C8D8E8", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 2.5 + } + }, + { + "id": "overture-street-names", + "type": "symbol", + "source": "overture_segments", + "source-layer": "overture_segment", + "minzoom": 14, + "filter": [ + "has", + "names" + ], + "layout": { + "text-field": [ + "coalesce", + [ + "get", + "names" + ], + "" + ], + "text-font": [ + "Noto Sans Regular" + ], + "text-size": [ + "interpolate", + [ + "linear" + ], + [ + "zoom" + ], + 14, + 9, + 16, + 12, + 18, + 14 + ], + "symbol-placement": "line", + "text-rotation-alignment": "map", + "text-pitch-alignment": "viewport", + "text-keep-upright": true, + "text-max-angle": 28, + "symbol-spacing": 280, + "text-letter-spacing": 0.04, + "text-padding": 15, + "text-allow-overlap": false + }, + "paint": { + "text-color": "#8BA0B8", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1149,7 +1556,7 @@ ], "layout": { "icon-image": "hospital", - "icon-size": 1, + "icon-size": 1.0, "text-field": [ "coalesce", [ @@ -1174,8 +1581,8 @@ "text-allow-overlap": false }, "paint": { - "text-color": "#C0392B", - "text-halo-color": "white", + "text-color": "#FF6B6B", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1208,17 +1615,18 @@ "text-font": [ "Noto Sans Regular" ], - "text-size": 10, + "text-size": 11, "text-offset": [ 0, 1.2 ], - "text-anchor": "top" + "text-anchor": "top", + "text-allow-overlap": false }, "paint": { - "text-color": "#1A7A3C", - "text-halo-color": "white", - "text-halo-width": 1.5 + "text-color": "#4ADB80", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 2 } }, { @@ -1255,11 +1663,57 @@ 0, 1.2 ], - "text-anchor": "top" + "text-anchor": "top", + "text-allow-overlap": false }, "paint": { - "text-color": "#1A6B3A", - "text-halo-color": "white", + "text-color": "#4ACA78", + "text-halo-color": "rgba(20,25,32,0.92)", + "text-halo-width": 2 + } + }, + { + "id": "poi-school", + "type": "symbol", + "source": "local-osm-points", + "source-layer": "planet_osm_point", + "minzoom": 14, + "filter": [ + "in", + "amenity", + "school", + "university", + "college" + ], + "layout": { + "icon-image": "college", + "icon-size": 0.8, + "text-field": [ + "coalesce", + [ + "get", + "name:ar" + ], + [ + "get", + "name" + ], + "" + ], + "text-font": [ + "Noto Sans Regular" + ], + "text-size": 11, + "text-offset": [ + 0, + 1.2 + ], + "text-anchor": "top", + "text-allow-overlap": false + }, + "paint": { + "text-color": "#A888E8", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1311,55 +1765,11 @@ "text-anchor": "top" }, "paint": { - "text-color": "#3D4A5C", - "text-halo-color": "white", + "text-color": "#A0B8D0", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 1.5 } }, - { - "id": "poi-school", - "type": "symbol", - "source": "local-osm-points", - "source-layer": "planet_osm_point", - "minzoom": 14, - "filter": [ - "in", - "amenity", - "school", - "university", - "college" - ], - "layout": { - "icon-image": "college", - "icon-size": 0.8, - "text-field": [ - "coalesce", - [ - "get", - "name:ar" - ], - [ - "get", - "name" - ], - "" - ], - "text-font": [ - "Noto Sans Regular" - ], - "text-size": 11, - "text-offset": [ - 0, - 1.2 - ], - "text-anchor": "top" - }, - "paint": { - "text-color": "#5A4A8A", - "text-halo-color": "white", - "text-halo-width": 2 - } - }, { "id": "poi-transit-station", "type": "symbol", @@ -1421,8 +1831,8 @@ "text-allow-overlap": false }, "paint": { - "text-color": "#CC2233", - "text-halo-color": "rgba(15,20,30,0.92)", + "text-color": "#FF5566", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1466,12 +1876,11 @@ 13 ], "text-padding": 8, - "text-allow-overlap": false, - "text-ignore-placement": false + "text-allow-overlap": false }, "paint": { - "text-color": "#34495E", - "text-halo-color": "rgba(15,20,30,0.92)", + "text-color": "#8AA0B8", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1572,8 +1981,23 @@ "text-allow-overlap": false }, "paint": { - "text-color": "#C8D8F0", - "text-halo-color": "rgba(15,20,30,0.92)", + "text-color": [ + "match", + [ + "get", + "place" + ], + "city", + "#D0E0F0", + "town", + "#B8CDE0", + "suburb", + "#8AA0B8", + "neighbourhood", + "#8AA0B8", + "#8AA0B8" + ], + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": [ "match", [ @@ -1594,6 +2018,11 @@ "source": "places_egypt", "source-layer": "places_egypt", "minzoom": 12, + "filter": [ + "!in", + "category", + "street" + ], "layout": { "text-field": [ "coalesce", @@ -1632,8 +2061,8 @@ "text-allow-overlap": false }, "paint": { - "text-color": "#9AAABB", - "text-halo-color": "rgba(15,20,30,0.92)", + "text-color": "#A8C0D8", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1643,6 +2072,11 @@ "source": "places_syria", "source-layer": "places_syria", "minzoom": 10, + "filter": [ + "!in", + "category", + "street" + ], "layout": { "text-field": [ "coalesce", @@ -1681,8 +2115,8 @@ "text-allow-overlap": false }, "paint": { - "text-color": "#9AAABB", - "text-halo-color": "rgba(15,20,30,0.92)", + "text-color": "#A8C0D8", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } }, @@ -1692,6 +2126,11 @@ "source": "places_jordan", "source-layer": "places_jordan", "minzoom": 10, + "filter": [ + "!in", + "category", + "street" + ], "layout": { "text-field": [ "coalesce", @@ -1730,75 +2169,10 @@ "text-allow-overlap": false }, "paint": { - "text-color": "#9AAABB", - "text-halo-color": "rgba(15,20,30,0.92)", + "text-color": "#A8C0D8", + "text-halo-color": "rgba(20,25,32,0.92)", "text-halo-width": 2 } - }, - { - "id": "road-direction-arrows", - "type": "symbol", - "source": "local-osm-lines", - "source-layer": "planet_osm_line", - "minzoom": 14, - "filter": [ - "all", - [ - "has", - "oneway" - ], - [ - "in", - "oneway", - "yes", - "-1" - ], - [ - "in", - "highway", - "motorway", - "motorway_link", - "trunk", - "trunk_link", - "primary", - "primary_link", - "secondary", - "secondary_link", - "tertiary", - "tertiary_link", - "residential", - "unclassified" - ] - ], - "layout": { - "symbol-placement": "line", - "text-field": [ - "match", - [ - "get", - "oneway" - ], - "yes", - "→", - "-1", - "←", - "" - ], - "text-font": [ - "Noto Sans Regular" - ], - "text-size": 11, - "text-spacing": 180, - "text-rotation-alignment": "map", - "text-allow-overlap": false, - "text-ignore-placement": false, - "text-keep-upright": false - }, - "paint": { - "text-color": "#F0C040", - "text-halo-color": "rgba(15,20,30,0.85)", - "text-halo-width": 1.2 - } } ] } \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3c95c1b..f133cdf 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -84,12 +84,6 @@ PODS: - geolocator_apple (1.2.0): - Flutter - FlutterMacOS - - Google-Maps-iOS-Utils (6.1.3): - - GoogleMaps (~> 10.0) - - google_maps_flutter_ios (0.0.1): - - Flutter - - Google-Maps-iOS-Utils (< 7.0, >= 5.0) - - GoogleMaps (< 11.0, >= 8.4) - google_sign_in_ios (0.0.1): - Flutter - FlutterMacOS @@ -98,9 +92,6 @@ PODS: - GoogleDataTransport (10.1.0): - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - GoogleMaps (10.10.0): - - GoogleMaps/Maps (= 10.10.0) - - GoogleMaps/Maps (10.10.0) - GoogleSignIn (9.1.0): - AppAuth (~> 2.0) - AppCheckCore (~> 11.0) @@ -274,7 +265,6 @@ DEPENDENCIES: - flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`) - flutter_tts (from `.symlinks/plugins/flutter_tts/ios`) - geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`) - - google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`) - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`) - image_cropper (from `.symlinks/plugins/image_cropper/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) @@ -312,9 +302,7 @@ SPEC REPOS: - FirebaseCoreInternal - FirebaseInstallations - FirebaseMessaging - - Google-Maps-iOS-Utils - GoogleDataTransport - - GoogleMaps - GoogleSignIn - GoogleUtilities - GTMAppAuth @@ -364,8 +352,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_tts/ios" geolocator_apple: :path: ".symlinks/plugins/geolocator_apple/darwin" - google_maps_flutter_ios: - :path: ".symlinks/plugins/google_maps_flutter_ios/ios" google_sign_in_ios: :path: ".symlinks/plugins/google_sign_in_ios/darwin" image_cropper: @@ -439,11 +425,8 @@ SPEC CHECKSUMS: flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23 flutter_tts: 35ac3c7d42412733e795ea96ad2d7e05d0a75113 geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e - Google-Maps-iOS-Utils: bed22fa703c919259b3901449434d60d994fae20 - google_maps_flutter_ios: 17552876e72723da1d41accc22f03b5f7afbde69 google_sign_in_ios: 000870aa06da9b28d1d0bf7ef70ff0213059dd28 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleMaps: 133ba5beb4979592001a6cd0125a502243439ff9 GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238 diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart index 5ab69e0..78ed6d8 100644 --- a/lib/constant/box_name.dart +++ b/lib/constant/box_name.dart @@ -107,4 +107,5 @@ class BoxName { static const String recentLocations = 'recentLocations'; static const String tripData = 'tripData'; static const String parentTripSelected = 'parentTripSelected'; + static const String styleVersion = 'styleVersion'; } diff --git a/lib/constant/country_polygons.dart b/lib/constant/country_polygons.dart index fa17cf2..8dc4e4c 100644 --- a/lib/constant/country_polygons.dart +++ b/lib/constant/country_polygons.dart @@ -91,17 +91,47 @@ class CountryPolygons { ]; // دالة تُرجع رابط API بناءً على اسم الدولة - static String getRoutingApiUrl(String countryName) { - switch (countryName) { - case 'Jordan': - return 'https://routec.intaleq.xyz/route-jo'; - case 'Syria': - return 'https://routec.intaleq.xyz/route'; - case 'Egypt': - return 'https://routec.intaleq.xyz/route-eg'; - default: - // الافتراضي في حالة لم يقع الموقع ضمن أي من المضلعات - return 'https://routec.intaleq.xyz/route'; + // static String getRoutingApiUrl(String countryName) { + // switch (countryName) { + // case 'Jordan': + // return 'https://routec.intaleq.xyz/route-jo'; + // case 'Syria': + // return 'https://routec.intaleq.xyz/route'; + // case 'Egypt': + // return 'https://routec.intaleq.xyz/route-eg'; + // default: + // // الافتراضي في حالة لم يقع الموقع ضمن أي من المضلعات + // return 'https://routec.intaleq.xyz/route'; + // } + // } + + /// دالة تحدد اسم الدولة (باللغة الإنجليزية للـ API) بناءً على الإحداثيات + static String getCountryName(LatLng? point) { + if (point == null) return "jordan"; + + if (_isPointInPolygon(point, jordanBoundary)) return "jordan"; + if (_isPointInPolygon(point, syriaBoundary)) return "syria"; + if (_isPointInPolygon(point, egyptBoundary)) return "egypt"; + + return "jordan"; // الافتراضي + } + + /// خوارزمية Ray Casting للتحقق من وقوع نقطة داخل مضلع + static bool _isPointInPolygon(LatLng p, List polygon) { + bool isInside = false; + int j = polygon.length - 1; + for (int i = 0; i < polygon.length; i++) { + if (((polygon[i].latitude > p.latitude) != + (polygon[j].latitude > p.latitude)) && + (p.longitude < + (polygon[j].longitude - polygon[i].longitude) * + (p.latitude - polygon[i].latitude) / + (polygon[j].latitude - polygon[i].latitude) + + polygon[i].longitude)) { + isInside = !isInside; + } + j = i; } + return isInside; } } diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 0d8f87e..2e06560 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -663,6 +663,8 @@ class CRUD { 'x-api-key': Env.mapSaasKey, }, ); + Log.print('link -MapSaas: $link'); + Log.print('response -MapSaas: ${response.body}'); if (response.statusCode == 200) { return jsonDecode(response.body); } diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index b435066..b21dbae 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -32,12 +32,14 @@ import 'package:maplibre_gl/maplibre_gl.dart'; // import 'package:google_polyline_algorithm/google_polyline_algorithm.dart'; import 'package:intl/intl.dart'; import 'package:location/location.dart'; -import 'package:Intaleq/constant/colors.dart'; +import 'package:Intaleq/constant/country_polygons.dart'; +import 'package:Intaleq/constant/links.dart'; import 'package:Intaleq/constant/style.dart'; import 'package:Intaleq/controller/home/points_for_rider_controller.dart'; import 'package:Intaleq/views/home/map_widget.dart/form_serch_multiy_point.dart'; import '../../constant/api_key.dart'; import '../../constant/box_name.dart'; +import '../../constant/colors.dart'; import '../../constant/country_polygons.dart'; import '../../constant/info.dart'; import '../../constant/links.dart'; @@ -3276,7 +3278,9 @@ class MapPassengerController extends GetxController { "step3": placesCoordinate.length > 3 ? placesCoordinate[3] : "", "step4": placesCoordinate.length > 4 ? placesCoordinate[4] : "", }; - Log.print('payload add_ride: $payload'); + Log.print( + '🏁 Ride Registration Detail: $startNameAddress -> $endNameAddress'); + Log.print(' 📦 Payload: $payload'); try { // الاتصال بـ add_ride.php @@ -4859,7 +4863,7 @@ Intaleq Team'''; } // 4. التخلص من متحكم الخريطة (ممارسة جيدة) - mapController?.dispose(); + mapController = null; Log.print("--- Cleanup complete. ---"); super.onClose(); @@ -5307,27 +5311,44 @@ Intaleq Team'''; final lat = passengerLocation.latitude; final lng = passengerLocation.longitude; + final country = CountryPolygons.getCountryName(passengerLocation); try { final url = - '${AppLink.searchGeocoding}?q=${Uri.encodeComponent(q)}&lat=$lat&lng=$lng&radius=45000&country=syria'; + '${AppLink.searchGeocoding}?q=${Uri.encodeComponent(q)}&lat=$lat&lng=$lng&radius=15000&country=$country'; final response = await CRUD().getMapSaas(link: url); if (response != null && response['results'] is List) { - List list = List.from(response['results']); + List results = List.from(response['results']); + final List filteredResults = []; + final Set seenPlaces = {}; - for (final p in list) { - // Normalize fields to match expected format in components - p['distanceKm'] = (p['distance'] as num).toDouble() / 1000.0; - // Ensure latitude/longitude are strings if UI expects them that way, - // though modern code usually prefers doubles. - // The old code used double.tryParse(p['latitude']?.toString() ?? '0.0') - p['latitude'] = p['latitude'].toString(); - p['longitude'] = p['longitude'].toString(); + for (final p in results) { + final name = p['name_ar'] ?? p['name'] ?? ''; + final district = p['district'] ?? ''; + final plat = p['latitude']?.toString() ?? '0'; + final plng = p['longitude']?.toString() ?? '0'; + + final dedupeKey = + "${name.trim().toLowerCase()}_${district.trim().toLowerCase()}"; + + if (!seenPlaces.contains(dedupeKey)) { + seenPlaces.add(dedupeKey); + + p['distanceKm'] = (p['distance'] as num).toDouble() / 1000.0; + p['latitude'] = plat; + p['longitude'] = plng; + p['name'] = name; + p['address'] = p['full_address'] ?? + (district.isNotEmpty + ? "$district، ${p['governorate'] ?? ''}" + : (p['governorate'] ?? '')); + + filteredResults.add(p); + } } - placesDestination = list; - Log.print('Updated places: $placesDestination'); + placesDestination = filteredResults; update(); } } catch (e) { @@ -5533,23 +5554,26 @@ Intaleq Team'''; final lat = passengerLocation.latitude; final lng = passengerLocation.longitude; + final country = CountryPolygons.getCountryName(passengerLocation); try { final url = - '${AppLink.searchGeocoding}?q=${Uri.encodeComponent(q)}&lat=$lat&lng=$lng&radius=200000&country=syria'; + '${AppLink.searchGeocoding}?q=${Uri.encodeComponent(q)}&lat=$lat&lng=$lng&radius=15000&country=$country'; final response = await CRUD().getMapSaas(link: url); if (response != null && response['results'] is List) { List list = List.from(response['results']); - for (final p in list) { p['distanceKm'] = (p['distance'] as num).toDouble() / 1000.0; p['latitude'] = p['latitude'].toString(); p['longitude'] = p['longitude'].toString(); + p['name'] = p['name_ar'] ?? p['name'] ?? ''; + p['address'] = p['full_address'] ?? + (p['district'] != null + ? "${p['district']}، ${p['governorate'] ?? ''}" + : (p['governorate'] ?? '')); } - placesStart = list; - Log.print('Updated places start: $placesStart'); update(); } } catch (e) { @@ -5557,34 +5581,37 @@ Intaleq Team'''; } } - Future getPlacesListsWayPoint(int index) async { - var languageCode = wayPoint0Controller.text; + Future getPlacesListsWayPoint(int index) async { + final q = wayPoint0Controller.text.trim(); + if (q.length < 3) return; - // Regular expression to check for English alphabet characters - final englishRegex = RegExp(r'[a-zA-Z]'); - - // Check if text contains English characters - if (englishRegex.hasMatch(languageCode)) { - languageCode = 'en'; - } else { - languageCode = 'ar'; - } - - var url = - '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${wayPoint0Controller.text}&location=${passengerLocation.latitude},${passengerLocation.longitude}&radius=250000&language=$languageCode&key=${AK.mapAPIKEY.toString()}'; + final lat = passengerLocation.latitude; + final lng = passengerLocation.longitude; + final country = CountryPolygons.getCountryName(passengerLocation); try { - var response = await CRUD().getGoogleApi(link: url, payload: {}); + final url = + '${AppLink.searchGeocoding}?q=${Uri.encodeComponent(q)}&lat=$lat&lng=$lng&radius=15000&country=$country'; + final response = await CRUD().getMapSaas(link: url); - if (response != null && response['results'] != null) { - wayPoint0 = response['results']; - placeListResponseAll[index] = response['results']; + if (response != null && response['results'] is List) { + List list = List.from(response['results']); + for (final p in list) { + p['distanceKm'] = (p['distance'] as num).toDouble() / 1000.0; + p['latitude'] = p['latitude'].toString(); + p['longitude'] = p['longitude'].toString(); + p['name'] = p['name_ar'] ?? p['name'] ?? ''; + p['address'] = p['full_address'] ?? + (p['district'] != null + ? "${p['district']}، ${p['governorate'] ?? ''}" + : (p['governorate'] ?? '')); + } + wayPoint0 = list; + placeListResponseAll[index] = list; update(); - } else { - Log.print('Error: Invalid response from Google Places API'); } } catch (e) { - Log.print('Error fetching places: $e'); + Log.print('Error fetching places in WayPoint: $e'); } } @@ -6292,7 +6319,7 @@ Intaleq Team'''; } bool isDrawingRoute = false; - showDrawingBottomSheet() { + void showDrawingBottomSheet() { final bool isDark = Get.isDarkMode; final Color bgColor = isDark ? Colors.black.withOpacity(0.65) @@ -6300,6 +6327,9 @@ Intaleq Team'''; final Color textColor = isDark ? Colors.white : Colors.grey.shade800; final Color subtitleColor = isDark ? Colors.white70 : Colors.grey.shade600; + // Prevent showing multiple bottom sheets if one is already active + if (Get.isBottomSheetOpen == true) return; + Get.bottomSheet( ClipRRect( borderRadius: const BorderRadius.only( @@ -6324,16 +6354,34 @@ Intaleq Team'''; child: Column( mainAxisSize: MainAxisSize.min, children: [ - // Minimal handle - Container( - width: 40, - height: 4, - margin: const EdgeInsets.only(bottom: 24), - decoration: BoxDecoration( - color: isDark ? Colors.white24 : Colors.grey.shade300, - borderRadius: BorderRadius.circular(2), - ), + // Minimal handle and Close button Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const SizedBox(width: 48), // Balance for the close button + Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: isDark ? Colors.white24 : Colors.grey.shade300, + borderRadius: BorderRadius.circular(2), + ), + ), + IconButton( + visualDensity: VisualDensity.compact, + icon: Icon(Icons.close, + color: textColor.withOpacity(0.5), size: 22), + onPressed: () { + // Force back to close the overlay regardless of GetX state check + Get.back(); + isDrawingRoute = false; + isLoading = false; + update(); + }, + ), + ], ), + const SizedBox(height: 16), Stack( alignment: Alignment.center, children: [ @@ -6538,26 +6586,10 @@ Intaleq Team'''; String pointsString; dynamic routeData; - if (isSaaSRequest) { - // SaaS parsing - apiDistanceMeters = (responseData['distance'] as num).toDouble(); - pointsString = responseData['points'] ?? ""; - routeData = responseData; // For box storage - } else { - // OSRM parsing - if (responseData['routes'] == null || responseData['routes'].isEmpty) { - if (attemptCount < 2) { - await _retryProcess(origin, destination, waypoints, attemptCount); - return; - } - _handleFatalError("Route Not Found".tr, - "No routes available for this destination.".tr); - return; - } - routeData = responseData['routes'][0]; - apiDistanceMeters = (routeData['distance'] as num).toDouble(); - pointsString = routeData['geometry'] ?? ""; - } + // SaaS parsing + apiDistanceMeters = (responseData['distance'] as num).toDouble(); + pointsString = responseData['points'] ?? ""; + routeData = responseData; // For box storage var originCoords = origin.split(','); double startLat = double.parse(originCoords[0]); @@ -6613,21 +6645,14 @@ Intaleq Team'''; polylineCoordinates.clear(); polylineCoordinates.addAll(decodedPoints); - // ── 4. العناوين والتحديثات ────────────────────────────────── final LatLng startLoc = polylineCoordinates.first; final LatLng endLoc = polylineCoordinates.last; - try { - final results = await Future.wait([ - getReverseGeocoding(startLoc), - getReverseGeocoding(endLoc), - ]); - startNameAddress = results[0]; - endNameAddress = results[1]; - } catch (e) { - startNameAddress = 'Start Point'.tr; - endNameAddress = 'Destination'.tr; - } + // ── 4. العناوين والتحديثات ────────────────────────────────── + startNameAddress = responseData['startName'] ?? 'Start Point'.tr; + endNameAddress = responseData['endName'] ?? 'Destination'.tr; + Log.print('📍 ROUTE START: $startNameAddress'); + Log.print('📍 ROUTE END: $endNameAddress'); // ── 5. Bounds Calculation (SaaS bbox vs OSRM manual) ────────── if (isSaaSRequest && responseData['bbox'] != null) { @@ -6863,7 +6888,7 @@ Intaleq Team'''; // ----------------------------------------------------------------------------------------- void _handleFatalError(String title, String message) { // 1. إغلاق شاشة التحميل (Drawing route...) - if (isDrawingRoute || (Get.isBottomSheetOpen ?? false)) { + if (Get.isBottomSheetOpen == true || Get.isDialogOpen == true) { Get.back(); } @@ -8041,6 +8066,7 @@ Intaleq Team'''; @override void onInit() async { super.onInit(); + _checkAndRefreshMapStyle(); // Verify style version and clear cache if needed // // --- إضافة جديدة: تهيئة وحدة التحكم في الروابط العميقة --- Get.put(DeepLinkController(), permanent: true); // // ---------------------------------------------------- @@ -8189,6 +8215,34 @@ Intaleq Team'''; 'The price may increase if the route changes.'.tr, 'ding'); } } + + /// Checks the current version of assets/style.json and purges the map cache if it has changed. + Future _checkAndRefreshMapStyle() async { + try { + final String styleJson = await rootBundle.loadString('assets/style.json'); + final Map decoded = json.decode(styleJson); + final String? currentVersion = + decoded['metadata'] != null ? decoded['metadata']['version'] : null; + + if (currentVersion == null) return; + + final String lastVersion = box.read(BoxName.styleVersion) ?? "0.0.0"; + + if (currentVersion != lastVersion) { + Log.print( + "♻️ Map Style Version mismatch ($lastVersion -> $currentVersion). Purging offline cache..."); + await OfflineMapService.instance.clearCache(); + + // Final verification check: give native engine time to flush + await Future.delayed(const Duration(milliseconds: 500)); + + box.write(BoxName.styleVersion, currentVersion); + Log.print("✅ Style Version updated to $currentVersion"); + } + } catch (e) { + Log.print("⚠️ Style version check failed: $e"); + } + } } class CarLocation { diff --git a/lib/controller/home/trip_monitor_controller.dart b/lib/controller/home/trip_monitor_controller.dart index 1aa371f..63d9d53 100644 --- a/lib/controller/home/trip_monitor_controller.dart +++ b/lib/controller/home/trip_monitor_controller.dart @@ -119,7 +119,7 @@ class TripMonitorController extends GetxController { @override void onClose() { timer.cancel(); - mapController?.dispose(); + mapController = null; super.onClose(); } diff --git a/lib/print.dart b/lib/print.dart index 63efb2d..a3d59f6 100644 --- a/lib/print.dart +++ b/lib/print.dart @@ -4,7 +4,7 @@ class Log { Log._(); static void print(String value, {StackTrace? stackTrace}) { - // developer.log(value, name: 'LOG', stackTrace: stackTrace); + developer.log(value, name: 'LOG', stackTrace: stackTrace); } static Object? inspect(Object? object) { diff --git a/lib/services/offline_map_service.dart b/lib/services/offline_map_service.dart index ef81fbd..88c2eb4 100644 --- a/lib/services/offline_map_service.dart +++ b/lib/services/offline_map_service.dart @@ -103,4 +103,19 @@ class OfflineMapService { 2; return 12742 * math.asin(math.sqrt(a)); } + + /// Clears all offline map regions and tiles from local storage + Future clearCache() async { + try { + Log.print("♻️ Purging MapLibre Offline Cache..."); + // In maplibre_gl 0.25.0, we use top-level functions instead of an OfflineManager class + final List regions = await getListOfRegions(); + for (var region in regions) { + await deleteOfflineRegion(region.id); + } + Log.print("✅ Map cache cleared successfully. ${regions.length} regions removed."); + } catch (e) { + Log.print("⚠️ Failed to clear map cache: $e"); + } + } } diff --git a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart index 741415c..4230d95 100644 --- a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart +++ b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart @@ -12,8 +12,6 @@ import 'package:Intaleq/views/widgets/elevated_btn.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; import '../../../constant/colors.dart'; import '../../../constant/table_names.dart'; -import '../../../controller/functions/toast.dart'; -import '../../../controller/functions/tts.dart'; import '../../widgets/error_snakbar.dart'; import '../../widgets/mydialoug.dart'; import 'form_search_start.dart'; @@ -21,14 +19,12 @@ import 'form_search_start.dart'; // ─── Design Tokens (Modern & Dynamic) ──────────────────────────────────────── class _D { - // Radii - More rounded for modern feel static const double radiusCard = 28; static const double radiusChip = 20; static const double radiusBtn = 16; static const double radiusInner = 14; static const double radiusPill = 50; - // Shadows - Layered depth with blur static List get cardShadow => [ BoxShadow( color: Colors.black.withOpacity(0.08), @@ -59,21 +55,10 @@ class _D { ), ]; - static List innerGlow(Color c) => [ - BoxShadow( - color: c.withOpacity(0.15), - blurRadius: 20, - spreadRadius: -10, - offset: const Offset(0, 0), - ), - ]; - - // Durations - Smoother animations static const Duration fast = Duration(milliseconds: 180); static const Duration medium = Duration(milliseconds: 420); static const Duration slow = Duration(milliseconds: 600); - // Gradients static LinearGradient primaryGradient({ Alignment begin = Alignment.topLeft, Alignment end = Alignment.bottomRight, @@ -101,26 +86,10 @@ class _D { .withOpacity(0.95), ], ); - - // Glassmorphism effect - static BoxDecoration glassEffect({ - required Color color, - double opacity = 0.1, - double borderOpacity = 0.2, - }) => - BoxDecoration( - color: color.withOpacity(opacity), - borderRadius: BorderRadius.circular(radiusInner), - border: Border.all( - color: color.withOpacity(borderOpacity), - width: 1, - ), - backgroundBlendMode: BlendMode.overlay, - ); } // ───────────────────────────────────────────────────────────────────────────── -// MAIN BOTTOM MENU MAP - Modern Redesign +// MAIN BOTTOM MENU MAP - Scrollable Redesign // ───────────────────────────────────────────────────────────────────────────── class MainBottomMenuMap extends StatelessWidget { @@ -143,7 +112,12 @@ class MainBottomMenuMap extends StatelessWidget { child: AnimatedContainer( duration: _D.medium, curve: Curves.easeOutQuint, - height: controller.mainBottomMenuMapHeight, + // تم استبدال الارتفاع الثابت بـ BoxConstraints للسماح بالتمدد الديناميكي + constraints: BoxConstraints( + maxHeight: controller.isMainBottomMenuMap + ? Get.height * 0.4 + : Get.height * 0.75, // الحد الأقصى للشاشة المفتوحة + ), decoration: BoxDecoration( gradient: _D.cardGradient(), borderRadius: BorderRadius.circular(_D.radiusCard), @@ -155,26 +129,14 @@ class MainBottomMenuMap extends StatelessWidget { width: 1.2, ), ), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(_D.radiusCard), - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Colors.white.withOpacity(0.08), - Colors.transparent, - ], - ), - ), - child: ClipRRect( - borderRadius: BorderRadius.circular(_D.radiusCard), - child: SingleChildScrollView( - physics: const NeverScrollableScrollPhysics(), - child: controller.isMainBottomMenuMap - ? _CollapsedView(controller: controller) - : _ExpandedView(controller: controller, context: context), - ), + child: ClipRRect( + borderRadius: BorderRadius.circular(_D.radiusCard), + // تفعيل السحب والنزول + child: SingleChildScrollView( + physics: const BouncingScrollPhysics(), + child: controller.isMainBottomMenuMap + ? _CollapsedView(controller: controller) + : _ExpandedView(controller: controller, context: context), ), ), ), @@ -185,7 +147,7 @@ class MainBottomMenuMap extends StatelessWidget { } // ───────────────────────────────────────────────────────────────────────────── -// COLLAPSED VIEW - Modern & Elegant +// COLLAPSED VIEW // ───────────────────────────────────────────────────────────────────────────── class _CollapsedView extends StatelessWidget { @@ -199,7 +161,6 @@ class _CollapsedView extends StatelessWidget { return Column( mainAxisSize: MainAxisSize.min, children: [ - // ── Animated drag handle ───────────────────────────────────────────── const SizedBox(height: 14), AnimatedContainer( duration: _D.fast, @@ -217,12 +178,9 @@ class _CollapsedView extends StatelessWidget { ), ), const SizedBox(height: 16), - - // ── Main interactive search card ───────────────────────────────────── Semantics( button: true, label: 'Open destination search'.tr, - hint: 'Double tap to open search or enter destination'.tr, child: Material( color: Colors.transparent, child: InkWell( @@ -233,7 +191,6 @@ class _CollapsedView extends StatelessWidget { const EdgeInsets.symmetric(horizontal: 18, vertical: 8), child: Row( children: [ - // Animated search icon with glow AnimatedContainer( duration: _D.medium, width: 48, @@ -243,15 +200,10 @@ class _CollapsedView extends StatelessWidget { borderRadius: BorderRadius.circular(_D.radiusPill), boxShadow: _D.glowShadow(AppColor.primaryColor), ), - child: const Icon( - Icons.search_rounded, - color: Colors.white, - size: 22, - ), + child: const Icon(Icons.search_rounded, + color: Colors.white, size: 22), ), const SizedBox(width: 16), - - // Dynamic text content Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -282,72 +234,23 @@ class _CollapsedView extends StatelessWidget { ), const SizedBox(height: 2), if (!controller.noCarString) - AnimatedOpacity( - duration: _D.fast, - opacity: 1, - child: Text( - 'Tap to search your destination'.tr, - style: AppStyle.subtitle.copyWith( - fontSize: 12, - color: Colors.grey.shade500, - fontWeight: FontWeight.w400, - ), + Text( + 'Tap to search your destination'.tr, + style: AppStyle.subtitle.copyWith( + fontSize: 12, + color: Colors.grey.shade500, + fontWeight: FontWeight.w400, ), ), ], ), ), - - // Elegant expand indicator - Container( - padding: const EdgeInsets.symmetric( - horizontal: 14, vertical: 8), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - AppColor.primaryColor.withOpacity(0.12), - AppColor.primaryColor.withOpacity(0.06), - ], - ), - borderRadius: BorderRadius.circular(_D.radiusPill), - border: Border.all( - color: AppColor.primaryColor.withOpacity(0.25), - width: 1, - ), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - AnimatedRotation( - duration: _D.fast, - turns: 0, - child: Icon( - Icons.keyboard_arrow_up_rounded, - color: AppColor.primaryColor, - size: 20, - ), - ), - const SizedBox(width: 4), - Text( - 'Open'.tr, - style: TextStyle( - color: AppColor.primaryColor, - fontSize: 12.5, - fontWeight: FontWeight.w700, - letterSpacing: 0.3, - ), - ), - ], - ), - ), ], ), ), ), ), ), - - // ── Recent places - Modern horizontal chips ─────────────────────────── if (controller.recentPlaces.isNotEmpty) ...[ const SizedBox(height: 12), Container( @@ -370,7 +273,7 @@ class _CollapsedView extends StatelessWidget { } // ───────────────────────────────────────────────────────────────────────────── -// EXPANDED VIEW - Dynamic Route Planner +// EXPANDED VIEW - Grouped Layout // ───────────────────────────────────────────────────────────────────────────── class _ExpandedView extends StatelessWidget { @@ -384,7 +287,6 @@ class _ExpandedView extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - // ── Animated drag handle ───────────────────────────────────────────── const SizedBox(height: 14), Center( child: AnimatedContainer( @@ -404,49 +306,20 @@ class _ExpandedView extends StatelessWidget { ), ), - // ── Modern Header with gradient ────────────────────────────────────── + // ── Header ── Container( padding: const EdgeInsets.fromLTRB(20, 18, 16, 14), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.transparent, - Colors.grey.shade50.withOpacity(0.3), - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - ), - ), child: Row( children: [ - // Animated icon container - AnimatedContainer( - duration: _D.medium, - width: 42, - height: 42, - decoration: BoxDecoration( - gradient: _D.primaryGradient(), - borderRadius: BorderRadius.circular(_D.radiusInner), - boxShadow: _D.glowShadow(AppColor.primaryColor), - ), - child: const Icon( - Icons.alt_route_rounded, - color: Colors.white, - size: 20, - ), - ), - const SizedBox(width: 14), Text( 'Plan Your Route'.tr, style: AppStyle.title.copyWith( fontWeight: FontWeight.w800, fontSize: 18, letterSpacing: -0.5, - height: 1.2, ), ), const Spacer(), - // Elegant close button Semantics( button: true, label: 'Close panel'.tr, @@ -455,26 +328,15 @@ class _ExpandedView extends StatelessWidget { child: InkWell( onTap: controller.changeMainBottomMenuMap, borderRadius: BorderRadius.circular(_D.radiusPill), - child: AnimatedContainer( - duration: _D.fast, + child: Container( width: 38, height: 38, decoration: BoxDecoration( color: Colors.grey.shade100, shape: BoxShape.circle, - boxShadow: [ - BoxShadow( - color: Colors.grey.shade200.withOpacity(0.5), - blurRadius: 8, - offset: const Offset(0, 2), - ), - ], - ), - child: Icon( - Icons.keyboard_arrow_down_rounded, - size: 24, - color: Colors.grey.shade600, ), + child: Icon(Icons.keyboard_arrow_down_rounded, + size: 24, color: Colors.grey.shade600), ), ), ), @@ -483,25 +345,9 @@ class _ExpandedView extends StatelessWidget { ), ), - // Subtle separator with gradient - Container( - height: 1, - margin: const EdgeInsets.symmetric(horizontal: 20), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.transparent, - Colors.grey.shade200, - Colors.transparent, - ], - ), - ), - ), - const SizedBox(height: 16), + // ── Group 1: Core Routing ── + _buildSectionTitle('Route'.tr), - // ── Dynamic Route Timeline ─────────────────────────────────────────── - - // Start location row _buildTimelineItem( dotColor: AppColor.primaryColor, showTopLine: false, @@ -520,7 +366,6 @@ class _ExpandedView extends StatelessWidget { ), ), - // Dynamic waypoints with color coding ...List.generate(controller.activeMenuWaypointCount, (index) { final wpName = controller.menuWaypointNames[index]; final isSet = controller.menuWaypoints[index] != null; @@ -537,151 +382,56 @@ class _ExpandedView extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), decoration: BoxDecoration( gradient: LinearGradient( - colors: [ - soft.withOpacity(0.9), - soft.withOpacity(0.6), - ], - ), + colors: [soft.withOpacity(0.9), soft.withOpacity(0.6)]), borderRadius: BorderRadius.circular(_D.radiusInner), border: Border.all( - color: - isSet ? accent.withOpacity(0.35) : Colors.grey.shade200, - width: 1, - ), - boxShadow: isSet - ? [ - BoxShadow( - color: accent.withOpacity(0.08), - blurRadius: 12, - offset: const Offset(0, 3), - ) - ] - : null, + color: isSet + ? accent.withOpacity(0.35) + : Colors.grey.shade200), ), child: Row( children: [ - // Animated waypoint number badge - AnimatedContainer( - duration: _D.fast, + Container( width: 26, height: 26, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: index == 0 - ? [Colors.amber.shade400, Colors.amber.shade700] - : [ - Colors.deepPurple.shade300, - Colors.deepPurple.shade500 - ], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ), - shape: BoxShape.circle, - boxShadow: [ - BoxShadow( - color: accent.withOpacity(0.35), - blurRadius: 8, - offset: const Offset(0, 3), - ), - ], - ), + decoration: + BoxDecoration(color: accent, shape: BoxShape.circle), child: Center( - child: Text( - '${index + 1}', - style: const TextStyle( - color: Colors.white, - fontSize: 11, - fontWeight: FontWeight.w800, - letterSpacing: -0.3, - ), - ), - ), + child: Text('${index + 1}', + style: const TextStyle( + color: Colors.white, + fontSize: 11, + fontWeight: FontWeight.w800))), ), const SizedBox(width: 12), Expanded( - child: Semantics( - button: true, - label: isSet - ? '${'Waypoint'.tr} $wpName' - : '${'Stop'.tr} ${index + 1}', - hint: 'Double tap to set or change this waypoint on the map' - .tr, - child: GestureDetector( - onTap: () { - controller.changeMainBottomMenuMap(); - controller.startPickingWaypointOnMap(index); - }, - child: Text( - isSet ? wpName : '${'Stop'.tr} ${index + 1}', - style: TextStyle( - fontSize: 13.5, - color: isSet - ? accent.withOpacity(0.9) - : Colors.grey.shade400, - fontWeight: isSet ? FontWeight.w600 : FontWeight.w400, - fontStyle: - isSet ? FontStyle.normal : FontStyle.italic, - height: 1.3, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, + child: GestureDetector( + onTap: () { + controller.changeMainBottomMenuMap(); + controller.startPickingWaypointOnMap(index); + }, + child: Text( + isSet ? wpName : '${'Stop'.tr} ${index + 1}', + style: TextStyle( + fontSize: 13.5, + color: isSet + ? accent.withOpacity(0.9) + : Colors.grey.shade400, + fontWeight: isSet ? FontWeight.w600 : FontWeight.w400, ), + maxLines: 1, + overflow: TextOverflow.ellipsis, ), )), - // Map button with hover effect simulation - Semantics( - button: true, - label: 'Pick location on map'.tr, - child: GestureDetector( - onTap: () { - controller.changeMainBottomMenuMap(); - controller.startPickingWaypointOnMap(index); - }, - child: AnimatedContainer( - duration: _D.fast, - width: 34, - height: 34, - margin: const EdgeInsets.symmetric(horizontal: 4), - decoration: BoxDecoration( - color: accent.withOpacity(0.12), - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: accent.withOpacity(0.25), - width: 1, - ), - ), - child: Icon( - Icons.map_outlined, - color: accent, - size: 17, - ), - ), - ), - ), - // Remove button with subtle animation - Semantics( - button: true, - label: 'Remove waypoint'.tr, - child: GestureDetector( - onTap: () => controller.removeMenuWaypoint(index), - child: AnimatedContainer( - duration: _D.fast, - width: 28, - height: 28, - decoration: BoxDecoration( - color: Colors.red.shade50, - shape: BoxShape.circle, - border: Border.all( - color: Colors.red.shade100, - width: 1, - ), - ), - child: Icon( - Icons.close_rounded, - color: Colors.red.shade400, - size: 15, - ), - ), + GestureDetector( + onTap: () => controller.removeMenuWaypoint(index), + child: Container( + width: 28, + height: 28, + decoration: BoxDecoration( + color: Colors.red.shade50, shape: BoxShape.circle), + child: Icon(Icons.close_rounded, + color: Colors.red.shade400, size: 15), ), ), ], @@ -690,87 +440,40 @@ class _ExpandedView extends StatelessWidget { ); }), - // Add stop button - Modern CTA style if (controller.activeMenuWaypointCount < 2) _buildTimelineItem( dotColor: Colors.orange.shade300, isDotDashed: true, showTopLine: true, showBottomLine: true, - child: Semantics( - button: true, - label: 'Add a new waypoint stop'.tr, - child: Material( - color: Colors.transparent, - child: InkWell( - onTap: () => controller.addMenuWaypoint(), + child: InkWell( + onTap: () => controller.addMenuWaypoint(), + borderRadius: BorderRadius.circular(_D.radiusInner), + child: Container( + padding: + const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + decoration: BoxDecoration( borderRadius: BorderRadius.circular(_D.radiusInner), - child: AnimatedContainer( - duration: _D.fast, - padding: const EdgeInsets.symmetric( - horizontal: 16, vertical: 12), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(_D.radiusInner), - border: Border.all( - color: Colors.orange.shade200, - style: BorderStyle.solid, - width: 1.5, - ), - gradient: LinearGradient( - colors: [ - Colors.orange.shade50.withOpacity(0.6), - Colors.orange.shade50.withOpacity(0.3), - ], - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - Icons.add_location_alt_outlined, - color: Colors.orange.shade500, - size: 18, - ), - const SizedBox(width: 10), - Text( - 'Add a Stop'.tr, - style: TextStyle( + border: Border.all(color: Colors.orange.shade200, width: 1.5), + color: Colors.orange.shade50.withOpacity(0.6), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.add_location_alt_outlined, + color: Colors.orange.shade500, size: 18), + const SizedBox(width: 10), + Text('Add a Stop'.tr, + style: TextStyle( color: Colors.orange.shade700, fontSize: 13.5, - fontWeight: FontWeight.w600, - letterSpacing: 0.2, - ), - ), - const SizedBox(width: 10), - Container( - padding: const EdgeInsets.symmetric( - horizontal: 8, vertical: 3), - decoration: BoxDecoration( - color: Colors.orange.shade100, - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: Colors.orange.shade200, - width: 1, - ), - ), - child: Text( - '+5 ${'min'.tr}', - style: TextStyle( - color: Colors.orange.shade700, - fontSize: 10.5, - fontWeight: FontWeight.w700, - ), - ), - ), - ], - ), - ), + fontWeight: FontWeight.w600)), + ], ), ), ), ), - // Destination row with elegant styling _buildTimelineItem( dotColor: Colors.red.shade500, showTopLine: true, @@ -782,121 +485,74 @@ class _ExpandedView extends StatelessWidget { ), ), - // ── Smart Surcharge banner ─────────────────────────────────────────── - if (controller.activeMenuWaypointCount > 0) - AnimatedContainer( - duration: _D.medium, - margin: const EdgeInsets.fromLTRB(20, 8, 20, 0), - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.orange.shade50.withOpacity(0.95), - Colors.amber.shade50.withOpacity(0.85), - ], - ), - borderRadius: BorderRadius.circular(_D.radiusInner), - border: Border.all( - color: Colors.orange.shade100.withOpacity(0.8), - width: 1, - ), - boxShadow: [ - BoxShadow( - color: Colors.orange.shade100.withOpacity(0.3), - blurRadius: 12, - offset: const Offset(0, 4), - ), - ], - ), - child: Row( - children: [ - AnimatedContainer( - duration: _D.fast, - width: 30, - height: 30, - decoration: BoxDecoration( - color: Colors.orange.shade100, - borderRadius: BorderRadius.circular(10), - boxShadow: [ - BoxShadow( - color: Colors.orange.shade200.withOpacity(0.4), - blurRadius: 6, - offset: const Offset(0, 2), - ), - ], - ), - child: Icon( - Icons.schedule_rounded, - size: 15, - color: Colors.orange.shade700, - ), - ), - const SizedBox(width: 12), - Expanded( - child: Text.rich( - TextSpan( - children: [ - TextSpan( - text: '${controller.activeMenuWaypointCount} ', - style: TextStyle( - fontSize: 13, - color: Colors.orange.shade800, - fontWeight: FontWeight.w700, - ), - ), - TextSpan( - text: '${'stop(s)'.tr} · +', - style: TextStyle( - fontSize: 12.5, - color: Colors.orange.shade600, - fontWeight: FontWeight.w500, - ), - ), - TextSpan( - text: '${controller.activeMenuWaypointCount * 5} ', - style: TextStyle( - fontSize: 13, - color: Colors.orange.shade800, - fontWeight: FontWeight.w700, - ), - ), - TextSpan( - text: 'min added to fare'.tr, - style: TextStyle( - fontSize: 12.5, - color: Colors.orange.shade600, - fontWeight: FontWeight.w500, - ), - ), - ], - ), - ), - ), - ], + const SizedBox(height: 16), + + // ── Group 2: Quick Access ── + _buildSectionDivider(), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _buildSectionTitle('Quick Access'.tr), + const FaviouratePlacesDialog(), // تم نقلها هنا لتكون جزء من الوصول السريع + ], + ), + + if (controller.recentPlaces.isNotEmpty) + Container( + height: 40, + margin: const EdgeInsets.only(bottom: 16), + child: ListView.separated( + padding: const EdgeInsets.symmetric(horizontal: 20), + scrollDirection: Axis.horizontal, + itemCount: controller.recentPlaces.length, + separatorBuilder: (_, __) => const SizedBox(width: 10), + itemBuilder: (context, index) => + _RecentPlaceChip(controller: controller, index: index), ), ), - const SizedBox(height: 14), + // ── Group 3: Advanced Tools ── + _buildSectionDivider(), + _buildSectionTitle('Advanced Tools'.tr), - // ── WhatsApp button - Modern card style ────────────────────────────── Padding( padding: const EdgeInsets.symmetric(horizontal: 18), child: _WhatsAppLinkButton(controller: controller), ), - const SizedBox(height: 12), - - // ── Order type button - Dynamic toggle style ───────────────────────── Padding( padding: const EdgeInsets.symmetric(horizontal: 18), child: _OrderTypeButton(controller: controller), ), - const SizedBox(height: 18), + const SizedBox(height: 24), // مساحة سفلية لضمان راحة السحب ], ); } + Widget _buildSectionTitle(String title) { + return Padding( + padding: const EdgeInsets.only(left: 20, right: 20, bottom: 12), + child: Text( + title, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.grey.shade400, + letterSpacing: 0.5, + ), + ), + ); + } + + Widget _buildSectionDivider() { + return Container( + height: 1, + margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 16), + color: Colors.grey.shade200, + ); + } + Widget _buildTimelineItem({ required Color dotColor, required bool showTopLine, @@ -916,87 +572,21 @@ class _ExpandedView extends StatelessWidget { child: Column( children: [ if (showTopLine) - AnimatedContainer( - duration: _D.fast, - width: 2.5, - height: 12, - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Colors.grey.shade200.withOpacity(0.4), - Colors.grey.shade300, - ], - ), - borderRadius: const BorderRadius.vertical( - top: Radius.circular(2), - ), - ), - ), - // Animated dot with pulse effect simulation - AnimatedContainer( - duration: _D.medium, - width: isDotDashed ? 15 : 15, - height: isDotDashed ? 15 : 15, + Container( + width: 2.5, height: 12, color: Colors.grey.shade300), + Container( + width: 15, + height: 15, decoration: BoxDecoration( - color: isDotDashed - ? Colors.transparent - : dotColor.withOpacity(0.95), + color: isDotDashed ? Colors.transparent : dotColor, shape: BoxShape.circle, - border: Border.all( - color: isDotDashed ? dotColor : dotColor.withOpacity(0.3), - width: isDotDashed ? 2 : 3, - style: - isDotDashed ? BorderStyle.solid : BorderStyle.solid, - ), - boxShadow: isDotDashed - ? [] - : [ - BoxShadow( - color: dotColor.withOpacity(0.35), - blurRadius: 10, - spreadRadius: 2, - ), - BoxShadow( - color: dotColor.withOpacity(0.15), - blurRadius: 20, - spreadRadius: -5, - ), - ], + border: + Border.all(color: dotColor, width: isDotDashed ? 2 : 3), ), - child: isDotDashed - ? Center( - child: Container( - width: 5, - height: 5, - decoration: BoxDecoration( - color: dotColor, - shape: BoxShape.circle, - ), - ), - ) - : null, ), if (showBottomLine) - AnimatedContainer( - duration: _D.fast, - width: 2.5, - height: 12, - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Colors.grey.shade300, - Colors.grey.shade200.withOpacity(0.4), - ], - ), - borderRadius: const BorderRadius.vertical( - bottom: Radius.circular(2), - ), - ), - ), + Container( + width: 2.5, height: 12, color: Colors.grey.shade300), ], ), ), @@ -1009,7 +599,7 @@ class _ExpandedView extends StatelessWidget { } // ───────────────────────────────────────────────────────────────────────────── -// MAP PICKER OVERLAY - Glassmorphism Design +// MAP PICKER OVERLAY // ───────────────────────────────────────────────────────────────────────────── class _MapPickerOverlay extends StatelessWidget { @@ -1017,21 +607,19 @@ class _MapPickerOverlay extends StatelessWidget { const _MapPickerOverlay({required this.controller}); String _getModeTitle(BuildContext context) { - if (controller.isPickingWaypoint) { + if (controller.isPickingWaypoint) return 'Move map to set stop'.tr + ' ${controller.pickingWaypointIndex + 1}'.tr; - } - if (controller.passengerStartLocationFromMap) { + if (controller.passengerStartLocationFromMap) return controller.isAnotherOreder ? 'Now set the pickup point for the other person'.tr : 'Move map to your pickup point'.tr; - } else if (controller.startLocationFromMap) { + if (controller.startLocationFromMap) return 'Move map to set start location'.tr; - } else if (controller.workLocationFromMap) { + if (controller.workLocationFromMap) return 'Move map to your work location'.tr; - } else if (controller.homeLocationFromMap) { + if (controller.homeLocationFromMap) return 'Move map to your home location'.tr; - } return 'Move map to select destination'.tr; } @@ -1072,295 +660,97 @@ class _MapPickerOverlay extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - // ── Dynamic instruction banner with gradient ─────────────────────── - AnimatedContainer( - duration: _D.medium, + Container( padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 14), decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - modeColor, - modeColor.withOpacity(0.88), - modeColor.withOpacity(0.75), - ], - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ), + color: modeColor, borderRadius: BorderRadius.circular(_D.radiusCard), - boxShadow: _D.glowShadow(modeColor, intensity: 0.5), - border: Border.all( - color: Get.isDarkMode - ? Colors.white.withOpacity(0.15) - : Colors.white.withOpacity(0.35), - width: 1, - ), ), child: Row( children: [ - AnimatedContainer( - duration: _D.fast, - width: 38, - height: 38, - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.22), - borderRadius: BorderRadius.circular(12), - border: Border.all( - color: Colors.white.withOpacity(0.3), - width: 1, - ), - ), - child: Icon( - _getModeIcon(), - color: Colors.white, - size: 19, - ), - ), + Icon(_getModeIcon(), color: Colors.white, size: 19), const SizedBox(width: 14), Expanded( child: Text( _getModeTitle(context), style: const TextStyle( - color: Colors.white, - fontWeight: FontWeight.w700, - fontSize: 14, - height: 1.3, - letterSpacing: -0.2, - ), + color: Colors.white, + fontWeight: FontWeight.w700, + fontSize: 14), ), ), ], ), ), - const SizedBox(height: 12), - - // ── Glassmorphism coordinate card ───────────────────────────────── Container( decoration: BoxDecoration( - color: AppColor.secondaryColor.withOpacity(0.98), + color: AppColor.secondaryColor, borderRadius: BorderRadius.circular(_D.radiusCard), boxShadow: _D.cardShadow, - border: Border.all( - color: Get.isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.white.withOpacity(0.7), - width: 1.3, - ), ), - child: ClipRRect( - borderRadius: BorderRadius.circular(_D.radiusCard), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - // Coordinate display with modern styling - Padding( - padding: const EdgeInsets.fromLTRB(20, 18, 20, 2), - child: Row( - children: [ - AnimatedContainer( - duration: _D.fast, - width: 34, - height: 34, - decoration: BoxDecoration( - color: modeColor.withOpacity(0.12), - borderRadius: BorderRadius.circular(11), - border: Border.all( - color: modeColor.withOpacity(0.25), - width: 1, - ), - ), - child: Icon( - Icons.gps_fixed_rounded, - color: modeColor, - size: 16, - ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(20, 18, 20, 2), + child: Row( + children: [ + Icon(Icons.gps_fixed_rounded, color: modeColor, size: 16), + const SizedBox(width: 14), + Expanded( + child: Text( + '${controller.newMyLocation.latitude.toStringAsFixed(5)}, ${controller.newMyLocation.longitude.toStringAsFixed(5)}', + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade700, + fontWeight: FontWeight.w500), ), - const SizedBox(width: 14), - Expanded( - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 12, vertical: 8), - decoration: BoxDecoration( - color: Colors.grey.shade50, - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: Colors.grey.shade200, - width: 1, - ), - ), - child: Text( - '${controller.newMyLocation.latitude.toStringAsFixed(5)}, ' - '${controller.newMyLocation.longitude.toStringAsFixed(5)}', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade700, - fontFeatures: const [ - FontFeature.tabularFigures() - ], - letterSpacing: 0.3, - fontWeight: FontWeight.w500, - ), - ), - ), - ), - const SizedBox(width: 10), - // Live indicator badge - Container( - padding: const EdgeInsets.symmetric( - horizontal: 9, vertical: 4), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.green.shade100, - Colors.green.shade50, - ], - ), - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: Colors.green.shade200, - width: 1, - ), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - AnimatedContainer( - duration: const Duration(milliseconds: 500), - width: 7, - height: 7, - decoration: BoxDecoration( - color: Colors.green.shade500, - shape: BoxShape.circle, - boxShadow: [ - BoxShadow( - color: Colors.green.shade300 - .withOpacity(0.6), - blurRadius: 6, - spreadRadius: 1, - ), - ], - ), - ), - const SizedBox(width: 5), - Text( - 'Live', - style: TextStyle( - fontSize: 10.5, - color: Colors.green.shade700, - fontWeight: FontWeight.w700, - letterSpacing: 0.5, - ), - ), - ], - ), - ), - ], - ), - ), - - const SizedBox(height: 16), - - // Elegant separator - Container( - height: 1, - margin: const EdgeInsets.symmetric(horizontal: 20), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.transparent, - Colors.grey.shade200, - Colors.transparent, - ], ), - ), + ], ), - - // Action buttons with modern styling - Padding( - padding: const EdgeInsets.fromLTRB(16, 14, 16, 18), - child: Row( - children: [ - // Cancel button - Subtle outline style - Expanded( - flex: 2, - child: AnimatedContainer( - duration: _D.fast, - child: OutlinedButton.icon( - onPressed: () { - controller.isPickerShown = false; - controller.passengerStartLocationFromMap = - false; - controller.startLocationFromMap = false; - controller.workLocationFromMap = false; - controller.homeLocationFromMap = false; - controller.isPickingWaypoint = false; - controller.pickingWaypointIndex = -1; - if (!controller.isMainBottomMenuMap) { - controller.isMainBottomMenuMap = true; - controller.mainBottomMenuMapHeight = - Get.height * .22; - } - controller.update(); - }, - style: OutlinedButton.styleFrom( - foregroundColor: Colors.grey.shade600, - side: BorderSide( - color: Colors.grey.shade200, width: 1.5), - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(_D.radiusBtn), - ), - padding: - const EdgeInsets.symmetric(vertical: 14), - elevation: 0, - ), - icon: const Icon(Icons.close_rounded, size: 17), - label: Text( - 'Cancel'.tr, - style: const TextStyle( - fontSize: 13.5, - fontWeight: FontWeight.w600), - ), - ), - ), + ), + const SizedBox(height: 16), + Padding( + padding: const EdgeInsets.fromLTRB(16, 14, 16, 18), + child: Row( + children: [ + Expanded( + flex: 2, + child: OutlinedButton( + onPressed: () { + controller.isPickerShown = false; + controller.passengerStartLocationFromMap = false; + controller.startLocationFromMap = false; + controller.workLocationFromMap = false; + controller.homeLocationFromMap = false; + controller.isPickingWaypoint = false; + controller.pickingWaypointIndex = -1; + if (!controller.isMainBottomMenuMap) { + controller.isMainBottomMenuMap = true; + controller.mainBottomMenuMapHeight = + Get.height * .22; + } + controller.update(); + }, + child: Text('Cancel'.tr), ), - const SizedBox(width: 12), - // Confirm button - Gradient with glow - Expanded( - flex: 3, - child: AnimatedContainer( - duration: _D.fast, - child: ElevatedButton.icon( - onPressed: () => - _onConfirmTap(controller, context), - style: ElevatedButton.styleFrom( - backgroundColor: modeColor, - foregroundColor: Colors.white, - elevation: 0, - shadowColor: Colors.transparent, - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(_D.radiusBtn), - ), - padding: - const EdgeInsets.symmetric(vertical: 14), - ), - icon: Icon(_getModeIcon(), size: 18), - label: Text( - _getConfirmLabel(context), - style: const TextStyle( - fontWeight: FontWeight.w700, - fontSize: 13.5, - letterSpacing: 0.2), - ), - ), - ), + ), + const SizedBox(width: 12), + Expanded( + flex: 3, + child: ElevatedButton( + onPressed: () => _onConfirmTap(controller, context), + style: ElevatedButton.styleFrom( + backgroundColor: modeColor), + child: Text(_getConfirmLabel(context), + style: const TextStyle(color: Colors.white)), ), - ], - ), + ), + ], ), - ], - ), + ), + ], ), ), ], @@ -1368,23 +758,15 @@ class _MapPickerOverlay extends StatelessWidget { ); } - // ── confirm logic (unchanged) ───────────────────────────────────────────── Future _onConfirmTap( MapPassengerController controller, BuildContext context) async { await Future.delayed(const Duration(milliseconds: 280)); - final LatLng currentCameraPosition = LatLng( - controller.newMyLocation.latitude, - controller.newMyLocation.longitude, - ); - Log.print( - '🌐 MAP PICKER CENTER: ${currentCameraPosition.latitude}, ${currentCameraPosition.longitude}'); - Log.print( - '✅ _onConfirmTap confirmed coordinates: ${currentCameraPosition.latitude}, ${currentCameraPosition.longitude}'); + controller.newMyLocation.latitude, controller.newMyLocation.longitude); if (controller.isPickingWaypoint && controller.pickingWaypointIndex >= 0) { - final int wpIndex = controller.pickingWaypointIndex; - controller.setMenuWaypointFromMap(wpIndex, currentCameraPosition); + controller.setMenuWaypointFromMap( + controller.pickingWaypointIndex, currentCameraPosition); mySnackbarSuccess('Waypoint has been set successfully'.tr); return; } @@ -1404,10 +786,8 @@ class _MapPickerOverlay extends StatelessWidget { controller.isMainBottomMenuMap = true; controller.mainBottomMenuMapHeight = Get.height * .22; controller.update(); - await controller.getDirectionMap( - '${start.latitude},${start.longitude}', - '${controller.myDestination.latitude},${controller.myDestination.longitude}', - ); + await controller.getDirectionMap('${start.latitude},${start.longitude}', + '${controller.myDestination.latitude},${controller.myDestination.longitude}'); controller.showBottomSheet1(); return; } @@ -1425,9 +805,8 @@ class _MapPickerOverlay extends StatelessWidget { } if (controller.workLocationFromMap) { - final LatLng work = currentCameraPosition; box.write(BoxName.addWork, - '${work.latitude.toStringAsFixed(4)} , ${work.longitude.toStringAsFixed(4)}'); + '${currentCameraPosition.latitude.toStringAsFixed(4)} , ${currentCameraPosition.longitude.toStringAsFixed(4)}'); controller.hintTextDestinationPoint = 'To Work'.tr; controller.workLocationFromMap = false; controller.isPickerShown = false; @@ -1437,9 +816,8 @@ class _MapPickerOverlay extends StatelessWidget { } if (controller.homeLocationFromMap) { - final LatLng home = currentCameraPosition; box.write(BoxName.addHome, - '${home.latitude.toStringAsFixed(4)} , ${home.longitude.toStringAsFixed(4)}'); + '${currentCameraPosition.latitude.toStringAsFixed(4)} , ${currentCameraPosition.longitude.toStringAsFixed(4)}'); controller.hintTextDestinationPoint = 'To Home'.tr; controller.homeLocationFromMap = false; controller.isPickerShown = false; @@ -1448,184 +826,69 @@ class _MapPickerOverlay extends StatelessWidget { return; } - final LatLng confirmedDestination = currentCameraPosition; - controller.myDestination = confirmedDestination; + controller.myDestination = currentCameraPosition; controller.hintTextDestinationPoint = - '${confirmedDestination.latitude.toStringAsFixed(4)} , ${confirmedDestination.longitude.toStringAsFixed(4)}'; + '${currentCameraPosition.latitude.toStringAsFixed(4)} , ${currentCameraPosition.longitude.toStringAsFixed(4)}'; controller.placesDestination = []; controller.placeDestinationController.clear(); controller.passengerStartLocationFromMap = true; - controller.isPickerShown = true; // ✅ Keep picker UI open for pickup selection + controller.isPickerShown = true; controller.update(); try { if (controller.isAnotherOreder) { - await controller.mapController?.animateCamera( - CameraUpdate.newLatLng(LatLng( - controller.newStartPointLocation.latitude, - controller.newStartPointLocation.longitude, - )), - ); + await controller.mapController?.animateCamera(CameraUpdate.newLatLng( + LatLng(controller.newStartPointLocation.latitude, + controller.newStartPointLocation.longitude))); } else { - await controller.mapController?.animateCamera( - CameraUpdate.newLatLng(LatLng( - controller.passengerLocation.latitude, - controller.passengerLocation.longitude, - )), - ); + await controller.mapController?.animateCamera(CameraUpdate.newLatLng( + LatLng(controller.passengerLocation.latitude, + controller.passengerLocation.longitude))); } } catch (e) { Log.print("Error occurred: $e"); } - - Get.snackbar( - 'Destination Set'.tr, - controller.isAnotherOreder - ? 'Now set the pickup point for the other person'.tr - : 'Now move the map to your pickup point'.tr, - backgroundColor: Colors.green.shade600, - colorText: Colors.white, - snackPosition: SnackPosition.TOP, - duration: const Duration(seconds: 2), - margin: const EdgeInsets.all(12), - borderRadius: 12, - ); } } // ───────────────────────────────────────────────────────────────────────────── -// HELPER WIDGETS - Modern Redesign +// HELPER WIDGETS // ───────────────────────────────────────────────────────────────────────────── -class _LocationRow extends StatelessWidget { - final IconData icon; - final Color iconColor; - final String label; - final bool isStart; - const _LocationRow({ - required this.icon, - required this.iconColor, - required this.label, - this.isStart = false, - }); - - @override - Widget build(BuildContext context) { - return AnimatedContainer( - duration: _D.fast, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - decoration: BoxDecoration( - gradient: isStart - ? LinearGradient( - colors: [ - AppColor.primaryColor.withOpacity(0.06), - AppColor.primaryColor.withOpacity(0.02), - ], - ) - : null, - color: isStart ? null : Colors.transparent, - borderRadius: BorderRadius.circular(_D.radiusInner), - border: Border.all(color: Colors.grey.shade100, width: 1), - ), - child: Row( - children: [ - AnimatedContainer( - duration: _D.fast, - width: 32, - height: 32, - decoration: BoxDecoration( - color: iconColor.withOpacity(0.12), - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: iconColor.withOpacity(0.2), - width: 1, - ), - ), - child: Icon(icon, color: iconColor, size: 16), - ), - const SizedBox(width: 12), - Expanded( - child: Text( - label, - style: AppStyle.subtitle.copyWith( - fontSize: 13.5, - fontWeight: FontWeight.w500, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - ); - } -} - class _TimelineRow extends StatelessWidget { final IconData icon; final Color iconColor; final Color bgColor; final String label; - const _TimelineRow({ - required this.icon, - required this.iconColor, - required this.bgColor, - required this.label, - }); + const _TimelineRow( + {required this.icon, + required this.iconColor, + required this.bgColor, + required this.label}); @override Widget build(BuildContext context) { - return AnimatedContainer( - duration: _D.fast, + return Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 11), decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - bgColor.withAlpha(15), - bgColor.withAlpha(8), - ], - ), - borderRadius: BorderRadius.circular(_D.radiusInner), - border: Border.all( - color: bgColor.withAlpha(35), - width: 1, - ), - ), + color: bgColor.withAlpha(15), + borderRadius: BorderRadius.circular(_D.radiusInner)), child: Row( children: [ - AnimatedContainer( - duration: _D.fast, - width: 30, - height: 30, - decoration: BoxDecoration( - color: bgColor.withAlpha(25), - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: bgColor.withAlpha(40), - width: 1, - ), - ), - child: Icon(icon, color: iconColor, size: 15), - ), + Icon(icon, color: iconColor, size: 15), const SizedBox(width: 12), Expanded( - child: Text( - label, - style: AppStyle.subtitle.copyWith( - fontSize: 13, - fontWeight: FontWeight.w500, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), + child: Text(label, + style: AppStyle.subtitle + .copyWith(fontSize: 13, fontWeight: FontWeight.w500), + maxLines: 1, + overflow: TextOverflow.ellipsis)), ], ), ); } } -/// شريحة الأماكن الأخيرة - تصميم عصري class _RecentPlaceChip extends StatelessWidget { final MapPassengerController controller; final int index; @@ -1634,7 +897,6 @@ class _RecentPlaceChip extends StatelessWidget { @override Widget build(BuildContext context) { final place = controller.recentPlaces[index]; - return Material( color: Colors.transparent, child: InkWell( @@ -1646,61 +908,30 @@ class _RecentPlaceChip extends StatelessWidget { Get.back(); await controller.getLocation(); await controller.getDirectionMap( - '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', - '${place['latitude']},${place['longitude']}', - ); + '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', + '${place['latitude']},${place['longitude']}'); controller.showBottomSheet1(); }, ); }, - onLongPress: () { - MyDialog().getDialog( - 'Are you sure to delete this location?'.tr, - '', - () { - sql.deleteData(TableName.recentLocations, place['id']); - controller.getFavioratePlaces(); - controller.update(); - Get.back(); - mySnackbarSuccess('deleted'.tr); - }, - ); - }, borderRadius: BorderRadius.circular(_D.radiusChip), - child: AnimatedContainer( - duration: _D.fast, + child: Container( padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 7), decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - AppColor.primaryColor.withOpacity(0.08), - AppColor.primaryColor.withOpacity(0.04), - ], - ), + color: AppColor.primaryColor.withOpacity(0.08), borderRadius: BorderRadius.circular(_D.radiusChip), - border: Border.all( - color: AppColor.primaryColor.withOpacity(0.18), - width: 1, - ), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ - Icon( - Icons.history_rounded, - size: 14, - color: AppColor.primaryColor.withOpacity(0.7), - ), + Icon(Icons.history_rounded, + size: 14, color: AppColor.primaryColor.withOpacity(0.7)), const SizedBox(width: 7), - Text( - place['name'] ?? '', - style: TextStyle( - fontSize: 12.5, - color: AppColor.primaryColor.withOpacity(0.9), - fontWeight: FontWeight.w600, - letterSpacing: -0.2, - ), - ), + Text(place['name'] ?? '', + style: TextStyle( + fontSize: 12.5, + color: AppColor.primaryColor.withOpacity(0.9), + fontWeight: FontWeight.w600)), ], ), ), @@ -1709,7 +940,6 @@ class _RecentPlaceChip extends StatelessWidget { } } -/// زر رابط الواتساب - تصميم بطاقات حديث class _WhatsAppLinkButton extends StatelessWidget { final MapPassengerController controller; const _WhatsAppLinkButton({required this.controller}); @@ -1731,16 +961,14 @@ class _WhatsAppLinkButton extends StatelessWidget { mainAxisSize: MainAxisSize.min, children: [ MyTextForm( - controller: controller.whatsAppLocationText, - label: 'Location Link'.tr, - hint: 'Paste location link here'.tr, - type: TextInputType.url, - ), + controller: controller.whatsAppLocationText, + label: 'Location Link'.tr, + type: TextInputType.url, + hint: 'https://maps.app.goo.gl/...'), const SizedBox(height: 16), MyElevatedButton( - title: 'Go to this location'.tr, - onPressed: () => controller.goToWhatappLocation(), - ), + title: 'Go to this location'.tr, + onPressed: () => controller.goToWhatappLocation()), ], ), ), @@ -1748,58 +976,21 @@ class _WhatsAppLinkButton extends StatelessWidget { ); }, borderRadius: BorderRadius.circular(_D.radiusInner), - child: AnimatedContainer( - duration: _D.fast, + child: Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.green.shade50.withOpacity(0.9), - Colors.green.shade50.withOpacity(0.6), - ], - ), - borderRadius: BorderRadius.circular(_D.radiusInner), - border: Border.all( - color: Colors.green.shade100.withOpacity(0.9), - width: 1, - ), - ), + color: Colors.green.shade50, + borderRadius: BorderRadius.circular(_D.radiusInner)), child: Row( children: [ - AnimatedContainer( - duration: _D.fast, - width: 34, - height: 34, - decoration: BoxDecoration( - color: Colors.green.shade100, - borderRadius: BorderRadius.circular(11), - border: Border.all( - color: Colors.green.shade200, - width: 1, - ), - ), - child: Icon( - Icons.link_rounded, - color: Colors.green.shade700, - size: 18, - ), - ), + Icon(Icons.link_rounded, color: Colors.green.shade700, size: 18), const SizedBox(width: 14), Expanded( - child: Text( - 'Paste WhatsApp location link'.tr, - style: TextStyle( - color: Colors.green.shade800, - fontSize: 13.5, - fontWeight: FontWeight.w600, - ), - ), - ), - Icon( - Icons.arrow_forward_ios_rounded, - size: 13, - color: Colors.green.shade400, - ), + child: Text('Paste WhatsApp location link'.tr, + style: TextStyle( + color: Colors.green.shade800, + fontSize: 13.5, + fontWeight: FontWeight.w600))), ], ), ), @@ -1808,7 +999,6 @@ class _WhatsAppLinkButton extends StatelessWidget { } } -/// زر نوع الطلب - تصميم تفاعلي حديث class _OrderTypeButton extends StatelessWidget { final MapPassengerController controller; const _OrderTypeButton({required this.controller}); @@ -1827,7 +1017,6 @@ class _OrderTypeButton extends StatelessWidget { context: context, builder: (ctx) => CupertinoActionSheet( title: Text('Select Order Type'.tr), - message: Text('Choose who this order is for'.tr), actions: [ CupertinoActionSheetAction( child: Text('I want to order for myself'.tr), @@ -1845,71 +1034,32 @@ class _OrderTypeButton extends StatelessWidget { ), ], cancelButton: CupertinoActionSheetAction( - isDefaultAction: true, - onPressed: () => Navigator.pop(ctx), - child: Text('Cancel'.tr), - ), + isDefaultAction: true, + onPressed: () => Navigator.pop(ctx), + child: Text('Cancel'.tr)), ), ); }, borderRadius: BorderRadius.circular(_D.radiusInner), - child: AnimatedContainer( - duration: _D.fast, + child: Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - accent.withOpacity(0.08), - accent.withOpacity(0.04), - ], - ), - borderRadius: BorderRadius.circular(_D.radiusInner), - border: Border.all( - color: accent.withOpacity(0.22), - width: 1, - ), - ), + color: accent.withOpacity(0.08), + borderRadius: BorderRadius.circular(_D.radiusInner)), child: Row( children: [ - AnimatedContainer( - duration: _D.fast, - width: 34, - height: 34, - decoration: BoxDecoration( - color: accent.withOpacity(0.14), - borderRadius: BorderRadius.circular(11), - border: Border.all( - color: accent.withOpacity(0.25), - width: 1, - ), - ), - child: Icon( - isOther ? Icons.person_rounded : Icons.group_rounded, - color: accent, - size: 17, - ), - ), + Icon(isOther ? Icons.person_rounded : Icons.group_rounded, + color: accent, size: 17), const SizedBox(width: 14), Expanded( - child: Text( - isOther ? 'Order for myself'.tr : 'Order for someone else'.tr, - style: TextStyle( - color: accent, - fontSize: 13.5, - fontWeight: FontWeight.w600, - letterSpacing: -0.2, - ), - ), - ), - AnimatedRotation( - duration: _D.fast, - turns: isOther ? 0.5 : 0, - child: Icon( - Icons.unfold_more_rounded, - color: accent.withOpacity(0.55), - size: 19, - ), - ), + child: Text( + isOther + ? 'Order for myself'.tr + : 'Order for someone else'.tr, + style: TextStyle( + color: accent, + fontSize: 13.5, + fontWeight: FontWeight.w600))), ], ), ), @@ -1918,167 +1068,69 @@ class _OrderTypeButton extends StatelessWidget { } } -// ───────────────────────────────────────────────────────────────────────────── -// FAVOURITE PLACES DIALOG - Modern Modal Design -// ───────────────────────────────────────────────────────────────────────────── - class FaviouratePlacesDialog extends StatelessWidget { const FaviouratePlacesDialog({super.key}); @override Widget build(BuildContext context) { Get.put(MapPassengerController()); - return GetBuilder( - builder: (controller) => Center( - child: InkWell( - borderRadius: BorderRadius.circular(14), - onTap: () async { - final List favoritePlaces = - await sql.getAllData(TableName.placesFavorite); - - Get.defaultDialog( - title: 'Favorite Places'.tr, - titleStyle: AppStyle.title, - content: SizedBox( - width: Get.width * .85, - height: 300, - child: favoritePlaces.isEmpty - ? Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - AnimatedContainer( - duration: _D.medium, - width: 76, - height: 76, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - AppColor.accentColor.withOpacity(0.15), - AppColor.accentColor.withOpacity(0.05), - ], - ), - shape: BoxShape.circle, - border: Border.all( - color: AppColor.accentColor.withOpacity(0.2), - width: 1, - ), - ), - child: const Icon( - Icons.star_border_rounded, - size: 38, - color: AppColor.accentColor, - ), - ), - const SizedBox(height: 16), - Text( - 'No favorite places yet!'.tr, - style: AppStyle.title.copyWith( - fontWeight: FontWeight.w600, - fontSize: 15, - ), - ), - ], - ), - ) - : ListView.separated( - itemCount: favoritePlaces.length, - separatorBuilder: (_, __) => - Divider(height: 1, color: Colors.grey.shade100), - itemBuilder: (context, index) => ListTile( - contentPadding: const EdgeInsets.symmetric( - horizontal: 8, vertical: 4), - leading: AnimatedContainer( - duration: _D.fast, - width: 38, - height: 38, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.amber.shade50, - Colors.amber.shade100.withOpacity(0.5), - ], - ), - borderRadius: BorderRadius.circular(12), - border: Border.all( - color: Colors.amber.shade100, - width: 1, - ), - ), - child: const Icon( - Icons.star, - color: Colors.amber, - size: 19, - ), - ), - title: Text( - favoritePlaces[index]['name'], - style: AppStyle.title.copyWith( - fontSize: 14, - fontWeight: FontWeight.w600, - ), - ), - trailing: IconButton( - icon: const Icon( - Icons.delete_outline, - color: Colors.redAccent, - ), - onPressed: () async { - await sql.deleteData(TableName.placesFavorite, - favoritePlaces[index]['id']); - Get.back(); - Toast.show( - context, - '${'Deleted'.tr} ${favoritePlaces[index]['name']}', - AppColor.redColor, - ); - }, - ), - onTap: () async { + builder: (controller) => InkWell( + borderRadius: BorderRadius.circular(14), + onTap: () async { + final List favoritePlaces = + await sql.getAllData(TableName.placesFavorite); + Get.defaultDialog( + title: 'Favorite Places'.tr, + content: SizedBox( + width: Get.width * .85, + height: 300, + child: favoritePlaces.isEmpty + ? Center(child: Text('No favorite places yet!'.tr)) + : ListView.separated( + itemCount: favoritePlaces.length, + separatorBuilder: (_, __) => + Divider(height: 1, color: Colors.grey.shade100), + itemBuilder: (context, index) => ListTile( + leading: const Icon(Icons.star, + color: Colors.amber, size: 19), + title: Text(favoritePlaces[index]['name']), + trailing: IconButton( + icon: const Icon(Icons.delete_outline, + color: Colors.redAccent), + onPressed: () async { + await sql.deleteData(TableName.placesFavorite, + favoritePlaces[index]['id']); Get.back(); - await controller.getLocation(); - await controller.getDirectionMap( - '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', - '${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}', - ); - controller.showBottomSheet1(); }, ), + onTap: () async { + Get.back(); + await controller.getLocation(); + await controller.getDirectionMap( + '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', + '${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}'); + controller.showBottomSheet1(); + }, ), - ), - confirm: MyElevatedButton( - title: 'Back'.tr, onPressed: () => Get.back()), - ); - }, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - AnimatedContainer( - duration: _D.fast, - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: AppColor.accentColor.withOpacity(0.1), - borderRadius: BorderRadius.circular(10), - ), - child: const Icon( - Icons.star_border_rounded, - color: AppColor.accentColor, - size: 21, - ), - ), - const SizedBox(width: 10), - Text( - 'Favorite Places'.tr, - style: AppStyle.title.copyWith( - fontWeight: FontWeight.w600, - fontSize: 14, - ), - ), - ], + ), ), + confirm: + MyElevatedButton(title: 'Back'.tr, onPressed: () => Get.back()), + ); + }, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.star_border_rounded, + color: AppColor.accentColor, size: 21), + const SizedBox(width: 10), + Text('Favorite Places'.tr, + style: AppStyle.title + .copyWith(fontWeight: FontWeight.w600, fontSize: 14)), + ], ), ), ), diff --git a/lib/views/home/navigation/navigation_controller.dart b/lib/views/home/navigation/navigation_controller.dart index 35ebae8..ea6d68f 100644 --- a/lib/views/home/navigation/navigation_controller.dart +++ b/lib/views/home/navigation/navigation_controller.dart @@ -21,34 +21,31 @@ import 'dart:ui'; import '../../../services/offline_map_service.dart'; +class RouteData { + final List coordinates; + final List> steps; + final double distanceM; + final double durationS; + final String points; + + RouteData({ + required this.coordinates, + required this.steps, + required this.distanceM, + required this.durationS, + required this.points, + }); +} + class NavigationController extends GetxController with GetSingleTickerProviderStateMixin { - // ========================================================================== - // ── Tunables ────────────────────────────────────────────────────────────── - // ========================================================================== - - /// How often we snapshot the current position into the local buffer. - static const Duration _recordInterval = Duration(seconds: 3); - - /// How often we flush the buffer and POST it to the server. + static const Duration _recordInterval = Duration(seconds: 4); static const Duration _uploadInterval = Duration(minutes: 2); - - /// Minimum metres the device must move before we bother recording a point. static const double _minMoveToRecord = 10.0; - - /// Minimum metres the device must move between general location ticks. static const double _minMoveToProcess = 2.0; - - /// Metres off-route before the auto-recalculate countdown starts. static const double _offRouteThresholdM = 25.0; - - /// Seconds the user must remain off-route before auto-recalculate fires. static const int _offRouteTriggerSeconds = 6; - // ========================================================================== - // ── Map state ───────────────────────────────────────────────────────────── - // ========================================================================== - bool isLoading = false; MaplibreMapController? mapController; bool isStyleLoaded = false; @@ -56,42 +53,36 @@ class NavigationController extends GetxController TextEditingController(); LatLng? myLocation; - double heading = 0.0; - /// Smoothed heading used for the car icon and camera bearing. - /// Updated every tick via angle-aware lerp to eliminate snap/jitter. + double _oldHeading = 0.0; + double _targetHeading = 0.0; double _smoothedHeading = 0.0; - // Animation for smooth tracking AnimationController? _animController; LatLng? _oldLoc; LatLng? _targetLoc; - double currentSpeed = 0.0; // km/h - double totalDistance = 0.0; // metres accumulated this session + double currentSpeed = 0.0; + double totalDistance = 0.0; - // MapLibre objects Symbol? carSymbol; Symbol? originSymbol; Symbol? destinationSymbol; Line? remainingRouteLine; Line? traveledRouteLine; - // General location polling Timer? _locationUpdateTimer; LatLng? _lastProcessedLocation; - // Search List placesDestination = []; Timer? _debounce; - // Route LatLng? _finalDestination; + LatLng? _intermediateStop; List> routeSteps = []; List _fullRouteCoordinates = []; int _lastTraveledIndexInFullRoute = 0; - // Navigation guidance bool _nextInstructionSpoken = false; String currentInstruction = ""; String nextInstruction = ""; @@ -99,48 +90,32 @@ class NavigationController extends GetxController String distanceToNextStep = ""; String totalDistanceRemaining = ""; String estimatedTimeRemaining = ""; + dynamic currentManeuverModifier = 0; + String arrivalTime = "--:--"; // NEW: For the active navigation HUD - // Stored route totals (for ETA re-calculation) double _routeTotalDistanceM = 0; double _routeTotalDurationS = 0; - // Camera bool isNavigating = false; + bool isMuted = false; // Sound toggle state + String distanceWithUnit = ""; bool _cameraLockedToUser = true; - bool _mapReady = false; // true only after layout has settled + bool _mapReady = false; - // ========================================================================== - // ── Off-route auto-recalculate ──────────────────────────────────────────── - // ========================================================================== - - /// Wall-clock time when the user first went more than [_offRouteThresholdM] - /// metres away from the nearest route point. Null means on-route. DateTime? _offRouteStartTime; - - /// True while an auto-recalculate triggered from off-route detection is in - /// progress — prevents a second trigger from firing. bool _autoRecalcInProgress = false; - // ========================================================================== - // ── Batch location tracking ─────────────────────────────────────────────── - // ========================================================================== - - /// In-memory ring buffer — points accumulate here every 3 s. final List> _trackBuffer = []; - Timer? _recordTimer; Timer? _uploadBatchTimer; - - /// Last position that was written to the buffer (for distance gate). LatLng? _lastBufferedLocation; DateTime? _lastBufferedTime; - - /// Last position used to accumulate `totalDistance`. LatLng? _lastDistanceLocation; - // ========================================================================== - // ── Speed-adaptive camera ───────────────────────────────────────────────── - // ========================================================================== + List routes = []; + int selectedRouteIndex = 0; + List alternativeRouteLines = []; + List> recentLocations = []; double get _targetZoom { if (currentSpeed < 15) return 19.0; @@ -159,21 +134,48 @@ class NavigationController extends GetxController static final String _routeApiBaseUrl = "${AppLink.routesOsm}/route/v1/driving"; - // ========================================================================== - // ── Lifecycle ───────────────────────────────────────────────────────────── - // ========================================================================== + IconData get currentManeuverIcon { + switch (currentManeuverModifier) { + case 4: // Arrive + return Icons.place_rounded; + case 6: // Roundabout + return Icons.roundabout_right_rounded; + case 2: // Right + return Icons.turn_right_rounded; + case 3: // Slight Right + return Icons.turn_slight_right_rounded; + case -2: // Left + return Icons.turn_left_rounded; + case -1: // Slight Left + return Icons.turn_slight_left_rounded; + case 7: // Keep Right + return Icons.turn_right_rounded; + case -7: // Keep Left + return Icons.turn_left_rounded; + case 0: // Straight + return Icons.straight_rounded; + default: + return Icons.straight_rounded; + } + } + + void toggleMute() { + isMuted = !isMuted; + update(); + } @override void onInit() { super.onInit(); _animController = AnimationController( - vsync: this, duration: const Duration(milliseconds: 1000)); + vsync: this, duration: const Duration(milliseconds: 3800)); _animController!.addListener(() { if (_oldLoc != null && _targetLoc != null && _mapReady) { final t = _animController!.value; final lat = lerpDouble(_oldLoc!.latitude, _targetLoc!.latitude, t)!; final lng = lerpDouble(_oldLoc!.longitude, _targetLoc!.longitude, t)!; myLocation = LatLng(lat, lng); + _smoothedHeading = _lerpAngle(_oldHeading, _targetHeading, t); if (isStyleLoaded) { _updateCarMarker(); @@ -190,9 +192,39 @@ class NavigationController extends GetxController } Future _initialize() async { + _loadRecentLocations(); await _getCurrentLocationAndStartUpdates(); } + void _loadRecentLocations() { + final dynamic stored = box.read(BoxName.recentLocations); + if (stored != null) { + try { + List parsed; + if (stored is String) { + parsed = jsonDecode(stored); + } else if (stored is List) { + parsed = stored; + } else { + parsed = []; + } + + recentLocations = parsed + .map((e) => Map.from(e)) + .toList() + .reversed // Most recent first + .take(3) + .toList(); + } catch (e) { + Log.print("Error decoding recent locations: $e"); + recentLocations = []; + } + } else { + recentLocations = []; + } + update(); + } + @override void onClose() { _locationUpdateTimer?.cancel(); @@ -200,18 +232,12 @@ class NavigationController extends GetxController _uploadBatchTimer?.cancel(); _debounce?.cancel(); _animController?.dispose(); - mapController?.dispose(); + mapController = null; placeDestinationController.dispose(); - - // Final flush before closing so no points are lost _flushBufferToServer(); super.onClose(); } - // ========================================================================== - // ── Map callbacks ───────────────────────────────────────────────────────── - // ========================================================================== - void onMapCreated(MaplibreMapController controller) { mapController = controller; } @@ -220,9 +246,6 @@ class NavigationController extends GetxController isStyleLoaded = true; await _loadCustomIcons(); - // Wait one full frame for the native MapLibre view to finish layout. - // Without this, ANY animateCamera call throws std::domain_error on iOS - // because the view still has zero pixel dimensions at this point. WidgetsBinding.instance.addPostFrameCallback((_) async { await Future.delayed(const Duration(milliseconds: 300)); if (!_mapReady) { @@ -238,6 +261,33 @@ class NavigationController extends GetxController }); } + void onMapTapped(Point point, LatLng tappedPoint) { + if (isNavigating || routes.isEmpty) return; + + int? bestIndex; + double minDistance = 100.0; // 100 meters threshold for tap + + for (int i = 0; i < routes.length; i++) { + for (var coord in routes[i].coordinates) { + final dist = Geolocator.distanceBetween( + tappedPoint.latitude, + tappedPoint.longitude, + coord.latitude, + coord.longitude, + ); + if (dist < minDistance) { + minDistance = dist; + bestIndex = i; + } + } + } + + if (bestIndex != null && bestIndex != selectedRouteIndex) { + HapticFeedback.selectionClick(); + selectRoute(bestIndex); + } + } + Future onMapLongPressed(Point point, LatLng tappedPoint) async { HapticFeedback.mediumImpact(); Get.dialog( @@ -248,15 +298,13 @@ class NavigationController extends GetxController content: const Text('هل تريد الذهاب إلى هذا الموقع؟'), actions: [ TextButton( - child: const Text('إلغاء', style: TextStyle(color: Colors.grey)), - onPressed: () => Get.back(), - ), + child: const Text('إلغاء', style: TextStyle(color: Colors.grey)), + onPressed: () => Get.back()), ElevatedButton( style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xFF0D47A1), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12)), - ), + backgroundColor: const Color(0xFF0D47A1), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12))), child: const Text('اذهب الآن', style: TextStyle(color: Colors.white)), onPressed: () { @@ -269,20 +317,18 @@ class NavigationController extends GetxController ); } - // ========================================================================== - // ── Location polling (every second) ────────────────────────────────────── - // ========================================================================== - Future _getCurrentLocationAndStartUpdates() async { try { final position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); myLocation = LatLng(position.latitude, position.longitude); - _smoothedHeading = position.heading; // seed so first lerp is instant + _targetHeading = position.heading; + _oldHeading = position.heading; + _smoothedHeading = position.heading; update(); if (isStyleLoaded) animateCameraToPosition(myLocation!); _startLocationTimer(); - _startBatchTimers(); // ← start tracking as soon as we have a fix + _startBatchTimers(); } catch (e) { Log.print("Error getting initial location: $e"); } @@ -291,7 +337,7 @@ class NavigationController extends GetxController void _startLocationTimer() { _locationUpdateTimer?.cancel(); _locationUpdateTimer = - Timer.periodic(const Duration(seconds: 1), (_) => _tick()); + Timer.periodic(const Duration(seconds: 4), (_) => _tick()); } Future _tick() async { @@ -299,8 +345,8 @@ class NavigationController extends GetxController final position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); final newLoc = LatLng(position.latitude, position.longitude); + currentSpeed = position.speed * 3.6; - // Gate: ignore micro-jitter if (_lastProcessedLocation != null) { final d = Geolocator.distanceBetween( newLoc.latitude, @@ -311,7 +357,6 @@ class NavigationController extends GetxController if (d < _minMoveToProcess) return; } - // Accumulate session distance if (_lastDistanceLocation != null) { final d = Geolocator.distanceBetween( _lastDistanceLocation!.latitude, @@ -325,62 +370,45 @@ class NavigationController extends GetxController _oldLoc = myLocation ?? newLoc; _targetLoc = newLoc; + + _oldHeading = _smoothedHeading; + if (currentSpeed > 1.5 && _oldLoc != null) { + _targetHeading = Geolocator.bearingBetween( + _oldLoc!.latitude, + _oldLoc!.longitude, + _targetLoc!.latitude, + _targetLoc!.longitude, + ); + } else { + _targetHeading = position.heading; + } + _animController?.forward(from: 0.0); - _lastProcessedLocation = newLoc; - heading = position.heading; - // ── Smooth the heading with an angle-aware exponential lerp ────────── - // Factor 0.25 means ~75 % of the old angle is kept each tick, giving a - // ~4-tick (≈4 s) settling time — smooth enough to look fluid on screen - // while still reacting quickly to real turns. - _smoothedHeading = _lerpAngle(_smoothedHeading, heading, 0.25); - - currentSpeed = position.speed * 3.6; - - // Initial visual update if map is fresh - if (isStyleLoaded && myLocation == null) _updateCarMarker(); + if (isStyleLoaded) _updateCarMarker(); if (_fullRouteCoordinates.isNotEmpty) { _updateTraveledPolylineSmart(newLoc); _checkNavigationStep(newLoc); _recomputeETA(); - - // ── Off-route auto-recalculate ───────────────────────────────────── _checkOffRoute(newLoc); } - update(); } catch (e) { Log.print("Error occurred: $e"); } } - // ========================================================================== - // ── Heading utilities ───────────────────────────────────────────────────── - // ========================================================================== - - /// Lerps from [from] to [to] by factor [t], correctly handling the 0/360 - /// wrap-around so we never spin the wrong way (e.g. 350° → 10° goes +20°, - /// not −340°). double _lerpAngle(double from, double to, double t) { final double diff = ((to - from + 540.0) % 360.0) - 180.0; return (from + diff * t + 360.0) % 360.0; } - // ========================================================================== - // ── Off-route detection ─────────────────────────────────────────────────── - // ========================================================================== - - /// Called every tick while navigating. Measures the distance from [pos] to - /// the nearest upcoming route coordinate. If the driver stays more than - /// [_offRouteThresholdM] metres away for at least [_offRouteTriggerSeconds] - /// seconds, an automatic route recalculation is triggered. void _checkOffRoute(LatLng pos) { if (_autoRecalcInProgress || isLoading) return; if (_fullRouteCoordinates.isEmpty) return; - // Search a window ahead of the last tracked index for the nearest point. const int searchWindow = 80; final int start = _lastTraveledIndexInFullRoute; final int end = min(start + searchWindow, _fullRouteCoordinates.length); @@ -397,109 +425,67 @@ class NavigationController extends GetxController } if (minDist > _offRouteThresholdM) { - // Driver is off the route. if (_offRouteStartTime == null) { _offRouteStartTime = DateTime.now(); - Log.print('⚠️ Off-route detected (${minDist.toStringAsFixed(0)} m). ' - 'Countdown started.'); } else { final elapsed = DateTime.now().difference(_offRouteStartTime!).inSeconds; if (elapsed >= _offRouteTriggerSeconds) { - Log.print('🔄 Auto-recalculate triggered after ${elapsed}s ' - 'off-route (${minDist.toStringAsFixed(0)} m).'); _offRouteStartTime = null; _autoRecalcInProgress = true; recalculateRoute().then((_) => _autoRecalcInProgress = false); } } } else { - // Back on (or close enough to) the route — reset the clock. - if (_offRouteStartTime != null) { - Log.print('✅ Back on route — off-route timer reset.'); - } _offRouteStartTime = null; } } - // ========================================================================== - // ── Batch tracking: record every 3 s, upload every 2 min ───────────────── - // ========================================================================== - void _startBatchTimers() { _recordTimer?.cancel(); _uploadBatchTimer?.cancel(); - _recordTimer = Timer.periodic(_recordInterval, (_) => _recordToBuffer()); _uploadBatchTimer = Timer.periodic(_uploadInterval, (_) => _flushBufferToServer()); - - Log.print('📍 Batch tracking started ' - '(record: ${_recordInterval.inSeconds}s, ' - 'upload: ${_uploadInterval.inMinutes}min)'); } - void _stopBatchTimers() { - _recordTimer?.cancel(); - _uploadBatchTimer?.cancel(); - _recordTimer = null; - _uploadBatchTimer = null; - } - - /// Called every 3 seconds. Adds one point to the buffer if the device - /// has moved enough OR if 60 s have elapsed since the last record. void _recordToBuffer() { - if (myLocation == null) return; - if (myLocation!.latitude == 0 && myLocation!.longitude == 0) return; - + if (myLocation == null || + (myLocation!.latitude == 0 && myLocation!.longitude == 0)) { + return; + } final now = DateTime.now(); - - // Distance gate final distFromLast = _lastBufferedLocation == null ? 999.0 : Geolocator.distanceBetween( _lastBufferedLocation!.latitude, _lastBufferedLocation!.longitude, myLocation!.latitude, - myLocation!.longitude, - ); - + myLocation!.longitude); final bool moved = distFromLast > _minMoveToRecord && currentSpeed > 0.5; final bool timeForced = _lastBufferedTime == null || now.difference(_lastBufferedTime!).inSeconds >= 60; - if (!moved && !timeForced) return; _lastBufferedLocation = myLocation; _lastBufferedTime = now; - final point = { + _trackBuffer.add({ 'lat': double.parse(myLocation!.latitude.toStringAsFixed(6)), 'lng': double.parse(myLocation!.longitude.toStringAsFixed(6)), 'spd': double.parse(currentSpeed.toStringAsFixed(1)), - 'head': heading.toStringAsFixed(0), + 'head': _smoothedHeading.toStringAsFixed(0), 'dist': double.parse(totalDistance.toStringAsFixed(1)), 'ts': now.toIso8601String(), - }; - - _trackBuffer.add(point); - Log.print('📌 Buffered point #${_trackBuffer.length} ' - '(${point['lat']}, ${point['lng']}) ${point['spd']} km/h'); + }); } - /// Drains the buffer and POSTs the JSON batch to the server. - /// Called every 2 minutes (and once more on close). Future _flushBufferToServer() async { if (_trackBuffer.isEmpty) return; - final batch = List>.from(_trackBuffer); _trackBuffer.clear(); - final String passengerId = (box.read(BoxName.passengerID) ?? '').toString(); - Log.print('📤 Uploading ${batch.length} tracking points ' - 'for passenger $passengerId...'); - try { await CRUD().post( link: '${AppLink.locationServerSide}/add_batch.php', @@ -509,100 +495,73 @@ class NavigationController extends GetxController 'session_dist': totalDistance.toStringAsFixed(1), }, ); - Log.print('✅ Batch uploaded successfully.'); } catch (e) { - // Put the points back so they are retried on the next cycle _trackBuffer.insertAll(0, batch); - Log.print('❌ Batch upload failed – points kept for retry: $e'); } } - // ========================================================================== - // ── Car marker ──────────────────────────────────────────────────────────── - // ========================================================================== - Future _updateCarMarker() async { if (myLocation == null || mapController == null || !isStyleLoaded) return; - if (carSymbol == null) { + // Check if symbol still exists in map controller's internal list + bool exists = + carSymbol != null && mapController!.symbols.contains(carSymbol); + + if (!exists) { + if (carSymbol != null) { + try { + await mapController!.removeSymbol(carSymbol!); + } catch (_) {} + } carSymbol = await mapController!.addSymbol(SymbolOptions( geometry: myLocation, iconImage: 'car_icon', - iconSize: 1.0, + iconSize: 1.6, iconRotate: _smoothedHeading, )); } else { mapController!.updateSymbol( - carSymbol!, - SymbolOptions( - geometry: myLocation, - iconRotate: _smoothedHeading, - ), - ); + carSymbol!, + SymbolOptions( + geometry: myLocation, + iconRotate: _smoothedHeading, + )); } } - // ========================================================================== - // ── Camera ──────────────────────────────────────────────────────────────── - // ========================================================================== - void animateCameraToPosition(LatLng position, {double? zoom, double bearing = 0.0, double tilt = 0.0}) { - // Guard: skip if the native view is not ready yet if (!_mapReady || mapController == null) return; - - mapController!.animateCamera( - CameraUpdate.newCameraPosition( - CameraPosition( - target: position, - zoom: zoom ?? (isNavigating ? _targetZoom : 16.0), - bearing: bearing, - tilt: tilt, - ), - ), - ); + mapController!.animateCamera(CameraUpdate.newCameraPosition(CameraPosition( + target: position, + zoom: zoom ?? (isNavigating ? _targetZoom : 16.0), + bearing: bearing, + tilt: tilt))); } - /// Safe wrapper for animateCamera Bounds to prevent native std::domain_error crash on iOS. Future _safeAnimateCameraBounds(LatLngBounds? bounds, {double left = 60, double top = 60, double right = 60, double bottom = 60}) async { if (bounds == null || mapController == null) return; - try { - // Ensure the coordinates are valid (at least a small span) final latSpan = (bounds.northeast.latitude - bounds.southwest.latitude).abs(); final lngSpan = (bounds.northeast.longitude - bounds.southwest.longitude).abs(); - if (latSpan < 0.0001 && lngSpan < 0.0001) { - Log.print( - '⚠️ _safeAnimateCameraBounds: Point-sized bounds, zooming to center.'); mapController ?.animateCamera(CameraUpdate.newLatLngZoom(bounds.northeast, 16)); return; } - - // Small delay for view stabilization await Future.delayed(const Duration(milliseconds: 200)); - - await mapController?.animateCamera( - CameraUpdate.newLatLngBounds( - bounds, - left: left, - top: top, - right: right, - bottom: bottom, - ), - ); + await mapController?.animateCamera(CameraUpdate.newLatLngBounds(bounds, + left: left, top: top, right: right, bottom: bottom)); } catch (e) { - Log.print('❌ _safeAnimateCameraBounds CRASH PREVENTED in Nav: $e'); try { await mapController - ?.animateCamera(CameraUpdate.newLatLngZoom(bounds.northeast, 14)); + ?.animateCamera(CameraUpdate.newLatLngZoom(bounds!.northeast, 14)); } catch (_) {} } } @@ -616,22 +575,15 @@ class NavigationController extends GetxController _cameraLockedToUser = true; if (myLocation != null) { animateCameraToPosition(myLocation!, - bearing: _smoothedHeading, // ← use smoothed heading - zoom: _targetZoom, - tilt: _targetTilt); + bearing: _smoothedHeading, zoom: _targetZoom, tilt: _targetTilt); } update(); } bool get isCameraLocked => _cameraLockedToUser; - // ========================================================================== - // ── Route polylines ─────────────────────────────────────────────────────── - // ========================================================================== - void _updateTraveledPolylineSmart(LatLng currentPos) { if (_fullRouteCoordinates.isEmpty) return; - const int searchWindow = 60; final int startIndex = _lastTraveledIndexInFullRoute; final int endIndex = @@ -659,200 +611,285 @@ class NavigationController extends GetxController minDist < 50 && closestIdx > _lastTraveledIndexInFullRoute) { _lastTraveledIndexInFullRoute = closestIdx; - _updatePolylinesSets( - _fullRouteCoordinates.sublist(0, closestIdx + 1), - _fullRouteCoordinates.sublist(closestIdx), - ); + _updatePolylinesSets(_fullRouteCoordinates.sublist(0, closestIdx + 1), + _fullRouteCoordinates.sublist(closestIdx)); } } Future _updatePolylinesSets( List traveled, List remaining) async { if (mapController == null || !isStyleLoaded) return; + + // Clear old alternative lines + for (var line in alternativeRouteLines) { + await mapController!.removeLine(line); + } + alternativeRouteLines.clear(); - if (remainingRouteLine != null) + if (remainingRouteLine != null) { await mapController!.removeLine(remainingRouteLine!); - if (traveledRouteLine != null) + } + if (traveledRouteLine != null) { await mapController!.removeLine(traveledRouteLine!); + } + + // Render Alternative Routes first (so they are below) + for (int i = 0; i < routes.length; i++) { + if (i == selectedRouteIndex) continue; + final altLine = await mapController!.addLine(LineOptions( + geometry: routes[i].coordinates, + lineColor: '#B0BEC5', // Soft gray for alternatives + lineWidth: 6.0, + lineJoin: 'round', + lineOpacity: 0.8, + )); + alternativeRouteLines.add(altLine); + } if (remaining.isNotEmpty) { remainingRouteLine = await mapController!.addLine(LineOptions( - geometry: remaining, - lineColor: '#1A73E8', - lineWidth: 7.0, - lineJoin: 'round', - )); + geometry: remaining, + lineColor: '#00e5ff', // Cyan/Blue for selected + lineWidth: 8.0, + lineJoin: 'round')); } - if (traveled.isNotEmpty) { traveledRouteLine = await mapController!.addLine(LineOptions( - geometry: traveled, - lineColor: '#BDBDBD', - lineWidth: 5.0, - lineJoin: 'round', - lineOpacity: 0.6, - )); + geometry: traveled, + lineColor: '#BDBDBD', + lineWidth: 5.0, + lineJoin: 'round', + lineOpacity: 0.6)); } } - // ========================================================================== - // ── Routing API ─────────────────────────────────────────────────────────── - // ========================================================================== + void selectRoute(int index) { + if (index < 0 || index >= routes.length) return; + selectedRouteIndex = index; + final r = routes[index]; + _fullRouteCoordinates = r.coordinates; + routeSteps = r.steps; + _routeTotalDistanceM = r.distanceM; + _routeTotalDurationS = r.durationS; + + _lastTraveledIndexInFullRoute = 0; + _recomputeETA(); + _updatePolylinesSets([], _fullRouteCoordinates); + update(); + } + + void goToFavorite(String type) { + LatLng? dest; + switch (type) { + case 'home': + dest = getHomeLatLng(); + break; + case 'work': + dest = getWorkLatLng(); + break; + case 'airport': + dest = getAirportLatLng(); + break; + } + + if (dest != null && myLocation != null) { + getRoute(myLocation!, dest); + } else { + mySnackbarWarning('الموقع غير متاح حالياً.'); + } + } + + LatLng? getHomeLatLng() { + final dynamic stored = box.read(BoxName.addHome); + if (stored != null && stored is String && stored.contains(',')) { + final parts = stored.split(','); + return LatLng(double.parse(parts[0]), double.parse(parts[1])); + } + return null; + } + + LatLng? getWorkLatLng() { + final dynamic stored = box.read(BoxName.addWork); + if (stored != null && stored is String && stored.contains(',')) { + final parts = stored.split(','); + return LatLng(double.parse(parts[0]), double.parse(parts[1])); + } + return null; + } + + LatLng getAirportLatLng() { + final String country = box.read(BoxName.countryCode) ?? 'JO'; + if (country == 'SY') { + return const LatLng(33.4111, 36.5147); // Damascus Airport + } + return const LatLng(31.7225, 35.9933); // Queen Alia Airport (JO) + } Future getRoute(LatLng origin, LatLng destination) async { - // ── Routing Decision: Normal Points -> SaaS, Multi-Stop -> OSRM ── - // Note: NavigationController usually handles the active trip (normal points). + isLoading = true; + update(); + + final String langCode = box.read(BoxName.lang) ?? 'ar'; final Map queryParams = { 'fromLat': origin.latitude.toString(), 'fromLng': origin.longitude.toString(), 'toLat': destination.latitude.toString(), 'toLng': destination.longitude.toString(), + 'steps': 'true', + 'locale': langCode, }; + + if (_intermediateStop != null) { + queryParams['stop1Lat'] = _intermediateStop!.latitude.toString(); + queryParams['stop1Lng'] = _intermediateStop!.longitude.toString(); + } final saasUri = Uri.parse(AppLink.mapSaasRoute).replace(queryParameters: queryParams); - // Fallback OSRM URL - final coords = "${origin.longitude},${origin.latitude};" - "${destination.longitude},${destination.latitude}"; - final osrmUrl = - "$_routeApiBaseUrl/$coords?steps=true&overview=full&geometries=polyline"; - try { - // 1. Try SaaS first - http.Response response = await http.get(saasUri, headers: { - 'x-api-key': Env.mapSaasKey, - }); - bool useSaaS = response.statusCode == 200; - - if (!useSaaS) { - Log.print("⚠️ SaaS Route failed. Falling back to OSRM..."); - response = await http.get(Uri.parse(osrmUrl)); - } + final response = + await http.get(saasUri, headers: {'x-api-key': Env.mapSaasKey}); if (response.statusCode != 200) { + isLoading = false; + update(); mySnackbarWarning('تعذر الاتصال بخدمة التوجيه.'); return; } final data = jsonDecode(response.body); - final bool isSaaS = useSaaS; - // ── 2. Data Extraction Logic ────────────────────────────────── - String pointsString = ""; - dynamic mainRoute; - - if (isSaaS) { - pointsString = data['points']?.toString() ?? ""; - mainRoute = data; // SaaS structure is top-level - } else { - if (data['code'] != 'Ok' || (data['routes'] as List).isEmpty) { - mySnackbarWarning('لم يتم العثور على مسار.'); - return; - } - mainRoute = data['routes'][0]; - pointsString = mainRoute['geometry']?.toString() ?? ""; + // ── Parse primary route (top-level in response) ── + routes.clear(); + final primaryPts = data['points']?.toString() ?? ""; + if (primaryPts.isNotEmpty) { + final coords = await compute>(decodePolylineIsolate, primaryPts); + routes.add(RouteData( + coordinates: coords, + steps: List>.from(data['instructions'] ?? []), + distanceM: (data['distance'] as num).toDouble(), + durationS: (data['duration'] as num).toDouble(), + points: primaryPts, + )); } - if (pointsString.isEmpty) { + // ── Parse alternative routes (in data['alternatives']) ── + if (data['alternatives'] != null && data['alternatives'] is List) { + for (var alt in data['alternatives']) { + final altPts = alt['points']?.toString() ?? ""; + if (altPts.isEmpty) continue; + final altCoords = await compute>(decodePolylineIsolate, altPts); + routes.add(RouteData( + coordinates: altCoords, + steps: List>.from(alt['instructions'] ?? []), + distanceM: (alt['distance'] as num).toDouble(), + durationS: (alt['duration'] as num).toDouble(), + points: altPts, + )); + } + } + + if (routes.isEmpty) { + isLoading = false; + update(); mySnackbarWarning('لم يتم العثور على مسار.'); return; } - _fullRouteCoordinates = await compute>( - decodePolylineIsolate, pointsString); + selectedRouteIndex = 0; + final selected = routes[0]; + _fullRouteCoordinates = selected.coordinates; + routeSteps = selected.steps; + _routeTotalDistanceM = selected.distanceM; + _routeTotalDurationS = selected.durationS; _lastTraveledIndexInFullRoute = 0; if (isStyleLoaded) _updatePolylinesSets([], _fullRouteCoordinates); - // ── Offline Cache: Ensure destination area is stored in memory/disk ─── if (_fullRouteCoordinates.isNotEmpty) { OfflineMapService.instance .downloadRegion(_fullRouteCoordinates.last, radiusKm: 2.0); } - // Handle legs/steps & totals - final legs = mainRoute['legs'] as List?; - if (legs != null && legs.isNotEmpty) { - routeSteps = List>.from(legs[0]['steps'] as List); - _routeTotalDistanceM = (legs[0]['distance'] as num).toDouble(); - _routeTotalDurationS = (legs[0]['duration'] as num).toDouble(); - } else { - // Fallback for SaaS which might have top-level distance/duration - routeSteps = []; - _routeTotalDistanceM = (mainRoute['distance'] as num).toDouble(); - _routeTotalDurationS = (mainRoute['duration'] as num).toDouble(); - } - - if (_routeTotalDistanceM > 0) { - totalDistanceRemaining = _routeTotalDistanceM > 1000 - ? "${(_routeTotalDistanceM / 1000).toStringAsFixed(1)} كم" - : "${_routeTotalDistanceM.toStringAsFixed(0)} م"; - - final minutes = (_routeTotalDurationS / 60).round(); - estimatedTimeRemaining = minutes > 60 - ? "${(minutes / 60).floor()} س ${minutes % 60} د" - : "$minutes د"; - } - - for (final step in routeSteps) { - step['instruction_text'] = _createInstructionFromManeuver(step); - } + _recomputeETA(); currentStepIndex = 0; _nextInstructionSpoken = false; - isNavigating = true; - _cameraLockedToUser = true; - // Reset off-route state after a successful recalculation + // Don't start navigating immediately, wait for user to press Start + isNavigating = false; + _cameraLockedToUser = false; _offRouteStartTime = null; + isLoading = false; + + update(); if (routeSteps.isNotEmpty) { - currentInstruction = routeSteps[0]['instruction_text']; + currentInstruction = routeSteps[0]['text'] ?? ""; + currentManeuverModifier = routeSteps[0]['sign'] ?? 0; nextInstruction = routeSteps.length > 1 - ? "ثم ${routeSteps[1]['instruction_text']}" - : "الوجهة النهائية"; - Get.find().speakText(currentInstruction); + ? (langCode == 'ar' + ? "ثم ${routeSteps[1]['text']}" + : "Then ${routeSteps[1]['text']}") + : (langCode == 'ar' ? "الوجهة النهائية" : "Destination"); + + if (!isMuted) { + Get.find().speakText(currentInstruction); + } } - // ── 5. Camera Update (Safe) ─────────────────────────────────── + // Re-add car marker after polyline updates (ensures it stays on top) + if (isStyleLoaded) _updateCarMarker(); + if (_fullRouteCoordinates.length >= 2) { final bounds = data['bbox'] != null && (data['bbox'] as List).length == 4 ? LatLngBounds( southwest: LatLng(data['bbox'][1], data['bbox'][0]), - northeast: LatLng(data['bbox'][3], data['bbox'][2]), - ) + northeast: LatLng(data['bbox'][3], data['bbox'][2])) : _boundsFromLatLngList(_fullRouteCoordinates); - await _safeAnimateCameraBounds(bounds, - bottom: 220, top: 150, left: 50, right: 50); + bottom: 320, top: 150, left: 50, right: 50); } - update(); } catch (e) { + isLoading = false; + update(); Log.print("GetRoute Error: $e"); } } - // Crude but fast ETA re-estimate based on fraction of route remaining. void _recomputeETA() { if (_routeTotalDistanceM == 0 || _fullRouteCoordinates.isEmpty) return; - final fraction = (_fullRouteCoordinates.length - _lastTraveledIndexInFullRoute) / _fullRouteCoordinates.length; - final remainingM = _routeTotalDistanceM * fraction; final remainingS = _routeTotalDurationS * fraction; - totalDistanceRemaining = remainingM > 1000 - ? "${(remainingM / 1000).toStringAsFixed(1)} كم" - : "${remainingM.toStringAsFixed(0)} م"; + // Distance + final String langCode = box.read(BoxName.lang) ?? 'ar'; + if (remainingM > 1000) { + totalDistanceRemaining = (remainingM / 1000).toStringAsFixed(1); + // We will handle the unit in the view or provide a unit string here + } else { + totalDistanceRemaining = remainingM.toStringAsFixed(0); + } + // New variable to hold formatted distance with unit + distanceWithUnit = _formatDistance(remainingM, langCode); + // Time Remaining final minutes = (remainingS / 60).round(); - estimatedTimeRemaining = minutes > 60 - ? "${(minutes / 60).floor()} س ${minutes % 60} د" - : "$minutes د"; + estimatedTimeRemaining = minutes.toString(); + + // Arrival Time Calculation + final arrival = DateTime.now().add(Duration(seconds: remainingS.toInt())); + final h = arrival.hour > 12 + ? arrival.hour - 12 + : (arrival.hour == 0 ? 12 : arrival.hour); + final m = arrival.minute.toString().padLeft(2, '0'); + final ampm = arrival.hour >= 12 ? 'PM' : 'AM'; + arrivalTime = "$h:$m $ampm"; } Future startNavigationTo(LatLng destination, @@ -862,27 +899,18 @@ class NavigationController extends GetxController try { _finalDestination = destination; await clearRoute(isNewRoute: true); - if (isStyleLoaded && mapController != null) { - // Destination Marker (B) destinationSymbol = await mapController!.addSymbol(SymbolOptions( - geometry: destination, - iconImage: 'dest_icon', - iconSize: 1.0, - textField: infoWindowTitle, - textOffset: const Offset(0, 2), - )); - - // Start Marker (A) + geometry: destination, + iconImage: 'dest_icon', + iconSize: 1.0, + textField: infoWindowTitle, + textOffset: const Offset(0, 2))); if (myLocation != null) { originSymbol = await mapController!.addSymbol(SymbolOptions( - geometry: myLocation, - iconImage: 'start_icon', - iconSize: 1.0, - )); + geometry: myLocation, iconImage: 'start_icon', iconSize: 1.0)); } } - if (myLocation != null) await getRoute(myLocation!, destination); } finally { isLoading = false; @@ -901,10 +929,8 @@ class NavigationController extends GetxController } Future clearRoute({bool isNewRoute = false}) async { - // Reset off-route state whenever the route is cleared _offRouteStartTime = null; _autoRecalcInProgress = false; - if (!isNewRoute) { if (destinationSymbol != null && mapController != null) { await mapController!.removeSymbol(destinationSymbol!); @@ -924,8 +950,6 @@ class NavigationController extends GetxController } _finalDestination = null; isNavigating = false; - - // Flush whatever is in the buffer when navigation ends await _flushBufferToServer(); } routeSteps.clear(); @@ -933,9 +957,11 @@ class NavigationController extends GetxController _lastTraveledIndexInFullRoute = 0; currentInstruction = ""; nextInstruction = ""; + currentManeuverModifier = "straight"; distanceToNextStep = ""; totalDistanceRemaining = ""; estimatedTimeRemaining = ""; + arrivalTime = "--:--"; _routeTotalDistanceM = 0; _routeTotalDurationS = 0; update(); @@ -946,52 +972,50 @@ class NavigationController extends GetxController final carBytes = await rootBundle.load('assets/images/car.png'); final startBytes = await rootBundle.load('assets/images/A.png'); final destBytes = await rootBundle.load('assets/images/b.png'); - await mapController!.addImage('car_icon', carBytes.buffer.asUint8List()); await mapController! .addImage('start_icon', startBytes.buffer.asUint8List()); await mapController!.addImage('dest_icon', destBytes.buffer.asUint8List()); } - // ========================================================================== - // ── Step tracking & TTS ─────────────────────────────────────────────────── - // ========================================================================== - void _checkNavigationStep(LatLng pos) { if (routeSteps.isEmpty || currentStepIndex >= routeSteps.length) return; - final maneuver = routeSteps[currentStepIndex]['maneuver']; - final loc = maneuver['location'] as List; - final endLatLng = LatLng(loc[1] as double, loc[0] as double); + final interval = routeSteps[currentStepIndex]['interval'] as List; + final endIdx = interval[1] as int; + if (endIdx >= _fullRouteCoordinates.length) return; + + final endLatLng = _fullRouteCoordinates[endIdx]; final distance = Geolocator.distanceBetween( - pos.latitude, - pos.longitude, - endLatLng.latitude, - endLatLng.longitude, - ); + pos.latitude, pos.longitude, endLatLng.latitude, endLatLng.longitude); distanceToNextStep = distance > 1000 - ? "${(distance / 1000).toStringAsFixed(1)} كم" - : "${distance.toStringAsFixed(0)} م"; + ? "${(distance / 1000).toStringAsFixed(1)} km" + : "${distance.toStringAsFixed(0)} m"; if (distance < 50 && !_nextInstructionSpoken && nextInstruction.isNotEmpty) { - Get.find().speakText(nextInstruction); + if (!isMuted) { + Get.find().speakText(nextInstruction); + } _nextInstructionSpoken = true; } - if (distance < 20) _advanceStep(); } void _advanceStep() { currentStepIndex++; + final String langCode = box.read(BoxName.lang) ?? 'ar'; if (currentStepIndex < routeSteps.length) { - currentInstruction = routeSteps[currentStepIndex]['instruction_text']; + currentInstruction = routeSteps[currentStepIndex]['text'] ?? ""; + currentManeuverModifier = routeSteps[currentStepIndex]['sign'] ?? 0; nextInstruction = (currentStepIndex + 1) < routeSteps.length - ? "ثم ${routeSteps[currentStepIndex + 1]['instruction_text']}" - : "ستصل إلى وجهتك"; + ? (langCode == 'ar' + ? "ثم ${routeSteps[currentStepIndex + 1]['text']}" + : "Then ${routeSteps[currentStepIndex + 1]['text']}") + : (langCode == 'ar' ? "ستصل إلى وجهتك" : "Arriving soon"); _nextInstructionSpoken = false; update(); } else { @@ -1000,59 +1024,20 @@ class NavigationController extends GetxController } void _finishNavigation() { - currentInstruction = "لقد وصلت إلى وجهتك"; + final String langCode = box.read(BoxName.lang) ?? 'ar'; + currentInstruction = + langCode == 'ar' ? "لقد وصلت إلى وجهتك" : "You have arrived"; + currentManeuverModifier = 4; nextInstruction = ""; distanceToNextStep = ""; isNavigating = false; - Get.find().speakText(currentInstruction); - // Final flush on arrival + if (!isMuted) { + Get.find().speakText(currentInstruction); + } _flushBufferToServer(); update(); } - String _createInstructionFromManeuver(Map step) { - if (step['maneuver'] == null) return "تابع المسير"; - final type = step['maneuver']['type'] ?? 'continue'; - final modifier = step['maneuver']['modifier'] ?? 'straight'; - final name = step['name'] ?? ''; - - String instruction = type == 'depart' - ? "انطلق" - : type == 'arrive' - ? "لقد وصلت إلى وجهتك، $name" - : _getTurnInstruction(modifier); - - if (name.isNotEmpty && type != 'arrive') instruction += " نحو $name"; - return instruction; - } - - String _getTurnInstruction(String modifier) { - switch (modifier) { - case 'uturn': - return "قم بالاستدارة والعودة"; - case 'sharp right': - return "انعطف يميناً بحدة"; - case 'right': - return "انعطف يميناً"; - case 'slight right': - return "انعطف يميناً قليلاً"; - case 'straight': - return "استمر للأمام"; - case 'slight left': - return "انعطف يساراً قليلاً"; - case 'left': - return "انعطف يساراً"; - case 'sharp left': - return "انعطف يساراً بحدة"; - default: - return "اتجه"; - } - } - - // ========================================================================== - // ── Search ──────────────────────────────────────────────────────────────── - // ========================================================================== - Future getPlaces() async { final q = placeDestinationController.text.trim(); if (q.length < 3) { @@ -1065,7 +1050,6 @@ class NavigationController extends GetxController final lat = myLocation!.latitude; final lng = myLocation!.longitude; const radiusKm = 200.0; - final payload = { 'query': q, 'lat_min': (lat - _kmToLatDelta(radiusKm)).toString(), @@ -1078,9 +1062,9 @@ class NavigationController extends GetxController final response = await CRUD().post(link: AppLink.getPlacesSyria, payload: payload); List list; - if (response is Map && response['status'] == 'success') + if (response is Map && response['status'] == 'success') { list = List.from(response['message'] as List); - else if (response is List) + } else if (response is List) list = List.from(response); else return; @@ -1090,7 +1074,6 @@ class NavigationController extends GetxController final plng = double.tryParse(p['longitude']?.toString() ?? '0') ?? 0.0; p['distanceKm'] = _haversineKm(lat, lng, plat, plng); } - list.sort((a, b) => (a['distanceKm'] as double).compareTo(b['distanceKm'] as double)); placesDestination = list; @@ -1114,10 +1097,6 @@ class NavigationController extends GetxController _debounce = Timer(const Duration(milliseconds: 700), () => getPlaces()); } - // ========================================================================== - // ── Geo utils ───────────────────────────────────────────────────────────── - // ========================================================================== - double _haversineKm(double lat1, double lon1, double lat2, double lon2) { const R = 6371.0; final dLat = (lat2 - lat1) * (pi / 180.0); @@ -1133,7 +1112,6 @@ class NavigationController extends GetxController double _kmToLatDelta(double km) => km / 111.32; double _kmToLngDelta(double km, double lat) => km / (111.32 * cos(lat * pi / 180)); - LatLngBounds _boundsFromLatLngList(List list) { double? x0, x1, y0, y1; for (final ll in list) { @@ -1150,4 +1128,49 @@ class NavigationController extends GetxController return LatLngBounds( northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!)); } + + void setIntermediateStop(LatLng stop) { + _intermediateStop = stop; + if (myLocation != null && _finalDestination != null) { + getRoute(myLocation!, _finalDestination!); + } + update(); + } + + void clearIntermediateStop() { + _intermediateStop = null; + if (myLocation != null && _finalDestination != null) { + getRoute(myLocation!, _finalDestination!); + } + update(); + } + + String _formatDistance(double meters, String lang) { + if (meters >= 1000) { + return "${(meters / 1000).toStringAsFixed(1)} ${lang == 'ar' ? 'كم' : 'km'}"; + } else { + return "${meters.toStringAsFixed(0)} ${lang == 'ar' ? 'م' : 'm'}"; + } + } + + Future submitPlaceSuggestion(String name) async { + if (name.trim().isEmpty || myLocation == null) return; + isLoading = true; + update(); + try { + final payload = { + 'name': name, + 'lat': myLocation!.latitude.toString(), + 'lng': myLocation!.longitude.toString(), + 'passenger_id': box.read(BoxName.passengerID), + }; + await CRUD().post(link: AppLink.getPlacesSyria, payload: payload); + mySnackbarInfo(box.read(BoxName.lang) == 'ar' + ? "تم استلام اقتراحك! مكافأتك: +٥٠ نقطة" + : "Suggestion received! Reward: +50 points"); + } finally { + isLoading = false; + update(); + } + } } diff --git a/lib/views/home/navigation/navigation_view.dart b/lib/views/home/navigation/navigation_view.dart index 76ac153..6c1e05a 100644 --- a/lib/views/home/navigation/navigation_view.dart +++ b/lib/views/home/navigation/navigation_view.dart @@ -4,25 +4,27 @@ import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:maplibre_gl/maplibre_gl.dart'; +import '../../../constant/box_name.dart'; +import '../../../main.dart'; +import '../../widgets/error_snakbar.dart'; import 'navigation_controller.dart'; -// ─── Brand colours ─────────────────────────────────────────────────────────── -// ─── Theme-aware Brand colours ────────────────────────────────────────────── -Color get _kBlue => const Color(0xFF1A73E8); -Color get _kBlueDark => const Color(0xFF0D47A1); +// ─── Color Palette Matching the HTML Specs ────────────────────────────────── Color get _kSurface => - Get.isDarkMode ? const Color(0xFF1E1E1E) : const Color(0xFFFFFFFF); -Color get _kText => - Get.isDarkMode ? const Color(0xFFF5F5F7) : const Color(0xFF1C1C1E); -Color get _kSubtext => - Get.isDarkMode ? Colors.white60 : const Color(0xFF6B7280); -Color get _kGreen => const Color(0xFF34A853); -Color get _kGlassSurface => Get.isDarkMode - ? Colors.black.withOpacity(0.7) - : Colors.white.withOpacity(0.92); -Color get _kGlassBorder => Get.isDarkMode - ? Colors.white.withOpacity(0.12) - : Colors.white.withOpacity(0.5); + Get.isDarkMode ? const Color(0xFF131b2e) : const Color(0xFFfaf8ff); +Color get _kSurfaceContainerLowest => + Get.isDarkMode ? const Color(0xFF1e293b) : const Color(0xFFffffff); +Color get _kSurfaceContainerHigh => + Get.isDarkMode ? const Color(0xFF334155) : const Color(0xFFe2e7ff); +Color get _kPrimary => const Color(0xFF000000); +Color get _kPrimaryContainer => const Color(0xFF131b2e); +Color get _kOnPrimaryContainer => const Color(0xFF7c839b); +Color get _kOnSurface => + Get.isDarkMode ? const Color(0xFFffffff) : const Color(0xFF131b2e); +Color get _kOnSurfaceVariant => const Color(0xFF45464d); +Color get _kErrorContainer => const Color(0xFFffdad6); +Color get _kError => const Color(0xFFba1a1a); +Color get _kOutlineVariant => const Color(0xFFc6c6cd); class NavigationView extends StatelessWidget { const NavigationView({super.key}); @@ -32,54 +34,56 @@ class NavigationView extends StatelessWidget { final NavigationController c = Get.put(NavigationController()); return AnnotatedRegion( - value: SystemUiOverlayStyle.dark, + value: Get.isDarkMode + ? SystemUiOverlayStyle.light + : SystemUiOverlayStyle.dark, child: Scaffold( - backgroundColor: Colors.black, + backgroundColor: _kSurface, body: GetBuilder( builder: (_) => Stack( children: [ - // ── Map ──────────────────────────────────────────────────── + // ── 1. Map Layer ────────────────────────────────────────────── MapLibreMap( onMapCreated: c.onMapCreated, onStyleLoadedCallback: c.onStyleLoaded, onMapLongClick: c.onMapLongPressed, + onMapClick: (point, tappedPoint) => + c.onMapTapped(point, tappedPoint), styleString: Get.isDarkMode ? "assets/style_dark.json" : "assets/style.json", initialCameraPosition: CameraPosition( - target: c.myLocation ?? const LatLng(33.5138, 36.2765), - zoom: 16.0, - ), + target: c.myLocation ?? const LatLng(33.5138, 36.2765), + zoom: 16.0), myLocationEnabled: false, compassEnabled: false, trackCameraPosition: true, ), - // ── Top: search bar (always visible) ────────────────────── - if (!c.isNavigating) _SearchBar(controller: c), + // ── 2. Top UI (Explore Mode) ────────────────────────────────── + if (!c.isNavigating) _ExploreTopUI(controller: c), - // ── Top: turn banner (navigation only) ──────────────────── + // ── 3. Top UI (Active Navigation Banner) ────────────────────── if (c.isNavigating && c.currentInstruction.isNotEmpty) - _TurnBanner(controller: c), + _ActiveTopBanner(controller: c), - // ── Right: floating map controls ────────────────────────── + // ── 4. Map Controls (Floating Right) ────────────────────────── _MapControls(controller: c), - // ── Bottom: route summary card ──────────────────────────── - if (!c.isNavigating && c.destinationSymbol != null) - _RouteSummaryCard(controller: c), + // ── 5. Bottom Panel (Explore Mode / Route Setup) ────────────── + if (!c.isNavigating) _ExploreBottomPanel(controller: c), - // ── Bottom: navigation HUD ──────────────────────────────── - if (c.isNavigating) _NavigationHUD(controller: c), + // ── 6. Bottom HUD (Active Navigation) ───────────────────────── + if (c.isNavigating) _ActiveBottomHUD(controller: c), - // ── Search results overlay ──────────────────────────────── + // ── 7. Speedometer Badge ────────────────────────────────────── + if (c.isNavigating) _SpeedBadge(speed: c.currentSpeed), + + // ── 8. Search Results Dropdown ──────────────────────────────── if (c.placesDestination.isNotEmpty && !c.isNavigating) _SearchResults(controller: c), - // ── Speed badge (navigating) ────────────────────────────── - if (c.isNavigating) _SpeedBadge(speed: c.currentSpeed), - - // ── Loading overlay ─────────────────────────────────────── + // ── 9. Loading Overlay ──────────────────────────────────────── if (c.isLoading) const _LoadingOverlay(), ], ), @@ -89,12 +93,13 @@ class NavigationView extends StatelessWidget { } } -// ───────────────────────────────────────────────────────────────────────────── -// Search Bar -// ───────────────────────────────────────────────────────────────────────────── -class _SearchBar extends StatelessWidget { +// ============================================================================= +// EXPLORE MODE COMPONENTS +// ============================================================================= + +class _ExploreTopUI extends StatelessWidget { final NavigationController controller; - const _SearchBar({required this.controller}); + const _ExploreTopUI({required this.controller}); @override Widget build(BuildContext context) { @@ -103,242 +108,342 @@ class _SearchBar extends StatelessWidget { left: 0, right: 0, child: SafeArea( - child: Padding( - padding: const EdgeInsets.fromLTRB(16, 12, 16, 0), - child: _GlassCard( - padding: EdgeInsets.zero, - borderRadius: 18, - child: Row( - children: [ - const SizedBox(width: 16), - Icon(Icons.search_rounded, color: _kBlue, size: 22), - const SizedBox(width: 10), - Expanded( - child: TextField( - controller: controller.placeDestinationController, - onChanged: controller.onSearchChanged, - textInputAction: TextInputAction.search, - style: TextStyle( - fontSize: 16, - color: _kText, - fontWeight: FontWeight.w500), - decoration: InputDecoration( - hintText: 'إلى أين تريد الذهاب؟', - hintStyle: TextStyle(color: _kSubtext, fontSize: 15), - border: InputBorder.none, - contentPadding: const EdgeInsets.symmetric(vertical: 16), + bottom: false, + child: Column( + children: [ + // Search Pill + Padding( + padding: const EdgeInsets.fromLTRB(16, 16, 16, 16), + child: Container( + decoration: BoxDecoration( + color: _kSurfaceContainerLowest.withOpacity(0.95), + borderRadius: BorderRadius.circular(50), + border: Border.all(color: Colors.white.withOpacity(0.2)), + boxShadow: const [ + BoxShadow( + color: Color(0x0F000000), + blurRadius: 32, + offset: Offset(0, 8)) + ], + ), + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 6), + child: Row( + children: [ + IconButton( + icon: Icon(Icons.menu_rounded, color: _kOnSurface), + onPressed: () {}, // Drawer or Menu logic here ), - ), - ), - if (controller.placeDestinationController.text.isNotEmpty) - _IconBtn( - icon: Icons.close_rounded, - color: _kSubtext, - onTap: () { - controller.placeDestinationController.clear(); - controller.placesDestination = []; - controller.update(); - }, - ) - else if (controller.destinationSymbol != null) - _IconBtn( - icon: Icons.close_rounded, - color: Colors.redAccent, - onTap: () => controller.clearRoute(), - ), - const SizedBox(width: 4), - ], - ), - ), - ), - ), - ); - } -} - -// ───────────────────────────────────────────────────────────────────────────── -// Search Results -// ───────────────────────────────────────────────────────────────────────────── -class _SearchResults extends StatelessWidget { - final NavigationController controller; - const _SearchResults({required this.controller}); - - @override - Widget build(BuildContext context) { - return Positioned( - top: MediaQuery.of(context).padding.top + 76, - left: 16, - right: 16, - child: _GlassCard( - borderRadius: 18, - padding: const EdgeInsets.symmetric(vertical: 6), - child: ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 260), - child: ListView.separated( - shrinkWrap: true, - physics: const BouncingScrollPhysics(), - padding: EdgeInsets.zero, - itemCount: controller.placesDestination.length, - separatorBuilder: (_, __) => Divider( - height: 1, - color: Get.isDarkMode ? Colors.white12 : Colors.grey[100], - indent: 56), - itemBuilder: (_, i) { - final place = controller.placesDestination[i]; - final dist = place['distanceKm'] as double?; - return InkWell( - onTap: () => controller.selectDestination(place), - borderRadius: BorderRadius.circular(12), - child: Padding( - padding: - const EdgeInsets.symmetric(horizontal: 14, vertical: 12), - child: Row( - children: [ - Container( - width: 34, - height: 34, - decoration: BoxDecoration( - color: _kBlue.withOpacity(0.08), - shape: BoxShape.circle, - ), - child: - Icon(Icons.place_rounded, color: _kBlue, size: 18), - ), - const SizedBox(width: 12), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(place['name'] ?? '', - style: TextStyle( - fontWeight: FontWeight.w600, - fontSize: 14.5, - color: _kText), - maxLines: 1, - overflow: TextOverflow.ellipsis), - if ((place['address'] ?? '').isNotEmpty) - Text(place['address'], - style: TextStyle( - fontSize: 12.5, color: _kSubtext), - maxLines: 1, - overflow: TextOverflow.ellipsis), - ], + Expanded( + child: TextField( + controller: controller.placeDestinationController, + onChanged: controller.onSearchChanged, + textInputAction: TextInputAction.search, + style: TextStyle( + fontSize: 16, + color: _kOnSurface, + fontWeight: FontWeight.w600), + decoration: InputDecoration( + hintText: 'Where to?'.tr, + hintStyle: TextStyle( + color: _kOnSurfaceVariant, + fontSize: 16, + fontWeight: FontWeight.w500), + border: InputBorder.none, + isDense: true, + contentPadding: + const EdgeInsets.symmetric(vertical: 10), ), ), - if (dist != null) ...[ - const SizedBox(width: 8), - Container( - padding: const EdgeInsets.symmetric( - horizontal: 8, vertical: 3), - decoration: BoxDecoration( - color: _kBlue.withOpacity(0.08), - borderRadius: BorderRadius.circular(8), - ), - child: Text( - '${dist.toStringAsFixed(1)} كم', - style: TextStyle( - color: _kBlue, - fontSize: 12, - fontWeight: FontWeight.w600), - ), - ), - ], - ], - ), + ), + if (controller.placeDestinationController.text.isNotEmpty) + IconButton( + icon: const Icon(Icons.close_rounded), + color: _kOnSurfaceVariant, + onPressed: () { + controller.placeDestinationController.clear(); + controller.placesDestination = []; + controller.update(); + }) + else if (controller.destinationSymbol != null) + IconButton( + icon: const Icon(Icons.close_rounded), + color: _kError, + onPressed: () => controller.clearRoute()), + + // Avatar + const Padding( + padding: EdgeInsets.only(right: 4, left: 4), + child: CircleAvatar( + radius: 18, + backgroundColor: Colors.grey, + child: Icon(Icons.person_rounded, + color: Colors.white, size: 20), + // backgroundImage: AssetImage('assets/images/placeholder_avatar.png'), + ), + ), + ], ), - ); - }, - ), - ), - ), - ); - } -} - -// ───────────────────────────────────────────────────────────────────────────── -// Turn Banner (top card during navigation — like Google Maps) -// ───────────────────────────────────────────────────────────────────────────── -class _TurnBanner extends StatelessWidget { - final NavigationController controller; - const _TurnBanner({required this.controller}); - - @override - Widget build(BuildContext context) { - return Positioned( - top: 0, - left: 0, - right: 0, - child: SafeArea( - child: Padding( - padding: const EdgeInsets.fromLTRB(12, 10, 12, 0), - child: Container( - decoration: BoxDecoration( - color: Get.isDarkMode - ? Colors.grey[900]?.withOpacity(0.95) - : _kBlueDark, - borderRadius: BorderRadius.circular(20), - boxShadow: [ - BoxShadow( - color: (Get.isDarkMode ? Colors.black : _kBlueDark) - .withOpacity(0.35), - blurRadius: 20, - offset: const Offset(0, 6)), - ], + ), ), - child: Padding( - padding: const EdgeInsets.fromLTRB(16, 14, 16, 14), - child: Row( + + // Quick Access Chips + SizedBox( + height: 44, + child: ListView( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(horizontal: 16), + physics: const BouncingScrollPhysics(), children: [ - // Turn arrow icon - Container( - width: 64, - height: 64, - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.15), - borderRadius: BorderRadius.circular(16), - ), - child: const Icon(Icons.turn_right_rounded, - color: Colors.white, size: 40), + // "Home" (Al-Ra'isiya) removed as per user request if it was redundant, + // but we keep the functional Home/Work/Saved/Airport + _QuickChip( + icon: Icons.home_rounded, + label: 'Home'.tr, + onTap: () => controller.goToFavorite('home'), ), - const SizedBox(width: 14), - - // Instruction text - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - controller.distanceToNextStep, - style: const TextStyle( - color: Colors.white, - fontSize: 18, - fontWeight: FontWeight.w600), - ), - const SizedBox(height: 4), - Text( - controller.currentInstruction, - style: const TextStyle( - color: Colors.white, - fontSize: 26, - fontWeight: FontWeight.bold, - height: 1.2), - maxLines: 2, - overflow: TextOverflow.ellipsis, - ), - ], - ), + _QuickChip( + icon: Icons.work_rounded, + label: 'Work'.tr, + onTap: () => controller.goToFavorite('work'), ), - - // Close / stop navigation - _IconBtn( - icon: Icons.close_rounded, - color: Colors.white54, - size: 20, - onTap: () => controller.clearRoute(), + _QuickChip( + icon: Icons.bookmark_rounded, + label: 'Saved'.tr, + onTap: () {}, // Future logic + ), + _QuickChip( + icon: Icons.flight_rounded, + label: 'Airport'.tr, + onTap: () => controller.goToFavorite('airport'), ), ], ), ), + ], + ), + ), + ); + } +} + +class _QuickChip extends StatelessWidget { + final IconData icon; + final String label; + final VoidCallback onTap; + const _QuickChip( + {required this.icon, required this.label, required this.onTap}); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + HapticFeedback.lightImpact(); + onTap(); + }, + child: Container( + margin: const EdgeInsets.only(right: 8), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), + decoration: BoxDecoration( + color: _kSurfaceContainerLowest.withOpacity(0.95), + borderRadius: BorderRadius.circular(50), + boxShadow: const [ + BoxShadow( + color: Color(0x0A000000), blurRadius: 4, offset: Offset(0, 2)) + ], + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, size: 18, color: _kOnSurface), + const SizedBox(width: 8), + Text(label, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: _kOnSurface)), + ], + ), + ), + ); + } +} + +class _ExploreBottomPanel extends StatelessWidget { + final NavigationController controller; + const _ExploreBottomPanel({required this.controller}); + + String _formatDuration(double seconds) { + final mins = (seconds / 60).toInt(); + if (mins >= 60) { + final h = mins ~/ 60; + final m = mins % 60; + return box.read(BoxName.lang) == 'ar' + ? '$h ساعة ${m > 0 ? '$m د' : ''}' + : '${h}h ${m > 0 ? '${m}m' : ''}'; + } + return box.read(BoxName.lang) == 'ar' ? '$mins دقيقة' : '$mins min'; + } + + String _formatDistance(double meters) { + if (meters >= 1000) { + return box.read(BoxName.lang) == 'ar' + ? '${(meters / 1000).toStringAsFixed(1)} كم' + : '${(meters / 1000).toStringAsFixed(1)} km'; + } + return box.read(BoxName.lang) == 'ar' + ? '${meters.toInt()} م' + : '${meters.toInt()} m'; + } + + @override + Widget build(BuildContext context) { + final bool hasRoutes = controller.routes.isNotEmpty; + final bool isArabic = box.read(BoxName.lang) == 'ar'; + final bottomPad = MediaQuery.of(context).padding.bottom; + + return Positioned( + bottom: 0, + left: 0, + right: 0, + child: ClipRRect( + borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20), + child: Container( + padding: EdgeInsets.only(bottom: bottomPad + 12), + decoration: BoxDecoration( + color: _kSurfaceContainerLowest.withOpacity(0.92), + boxShadow: const [ + BoxShadow( + color: Color(0x14000000), + blurRadius: 48, + offset: Offset(0, -12)) + ], + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Drag Handle + Container( + width: 40, + height: 4, + margin: const EdgeInsets.only(top: 12, bottom: 16), + decoration: BoxDecoration( + color: _kOutlineVariant.withOpacity(0.4), + borderRadius: BorderRadius.circular(10))), + + // ── Route Selection Cards ── + if (hasRoutes) ...[ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Column( + children: List.generate(controller.routes.length, (index) { + final r = controller.routes[index]; + final isSelected = controller.selectedRouteIndex == index; + return _RouteOptionCard( + index: index, + distance: _formatDistance(r.distanceM), + duration: _formatDuration(r.durationS), + isSelected: isSelected, + isArabic: isArabic, + onTap: () => controller.selectRoute(index), + ); + }), + ), + ), + const SizedBox(height: 16), + ], + + // ── Main Action Button ── + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Material( + color: Colors.transparent, + child: InkWell( + onTap: hasRoutes + ? () { + HapticFeedback.mediumImpact(); + controller.isNavigating = true; + controller.relockCameraToUser(); + controller.update(); + } + : null, + borderRadius: BorderRadius.circular(16), + child: Ink( + padding: const EdgeInsets.symmetric(vertical: 18), + decoration: BoxDecoration( + gradient: LinearGradient( + colors: hasRoutes + ? [const Color(0xFF0D47A1), const Color(0xFF1565C0)] + : [Colors.grey.shade400, Colors.grey.shade500], + ), + borderRadius: BorderRadius.circular(16), + boxShadow: hasRoutes + ? [ + BoxShadow( + color: const Color(0xFF0D47A1).withOpacity(0.35), + blurRadius: 16, + offset: const Offset(0, 6)) + ] + : [], + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.navigation_rounded, color: Colors.white, size: 22), + const SizedBox(width: 10), + Text( + hasRoutes + ? (isArabic ? 'ابدأ الملاحة' : 'Start Navigation') + : (isArabic ? 'خطط المسار' : 'Plan Route'), + style: const TextStyle( + color: Colors.white, + fontSize: 17, + fontWeight: FontWeight.w800, + letterSpacing: 0.3)), + ], + ), + ), + ), + ), + ), + + // ── Recent Places ── + if (!hasRoutes && controller.recentLocations.isNotEmpty) ...[ + const SizedBox(height: 20), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 4), + child: Align( + alignment: Alignment.centerLeft, + child: Text(isArabic ? 'الأماكن الأخيرة' : 'RECENT PLACES', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w800, + color: _kOnSurfaceVariant.withOpacity(0.6), + letterSpacing: 1.2)), + ), + ), + ...controller.recentLocations.map((loc) => _CompactRecentPlace( + title: loc['name'] ?? 'Unknown', + subtitle: loc['address'] ?? '', + onTap: () { + if (controller.myLocation != null && + loc['latitude'] != null && + loc['longitude'] != null) { + controller.getRoute( + controller.myLocation!, + LatLng( + double.parse(loc['latitude'].toString()), + double.parse(loc['longitude'].toString()))); + } + }, + )), + const SizedBox(height: 8), + ] else if (!hasRoutes) ...[ + const SizedBox(height: 16), + ], + ], + ), ), ), ), @@ -346,47 +451,533 @@ class _TurnBanner extends StatelessWidget { } } -// ───────────────────────────────────────────────────────────────────────────── -// Floating map controls (right side) -// ───────────────────────────────────────────────────────────────────────────── +class _RouteOptionCard extends StatelessWidget { + final int index; + final String distance; + final String duration; + final bool isSelected; + final bool isArabic; + final VoidCallback onTap; + + const _RouteOptionCard({ + required this.index, + required this.distance, + required this.duration, + required this.isSelected, + required this.isArabic, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + HapticFeedback.selectionClick(); + onTap(); + }, + child: AnimatedContainer( + duration: const Duration(milliseconds: 200), + margin: const EdgeInsets.only(bottom: 8), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), + decoration: BoxDecoration( + color: isSelected + ? const Color(0xFF0D47A1) + : _kSurfaceContainerHigh.withOpacity(0.4), + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: isSelected + ? const Color(0xFF42A5F5).withOpacity(0.4) + : _kOutlineVariant.withOpacity(0.15), + width: isSelected ? 1.5 : 1, + ), + ), + child: Row( + children: [ + // Route icon + Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: isSelected + ? Colors.white.withOpacity(0.15) + : _kSurfaceContainerHigh.withOpacity(0.5), + borderRadius: BorderRadius.circular(12), + ), + child: Icon( + index == 0 ? Icons.route_rounded : Icons.alt_route_rounded, + color: isSelected ? Colors.white : _kOnSurfaceVariant, + size: 20, + ), + ), + const SizedBox(width: 14), + + // Route Label + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + index == 0 + ? (isArabic ? 'أفضل مسار' : 'Best Route') + : (isArabic ? 'مسار بديل $index' : 'Alternative $index'), + style: TextStyle( + color: isSelected ? Colors.white : _kOnSurface, + fontSize: 14, + fontWeight: FontWeight.w700, + ), + ), + const SizedBox(height: 2), + Text( + distance, + style: TextStyle( + color: isSelected + ? Colors.white.withOpacity(0.7) + : _kOnSurfaceVariant, + fontSize: 12, + ), + ), + ], + ), + ), + + // Duration (prominent) + Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + decoration: BoxDecoration( + color: isSelected + ? Colors.white.withOpacity(0.15) + : const Color(0xFFE3F2FD), + borderRadius: BorderRadius.circular(10), + ), + child: Text( + duration, + style: TextStyle( + color: isSelected ? Colors.white : const Color(0xFF0D47A1), + fontSize: 14, + fontWeight: FontWeight.w800, + ), + ), + ), + + // Selection indicator + const SizedBox(width: 8), + Icon( + isSelected ? Icons.check_circle_rounded : Icons.radio_button_unchecked_rounded, + color: isSelected ? Colors.white : _kOutlineVariant, + size: 22, + ), + ], + ), + ), + ); + } +} + + +class _CompactRecentPlace extends StatelessWidget { + final String title; + final String subtitle; + final VoidCallback onTap; + + const _CompactRecentPlace({ + required this.title, + required this.subtitle, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + onTap: onTap, + dense: true, + contentPadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 0), + leading: Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: _kSurfaceContainerHigh.withOpacity(0.5), + shape: BoxShape.circle, + ), + child: Icon(Icons.history_rounded, size: 18, color: _kOnSurface), + ), + title: Text(title, + style: TextStyle( + fontWeight: FontWeight.w700, color: _kOnSurface, fontSize: 14)), + subtitle: Text(subtitle, + style: TextStyle(color: _kOnSurfaceVariant, fontSize: 12), + maxLines: 1, + overflow: TextOverflow.ellipsis), + ); + } +} + +// ============================================================================= +// ACTIVE NAVIGATION MODE COMPONENTS +// ============================================================================= + +class _ActiveTopBanner extends StatelessWidget { + final NavigationController controller; + const _ActiveTopBanner({required this.controller}); + + @override + Widget build(BuildContext context) { + return Positioned( + top: 0, + left: 0, + right: 0, + child: SafeArea( + bottom: false, + child: Padding( + padding: const EdgeInsets.fromLTRB(12, 12, 12, 0), + child: Container( + decoration: BoxDecoration( + color: const Color(0xFF1B5E20), // Google Maps Green + borderRadius: BorderRadius.circular(16), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + blurRadius: 15, + offset: const Offset(0, 5)) + ], + ), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 20), + child: Row( + children: [ + // Direction indicator + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.1), + borderRadius: BorderRadius.circular(12), + ), + child: Icon(controller.currentManeuverIcon, + color: Colors.white, size: 48), + ), + const SizedBox(width: 16), + // Full instruction text + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + controller.currentInstruction, + style: const TextStyle( + color: Colors.white, + fontSize: 22, + fontWeight: FontWeight.w800, + letterSpacing: -0.5), + maxLines: 3, + overflow: TextOverflow.visible, + ), + const SizedBox(height: 4), + Text( + controller.distanceToNextStep, + style: const TextStyle( + color: Colors.white70, + fontSize: 16, + fontWeight: FontWeight.w900), + ), + ], + ), + ), + ], + ), + ), + ), + ), + ); + } +} + +class _ActiveBottomHUD extends StatelessWidget { + final NavigationController controller; + const _ActiveBottomHUD({required this.controller}); + + @override + Widget build(BuildContext context) { + final bottomPad = MediaQuery.of(context).padding.bottom; + final isArabic = (Get.locale?.languageCode ?? 'ar') == 'ar'; + + return Positioned( + bottom: 0, + left: 0, + right: 0, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + decoration: BoxDecoration( + color: _kSurfaceContainerLowest, + borderRadius: + const BorderRadius.vertical(top: Radius.circular(24)), + boxShadow: const [ + BoxShadow( + color: Color(0x0F000000), + blurRadius: 32, + offset: Offset(0, -8)) + ], + ), + padding: EdgeInsets.fromLTRB( + 24, 16, 24, bottomPad + 12), // Reduced top padding + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Stats Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + _StatItem( + label: isArabic ? 'الوصول' : 'ARRIVAL', + value: controller.arrivalTime, + color: _kOnSurface), + _StatItem( + label: isArabic ? 'الوقت' : 'TIME', + value: isArabic + ? '${controller.estimatedTimeRemaining} دقيقة' + : '${controller.estimatedTimeRemaining} min', + color: _kOnSurface), + _StatItem( + label: isArabic ? 'المسافة' : 'DISTANCE', + value: controller.distanceWithUnit, // Use fix + color: _kOnSurface), + ], + ), + const SizedBox(height: 16), + const Divider(height: 1), + const SizedBox(height: 16), + // Action Buttons Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _ActionButton( + icon: Icons.report_problem_rounded, + label: isArabic ? 'تقرير' : 'Report', + color: const Color(0xFFE8EAF6), + onPressed: () {}), + _ActionButton( + icon: controller.isMuted + ? Icons.volume_off_rounded + : Icons.volume_up_rounded, + label: isArabic ? 'الصوت' : 'Sound', + color: const Color(0xFFE8EAF6), + onPressed: () => controller.toggleMute()), + _ActionButton( + icon: Icons.add_rounded, + label: isArabic ? 'إضافة' : 'Add', + color: const Color(0xFFE8EAF6), + onPressed: () => + _showSuggestPlaceDialog(context, controller)), + _ActionButton( + icon: Icons.close_rounded, + label: isArabic ? 'إنهاء' : 'End', + color: const Color(0xFFFFEBEE), + iconColor: _kError, + onPressed: () => controller.clearRoute()), + ], + ), + ], + ), + ), + ], + ), + ); + } +} + +void _showSuggestPlaceDialog( + BuildContext context, NavigationController controller) { + final entryController = TextEditingController(); + Get.dialog( + AlertDialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + title: Row( + children: [ + const Icon(Icons.stars_rounded, color: Colors.amber, size: 28), + const SizedBox(width: 10), + Text(box.read(BoxName.lang) == 'ar' + ? "ساهم في تحسين الخريطة" + : "Contribute to Map"), + ], + ), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + box.read(BoxName.lang) == 'ar' + ? "هل هناك مكان غير موجود؟ أضفه الآن واحصل على ٥٠ نقطة مكافأة!" + : "Is there a missing place? Add it now and earn 50 reward points!", + style: const TextStyle(fontSize: 14), + ), + const SizedBox(height: 20), + TextField( + controller: entryController, + decoration: InputDecoration( + hintText: + box.read(BoxName.lang) == 'ar' ? "اسم المكان" : "Place Name", + filled: true, + fillColor: Colors.grey.shade100, + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide.none, + ), + ), + ), + ], + ), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: Text(box.read(BoxName.lang) == 'ar' ? "تراجع" : "Cancel", + style: const TextStyle(color: Colors.grey)), + ), + ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF1B5E20), + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + ), + onPressed: () { + if (entryController.text.isNotEmpty) { + controller.submitPlaceSuggestion(entryController.text); + Get.back(); + } + }, + child: Text( + box.read(BoxName.lang) == 'ar' + ? "إرسال واحصل على النقاط" + : "Submit & Earn Points", + style: const TextStyle(color: Colors.white)), + ), + ], + ), + ); +} + +class _StatItem extends StatelessWidget { + final String label; + final String value; + final Color color; + const _StatItem( + {required this.label, required this.value, required this.color}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Text(label, + style: TextStyle( + fontSize: 10, + color: _kOnSurfaceVariant, + fontWeight: FontWeight.bold)), + Text(value, + style: TextStyle( + fontSize: 16, color: color, fontWeight: FontWeight.w900)), + ], + ); + } +} + +class _ActionButton extends StatelessWidget { + final IconData icon; + final String label; + final Color color; + final Color? iconColor; + final VoidCallback onPressed; + const _ActionButton( + {required this.icon, + required this.label, + required this.color, + this.iconColor, + required this.onPressed}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + IconButton( + onPressed: onPressed, + icon: Icon(icon, color: iconColor ?? _kOnSurface), + style: IconButton.styleFrom( + backgroundColor: color, fixedSize: const Size(50, 50)), + ), + const SizedBox(height: 4), + Text(label, style: const TextStyle(fontSize: 11)), + ], + ); + } +} + +class _SpeedBadge extends StatelessWidget { + final double speed; + const _SpeedBadge({required this.speed}); + + @override + Widget build(BuildContext context) { + final int kmh = speed.toInt(); + + // Exact positioning from HTML (bottom-64 left-6, which is approx 256px from bottom) + return Positioned( + bottom: 256, + left: 24, + child: Container( + width: 80, + height: 80, + decoration: BoxDecoration( + color: _kSurfaceContainerLowest, + shape: BoxShape.circle, + border: Border.all(color: _kPrimary, width: 4), + boxShadow: const [ + BoxShadow( + color: Color(0x0F000000), blurRadius: 32, offset: Offset(0, 8)) + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('$kmh', + style: TextStyle( + color: _kOnSurface, + fontSize: 28, + fontWeight: FontWeight.w900, + height: 1.0)), + Text('km/h', + style: TextStyle( + color: _kOnSurfaceVariant, + fontSize: 10, + fontWeight: FontWeight.w800, + letterSpacing: -0.5, + )), + ], + ), + ), + ); + } +} + +// ============================================================================= +// SHARED UTILITIES +// ============================================================================= + class _MapControls extends StatelessWidget { final NavigationController controller; const _MapControls({required this.controller}); @override Widget build(BuildContext context) { - final bottomOffset = controller.isNavigating ? 190.0 : 100.0; - return Positioned( - bottom: bottomOffset, - right: 14, + right: 16, + top: MediaQuery.of(context).size.height * 0.45, child: Column( children: [ - // Re-centre / lock camera _MapFab( - icon: controller.isCameraLocked - ? Icons.gps_fixed_rounded - : Icons.gps_not_fixed_rounded, - iconColor: controller.isCameraLocked ? _kBlue : Colors.grey[600]!, + icon: Icons.my_location_rounded, + iconColor: + controller.isCameraLocked ? _kPrimary : Colors.grey[400]!, onTap: () { HapticFeedback.lightImpact(); controller.relockCameraToUser(); }, - tooltip: 'موقعي', ), - - if (controller.isNavigating) ...[ - const SizedBox(height: 10), - _MapFab( - icon: Icons.sync_alt_rounded, - iconColor: _kBlueDark, - onTap: () { - HapticFeedback.mediumImpact(); - controller.recalculateRoute(); - }, - tooltip: 'إعادة التوجيه', - ), - ], ], ), ); @@ -397,363 +988,135 @@ class _MapFab extends StatelessWidget { final IconData icon; final Color iconColor; final VoidCallback onTap; - final String tooltip; - - const _MapFab({ - required this.icon, - required this.iconColor, - required this.onTap, - required this.tooltip, - }); + const _MapFab( + {required this.icon, required this.iconColor, required this.onTap}); @override Widget build(BuildContext context) { - return Tooltip( - message: tooltip, - child: GestureDetector( - onTap: onTap, - child: Container( - width: 46, - height: 46, - decoration: BoxDecoration( - color: Colors.white, - shape: BoxShape.circle, - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.14), - blurRadius: 12, - offset: const Offset(0, 4)), - ], - ), - child: Icon(icon, color: iconColor, size: 22), - ), - ), - ); - } -} - -// ───────────────────────────────────────────────────────────────────────────── -// Route Summary Card (before navigation starts) -// ───────────────────────────────────────────────────────────────────────────── -class _RouteSummaryCard extends StatelessWidget { - final NavigationController controller; - const _RouteSummaryCard({required this.controller}); - - @override - Widget build(BuildContext context) { - return Positioned( - bottom: 0, - left: 0, - right: 0, - child: Container( - decoration: BoxDecoration( - color: _kSurface, - borderRadius: BorderRadius.vertical(top: Radius.circular(24)), - boxShadow: [ - BoxShadow( - color: Color(0x1A000000), - blurRadius: 24, - offset: Offset(0, -6)), - ], - ), - padding: EdgeInsets.fromLTRB( - 20, 16, 20, MediaQuery.of(context).padding.bottom + 16), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - // Handle - Container( - width: 36, - height: 4, - margin: const EdgeInsets.only(bottom: 18), - decoration: BoxDecoration( - color: Colors.grey[300], - borderRadius: BorderRadius.circular(2), - ), - ), - - Row( - children: [ - // Info pills - Expanded( - child: Row( - children: [ - _InfoPill( - icon: Icons.schedule_rounded, - label: controller.estimatedTimeRemaining.isNotEmpty - ? controller.estimatedTimeRemaining - : '--', - color: _kGreen, - ), - const SizedBox(width: 10), - _InfoPill( - icon: Icons.straighten_rounded, - label: controller.totalDistanceRemaining.isNotEmpty - ? controller.totalDistanceRemaining - : '--', - color: _kBlue, - ), - ], - ), - ), - // Start button - ElevatedButton.icon( - onPressed: () { - HapticFeedback.mediumImpact(); - controller.isNavigating = true; - controller.relockCameraToUser(); - controller.update(); - }, - style: ElevatedButton.styleFrom( - backgroundColor: _kBlue, - foregroundColor: Colors.white, - padding: const EdgeInsets.symmetric( - horizontal: 20, vertical: 13), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(14)), - elevation: 0, - ), - icon: const Icon(Icons.navigation_rounded, size: 18), - label: const Text('ابدأ', - style: - TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), - ), - ], - ), - ], - ), - ), - ); - } -} - -class _InfoPill extends StatelessWidget { - final IconData icon; - final String label; - final Color color; - const _InfoPill( - {required this.icon, required this.label, required this.color}); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 12), - decoration: BoxDecoration( - color: color.withOpacity(0.08), - borderRadius: BorderRadius.circular(14), - border: Border.all(color: color.withOpacity(0.2)), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Icon(icon, color: color, size: 22), - const SizedBox(width: 8), - Text(label, - style: TextStyle( - color: color, fontSize: 18, fontWeight: FontWeight.w800)), - ], - ), - ); - } -} - -// ───────────────────────────────────────────────────────────────────────────── -// Navigation HUD (bottom during active navigation — like HERE Maps) -// ───────────────────────────────────────────────────────────────────────────── -class _NavigationHUD extends StatelessWidget { - final NavigationController controller; - const _NavigationHUD({required this.controller}); - - @override - Widget build(BuildContext context) { - final bottomPad = MediaQuery.of(context).padding.bottom; - - return Positioned( - bottom: 0, - left: 0, - right: 0, - child: Container( - decoration: BoxDecoration( - color: _kSurface, - borderRadius: const BorderRadius.vertical(top: Radius.circular(24)), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.12), - blurRadius: 20, - offset: const Offset(0, -4)), - ], - ), - padding: EdgeInsets.fromLTRB(20, 14, 20, bottomPad + 12), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - // ── Next instruction row ─────────────────────────────────── - if (controller.nextInstruction.isNotEmpty) - Container( - margin: const EdgeInsets.only(bottom: 12), - padding: - const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - decoration: BoxDecoration( - color: Get.isDarkMode - ? Colors.white.withOpacity(0.05) - : const Color(0xFFF8F9FA), - borderRadius: BorderRadius.circular(12), - border: Border.all( - color: Get.isDarkMode - ? Colors.white10 - : Colors.grey.withOpacity(0.15)), - ), - child: Row( - children: [ - Icon(Icons.arrow_forward_rounded, - size: 20, color: _kSubtext), - const SizedBox(width: 10), - Expanded( - child: Text( - controller.nextInstruction, - style: TextStyle( - color: _kText, - fontSize: 16, - fontWeight: FontWeight.bold), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - ), - - // ── ETA / distance strip ─────────────────────────────────── - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - _InfoPill( - icon: Icons.schedule_rounded, - label: controller.estimatedTimeRemaining.isNotEmpty - ? controller.estimatedTimeRemaining - : '--', - color: _kGreen, - ), - _InfoPill( - icon: Icons.straighten_rounded, - label: controller.totalDistanceRemaining.isNotEmpty - ? controller.totalDistanceRemaining - : '--', - color: _kBlue, - ), - // Stop navigation - GestureDetector( - onTap: () { - HapticFeedback.mediumImpact(); - controller.clearRoute(); - }, - child: Container( - padding: - const EdgeInsets.symmetric(horizontal: 14, vertical: 9), - decoration: BoxDecoration( - color: Colors.red.withOpacity(0.08), - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.red.withOpacity(0.2)), - ), - child: Row( - children: [ - const Icon(Icons.stop_rounded, - color: Colors.redAccent, size: 24), - const SizedBox(width: 6), - const Text('إيقاف', - style: TextStyle( - color: Colors.redAccent, - fontSize: 18, - fontWeight: FontWeight.bold)), - ], - ), - ), - ), - ], - ), - ], - ), - ), - ); - } -} - -// ───────────────────────────────────────────────────────────────────────────── -// Speed badge (bottom-left during navigation) -// ───────────────────────────────────────────────────────────────────────────── -class _SpeedBadge extends StatelessWidget { - final double speed; - const _SpeedBadge({required this.speed}); - - @override - Widget build(BuildContext context) { - final int kmh = speed.toInt(); - final bool fast = kmh > 100; - - return Positioned( - bottom: MediaQuery.of(context).padding.bottom + 150, - left: 16, - child: Stack( - alignment: Alignment.center, - children: [ - // Circular progress mimicking a speedometer - SizedBox( - width: 86, - height: 86, - child: CircularProgressIndicator( - value: (kmh / 140.0) - .clamp(0.0, 1.0), // Assuming 140 is max speed shown - strokeWidth: 6, - backgroundColor: Get.isDarkMode - ? Colors.white10 - : Colors.grey.withOpacity(0.3), - valueColor: AlwaysStoppedAnimation( - fast ? Colors.redAccent : _kBlue), - ), - ), - Container( - width: 74, - height: 74, + return GestureDetector( + onTap: onTap, + child: ClipRRect( + borderRadius: BorderRadius.circular(16), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), + child: Container( + width: 56, + height: 56, decoration: BoxDecoration( - color: fast ? const Color(0xFFD93025) : _kSurface, - shape: BoxShape.circle, - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.15), - blurRadius: 16, - offset: const Offset(0, 6)), - ], - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - '$kmh', - style: TextStyle( - fontSize: 30, - fontWeight: FontWeight.w900, - color: fast ? Colors.white : _kText, - height: 1), - ), - Text( - 'كم/س', - style: TextStyle( - fontSize: 13, - color: fast ? Colors.white70 : _kSubtext, - fontWeight: FontWeight.w600), - ), - ], - ), + color: _kSurfaceContainerLowest.withOpacity(0.95), + borderRadius: BorderRadius.circular(16), + boxShadow: const [ + BoxShadow( + color: Color(0x1A000000), + blurRadius: 16, + offset: Offset(0, 8)) + ]), + child: Icon(icon, color: iconColor, size: 26), ), - ], + ), + ), + ); + } +} + +class _SearchResults extends StatelessWidget { + final NavigationController controller; + const _SearchResults({required this.controller}); + + @override + Widget build(BuildContext context) { + return Positioned( + top: MediaQuery.of(context).padding.top + 90, + left: 16, + right: 16, + child: ClipRRect( + borderRadius: BorderRadius.circular(24), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20), + child: Container( + decoration: BoxDecoration( + color: _kSurfaceContainerLowest.withOpacity(0.95), + borderRadius: BorderRadius.circular(24), + border: Border.all(color: Colors.white.withOpacity(0.2)), + boxShadow: const [ + BoxShadow( + color: Color(0x1A000000), + blurRadius: 32, + offset: Offset(0, 16)) + ]), + padding: const EdgeInsets.symmetric(vertical: 8), + child: ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 300), + child: ListView.separated( + shrinkWrap: true, + padding: EdgeInsets.zero, + itemCount: controller.placesDestination.length, + separatorBuilder: (_, __) => Divider( + height: 1, + color: _kOutlineVariant.withOpacity(0.2), + indent: 72), + itemBuilder: (_, i) { + final place = controller.placesDestination[i]; + final dist = place['distanceKm'] as double?; + return InkWell( + onTap: () => controller.selectDestination(place), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 20, vertical: 16), + child: Row( + children: [ + Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: _kSurfaceContainerHigh, + borderRadius: BorderRadius.circular(12)), + child: Icon(Icons.place_rounded, + color: _kOnSurfaceVariant, size: 20)), + const SizedBox(width: 16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(place['name'] ?? '', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: _kOnSurface), + maxLines: 1, + overflow: TextOverflow.ellipsis), + if ((place['address'] ?? '').isNotEmpty) + Text(place['address'], + style: TextStyle( + fontSize: 14, + color: _kOnSurfaceVariant), + maxLines: 1, + overflow: TextOverflow.ellipsis), + ], + ), + ), + if (dist != null) ...[ + const SizedBox(width: 12), + Text('${dist.toStringAsFixed(1)} km', + style: TextStyle( + color: _kOnSurfaceVariant, + fontSize: 14, + fontWeight: FontWeight.bold)), + ], + ], + ), + ), + ); + }, + ), + ), + ), + ), ), ); } } -// ───────────────────────────────────────────────────────────────────────────── -// Loading Overlay -// ───────────────────────────────────────────────────────────────────────────── class _LoadingOverlay extends StatelessWidget { const _LoadingOverlay(); @@ -761,29 +1124,33 @@ class _LoadingOverlay extends StatelessWidget { Widget build(BuildContext context) { return Positioned.fill( child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 4, sigmaY: 4), + filter: ImageFilter.blur(sigmaX: 6, sigmaY: 6), child: Container( - color: Colors.black.withOpacity(0.35), + color: _kPrimaryContainer.withOpacity(0.4), child: Center( child: Container( - padding: const EdgeInsets.all(24), + padding: const EdgeInsets.all(32), decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(20), - ), + color: _kSurfaceContainerLowest, + borderRadius: BorderRadius.circular(24), + boxShadow: const [ + BoxShadow( + color: Color(0x33000000), + blurRadius: 48, + offset: Offset(0, 16)) + ]), child: Column( mainAxisSize: MainAxisSize.min, children: [ - CircularProgressIndicator( - valueColor: AlwaysStoppedAnimation(_kBlue), - strokeWidth: 3, - ), - const SizedBox(height: 14), - Text('جاري حساب المسار...', + const CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation(Colors.black), + strokeWidth: 4), + const SizedBox(height: 24), + Text('Routing...'.tr, style: TextStyle( - color: _kSubtext, - fontSize: 14, - fontWeight: FontWeight.w500)), + color: _kOnSurface, + fontSize: 16, + fontWeight: FontWeight.w800)), ], ), ), @@ -793,68 +1160,3 @@ class _LoadingOverlay extends StatelessWidget { ); } } - -// ───────────────────────────────────────────────────────────────────────────── -// Shared primitives -// ───────────────────────────────────────────────────────────────────────────── -class _GlassCard extends StatelessWidget { - final Widget child; - final double borderRadius; - final EdgeInsets padding; - - const _GlassCard({ - required this.child, - this.borderRadius = 16, - this.padding = const EdgeInsets.all(16), - }); - - @override - Widget build(BuildContext context) { - return ClipRRect( - borderRadius: BorderRadius.circular(borderRadius), - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), - child: Container( - decoration: BoxDecoration( - color: _kGlassSurface, - borderRadius: BorderRadius.circular(borderRadius), - border: Border.all(color: _kGlassBorder), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(Get.isDarkMode ? 0.4 : 0.07), - blurRadius: 16, - offset: const Offset(0, 8)), - ], - ), - padding: padding, - child: child, - ), - ), - ); - } -} - -class _IconBtn extends StatelessWidget { - final IconData icon; - final Color color; - final VoidCallback onTap; - final double size; - - const _IconBtn({ - required this.icon, - required this.color, - required this.onTap, - this.size = 22, - }); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: onTap, - child: Padding( - padding: const EdgeInsets.all(8), - child: Icon(icon, color: color, size: size), - ), - ); - } -} diff --git a/packages/calendar_builder/CHANGELOG.md b/packages/calendar_builder/CHANGELOG.md new file mode 100644 index 0000000..40c8f59 --- /dev/null +++ b/packages/calendar_builder/CHANGELOG.md @@ -0,0 +1,18 @@ +## 0.0.6 + +* web, compile issue fix +## 0.0.5 + +* improve pub score +## 0.0.4 + +* added docs +## 0.0.3 + +* improve pub score +## 0.0.2 + +* Support for web +## 0.0.1 + +* initial release. diff --git a/packages/calendar_builder/LICENSE b/packages/calendar_builder/LICENSE new file mode 100644 index 0000000..e9b98ce --- /dev/null +++ b/packages/calendar_builder/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Newton Michael + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/calendar_builder/README.md b/packages/calendar_builder/README.md new file mode 100644 index 0000000..6f17b45 --- /dev/null +++ b/packages/calendar_builder/README.md @@ -0,0 +1,328 @@ +# calendar_builder + +Fully customizable calendar package for flutter. +Also supports for disabling dates, highlighting dates and displaying events inside calendar. + +## Features + +- Fully customisable widgets +- Add Events +- Highlight dates +- Disable dates +- Starting week can be changed +- ✅ MonthBuilder +- [TODO] DayBuilder +- [TODO] WeekBuilder + + +| Month Builder | Customised Month Builder | +| :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | +| ![](https://user-images.githubusercontent.com/85326522/160266643-9802e763-cf66-43cb-880f-2f861e93c208.jpg) | ![](https://user-images.githubusercontent.com/85326522/160266640-9cb71c30-9354-42bc-8b99-06f7f33518f6.jpg) | + +| Custom Month Builder | Month Builder with callbacks | +| :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | +| ![](https://user-images.githubusercontent.com/85326522/160266644-3d0b66ff-3ded-4f47-92a7-291cebc7957c.jpg) | ![](https://user-images.githubusercontent.com/85326522/160266642-9cb04737-7182-4f42-b7c1-dd0804f7aa03.jpg) | + +--- + +### Support Light and Dark theme + +![](https://user-images.githubusercontent.com/85326522/160261784-e1df931e-5e9a-475c-8bc9-a3957290de1e.gif) + + +## Installation + + +In your `pubspec.yaml` file within your Flutter Project: + +```yaml +dependencies: + calendar_builder: +``` + + +## How to use + + +```dart +import 'package:calendar_builder/calendar_builder.dart'; +import 'package:flutter/material.dart'; + +class MonthBuilderScreen extends StatelessWidget { + const MonthBuilderScreen({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: SafeArea( + child: Column( + children: [ + Expanded( + child: CbMonthBuilder( + cbConfig: CbConfig( + startDate: DateTime(2020), + endDate: DateTime(2026), + selectedDate: DateTime(2021,3,4), + selectedYear: DateTime(2021), + ), + ), + ) + ], + ), + ), + ); + } +} + +``` + +### Demo + +![](https://user-images.githubusercontent.com/85326522/160261779-9b11b4df-24c7-48e4-b3b3-d56b3d36d0e5.gif) +## Customised Month Builder +---- +### Output + +--- + +![](https://user-images.githubusercontent.com/85326522/160266642-9cb04737-7182-4f42-b7c1-dd0804f7aa03.jpg) + +### code + +--- + +```dart +CbMonthBuilder( + cbConfig: CbConfig( + startDate: DateTime(2020), + endDate: DateTime(2123), + selectedDate: DateTime(2022, 3, 4), + selectedYear: DateTime(2022), + weekStartsFrom: WeekStartsFrom.wednesday, + disabledDates: [ + DateTime(2022, 1, 7), + DateTime(2022, 1, 9), + ], + eventDates: [ + DateTime(2022, 1, 2), + DateTime(2022, 1, 2), + DateTime(2022, 1, 3) + ], + highlightedDates: [ + DateTime(2022, 1, 6), + DateTime(2022, 1, 3) + ]), + monthCustomizer: MonthCustomizer( + padding: const EdgeInsets.all(20), + monthHeaderCustomizer: MonthHeaderCustomizer( + textStyle: const TextStyle( + color: Colors.red, + fontSize: 22, + fontWeight: FontWeight.bold, + ), + ), + monthButtonCustomizer: MonthButtonCustomizer( + currentDayColor: Colors.orange, + borderStrokeWidth: 2, + textStyleOnDisabled: const TextStyle(color: Colors.red), + highlightedColor: const Color.fromARGB(255, 255, 174, 0)), + monthWeekCustomizer: MonthWeekCustomizer( + textStyle: + const TextStyle(color: Color.fromARGB(255, 255, 174, 0))) + // monthWidth: 500, + // monthHeight: 200 + ), + yearDropDownCustomizer: YearDropDownCustomizer( + yearButtonCustomizer: YearButtonCustomizer( + borderColorOnSelected: Colors.red, + ), + yearHeaderCustomizer: YearHeaderCustomizer( + titleTextStyle: + const TextStyle(color: Color.fromARGB(255, 255, 174, 0)))), + onYearHeaderExpanded: (isExpanded) { + print('isExpanded ' + isExpanded.toString()); + }, + onDateClicked: (onDateClicked) { + print('selected date' + + onDateClicked.selectedDate.toString() + + '\n' + + 'isSelected ' + + onDateClicked.isSelected.toString() + + '\n' + + 'isHighlighted ' + + onDateClicked.isHighlighted.toString() + + '\n' + + 'hasEvent ' + + onDateClicked.hasEvent.toString() + + '\n' + + 'isCurrentDate ' + + onDateClicked.isCurrentDate.toString() + + '\n' + + 'isDisabled ' + + onDateClicked.isDisabled.toString()); + }, + onYearButtonClicked: (year, isSelected) { + print('selected year ' + + year.toString() + + '\n' + + 'isSelected ' + + isSelected.toString()); + }, + ) +``` + +## Custom Month Builder +--- +### Output + +--- + +![](https://user-images.githubusercontent.com/85326522/160266644-3d0b66ff-3ded-4f47-92a7-291cebc7957c.jpg) + +### code + +--- + +```dart + +CbMonthBuilder( + cbConfig: CbConfig( + startDate: DateTime(2020), + endDate: DateTime(2123), + selectedDate: DateTime(2022), + selectedYear: DateTime(2022), + weekStartsFrom: WeekStartsFrom.sunday, + eventDates: [ + DateTime(2022, 1, 2), + DateTime(2022, 1, 2), + DateTime(2022, 1, 3) + ], + highlightedDates: [ + DateTime(2022, 1, 6), + DateTime(2022, 1, 3) + ]), + yearDropDownCustomizer: YearDropDownCustomizer( + yearHeaderBuilder: + (isYearPickerExpanded, selectedDate, selectedYear, year) { + return Container( + height: 40, + color: Colors.yellow, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + year, + style: const TextStyle(fontWeight: FontWeight.bold), + ), + Icon(!isYearPickerExpanded + ? Icons.arrow_drop_down_outlined + : Icons.arrow_drop_up_outlined) + ], + ), + ); + }, + ), + monthCustomizer: MonthCustomizer( + montMinhHeight: 200, + monthMinWidth: 450, + padding: const EdgeInsets.all(20), + monthHeaderBuilder: (month, headerHeight, headerWidth, paddingLeft) { + return Container( + color: Colors.grey[200], + height: headerHeight, + width: headerWidth, + child: Padding( + padding: EdgeInsets.only(left: paddingLeft), + child: Align( + alignment: Alignment.center, + child: Text( + month, + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ); + }, + monthWeekBuilder: (index, weeks, weekHeight, weekWidth) { + return SizedBox( + height: weekHeight, + width: weekWidth, + child: Padding( + padding: const EdgeInsets.all(4.0), + child: Container( + decoration: BoxDecoration( + color: Colors.red.withOpacity(0.1), + borderRadius: BorderRadius.circular(10), + border: Border.all(color: Colors.red)), + child: Align( + child: Text( + weeks, + style: const TextStyle( + fontSize: 14, + color: Colors.red, + fontWeight: FontWeight.w500, + ), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ), + ), + ), + ); + }, + monthButtonBuilder: (dateTime, childHeight, childWidth, isSelected, + isDisabled, hasEvent, isHighlighted, isCurrentDay) { + //Text Theme + final txtTheme = Theme.of(context).textTheme; + //color theme + final colorTheme = Theme.of(context); + + var daysText = Align( + child: Text( + '${dateTime.day}', + style: isDisabled + ? txtTheme.caption + : isSelected + ? txtTheme.bodyText1!.copyWith( + fontWeight: FontWeight.bold, + color: colorTheme.brightness == Brightness.dark + ? Colors.black + : Colors.white) + : isHighlighted + ? txtTheme.bodyText2 //Highlighted TextStyle + : isCurrentDay + ? txtTheme.bodyText2 //CurrentDay TextStyle + : txtTheme.bodyText2, + ), + ); + if (isSelected) { + return Container( + decoration: const BoxDecoration( + color: Colors.red, + shape: BoxShape.rectangle, + ), + margin: const EdgeInsets.all(2), + child: daysText, + ); + } + return Container( + decoration: BoxDecoration( + color: isDisabled ? Colors.grey[200] : Colors.yellow, + shape: BoxShape.rectangle, + border: hasEvent || isHighlighted + ? Border.all( + color: isHighlighted ? Colors.red : Colors.blue, + width: 2) + : null), + margin: const EdgeInsets.all(2), + child: daysText, + ); + }, + ), + ) + +``` diff --git a/packages/calendar_builder/analysis_options.yaml b/packages/calendar_builder/analysis_options.yaml new file mode 100644 index 0000000..03ba511 --- /dev/null +++ b/packages/calendar_builder/analysis_options.yaml @@ -0,0 +1,28 @@ +include: package:flutter_lints/flutter.yaml + +analyzer: + enable-experiment: + - non-nullable + strong-mode: + implicit-casts: false + errors: + missing_required_param: error + prefer_const_declarations: warning + prefer_const_constructors: warning + import_of_legacy_library_into_null_safe: ignore + +linter: + rules: + omit_local_variable_types: false + missing_required_param: true + prefer_const_declarations: true + prefer_const_constructors: true + public_member_api_docs: true + use_key_in_widget_constructors: true + prefer_int_literals: true + lines_longer_than_80_chars: false + prefer_relative_imports: true + always_use_package_imports: false + import_of_legacy_library_into_null_safe: false + avoid_print: true + \ No newline at end of file diff --git a/packages/calendar_builder/example/README.md b/packages/calendar_builder/example/README.md new file mode 100644 index 0000000..a135626 --- /dev/null +++ b/packages/calendar_builder/example/README.md @@ -0,0 +1,16 @@ +# 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://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/packages/calendar_builder/example/analysis_options.yaml b/packages/calendar_builder/example/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/android/.gradle/6.7/fileChanges/last-build.bin b/packages/calendar_builder/example/android/.gradle/6.7/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/packages/calendar_builder/example/android/.gradle/6.7/fileHashes/fileHashes.lock b/packages/calendar_builder/example/android/.gradle/6.7/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..06519fc955128cf069dab2c37e5651ea5725c06b GIT binary patch literal 17 TcmZSH`TD8k>uBX31}FdkJevfY literal 0 HcmV?d00001 diff --git a/packages/calendar_builder/example/android/.gradle/6.7/gc.properties b/packages/calendar_builder/example/android/.gradle/6.7/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/packages/calendar_builder/example/android/.gradle/checksums/checksums.lock b/packages/calendar_builder/example/android/.gradle/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..c828dd5da8e4b5e15ff454ff354889aec908251a GIT binary patch literal 17 TcmZSn_o`6t$h6nX7@z + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + + 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.example" + 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 + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/packages/calendar_builder/example/android/app/src/debug/AndroidManifest.xml b/packages/calendar_builder/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..c208884 --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/calendar_builder/example/android/app/src/main/AndroidManifest.xml b/packages/calendar_builder/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..3f41384 --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/packages/calendar_builder/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/packages/calendar_builder/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..539ab02 --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,19 @@ +package io.flutter.plugins; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import io.flutter.Log; + +import io.flutter.embedding.engine.FlutterEngine; + +/** + * Generated file. Do not edit. + * This file is generated by the Flutter tool based on the + * plugins that support the Android platform. + */ +@Keep +public final class GeneratedPluginRegistrant { + private static final String TAG = "GeneratedPluginRegistrant"; + public static void registerWith(@NonNull FlutterEngine flutterEngine) { + } +} diff --git a/packages/calendar_builder/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/packages/calendar_builder/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt new file mode 100644 index 0000000..e793a00 --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/packages/calendar_builder/example/android/app/src/main/res/drawable-v21/launch_background.xml b/packages/calendar_builder/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/calendar_builder/example/android/app/src/main/res/drawable/launch_background.xml b/packages/calendar_builder/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/calendar_builder/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/calendar_builder/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/packages/calendar_builder/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/calendar_builder/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/packages/calendar_builder/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/calendar_builder/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/packages/calendar_builder/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/calendar_builder/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/packages/calendar_builder/example/android/app/src/main/res/values-night/styles.xml b/packages/calendar_builder/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..3db14bb --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/packages/calendar_builder/example/android/app/src/main/res/values/styles.xml b/packages/calendar_builder/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..d460d1e --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/packages/calendar_builder/example/android/app/src/profile/AndroidManifest.xml b/packages/calendar_builder/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..c208884 --- /dev/null +++ b/packages/calendar_builder/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/calendar_builder/example/android/build.gradle b/packages/calendar_builder/example/android/build.gradle new file mode 100644 index 0000000..4256f91 --- /dev/null +++ b/packages/calendar_builder/example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:4.1.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/packages/calendar_builder/example/android/gradle.properties b/packages/calendar_builder/example/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/packages/calendar_builder/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/packages/calendar_builder/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/calendar_builder/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..bc6a58a --- /dev/null +++ b/packages/calendar_builder/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/packages/calendar_builder/example/android/gradlew b/packages/calendar_builder/example/android/gradlew new file mode 100755 index 0000000..9d82f78 --- /dev/null +++ b/packages/calendar_builder/example/android/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/packages/calendar_builder/example/android/gradlew.bat b/packages/calendar_builder/example/android/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/packages/calendar_builder/example/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/packages/calendar_builder/example/android/local.properties b/packages/calendar_builder/example/android/local.properties new file mode 100644 index 0000000..dfb2fd3 --- /dev/null +++ b/packages/calendar_builder/example/android/local.properties @@ -0,0 +1,5 @@ +sdk.dir=/Users/hamzaaleghwairyeen/Library/Android/sdk +flutter.sdk=/Users/hamzaaleghwairyeen/flutter +flutter.buildMode=debug +flutter.versionName=1.0.0 +flutter.versionCode=1 \ No newline at end of file diff --git a/packages/calendar_builder/example/android/settings.gradle b/packages/calendar_builder/example/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/packages/calendar_builder/example/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/calendar_builder/example/ios/Flutter/AppFrameworkInfo.plist b/packages/calendar_builder/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..8d4492f --- /dev/null +++ b/packages/calendar_builder/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/packages/calendar_builder/example/ios/Flutter/Debug.xcconfig b/packages/calendar_builder/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/packages/calendar_builder/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/packages/calendar_builder/example/ios/Flutter/Generated.xcconfig b/packages/calendar_builder/example/ios/Flutter/Generated.xcconfig new file mode 100644 index 0000000..c9090ab --- /dev/null +++ b/packages/calendar_builder/example/ios/Flutter/Generated.xcconfig @@ -0,0 +1,14 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter +FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/calendar_builder/example +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_TARGET=lib/main.dart +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 +EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/packages/calendar_builder/example/ios/Flutter/Release.xcconfig b/packages/calendar_builder/example/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/packages/calendar_builder/example/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldb_helper.py b/packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldb_helper.py new file mode 100644 index 0000000..a88caf9 --- /dev/null +++ b/packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldb_helper.py @@ -0,0 +1,32 @@ +# +# Generated file, do not edit. +# + +import lldb + +def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict): + """Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages.""" + base = frame.register["x0"].GetValueAsAddress() + page_len = frame.register["x1"].GetValueAsUnsigned() + + # Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the + # first page to see if handled it correctly. This makes diagnosing + # misconfiguration (e.g. missing breakpoint) easier. + data = bytearray(page_len) + data[0:8] = b'IHELPED!' + + error = lldb.SBError() + frame.GetThread().GetProcess().WriteMemory(base, data, error) + if not error.Success(): + print(f'Failed to write into {base}[+{page_len}]', error) + return + +def __lldb_init_module(debugger: lldb.SBDebugger, _): + target = debugger.GetDummyTarget() + # Caveat: must use BreakpointCreateByRegEx here and not + # BreakpointCreateByName. For some reasons callback function does not + # get carried over from dummy target for the later. + bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$") + bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__)) + bp.SetAutoContinue(True) + print("-- LLDB integration loaded --") diff --git a/packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldbinit b/packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldbinit new file mode 100644 index 0000000..e3ba6fb --- /dev/null +++ b/packages/calendar_builder/example/ios/Flutter/ephemeral/flutter_lldbinit @@ -0,0 +1,5 @@ +# +# Generated file, do not edit. +# + +command script import --relative-to-command-file flutter_lldb_helper.py diff --git a/packages/calendar_builder/example/ios/Flutter/flutter_export_environment.sh b/packages/calendar_builder/example/ios/Flutter/flutter_export_environment.sh new file mode 100755 index 0000000..48cc8e9 --- /dev/null +++ b/packages/calendar_builder/example/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/calendar_builder/example" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/packages/calendar_builder/example/ios/Runner.xcodeproj/project.pbxproj b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2250fd6 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,484 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + 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 */; }; + 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 */ + 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 = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 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 */, + ); + 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 = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + 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 */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + 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 = 9.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 = ZPBW2X86B5; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + 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 = 9.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 = 9.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 = ZPBW2X86B5; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + 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 = ZPBW2X86B5; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + 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/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/calendar_builder/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/calendar_builder/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..c87d15a --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/calendar_builder/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/calendar_builder/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/calendar_builder/example/ios/Runner/AppDelegate.swift b/packages/calendar_builder/example/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/calendar_builder/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/calendar_builder/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/calendar_builder/example/ios/Runner/Base.lproj/Main.storyboard b/packages/calendar_builder/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.h b/packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.h new file mode 100644 index 0000000..7a89092 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.h @@ -0,0 +1,19 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GeneratedPluginRegistrant_h +#define GeneratedPluginRegistrant_h + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface GeneratedPluginRegistrant : NSObject ++ (void)registerWithRegistry:(NSObject*)registry; +@end + +NS_ASSUME_NONNULL_END +#endif /* GeneratedPluginRegistrant_h */ diff --git a/packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.m b/packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.m new file mode 100644 index 0000000..efe65ec --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner/GeneratedPluginRegistrant.m @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#import "GeneratedPluginRegistrant.h" + +@implementation GeneratedPluginRegistrant + ++ (void)registerWithRegistry:(NSObject*)registry { +} + +@end diff --git a/packages/calendar_builder/example/ios/Runner/Info.plist b/packages/calendar_builder/example/ios/Runner/Info.plist new file mode 100644 index 0000000..5baf7a1 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Example + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + 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 + + + diff --git a/packages/calendar_builder/example/ios/Runner/Runner-Bridging-Header.h b/packages/calendar_builder/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/packages/calendar_builder/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/packages/calendar_builder/example/lib/custom_month_builder.dart b/packages/calendar_builder/example/lib/custom_month_builder.dart new file mode 100644 index 0000000..4e6967e --- /dev/null +++ b/packages/calendar_builder/example/lib/custom_month_builder.dart @@ -0,0 +1,169 @@ +import 'package:calendar_builder/calendar_builder.dart'; +import 'package:flutter/material.dart'; + +class CustomMonthBuilderScreen extends StatelessWidget { + const CustomMonthBuilderScreen({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: SafeArea( + child: Column( + children: [ + Expanded( + child: CbMonthBuilder( + cbConfig: CbConfig( + startDate: DateTime(2020), + endDate: DateTime(2123), + selectedDate: DateTime(2022), + selectedYear: DateTime(2022), + weekStartsFrom: WeekStartsFrom.sunday, + eventDates: [ + DateTime(2022, 1, 2), + DateTime(2022, 1, 2), + DateTime(2022, 1, 3) + ], + highlightedDates: [ + DateTime(2022, 1, 6), + DateTime(2022, 1, 3) + ]), + yearDropDownCustomizer: YearDropDownCustomizer( + yearHeaderBuilder: + (isYearPickerExpanded, selectedDate, selectedYear, year) { + return Container( + height: 40, + color: Colors.yellow, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + year, + style: const TextStyle(fontWeight: FontWeight.bold), + ), + Icon(!isYearPickerExpanded + ? Icons.arrow_drop_down_outlined + : Icons.arrow_drop_up_outlined) + ], + ), + ); + }, + ), + monthCustomizer: MonthCustomizer( + montMinhHeight: 200, + monthMinWidth: 450, + padding: const EdgeInsets.all(20), + monthHeaderBuilder: + (month, headerHeight, headerWidth, paddingLeft) { + return Container( + color: Colors.grey[200], + height: headerHeight, + width: headerWidth, + child: Padding( + padding: EdgeInsets.only(left: paddingLeft), + child: Align( + alignment: Alignment.center, + child: Text( + month, + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ); + }, + monthWeekBuilder: (index, weeks, weekHeight, weekWidth) { + return SizedBox( + height: weekHeight, + width: weekWidth, + child: Padding( + padding: const EdgeInsets.all(4.0), + child: Container( + decoration: BoxDecoration( + color: Colors.red.withOpacity(0.1), + borderRadius: BorderRadius.circular(10), + border: Border.all(color: Colors.red)), + child: Align( + child: Text( + weeks, + style: const TextStyle( + fontSize: 14, + color: Colors.red, + fontWeight: FontWeight.w500, + ), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ), + ), + ), + ); + }, + monthButtonBuilder: (dateTime, + childHeight, + childWidth, + isSelected, + isDisabled, + hasEvent, + isHighlighted, + isCurrentDay) { + //Text Theme + final txtTheme = Theme.of(context).textTheme; + //color theme + final colorTheme = Theme.of(context); + + var daysText = Align( + child: Text( + '${dateTime.day}', + style: isDisabled + ? txtTheme.titleMedium + : isSelected + ? txtTheme.bodyLarge!.copyWith( + fontWeight: FontWeight.bold, + color: + colorTheme.brightness == Brightness.dark + ? Colors.black + : Colors.white) + : isHighlighted + ? txtTheme.bodyLarge //Highlighted TextStyle + : isCurrentDay + ? txtTheme + .bodyLarge //CurrentDay TextStyle + : txtTheme.bodyLarge, + ), + ); + if (isSelected) { + return Container( + decoration: const BoxDecoration( + color: Colors.red, + shape: BoxShape.rectangle, + ), + margin: const EdgeInsets.all(2), + child: daysText, + ); + } + return Container( + decoration: BoxDecoration( + color: isDisabled ? Colors.grey[200] : Colors.yellow, + shape: BoxShape.rectangle, + border: hasEvent || isHighlighted + ? Border.all( + color: + isHighlighted ? Colors.red : Colors.blue, + width: 2) + : null), + margin: const EdgeInsets.all(2), + child: daysText, + ); + }, + ), + ), + ) + ], + ), + ), + ); + } +} diff --git a/packages/calendar_builder/example/lib/customized_month_builder.dart b/packages/calendar_builder/example/lib/customized_month_builder.dart new file mode 100644 index 0000000..ebd91f7 --- /dev/null +++ b/packages/calendar_builder/example/lib/customized_month_builder.dart @@ -0,0 +1,128 @@ +import 'package:calendar_builder/calendar_builder.dart'; +import 'package:flutter/material.dart'; + +class CustomizedMonthBuilderScreen extends StatefulWidget { + const CustomizedMonthBuilderScreen({Key? key}) : super(key: key); + + @override + State createState() => + _CustomizedMonthBuilderScreenState(); +} + +class _CustomizedMonthBuilderScreenState + extends State { + bool isDarkMode = true; + @override + Widget build(BuildContext context) { + return Theme( + data: isDarkMode ? ThemeData.dark() : ThemeData.light(), + child: Scaffold( + body: SafeArea( + child: Column( + children: [ + Expanded( + child: CbMonthBuilder( + cbConfig: CbConfig( + startDate: DateTime(2020), + endDate: DateTime(2123), + selectedDate: DateTime(2022, 3, 4), + selectedYear: DateTime(2022), + weekStartsFrom: WeekStartsFrom.wednesday, + disabledDates: [ + DateTime(2022, 1, 7), + DateTime(2022, 1, 9), + ], + eventDates: [ + DateTime(2022, 1, 2), + DateTime(2022, 1, 2), + DateTime(2022, 1, 3) + ], + highlightedDates: [ + DateTime(2022, 1, 6), + DateTime(2022, 1, 3) + ]), + monthCustomizer: MonthCustomizer( + padding: const EdgeInsets.all(20), + monthHeaderCustomizer: MonthHeaderCustomizer( + textStyle: const TextStyle( + color: Colors.red, + fontSize: 22, + fontWeight: FontWeight.bold, + ), + ), + monthButtonCustomizer: MonthButtonCustomizer( + currentDayColor: Colors.orange, + borderStrokeWidth: 2, + textStyleOnDisabled: + const TextStyle(color: Colors.red), + highlightedColor: + const Color.fromARGB(255, 255, 174, 0)), + monthWeekCustomizer: MonthWeekCustomizer( + textStyle: const TextStyle( + color: Color.fromARGB(255, 255, 174, 0))) + // monthWidth: 500, + // monthHeight: 200 + ), + yearDropDownCustomizer: YearDropDownCustomizer( + yearButtonCustomizer: YearButtonCustomizer( + borderColorOnSelected: Colors.red, + ), + yearHeaderCustomizer: YearHeaderCustomizer( + titleTextStyle: const TextStyle( + color: Color.fromARGB(255, 255, 174, 0)))), + onYearHeaderExpanded: (isExpanded) { + snackBar('isExpanded ' + isExpanded.toString()); + }, + onDateClicked: (onDateClicked) { + snackBar('selected date' + + onDateClicked.selectedDate.toString() + + '\n' + + 'isSelected ' + + onDateClicked.isSelected.toString() + + '\n' + + 'isHighlighted ' + + onDateClicked.isHighlighted.toString() + + '\n' + + 'hasEvent ' + + onDateClicked.hasEvent.toString() + + '\n' + + 'isCurrentDate ' + + onDateClicked.isCurrentDate.toString() + + '\n' + + 'isDisabled ' + + onDateClicked.isDisabled.toString()); + }, + onYearButtonClicked: (year, isSelected) { + snackBar('selected year ' + + year.toString() + + '\n' + + 'isSelected ' + + isSelected.toString()); + }), + ) + ], + ), + ), + floatingActionButton: FloatingActionButton.extended( + onPressed: () { + isDarkMode = !isDarkMode; + setState(() {}); + }, + isExtended: true, + label: Row( + children: [ + Icon(!isDarkMode ? Icons.dark_mode : Icons.light_mode), + Text(!isDarkMode ? ' Dark Mode' : ' Light Mode') + ], + ), + ), + ), + ); + } + + void snackBar(Object meg) { + ScaffoldMessenger.of(context) + ..hideCurrentSnackBar() + ..showSnackBar(SnackBar(content: Text(meg.toString()))); + } +} diff --git a/packages/calendar_builder/example/lib/main.dart b/packages/calendar_builder/example/lib/main.dart new file mode 100644 index 0000000..683a4cc --- /dev/null +++ b/packages/calendar_builder/example/lib/main.dart @@ -0,0 +1,88 @@ +import 'package:calendar_builder/calendar_builder.dart'; +import 'package:example/custom_month_builder.dart'; +import 'package:example/customized_month_builder.dart'; +import 'package:example/month_builder.dart'; + +import 'package:flutter/material.dart'; + +void main() { + CalendarGlobals.showLogs = true; + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Calendar builder Demo', + // theme: ThemeData(brightness: Brightness.dark), + // themeMode: ThemeMode.dark, + // darkTheme: ThemeData.dark(), + routes: { + '/month_builder': (context) => const MonthBuilderScreen(), + '/customized_month_builder': (context) => + const CustomizedMonthBuilderScreen(), + '/custom_month_builder': (context) => const CustomMonthBuilderScreen(), + // '/fromAsset': (context) => const PlayVideoFromAsset(), + // '/fromNetwork': (context) => const PlayVideoFromNetwork(), + // '/customVideo': (context) => const CustomVideoControlls(), + }, + home: const MainPage(), + ); + } +} + +class MainPage extends StatefulWidget { + const MainPage({Key? key}) : super(key: key); + + @override + State createState() => _MainPageState(); +} + +class _MainPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: ListView( + shrinkWrap: true, + children: [ + // _button('Play video from File'), + _button( + 'Default / Simple Month Builder', + onPressed: () => + Navigator.of(context).pushNamed('/month_builder'), + ), + _button( + 'Customized Month Builder', + onPressed: () => + Navigator.of(context).pushNamed('/customized_month_builder'), + ), + _button( + 'Custom Month Builder', + onPressed: () => + Navigator.of(context).pushNamed('/custom_month_builder'), + ), + ], + ), + ), + ); + } + + Widget _button(String text, {void Function()? onPressed}) { + return Center( + child: Padding( + padding: const EdgeInsets.all(20), + child: OutlinedButton( + onPressed: onPressed ?? () {}, + child: Text( + text, + style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + ), + ), + ); + } +} diff --git a/packages/calendar_builder/example/lib/month_builder.dart b/packages/calendar_builder/example/lib/month_builder.dart new file mode 100644 index 0000000..2c03eb9 --- /dev/null +++ b/packages/calendar_builder/example/lib/month_builder.dart @@ -0,0 +1,28 @@ +import 'package:calendar_builder/calendar_builder.dart'; +import 'package:flutter/material.dart'; + +class MonthBuilderScreen extends StatelessWidget { + const MonthBuilderScreen({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: SafeArea( + child: Column( + children: [ + Expanded( + child: CbMonthBuilder( + cbConfig: CbConfig( + startDate: DateTime(2020), + endDate: DateTime(2026), + selectedDate: DateTime(2021, 3, 4), + selectedYear: DateTime(2021), + ), + ), + ) + ], + ), + ), + ); + } +} diff --git a/packages/calendar_builder/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/calendar_builder/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/packages/calendar_builder/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/calendar_builder/example/macos/Flutter/Flutter-Release.xcconfig b/packages/calendar_builder/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/packages/calendar_builder/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/calendar_builder/example/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/calendar_builder/example/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..cccf817 --- /dev/null +++ b/packages/calendar_builder/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/packages/calendar_builder/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/packages/calendar_builder/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 0000000..9d1170c --- /dev/null +++ b/packages/calendar_builder/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,11 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter +FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/calendar_builder/example +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/packages/calendar_builder/example/macos/Flutter/ephemeral/flutter_export_environment.sh b/packages/calendar_builder/example/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100755 index 0000000..49bd4d7 --- /dev/null +++ b/packages/calendar_builder/example/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/calendar_builder/example" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/packages/calendar_builder/example/macos/Runner.xcodeproj/project.pbxproj b/packages/calendar_builder/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c84862c --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,572 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + 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 */; }; +/* 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 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "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 = ""; }; + 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 = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + 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 */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* 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 = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + 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 */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + 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"; + }; +/* 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.11; + 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.11; + 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.11; + 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/packages/calendar_builder/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/calendar_builder/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/calendar_builder/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/calendar_builder/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..fb7259e --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/calendar_builder/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/calendar_builder/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/calendar_builder/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/calendar_builder/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/calendar_builder/example/macos/Runner/AppDelegate.swift b/packages/calendar_builder/example/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 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 literal 0 HcmV?d00001 diff --git a/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 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 N;OXk;vd$@?2>?>Ex^Vyi literal 0 HcmV?d00001 diff --git a/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 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 f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c literal 0 HcmV?d00001 diff --git a/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/packages/calendar_builder/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/calendar_builder/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/calendar_builder/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..8b42559 --- /dev/null +++ b/packages/calendar_builder/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 = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. diff --git a/packages/calendar_builder/example/macos/Runner/Configs/Debug.xcconfig b/packages/calendar_builder/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/calendar_builder/example/macos/Runner/Configs/Release.xcconfig b/packages/calendar_builder/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/calendar_builder/example/macos/Runner/Configs/Warnings.xcconfig b/packages/calendar_builder/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/macos/Runner/DebugProfile.entitlements b/packages/calendar_builder/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/macos/Runner/Info.plist b/packages/calendar_builder/example/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/macos/Runner/MainFlutterWindow.swift b/packages/calendar_builder/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..2722837 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/macos/Runner/Release.entitlements b/packages/calendar_builder/example/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/packages/calendar_builder/example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/packages/calendar_builder/example/pubspec.lock b/packages/calendar_builder/example/pubspec.lock new file mode 100644 index 0000000..750ef9e --- /dev/null +++ b/packages/calendar_builder/example/pubspec.lock @@ -0,0 +1,236 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + calendar_builder: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.0.6" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.dev" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" + url: "https://pub.dev" + source: hosted + version: "1.0.9" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: b543301ad291598523947dc534aaddc5aaad597b709d2426d3a0e0d44c5cb493 + url: "https://pub.dev" + source: hosted + version: "1.0.4" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + get: + dependency: transitive + description: + name: get + sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" + url: "https://pub.dev" + source: hosted + version: "4.7.3" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: a2c3d198cb5ea2e179926622d433331d8b58374ab8f29cdda6e863bd62fd369c + url: "https://pub.dev" + source: hosted + version: "1.0.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + url: "https://pub.dev" + source: hosted + version: "0.12.18" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.dev" + source: hosted + version: "1.17.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + url: "https://pub.dev" + source: hosted + version: "0.7.9" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499" + url: "https://pub.dev" + source: hosted + version: "15.1.0" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" +sdks: + dart: ">=3.9.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/calendar_builder/example/pubspec.yaml b/packages/calendar_builder/example/pubspec.yaml new file mode 100644 index 0000000..50925b7 --- /dev/null +++ b/packages/calendar_builder/example/pubspec.yaml @@ -0,0 +1,91 @@ +name: example +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.16.1 <3.0.0" + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + calendar_builder: + path: ../ + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^1.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/calendar_builder/example/test/widget_test.dart b/packages/calendar_builder/example/test/widget_test.dart new file mode 100644 index 0000000..a19dabb --- /dev/null +++ b/packages/calendar_builder/example/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:example/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/packages/calendar_builder/example/web/favicon.png b/packages/calendar_builder/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/packages/calendar_builder/example/web/icons/Icon-192.png b/packages/calendar_builder/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/packages/calendar_builder/example/web/icons/Icon-512.png b/packages/calendar_builder/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/packages/calendar_builder/example/web/icons/Icon-maskable-192.png b/packages/calendar_builder/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/packages/calendar_builder/example/web/icons/Icon-maskable-512.png b/packages/calendar_builder/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/packages/calendar_builder/example/web/index.html b/packages/calendar_builder/example/web/index.html new file mode 100644 index 0000000..b6b9dd2 --- /dev/null +++ b/packages/calendar_builder/example/web/index.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + example + + + + + + + diff --git a/packages/calendar_builder/example/web/manifest.json b/packages/calendar_builder/example/web/manifest.json new file mode 100644 index 0000000..096edf8 --- /dev/null +++ b/packages/calendar_builder/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "example", + "short_name": "example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/packages/calendar_builder/example/windows/CMakeLists.txt b/packages/calendar_builder/example/windows/CMakeLists.txt new file mode 100644 index 0000000..1633297 --- /dev/null +++ b/packages/calendar_builder/example/windows/CMakeLists.txt @@ -0,0 +1,95 @@ +cmake_minimum_required(VERSION 3.14) +project(example LANGUAGES CXX) + +set(BINARY_NAME "example") + +cmake_policy(SET CMP0063 NEW) + +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Configure build options. +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() + +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. +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() + +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") + +# Flutter library and tool build rules. +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build +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/packages/calendar_builder/example/windows/flutter/CMakeLists.txt b/packages/calendar_builder/example/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..b2e4bd8 --- /dev/null +++ b/packages/calendar_builder/example/windows/flutter/CMakeLists.txt @@ -0,0 +1,103 @@ +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") + +# === 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" + windows-x64 $ + 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/packages/calendar_builder/example/windows/flutter/generated_plugin_registrant.cc b/packages/calendar_builder/example/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..8b6d468 --- /dev/null +++ b/packages/calendar_builder/example/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/packages/calendar_builder/example/windows/flutter/generated_plugin_registrant.h b/packages/calendar_builder/example/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/windows/flutter/generated_plugins.cmake b/packages/calendar_builder/example/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..b93c4c3 --- /dev/null +++ b/packages/calendar_builder/example/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/packages/calendar_builder/example/windows/runner/CMakeLists.txt b/packages/calendar_builder/example/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..de2d891 --- /dev/null +++ b/packages/calendar_builder/example/windows/runner/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +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_standard_settings(${BINARY_NAME}) +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/packages/calendar_builder/example/windows/runner/Runner.rc b/packages/calendar_builder/example/windows/runner/Runner.rc new file mode 100644 index 0000000..5fdea29 --- /dev/null +++ b/packages/calendar_builder/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 +// + +#ifdef FLUTTER_BUILD_NUMBER +#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#else +#define VERSION_AS_NUMBER 1,0,0 +#endif + +#ifdef FLUTTER_BUILD_NAME +#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#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", "example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "example.exe" "\0" + VALUE "ProductName", "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/packages/calendar_builder/example/windows/runner/flutter_window.cpp b/packages/calendar_builder/example/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..b43b909 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/windows/runner/flutter_window.h b/packages/calendar_builder/example/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/windows/runner/main.cpp b/packages/calendar_builder/example/windows/runner/main.cpp new file mode 100644 index 0000000..bcb57b0 --- /dev/null +++ b/packages/calendar_builder/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"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/packages/calendar_builder/example/windows/runner/resource.h b/packages/calendar_builder/example/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/windows/runner/resources/app_icon.ico b/packages/calendar_builder/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/packages/calendar_builder/example/windows/runner/runner.exe.manifest b/packages/calendar_builder/example/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..c977c4a --- /dev/null +++ b/packages/calendar_builder/example/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/packages/calendar_builder/example/windows/runner/utils.cpp b/packages/calendar_builder/example/windows/runner/utils.cpp new file mode 100644 index 0000000..d19bdbb --- /dev/null +++ b/packages/calendar_builder/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); + if (target_length == 0) { + return std::string(); + } + std::string 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/packages/calendar_builder/example/windows/runner/utils.h b/packages/calendar_builder/example/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/windows/runner/win32_window.cpp b/packages/calendar_builder/example/windows/runner/win32_window.cpp new file mode 100644 index 0000000..c10f08d --- /dev/null +++ b/packages/calendar_builder/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/packages/calendar_builder/example/windows/runner/win32_window.h b/packages/calendar_builder/example/windows/runner/win32_window.h new file mode 100644 index 0000000..17ba431 --- /dev/null +++ b/packages/calendar_builder/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/calendar_builder/lib/calendar_builder.dart b/packages/calendar_builder/lib/calendar_builder.dart new file mode 100644 index 0000000..177ae29 --- /dev/null +++ b/packages/calendar_builder/lib/calendar_builder.dart @@ -0,0 +1,6 @@ +export 'src/utils/global.dart'; +export 'src/utils/widgets.dart'; +export 'src/models/cb_config.dart'; +export 'src/utils/date_utils_cb.dart'; +export 'src/models/month_data_model.dart'; +export './src/views/month_builder.dart'; diff --git a/packages/calendar_builder/lib/src/controllers/cb_controller.dart b/packages/calendar_builder/lib/src/controllers/cb_controller.dart new file mode 100644 index 0000000..f0fe2a9 --- /dev/null +++ b/packages/calendar_builder/lib/src/controllers/cb_controller.dart @@ -0,0 +1,14 @@ +import '../models/cb_config.dart'; + +import 'package:get/get.dart'; + +///Main controller for all the datas +class CbController extends GetxController { + ///data configuration for [cbcontroller] + CbConfig? cbConfig; + + ///add config + void changeConfig(CbConfig config) { + cbConfig = config; + } +} diff --git a/packages/calendar_builder/lib/src/controllers/month_builder_controller.dart b/packages/calendar_builder/lib/src/controllers/month_builder_controller.dart new file mode 100644 index 0000000..5168a32 --- /dev/null +++ b/packages/calendar_builder/lib/src/controllers/month_builder_controller.dart @@ -0,0 +1,179 @@ +import 'package:get/get.dart'; +import '../../calendar_builder.dart'; + +/// State manager or controller of MonthBuilder +class MonthBuilderController extends GetxController { + ///startDate of month + DateTime mStartDate = DateTime(DateTime.now().year); + + /// EndDate of month + /// default one year greater than [mStartDate] + /// [endDate] should be greater than [startDate] + DateTime mEndDate = + DateTime(DateTime.now().year + 20).subtract(const Duration(days: 1)); + + ///Current day/Todays Date of Birth" + ///default = now + DateTime mCurrentDay = DateTime.now(); + + ///this contains all the [DateTime] from [mStartDate] to [mEndDate] with [mEndDate]+its full year + ///!minimum 1 year dates will be there + late List mAllDates; + + ///this contains all the [DateTime] from [mStartDate] to [mEndDate] + late List mStartToEndDates; + + ///this contains all the dateTime sorted in the basis of years from [mStartDate] to [mEndDate] + ///!minimum 1 year will be there + late List mAllYears; + + ///lits of 16 dates for year dropDown + late List m16DateTimeYears; + + ///Slected Date + ///default = [mStartDate] + DateTime mSelectedDate = DateTime.now(); + + ///Slected Year + ///default = [DateTime(mStartDate.year)] + DateTime mSelectedYear = DateTime(DateTime.now().year); + + ///all events dates + List mEventDates = []; + + ///all disabled dates + List mDisabledDates = []; + + ///all hilighted dates + List mHighlightedDates = []; + + ///weeek start from + ///default = `WeekStartsFrom.sunday` + WeekStartsFrom mWeekStartsFrom = WeekStartsFrom.sunday; + + ///used to improve the performance of [monthBuilder] + ///wee add all the datas using [addToSavedMonthDates] function + ///and theen [savedMonthRemover] this function removers dates + ///if [savedMonthDatas.length] exceeds 3 + /// + List savedMonthDatas = []; + + ///removed date from [savedMonthDatas] + DateTime? removedDate; + + ///all month start up logic + void _logicInitialization() { + ///alll the dates form [mStartDate] to [mEndDate] + mStartToEndDates = + DateUtilsCB.getDaysInBeteween(startDate: mStartDate, endDate: mEndDate); + + ///all the dates in each the year + mAllDates = DateUtilsCB.getAllDaysInBetweenYears( + startDate: mStartDate, endDate: mEndDate); + + ///gets all the years form [mStartDate] to [mEndDate] + mAllYears = DateUtilsCB.getYearsInBeteween( + startDate: mStartDate, endDate: mEndDate); + + _yearBuilderLogic(); + } + + ///configaration for month builder + void config({CbConfig? config, bool useOnHotReload = false}) { + if (useOnHotReload == false) { + mStartDate = config?.startDate ?? DateTime(DateTime.now().year); + } + mEndDate = config?.endDate ?? + DateTime(DateTime.now().year + 20).subtract(const Duration(days: 1)); + + /// + if (useOnHotReload == false) { + mSelectedDate = config?.selectedDate ?? DateTime.now(); + mSelectedYear = config?.selectedYear ?? DateTime(mStartDate.year); + } + mCurrentDay = config?.currentDay ?? DateTime.now(); + mWeekStartsFrom = config?.weekStartsFrom ?? WeekStartsFrom.sunday; + mEventDates = config?.eventDates ?? []; + mHighlightedDates = config?.highlightedDates ?? []; + mDisabledDates = config?.disabledDates ?? []; + _logicInitialization(); + } + + ///For Improving Performace + ///Add selectedYear to savedMonthDatas --- to save data + void addToSavedMonthDates(DateTime date) { + savedMonthDatas.add(date); + savedMonthDatas = savedMonthDatas.toSet().toList(); + } + + ///For Improving Performace + ///to check wether the saved month size exceeds 3 + ///if excedes it removes previous cached datas + void savedMonthRemover(DateTime date) { + CalendarGlobals.debugLogs('-----$date'); + if (savedMonthDatas.length > 3) { + if (savedMonthDatas[0] != date) { + removedDate = savedMonthDatas[0]; + savedMonthDatas.removeAt(0); + update(['removedDate:$removedDate!']); + CalendarGlobals.debugLogs('removedDate:$removedDate!'); + } else { + removedDate = null; + } + } else { + removedDate = null; + } + } + + ///Checking [mAllYears] + ///because to get alll the 16 days to fill the boxes in [UI] + void _yearBuilderLogic() { + if (mAllYears.length < 16) { + m16DateTimeYears = DateUtilsCB.getYearsInBeteween( + startDate: mStartDate, + endDate: DateTime(mAllYears.last.year + (16 - (mAllYears.length))), + ); + } else { + m16DateTimeYears = []; + } + } + + ///fuction to update Selected Date [mSelectedDate] + void changeSelectedDate({ + required DateTime selectedDate, + DateTime? oldSelectedDate, + required String commonUpdateId, + String? updateId, + bool updateByID = false, + }) { + mSelectedDate = selectedDate; + //common update Id for date changes + update([commonUpdateId]); + CalendarGlobals.debugLogs('old:$oldSelectedDate'); + CalendarGlobals.debugLogs('selcted:$selectedDate'); + if (updateByID && oldSelectedDate != null && updateId != null) { + update([selectedDate, oldSelectedDate, updateId]); + } else { + update(); + } + } + + ///fuction to update Selected Date [mSelectedYear] + void changeSelectedYear({ + required DateTime selectedYear, + DateTime? oldSelectedYear, + required String commonUpdateId, + String? updateId, + bool updateByID = false, + }) { + mSelectedYear = selectedYear; + //common update Id for date changes + update([commonUpdateId]); + + if (updateByID && oldSelectedYear != null && updateId != null) { + update([selectedYear, oldSelectedYear, updateId]); + } else { + update(); + } + } +} diff --git a/packages/calendar_builder/lib/src/controllers/month_ui_controller.dart b/packages/calendar_builder/lib/src/controllers/month_ui_controller.dart new file mode 100644 index 0000000..989eda9 --- /dev/null +++ b/packages/calendar_builder/lib/src/controllers/month_ui_controller.dart @@ -0,0 +1,46 @@ +import 'package:flutter/cupertino.dart'; +import 'package:get/get.dart'; + +import '../../calendar_builder.dart'; + +///this controller is used to controll the state of the [month_builder] ui +class MonthUiController extends GetxController { + ///checking wether the yer picker is expanded or not + bool isYearPickerExpanded = false; + + ///Page controller for Month + late PageController mPageController; + + ///callback when year header is expanded + void Function(bool isExpanded)? onYearHeaderExpanded; + + /// callback when year button is clicked + void Function(DateTime selectedYear, bool isSelected)? onYearButtonClicked; + + /// callback when date button is clicked + void Function(OnDateSelected onDateSelected)? onDateClicked; + + ///used to chage the expanded or not-expanded , state of year picker + void chageYearExpanded( + {String? updateId, + required String commonUpdateId, + required bool isExpanded}) { + ///if its aldready in the same state then it will not update + if (isYearPickerExpanded != isExpanded) { + isYearPickerExpanded = isExpanded; + + ///common update Id for year picker expanded + update([commonUpdateId]); + if (updateId != null) { + update([updateId]); + } else { + update(); + } + } + } + + ///checking for year dropdown should be expanded initially or not + void expandInitiaally(bool isExpanded) { + isYearPickerExpanded = isExpanded; + } +} diff --git a/packages/calendar_builder/lib/src/models/cb_config.dart b/packages/calendar_builder/lib/src/models/cb_config.dart new file mode 100644 index 0000000..5be5ac6 --- /dev/null +++ b/packages/calendar_builder/lib/src/models/cb_config.dart @@ -0,0 +1,82 @@ +import '../utils/date_utils_cb.dart'; + +///Global configuration class for [calendar_builder] +class CbConfig { + ///startDate of month + final DateTime startDate; + + /// EndDate of month + /// [endDate] should be greater than [startDate] + final DateTime endDate; + + ///Current day/Todays Date + ///default = now + final DateTime? currentDay; + + ///Slected Date + ///default = [startDate] + final DateTime selectedDate; + + ///Slected Year + ///default = [DateTime(StartDate.year)] + final DateTime selectedYear; + + ///Add events + final List? eventDates; + + ///Add disabled dates + final List? disabledDates; + + ///Add hilighted dates + final List? highlightedDates; + + ///weeek start from + ///default = `WeekStartsFrom.sunday` + /// + ///------options--------- + /// + /// `WeekStartsFrom.monday` + /// + /// `WeekStartsFrom.tuesday` + /// + /// `WeekStartsFrom.wednesday` + /// + /// `WeekStartsFrom.thursday` + /// + /// `WeekStartsFrom.friday` + /// + /// `WeekStartsFrom.saturday` + /// + /// `WeekStartsFrom.sunday` + final WeekStartsFrom weekStartsFrom; + + /// + CbConfig({ + required this.startDate, + required this.endDate, + required this.selectedDate, + required this.selectedYear, + this.currentDay, + this.eventDates, + this.disabledDates, + this.highlightedDates, + this.weekStartsFrom = WeekStartsFrom.sunday, + }) : assert(startDate.isBefore(endDate), + '\n\nERROR ( Calendar Builder ):\n---------\nInside CbConfig()\nEndDate Should be greater than StartDate\n---------\n_'), + assert( + DateUtilsCB.checkDayisSelected( + dateSelected: selectedDate, + loopedDay: endDate, + ) || + selectedDate.isBefore(endDate), + '\n\nERROR ( Calendar Builder ):\n---------\nInside CbConfig()\nSelectedDate Should be in B/w StartDate and EndDate\n---------\n_'), + assert( + DateUtilsCB.checkDayisSelected( + dateSelected: selectedDate, + loopedDay: startDate, + ) || + selectedDate.isAfter(startDate), + '\n\nERROR ( Calendar Builder ):\n---------\nInside CbConfig()\nSelectedDate Should be in B/w StartDate and EndDate\n---------\n_'), + assert(selectedYear.year >= startDate.year && + selectedYear.year <= endDate.year); +} diff --git a/packages/calendar_builder/lib/src/models/month_data_model.dart b/packages/calendar_builder/lib/src/models/month_data_model.dart new file mode 100644 index 0000000..8b95a62 --- /dev/null +++ b/packages/calendar_builder/lib/src/models/month_data_model.dart @@ -0,0 +1,685 @@ +import 'package:flutter/material.dart'; + +///Year Header Builder +typedef WidgetCbYearHeader = Widget Function( + bool isYearPickerExpanded, + DateTime selectedDate, + DateTime selectedYear, + String year, +); + +///year button builder +typedef WidgetCbYearButton = Widget Function( + DateTime dateTime, + double heightResponsive, + double widthResponsive, + bool isYearDisabled, + bool isYearSelected, +); + +///Month button builder +typedef WidgetCbMonthButton = Widget Function( + DateTime dateTime, + double childHeight, + double childWidth, + bool isSelected, + bool isDisabled, + bool hasEvent, + bool isHighlighted, + bool isCurrentDate); + +/// Month week builder +typedef WidgetCbMonthWeek = Widget Function( + int index, + String weeks, + double weekHeight, + double weekWidth, +); + +///Month Header builder +typedef WeidgetCbMonthHeader = Widget Function( + String month, + double headerHeight, + double headerWidth, + double paddingLeft, +); + +///A data class for customizing buttons of [CbYearDropDown] +class YearButtonCustomizer { + ///constructor + YearButtonCustomizer({ + this.borderColorOnSelected, + this.borderColorOnDisabled, + this.borderColorOnEnabled, + this.textColorOnSelected, + this.textColorOnDisabled, + this.textColorOnEnabled, + this.splashColor, + this.hoverColor, + this.onPressed, + this.shrinkOnButtonPressed = true, + }); + + ///Apply border color to button When buttton is [selected] + final Color? borderColorOnSelected; + + ///Apply border color to button When buttton is [Disabled] + + final Color? borderColorOnDisabled; + + ///Apply border color to button When buttton is [Enabled] + + final Color? borderColorOnEnabled; + + ///change text color of [selected] year inside Button + final Color? textColorOnSelected; + + ///change text color of [Disabled] year inside Button + + final Color? textColorOnDisabled; + + ///change text color of [enabled] year inside Button + + final Color? textColorOnEnabled; + + ///Change spalash color of button + final Color? splashColor; + + ///Change hover color of button + + final Color? hoverColor; + + ///onPress calback when buttton is pressed + final void Function(bool isButtonDisabled, DateTime selectedYear)? onPressed; + + ///shrink expanded On Buttton Pressed [bool] + ///default [true] + final bool shrinkOnButtonPressed; +} + +///A data class for customizing year Header of [CbYearDropDown] + +class YearHeaderCustomizer { + /// + YearHeaderCustomizer({ + this.titleTextStyle, + this.height = 40, + this.width, + this.downIcon = Icons.arrow_drop_down_outlined, + this.upIcon = Icons.arrow_drop_up_outlined, + }); + + ///change TextStyle of year title + final TextStyle? titleTextStyle; + + ///change height of year Headder + final double height; + + ///change width of year Headder + final double? width; + + ///change expanded down icons + final IconData downIcon; + + ///change expanded up icons + final IconData upIcon; +} + +///Customize year DropDown +class YearDropDownCustomizer { + /// + const YearDropDownCustomizer({ + this.yearHeaderCustomizer, + this.yearButtonCustomizer, + this.yearHeaderBuilder, + this.yearButtonBuilder, + this.expandedYearHeight = 200, + this.expandedYearWidth, + this.expandYearInitially = false, + }); + + ///customise year Header style [YearHeaderCustomizer] + ///```dart + /// + ///YearHeaderCustomizer(), + /// + /// + /// ``` + /// {@end-tool} + final YearHeaderCustomizer? yearHeaderCustomizer; + + ///customise year button style [YearButtonCustomizer] + ///```dart + /// + ///YearButtonCustomizer(), + /// + /// + /// ``` + /// {@end-tool} + final YearButtonCustomizer? yearButtonCustomizer; + + ///Build your custom YearDropDown Header + /// + ///* NOTE: COPY & PASTE + ///* ### Sample code + /// + /// ```dart + /// yearHeaderBuilder: (isYearPickerExpanded, selectedDate, selectedYear, year) { + /// return SizedBox( + /// height: 40, + /// child: Row( + /// mainAxisAlignment: MainAxisAlignment.center, + /// crossAxisAlignment: CrossAxisAlignment.center, + /// children: [ + /// Text( + /// year, + /// style: const TextStyle(fontWeight: FontWeight.bold), + /// ), + /// Icon(!isYearPickerExpanded + /// ? Icons.arrow_drop_down_outlined + /// : Icons.arrow_drop_up_outlined) + /// ], + /// ), + /// ); + /// }, + /// ``` + /// {@end-tool} + /// + final WidgetCbYearHeader? yearHeaderBuilder; + + ///Build your own year buttons + /// + ///* NOTE: COPY & PASTE + ///* ### Sample code + /// + /// ```dart + /// yearButtonBuilder: (dateTime, heightResponsive,widthResponsive, isyearDisabled, isYearselected) { + /// final txtTheme = Theme.of(context).textTheme; + /// final colorTheme = Theme.of(context); + /// return SizedBox( + /// height: heightResponsive, + /// width: widthResponsive, + /// child: DecoratedBox( + /// decoration: BoxDecoration( + /// borderRadius: BorderRadius.all( + /// Radius.circular(heightResponsive), + /// ), + /// border: Border.all( + /// color: isyearDisabled + /// ? colorTheme.disabledColor.withOpacity(0.1) + /// : isYearselected + /// ? (colorTheme.brightness == + /// Brightness.dark + /// ? colorTheme.accentColor + /// : Colors.black) + /// : Colors.grey, + /// width: isyearDisabled + /// ? 1 + /// : isYearselected + /// ? 1.5 + /// : 1), + /// ), + /// child: FittedBox( + /// fit: BoxFit.scaleDown, + /// child: Text(dateTime.year.toString(), + /// style: isyearDisabled + /// ? txtTheme.caption + /// : isYearselected + /// ? txtTheme.button + /// : txtTheme.button,), + /// ), + /// ), + /// ); + /// }, + /// ``` + /// {@end-tool} + /// + final WidgetCbYearButton? yearButtonBuilder; + + ///Expanded Height of year dropDown + ///default = 200 + final double expandedYearHeight; + + ///Expanded Width of year dropDown + final double? expandedYearWidth; + + ///default = `false` + ///Expande year Drop Down initially + final bool expandYearInitially; +} + +///customozer calss for Month button +class MonthButtonCustomizer { + ///height of month button + final double? height; + + ///width of month button + final double? width; + + ///Text Style on Enabled + final TextStyle? textStyleOnEnabled; + + ///Text Style on Disabled + final TextStyle? textStyleOnDisabled; + + ///Text Style on Selected + final TextStyle? textStyleOnSelected; + + ///Text Style on CurrentDay + final TextStyle? currentDayTextStyle; + + ///Text Style on Highlighted + final TextStyle? highlightedTextStyle; + + /// color on Disabled + final Color? colorOnDisabled; + + /// border color on Enabled + final Color? borderColorOnEnabled; + + /// Highlight Color/Border Color + final Color? highlightedColor; + + ///Current Day Color/BorderColor + final Color? currentDayColor; + + ///color on selected + final Color? colorOnSelected; + + ///event dot color on Enabled + final Color? eventColor; + + ///event color on Disabled + final Color? eventColorOnDisabled; + + ///border Stroke width on Enabled + final double borderStrokeWidth; + + /// default = `PaintingStyle.stroke` + final PaintingStyle paintStyleOnEnabled; + + ///Highlighted Button Painting Style + ///default = `PaintingStyle.stroke` + final PaintingStyle highlightedPaintingStyle; + + ///CurrentDay Button Painting Style + ///default = `PaintingStyle.fill` + final PaintingStyle currentDayPaintingStyle; + + /// default = `PaintingStyle.fill` + final PaintingStyle paintStyleOnDisabled; + + ///on month Button pressed + final void Function(DateTime selectedDate)? onPressed; + + /// + MonthButtonCustomizer({ + this.onPressed, + this.textStyleOnEnabled, + this.textStyleOnDisabled, + this.textStyleOnSelected, + this.currentDayTextStyle, + this.highlightedTextStyle, + this.colorOnDisabled, + this.borderColorOnEnabled, + this.colorOnSelected, + this.eventColor, + this.eventColorOnDisabled, + this.highlightedColor, + this.currentDayColor, + this.highlightedPaintingStyle = PaintingStyle.stroke, + this.currentDayPaintingStyle = PaintingStyle.fill, + this.borderStrokeWidth = 1, + this.paintStyleOnEnabled = PaintingStyle.stroke, + this.paintStyleOnDisabled = PaintingStyle.fill, + this.height, + this.width, + }); +} + +///CUstomiser class for month + +class MonthCustomizer { + ///CUstomiser class for month + MonthCustomizer({ + this.montMinhHeight = 300, + this.monthMinWidth, + this.scrollToSelectedMonth = false, + this.shrinkYearDropDownOnScroll = true, + this.mainAxisSpacing = 20, + this.crossAxisSpacing = 20, + this.padding = EdgeInsets.zero, + this.monthButtonCustomizer, + this.monthButtonBuilder, + this.monthHeaderCustomizer, + this.monthHeaderBuilder, + this.monthWeekBuilder, + this.monthWeekCustomizer, + }); + + ///heigh of single month + final double montMinhHeight; + + ///width of single month depend on the device you use + final double? monthMinWidth; + + ///default `scrollToSelectedMonth = false` + /// + ///if [scrollToSelectedMonth = true] month will scroll to selected date + final bool scrollToSelectedMonth; + + ///default = `true` + ///wether year DropDown Should shrink While Scrolling + final bool shrinkYearDropDownOnScroll; + + ///The number of logical pixels between each month along the main axis. + /// + ///give top & bottom space between months + final double mainAxisSpacing; + + ///The number of logical pixels between each month along the cross axis. + /// + ///give left & right space between months + final double crossAxisSpacing; + + ///set padding arround month + final EdgeInsetsGeometry padding; + + ///Customise month buttons + final MonthButtonCustomizer? monthButtonCustomizer; + + ///Customize month Header + final MonthHeaderCustomizer? monthHeaderCustomizer; + + ///Customize month week + final MonthWeekCustomizer? monthWeekCustomizer; + + ///Build your own month buttons + /// + ///* NOTE: COPY & PASTE + ///* ### Sample code + /// + /// ```dart + /// monthButtonBuilder: (dateTime,childHeight,childWidth,isSelected,isDisabled,hasEvent,isHighlighted,isCurrentDay) { + /// //Text Theme + /// final txtTheme = Theme.of(context).textTheme; + /// //color theme + /// final colorTheme = Theme.of(context); + /// + /// var daysText = Align( + /// child: Text( + /// '${dateTime.day}', + /// style: isDisabled + /// ? txtTheme.caption + /// : isSelected + /// ? txtTheme.bodyText1!.copyWith( + /// fontWeight: FontWeight.bold, + /// color: + /// colorTheme.brightness == Brightness.dark + /// ? Colors.black + /// : Colors.white) + /// : isHighlighted + /// ? txtTheme.bodyText2 //Highlighted TextStyle + /// : isCurrentDay + /// ? txtTheme + /// .bodyText2 //CurrentDay TextStyle + /// : txtTheme.bodyText2, + /// ), + /// ); + /// return Stack( + /// children: [ + /// //if button is Enabled or Disabled + /// isDisabled || !isSelected + /// ? CustomPaint( + /// painter: CirclePainter( + /// color: isDisabled + /// ? colorTheme.disabledColor + /// .withOpacity(0.03) + /// : isHighlighted + /// ? colorTheme.accentColor + /// : isCurrentDay + /// ? colorTheme.accentColor + /// .withOpacity(0.5) + /// : colorTheme.disabledColor + /// .withOpacity(0.05), + /// style: isDisabled + /// ? PaintingStyle.fill + /// : isHighlighted + /// ? PaintingStyle.stroke + /// : isCurrentDay + /// ? PaintingStyle.fill + /// : PaintingStyle.stroke, + /// strokeWidth: 1, + /// radius: childHeight / 2, + /// ), + /// child: daysText, + /// ) + /// //if button is Selected + /// : Align( + /// child: SizedBox( + /// height: childHeight, + /// width: childWidth, + /// child: TweenAnimationBuilder( + /// duration: const Duration(milliseconds: 200), + /// tween: DecorationTween( + /// begin: BoxDecoration( + /// color: colorTheme.accentColor, + /// shape: BoxShape.circle, + /// boxShadow: [ + /// BoxShadow( + /// blurRadius: 5, + /// color: colorTheme.accentColor + /// .withOpacity(0.6), + /// spreadRadius: 3, + /// ), + /// ]), + /// end: BoxDecoration( + /// color: colorTheme.accentColor, + /// shape: BoxShape.circle, + /// ), + /// ), + /// builder: (context, value, child) => + /// DecoratedBox( + /// decoration: value, + /// child: daysText, + /// ), + /// ), + /// ), + /// ), + /// //event button + /// if (hasEvent) + /// Align( + /// alignment: Alignment.bottomCenter, + /// child: CustomPaint( + /// painter: CirclePainter( + /// color: isDisabled + /// ? colorTheme.disabledColor.withOpacity(0.05) + /// : colorTheme.accentColor, + /// style: PaintingStyle.fill, + /// strokeWidth: 0, + /// radius: 3, + /// offset: const Offset(0, -4), + /// ), + /// ), + /// ), + /// ], + /// ); + /// }, + /// ``` + /// {@end-tool} + /// + final WidgetCbMonthButton? monthButtonBuilder; + + ///Build your own weeks + /// + ///* NOTE: COPY & PASTE + ///* ### Sample code + /// + /// ```dart + /// monthWeekBuilder: (index, weeks, weekHeight, weekWidth) { + /// return SizedBox( + /// height: weekHeight, + /// width: weekWidth, + /// child: Align( + /// child: Text( + /// weeks, + /// style: const TextStyle( + /// fontSize: 14, + /// color: Colors.grey, + /// fontWeight: FontWeight.w500, + /// ), + /// overflow: TextOverflow.ellipsis, + /// maxLines: 1, + /// ), + /// ), + /// ); + /// }, + + /// ``` + /// {@end-tool} + /// + final WidgetCbMonthWeek? monthWeekBuilder; + + ///Build your own month Headers + /// + ///* NOTE: COPY & PASTE + ///* ### Sample code + /// + /// ```dart + /// monthHeaderBuilder: + /// (month, headerHeight, headerWidth, paddingLeft) { + /// return SizedBox( + /// height: headerHeight, + /// width: headerWidth, + /// child: Padding( + /// padding: EdgeInsets.only(left: paddingLeft), + /// child: Align( + /// alignment: Alignment.centerLeft, + /// child: Text( + /// month, + /// style: const TextStyle( + /// fontSize: 22, + /// fontWeight: FontWeight.w600, + /// ), + /// ), + /// ), + /// ), + /// ); + /// }, + /// ``` + /// {@end-tool} + /// + final WeidgetCbMonthHeader? monthHeaderBuilder; +} + +///Customizer class for moth header +class MonthHeaderCustomizer { + ///height of year Header + final double height; + + ///width of year header + final double? width; + + ///padding o fHeader Text + final EdgeInsetsGeometry? padding; + + ///Text style of Header Text + final TextStyle? textStyle; + + ///insert All 12 Months + /// + ///* Example + ///```dart + ///[ + /// 'January', + /// 'February', + /// 'March', + /// 'April', + /// 'May', + /// 'June', + /// 'July', + /// 'August', + /// 'September', + /// 'October', + /// 'November', + /// 'December', + ///] + ///```` + /// {@end-tool} + /// + final List? monthList; + + /// + MonthHeaderCustomizer({ + this.height = 40, + this.width, + this.padding, + this.textStyle, + this.monthList, + }); +} + +///Month Weeek customiser +class MonthWeekCustomizer { + ///height of year Header + final double height; + + ///Text style of Header Text + final TextStyle? textStyle; + + ///insert All 7 weeks + /// + ///* Example + ///```dart + ///[ + /// 'SUN', + /// 'MON', + /// 'TUE', + /// 'WED', + /// 'THU', + /// 'FRI', + /// 'SAT', + ///] + ///```` + /// {@end-tool} + /// + final List? weekList; + + /// + MonthWeekCustomizer({ + this.height = 40, + this.textStyle, + this.weekList, + }); +} + +///OnDateSelected +class OnDateSelected { + ///Selected data on calendar + final DateTime selectedDate; + + ///return true if Selected date is equal + final bool isSelected; + + ///return true if Selected date is disabled + final bool isDisabled; + + ///return true if Selected date has event + final bool hasEvent; + + ///return true if Selected date is highlighted + final bool isHighlighted; + + ///return true if Selected date is current day + final bool isCurrentDate; + + /// constructor of OnDateSelected + OnDateSelected({ + required this.selectedDate, + required this.isSelected, + required this.isDisabled, + required this.hasEvent, + required this.isHighlighted, + required this.isCurrentDate, + }); +} diff --git a/packages/calendar_builder/lib/src/utils/date_utils_cb.dart b/packages/calendar_builder/lib/src/utils/date_utils_cb.dart new file mode 100644 index 0000000..edd3215 --- /dev/null +++ b/packages/calendar_builder/lib/src/utils/date_utils_cb.dart @@ -0,0 +1,293 @@ +///calendar week start from [monday,....,saturday,sunday] +enum WeekStartsFrom { + ///week starts from [monday] + monday, + + /// + tuesday, + + /// + + wednesday, + + /// + + thursday, + + /// + + friday, + + ///week starts from [saturday] + saturday, + + ///week starts from [sunday] + sunday, +} + +///contails all the logic of this calendar_builder package +class DateUtilsCB { + ///returns all dates from [startDate - endDate] in the form of List of DateTime + static List getDaysInBeteween({ + required DateTime startDate, + required DateTime endDate, + }) { + List days = []; + for (var i = 0; i <= (endDate.difference(startDate).inDays); i++) { + days.add( + DateTime( + startDate.year, + startDate.month, + // In Dart you can set more than. 30 days, DateTime will do the trick + startDate.day + i, + ), + ); + } + return days; + } + + ///this function return all the dates in a year from [startDate - endDate] + ///if `endDate = DateTime(2021,3,3)` this function will return dates till `endDate` as `DateTime(2022).subtract(Duration` + static List getAllDaysInBetweenYears({ + required DateTime startDate, + required DateTime endDate, + }) { + startDate = DateTime(startDate.year); + + endDate = DateTime(endDate.year + 1); + + List days = []; + for (var i = 0; i <= (endDate.difference(startDate).inDays) - 1; i++) { + days.add(DateTime( + startDate.year, + startDate.month, + // In Dart you can set more than. 30 days, DateTime will do the trick + startDate.day + i, + )); + } + return days; + } + + ///returns all Years from [startDate - endDate] in the form of List of DateTime + static List getYearsInBeteween({ + required DateTime startDate, + required DateTime endDate, + }) { + List years = []; + for (int i = startDate.year; i <= endDate.year; i++) { + years.add(DateTime(i)); + } + return years; + } + + ///Checking for [dateSelected] in [loopedDays] + ///if it contains the same date + ///then + ///it returns true + ///else + ///returns false + static bool checkDayisSelected({ + bool isDisabled = false, + required DateTime dateSelected, + required DateTime loopedDay, + }) { + if (!isDisabled) { + return dateSelected.year == loopedDay.year && + dateSelected.month == loopedDay.month && + dateSelected.day == loopedDay.day; + } else { + return false; + } + } + + ///check year is selected + static bool checkYearIsSelected({ + bool isDisabled = false, + required DateTime dateSelected, + required DateTime loopedDay, + }) { + if (!isDisabled) { + return dateSelected.year == loopedDay.year; + } else { + return false; + } + } + + ///Checking for [date] in [listOfDates] + ///if it contains the same date + ///then + ///it returns true + ///else + ///returns false + static bool checkDayisDisabled( + {required List listOfDates, required DateTime date}) { + return !listOfDates.any((element) => (element.year == date.year && + element.month == date.month && + element.day == date.day)); + } + + ///checking [listOfDates] has matching [date] in it + static bool checkListContainsDate( + {required List listOfDates, required DateTime date}) { + return listOfDates.any((element) => (element.year == date.year && + element.month == date.month && + element.day == date.day)); + } + + ///Checking for [date] in [listOfDates] + ///if it contains the same year + ///then + ///it returns false + ///else + ///returns true + static bool checkYearisDisabled( + {required List listOfDates, required DateTime date}) { + return !listOfDates.any((element) => (element.year == date.year)); + } + + ///!latest removed #1 + // ///This function will return all the DateTime in one year [yearDate] + // static List getAllDatesIn1Year( + // {required DateTime yearDate, required List allDates}) { + // List dates = + // allDates.where((element) => element.year == yearDate.year).toList(); + + // return dates; + // } + + ///If [selectedYear] is 2021 then this function will return all the dates of months in 2021 in the form of [List>>] + static List>> getAllMonthsIn1Year( + {required DateTime selectedYear}) { + ///returns all the dates in a year + ///!latest removed #1 + // List _listOfDatesInYear = getAllDatesIn1Year( + // yearDate: selectedYear, + // allDates: allDates, + // ); + ///!replaced + List _listOfDatesInYear = DateUtilsCB.getAllDaysInBetweenYears( + startDate: DateTime(selectedYear.year), + endDate: + DateTime(selectedYear.year + 1).subtract(const Duration(days: 1))); + + ///genrating Dates in each months as List + List _listOfJan = _listOfDatesInYear + .where((element) => element.month == DateTime.january) + .toList(); + List _listOfFeb = _listOfDatesInYear + .where((element) => element.month == DateTime.february) + .toList(); + List _listOfMarch = _listOfDatesInYear + .where((element) => element.month == DateTime.march) + .toList(); + List _listOfApril = _listOfDatesInYear + .where((element) => element.month == DateTime.april) + .toList(); + List _listOfMay = _listOfDatesInYear + .where((element) => element.month == DateTime.may) + .toList(); + List _listOfJune = _listOfDatesInYear + .where((element) => element.month == DateTime.june) + .toList(); + List _listOfJuly = _listOfDatesInYear + .where((element) => element.month == DateTime.july) + .toList(); + List _listOfAugust = _listOfDatesInYear + .where((element) => element.month == DateTime.august) + .toList(); + List _listOfSept = _listOfDatesInYear + .where((element) => element.month == DateTime.september) + .toList(); + List _listOfOct = _listOfDatesInYear + .where((element) => element.month == DateTime.october) + .toList(); + List _listOfNov = _listOfDatesInYear + .where((element) => element.month == DateTime.november) + .toList(); + List _listOfDec = _listOfDatesInYear + .where((element) => element.month == DateTime.december) + .toList(); + List>> _months = [ + {'Jan': _listOfJan}, + {'Feb': _listOfFeb}, + {'March': _listOfMarch}, + {'April': _listOfApril}, + {'May': _listOfMay}, + {'June': _listOfJune}, + {'July': _listOfJuly}, + {'August': _listOfAugust}, + {'Sept': _listOfSept}, + {'Oct': _listOfOct}, + {'Nov': _listOfNov}, + {'Dec': _listOfDec}, + ]; + return _months; + } + + ///This [getAll42DaysIn1Month] function will return all the 42 days in a m + static List getAll42DaysIn1Month({ + required List month, + WeekStartsFrom weekStartsFrom = WeekStartsFrom.sunday, + }) { + List aMonthDaysList = month; + DateTime firstDayOfaMonth = aMonthDaysList.first; + + ///For finding first Disabled Day + late DateTime firstDisableDay; + int weekSelectedIndex = (WeekStartsFrom.values.indexOf(weekStartsFrom) + 1); + firstDisableDay = firstDayOfaMonth.subtract( + ///Adding +7 to [firstDayOfaMonth.weekday] + ///to avoid -ve result + Duration(days: ((firstDayOfaMonth.weekday + 7) - weekSelectedIndex) % 7), + ); + + /* -----old----- + // if (weekStartsFrom == WeekStartsFrom.monday) { + // ///Starts week with [Monday] + // firstDisableDay = firstDayOfaMonth + // .subtract(Duration(days: firstDayOfaMonth.weekday - 1)); + // } else if (weekStartsFrom == WeekStartsFrom.sunday) { + // ///Starts week with [Sunday] + // if (firstDayOfaMonth.weekday == 7) { + // firstDisableDay = firstDayOfaMonth; + // } else { + // firstDisableDay = + // firstDayOfaMonth.subtract(Duration(days: firstDayOfaMonth.weekday)); + // } + // } else if (weekStartsFrom == WeekStartsFrom.saturday) { + // ///Starts week with [Saturday] + // if (firstDayOfaMonth.weekday == 6) { + // firstDisableDay = firstDayOfaMonth; + // } else if (firstDayOfaMonth.weekday == 7) { + // firstDisableDay = firstDayOfaMonth.subtract(const Duration(days: 1)); + // } else { + // firstDisableDay = firstDayOfaMonth + // .subtract(Duration(days: firstDayOfaMonth.weekday + 1)); + // } + // } + */ + + DateTime lastDayOfaMonth = aMonthDaysList.last; + + ///Algorithm to find Disabled Days + List firstDisabledToLastDayOfMonth = + getDaysInBeteween(startDate: firstDisableDay, endDate: lastDayOfaMonth); + int lastlength = firstDisabledToLastDayOfMonth.length; + int disabledDays = 42 - lastlength; + + ///not used + // while (lastlength % 7 != 0) { + // lastlength++; + // disabledDays++; + // } + + ///To find the last Disabled Days of the month + DateTime lastDisabledDay = + lastDayOfaMonth.add(Duration(days: disabledDays)); + + ///!geting all 42 days + List all42DaysOfMonth = + getDaysInBeteween(startDate: firstDisableDay, endDate: lastDisabledDay); + return all42DaysOfMonth; + } +} diff --git a/packages/calendar_builder/lib/src/utils/global.dart b/packages/calendar_builder/lib/src/utils/global.dart new file mode 100644 index 0000000..272d69b --- /dev/null +++ b/packages/calendar_builder/lib/src/utils/global.dart @@ -0,0 +1,104 @@ +import 'package:flutter/material.dart'; + +///A global theme classs for all colors [Theme] +class CalendarGlobals { + ///Minumum duration + static const kMinDuration = Duration(milliseconds: 400); + + ///maximum duration + static const kMaxDuration = Duration(milliseconds: 800); + + ///orange color + static const Color kOrange = Color(0xffFF5917); + + ///list of months + static const List months = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December', + ]; + + ///list of Weeks + static const List> weeksStarter = [ + [ + 'MON', + 'TUE', + 'WED', + 'THU', + 'FRI', + 'SAT', + 'SUN', + ], + [ + 'TUE', + 'WED', + 'THU', + 'FRI', + 'SAT', + 'SUN', + 'MON', + ], + [ + 'WED', + 'THU', + 'FRI', + 'SAT', + 'SUN', + 'MON', + 'TUE', + ], + [ + 'THU', + 'FRI', + 'SAT', + 'SUN', + 'MON', + 'TUE', + 'WED', + ], + [ + 'FRI', + 'SAT', + 'SUN', + 'MON', + 'TUE', + 'WED', + 'THU', + ], + [ + 'SAT', + 'SUN', + 'MON', + 'TUE', + 'WED', + 'THU', + 'FRI', + ], + [ + 'SUN', + 'MON', + 'TUE', + 'WED', + 'THU', + 'FRI', + 'SAT', + ], + ]; + + ///Enable or disable dev logs + static bool showLogs = false; + + ///Enable or disable dev logs + static void debugLogs(Object _log) { + if (showLogs) debugPrint(_log.toString()); + } +} diff --git a/packages/calendar_builder/lib/src/utils/widgets.dart b/packages/calendar_builder/lib/src/utils/widgets.dart new file mode 100644 index 0000000..0afc9da --- /dev/null +++ b/packages/calendar_builder/lib/src/utils/widgets.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; + +///easy Mod of [OutlinedButton] +class ModOutlineButton extends StatelessWidget { + ///easy Mod of [OutlinedButton] + const ModOutlineButton({ + Key? key, + required this.height, + required this.width, + this.onPressed, + this.shape, + this.borderSide, + required this.child, + this.overlayColor, + }) : super(key: key); + + ///Height of button + final double height; + + ///Width of button + final double width; + + ///Callback on button pressed + final VoidCallback? onPressed; + + /// Shape of button + final OutlinedBorder? shape; + + /// set border forbutton + final BorderSide? borderSide; + + /// add Child widget + final Widget child; + + /// Overlay color of button + final Color? overlayColor; + + OutlinedBorder _handelButtonShape(Set state) { + return shape ?? const StadiumBorder(); + } + + BorderSide _handelBorderSide(Set state) { + return borderSide ?? + BorderSide( + color: Colors.grey[300]!, + ); + } + + @override + Widget build(BuildContext context) { + return SizedBox( + height: height, + width: width, + child: FittedBox( + fit: BoxFit.scaleDown, + child: OutlinedButton( + onPressed: onPressed, + style: ButtonStyle( + shape: MaterialStateProperty.resolveWith(_handelButtonShape), + overlayColor: MaterialStateProperty.all( + overlayColor ?? Colors.blue[100]!), + side: MaterialStateProperty.resolveWith(_handelBorderSide), + ), + child: child, + ), + ), + ); + } +} + +///for faster performance +///we can add +///-- borders +///-- colors +class CirclePainter extends CustomPainter { + /// + CirclePainter({ + required this.color, + required this.style, + required this.strokeWidth, + required this.radius, + this.offset, + }); + + ///add color + final Color color; + + ///Painting style + final PaintingStyle style; + + ///border width + final double strokeWidth; + + ///radius of the circle + final double radius; + + ///offset + final Offset? offset; + + @override + void paint(Canvas canvas, Size size) { + final _paint = Paint() + ..strokeWidth = strokeWidth + ..color = color + ..style = style; + + canvas.drawCircle( + offset ?? Offset((size.width / 2), (size.height / 2)), radius, _paint); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) { + return false; + } +} diff --git a/packages/calendar_builder/lib/src/views/month_builder.dart b/packages/calendar_builder/lib/src/views/month_builder.dart new file mode 100644 index 0000000..aadd19c --- /dev/null +++ b/packages/calendar_builder/lib/src/views/month_builder.dart @@ -0,0 +1,1063 @@ +// import 'dart:io'; + +import 'dart:math'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../calendar_builder.dart'; +import '../controllers/cb_controller.dart'; +import '../controllers/month_builder_controller.dart'; +import '../controllers/month_ui_controller.dart'; +import 'year_drop_down.dart'; + +///Month Builder +class CbMonthBuilder extends StatefulWidget { + ///constructor of month builder + const CbMonthBuilder({ + Key? key, + this.matchId, + this.height, + this.width, + this.yearDropDownCustomizer, + this.monthCustomizer, + this.cbConfig, + this.onYearHeaderExpanded, + this.onYearButtonClicked, + this.onDateClicked, + }) : super(key: key); + + ///* -- + ///*#### NOTE: if you are changing matchId then, PLEASE DOO HOT RESTART + /// if u want to use same data between your [ Calendar Builder ] -- make sure to give same [matchId] + final String? matchId; + + /// Height of [CbMonthBuilder] + /// Default height = MediaQuery.of(context).size.heigth + final double? height; + + /// Width of [CbMonthBuilder] + ///Default width = MediaQuery.of(context).size.width + final double? width; + + ///Customize Year Drop down + final YearDropDownCustomizer? yearDropDownCustomizer; + + ///Customise your month + final MonthCustomizer? monthCustomizer; + + ///Configure all the datas like + /// + /// + ///-- `startDate,` + /// + ///--- `endDate,` + /// + ///--- `currentDay,` + /// + ///--- `selectedDate,` + /// + ///--- `selectedYear,` + /// + ///--- `eventDates,` + /// + ///--- `disabledDates,` + /// + ///--- `highlightedDates,` + /// + ///--- `weekStartsFrom` + /// + final CbConfig? cbConfig; + + /// + ///callback when year header is expanded + /// + ///* ### Sample code + /// + ///```dart + /// onYearHeaderExpanded: (isExpanded) {}, + ///``` + ///{@end-tool} + final void Function(bool isExpanded)? onYearHeaderExpanded; + + /// callback when year button is clicked + /// + ///* ### Sample code + /// + ///```dart + /// onYearHeaderExpanded: (isExpanded) {}, + ///``` + ///{@end-tool} + final void Function(DateTime selectedYear, bool isSelected)? + onYearButtonClicked; + + /// callback when date button is clicked + /// + ///* ### Sample code + /// + ///```dart + /// onDateClicked: (onDateClicked) {}, + ///``` + ///{@end-tool} + final void Function(OnDateSelected onDateSelected)? onDateClicked; + + @override + _CbMonthBuilderState createState() => _CbMonthBuilderState(); +} + +class _CbMonthBuilderState extends State { + ///Tags of GetxControllers + ///Data Tag + late String matchingId; + + ///Matching Isd for `CbConfig` + late String cbMatchingId; + + ///Ui Tag + late String uiStateTag; + + @override + void initState() { + super.initState(); + Get.config(enableLog: CalendarGlobals.showLogs); + initControlers(); + } + + @override + void dispose() { + super.dispose(); + Get.delete(tag: uiStateTag); + Get.delete(tag: matchingId); + if (!Get.isRegistered(tag: cbMatchingId)) { + Get.delete( + tag: cbMatchingId, + ); + } + } + + void initControlers() { + ///* NOTE + ///`widget.matchId` concept used only to motch data b/w [CbController()] and `config` + uiStateTag = UniqueKey().toString(); + Get.put(MonthUiController(), tag: uiStateTag); + matchingId = UniqueKey().toString(); + Get.put(MonthBuilderController(), tag: matchingId); + cbMatchingId = widget.matchId ?? UniqueKey().toString(); + Get.put( + CbController(), + tag: cbMatchingId, + ); + expandeYearInitially(); + configDatas(matchingId); + addToUiCtr(); + } + + void addToUiCtr() { + final mUiCtr = Get.find(tag: uiStateTag); + mUiCtr.onDateClicked = widget.onDateClicked; + mUiCtr.onYearButtonClicked = widget.onYearButtonClicked; + mUiCtr.onYearHeaderExpanded = widget.onYearHeaderExpanded; + } + + void configDatas(String matchingId, {bool useOnHotReload = false}) { + final cbCtr = Get.find(tag: cbMatchingId); + final mCtr = Get.find(tag: matchingId); + + if (widget.cbConfig != null) { + cbCtr.changeConfig(widget.cbConfig!); + } + + /// + mCtr.config(config: cbCtr.cbConfig, useOnHotReload: useOnHotReload); + } + + void expandeYearInitially() { + final mUiCtr = Get.find(tag: uiStateTag); + + mUiCtr.expandInitiaally( + widget.yearDropDownCustomizer?.expandYearInitially ?? false); + } + + @override + void didUpdateWidget(covariant CbMonthBuilder oldWidget) { + super.didUpdateWidget(oldWidget); + final mCtr = Get.find(tag: matchingId); + + if (oldWidget.yearDropDownCustomizer?.expandYearInitially != + widget.yearDropDownCustomizer?.expandYearInitially) { + expandeYearInitially(); + } + + /// + if (oldWidget.cbConfig?.selectedDate != widget.cbConfig?.selectedDate) { + DateTime oldDate = oldWidget.cbConfig?.selectedDate ?? DateTime.now(); + DateTime newDate = widget.cbConfig?.selectedDate ?? DateTime.now(); + mCtr.changeSelectedDate( + selectedDate: newDate, + oldSelectedDate: DateTime(oldDate.year, oldDate.month, oldDate.day), + updateByID: true, + updateId: 'dateChangeId', + commonUpdateId: 'commonId'); + } + if (oldWidget.cbConfig?.selectedYear != widget.cbConfig?.selectedYear) { + DateTime oldDate = + oldWidget.cbConfig?.selectedYear ?? DateTime(DateTime.now().year); + DateTime newDate = + widget.cbConfig?.selectedYear ?? DateTime(DateTime.now().year); + changeYear(oldDate: oldDate, newDate: newDate); + } + if (oldWidget.cbConfig != widget.cbConfig) { + configDatas(matchingId, useOnHotReload: true); + } + addToUiCtr(); + + /// + } + + void changeYear({required DateTime oldDate, required DateTime newDate}) { + final mUiCtr = Get.find(tag: uiStateTag); + final mCtr = Get.find(tag: matchingId); + + ///Changes selected date + mCtr.changeSelectedYear( + selectedYear: newDate, + oldSelectedYear: DateTime(oldDate.year, oldDate.month, oldDate.day), + updateByID: true, + updateId: 'dateChangeId', + commonUpdateId: 'commonId'); + + ///isExpanded + Future.delayed(const Duration(milliseconds: 200)).then((value) { + mUiCtr.chageYearExpanded( + isExpanded: false, + updateId: 'monthExpanded', + commonUpdateId: 'commonId'); + }); + + ///changes the page of month pageView + int _mPage = + mCtr.mAllYears.indexWhere((element) => element.year == newDate.year); + mUiCtr.mPageController.jumpToPage(_mPage); + + ///saves and removes months if length exedes 3 + mCtr.addToSavedMonthDates( + DateTime(newDate.year, newDate.month, newDate.day)); + mCtr.savedMonthRemover(DateTime(newDate.year, newDate.month, newDate.day)); + } + + @override + Widget build(BuildContext context) { + final size = MediaQuery.of(context).size; + double cbMonthHeight = widget.height ?? + (size.height - + MediaQuery.of(context).viewPadding.bottom - + MediaQuery.of(context).viewPadding.top); + double cbMonthWidth = widget.width ?? size.width; + + return SafeArea( + child: SizedBox( + height: cbMonthHeight, + width: cbMonthWidth, + child: Column(children: [ + CbYearDropDown( + matchId: matchingId, + uiStateTag: uiStateTag, + expandedYearHeight: + widget.yearDropDownCustomizer?.expandedYearHeight ?? 200, + expandedYearWidth: widget.yearDropDownCustomizer?.expandedYearWidth, + yearButtonBuilder: widget.yearDropDownCustomizer?.yearButtonBuilder, + yearButtonCustomizer: + widget.yearDropDownCustomizer?.yearButtonCustomizer, + yearHeaderBuilder: widget.yearDropDownCustomizer?.yearHeaderBuilder, + yearHeaderCustomizer: + widget.yearDropDownCustomizer?.yearHeaderCustomizer, + ), + const Divider( + endIndent: 0, + indent: 0, + height: 0, + thickness: 1, + ), + Expanded( + child: _MonthView( + matchingId: matchingId, + cbMonthHeight: cbMonthHeight, + yearDropDownCustomizer: widget.yearDropDownCustomizer, + uiStateTag: uiStateTag, + monthCustomizer: widget.monthCustomizer, + ), + ), + ]), + ), + ); + } +} + +class _MonthView extends StatefulWidget { + const _MonthView({ + Key? key, + required this.matchingId, + required this.cbMonthHeight, + this.yearDropDownCustomizer, + this.monthCustomizer, + required this.uiStateTag, + }) : super(key: key); + + final String matchingId; + final double cbMonthHeight; + final YearDropDownCustomizer? yearDropDownCustomizer; + final MonthCustomizer? monthCustomizer; + final String uiStateTag; + + @override + __MonthViewState createState() => __MonthViewState(); +} + +class __MonthViewState extends State<_MonthView> { + @override + void initState() { + super.initState(); + pageInitialise(); + } + + void pageInitialise() { + final mUiCtr = Get.find(tag: widget.uiStateTag); + final mCtr = Get.find(tag: widget.matchingId); + int _initialPage = mCtr.mAllYears + .indexWhere((element) => element.year == mCtr.mSelectedYear.year); + mUiCtr.mPageController = + PageController(initialPage: _initialPage, keepPage: true); + mCtr.addToSavedMonthDates(DateTime(mCtr.mSelectedYear.year, + mCtr.mSelectedYear.month, mCtr.mSelectedYear.day)); + // thisSelectedYear = DateTime(mCtr.mSelectedYear.year, + // mCtr.mSelectedYear.month, mCtr.mSelectedYear.day); + } + + @override + void didUpdateWidget(covariant _MonthView oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.matchingId != widget.matchingId) { + pageInitialise(); + } + } + + @override + Widget build(BuildContext context) { + final mCtr = Get.find(tag: widget.matchingId); + final mUiCtr = Get.find(tag: widget.uiStateTag); + // height: widget.cbMonthHeight - + // ((widget.yearDropDownCustomizer?.yearHeaderCustomizer?.height ?? + // 40)) + return PageView.builder( + itemCount: mCtr.mAllYears.length, + controller: mUiCtr.mPageController, + physics: const NeverScrollableScrollPhysics(), + scrollDirection: Axis.vertical, + itemBuilder: (context, index) { + DateTime thisSelectedYear = mCtr.mAllYears.elementAt(index); + Widget _monthGrid() { + return _MonthGrid( + matchingId: widget.matchingId, + uiStateTag: widget.uiStateTag, + monthCustomizer: widget.monthCustomizer, + thisSelectedYear: thisSelectedYear, + ); + } + + CalendarGlobals.debugLogs('page: $index'); + return GetBuilder( + id: 'removedDate:$thisSelectedYear!', + tag: widget.matchingId, + builder: (mCtr) { + CalendarGlobals.debugLogs(thisSelectedYear); + return mCtr.removedDate == thisSelectedYear + ? const SizedBox() + : _monthGrid(); + }); + }, + ); + } +} + +class _MonthGrid extends StatefulWidget { + const _MonthGrid({ + Key? key, + required this.matchingId, + required this.uiStateTag, + required this.thisSelectedYear, + this.monthCustomizer, + }) : super(key: key); + final String matchingId; + final String uiStateTag; + final MonthCustomizer? monthCustomizer; + final DateTime thisSelectedYear; + @override + __MonthGridState createState() => __MonthGridState(); +} + +class __MonthGridState extends State<_MonthGrid> { + late final ScrollController _scrollController; + late final double _initialSrollOffset; + @override + void initState() { + super.initState(); + monthScrollConfig(); + } + + void monthScrollConfig() { + final bool scrollToSelectedMonth = + widget.monthCustomizer?.scrollToSelectedMonth ?? false; + final mCtr = Get.find(tag: widget.matchingId); + + ///initially scroll to the perticular selected month if [scrollToSelectedMonth = true] + if (mCtr.mSelectedDate.year != widget.thisSelectedYear.year || + !scrollToSelectedMonth) { + _initialSrollOffset = 0; + } else { + _initialSrollOffset = ((widget.monthCustomizer?.montMinhHeight ?? 300) + + (widget.monthCustomizer?.monthHeaderCustomizer?.height ?? 40) + + (widget.monthCustomizer?.monthWeekCustomizer?.height ?? 40)) * + (mCtr.mSelectedDate.month - 1); + } + _scrollController = ScrollController( + initialScrollOffset: _initialSrollOffset, keepScrollOffset: false); + } + + @override + Widget build(BuildContext context) { + return NotificationListener( + onNotification: (notification) { + if (widget.monthCustomizer?.shrinkYearDropDownOnScroll ?? true) { + ///used to check whether the scroll is started or not + if (notification is ScrollStartNotification) { + ///if scrolling is started the [cbYearDropDown] expand = false + final mUiCtr = + Get.find(tag: widget.uiStateTag); + mUiCtr.chageYearExpanded( + isExpanded: false, + updateId: 'monthExpanded', + commonUpdateId: 'commonId', + ); + } + } + + return true; + }, + child: GridView.builder( + // gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + // crossAxisCount: 1, mainAxisExtent: 340), + controller: _scrollController, + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: widget.monthCustomizer?.monthMinWidth ?? + maxCrossAxisExtentCounter(context), + mainAxisExtent: ((widget.monthCustomizer?.montMinhHeight ?? 300) + + (widget.monthCustomizer?.monthHeaderCustomizer?.height ?? 40) + + (widget.monthCustomizer?.monthWeekCustomizer?.height ?? 40)), + crossAxisSpacing: widget.monthCustomizer?.crossAxisSpacing ?? 20, + mainAxisSpacing: widget.monthCustomizer?.mainAxisSpacing ?? 20, + ), + padding: widget.monthCustomizer?.padding ?? EdgeInsets.zero, + shrinkWrap: true, + itemCount: 12, + itemBuilder: (context, index) { + CalendarGlobals.debugLogs('month $index'); + // return Text('data'); + return SingleMonthView( + matchId: widget.matchingId, + uiStateTag: widget.uiStateTag, + monthIndex: index, + monthCustomizer: widget.monthCustomizer, + thisSelectedYear: widget.thisSelectedYear, + ); + }, + )); + } + + ///responsive month grid + double maxCrossAxisExtentCounter(BuildContext context) { + final mq = MediaQuery.of(context); + final size = mq.size; + if (kIsWeb) { + return 700; + } + if (mq.orientation == Orientation.portrait && + (Theme.of(context).platform == TargetPlatform.android || + Theme.of(context).platform == TargetPlatform.iOS)) { + return size.width; + } else if (mq.orientation == Orientation.landscape && + (Theme.of(context).platform == TargetPlatform.android || + Theme.of(context).platform == TargetPlatform.iOS)) { + return size.width / 2; + } + return 700; + } +} + +///This widget contains the design and logics of single month +class SingleMonthView extends StatelessWidget { + /// + const SingleMonthView({ + Key? key, + required this.matchId, + required this.uiStateTag, + required this.monthIndex, + this.monthCustomizer, + required this.thisSelectedYear, + }) : super(key: key); + + ///Tags of GetxControllers + ///Data Tag + final String matchId; + + ///ui tag + final String uiStateTag; + + ///index of month 0-12 + final int monthIndex; + + ///Month Customizer + final MonthCustomizer? monthCustomizer; + + ///selected year of this page + final DateTime thisSelectedYear; + + @override + Widget build(BuildContext context) { + final size = MediaQuery.of(context).size; + final mCtr = Get.find(tag: matchId); + + double monthWidth = size.width; + double monthHeight = monthCustomizer?.montMinhHeight ?? 300; + double buttonHeight = monthHeight / 6; + late double buttonWidth; + double buttonChildHeight = + monthCustomizer?.monthButtonCustomizer?.height ?? (buttonHeight / 1.5); + double buttonChildWidth = + monthCustomizer?.monthButtonCustomizer?.width ?? buttonHeight / 1.5; + + late double paddingLeft; + double weekHeight = monthCustomizer?.monthWeekCustomizer?.height ?? 40; + + ///default = [WeekStartsFrom.sunday] + int weekSelectedIndex = + (WeekStartsFrom.values.indexOf(mCtr.mWeekStartsFrom)); + + // List weeks = + // monthCustomizer?.weekStartsFrom == WeekStartsFrom.monday + // ? Global.weeksStartsMonday + // : monthCustomizer?.weekStartsFrom == WeekStartsFrom.saturday + // ? Global.weeksStartsSaturday + // : Global.weeksStartsSunday; + + double headerHeight = monthCustomizer?.monthHeaderCustomizer?.height ?? 40; + double headerWidth = + monthCustomizer?.monthHeaderCustomizer?.width ?? size.width; + final EdgeInsetsGeometry? padding = + monthCustomizer?.monthHeaderCustomizer?.padding; + final TextStyle? textStyleHeader = + monthCustomizer?.monthHeaderCustomizer?.textStyle; + final TextStyle? textStyleWeeek = + monthCustomizer?.monthWeekCustomizer?.textStyle; + + return Column( + children: [ + LayoutBuilder( + builder: (context, constraints) { + ///[max()] is used to make -negetive values to zero + ///[max()] imported from ['dart:math']; + paddingLeft = max( + 0, (((constraints.maxWidth / 7) / 2) - (buttonChildWidth / 2))); + final List? userMonths = + monthCustomizer?.monthHeaderCustomizer?.monthList; + if (userMonths != null) { + assert(!(userMonths.length < 12), + '\n\nERROR ( Calendar Builder ):\n---------\nInside MonthHeaderCustomizer()\nmonthList length Should be equal to 12\n---------\n_'); + } + + var ifHeaderBuilderEmpty = SizedBox( + height: headerHeight, + width: headerWidth, + child: Padding( + padding: padding ?? EdgeInsets.only(left: paddingLeft), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + userMonths?[monthIndex] ?? + CalendarGlobals.months[monthIndex], + style: textStyleHeader ?? + const TextStyle( + fontSize: 22, fontWeight: FontWeight.w600), + ), + ), + ), + ); + return monthCustomizer?.monthHeaderBuilder == null + ? ifHeaderBuilderEmpty + : monthCustomizer!.monthHeaderBuilder!( + CalendarGlobals.months[monthIndex], + headerHeight, + headerWidth, + paddingLeft, + ); + }, + ), + LayoutBuilder( + builder: (context, constraints) { + buttonWidth = constraints.maxWidth / 7; + return Row( + children: List.generate(7, (weekIndex) { + List? userWeek = + monthCustomizer?.monthWeekCustomizer?.weekList; + if (userWeek != null) { + assert(!(userWeek.length < 7), + '\n\nERROR ( Calendar Builder ):\n---------\nInside MonthWeekCustomizer()\nWeekList length Should be equal to 7\n---------\n_'); + } + + ///if empty + var ifWeekBuilderEmpty = SizedBox( + height: weekHeight, + width: buttonWidth, + child: Align( + child: Text( + userWeek?[weekIndex] ?? + CalendarGlobals.weeksStarter[weekSelectedIndex] + [weekIndex], + style: textStyleWeeek ?? + const TextStyle( + fontSize: 14, + color: Colors.grey, + fontWeight: FontWeight.w500), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ), + ); + return monthCustomizer?.monthWeekBuilder == null + ? ifWeekBuilderEmpty + : monthCustomizer!.monthWeekBuilder!( + weekIndex, + CalendarGlobals.weeksStarter[weekSelectedIndex] + [weekIndex], + weekHeight, + buttonWidth, + ); + })); + }, + ), + SizedBox( + height: monthHeight, + width: monthWidth, + child: _MonthButtonGrid( + matchId: matchId, + uiStateTag: uiStateTag, + monthHeight: monthHeight, + monthWidth: monthWidth, + monthIndex: monthIndex, + buttonChildWidth: buttonChildWidth, + buttonChildHeight: buttonChildHeight, + monthCustomizer: monthCustomizer, + thisSelectedYear: thisSelectedYear, + ), + ), + ], + ); + } +} + +class _MonthButtonGrid extends StatefulWidget { + const _MonthButtonGrid({ + Key? key, + required this.matchId, + required this.monthHeight, + required this.uiStateTag, + required this.monthWidth, + required this.buttonChildHeight, + required this.buttonChildWidth, + required this.thisSelectedYear, + this.monthCustomizer, + required this.monthIndex, + }) : super(key: key); + final String matchId; + final double monthHeight; + final String uiStateTag; + final double monthWidth; + final double buttonChildHeight; + final double buttonChildWidth; + final DateTime thisSelectedYear; + + ///Month Customizer + final MonthCustomizer? monthCustomizer; + + ///index of month 0-12 + final int monthIndex; + + @override + __MonthButtonGridState createState() => __MonthButtonGridState(); +} + +class __MonthButtonGridState extends State<_MonthButtonGrid> + with AutomaticKeepAliveClientMixin { + ///logic for all 42 days in month + ///including previous & after month disabled month dates + late List mAll42DaysInMonth; + + ///contains only the exact same months + late List mCorrectMonths; + + ///Check for Disabled Days in Month + bool checkDayIsDisabled = false; + + ///Check for Selected Days in Month + bool checkDayIsSelected = false; + + ///Check for Highlighted Days in Month + bool checkHighlightedDates = false; + + ///Check is this is current day in Month + bool checkCurrentDay = false; + + ///check for events + late bool checkHasEvent; + + @override + void initState() { + super.initState(); + _initMonthLogic(); + } + + void _initMonthLogic() { + final mCtr = Get.find(tag: widget.matchId); + build42Days(weekStartsFrom: mCtr.mWeekStartsFrom); + mCorrectMonths = DateUtilsCB.getAllMonthsIn1Year( + selectedYear: widget.thisSelectedYear, + + ///!latest removed #1 + // allDates: mCtr.mAllDates, + )[widget.monthIndex] + .values + .first; + } + + void build42Days({WeekStartsFrom? weekStartsFrom}) { + mAll42DaysInMonth = DateUtilsCB.getAll42DaysIn1Month( + weekStartsFrom: weekStartsFrom ?? WeekStartsFrom.sunday, + month: DateUtilsCB.getAllMonthsIn1Year( + selectedYear: widget.thisSelectedYear, + + ///!latest removed #1 + // allDates: mCtr.mAllDates, + )[widget.monthIndex] + .values + .first, + ); + } + + @override + void didUpdateWidget(covariant _MonthButtonGrid oldWidget) { + super.didUpdateWidget(oldWidget); + final mCtr = Get.find(tag: widget.matchId); + _initMonthLogic(); + + if (widget.monthCustomizer != oldWidget.monthCustomizer) { + build42Days(weekStartsFrom: mCtr.mWeekStartsFrom); + } + } + + @override + Widget build(BuildContext context) { + super.build(context); + return GridView.builder( + physics: const NeverScrollableScrollPhysics(), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + ///height of 1 button in grid + mainAxisExtent: widget.monthHeight / 6, + crossAxisCount: 7, + ), + itemCount: mAll42DaysInMonth.length, + padding: EdgeInsets.zero, + itemBuilder: (context, index) { + return GetBuilder( + id: mAll42DaysInMonth[index], + tag: widget.matchId, + builder: (mCtr) { + // Global.debugLogs('grid Btn $index month${widget.monthIndex}'); + _checkingMonthDays( + index: index, selectedDate: mCtr.mSelectedDate); + var _monthButtons = _MonthButtons( + mAll42DaysInMonth: mAll42DaysInMonth, + index: index, + isDisabled: checkDayIsDisabled, + isSelected: checkDayIsSelected, + isCurrentDay: checkCurrentDay, + hasEvent: checkHasEvent, + buttonChildHeight: widget.buttonChildHeight, + buttonChildWidth: widget.buttonChildWidth, + monthCustomizer: widget.monthCustomizer, + isHighlighted: checkHighlightedDates, + ); + return checkDayIsDisabled + ? GestureDetector( + onTap: () { + _checkingMonthDays( + index: index, selectedDate: mCtr.mSelectedDate); + + final mUiCtr = + Get.find(tag: widget.uiStateTag); + mUiCtr.onDateClicked?.call( + OnDateSelected( + selectedDate: mAll42DaysInMonth[index], + isSelected: checkDayIsSelected, + isDisabled: checkDayIsDisabled, + hasEvent: checkHasEvent, + isHighlighted: checkHighlightedDates, + isCurrentDate: checkCurrentDay, + ), + ); + }, + child: _monthButtons) + : GestureDetector( + onTap: () { + _checkingMonthDays( + index: index, selectedDate: mCtr.mSelectedDate); + + final mUiCtr = + Get.find(tag: widget.uiStateTag); + mUiCtr.onDateClicked?.call( + OnDateSelected( + selectedDate: mAll42DaysInMonth[index], + isSelected: checkDayIsSelected, + isDisabled: checkDayIsDisabled, + hasEvent: checkHasEvent, + isHighlighted: checkHighlightedDates, + isCurrentDate: checkCurrentDay, + ), + ); + + ///execute functions + mCtr.changeSelectedDate( + selectedDate: mAll42DaysInMonth[index], + oldSelectedDate: DateTime( + mCtr.mSelectedDate.year, + mCtr.mSelectedDate.month, + mCtr.mSelectedDate.day), + updateByID: true, + updateId: 'dateChangeId', + commonUpdateId: 'commonId'); + // custom onPressed + if (widget.monthCustomizer?.monthButtonCustomizer + ?.onPressed != + null) { + widget.monthCustomizer?.monthButtonCustomizer + ?.onPressed!(mAll42DaysInMonth[index]); + } + }, + behavior: HitTestBehavior.opaque, + //Parent Container + child: _monthButtons); + }); + }, + ); + } + + void _checkingMonthDays( + {required int index, required DateTime selectedDate}) { + final mCtr = Get.find(tag: widget.matchId); + + ///Check for Disabled Days + ///In month + checkDayIsDisabled = DateUtilsCB.checkDayisDisabled( + listOfDates: mCorrectMonths, date: mAll42DaysInMonth[index]); + + ///Check for Disabled days + ///i.e after [mStartDate] + if (!checkDayIsDisabled) { + ///ignores if [mStartDate] is = to [mAll42DaysInMonth[index]] + if (!DateUtilsCB.checkDayisSelected( + dateSelected: mAll42DaysInMonth[index], loopedDay: mCtr.mStartDate)) { + checkDayIsDisabled = mAll42DaysInMonth[index].isBefore(mCtr.mStartDate); + } + } + + ///Check for Disabled days + ///i.e after [mEndDate] + if (!checkDayIsDisabled) { + checkDayIsDisabled = mAll42DaysInMonth[index].isAfter(mCtr.mEndDate); + } + + ///checking if user disabled any dates + if (!checkDayIsDisabled) { + checkDayIsDisabled = DateUtilsCB.checkListContainsDate( + listOfDates: mCtr.mDisabledDates, date: mAll42DaysInMonth[index]); + } + + ///checking for Selected days + checkDayIsSelected = DateUtilsCB.checkDayisSelected( + dateSelected: selectedDate, loopedDay: mAll42DaysInMonth[index]); + + if (!checkDayIsSelected && !checkDayIsDisabled) { + checkHighlightedDates = DateUtilsCB.checkListContainsDate( + listOfDates: mCtr.mHighlightedDates, date: mAll42DaysInMonth[index]); + if (!checkHighlightedDates) { + checkCurrentDay = DateUtilsCB.checkDayisSelected( + dateSelected: mCtr.mCurrentDay, + loopedDay: mAll42DaysInMonth[index]); + } + } + + ///checking for events + checkHasEvent = DateUtilsCB.checkListContainsDate( + listOfDates: mCtr.mEventDates + .where((element) => + element.year == mAll42DaysInMonth[index].year && + element.month == mAll42DaysInMonth[index].month) + .toList(), + date: mAll42DaysInMonth[index]); + } + + @override + bool get wantKeepAlive => true; +} + +class _MonthButtons extends StatelessWidget { + const _MonthButtons({ + Key? key, + required this.mAll42DaysInMonth, + required this.index, + required this.isDisabled, + required this.isSelected, + required this.isHighlighted, + required this.isCurrentDay, + required this.buttonChildHeight, + required this.buttonChildWidth, + required this.hasEvent, + this.monthCustomizer, + }) : super(key: key); + + final List mAll42DaysInMonth; + final int index; + final bool isDisabled; + final bool isSelected; + final bool hasEvent; + final bool isHighlighted; + final bool isCurrentDay; + final double buttonChildHeight; + final double buttonChildWidth; + final MonthCustomizer? monthCustomizer; + + @override + Widget build(BuildContext context) { + final txtTheme = Theme.of(context).textTheme; + final MonthButtonCustomizer? _mBtn = monthCustomizer?.monthButtonCustomizer; + final colorTheme = Theme.of(context); + + var daysText = Align( + child: Text( + '${mAll42DaysInMonth[index].day}', + style: isDisabled + ? _mBtn?.textStyleOnDisabled ?? txtTheme.titleMedium + : isSelected + ? _mBtn?.textStyleOnSelected ?? + txtTheme.bodyLarge!.copyWith( + fontWeight: FontWeight.bold, + color: colorTheme.brightness == Brightness.dark + ? Colors.black + : Colors.white) + : isHighlighted + ? _mBtn?.highlightedTextStyle ?? txtTheme.bodyLarge + : isCurrentDay + ? _mBtn?.currentDayTextStyle ?? txtTheme.bodyLarge + : _mBtn?.textStyleOnEnabled ?? txtTheme.bodyLarge, + )); + var ifBuilderIsEmpty = Stack( + alignment: Alignment.center, + children: [ + isDisabled || !isSelected + ? CustomPaint( + size: Size(buttonChildHeight, buttonChildWidth), + painter: CirclePainter( + color: isDisabled + ? _mBtn?.colorOnDisabled ?? + colorTheme.disabledColor.withOpacity(0.03) + : isHighlighted + ? _mBtn?.highlightedColor ?? + colorTheme.colorScheme.secondary + : isCurrentDay + ? _mBtn?.currentDayColor ?? + colorTheme.colorScheme.secondary + .withOpacity(0.5) + : _mBtn?.borderColorOnEnabled ?? + colorTheme.disabledColor.withOpacity(0.05), + style: isDisabled + ? _mBtn?.paintStyleOnDisabled ?? PaintingStyle.fill + : isHighlighted + ? _mBtn?.highlightedPaintingStyle ?? + PaintingStyle.stroke + : isCurrentDay + ? _mBtn?.currentDayPaintingStyle ?? + PaintingStyle.fill + : _mBtn?.paintStyleOnEnabled ?? + PaintingStyle.stroke, + strokeWidth: _mBtn?.borderStrokeWidth ?? 1, + radius: buttonChildHeight / 2), + child: daysText) + : SizedBox( + height: buttonChildHeight, + width: buttonChildWidth, + child: TweenAnimationBuilder( + duration: const Duration(milliseconds: 200), + tween: DecorationTween( + begin: BoxDecoration( + color: _mBtn?.colorOnSelected ?? + colorTheme.colorScheme.secondary, + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + blurRadius: 5, + color: + _mBtn?.colorOnSelected?.withOpacity(0.6) ?? + colorTheme.colorScheme.secondary + .withOpacity(0.6), + spreadRadius: 3), + ]), + end: BoxDecoration( + color: _mBtn?.colorOnSelected ?? + colorTheme.colorScheme.secondary, + shape: BoxShape.circle, + ), + ), + builder: (context, value, child) => DecoratedBox( + decoration: value, + child: daysText, + )), + ), + if (hasEvent) + Align( + alignment: Alignment.bottomCenter, + child: CustomPaint( + painter: CirclePainter( + color: isDisabled + ? _mBtn?.eventColorOnDisabled ?? + colorTheme.disabledColor.withOpacity(0.05) + : _mBtn?.eventColor ?? colorTheme.colorScheme.secondary, + style: PaintingStyle.fill, + strokeWidth: 0, + radius: 3, + offset: const Offset(0, -4)), + ), + ), + ], + ); + return monthCustomizer?.monthButtonBuilder == null + ? ifBuilderIsEmpty + : monthCustomizer!.monthButtonBuilder!( + mAll42DaysInMonth[index], + buttonChildHeight, + buttonChildWidth, + isSelected, + isDisabled, + hasEvent, + isHighlighted, + isCurrentDay); + } +} diff --git a/packages/calendar_builder/lib/src/views/year_drop_down.dart b/packages/calendar_builder/lib/src/views/year_drop_down.dart new file mode 100644 index 0000000..434db81 --- /dev/null +++ b/packages/calendar_builder/lib/src/views/year_drop_down.dart @@ -0,0 +1,568 @@ +import '../controllers/month_builder_controller.dart'; +import '../controllers/month_ui_controller.dart'; +import 'package:get/get.dart'; + +import '../../calendar_builder.dart'; +import 'package:flutter/material.dart'; + +//Todo: Add Image Documentation +///A year Drop down class--- default used in [CbMonthBuilder] +class CbYearDropDown extends StatefulWidget { + /// + const CbYearDropDown({ + Key? key, + this.matchId, + this.yearHeaderCustomizer, + this.yearHeaderBuilder, + this.yearButtonCustomizer, + this.yearButtonBuilder, + this.uiStateTag, + this.expandedYearHeight = 200, + this.expandedYearWidth, + }) : super(key: key); + + /// if u want to use same data between your Calendar Builder -- make sure to give same [matchId] + final String? matchId; + + ///customise year Header style [YearHeaderCustomizer] + final YearHeaderCustomizer? yearHeaderCustomizer; + + ///customise year button style [YearButtonCustomizer] + final YearButtonCustomizer? yearButtonCustomizer; + + ///Build your custom YearDropDown Header + final WidgetCbYearHeader? yearHeaderBuilder; + + ///Build your own year buttons + final WidgetCbYearButton? yearButtonBuilder; + + ///Expanded Height of year dropDown + ///default = 200 + final double expandedYearHeight; + + ///Expanded Width of year dropDown + final double? expandedYearWidth; + + ///UI controller tag + final String? uiStateTag; + + @override + _CbYearDropDownState createState() => _CbYearDropDownState(); +} + +class _CbYearDropDownState extends State { + late String matchingId; + late String uiStateTag; + + @override + void initState() { + super.initState(); + initControlers(); + } + + void initControlers() { + uiStateTag = widget.uiStateTag ?? UniqueKey().toString(); + Get.put(MonthUiController(), tag: uiStateTag); + + matchingId = widget.matchId ?? UniqueKey().toString(); + Get.put(MonthBuilderController(), tag: matchingId); + } + + @override + void dispose() { + super.dispose(); + Get.delete(tag: uiStateTag); + Get.delete(tag: matchingId); + } + + @override + Widget build(BuildContext context) { + String matchingId = widget.matchId ?? UniqueKey().toString(); + final mUiCtr = Get.find(tag: uiStateTag); + final size = MediaQuery.of(context).size; + + Widget _ifBuilderEmpty = SizedBox( + height: widget.yearHeaderCustomizer?.height ?? 40, + width: widget.yearHeaderCustomizer?.width ?? size.width, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GetBuilder( + tag: matchingId, + id: 'dateChangeId', + builder: (mCtr) { + String preMonth = mCtr.mSelectedDate.year == + mCtr.mSelectedYear.year + ? '${CalendarGlobals.months[mCtr.mSelectedDate.month - 1]} - ' + : ''; + String year = '$preMonth${mCtr.mSelectedYear.year}'; + return Text( + year, + style: widget.yearHeaderCustomizer?.titleTextStyle ?? + const TextStyle(fontWeight: FontWeight.bold), + ); + }), + GetBuilder( + tag: uiStateTag, + id: 'monthExpanded', + builder: (mCtr) => Icon(!mCtr.isYearPickerExpanded + ? widget.yearHeaderCustomizer?.downIcon ?? + Icons.arrow_drop_down_outlined + : widget.yearHeaderCustomizer?.upIcon ?? + Icons.arrow_drop_up_outlined)), + ], + ), + ); + return Column( + children: [ + InkWell( + onTap: () { + mUiCtr.onYearHeaderExpanded?.call(!mUiCtr.isYearPickerExpanded); + mUiCtr.chageYearExpanded( + isExpanded: !mUiCtr.isYearPickerExpanded, + commonUpdateId: 'commonId', + updateId: 'monthExpanded'); + }, + child: widget.yearHeaderBuilder == null + ? _ifBuilderEmpty + : GetBuilder( + id: 'monthExpanded', + tag: uiStateTag, + builder: (mUiCtr) => GetBuilder( + id: 'commonId', + tag: matchingId, + builder: (mCtr) { + String preMonth = mCtr.mSelectedDate.year == + mCtr.mSelectedYear.year + ? '${CalendarGlobals.months[mCtr.mSelectedDate.month - 1]} - ' + : ''; + String year = '$preMonth${mCtr.mSelectedYear.year}'; + return widget.yearHeaderBuilder!( + mUiCtr.isYearPickerExpanded, + mCtr.mSelectedDate, + mCtr.mSelectedYear, + year, + ); + }), + ), + ), + _YearDropDown( + matchId: matchingId, + uiStateTag: uiStateTag, + height: widget.expandedYearHeight, + width: widget.expandedYearWidth ?? size.width, + yearButtonBuilder: widget.yearButtonBuilder, + yearButtonCustomizer: widget.yearButtonCustomizer, + ) + ], + ); + } +} + +class _YearDropDown extends StatefulWidget { + const _YearDropDown({ + Key? key, + required this.matchId, + required this.uiStateTag, + required this.height, + required this.width, + this.yearButtonBuilder, + this.yearButtonCustomizer, + }) : super(key: key); + + final String matchId; + final String uiStateTag; + final double height; + final double width; + final WidgetCbYearButton? yearButtonBuilder; + final YearButtonCustomizer? yearButtonCustomizer; + + @override + __YearDropDownState createState() => __YearDropDownState(); +} + +class __YearDropDownState extends State<_YearDropDown> + with SingleTickerProviderStateMixin { + @override + Widget build(BuildContext context) { + return GetBuilder( + tag: widget.uiStateTag, + id: 'monthExpanded', + builder: (mUiCtr) { + ///!this scrolling will not work while we are using builder + // WidgetsBinding.instance!.addPostFrameCallback((_) { + // Scrollable.ensureVisible( + // mCtr.mYearPickerGlobalKey[8].currentContext!); + // }); + return AnimatedSize( + curve: Curves.fastOutSlowIn, + duration: CalendarGlobals.kMinDuration, + reverseDuration: CalendarGlobals.kMinDuration, + child: AnimatedOpacity( + duration: CalendarGlobals.kMaxDuration, + opacity: mUiCtr.isYearPickerExpanded ? 1.0 : 0, + child: SizedBox( + height: mUiCtr.isYearPickerExpanded ? widget.height : 0, + width: widget.width, + child: Visibility( + ///by using [Visibility] will improve the performace + visible: mUiCtr.isYearPickerExpanded, + child: GetBuilder( + id: 'monthExpanded', + tag: widget.matchId, + builder: (mCtr) => _YearBtnGridBuilder( + uiStateTag: widget.uiStateTag, + matchId: widget.matchId, + height: widget.height, + width: widget.width, + mCtr: mCtr, + isExpanded: mUiCtr.isYearPickerExpanded, + yearButtonBuilder: widget.yearButtonBuilder, + yearButtonCustomizer: widget.yearButtonCustomizer, + ), + ), + ), + ), + ), + ); + }, + ); + } +} + +class _YearBtnGridBuilder extends StatefulWidget { + const _YearBtnGridBuilder({ + Key? key, + required this.height, + required this.width, + required this.mCtr, + required this.isExpanded, + required this.matchId, + required this.uiStateTag, + this.yearButtonBuilder, + this.yearButtonCustomizer, + }) : super(key: key); + + final double height; + final double width; + final MonthBuilderController mCtr; + final bool isExpanded; + final String matchId; + final String uiStateTag; + final WidgetCbYearButton? yearButtonBuilder; + final YearButtonCustomizer? yearButtonCustomizer; + + @override + __YearBtnGridBuilderState createState() => __YearBtnGridBuilderState(); +} + +class __YearBtnGridBuilderState extends State<_YearBtnGridBuilder> + with AutomaticKeepAliveClientMixin { + late ScrollController _controller; + late double scrollPosition; + + ///[scrollPosition] it finds the exact scroll position of the [cbYearDropDown] + /// + /// + ///[.truncate] is used to remove fractional part/decimal part + ///``if val = 1.89 + ///val.truncate() + ///it returns 1 and removes fractoinal part`` + void _findScrollPositon() { + scrollPosition = (((((widget.mCtr.m16DateTimeYears.isEmpty + ? widget.mCtr.mAllYears.indexWhere((element) => + element.year == widget.mCtr.mSelectedYear.year) + : widget.mCtr.m16DateTimeYears.indexWhere((element) => + element.year == widget.mCtr.mSelectedYear.year))) / + 4) + .truncate() * + (widget.height / 4)) - + (widget.height / 4)); + } + + @override + void initState() { + super.initState(); + _findScrollPositon(); + _controller = ScrollController( + initialScrollOffset: scrollPosition, keepScrollOffset: true); + } + + @override + void didUpdateWidget(covariant _YearBtnGridBuilder oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.isExpanded != widget.isExpanded) { + _findScrollPositon(); + _controller.jumpTo( + scrollPosition, + ); + } + } + + @override + void dispose() { + super.dispose(); + _controller.dispose(); + } + + @override + Widget build(BuildContext context) { + super.build(context); + final bool isMaxSize = widget.width >= 1200; + return GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + ///height of 1 button in grid + mainAxisExtent: isMaxSize ? widget.height / 3 : widget.height / 4, + crossAxisCount: isMaxSize ? 5 : 4, + ), + //!same + // SliverGridDelegateWithMaxCrossAxisExtent( + // maxCrossAxisExtent:widget.width / 4, + // mainAxisExtent: widget.height / 4, + // ), + controller: _controller, + addAutomaticKeepAlives: true, + cacheExtent: 20, + physics: const BouncingScrollPhysics(), + itemCount: widget.mCtr.m16DateTimeYears.isEmpty + ? widget.mCtr.mAllYears.length + : (widget.mCtr.m16DateTimeYears.length - (isMaxSize ? 1 : 0)), + itemBuilder: (context, i) => GetBuilder( + tag: widget.matchId, + id: widget.mCtr.m16DateTimeYears.isEmpty + ? widget.mCtr.mAllYears[i] + : widget.mCtr.m16DateTimeYears[i], + builder: (mCtr) { + // Global.debugLogs('Year:$i'); + DateTime thisLoopDate = mCtr.m16DateTimeYears.isEmpty + ? mCtr.mAllYears[i] + : mCtr.m16DateTimeYears[i]; + bool isYearselected = DateUtilsCB.checkYearIsSelected( + /// + isDisabled: DateUtilsCB.checkDayisDisabled( + listOfDates: mCtr.mAllYears, date: thisLoopDate), + + /// + dateSelected: mCtr.mSelectedYear, + loopedDay: thisLoopDate, + ); + bool isyearDisabled = DateUtilsCB.checkYearisDisabled( + listOfDates: mCtr.mAllYears, + date: thisLoopDate, + ); + return FittedBox( + fit: BoxFit.scaleDown, + child: _YearButtons( + matchId: widget.matchId, + uiStateTag: widget.uiStateTag, + isyearDisabled: isyearDisabled, + thisLoopDate: thisLoopDate, + isYearselected: isYearselected, + height: widget.height, + width: widget.width, + builder: widget.yearButtonBuilder, + borderColorOnDisabled: + widget.yearButtonCustomizer?.borderColorOnDisabled, + borderColorOnEnabled: + widget.yearButtonCustomizer?.borderColorOnEnabled, + borderColorOnSelected: + widget.yearButtonCustomizer?.borderColorOnSelected, + shrinkOnButtonPressed: widget.yearButtonCustomizer == null + ? true + : widget.yearButtonCustomizer!.shrinkOnButtonPressed, + hoverColor: widget.yearButtonCustomizer?.hoverColor, + onPressed: widget.yearButtonCustomizer?.onPressed, + splashColor: widget.yearButtonCustomizer?.splashColor, + textColorOnDisabled: + widget.yearButtonCustomizer?.textColorOnDisabled, + textColorOnEnabled: + widget.yearButtonCustomizer?.textColorOnEnabled, + textColorOnSelected: + widget.yearButtonCustomizer?.textColorOnSelected, + ), + ); + }, + ), + ); + } + + @override + bool get wantKeepAlive => true; +} + +class _YearButtons extends StatefulWidget { + const _YearButtons({ + Key? key, + required this.isyearDisabled, + required this.thisLoopDate, + required this.isYearselected, + required this.height, + required this.width, + required this.matchId, + required this.uiStateTag, + this.builder, + this.borderColorOnSelected, + this.borderColorOnDisabled, + this.borderColorOnEnabled, + this.textColorOnSelected, + this.textColorOnDisabled, + this.textColorOnEnabled, + this.splashColor, + this.hoverColor, + this.onPressed, + this.shrinkOnButtonPressed = true, + }) : super(key: key); + + final bool isyearDisabled; + final DateTime thisLoopDate; + final bool isYearselected; + final double height; + final double width; + final String matchId; + final String uiStateTag; + final WidgetCbYearButton? builder; + + /// + final Color? borderColorOnSelected; + final Color? borderColorOnDisabled; + final Color? borderColorOnEnabled; + final Color? textColorOnSelected; + final Color? textColorOnDisabled; + final Color? textColorOnEnabled; + final Color? splashColor; + final Color? hoverColor; + final Function(bool isButtonDisabled, DateTime selectedYear)? onPressed; + final bool shrinkOnButtonPressed; + @override + __YearButtons createState() => __YearButtons(); +} + +class __YearButtons extends State<_YearButtons> + with AutomaticKeepAliveClientMixin { + ///Callback when a year button is pressed + void _onYearPressed() { + final mCtr = Get.find(tag: widget.matchId); + final mUiCtr = Get.find(tag: widget.uiStateTag); + if (widget.isyearDisabled) { + if (widget.onPressed != null) { + widget.onPressed!(widget.isyearDisabled, widget.thisLoopDate); + } + CalendarGlobals.debugLogs('Calendar_builder: year button disabled'); + } else { + if (widget.onPressed != null) { + widget.onPressed!(widget.isyearDisabled, widget.thisLoopDate); + } + + ///Changes selected date + mCtr.changeSelectedYear( + selectedYear: widget.thisLoopDate, + oldSelectedYear: DateTime(mCtr.mSelectedYear.year, + mCtr.mSelectedYear.month, mCtr.mSelectedYear.day), + updateByID: true, + updateId: 'dateChangeId', + commonUpdateId: 'commonId'); + + ///isExpanded + if (widget.shrinkOnButtonPressed) { + Future.delayed(const Duration(milliseconds: 200)).then((value) { + mUiCtr.chageYearExpanded( + isExpanded: false, + updateId: 'monthExpanded', + commonUpdateId: 'commonId'); + }); + } + + ///changes the page of month pageView + int _mPage = mCtr.mAllYears + .indexWhere((element) => element.year == widget.thisLoopDate.year); + mUiCtr.mPageController.jumpToPage(_mPage); + + ///saves and removes months if length exedes 3 + mCtr.addToSavedMonthDates(DateTime(mCtr.mSelectedYear.year, + mCtr.mSelectedYear.month, mCtr.mSelectedYear.day)); + mCtr.savedMonthRemover(DateTime(widget.thisLoopDate.year, + widget.thisLoopDate.month, widget.thisLoopDate.day)); + } + mUiCtr.onYearButtonClicked + ?.call(widget.thisLoopDate, widget.isyearDisabled ? false : true); + } + + @override + Widget build(BuildContext context) { + super.build(context); + final txtTheme = Theme.of(context).textTheme; + final colorTheme = Theme.of(context); + + Widget ifBuilderisEmpty = SizedBox( + height: (widget.height / 5.5) >= 35 ? 35 : widget.height / 5.5, + width: (widget.width / 6) >= 150 ? 150 : (widget.width / 6), + child: InkWell( + onTap: _onYearPressed, + splashColor: + widget.isyearDisabled ? Colors.transparent : widget.splashColor, + hoverColor: widget.isyearDisabled ? null : widget.hoverColor, + customBorder: RoundedRectangleBorder( + borderRadius: BorderRadius.all( + Radius.circular( + (widget.height / 5.5) >= 35 ? 35 : widget.height / 5.5), + ), + ), + child: DecoratedBox( + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular( + (widget.height / 5.5) >= 35 ? 35 : widget.height / 5.5), + ), + border: Border.all( + color: widget.isyearDisabled + ? widget.borderColorOnDisabled ?? + colorTheme.disabledColor.withOpacity(0.1) + : widget.isYearselected + ? widget.borderColorOnSelected ?? + (colorTheme.brightness == Brightness.dark + ? colorTheme.colorScheme.secondary + : Colors.black) + : widget.borderColorOnEnabled ?? Colors.grey, + width: widget.isyearDisabled + ? 1 + : widget.isYearselected + ? 1.5 + : 1), + ), + child: FittedBox( + fit: BoxFit.scaleDown, + child: Text(widget.thisLoopDate.year.toString(), + style: widget.isyearDisabled + ? txtTheme.titleMedium! + .copyWith(color: widget.textColorOnDisabled) + : widget.isYearselected + ? txtTheme.bodyLarge! + .copyWith(color: widget.textColorOnSelected) + : txtTheme.bodyLarge! + .copyWith(color: widget.textColorOnEnabled)), + ), + ), + ), + ); + + return widget.builder == null + ? ifBuilderisEmpty + : GestureDetector( + onTap: () { + ///execute functions + _onYearPressed(); + }, + behavior: HitTestBehavior.opaque, + child: widget.builder!( + widget.thisLoopDate, + (widget.height / 5.5) >= 35 ? 35 : widget.height / 5.5, + (widget.width / 6) >= 150 ? 150 : (widget.width / 6), + widget.isyearDisabled, + widget.isYearselected, + )); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/packages/calendar_builder/pubspec.lock b/packages/calendar_builder/pubspec.lock new file mode 100644 index 0000000..90d8813 --- /dev/null +++ b/packages/calendar_builder/pubspec.lock @@ -0,0 +1,221 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.dev" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: b543301ad291598523947dc534aaddc5aaad597b709d2426d3a0e0d44c5cb493 + url: "https://pub.dev" + source: hosted + version: "1.0.4" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + get: + dependency: "direct main" + description: + name: get + sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" + url: "https://pub.dev" + source: hosted + version: "4.7.3" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: a2c3d198cb5ea2e179926622d433331d8b58374ab8f29cdda6e863bd62fd369c + url: "https://pub.dev" + source: hosted + version: "1.0.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + url: "https://pub.dev" + source: hosted + version: "0.12.18" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.dev" + source: hosted + version: "1.17.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + url: "https://pub.dev" + source: hosted + version: "0.7.9" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499" + url: "https://pub.dev" + source: hosted + version: "15.1.0" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" +sdks: + dart: ">=3.9.0-0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/calendar_builder/pubspec.yaml b/packages/calendar_builder/pubspec.yaml new file mode 100644 index 0000000..0b06cf5 --- /dev/null +++ b/packages/calendar_builder/pubspec.yaml @@ -0,0 +1,55 @@ +name: calendar_builder +description: Fully customizable calendar package for flutter.Also supports for disabling dates, highlighting dates and displaying events inside calendar. +version: 0.0.6 +homepage: https://github.com/newtaDev/calendar_builder + +environment: + sdk: ">=2.16.1 <4.0.0" + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + get: ^4.6.1 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^1.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # To add assets to your package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/assets-and-images/#from-packages + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # To add custom fonts to your package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/calendar_builder/test/calendar_builder_test.dart b/packages/calendar_builder/test/calendar_builder_test.dart new file mode 100644 index 0000000..0da434d --- /dev/null +++ b/packages/calendar_builder/test/calendar_builder_test.dart @@ -0,0 +1,5 @@ +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('adds one to input values', () {}); +} diff --git a/packages/calendar_builder/test/unit_test/date_utils_test.dart b/packages/calendar_builder/test/unit_test/date_utils_test.dart new file mode 100644 index 0000000..f364361 --- /dev/null +++ b/packages/calendar_builder/test/unit_test/date_utils_test.dart @@ -0,0 +1,116 @@ +import 'package:calendar_builder/src/utils/date_utils_cb.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('DateUtilsCB Testing', () { + final DateTime startDate = DateTime(DateTime.now().year); + final DateTime endDate = + DateTime(DateTime.now().year + 20).subtract(const Duration(days: 1)); + final selectedDate = DateTime.now(); + final notSelectedDate = selectedDate.add(const Duration(days: 1)); + final List listOfDates = [ + selectedDate, + notSelectedDate, + startDate, + endDate + ]; + + /// + DateTime _year = DateTime.now(); + List>> monthsInaYear = + DateUtilsCB.getAllMonthsIn1Year(selectedYear: _year); + + ///!getDaysInBeteween Test + test('getDaysInBeteween', () { + List startToEndDates = + DateUtilsCB.getDaysInBeteween(startDate: startDate, endDate: endDate); + + expect(startToEndDates.first, startDate); + expect(startToEndDates.last, endDate); + }); + + ///!getAllDaysInBetweenYears Test + test('getAllDaysInBetweenYears', () { + List allStartToEndDates = DateUtilsCB.getAllDaysInBetweenYears( + startDate: startDate, endDate: endDate); + + expect(allStartToEndDates.first, startDate); + expect(allStartToEndDates.last, endDate); + }); + + ///!getYearsInBeteween Test + test('getYearsInBeteween', () { + List allYears = DateUtilsCB.getYearsInBeteween( + startDate: startDate, endDate: endDate); + expect(allYears.first, startDate); + expect(allYears.last, DateTime(endDate.year)); + }); + + ///!checkDayisSelected Test + test('checkDayisSelected', () { + /// + bool checkIsSelected(DateTime dateSelected) { + return DateUtilsCB.checkDayisSelected( + dateSelected: dateSelected, loopedDay: selectedDate); + } + + expect(checkIsSelected(selectedDate), true); + expect(checkIsSelected(notSelectedDate), false); + }); + + ///!checkDayisDisabled Test + test('checkDayisDisabled', () { + /// + bool checkIsDisabled(DateTime disabled) { + return DateUtilsCB.checkDayisDisabled( + listOfDates: listOfDates, date: disabled); + } + + expect(checkIsDisabled(selectedDate), false); + expect(checkIsDisabled(DateTime(300)), true); + }); + + ///!checkListContainsDate Test + test('checkListContainsDate', () { + /// + bool checkContains(DateTime contains) { + return DateUtilsCB.checkListContainsDate( + listOfDates: listOfDates, date: contains); + } + + expect(checkContains(selectedDate), true); + expect(checkContains(DateTime(300)), false); + }); + + ///!checkYearisDisabled Test + test('checkYearisDisabled', () { + /// + bool checkYearDisabled(DateTime disabled) { + return DateUtilsCB.checkYearisDisabled( + listOfDates: listOfDates, date: disabled); + } + + expect(checkYearDisabled(selectedDate), false); + expect(checkYearDisabled(DateTime(300)), true); + }); + + ///!getAllMonthsIn1Year Test + test('getAllMonthsIn1Year', () { + expect(monthsInaYear.length, 12); + + ///Checks for first month day (ie, Jan-1) is equal to `DateTime(_year.year)` this date or not + expect(monthsInaYear.first.values.first.first, DateTime(_year.year)); + + ///Checks for last month, last day (ie, Dec-30/31) is equal to `DateTime(_year.year + 1).subtract(const Duration(days: 1))` this date or not + expect(monthsInaYear.last.values.last.last, + DateTime(_year.year + 1).subtract(const Duration(days: 1))); + }); + + ///!getAll42DaysIn1Month Test + test('getAll42DaysIn1Month', () { + final List oneMonth = DateUtilsCB.getAll42DaysIn1Month( + month: monthsInaYear.first.values.first); + expect(oneMonth.length, 42); + }); + }); +} diff --git a/packages/flutter_paypal/CHANGELOG.md b/packages/flutter_paypal/CHANGELOG.md new file mode 100644 index 0000000..ef11d00 --- /dev/null +++ b/packages/flutter_paypal/CHANGELOG.md @@ -0,0 +1,8 @@ +## 0.0.1 - 0.0.6 + +Initial release. + +## 0.2.0 + +- Upgraded to latest version of Flutter +- All packages updated too diff --git a/packages/flutter_paypal/LICENSE b/packages/flutter_paypal/LICENSE new file mode 100644 index 0000000..d743a31 --- /dev/null +++ b/packages/flutter_paypal/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Durabyte Studio (Codetagon) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/flutter_paypal/README.md b/packages/flutter_paypal/README.md new file mode 100644 index 0000000..ce38f2e --- /dev/null +++ b/packages/flutter_paypal/README.md @@ -0,0 +1,31 @@ + + +A simple but powerful Paypal SDK for flutter. + +## Features + +It utilizes [Flutter Webview](https://pub.dev/packages/webview_flutter_x5), to complete the payment process... "It's a Simple Spell But Quite Unbreakable". + + +## Usage + +After adding the package to your `pubspec.yaml`, make sure to import it + + +```dart +import 'package:flutter_paypal/flutter_paypal.dart'; +``` + + +You can checkout a simple illustration in the `/example` folder. diff --git a/packages/flutter_paypal/analysis_options.yaml b/packages/flutter_paypal/analysis_options.yaml new file mode 100644 index 0000000..a5744c1 --- /dev/null +++ b/packages/flutter_paypal/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/flutter_paypal/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/packages/flutter_paypal/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..9e55251 --- /dev/null +++ b/packages/flutter_paypal/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,24 @@ +package io.flutter.plugins; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import io.flutter.Log; + +import io.flutter.embedding.engine.FlutterEngine; + +/** + * Generated file. Do not edit. + * This file is generated by the Flutter tool based on the + * plugins that support the Android platform. + */ +@Keep +public final class GeneratedPluginRegistrant { + private static final String TAG = "GeneratedPluginRegistrant"; + public static void registerWith(@NonNull FlutterEngine flutterEngine) { + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.webviewflutter.WebViewFlutterPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin webview_flutter_android, io.flutter.plugins.webviewflutter.WebViewFlutterPlugin", e); + } + } +} diff --git a/packages/flutter_paypal/android/local.properties b/packages/flutter_paypal/android/local.properties new file mode 100644 index 0000000..6df17b3 --- /dev/null +++ b/packages/flutter_paypal/android/local.properties @@ -0,0 +1,2 @@ +sdk.dir=/Users/hamzaaleghwairyeen/Library/Android/sdk +flutter.sdk=/Users/hamzaaleghwairyeen/flutter \ No newline at end of file diff --git a/packages/flutter_paypal/example/README.md b/packages/flutter_paypal/example/README.md new file mode 100644 index 0000000..2b3fce4 --- /dev/null +++ b/packages/flutter_paypal/example/README.md @@ -0,0 +1,16 @@ +# 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/packages/flutter_paypal/example/analysis_options.yaml b/packages/flutter_paypal/example/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/android/.gradle/7.5/checksums/checksums.lock b/packages/flutter_paypal/example/android/.gradle/7.5/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..65cf9c07d737582d3dbab9d13f87c57f0280456f GIT binary patch literal 17 TcmZQJx?l9sqGtL<1}FdkI3Wa- literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/android/.gradle/7.5/fileChanges/last-build.bin b/packages/flutter_paypal/example/android/.gradle/7.5/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/android/.gradle/7.5/fileHashes/fileHashes.lock b/packages/flutter_paypal/example/android/.gradle/7.5/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..faf14edef926e898cae787fd85bb6eda3e64936e GIT binary patch literal 17 TcmZQpIkC0)ibzy90~7!NF)Rb+ literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/android/.gradle/7.5/gc.properties b/packages/flutter_paypal/example/android/.gradle/7.5/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/packages/flutter_paypal/example/android/.gradle/vcs-1/gc.properties b/packages/flutter_paypal/example/android/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/packages/flutter_paypal/example/android/app/build.gradle b/packages/flutter_paypal/example/android/app/build.gradle new file mode 100644 index 0000000..a982cda --- /dev/null +++ b/packages/flutter_paypal/example/android/app/build.gradle @@ -0,0 +1,72 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + namespace "com.example.example" + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion 19 + 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 + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/packages/flutter_paypal/example/android/app/src/debug/AndroidManifest.xml b/packages/flutter_paypal/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/flutter_paypal/example/android/app/src/main/AndroidManifest.xml b/packages/flutter_paypal/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..19b862e --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/packages/flutter_paypal/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/packages/flutter_paypal/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..9e55251 --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,24 @@ +package io.flutter.plugins; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import io.flutter.Log; + +import io.flutter.embedding.engine.FlutterEngine; + +/** + * Generated file. Do not edit. + * This file is generated by the Flutter tool based on the + * plugins that support the Android platform. + */ +@Keep +public final class GeneratedPluginRegistrant { + private static final String TAG = "GeneratedPluginRegistrant"; + public static void registerWith(@NonNull FlutterEngine flutterEngine) { + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.webviewflutter.WebViewFlutterPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin webview_flutter_android, io.flutter.plugins.webviewflutter.WebViewFlutterPlugin", e); + } + } +} diff --git a/packages/flutter_paypal/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/packages/flutter_paypal/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt new file mode 100644 index 0000000..e793a00 --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/packages/flutter_paypal/example/android/app/src/main/res/drawable-v21/launch_background.xml b/packages/flutter_paypal/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/flutter_paypal/example/android/app/src/main/res/drawable/launch_background.xml b/packages/flutter_paypal/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/flutter_paypal/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/android/app/src/main/res/values-night/styles.xml b/packages/flutter_paypal/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/packages/flutter_paypal/example/android/app/src/main/res/values/styles.xml b/packages/flutter_paypal/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/packages/flutter_paypal/example/android/app/src/profile/AndroidManifest.xml b/packages/flutter_paypal/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/packages/flutter_paypal/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/flutter_paypal/example/android/build.gradle b/packages/flutter_paypal/example/android/build.gradle new file mode 100644 index 0000000..f7eb7f6 --- /dev/null +++ b/packages/flutter_paypal/example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/packages/flutter_paypal/example/android/gradle.properties b/packages/flutter_paypal/example/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/packages/flutter_paypal/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/packages/flutter_paypal/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/flutter_paypal/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..3c472b9 --- /dev/null +++ b/packages/flutter_paypal/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-7.5-all.zip diff --git a/packages/flutter_paypal/example/android/local.properties b/packages/flutter_paypal/example/android/local.properties new file mode 100644 index 0000000..6df17b3 --- /dev/null +++ b/packages/flutter_paypal/example/android/local.properties @@ -0,0 +1,2 @@ +sdk.dir=/Users/hamzaaleghwairyeen/Library/Android/sdk +flutter.sdk=/Users/hamzaaleghwairyeen/flutter \ No newline at end of file diff --git a/packages/flutter_paypal/example/android/settings.gradle b/packages/flutter_paypal/example/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/packages/flutter_paypal/example/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/flutter_paypal/example/ios/Flutter/AppFrameworkInfo.plist b/packages/flutter_paypal/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..9625e10 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/packages/flutter_paypal/example/ios/Flutter/Debug.xcconfig b/packages/flutter_paypal/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..ec97fc6 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/ios/Flutter/Generated.xcconfig b/packages/flutter_paypal/example/ios/Flutter/Generated.xcconfig new file mode 100644 index 0000000..30008b9 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Flutter/Generated.xcconfig @@ -0,0 +1,14 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter +FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal/example +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_TARGET=lib/main.dart +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 +EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/packages/flutter_paypal/example/ios/Flutter/Release.xcconfig b/packages/flutter_paypal/example/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldb_helper.py b/packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldb_helper.py new file mode 100644 index 0000000..a88caf9 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldb_helper.py @@ -0,0 +1,32 @@ +# +# Generated file, do not edit. +# + +import lldb + +def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict): + """Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages.""" + base = frame.register["x0"].GetValueAsAddress() + page_len = frame.register["x1"].GetValueAsUnsigned() + + # Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the + # first page to see if handled it correctly. This makes diagnosing + # misconfiguration (e.g. missing breakpoint) easier. + data = bytearray(page_len) + data[0:8] = b'IHELPED!' + + error = lldb.SBError() + frame.GetThread().GetProcess().WriteMemory(base, data, error) + if not error.Success(): + print(f'Failed to write into {base}[+{page_len}]', error) + return + +def __lldb_init_module(debugger: lldb.SBDebugger, _): + target = debugger.GetDummyTarget() + # Caveat: must use BreakpointCreateByRegEx here and not + # BreakpointCreateByName. For some reasons callback function does not + # get carried over from dummy target for the later. + bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$") + bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__)) + bp.SetAutoContinue(True) + print("-- LLDB integration loaded --") diff --git a/packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldbinit b/packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldbinit new file mode 100644 index 0000000..e3ba6fb --- /dev/null +++ b/packages/flutter_paypal/example/ios/Flutter/ephemeral/flutter_lldbinit @@ -0,0 +1,5 @@ +# +# Generated file, do not edit. +# + +command script import --relative-to-command-file flutter_lldb_helper.py diff --git a/packages/flutter_paypal/example/ios/Flutter/flutter_export_environment.sh b/packages/flutter_paypal/example/ios/Flutter/flutter_export_environment.sh new file mode 100755 index 0000000..dc01a13 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal/example" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/packages/flutter_paypal/example/ios/Podfile b/packages/flutter_paypal/example/ios/Podfile new file mode 100644 index 0000000..fdcc671 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.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__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.pbxproj b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b26416c --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*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 */; }; + 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 */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 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 = 2CUT2XXDGR; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 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 = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 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 = 2CUT2XXDGR; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + 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 = 2CUT2XXDGR; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/flutter_paypal/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/flutter_paypal/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..e42adcb --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/flutter_paypal/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/flutter_paypal/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/flutter_paypal/example/ios/Runner/AppDelegate.swift b/packages/flutter_paypal/example/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 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 literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/flutter_paypal/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/flutter_paypal/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/flutter_paypal/example/ios/Runner/Base.lproj/Main.storyboard b/packages/flutter_paypal/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.h b/packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.h new file mode 100644 index 0000000..7a89092 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.h @@ -0,0 +1,19 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GeneratedPluginRegistrant_h +#define GeneratedPluginRegistrant_h + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface GeneratedPluginRegistrant : NSObject ++ (void)registerWithRegistry:(NSObject*)registry; +@end + +NS_ASSUME_NONNULL_END +#endif /* GeneratedPluginRegistrant_h */ diff --git a/packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.m b/packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.m new file mode 100644 index 0000000..b9780f3 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/GeneratedPluginRegistrant.m @@ -0,0 +1,21 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#import "GeneratedPluginRegistrant.h" + +#if __has_include() +#import +#else +@import webview_flutter_wkwebview; +#endif + +@implementation GeneratedPluginRegistrant + ++ (void)registerWithRegistry:(NSObject*)registry { + [WebViewFlutterPlugin registerWithRegistrar:[registry registrarForPlugin:@"WebViewFlutterPlugin"]]; +} + +@end diff --git a/packages/flutter_paypal/example/ios/Runner/Info.plist b/packages/flutter_paypal/example/ios/Runner/Info.plist new file mode 100644 index 0000000..7f55346 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Example + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + 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/packages/flutter_paypal/example/ios/Runner/Runner-Bridging-Header.h b/packages/flutter_paypal/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/packages/flutter_paypal/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/packages/flutter_paypal/example/ios/RunnerTests/RunnerTests.swift b/packages/flutter_paypal/example/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/packages/flutter_paypal/example/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/packages/flutter_paypal/example/lib/main.dart b/packages/flutter_paypal/example/lib/main.dart new file mode 100644 index 0000000..a3be428 --- /dev/null +++ b/packages/flutter_paypal/example/lib/main.dart @@ -0,0 +1,109 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_paypal/flutter_paypal.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Paypal', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const MyHomePage(title: 'Flutter Paypal Example'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: Center( + child: TextButton( + onPressed: () => { + Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) => UsePaypal( + sandboxMode: true, + clientId: + "AW1TdvpSGbIM5iP4HJNI5TyTmwpY9Gv9dYw8_8yW5lYIbCqf326vrkrp0ce9TAqjEGMHiV3OqJM_aRT0", + secretKey: + "EHHtTDjnmTZATYBPiGzZC_AZUfMpMAzj2VZUeqlFUrRJA_C0pQNCxDccB5qoRQSEdcOnnKQhycuOWdP9", + returnURL: "https://samplesite.com/return", + cancelURL: "https://samplesite.com/cancel", + transactions: const [ + { + "amount": { + "total": '10.12', + "currency": "USD", + "details": { + "subtotal": '10.12', + "shipping": '0', + "shipping_discount": 0 + } + }, + "description": + "The payment transaction description.", + // "payment_options": { + // "allowed_payment_method": + // "INSTANT_FUNDING_SOURCE" + // }, + "item_list": { + "items": [ + { + "name": "A demo product", + "quantity": 1, + "price": '10.12', + "currency": "USD" + } + ], + + // shipping address is not required though + "shipping_address": { + "recipient_name": "Jane Foster", + "line1": "Travis County", + "line2": "", + "city": "Austin", + "country_code": "US", + "postal_code": "73301", + "phone": "+00000000", + "state": "Texas" + }, + } + } + ], + note: "Contact us for any questions on your order.", + onSuccess: (Map params) async { + print("onSuccess: $params"); + }, + onError: (error) { + print("onError: $error"); + }, + onCancel: (params) { + print('cancelled: $params'); + }), + ), + ) + }, + child: const Text("Make Payment")), + )); + } +} diff --git a/packages/flutter_paypal/example/linux/CMakeLists.txt b/packages/flutter_paypal/example/linux/CMakeLists.txt new file mode 100644 index 0000000..d67bd4e --- /dev/null +++ b/packages/flutter_paypal/example/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# 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 "example") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.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/packages/flutter_paypal/example/linux/flutter/CMakeLists.txt b/packages/flutter_paypal/example/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/linux/flutter/generated_plugin_registrant.cc b/packages/flutter_paypal/example/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..e71a16d --- /dev/null +++ b/packages/flutter_paypal/example/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/packages/flutter_paypal/example/linux/flutter/generated_plugin_registrant.h b/packages/flutter_paypal/example/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/linux/flutter/generated_plugins.cmake b/packages/flutter_paypal/example/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2e1de87 --- /dev/null +++ b/packages/flutter_paypal/example/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/packages/flutter_paypal/example/linux/main.cc b/packages/flutter_paypal/example/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/linux/my_application.cc b/packages/flutter_paypal/example/linux/my_application.cc new file mode 100644 index 0000000..0ba8f43 --- /dev/null +++ b/packages/flutter_paypal/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, "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, "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/packages/flutter_paypal/example/linux/my_application.h b/packages/flutter_paypal/example/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/flutter_paypal/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..4b81f9b --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Flutter/Flutter-Release.xcconfig b/packages/flutter_paypal/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..5caa9d1 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/flutter_paypal/example/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..bf2a519 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import webview_flutter_wkwebview + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + WebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "WebViewFlutterPlugin")) +} diff --git a/packages/flutter_paypal/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/packages/flutter_paypal/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 0000000..42e3fe1 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,11 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter +FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal/example +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/packages/flutter_paypal/example/macos/Flutter/ephemeral/flutter_export_environment.sh b/packages/flutter_paypal/example/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100755 index 0000000..743d94f --- /dev/null +++ b/packages/flutter_paypal/example/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal/example" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/packages/flutter_paypal/example/macos/Podfile b/packages/flutter_paypal/example/macos/Podfile new file mode 100644 index 0000000..c795730 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Podfile @@ -0,0 +1,43 @@ +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__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/packages/flutter_paypal/example/macos/Runner.xcodeproj/project.pbxproj b/packages/flutter_paypal/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..79158a2 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,695 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "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 = ""; }; + 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 = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Profile; + }; + 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 */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/packages/flutter_paypal/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_paypal/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/flutter_paypal/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/flutter_paypal/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..8fedab6 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/flutter_paypal/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/flutter_paypal/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/flutter_paypal/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/flutter_paypal/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/flutter_paypal/example/macos/Runner/AppDelegate.swift b/packages/flutter_paypal/example/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/flutter_paypal/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..dda192b --- /dev/null +++ b/packages/flutter_paypal/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 = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/packages/flutter_paypal/example/macos/Runner/Configs/Debug.xcconfig b/packages/flutter_paypal/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/flutter_paypal/example/macos/Runner/Configs/Release.xcconfig b/packages/flutter_paypal/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/flutter_paypal/example/macos/Runner/Configs/Warnings.xcconfig b/packages/flutter_paypal/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/DebugProfile.entitlements b/packages/flutter_paypal/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/Info.plist b/packages/flutter_paypal/example/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/macos/Runner/MainFlutterWindow.swift b/packages/flutter_paypal/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/packages/flutter_paypal/example/macos/Runner/Release.entitlements b/packages/flutter_paypal/example/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/packages/flutter_paypal/example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/packages/flutter_paypal/example/macos/RunnerTests/RunnerTests.swift b/packages/flutter_paypal/example/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..5418c9f --- /dev/null +++ b/packages/flutter_paypal/example/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/packages/flutter_paypal/example/pubspec.lock b/packages/flutter_paypal/example/pubspec.lock new file mode 100644 index 0000000..af52aab --- /dev/null +++ b/packages/flutter_paypal/example/pubspec.lock @@ -0,0 +1,316 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.dev" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + crypto: + dependency: transitive + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.dev" + source: hosted + version: "3.0.7" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" + url: "https://pub.dev" + source: hosted + version: "1.0.9" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_paypal: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.2.0" + flutter_spinkit: + dependency: transitive + description: + name: flutter_spinkit + sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f" + url: "https://pub.dev" + source: hosted + version: "5.2.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + http: + dependency: transitive + description: + name: http + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + url: "https://pub.dev" + source: hosted + version: "0.13.6" + http_auth: + dependency: transitive + description: + name: http_auth + sha256: b7625acba2987fa69140d9600c679819f33227d665f525fbb2f394e08cf917d1 + url: "https://pub.dev" + source: hosted + version: "1.0.4" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + url: "https://pub.dev" + source: hosted + version: "0.12.18" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.dev" + source: hosted + version: "1.17.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + url: "https://pub.dev" + source: hosted + version: "0.7.9" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499" + url: "https://pub.dev" + source: hosted + version: "15.1.0" + webview_flutter: + dependency: transitive + description: + name: webview_flutter + sha256: ec81f57aa1611f8ebecf1d2259da4ef052281cb5ad624131c93546c79ccc7736 + url: "https://pub.dev" + source: hosted + version: "4.9.0" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + sha256: "47a8da40d02befda5b151a26dba71f47df471cddd91dfdb7802d0a87c5442558" + url: "https://pub.dev" + source: hosted + version: "3.16.9" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: "1221c1b12f5278791042f2ec2841743784cf25c5a644e23d6680e5d718824f04" + url: "https://pub.dev" + source: hosted + version: "2.15.1" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + sha256: e15d8828e014291324a4d0cf6e272090167f4fa5673ffcf8fe446f4a4cd35861 + url: "https://pub.dev" + source: hosted + version: "3.24.3" +sdks: + dart: ">=3.9.0 <4.0.0" + flutter: ">=3.35.0" diff --git a/packages/flutter_paypal/example/pubspec.yaml b/packages/flutter_paypal/example/pubspec.yaml new file mode 100644 index 0000000..ada8966 --- /dev/null +++ b/packages/flutter_paypal/example/pubspec.yaml @@ -0,0 +1,91 @@ +name: example +description: A new Flutter project. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=3.0.1 <4.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + flutter_paypal: + path: ../ +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/flutter_paypal/example/test/widget_test.dart b/packages/flutter_paypal/example/test/widget_test.dart new file mode 100644 index 0000000..092d222 --- /dev/null +++ b/packages/flutter_paypal/example/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:example/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/packages/flutter_paypal/example/web/favicon.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/web/icons/Icon-192.png b/packages/flutter_paypal/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/web/icons/Icon-512.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/web/icons/Icon-maskable-192.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/web/icons/Icon-maskable-512.png b/packages/flutter_paypal/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/packages/flutter_paypal/example/web/index.html b/packages/flutter_paypal/example/web/index.html new file mode 100644 index 0000000..be820e8 --- /dev/null +++ b/packages/flutter_paypal/example/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + example + + + + + + + + + + diff --git a/packages/flutter_paypal/example/web/manifest.json b/packages/flutter_paypal/example/web/manifest.json new file mode 100644 index 0000000..096edf8 --- /dev/null +++ b/packages/flutter_paypal/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "example", + "short_name": "example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/packages/flutter_paypal/example/windows/CMakeLists.txt b/packages/flutter_paypal/example/windows/CMakeLists.txt new file mode 100644 index 0000000..1378672 --- /dev/null +++ b/packages/flutter_paypal/example/windows/CMakeLists.txt @@ -0,0 +1,102 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(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 "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/packages/flutter_paypal/example/windows/flutter/CMakeLists.txt b/packages/flutter_paypal/example/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..930d207 --- /dev/null +++ b/packages/flutter_paypal/example/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# 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") + +# === 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" + windows-x64 $ + 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/packages/flutter_paypal/example/windows/flutter/generated_plugin_registrant.cc b/packages/flutter_paypal/example/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..8b6d468 --- /dev/null +++ b/packages/flutter_paypal/example/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/packages/flutter_paypal/example/windows/flutter/generated_plugin_registrant.h b/packages/flutter_paypal/example/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/windows/flutter/generated_plugins.cmake b/packages/flutter_paypal/example/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..b93c4c3 --- /dev/null +++ b/packages/flutter_paypal/example/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/packages/flutter_paypal/example/windows/runner/CMakeLists.txt b/packages/flutter_paypal/example/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/packages/flutter_paypal/example/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/packages/flutter_paypal/example/windows/runner/Runner.rc b/packages/flutter_paypal/example/windows/runner/Runner.rc new file mode 100644 index 0000000..aecaa2b --- /dev/null +++ b/packages/flutter_paypal/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", "example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "example.exe" "\0" + VALUE "ProductName", "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/packages/flutter_paypal/example/windows/runner/flutter_window.cpp b/packages/flutter_paypal/example/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..b25e363 --- /dev/null +++ b/packages/flutter_paypal/example/windows/runner/flutter_window.cpp @@ -0,0 +1,66 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + 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/packages/flutter_paypal/example/windows/runner/flutter_window.h b/packages/flutter_paypal/example/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/windows/runner/main.cpp b/packages/flutter_paypal/example/windows/runner/main.cpp new file mode 100644 index 0000000..a61bf80 --- /dev/null +++ b/packages/flutter_paypal/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.Create(L"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/packages/flutter_paypal/example/windows/runner/resource.h b/packages/flutter_paypal/example/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/windows/runner/resources/app_icon.ico b/packages/flutter_paypal/example/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 zcmeHQc|26z|35SKE&G-*mXah&B~fFkXr)DEO&hIfqby^T&>|8^_Ub8Vp#`BLl3lbZ zvPO!8k!2X>cg~Elr=IVxo~J*a`+9wR=A83c-k-DFd(XM&UI1VKCqM@V;DDtJ09WB} zRaHKiW(GT00brH|0EeTeKVbpbGZg?nK6-j827q-+NFM34gXjqWxJ*a#{b_apGN<-L_m3#8Z26atkEn& ze87Bvv^6vVmM+p+cQ~{u%=NJF>#(d;8{7Q{^rWKWNtf14H}>#&y7$lqmY6xmZryI& z($uy?c5-+cPnt2%)R&(KIWEXww>Cnz{OUpT>W$CbO$h1= z#4BPMkFG1Y)x}Ui+WXr?Z!w!t_hjRq8qTaWpu}FH{MsHlU{>;08goVLm{V<&`itk~ zE_Ys=D(hjiy+5=?=$HGii=Y5)jMe9|wWoD_K07(}edAxh`~LBorOJ!Cf@f{_gNCC| z%{*04ViE!#>@hc1t5bb+NO>ncf@@Dv01K!NxH$3Eg1%)|wLyMDF8^d44lV!_Sr}iEWefOaL z8f?ud3Q%Sen39u|%00W<#!E=-RpGa+H8}{ulxVl4mwpjaU+%2pzmi{3HM)%8vb*~-M9rPUAfGCSos8GUXp02|o~0BTV2l#`>>aFV&_P$ejS;nGwSVP8 zMbOaG7<7eKD>c12VdGH;?2@q7535sa7MN*L@&!m?L`ASG%boY7(&L5imY#EQ$KrBB z4@_tfP5m50(T--qv1BJcD&aiH#b-QC>8#7Fx@3yXlonJI#aEIi=8&ChiVpc#N=5le zM*?rDIdcpawoc5kizv$GEjnveyrp3sY>+5_R5;>`>erS%JolimF=A^EIsAK zsPoVyyUHCgf0aYr&alx`<)eb6Be$m&`JYSuBu=p8j%QlNNp$-5C{b4#RubPb|CAIS zGE=9OFLP7?Hgc{?k45)84biT0k&-C6C%Q}aI~q<(7BL`C#<6HyxaR%!dFx7*o^laG z=!GBF^cwK$IA(sn9y6>60Rw{mYRYkp%$jH z*xQM~+bp)G$_RhtFPYx2HTsWk80+p(uqv9@I9)y{b$7NK53rYL$ezbmRjdXS?V}fj zWxX_feWoLFNm3MG7pMUuFPs$qrQWO9!l2B(SIuy2}S|lHNbHzoE+M2|Zxhjq9+Ws8c{*}x^VAib7SbxJ*Q3EnY5lgI9 z=U^f3IW6T=TWaVj+2N%K3<%Un;CF(wUp`TC&Y|ZjyFu6co^uqDDB#EP?DV5v_dw~E zIRK*BoY9y-G_ToU2V_XCX4nJ32~`czdjT!zwme zGgJ0nOk3U4@IE5JwtM}pwimLjk{ln^*4HMU%Fl4~n(cnsLB}Ja-jUM>xIB%aY;Nq8 z)Fp8dv1tkqKanv<68o@cN|%thj$+f;zGSO7H#b+eMAV8xH$hLggtt?O?;oYEgbq@= zV(u9bbd12^%;?nyk6&$GPI%|+<_mEpJGNfl*`!KV;VfmZWw{n{rnZ51?}FDh8we_L z8OI9nE31skDqJ5Oa_ybn7|5@ui>aC`s34p4ZEu6-s!%{uU45$Zd1=p$^^dZBh zu<*pDDPLW+c>iWO$&Z_*{VSQKg7=YEpS3PssPn1U!lSm6eZIho*{@&20e4Y_lRklKDTUCKI%o4Pc<|G^Xgu$J^Q|B87U;`c1zGwf^-zH*VQ^x+i^OUWE0yd z;{FJq)2w!%`x7yg@>uGFFf-XJl4H`YtUG%0slGKOlXV`q?RP>AEWg#x!b{0RicxGhS!3$p7 zij;{gm!_u@D4$Ox%>>bPtLJ> zwKtYz?T_DR1jN>DkkfGU^<#6sGz|~p*I{y`aZ>^Di#TC|Z!7j_O1=Wo8thuit?WxR zh9_S>kw^{V^|g}HRUF=dcq>?q(pHxw!8rx4dC6vbQVmIhmICF#zU!HkHpQ>9S%Uo( zMw{eC+`&pb=GZRou|3;Po1}m46H6NGd$t<2mQh}kaK-WFfmj_66_17BX0|j-E2fe3Jat}ijpc53 zJV$$;PC<5aW`{*^Z6e5##^`Ed#a0nwJDT#Qq~^e8^JTA=z^Kl>La|(UQ!bI@#ge{Dzz@61p-I)kc2?ZxFt^QQ}f%ldLjO*GPj(5)V9IyuUakJX=~GnTgZ4$5!3E=V#t`yOG4U z(gphZB6u2zsj=qNFLYShhg$}lNpO`P9xOSnO*$@@UdMYES*{jJVj|9z-}F^riksLK zbsU+4-{281P9e2UjY6tse^&a)WM1MFw;p#_dHhWI7p&U*9TR0zKdVuQed%6{otTsq z$f~S!;wg#Bd9kez=Br{m|66Wv z#g1xMup<0)H;c2ZO6su_ii&m8j&+jJz4iKnGZ&wxoQX|5a>v&_e#6WA!MB_4asTxLRGQCC5cI(em z%$ZfeqP>!*q5kU>a+BO&ln=4Jm>Ef(QE8o&RgLkk%2}4Tf}U%IFP&uS7}&|Q-)`5< z+e>;s#4cJ-z%&-^&!xsYx777Wt(wZY9(3(avmr|gRe4cD+a8&!LY`1^T?7x{E<=kdY9NYw>A;FtTvQ=Y&1M%lyZPl$ss1oY^Sl8we}n}Aob#6 zl4jERwnt9BlSoWb@3HxYgga(752Vu6Y)k4yk9u~Kw>cA5&LHcrvn1Y-HoIuFWg~}4 zEw4bR`mXZQIyOAzo)FYqg?$5W<;^+XX%Uz61{-L6@eP|lLH%|w?g=rFc;OvEW;^qh z&iYXGhVt(G-q<+_j}CTbPS_=K>RKN0&;dubh0NxJyDOHFF;<1k!{k#7b{|Qok9hac z;gHz}6>H6C6RnB`Tt#oaSrX0p-j-oRJ;_WvS-qS--P*8}V943RT6kou-G=A+7QPGQ z!ze^UGxtW3FC0$|(lY9^L!Lx^?Q8cny(rR`es5U;-xBhphF%_WNu|aO<+e9%6LuZq zt(0PoagJG<%hyuf;te}n+qIl_Ej;czWdc{LX^pS>77s9t*2b4s5dvP_!L^3cwlc)E!(!kGrg~FescVT zZCLeua3f4;d;Tk4iXzt}g}O@nlK3?_o91_~@UMIl?@77Qc$IAlLE95#Z=TES>2E%z zxUKpK{_HvGF;5%Q7n&vA?`{%8ohlYT_?(3A$cZSi)MvIJygXD}TS-3UwyUxGLGiJP znblO~G|*uA^|ac8E-w#}uBtg|s_~s&t>-g0X%zIZ@;o_wNMr_;{KDg^O=rg`fhDZu zFp(VKd1Edj%F zWHPl+)FGj%J1BO3bOHVfH^3d1F{)*PL&sRX`~(-Zy3&9UQX)Z;c51tvaI2E*E7!)q zcz|{vpK7bjxix(k&6=OEIBJC!9lTkUbgg?4-yE{9+pFS)$Ar@vrIf`D0Bnsed(Cf? zObt2CJ>BKOl>q8PyFO6w)+6Iz`LW%T5^R`U_NIW0r1dWv6OY=TVF?N=EfA(k(~7VBW(S;Tu5m4Lg8emDG-(mOSSs=M9Q&N8jc^Y4&9RqIsk(yO_P(mcCr}rCs%1MW1VBrn=0-oQN(Xj!k%iKV zb%ricBF3G4S1;+8lzg5PbZ|$Se$)I=PwiK=cDpHYdov2QO1_a-*dL4KUi|g&oh>(* zq$<`dQ^fat`+VW?m)?_KLn&mp^-@d=&7yGDt<=XwZZC=1scwxO2^RRI7n@g-1o8ps z)&+et_~)vr8aIF1VY1Qrq~Xe``KJrQSnAZ{CSq3yP;V*JC;mmCT6oRLSs7=GA?@6g zUooM}@tKtx(^|aKK8vbaHlUQqwE0}>j&~YlN3H#vKGm@u)xxS?n9XrOWUfCRa< z`20Fld2f&;gg7zpo{Adh+mqNntMc-D$N^yWZAZRI+u1T1zWHPxk{+?vcS1D>08>@6 zLhE@`gt1Y9mAK6Z4p|u(5I%EkfU7rKFSM=E4?VG9tI;a*@?6!ey{lzN5=Y-!$WFSe z&2dtO>^0@V4WRc#L&P%R(?@KfSblMS+N+?xUN$u3K4Ys%OmEh+tq}fnU}i>6YHM?< zlnL2gl~sF!j!Y4E;j3eIU-lfa`RsOL*Tt<%EFC0gPzoHfNWAfKFIKZN8}w~(Yi~=q z>=VNLO2|CjkxP}RkutxjV#4fWYR1KNrPYq5ha9Wl+u>ipsk*I(HS@iLnmGH9MFlTU zaFZ*KSR0px>o+pL7BbhB2EC1%PJ{67_ z#kY&#O4@P=OV#-79y_W>Gv2dxL*@G7%LksNSqgId9v;2xJ zrh8uR!F-eU$NMx@S*+sk=C~Dxr9Qn7TfWnTupuHKuQ$;gGiBcU>GF5sWx(~4IP3`f zWE;YFO*?jGwYh%C3X<>RKHC-DZ!*r;cIr}GLOno^3U4tFSSoJp%oHPiSa%nh=Zgn% z14+8v@ygy0>UgEN1bczD6wK45%M>psM)y^)IfG*>3ItX|TzV*0i%@>L(VN!zdKb8S?Qf7BhjNpziA zR}?={-eu>9JDcl*R=OP9B8N$IcCETXah9SUDhr{yrld{G;PnCWRsPD7!eOOFBTWUQ=LrA_~)mFf&!zJX!Oc-_=kT<}m|K52 z)M=G#;p;Rdb@~h5D{q^K;^fX-m5V}L%!wVC2iZ1uu401Ll}#rocTeK|7FAeBRhNdQ zCc2d^aQnQp=MpOmak60N$OgS}a;p(l9CL`o4r(e-nN}mQ?M&isv-P&d$!8|1D1I(3-z!wi zTgoo)*Mv`gC?~bm?S|@}I|m-E2yqPEvYybiD5azInexpK8?9q*$9Yy9-t%5jU8~ym zgZDx>!@ujQ=|HJnwp^wv-FdD{RtzO9SnyfB{mH_(c!jHL*$>0o-(h(eqe*ZwF6Lvu z{7rkk%PEqaA>o+f{H02tzZ@TWy&su?VNw43! z-X+rN`6llvpUms3ZiSt)JMeztB~>9{J8SPmYs&qohxdYFi!ra8KR$35Zp9oR)eFC4 zE;P31#3V)n`w$fZ|4X-|%MX`xZDM~gJyl2W;O$H25*=+1S#%|53>|LyH za@yh+;325%Gq3;J&a)?%7X%t@WXcWL*BaaR*7UEZad4I8iDt7^R_Fd`XeUo256;sAo2F!HcIQKk;h})QxEsPE5BcKc7WyerTchgKmrfRX z!x#H_%cL#B9TWAqkA4I$R^8{%do3Y*&(;WFmJ zU7Dih{t1<{($VtJRl9|&EB?|cJ)xse!;}>6mSO$o5XIx@V|AA8ZcoD88ZM?C*;{|f zZVmf94_l1OmaICt`2sTyG!$^UeTHx9YuUP!omj(r|7zpm5475|yXI=rR>>fteLI+| z)MoiGho0oEt=*J(;?VY0QzwCqw@cVm?d7Y!z0A@u#H?sCJ*ecvyhj& z-F77lO;SH^dmf?L>3i>?Z*U}Em4ZYV_CjgfvzYsRZ+1B!Uo6H6mbS<-FFL`ytqvb& zE7+)2ahv-~dz(Hs+f})z{*4|{)b=2!RZK;PWwOnO=hG7xG`JU5>bAvUbdYd_CjvtHBHgtGdlO+s^9ca^Bv3`t@VRX2_AD$Ckg36OcQRF zXD6QtGfHdw*hx~V(MV-;;ZZF#dJ-piEF+s27z4X1qi5$!o~xBnvf=uopcn7ftfsZc zy@(PuOk`4GL_n(H9(E2)VUjqRCk9kR?w)v@xO6Jm_Mx})&WGEl=GS0#)0FAq^J*o! zAClhvoTsNP*-b~rN{8Yym3g{01}Ep^^Omf=SKqvN?{Q*C4HNNAcrowIa^mf+3PRy! z*_G-|3i8a;+q;iP@~Of_$(vtFkB8yOyWt2*K)vAn9El>=D;A$CEx6b*XF@4y_6M+2 zpeW`RHoI_p(B{%(&jTHI->hmNmZjHUj<@;7w0mx3&koy!2$@cfX{sN19Y}euYJFn& z1?)+?HCkD0MRI$~uB2UWri})0bru_B;klFdwsLc!ne4YUE;t41JqfG# zZJq6%vbsdx!wYeE<~?>o4V`A3?lN%MnKQ`z=uUivQN^vzJ|C;sdQ37Qn?;lpzg})y z)_2~rUdH}zNwX;Tp0tJ78+&I=IwOQ-fl30R79O8@?Ub8IIA(6I`yHn%lARVL`%b8+ z4$8D-|MZZWxc_)vu6@VZN!HsI$*2NOV&uMxBNzIbRgy%ob_ zhwEH{J9r$!dEix9XM7n&c{S(h>nGm?el;gaX0@|QnzFD@bne`el^CO$yXC?BDJ|Qg z+y$GRoR`?ST1z^e*>;!IS@5Ovb7*RlN>BV_UC!7E_F;N#ky%1J{+iixp(dUJj93aK zzHNN>R-oN7>kykHClPnoPTIj7zc6KM(Pnlb(|s??)SMb)4!sMHU^-ntJwY5Big7xv zb1Ew`Xj;|D2kzGja*C$eS44(d&RMU~c_Y14V9_TLTz0J#uHlsx`S6{nhsA0dWZ#cG zJ?`fO50E>*X4TQLv#nl%3GOk*UkAgt=IY+u0LNXqeln3Z zv$~&Li`ZJOKkFuS)dJRA>)b_Da%Q~axwA_8zNK{BH{#}#m}zGcuckz}riDE-z_Ms> zR8-EqAMcfyGJCtvTpaUVQtajhUS%c@Yj}&6Zz;-M7MZzqv3kA7{SuW$oW#=0az2wQ zg-WG@Vb4|D`pl~Il54N7Hmsauc_ne-a!o5#j3WaBBh@Wuefb!QJIOn5;d)%A#s+5% zuD$H=VNux9bE-}1&bcYGZ+>1Fo;3Z@e&zX^n!?JK*adSbONm$XW9z;Q^L>9U!}Toj2WdafJ%oL#h|yWWwyAGxzfrAWdDTtaKl zK4`5tDpPg5>z$MNv=X0LZ0d6l%D{(D8oT@+w0?ce$DZ6pv>{1&Ok67Ix1 zH}3=IEhPJEhItCC8E=`T`N5(k?G=B4+xzZ?<4!~ ze~z6Wk9!CHTI(0rLJ4{JU?E-puc;xusR?>G?;4vt;q~iI9=kDL=z0Rr%O$vU`30X$ zDZRFyZ`(omOy@u|i6h;wtJlP;+}$|Ak|k2dea7n?U1*$T!sXqqOjq^NxLPMmk~&qI zYg0W?yK8T(6+Ea+$YyspKK?kP$+B`~t3^Pib_`!6xCs32!i@pqXfFV6PmBIR<-QW= zN8L{pt0Vap0x`Gzn#E@zh@H)0FfVfA_Iu4fjYZ+umO1LXIbVc$pY+E234u)ttcrl$ z>s92z4vT%n6cMb>=XT6;l0+9e(|CZG)$@C7t7Z7Ez@a)h)!hyuV&B5K%%)P5?Lk|C zZZSVzdXp{@OXSP0hoU-gF8s8Um(#xzjP2Vem zec#-^JqTa&Y#QJ>-FBxd7tf`XB6e^JPUgagB8iBSEps;92KG`!#mvVcPQ5yNC-GEG zTiHEDYfH+0O15}r^+ z#jxj=@x8iNHWALe!P3R67TwmhItn**0JwnzSV2O&KE8KcT+0hWH^OPD1pwiuyx=b@ zNf5Jh0{9X)8;~Es)$t@%(3!OnbY+`@?i{mGX7Yy}8T_*0a6g;kaFPq;*=px5EhO{Cp%1kI<0?*|h8v!6WnO3cCJRF2-CRrU3JiLJnj@6;L)!0kWYAc_}F{2P))3HmCrz zQ&N&gE70;`!6*eJ4^1IR{f6j4(-l&X!tjHxkbHA^Zhrnhr9g{exN|xrS`5Pq=#Xf& zG%P=#ra-TyVFfgW%cZo5OSIwFL9WtXAlFOa+ubmI5t*3=g#Y zF%;70p5;{ZeFL}&}yOY1N1*Q;*<(kTB!7vM$QokF)yr2FlIU@$Ph58$Bz z0J?xQG=MlS4L6jA22eS42g|9*9pX@$#*sUeM(z+t?hr@r5J&D1rx}2pW&m*_`VDCW zUYY@v-;bAO0HqoAgbbiGGC<=ryf96}3pouhy3XJrX+!!u*O_>Si38V{uJmQ&USptX zKp#l(?>%^7;2%h(q@YWS#9;a!JhKlkR#Vd)ERILlgu!Hr@jA@V;sk4BJ-H#p*4EqC zDGjC*tl=@3Oi6)Bn^QwFpul18fpkbpg0+peH$xyPBqb%`$OUhPKyWb32o7clB*9Z< zN=i~NLjavrLtwgJ01bufP+>p-jR2I95|TpmKpQL2!oV>g(4RvS2pK4*ou%m(h6r3A zX#s&`9LU1ZG&;{CkOK!4fLDTnBys`M!vuz>Q&9OZ0hGQl!~!jSDg|~s*w52opC{sB ze|Cf2luD(*G13LcOAGA!s2FjSK8&IE5#W%J25w!vM0^VyQM!t)inj&RTiJ!wXzFgz z3^IqzB7I0L$llljsGq})thBy9UOyjtFO_*hYM_sgcMk>44jeH0V1FDyELc{S1F-;A zS;T^k^~4biG&V*Irq}O;e}j$$+E_#G?HKIn05iP3j|87TkGK~SqG!-KBg5+mN(aLm z8ybhIM`%C19UX$H$KY6JgXbY$0AT%rEpHC;u`rQ$Y=rxUdsc5*Kvc8jaYaO$^)cI6){P6K0r)I6DY4Wr4&B zLQUBraey#0HV|&c4v7PVo3n$zHj99(TZO^3?Ly%C4nYvJTL9eLBLHsM3WKKD>5!B` zQ=BsR3aR6PD(Fa>327E2HAu5TM~Wusc!)>~(gM)+3~m;92Jd;FnSib=M5d6;;5{%R zb4V7DEJ0V!CP-F*oU?gkc>ksUtAYP&V4ND5J>J2^jt*vcFflQWCrB&fLdT%O59PVJ zhid#toR=FNgD!q3&r8#wEBr`!wzvQu5zX?Q>nlSJ4i@WC*CN*-xU66F^V5crWevQ9gsq$I@z1o(a=k7LL~ z7m_~`o;_Ozha1$8Q}{WBehvAlO4EL60y5}8GDrZ< zXh&F}71JbW2A~8KfEWj&UWV#4+Z4p`b{uAj4&WC zha`}X@3~+Iz^WRlOHU&KngK>#j}+_o@LdBC1H-`gT+krWX3-;!)6?{FBp~%20a}FL zFP9%Emqcwa#(`=G>BBZ0qZDQhmZKJg_g8<=bBFKWr!dyg(YkpE+|R*SGpDVU!+VlU zFC54^DLv}`qa%49T>nNiA9Q7Ips#!Xx90tCU2gvK`(F+GPcL=J^>No{)~we#o@&mUb6c$ zCc*<|NJBk-#+{j9xkQ&ujB zI~`#kN~7W!f*-}wkG~Ld!JqZ@tK}eeSnsS5J1fMFXm|`LJx&}5`@dK3W^7#Wnm+_P zBZkp&j1fa2Y=eIjJ0}gh85jt43kaIXXv?xmo@eHrka!Z|vQv12HN#+!I5E z`(fbuW>gFiJL|uXJ!vKt#z3e3HlVdboH7;e#i3(2<)Fg-I@BR!qY#eof3MFZ&*Y@l zI|KJf&ge@p2Dq09Vu$$Qxb7!}{m-iRk@!)%KL)txi3;~Z4Pb}u@GsW;ELiWeG9V51 znX#}B&4Y2E7-H=OpNE@q{%hFLxwIpBF2t{vPREa8_{linXT;#1vMRWjOzLOP$-hf( z>=?$0;~~PnkqY;~K{EM6Vo-T(0K{A0}VUGmu*hR z{tw3hvBN%N3G3Yw`X5Te+F{J`(3w1s3-+1EbnFQKcrgrX1Jqvs@ADGe%M0s$EbK$$ zK)=y=upBc6SjGYAACCcI=Y*6Fi8_jgwZlLxD26fnQfJmb8^gHRN5(TemhX@0e=vr> zg`W}6U>x6VhoA3DqsGGD9uL1DhB3!OXO=k}59TqD@(0Nb{)Ut_luTioK_>7wjc!5C zIr@w}b`Fez3)0wQfKl&bae7;PcTA7%?f2xucM0G)wt_KO!Ewx>F~;=BI0j=Fb4>pp zv}0R^xM4eti~+^+gE$6b81p(kwzuDti(-K9bc|?+pJEl@H+jSYuxZQV8rl8 zjp@M{#%qItIUFN~KcO9Hed*`$5A-2~pAo~K&<-Q+`9`$CK>rzqAI4w~$F%vs9s{~x zg4BP%Gy*@m?;D6=SRX?888Q6peF@_4Z->8wAH~Cn!R$|Hhq2cIzFYqT_+cDourHbY z0qroxJnrZ4Gh+Ay+F`_c%+KRT>y3qw{)89?=hJ@=KO=@ep)aBJ$c!JHfBMJpsP*3G za7|)VJJ8B;4?n{~ldJF7%jmb`-ftIvNd~ekoufG(`K(3=LNc;HBY& z(lp#q8XAD#cIf}k49zX_i`*fO+#!zKA&%T3j@%)R+#yag067CU%yUEe47>wzGU8^` z1EXFT^@I!{J!F8!X?S6ph8J=gUi5tl93*W>7}_uR<2N2~e}FaG?}KPyugQ=-OGEZs z!GBoyYY+H*ANn4?Z)X4l+7H%`17i5~zRlRIX?t)6_eu=g2Q`3WBhxSUeea+M-S?RL zX9oBGKn%a!H+*hx4d2(I!gsi+@SQK%<{X22M~2tMulJoa)0*+z9=-YO+;DFEm5eE1U9b^B(Z}2^9!Qk`!A$wUE z7$Ar5?NRg2&G!AZqnmE64eh^Anss3i!{}%6@Et+4rr!=}!SBF8eZ2*J3ujCWbl;3; z48H~goPSv(8X61fKKdpP!Z7$88NL^Z?j`!^*I?-P4X^pMxyWz~@$(UeAcTSDd(`vO z{~rc;9|GfMJcApU3k}22a!&)k4{CU!e_ny^Y3cO;tOvOMKEyWz!vG(Kp*;hB?d|R3`2X~=5a6#^o5@qn?J-bI8Ppip{-yG z!k|VcGsq!jF~}7DMr49Wap-s&>o=U^T0!Lcy}!(bhtYsPQy z4|EJe{12QL#=c(suQ89Mhw9<`bui%nx7Nep`C&*M3~vMEACmcRYYRGtANq$F%zh&V zc)cEVeHz*Z1N)L7k-(k3np#{GcDh2Q@ya0YHl*n7fl*ZPAsbU-a94MYYtA#&!c`xGIaV;yzsmrjfieTEtqB_WgZp2*NplHx=$O{M~2#i_vJ{ps-NgK zQsxKK_CBM2PP_je+Xft`(vYfXXgIUr{=PA=7a8`2EHk)Ym2QKIforz# tySWtj{oF3N9@_;i*Fv5S)9x^z=nlWP>jpp-9)52ZmLVA=i*%6g{{fxOO~wEK literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/example/windows/runner/runner.exe.manifest b/packages/flutter_paypal/example/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..a42ea76 --- /dev/null +++ b/packages/flutter_paypal/example/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/packages/flutter_paypal/example/windows/runner/utils.cpp b/packages/flutter_paypal/example/windows/runner/utils.cpp new file mode 100644 index 0000000..b2b0873 --- /dev/null +++ b/packages/flutter_paypal/example/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/packages/flutter_paypal/example/windows/runner/utils.h b/packages/flutter_paypal/example/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/example/windows/runner/win32_window.cpp b/packages/flutter_paypal/example/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/packages/flutter_paypal/example/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/packages/flutter_paypal/example/windows/runner/win32_window.h b/packages/flutter_paypal/example/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/packages/flutter_paypal/example/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/packages/flutter_paypal/ios/Flutter/Generated.xcconfig b/packages/flutter_paypal/ios/Flutter/Generated.xcconfig new file mode 100644 index 0000000..2fbb8c1 --- /dev/null +++ b/packages/flutter_paypal/ios/Flutter/Generated.xcconfig @@ -0,0 +1,14 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter +FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_TARGET=lib/main.dart +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=0.2.0 +FLUTTER_BUILD_NUMBER=0.2.0 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 +EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldb_helper.py b/packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldb_helper.py new file mode 100644 index 0000000..a88caf9 --- /dev/null +++ b/packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldb_helper.py @@ -0,0 +1,32 @@ +# +# Generated file, do not edit. +# + +import lldb + +def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict): + """Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages.""" + base = frame.register["x0"].GetValueAsAddress() + page_len = frame.register["x1"].GetValueAsUnsigned() + + # Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the + # first page to see if handled it correctly. This makes diagnosing + # misconfiguration (e.g. missing breakpoint) easier. + data = bytearray(page_len) + data[0:8] = b'IHELPED!' + + error = lldb.SBError() + frame.GetThread().GetProcess().WriteMemory(base, data, error) + if not error.Success(): + print(f'Failed to write into {base}[+{page_len}]', error) + return + +def __lldb_init_module(debugger: lldb.SBDebugger, _): + target = debugger.GetDummyTarget() + # Caveat: must use BreakpointCreateByRegEx here and not + # BreakpointCreateByName. For some reasons callback function does not + # get carried over from dummy target for the later. + bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$") + bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__)) + bp.SetAutoContinue(True) + print("-- LLDB integration loaded --") diff --git a/packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldbinit b/packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldbinit new file mode 100644 index 0000000..e3ba6fb --- /dev/null +++ b/packages/flutter_paypal/ios/Flutter/ephemeral/flutter_lldbinit @@ -0,0 +1,5 @@ +# +# Generated file, do not edit. +# + +command script import --relative-to-command-file flutter_lldb_helper.py diff --git a/packages/flutter_paypal/ios/Flutter/flutter_export_environment.sh b/packages/flutter_paypal/ios/Flutter/flutter_export_environment.sh new file mode 100755 index 0000000..7b609e7 --- /dev/null +++ b/packages/flutter_paypal/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=0.2.0" +export "FLUTTER_BUILD_NUMBER=0.2.0" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.h b/packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.h new file mode 100644 index 0000000..7a89092 --- /dev/null +++ b/packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.h @@ -0,0 +1,19 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GeneratedPluginRegistrant_h +#define GeneratedPluginRegistrant_h + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface GeneratedPluginRegistrant : NSObject ++ (void)registerWithRegistry:(NSObject*)registry; +@end + +NS_ASSUME_NONNULL_END +#endif /* GeneratedPluginRegistrant_h */ diff --git a/packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.m b/packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.m new file mode 100644 index 0000000..b9780f3 --- /dev/null +++ b/packages/flutter_paypal/ios/Runner/GeneratedPluginRegistrant.m @@ -0,0 +1,21 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#import "GeneratedPluginRegistrant.h" + +#if __has_include() +#import +#else +@import webview_flutter_wkwebview; +#endif + +@implementation GeneratedPluginRegistrant + ++ (void)registerWithRegistry:(NSObject*)registry { + [WebViewFlutterPlugin registerWithRegistrar:[registry registrarForPlugin:@"WebViewFlutterPlugin"]]; +} + +@end diff --git a/packages/flutter_paypal/lib/flutter_paypal.dart b/packages/flutter_paypal/lib/flutter_paypal.dart new file mode 100644 index 0000000..9725ac2 --- /dev/null +++ b/packages/flutter_paypal/lib/flutter_paypal.dart @@ -0,0 +1,331 @@ +library flutter_paypal; + +import 'dart:core'; +import 'package:flutter/material.dart'; +import 'package:flutter_paypal/src/screens/complete_payment.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; +import 'package:webview_flutter/webview_flutter.dart'; +// Import for Android features. +import 'package:webview_flutter_android/webview_flutter_android.dart'; +// Import for iOS features. +import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart'; + +import 'src/PaypalServices.dart'; +import 'src/errors/network_error.dart'; + +class UsePaypal extends StatefulWidget { + final Function onSuccess, onCancel, onError; + final String returnURL, cancelURL, note, clientId, secretKey; + final List transactions; + final bool sandboxMode; + const UsePaypal({ + Key? key, + required this.onSuccess, + required this.onError, + required this.onCancel, + required this.returnURL, + required this.cancelURL, + required this.transactions, + required this.clientId, + required this.secretKey, + this.sandboxMode = false, + this.note = '', + }) : super(key: key); + + @override + State createState() { + return UsePaypalState(); + } +} + +class UsePaypalState extends State { + late final WebViewController _controller; + String checkoutUrl = ''; + String navUrl = ''; + String executeUrl = ''; + String accessToken = ''; + bool loading = true; + bool pageLoading = true; + bool loadingError = false; + late PaypalServices services; + int pressed = 0; + + Map getOrderParams() { + Map temp = { + "intent": "sale", + "payer": {"payment_method": "paypal"}, + "transactions": widget.transactions, + "note_to_payer": widget.note, + "redirect_urls": { + "return_url": widget.returnURL, + "cancel_url": widget.cancelURL + } + }; + return temp; + } + + loadPayment() async { + setState(() { + loading = true; + }); + try { + Map getToken = await services.getAccessToken(); + if (getToken['token'] != null) { + accessToken = getToken['token']; + final transactions = getOrderParams(); + final res = + await services.createPaypalPayment(transactions, accessToken); + if (res["approvalUrl"] != null) { + setState(() { + checkoutUrl = res["approvalUrl"].toString(); + navUrl = res["approvalUrl"].toString(); + executeUrl = res["executeUrl"].toString(); + loading = false; + pageLoading = false; + loadingError = false; + }); + _controller.loadRequest(Uri.parse(checkoutUrl)); + } else { + widget.onError(res); + setState(() { + loading = false; + pageLoading = false; + loadingError = true; + }); + } + } else { + widget.onError("${getToken['message']}"); + + setState(() { + loading = false; + pageLoading = false; + loadingError = true; + }); + } + } catch (e) { + widget.onError(e); + setState(() { + loading = false; + pageLoading = false; + loadingError = true; + }); + } + } + + @override + void initState() { + super.initState(); + services = PaypalServices( + sandboxMode: widget.sandboxMode, + clientId: widget.clientId, + secretKey: widget.secretKey, + ); + setState(() { + navUrl = widget.sandboxMode + ? 'https://api.sandbox.paypal.com' + : 'https://www.api.paypal.com'; + }); + // Enable hybrid composition. + loadPayment(); + + // #docregion platform_features + late final PlatformWebViewControllerCreationParams params; + if (WebViewPlatform.instance is WebKitWebViewPlatform) { + params = WebKitWebViewControllerCreationParams( + allowsInlineMediaPlayback: true, + mediaTypesRequiringUserAction: const {}, + ); + } else { + params = const PlatformWebViewControllerCreationParams(); + } + + final WebViewController controller = + WebViewController.fromPlatformCreationParams(params); + // #enddocregion platform_features + + controller + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setBackgroundColor(const Color(0x00000000)) + ..setNavigationDelegate( + NavigationDelegate( + onProgress: (int progress) { + debugPrint('WebView is loading (progress : $progress%)'); + }, + onPageStarted: (String url) { + setState(() { + pageLoading = true; + loadingError = false; + }); + debugPrint('Page started loading: $url'); + }, + onPageFinished: (String url) { + setState(() { + navUrl = url; + pageLoading = false; + }); + }, + onWebResourceError: (WebResourceError error) { + debugPrint(''' + Page resource error: + code: ${error.errorCode} + description: ${error.description} + errorType: ${error.errorType} + isForMainFrame: ${error.isForMainFrame} + '''); + }, + onNavigationRequest: (NavigationRequest request) async { + if (request.url.startsWith('https://www.youtube.com/')) { + debugPrint('blocking navigation to ${request.url}'); + return NavigationDecision.prevent; + } + if (request.url.contains(widget.returnURL)) { + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) => CompletePayment( + url: request.url, + services: services, + executeUrl: executeUrl, + accessToken: accessToken, + onSuccess: widget.onSuccess, + onCancel: widget.onCancel, + onError: widget.onError)), + ); + } + if (request.url.contains(widget.cancelURL)) { + final uri = Uri.parse(request.url); + await widget.onCancel(uri.queryParameters); + // ignore: use_build_context_synchronously + Navigator.of(context).pop(); + } + debugPrint('allowing navigation to ${request.url}'); + return NavigationDecision.navigate; + }, + onUrlChange: (UrlChange change) { + debugPrint('url change to ${change.url}'); + }, + ), + ) + ..addJavaScriptChannel( + 'Toaster', + onMessageReceived: (JavaScriptMessage message) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(message.message)), + ); + }, + ); + + // #docregion platform_features + if (controller.platform is AndroidWebViewController) { + AndroidWebViewController.enableDebugging(true); + (controller.platform as AndroidWebViewController) + .setMediaPlaybackRequiresUserGesture(false); + } + // #enddocregion platform_features + + _controller = controller; + } + + @override + Widget build(BuildContext context) { + return WillPopScope( + onWillPop: () async { + if (pressed < 2) { + setState(() { + pressed++; + }); + final snackBar = SnackBar( + content: Text( + 'Press back ${3 - pressed} more times to cancel transaction')); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + return false; + } else { + return true; + } + }, + child: Scaffold( + appBar: AppBar( + backgroundColor: const Color(0xFF272727), + leading: GestureDetector( + child: const Icon(Icons.arrow_back_ios), + onTap: () => Navigator.pop(context), + ), + title: Row( + children: [ + Expanded( + child: Container( + padding: + const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + decoration: BoxDecoration( + color: Colors.black.withOpacity(0.3), + borderRadius: BorderRadius.circular(20)), + child: Row( + children: [ + Icon( + Icons.lock_outline, + color: Uri.parse(navUrl).hasScheme + ? Colors.green + : Colors.blue, + size: 18, + ), + const SizedBox(width: 5), + Expanded( + child: Text( + navUrl, + overflow: TextOverflow.ellipsis, + style: const TextStyle(fontSize: 14), + ), + ), + SizedBox(width: pageLoading ? 5 : 0), + pageLoading + ? const SpinKitFadingCube( + color: Color(0xFFEB920D), + size: 10.0, + ) + : const SizedBox() + ], + ), + )) + ], + ), + elevation: 0, + ), + body: SizedBox( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.width, + child: loading + ? const Column( + children: [ + Expanded( + child: Center( + child: SpinKitFadingCube( + color: Color(0xFFEB920D), + size: 30.0, + ), + ), + ), + ], + ) + : loadingError + ? Column( + children: [ + Expanded( + child: Center( + child: NetworkError( + loadData: loadPayment, + message: "Something went wrong,"), + ), + ), + ], + ) + : Column( + children: [ + Expanded( + child: WebViewWidget(controller: _controller), + ), + ], + ), + )), + ); + } +} diff --git a/packages/flutter_paypal/lib/src/PaypalServices.dart b/packages/flutter_paypal/lib/src/PaypalServices.dart new file mode 100644 index 0000000..9df4426 --- /dev/null +++ b/packages/flutter_paypal/lib/src/PaypalServices.dart @@ -0,0 +1,109 @@ +// ignore_for_file: file_names + +import 'package:http/http.dart' as http; +import 'dart:async'; +import 'dart:convert' as convert; +import 'package:http_auth/http_auth.dart'; + +class PaypalServices { + final String clientId, secretKey; + final bool sandboxMode; + PaypalServices({ + required this.clientId, + required this.secretKey, + required this.sandboxMode, + }); + + getAccessToken() async { + String domain = sandboxMode + ? "https://api.sandbox.paypal.com" + : "https://api.paypal.com"; + try { + var client = BasicAuthClient(clientId, secretKey); + var response = await client.post( + Uri.parse("$domain/v1/oauth2/token?grant_type=client_credentials")); + if (response.statusCode == 200) { + final body = convert.jsonDecode(response.body); + return { + 'error': false, + 'message': "Success", + 'token': body["access_token"] + }; + } else { + return { + 'error': true, + 'message': "Your PayPal credentials seems incorrect" + }; + } + } catch (e) { + return { + 'error': true, + 'message': "Unable to proceed, check your internet connection." + }; + } + } + + Future createPaypalPayment(transactions, accessToken) async { + String domain = sandboxMode + ? "https://api.sandbox.paypal.com" + : "https://api.paypal.com"; + try { + var response = await http.post(Uri.parse("$domain/v1/payments/payment"), + body: convert.jsonEncode(transactions), + headers: { + "content-type": "application/json", + 'Authorization': 'Bearer $accessToken' + }); + + final body = convert.jsonDecode(response.body); + if (response.statusCode == 201) { + if (body["links"] != null && body["links"].length > 0) { + List links = body["links"]; + + String executeUrl = ""; + String approvalUrl = ""; + final item = links.firstWhere((o) => o["rel"] == "approval_url", + orElse: () => null); + if (item != null) { + approvalUrl = item["href"]; + } + final item1 = links.firstWhere((o) => o["rel"] == "execute", + orElse: () => null); + if (item1 != null) { + executeUrl = item1["href"]; + } + return {"executeUrl": executeUrl, "approvalUrl": approvalUrl}; + } + return {}; + } else { + return body; + } + } catch (e) { + rethrow; + } + } + + Future executePayment(url, payerId, accessToken) async { + try { + var response = await http.post(Uri.parse(url), + body: convert.jsonEncode({"payer_id": payerId}), + headers: { + "content-type": "application/json", + 'Authorization': 'Bearer $accessToken' + }); + + final body = convert.jsonDecode(response.body); + if (response.statusCode == 200) { + return {'error': false, 'message': "Success", 'data': body}; + } else { + return { + 'error': true, + 'message': "Payment inconclusive.", + 'data': body + }; + } + } catch (e) { + return {'error': true, 'message': e, 'exception': true, 'data': null}; + } + } +} diff --git a/packages/flutter_paypal/lib/src/assets/icons/cloud_state.svg b/packages/flutter_paypal/lib/src/assets/icons/cloud_state.svg new file mode 100644 index 0000000..105c40c --- /dev/null +++ b/packages/flutter_paypal/lib/src/assets/icons/cloud_state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/flutter_paypal/lib/src/assets/icons/lock.svg b/packages/flutter_paypal/lib/src/assets/icons/lock.svg new file mode 100644 index 0000000..bbae22b --- /dev/null +++ b/packages/flutter_paypal/lib/src/assets/icons/lock.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/flutter_paypal/lib/src/assets/img/cloud_state.png b/packages/flutter_paypal/lib/src/assets/img/cloud_state.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6003d6378be684f6f986933f928e0dd3316bc4 GIT binary patch literal 21969 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 literal 0 HcmV?d00001 diff --git a/packages/flutter_paypal/lib/src/errors/network_error.dart b/packages/flutter_paypal/lib/src/errors/network_error.dart new file mode 100644 index 0000000..0b13303 --- /dev/null +++ b/packages/flutter_paypal/lib/src/errors/network_error.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; + +class NetworkError extends StatelessWidget { + final Function loadData; + final String message; + final bool isSmall; + + const NetworkError( + {super.key, required this.loadData, required this.message, this.isSmall = false}); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + "lib/src/assets/img/cloud_state.png", + package: "flutter_paypal", + height: 120, + ), + SizedBox( + height: isSmall ? 20 : 40, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(message, + style: const TextStyle( + fontSize: 14, + color: Color(0xFF272727), + fontWeight: FontWeight.w400)), + const SizedBox( + width: 5, + ), + InkWell( + onTap: () => loadData(), + child: const Text("Tap to retry", + style: TextStyle( + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w800)), + ), + ], + ), + ], + ), + ); + } +} diff --git a/packages/flutter_paypal/lib/src/screens/complete_payment.dart b/packages/flutter_paypal/lib/src/screens/complete_payment.dart new file mode 100644 index 0000000..94b2347 --- /dev/null +++ b/packages/flutter_paypal/lib/src/screens/complete_payment.dart @@ -0,0 +1,117 @@ +// ignore_for_file: use_build_context_synchronously + +import 'package:flutter/material.dart'; +import 'package:flutter_paypal/src/errors/network_error.dart'; +import 'package:flutter_spinkit/flutter_spinkit.dart'; + +import '../PaypalServices.dart'; + +class CompletePayment extends StatefulWidget { + final Function onSuccess, onCancel, onError; + final PaypalServices services; + final String url, executeUrl, accessToken; + const CompletePayment({ + Key? key, + required this.onSuccess, + required this.onError, + required this.onCancel, + required this.services, + required this.url, + required this.executeUrl, + required this.accessToken, + }) : super(key: key); + + @override + // ignore: library_private_types_in_public_api + _CompletePaymentState createState() => _CompletePaymentState(); +} + +class _CompletePaymentState extends State { + bool loading = true; + bool loadingError = false; + + complete() async { + final uri = Uri.parse(widget.url); + final payerID = uri.queryParameters['PayerID']; + if (payerID != null) { + Map params = { + "payerID": payerID, + "paymentId": uri.queryParameters['paymentId'], + "token": uri.queryParameters['token'], + }; + setState(() { + loading = true; + loadingError = false; + }); + + Map resp = await widget.services + .executePayment(widget.executeUrl, payerID, widget.accessToken); + if (resp['error'] == false) { + params['status'] = 'success'; + params['data'] = resp['data']; + await widget.onSuccess(params); + setState(() { + loading = false; + loadingError = false; + }); + Navigator.pop(context); + } else { + if (resp['exception'] != null && resp['exception'] == true) { + widget.onError({"message": resp['message']}); + setState(() { + loading = false; + loadingError = true; + }); + } else { + await widget.onError(resp['data']); + Navigator.of(context).pop(); + } + } + //return NavigationDecision.prevent; + } else { + Navigator.of(context).pop(); + } + } + + @override + void initState() { + super.initState(); + complete(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + child: loading + ? const Column( + children: [ + Expanded( + child: Center( + child: SpinKitFadingCube( + color: Color(0xFFEB920D), + size: 30.0, + ), + ), + ), + ], + ) + : loadingError + ? Column( + children: [ + Expanded( + child: Center( + child: NetworkError( + loadData: complete, + message: "Something went wrong,"), + ), + ), + ], + ) + : const Center( + child: Text("Payment Completed"), + ), + ), + ); + } +} diff --git a/packages/flutter_paypal/linux/flutter/generated_plugin_registrant.cc b/packages/flutter_paypal/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..e71a16d --- /dev/null +++ b/packages/flutter_paypal/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/packages/flutter_paypal/linux/flutter/generated_plugin_registrant.h b/packages/flutter_paypal/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/linux/flutter/generated_plugins.cmake b/packages/flutter_paypal/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2e1de87 --- /dev/null +++ b/packages/flutter_paypal/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/packages/flutter_paypal/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/flutter_paypal/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..bf2a519 --- /dev/null +++ b/packages/flutter_paypal/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import webview_flutter_wkwebview + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + WebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "WebViewFlutterPlugin")) +} diff --git a/packages/flutter_paypal/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/packages/flutter_paypal/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 0000000..a9bf7ae --- /dev/null +++ b/packages/flutter_paypal/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,11 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter +FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=0.2.0 +FLUTTER_BUILD_NUMBER=0.2.0 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/packages/flutter_paypal/macos/Flutter/ephemeral/flutter_export_environment.sh b/packages/flutter_paypal/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100755 index 0000000..e66317b --- /dev/null +++ b/packages/flutter_paypal/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/Users/hamzaaleghwairyeen/flutter" +export "FLUTTER_APPLICATION_PATH=/Users/hamzaaleghwairyeen/development/App/Intaleq/packages/flutter_paypal" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=0.2.0" +export "FLUTTER_BUILD_NUMBER=0.2.0" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/packages/flutter_paypal/pubspec.lock b/packages/flutter_paypal/pubspec.lock new file mode 100644 index 0000000..1818059 --- /dev/null +++ b/packages/flutter_paypal/pubspec.lock @@ -0,0 +1,309 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.dev" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.dev" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + crypto: + dependency: transitive + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.dev" + source: hosted + version: "3.0.7" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_spinkit: + dependency: "direct main" + description: + name: flutter_spinkit + sha256: "77850df57c00dc218bfe96071d576a8babec24cf58b2ed121c83cca4a2fdce7f" + url: "https://pub.dev" + source: hosted + version: "5.2.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + http: + dependency: "direct main" + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.dev" + source: hosted + version: "1.6.0" + http_auth: + dependency: "direct main" + description: + name: http_auth + sha256: b7625acba2987fa69140d9600c679819f33227d665f525fbb2f394e08cf917d1 + url: "https://pub.dev" + source: hosted + version: "1.0.4" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + url: "https://pub.dev" + source: hosted + version: "0.12.18" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.dev" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + url: "https://pub.dev" + source: hosted + version: "1.17.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.dev" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + url: "https://pub.dev" + source: hosted + version: "0.7.9" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.dev" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499" + url: "https://pub.dev" + source: hosted + version: "15.1.0" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + sha256: ec81f57aa1611f8ebecf1d2259da4ef052281cb5ad624131c93546c79ccc7736 + url: "https://pub.dev" + source: hosted + version: "4.9.0" + webview_flutter_android: + dependency: "direct main" + description: + name: webview_flutter_android + sha256: "47a8da40d02befda5b151a26dba71f47df471cddd91dfdb7802d0a87c5442558" + url: "https://pub.dev" + source: hosted + version: "3.16.9" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + sha256: "1221c1b12f5278791042f2ec2841743784cf25c5a644e23d6680e5d718824f04" + url: "https://pub.dev" + source: hosted + version: "2.15.1" + webview_flutter_wkwebview: + dependency: "direct main" + description: + name: webview_flutter_wkwebview + sha256: e15d8828e014291324a4d0cf6e272090167f4fa5673ffcf8fe446f4a4cd35861 + url: "https://pub.dev" + source: hosted + version: "3.24.3" +sdks: + dart: ">=3.9.0 <4.0.0" + flutter: ">=3.35.0" diff --git a/packages/flutter_paypal/pubspec.yaml b/packages/flutter_paypal/pubspec.yaml new file mode 100644 index 0000000..388042c --- /dev/null +++ b/packages/flutter_paypal/pubspec.yaml @@ -0,0 +1,61 @@ +name: flutter_paypal +description: A simple but powerful Paypal SDK for flutter. +version: 0.2.0 +homepage: https://github.com/Mixpeal/flutter_paypal + +environment: + sdk: '>=3.0.1 <4.0.0' + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + + flutter_spinkit: ^5.2.0 + http: ^1.2.2 + http_auth: ^1.0.1 + webview_flutter: ^4.2.0 + webview_flutter_android: ^3.7.0 + webview_flutter_wkwebview: ^3.4.3 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # To add assets to your package, add an assets section, like this: + assets: + - lib/src/assets/img/ + + # + # For details regarding assets in packages, see + # https://flutter.dev/assets-and-images/#from-packages + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # To add custom fonts to your package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/flutter_paypal/test/flutter_paypal_test.dart b/packages/flutter_paypal/test/flutter_paypal_test.dart new file mode 100644 index 0000000..835f8c7 --- /dev/null +++ b/packages/flutter_paypal/test/flutter_paypal_test.dart @@ -0,0 +1,11 @@ +import 'package:flutter_test/flutter_test.dart'; + + +void main() { + test('adds one to input values', () { + // final calculator = Calculator(); + // expect(calculator.addOne(2), 3); + // expect(calculator.addOne(-7), -6); + // expect(calculator.addOne(0), 1); + }); +} diff --git a/packages/flutter_paypal/windows/flutter/generated_plugin_registrant.cc b/packages/flutter_paypal/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..8b6d468 --- /dev/null +++ b/packages/flutter_paypal/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/packages/flutter_paypal/windows/flutter/generated_plugin_registrant.h b/packages/flutter_paypal/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/packages/flutter_paypal/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/packages/flutter_paypal/windows/flutter/generated_plugins.cmake b/packages/flutter_paypal/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..b93c4c3 --- /dev/null +++ b/packages/flutter_paypal/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/packages/get/CHANGELOG.md b/packages/get/CHANGELOG.md new file mode 100644 index 0000000..c143bbf --- /dev/null +++ b/packages/get/CHANGELOG.md @@ -0,0 +1,1433 @@ +## [4.6.5] +Fix pub dev score + +## [4.6.4] +Added backward compatibility with flutter 2. + +## [4.6.3] +Fix SDK constraints + +## [4.6.2] +Added compatibility with flutter 3.0 + +## [4.6.1] +Fix GetConnect on Flutter web + +## [4.6.0] +Add useInheritedMediaQuery to GetMaterialApp and GetCupertinoApp (@davidhole) +Add Circular reveal Transition (@parmarravi) +Add request to failed response (@heftekharm) +Fix internationalization with only country code (@codercengiz) +Add GetTickerProviderStateMixin when multiple AnimationController objects are used (@NatsuOnFire) +Add the followRedirects and maxRedirects fields to the Request object (@wei53881) +Fix to rx.trigger fires twice (@gslender) +Add proxy setting support to GetConnect (@jtans) +Fix markAsDirty used on permanent controllers (@zenalex) +Update Korean readme (@dumbokim) + + +## [4.5.1] +Fix Snackbar when it have action and icon the same time + +## [4.5.0] - Big Update +To have a page-agnostic snackbar, we used OverlayRoute to display a partial route. +However this had several problems: + +1: There was no possibility to close the page without closing the snackbar +2: Get.back() could cause problems with tests of Get.isSnackbarOpen not being properly invoked +3: Sometimes when using iOS popGesture with an open snackbar, some visual inconsistency might appear. +4: When going to another route, the snackbar was not displayed on the new page, and if the user clicked on the new route as soon as he received a Snackbar, he could not read it. + +We remade the Snackbar from scratch, having its Api based on Overlay, and now opening a Snackbar won't be tied to a route, you can normally navigate routes while a Snackbar is shown at the top (or bottom), and even the PopGesture of the iOS is not influenced by it. + +Using Get.back() is handy, it's a small command, which closes routes, dialogs, snackbars, bottomsheets, etc, however Getx 5 will prioritize code safety, and splitting will reduce the check code as well. Currently we have to check if a snackbar is open, to close the snackbar and prevent the app from going back a page, all this boilerplate code will be removed, at the cost of having what it closes in front of Get.back command. + +For backwards compatibility, Get.back() still works for closing routes and overlays, however two new commands have been added: Get.closeCurrentSnackbar() and Get.closeAllSnackbars(). +Maybe we will have a clearer api in GetX 5, and maybe Get.back() will continue to do everything like it does today. The community will be consulted about the desired api. However version 5 will definitely have commands like: Get.closeCurrentSnackbar, Get.closeCurrentDialog etc. There is also the possibility to close a specific snackbar using the return of Get.snackbar, which will no longer return a void, and now return a SnackbarController. + +Snackbars now also have a Queue, and no longer stack one on top of the other, preventing viewing. GetX now has flexible, customizable, route-independent, and completely stable Snackbars. + +Fixed bugs where the snackbar showed an error in debug mode for a fraction of a second. We found that Flutter has a bug with blur below 0.001, so we set the minimum overlayBlur value to this value if it is ==true. + +Errors with internationalization were also fixed, where if you are in UK, and the app had the en_US language, you didn't have American English by default. Now, if the country code is not present, it will automatically fetch the language code before fetching a fallbackLanguage. + +Update locale also now returns a Future, allowing you to perform an action only when the language has already changed (@MHosssam) + +We are very happy to announce that GetX is now documented in Japanese as well, thanks to (@toshi-kuji) + +GetX has always been focused on transparency. You can tell what's going on with your app just by reading the logs on the console. However, these logs shouldn't appear in production, so it now only appears in debug mode (@maxzod) + +@maxzod has also started translating the docs into Arabic, we hope the documentation will be complete soon. + +Some remaining package logs have been moved to Get.log (@gairick-saha) + +RxList.removeWhere received performance optimizations (@zuvola) + +Optimizations in GetConnect and added the ability to modify all request items in GetConnect (@rodrigorahman) + +The current route could be inconsistent if a dialog were opened after a transition, fixed by @xiangzy1 + +Fixed try/catch case missed in socket_notifier (@ShookLyngs) + +Also we had fixes in the docs: @DeathGun3344 @pinguluk + +GetX also surpassed the incredible mark of more than 7000 likes, being the most liked package in all pub.dev, went from 99% to 100% popularity, and has more than 5.3k stars on github. Documentation is now available in 12 languages, and we're happy for all the engagement from your community. + +This update is a preparation update for version 5, which will be released later this year. + +Breaking and Depreciation: +GetBar is now deprecated, use GetSnackbar instead. +dismissDirection now gets a DismissDirection, making the Snackbar more customizable. + + + + + +## [4.3.8] +- Fix nav2 toNamed remove the route + +## [4.3.7] +- Fix wrong currentRoute when a route is removed +- Remove take that limits the router outlet depth (@steven-spiel) + +## [4.3.6] +- Fix error with autodispose of additional dependencies beyond GetxController +- Added ability to add your own delegate to RouterOutlet (@steven-spiel) +- Added listenAndPump to Rx to give Rx the same behavior as BehaviorSubject (@steven-spiel) + +## [4.3.5] +- Fix GetConnect timeout (@jasonlaw) +- Improve Vietnamese docs (@hp1909) +- Refactor placeholder name route to unnamed routes (@roipeker). +- Fix: Navigate to a page identical to Get.offNamed. +- Fix: Wrong nameRoute after a route is removed +- Added assert to prevent the user from starting a route name without slash. + +## [4.3.4] +- Improve docs + +## [4.3.3] +- Fix Get.reset + +## [4.3.2] +- Fix nullable on internacionalization (@jmguillens) +- Fix nullable on Rx.stream (@steven-spiel) + +## [4.3.1] +- Fix controller is not removed when keyboard is open. +- Improved: Safe removal and insertion of controllers. + +## [4.3.0] +- Added GetResponsiveWidget (@ahmednfwela) +- Added `Get.replace()` (@jwelmac) +- Added Improve korean doc (@sejun2) +- Fix multiple middlewares redirect (@liasica) +- Added gestureWidth and showCupertinoParallax to GetPage to customize cupertino transitions + +## [4.2.5] +- Added anchorRoute and filterPages to GetRouterOutlet (@ahmednfwela) +- Added scrollBehavior and scaffoldMessengerKey to GetMaterialapp(@ejabu and @alionour) +- Fix error when child on MaterialApp is null (@ahmednfwela) +- Fix Korean docs (@rws08) +- Fix error with onClose called before routeTransition on Get.offNamed + +## [4.2.4] +- Fix Get.offAll removing GetxServices from memory + +## [4.2.3] +- Fix back button on navigator 2 +- Added parameters and arguments to Get.rootDelegate + +## [4.2.1] +- Remove [] from docs to try fix pub score + +## [4.2.0] - Big update + +This update fixes important bugs as well as integrates with Navigator 2. It also adds GetRouterOutlet, similar to angular RouterOutlet thanks to @ahmednfwela. Also, the documentation translation for Vietnamese (@khangahs) has been added, making the GetX documentation available for 11 different languages, which is just fantastic for any opensource project. GetX has achieved more than 5.4k likes from the pub, and more than 4k stars on github, has videos about it with 48k on youtube, and has communities in the 4 hemispheres of the earth, besides having a large list of contributors as you see bellow. We're all happy to facilitate development with dart and flutter, and that making programming hassle-free has been taken around the world. + +Changes in this version: + +- Fix: Navigating to the same page with Get.offNamed does not delete the controller from that page using Get.lazyPut. + +- Fix Readme GetMiddleware typos +by @nivisi + +- Fix url replace error +by @KevinZhang19870314 + +- Changed response default encoding from latin1 to utf8 +by @heftekharm + +- Add Duration in ExtensionBottomSheet +by @chanonpingpong + +- Added compatibility with dart-lang/mockito +by @lifez + +- Added extensions methods to convert value in percent value +by @kauemurakami + +- Set darkTheme equal theme when darkTheme is null +by @eduardoFlorence + +- Add padding to 'defaultDialog' +by @KevinZhang19870314 + +- GraphQLResponse inherit Response info +by @jasonlaw + +- Fix Redundant concatenating base url +by @jasonlaw + +- Add content type and length into the headers when the content type is 'application/x-www-form-urlencoded' +by @calvingit + +- Make withCredentials configurable +by @jasonlaw + +- Fix flutter 2.0 error +by @yunchiri + +- Allow deleting all registered instances +by @lemps + +- Refactor/rx interface notify children +@by kranfix + +- Fixed parameter parsing and middleware sorting +by @ahmednfwela + +- Improvements to router outlet +by @ahmednfwela + +- Minor improvements and bug fixes +by @ahmednfwela + +- Adding route guards and improving navigation +by @ahmednfwela + +- Fix RxInterface.proxy losing its previous value on exception +by @WillowWisp + +- Added dispose() for bottomSheet. +by @furkankurt + +- Added Pull request template +by @unacorbatanegra + +- Fix and update documentation: +@Farid566, +@galaxykhh, +@arslee07, +@GoStaRoff, +@BondarenkoArtur, +@denisrudnei, +@Charly6596, +@nateshmbhat, +@hrithikrtiwari, +@Undeadlol1, +@rws08, +@inuyashaaa, +@broccolism, +@aadarshadhakalg, +@ZeroMinJeon + + +## [4.1.4] +- Adjust operator + and - to RxInt (@eduardoflorence) +- Fix dark theme (@eduardoflorence) +- Fix form-urlencoded on GetConnect (@aramayyes) + + +## [4.1.3] +- Fix "Error: A value of type 'Locale?' can't be returned from a function"on flutter web (@nickwri) +- Fix plural translations to expressions >1 (@WolfVic) + +## [4.1.2] +- Fix warning ˜can add data to a closed stream˜ when GetBuilder and Obx are nested +- Fix get_connect decoder can not be null (@Goddchen) +- Migrate example code (@3lB4rt0) +- Fix initial value of nullables (@RafaRuiz) +- Improve error message to navigation (@maxzod) +- Fix typo on docs (@Rahulshahare) +- Fixed darktheme being changed only through Get.changeTheme and not through the DarkTheme theme property in MaterialApp (@GoldenSoju) +- Fix controller is removed when navigate to same page (@eduardoflorence) +- Fix missing reload() and reloadAll() to Get extensions (@lkloon123) + + +## [4.1.1] +- Remove mandatory initialValue to nullables types + +## [4.1.0] +- Added Rxn to non nullables reactives types + +## [4.0.3] +- Added new linter rules to improve score + +## [4.0.2] +- Removed "!" of if else conditions until the null-safety of the dart is consistent for using it. + +## [4.0.1] +- Fix changelog + +## [4.0.0] +- Added append function to StateMixin. Now is possible track loading, success and error handle of your application with ONE LINE OF CODE. Ex: append(()=> api.getUser); +- Migrate to null-safety +- Added ScrollMixin to controllers +- Added loadingMore status to RxStatus +- Fix content-type qual null (@katekko) +- Made GetInstance non nullable (@eduardoflorence) +- Fix multi-parameters url (@iMrLopez) +- Fix Expected value of SkDeletable error (@obadajasm) +- Added triggers, an Rx method that triggers events, even if they are the same as the previous event (@RafaRuiz) +- Improve docs: (@CNAD666), (@dhhAndroid), (@Jackylee1992), + +Switching to null-safety: +You can continue using GetX as normal, with as little breaking changes as possible. +It is still possible to declare the var.obs variable, and this remains the preferred way, forcing null-safety and giving you all the security that sound null-safety delivers to your app. However, if you need to use null, we also provide a solution for you. +Declare the variables with `?` Ex: `final Rx count = 0.obs`. +You can also use custom Rxn types with null-safety: +`RxInt` == not nullable +`RxnInt` == nullable. + +## [3.25.6] +- Added documentation in French (@kamazoun) +- Fix logs messages (@damphat) +- Fix plural to zero on internacionalization (@RafaRuiz) +- Fix error when body hasn't content on GetConnect (@jasonlaw) +- Fix typos on readme (@bashleigh) +- Fix group updates to GetBuilder + +## [3.25.5] +- Fix Get.isDialogOpen when two or more open dialogs are closed + +## [3.25.4] +- Added logs and tests to unknownRoute + +## [3.25.3] +- Fix bindStream error 'Object.noSuchMethod'. + +## [3.25.2] +- Improved Workers system to accept a list of works + +## [3.25.1] +- Improved the log system to display the tag used in the controller that was created. + +## [3.25.0] - Big update +- Added [reload] and [reloadAll] methods to reload your Controller to original values +- Added [FullLifeCycleController] - A GetxController capable of observing all the life cycles of your application. FullLifeCycleController has the life cycles: + * onInit: called when the controller enters the application's memory + * onReady: called after onInit, when build method from widget relationed to controller is done. + * onClose: called when controller is deleted from memory. + * onPaused: called when the application is not currently visible to the user, and running in the background. + * onInactive: called when the application is in an inactive state and is not receiving user input, when the user receives a call, for example + * onResumed: The application is now visible and in the foreground + * onDetached: The application is still hosted on a flutter engine but is detached from any host views. + * didChangeMetrics: called when the window size is changed +- Added SuperController, a complete life circle controller with StateMixin +- Improve Iterable Rx Api. Now, you can to use dart List, Map and Set as reactive, like: List names = ['juan', 'pedro', 'maria'].obs; +- Added assign and assignAll extensions to default dart List +- Added parameters options from Get.toNamed, Get.offNamed, and Get.offAllNamed (@enghitalo) +- Improve Rx disposal logic to completely prevent memory leaks +- Improve Capitalize methods from GetUtils (@eduardoflorence) +- Prevent a close snackbar from close a Screen with double tap (@eduardoflorence) +- Includes GetLifeCycleBase mixin on delete/dispose (@saviogrossi) +- Added internacionalization example to sample app (@rodriguesJeff) +- Added headers to Graphql query and mutation(@asalvi0) +- Added translation with parameter extension (@CpdnCristiano) +- Added Get.parameter access to Middleware (@eduardoflorence) +- Fix RxBool typo (@emanuelmutschlechner) +- Added Filter to GetBuilder +- Added debouce to GetBuilder update +- Added ability to insert an Enum, class, or type of an object as a GetBuilder's Id +- Improve upload time from GetConnect +- Create minified version to DartPad(@roipeker) +- Suggested to use `Get.to(() => Page())` instead of `Get.to(Page())`. +- Added more status codes to GetConnect (@romavic) +- Fix and improve docs: @unacorbatanegra, @lsm, @nivisi, @ThinkDigitalSoftware, @martwozniak, @UsamaElgendy, @@DominusKelvin, @jintak0401, @goondeal + + +## [3.24.0] +- GetWidget has been completely redesigned. +Throughout its lifetime, GetWidget has always been mentioned in the documentation as "something you shouldn't use unless you're sure you need it", and it had a very small use case. A short time ago we realized that it could have some unexpected behaviors, when compared to GetView, so we decided to rebuild it from scratch, creating a really useful widget for the ecosystem. +Objectively, GetWidget is now a Widget that caches the controller and protects children from their parents' reconstructions. This means that if you have a ListView or gridview, you can add items to it without the child (being a GetWidget) being rebuilt. The api is now more concise, as you can use Get.put / Get.lazyput for global dependencies, and Get.create with GetWidget for ephemeral dependencies, or when you need several identical controllers for the same widget, eliminating the need for tags for most cases. + +- Workers now have error handlers, so if an error occurs in your stream, you can recover it from your workers. + +- `isTrue` and `isFalse` setters were added to [RxBool], this will make the code more readable, and will mitigate the use of ".value" in Booleans. + +- [Patch] method was added in GetConnect. + +- Native methods for RxString (trim, contains, startWith, etc.) have been added. + +- Standard constructors for RxList and RxMap have been added (RxList.generate, RxList.from, Map.of, Map.from, etc). + +- Added "onEmpty" status in StateMixin (@alizera) + +- Added query and mutation methods of graphql for getconnect. + +- Added body string for content-type application/x-www-form-urlencoded on GetConnect (@eduardoflorence) + +## [3.23.1] +- Fix allowSelfSigned on Flutter web + +## [3.23.0] +- Add GetResponsive (@SchabanBo) +- Update tests, fix predicate for offNamedUntil (@vbuberen) +- Added Urdu Version for Pakistani Developers (@UsamaSarwar) +- Handle for List field with native datatype on GetConnect(@jasonlaw) +- Added WillPopScope to defaultDialog (@rakeshlanjewar) +- Fix optional query params not attach on createUri from GetConnect (@reinaldowebdev) +- Effective Get.testMode from navigator on tests (@eduardoflorence) +- Fix Navigator 2.0 on GetMaterialApp and CupertinoMaterialApp (@SchabanBo) +- Added Middlewares with initial Routes (@SchabanBo) +- Improve PT-br Docs (@eduardoflorence) +- Added the allowSelfSigned parameter to GetSocket(@eduardoflorence) +- Added Indonesian version to Indonesian Developers (@pratamatama) + +## [3.22.2] +- Fix overlayEntries is null on Master/Dev branch of Flutter + +## [3.22.1] +- Improve: auto jsonDecode occurs only if response.header.contentType is "application/json" +- Improve and fix requests types (@eduardoflorence) +- Fix HeaderValue variables with same name (@haidang93) + + +## [3.22.0] +- Added: more multipart options. Now you can send as multipart: + +File: +'file':MultipartFile(File('./images/avatar.png'), filename: 'avatar.png'), + +String path: +'file':MultipartFile('./images/avatar.png', filename: 'avatar.png'), + +Or bytes (Flutter web work only with bytes): +'file':MultipartFile(File('file').readAsBytesSync(), filename: 'avatar.png'), + +- Added: Upload Progress to MultipartRequest +- Added support to List (@jasonlaw) + + +## [3.21.3] +- Improve multipart file and defaultDecoder on GetConnect + +## [3.21.2] +- Fix GetConnect.request returning a PUT request + +## [3.21.1] +- Allow null body to POST method on GetConnect + +## [3.21.0] - Big update +- This update attaches two nice features developed by (@SchabanBo): *GetPage Children* And *GetMiddleware* +In previous versions, to create child pages, you should do something like: + +```dart +GetPage( + name: '/home', + page: () => HomeView(), + binding: HomeBinding(), +), +GetPage( + name: '/home/products', + page: () => ProductsView(), + binding: ProductsBinding(), +), +GetPage( + name: '/home/products/electronics', + page: () => ElectronicsView(), + binding: ElectronicsBinding(), +), +``` +Although the feature works well, it could be improved in several ways: +1- If you had many pages, the page file could become huge and difficult to read. Besides, it was difficult to know which page was the daughter of which module. +2- It was not possible to delegate the function of naming routes to a subroutine file. +With this update, it is possible to create a declarative structure, very similar to the Flutter widget tree for your route, which might look like this: +```dart +GetPage( + name: '/home', + page: () => HomeView(), + binding: HomeBinding(), + children: [ + GetPage( + name: '/products', + page: () => ProductsView(), + binding: ProductsBinding(), + children: [ + GetPage( + name: '/electronics', + page: () => ElectronicsView(), + binding: ElectronicsBinding(), + ), + ], + ), + ], + ); +``` +Thus, when accessing the url: '/home/products/electronics' +Or use Get.toNamed('/home/products/electronics') it will go directly to the page [ElectronicsView], because the child pages, automatically inherit the name of the ancestral page, so _with any small change on any father in the tree all children will be updated._ If you change [/products] to [/accessories], you don't nesse update on all child links. + +However, the most powerful feature of this version is *GetMiddlewares*. +The GetPage has now new property that takes a list of GetMiddleWare than can perform actions and run them in the specific order. + +### Priority + +The Order of the Middlewares to run can pe set by the priority in the GetMiddleware. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` +those middlewares will be run in this order **-8 => 2 => 4 => 5** + +### Redirect + +This function will be called when the page of the called route is being searched for. It takes RouteSettings as a result to redirect to. Or give it null and there will be no redirecting. + +```dart +GetPage redirect( ) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### onPageCalled + +This function will be called when this Page is called before anything created +you can use it to change something about the page or give it new page + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +This function will be called right before the Bindings are initialize. +Here you can change Bindings for this page. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +This function will be called right after the Bindings are initialize. +Here you can do something after that you created the bindings and before creating the page widget. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### OnPageBuilt + +This function will be called right after the GetPage.page function is called and will give you the result of the function. and take the widget that will be showed. + +### OnPageDispose + +This function will be called right after disposing all the related objects (Controllers, views, ...) of the page. + +## [3.20.1] +* Fix wrong reference with unnamed routes and added more tests + +## [3.20.0] - Big update +* Added GetConnect. +- GetConnect is an easy way to communicate from your back to your front. With it you can: +- Communicate through websockets +- Send messages and events via websockets. +- Listen to messages and events via websockets. +- Make http requests (GET, PUT, POST, DELETE). +- Add request modifiers (like attaching a token to each request made). +- Add answer modifiers (how to change a value field whenever the answer arrives) +- Add an authenticator, if the answer is 401, you can configure the renewal of your JWT, for example, and then it will again make the http request. +- Set the number of attempts for the authenticator +- Define a baseUrl for all requests +- Define a standard encoder for your Model. +- Note1: You will never need to use jsonEncoder. It will always be called automatically with each request. If you define an encoder for your model, it will return the instance of your model class ALREADY FILLED with server data. +- Note2: all requests are safety, you do not need to insert try / catch in requests. It will always return a response. In case of an error code, Response.hasError will return true. The error code will always be returned, unless the error was a connection error, which will be returned Response.hasError, but with error code null. +- These are relatively new features, and also inserted in separate containers. You don't have to use it if you don't want to. As it is relatively new, some functions, such as specific http methods, may be missing. +* Translation to Korean (@rws08) +* Fix Overlays state (@eduardoflorence) +* Update chinese docs (@jonahzheng) +* Added context.isDarkMode to context extensions + + +## [3.17.1] +- Allow list.assignAll, map.assignAll and set.assignAll operate with null values + +## [3.17.0] +- Added GetCupertinoApp +- Added initial suport to navigator 2.0 + +## [3.16.2] +- Clean RxList, RxMap and RxSet implementation +- Now when declaring an `RxList()`, it will be started empty. If you want to start a null RxList, you must use `RxList(null)`. +Improved GetStream to receive the same parameters as the StreamController, such as `onListen`, `onPause`, `onResume` and `onCancel`. +- Improve docs + +## [3.16.1] +- Fix compilation error on master + +## [3.16.0] +- Documentation translated into Russian language. (@Renat Fakhrutdinov, @Doaxan and @BatttA) +- Added error message callback for StateMixin (@eduardoflorence) +- Fix incorrect Get.reference when pop route (@4mb1t) +- Added Uppercase/Capital letter on GetUtils (@AleFachini) +- Redraw the Streams api to use GetStream instead of StreamControllers. Why this change? +Dart provides a Streams API that is really rich. However, asynchronous streams add extra latency to ensure that events are delivered in the exact order. +It is not yet known whether this latency has any performance impact in mobile applications, and probably not, however, as GetX is also a server-side framework, we need to have the lowest latency at all, since our base is shared. +Dart also has a Synchronous Streams api that has very low latency, however, it is not suitable for use in state management for two reasons: +1- Synchronous Streams can only have one listen (see the issue opened by Hixie on dart lang for reference: https://github.com/dart-lang/sdk/issues/22240). +This means that we cannot use this api for more than one listener, which is the basis of global state management, where we aim to change the state of more than one location. You can test this with this simple snippet: + +```dart +void main() { + var controller = StreamController(sync: true); + var stream = controller.stream; + stream.listen((data) { + print('$data'); + if (data == 'test4') controller.add('test5'); + }); + + print('test1'); + controller.add('test2'); + stream.listen((event) {}); // second listen throws a exception + print('test3'); + controller.add('test4'); + print('test6'); + controller.add('test7'); + print("test8"); +} +``` +2- Even with a single listener, the dart's Synchronous Streams api cannot deliver events in the exact order. We plan to work on a PR in the future at dart-lang to address this. So if we remove the line above that causes the exception, we will have the following output in the log: + +```dart +void main() { + var controller = StreamController(sync: true); + var stream = controller.stream; + stream.listen((data) { + print('$data'); + if (data == 'test4') controller.add('test5'); + }); + + print('test1'); + controller.add('test2'); + // stream.listen((event) {}); // second listen throws a exception + print('test3'); + controller.add('test4'); + print('test6'); + controller.add('test7'); + print("test8"); +} +///////////////////// log: +test1 +test2 +test3 +test4 +test6 +test8 +test5 + +``` +As we can see, test 4 skips to test 6, which skips to test 8, which skips to test 5. Note that test 7 didn't even appear in the log. + +However, if we work with GetStream, everything works as expected: +```dart +void main() { + var controller = GetStream(); + var stream = controller.stream; + stream.listen((data) { + print('$data'); + if (data == 'test4') controller.add('test5'); + }); + + print('test1'); + controller.add('test2'); + // stream.listen((event) {}); // second listen throws a exception + print('test3'); + controller.add('test4'); + print('test6'); + controller.add('test7'); + print("test8"); +} +///////////////////// log: +test1 +test2 +test3 +test4 +test5 +test6 +test7 +test8 + +``` + +The dart documentation is clear that this api should be used with caution, and in view of these tests, we were sure that it is not stable enough to be used as the core of our state management, nor of the websockets notifications and get_server requests. + +Clarification about the controversy over benchmarks: +In a version prior to changeLog, we talked about the 9000% difference in performance between Streams, and GetStreams that ended up causing a lot of controversy in the community. +Initially, we would like to clarify that this does not mean that you will have mobile applications 9000% faster. Only that one of our main resources, showed itself with a high rate of requests, 9000% faster than using traditional streams. In a real world scenario, you will hardly have so many simultaneous requests. +Skia renders frames on new devices at up to 120fps. This means that if you have a 10 second animation, you will have 1200 reconstructions. Unless you are working with animations, or something that requires rendering at the skia boundary, you won't need that much power. So this does not mean that we are revolutionizing the mobile world, only that we have created an alternative to Stream Sincronas, which works as expected, and which has satisfactory performance for low latency resources. The benchmarks are real, but that does not mean that you will have mobile applications 9000% faster, but that you have a new feature that performs at this level to use. +For reference only, the benchmark can be found ([HERE](https://github.com/jonataslaw/getx/blob/master/test/benchmarks/benckmark_test.dart)) + +In short: asynchronous streams from dart work perfectly, but add a latency that we want to remove on Get_server. +Synchronous dart streams have unexpected behaviors, cannot have more than 1 listener and do not deliver events in the correct order, which completely prevents their use in mobile state managements, since you run the risk of displaying data on the wrong screen, since the last event will not always be the last event entered by the sink. +The 9000% figures are real, however, they refer to the gross performance between Streams and GetStreams. This does not mean that this number will impact your applications, because you are unlikely to use all of that power. + + +## [3.15.0] - Big update +- **Improve Performance**: We made modifications to make GetBuilder even faster. We have improved the structure behind it so that listeners are notified faster. Perhaps in version 4.0 everything will be based on this new structure, but maintaining the power and compatibility with streams. If you want to know how much Getx is faster than pure streams or ChangeNotifier (even after the last update using LinkedList), you can create run the repository tests at: (https://github.com/jonataslaw/getx/blob/master/test/benchmarks/benckmark_test.dart) +- **Added StateMixin** +StateMixin allows you to change the state of the controller, and display a loading, an error message, or a widget you want with 0 boilerplate. This makes things like API/Rest communication or websocket absurdly simple, and it's a real revolution in how state management has behaved so far. +You no longer need to have a ternary in your code, and you don't need a widget like FutureBuilder, StreamBuilder or even Obx/GetBuilder to encompass your Visibility. This will change with the way you manage the state of your controllers, decrease your boilerplate absurdly, and give you more security in your code. +- **Added GetNotifier** +GetNotifier is a super and powerful ValueNotifier, which in addition to having the life cycle of the controllers, is extremely fast, and can manage a single state, as a simplified immutable state management solution. +In theory, the only difference between it and GetxController is the possibility of setting an initial value in the constructor's super (exactly as ValueNotifier does). If the initial value is null, use GetxController. If you need a starting value, GetNotifier can be more useful and have less boilerplate, but both serve the same purpose: to decouple your visualization layer from your presentation logic. +- Other Fixes and improvements: + - Fixed GetxController is closed twice when smartManagement.full is turn on + - Fixed phone number validation + - Fixed some inconsistencies in GetWidget and the life cycle of controllers + - It made controller testing completely safe with navigation. + - Improve docs (@eduardoflorence) + - Improve security types on routes (@unacorbatanegra) + - Improve code structure with less duplicate code: (@kranfix) + - Fix named route erroring when route does not exist (@FiercestT) + +## [3.13.2] +- Reunification of the package. +During the 2 week period, we try to keep this package as a compilation of smaller packages. We were successful in separating, getx is well decoupled and it was only necessary to send the internal folders as packages to pub.dev, however, it became very complicated to contribute to the package. This is because it was necessary to clone the repository, replace all pubspec packages with local paths, and after modification, return the original paths to do the PR. With that, the frequency of updates, which was about 4 to 5 days, became almost 2 weeks, and this is not legal for a community as active as Getx, which uses this package precisely in addition to being modern and performance, be constantly improving. This led contributors to the conclusion that getx works best together. +Additional packages will continue to be maintained, and will have the same base as the main package, however, development will take place in the full and main package, and as the addition of new features or bug fixes arrives, we will migrate to the individual packages . Getx reached the mark of 50 contributors today, more than 1500 likes in the pub, and will continue to make development easy. + +## [3.13.1] +- Remove spaces whitespaces from dart files +- +## [3.13.0] +- Fix typos on code and docs (@wbemanuel and @Goddchen) +- Improve: typedef to GetBuilder and Getx widgets +- Improve behaviour of null route on lastest flutter version (@FiercestT) +- Fix onReady called twice on smartManagement.onlyBuilders +- Fix onClose called twice when GetBuilder is used +- Fix default customTransitions, and defaultDuration be ignored on unnamedRoutes +- Transition.native use default Flutter transitions +- Added Get.testMode to use contextless elements on unit tests +- Added Get.appUpdate and improve Get.forceAppUpdate + +## [3.12.1] +- Remove spaces whitespaces from dart files + +## [3.12.0] +- Added BottomSheet Duration && Export SingleGetTickerProvider (@unacorbatanegra) +- Improve docs from dependencies management (@ngxingyu) +- Fix unknownRoute with null Custom Transition (@marcosfons) +- Optimize capitalize method (@zl910627) +- Added Chinese documentation (@idootop) +- Added TextDirection property on GetMaterialApp to improve RTL layout (@justkawal) +- Remove unnecessary files on git (@nipodemos) +- Fix tags on Get.create() and GetWidget() (@roipeker) +- Update mockito dependency on getTests +- Added GetStatelessWidget, a StatelessWidget base to GetWidget with lifecycle control of controllers. Note: It's a base class, you don't need change to use it or change your GetView, GetWidget StatelessWidget to It. + +## [3.11.1] +- Fix docs + +## [3.11.0] +- Refactor structure from scratch to split GetX completely into separate packages. When using the main package (get) you will have everything working perfectly together. However, if you only want one of the resources, you can use the packages separately. +- Improve Rx types +- Added RTL support +- Added GetTests, a set of tools to help you create unit tests using Getx +- RAM consumption improved by dividing resources into smaller components, preventing related classes that are unnecessary from being loaded +- Fix example app (missing activity) (@Grohden) +- Added Get.create() lifecycle (@roipeker) +- Added section Contribution videos and articles in Readme (@stefandevo) +- fix isNullOrBlank extension +- Added all operators overload (@grohden) +- Fixes subscription for Rx::bindStream (@roipeker) +- Added Ability to use tags with GetX widgets (@na2axl) +- Change Arguments from Object to dynamic (@roipeker) +- Added Persistent bottomsheet (@mohak852) +- Improve extensions tests (@Nipodemos) +- Refactor Route Observer (@grohden) +- Added print extensions (@unacorbatanegra) +- Update PT-br Readme (@eduardoflorence) +- Fix analyzer crash (@eduardoflorence) +- Fix for switch types usages in GetUtils (@grohden) +- Improvement: RxList, RxSet and RxMap null check in the constructor (@Hitsu91) +- Improve readme example (@dafinoer) + +## [3.10.2] +- Fixed the use of tags with lazyPut and added Ability to overwrite "tag" in GetView and GetWidget. + +## [3.10.1] +- Fix analyzer + +## [3.10.0] +Getx 3.10 released with CLI and Get Server. +- Added: analyser + effective dart (@Grohden) +- Added TextStyle to generalDialog title and message (@roipeker) +- renamed and added defaults transition duration and types in "GetInterface" (@roipeker) +- added missing parameters in Get.to/Get.offAll (@roipeker) +- added optional transitionDuration and transitionCurve to Get.dialog() (@roipeker) +- Changed HashMap to HashSet and allow update IDs groups on GetBuilder (@roipeker) +- Added a internal VoidCallback in GetStateUpdaterMixin::getUpdate (@roipeker) +- Added Curve property to routes (@roipeker) +- Improve docs, code cleanup, new GetStateUpdaterMixin and GetStateUpdate in favour of StateSetter on GetxController, GetBuilder, SimpleBuilder. (@roipeker) +- Added RxBool.toggle() as an easy shortcut for switching true/false values. (@roipeker) +- Added _RxImp.nil() to easily set the value to null (@roipeker) +- Added missing docs to Rx classes. (@roipeker) +- Added Get.delete(force:false) to Get extensions (@roipeker) +- Added Docs and comments (@nipodemos) +- Added docs to PT-br and fix typos (@eduardoflorence) +- Cleanup route code (@justkawal) +- Extension to facilitate insert widgets inside a CustomScrollView (@alexkharech) +- Fix docs .obs examples (@kai-oswald) +- Added tag capability to GetView +- Improve code separation of RouteManagement and Internacionalization + +## [3.8.0] +- Added: Snackbar Status: Open, Opening, Closing and Closed +example: +```dart + Get.snackbar('title', 'message', snackbarStatus: (status) { + if (status == SnackbarStatus.CLOSED) { + // made anything + } + }); +``` + +## [3.7.0] +- Added: RxSet. Sets can now also be reactive. +- Added isDesktop/isMobile (@roipeker) +- Improve GetPlatform: It is now possible to know which device the user is using if GetPlatform.isWeb is true. +context.responsiveValue used device orientation based on web and non-web applications. Now it checks if it is a desktop application (web or desktop application) to do the responsiveness calculation. (@roipeker) +- Change: The documentation previously stated that Iterables should not access the ".value" property. +However, many users did not pay attention to this fact, and ended up generating unnecessary issues and bugs in their application. +In this version, we focus on code security. Now ".value" is protected, so it cannot be accessed externally by Lists, Maps or Sets. +- Change: Observable lists are now Dart Lists. +There is no difference in your use: +`RxList list = [].obs;` +And you use +`List list = [].obs;` +- Change: You do not need to access the ".value" property of primitives. +For Strings you need interpolation. +For num, int, double, you will have the normal operators, and use it as dart types. +This way, `.value` can be used exclusively in ModelClasses. +Example: + +```dart +var name = "Jonny" .obs; +// usage: +Text ("$name"); + +var count = 0.obs; +// usage: +increment() => count ++; +Text("$count"); +``` + +Thus: List, Map, Set, num, int, double and String, as of this release, will no longer use the .value property. + +NOTE: +The changes were not break changes, however, you may have missed the details of the documentation, so if you faced the message: "The member 'value' can only be used within instance members of subclasses of 'rx_list.dart' "you just need to remove the" .value "property from your list, and everything will work as planned. +The same goes for Maps and Sets. + +## [3.6.2] +- Fix more formatting issues + +## [3.6.1] +- Fix formatting issues + +## [3.6.0] +- Added RxSet +- Change default logger to developer.log (@jorgegaticav) +- Added BindingsBuilder, ValueBuilder, and ObxValue (@roipeker) +- Fix fallback locale not working if missing country code (@thaihuynhxyz) +- Fix validation of email ".com.br" + +## [3.5.1] +- Remove unnecessary whitespaces + +## [3.5.0] +- Added logwritter (@stefandevo) +- Added responsiveValue (@juanjoseleca) +- Fixed ghost url for snackbar, bottomsheets, and dialogs and unnamed navigation. + +## [3.4.6] +- Fix TextField dispose throw on last Flutter hotfix + +## [3.4.5] +- Fix typo on RxList.remove that could cause type errors. +- Remove initialization console print + +## [3.4.4] +- Fix exception 'isInit called null' when tags are used in conjunction with dependencies. (@djade007) +- Fix typos (@tiagocpeixoto) + +## [3.4.3] +- Fix onInit fired only first time +- Fix language callback(@lundin) +- Fix docs (@nipodemos) + +## [3.4.2] +- Fix individual imports + +## [3.4.1] +- Structure organization, and improvements. + +## [3.4.0] +- Added '[everAll]' Worker: Listen a List of '.obx' +- Added Workers dispose +- Fix transition.noTransition +- Fix TextField and VideoPlayController dispose before transition animation + +## [3.3.0] +- Fix extensions (@stefandevo) +- Added CPF to utils options (@kauemurakami) +- Added fenix mode to Get.lazyPut. +Use `Get.lazyPut(()=> Controller(), fenix:true)` to have a controller that after being destroyed, has the ability to be recreated in case someone needs it. This is a function that already exists in smartManagement.keepFactory which is now also possible in full mode. +- Fix native transition on android + +## [3.2.2] +- Improve transitions and refactor route system + +## [3.2.1] +- Prevent black blackground on cupertino fullscreenDialog + +## [3.2.0] +- Improve GetBuilder ram usage +- Added method update to Rx +Now you no longer need to make an entire class reactive to get an element update from it, you can simply call the update method of its instance, like this: +```dart +class User{ + User(this.name = '', this.age = 0); + String name; + int age; +} + +final user = User().obs; + +Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}")) + +// To update: +user.update((user){ +user.name = 'Jonny'; +user.age = 18; +}); +``` + +Now is also possible to access a value without using the ".value". Just open and close parentheses. +In the previous example, you could do: +```dart +user().name; // before: user.value.name +``` +And it is also possible to set a value without using the value, inserting the value directly into the variable. +```dart +user(User('João', 35)); // before: user.value = User('João', 35) +``` +Added fenix mode to Get.lazyPut. + + +## [3.1.4] +- Update readme banner + +## [3.1.3] +- Activate unknownRoute on version 3 +- Go back transitions.size and transitions.cupertino + +## [3.1.2] +- Expose GetInstance + +## [3.1.1] +- Improvement .obs methods + +## [3.1.0] +- Added extensions to GetUtils and fix typo on GetUtils.isEmail (@stefandevo) +- Added .gitignore file (@hdeyana) + +## [3.0.1] +- Breaking changes on Rx api and GetController and RxController were merged, and now you only have the 'GetxController' +- Refactor routing system. Now you can add custom transitions and more +- Improved the use of dynamic routes, you can now define two different pages according to your arguments. +- Added GetView widget +- Added internacionalization +- Added validations +- Added Get queqe +- Added GetStorage (with separated package) +- Minor bug fixes. + + +## [2.14.0] +- Added getPages API. +- Deprecated namedPages +- Fix default transition +- Added Duration on Get.offAll(@kluverua) + +## [2.13.1] +- Added sort to ListX +- Prepared the framework for version 3 + +## [2.13.0] +- Added Get.focusScope + +## [2.13.0] +- Update docs +- Fix Bindings list on GetPageRoute + +## [2.12.5] +- Update readme + +## [2.12.4] +- Prevent exceptions on onReady with nullables + +## [2.12.3] +- Fix List lenght == null + +## [2.12.2] +- Fix Workers + +## [2.12.1] +- Added: onReady on Controllers LifeCycle +- Added: Observable maps +- Refactor: observable variables that now consume even less RAM. + +## [2.11.3] +- Type parameters and added docs + +## [2.11.2] +- Added docs +- Improvement performance of Obx + +## [2.11.1] +- Fixed: oninit calling only once. + +## [2.11.0] +- Added Permissions: +You can now revoke permissions to SmartManagement so that it cannot delete a particular controller. +Add to Get.put (Controller(), permanent: true); to make it indelible. +Get.lazyPut() will not receive this resource. Initially he had it, but we saw in internal tests that it could cause problems with the bindings API. Bindings were created to initialize and delete an instance, if it were allowed to make a controller started with lazyPut permanent, copies of that Controller would be created every time Binding was called. For the safety of users, especially new users who could easily do this, it was decided that this feature will only be present in Get.put. +- Improve: Now a controller's life cycle has no connection with the View life cycle. It is no longer called internally in an "initState", it is now called when the Controller enters memory. This means that now onInit will always be called, regardless of where you started your dependency. +- removed: this property of the update() method has been permanently removed. + +## [2.10.3] +- GetBuilder refactor. 11% reduction in RAM consumption and 2% in CPU consumption for the sample application. (using as base Flutter for linux desktop). + +- The "this" property of the "update" method has been deprecated and will be removed in the next update. Please don't use it anymore. Just use "update()" now. + +## [2.10.2] +- Fix Get.generalDialog default options + +## [2.10.1] +- Fix broken links on pub +- Fix List empty error + +## [2.10.0] +- Added SmartManagement, your application's memory is managed intelligently like never before! +- Added Obx, a widget that knows when to rebuild a child, without needing any type. +- Added MixinBuilder - If you need to use GetBuilder in conjunction with GetX, use GetxController with this widget, and the changes will occur either using update (this) or changing some reactive variable. Use only if necessary, for better RAM consumption, prefer widgets in that order: +Obx => GetX => GetBuilder => MixinBuilder. +Obx is the lightest of all, and MixinBuilder is a mix of the other 3, whenever possible, use the specific widget. +- Refactor: StateManager of Get. +- Changed: full List API refactor, now value is no longer needed. +- Added Workers: You can hear changes to a variable and trigger custom callbacks. +- Added Bindings API docs. +- Added Portuguese language to readme(@Nipodemos) + +# [2.7.1] +- Improve list to set and get methods + +## [2.7.0] +- Added obx, a simple state interceptor. +- Improve Bindings, ListX, and +- fix docs typos e broken code (@ghprod) + + +## [2.6.3] +- Flutter currently has a problem on some devices where using showModalBottomSheet() can cause TextFields to be hidden behind the keyboard (https://github.com/flutter/flutter/issues/18564) this issue is closed, even users reporting that the problem still occurs. +The problem happens casually, as well as the problem of the snackbar on the iPhone SE 2, and checking the code, I realized that a padding with MediaQuery.of(context).viewInsets.bottom is missing inside the bottomSheet to make it work correctly, since it does not have any constraint with the keyboard. +For stability, I decided not to use the standard Flutter bottomSheet, which contains many bugs, mainly related to keyboard padding, and the lack of respect for topBar's safeArea, and to use a proprietary bottomSheet implementation that is more stable. The Flutter dialog has no problem, so it will be used as the basis for Get.dialog. The bottomSheet will be based on the Flutter bottomSheet Raw API (_ModalBottomSheetRoute), applying bug fixes. +- Added Get.isSnackbarOpen tests + +## [2.6.2] +- Refactor Bindings API + +## [2.6.1] +- Expose Bindings API + +## [2.6.0] +- Added bindings. +You can now add bindings from your controllers to your routes, to prepare GetBuilder or GetX to create a dependency already declared in a Binding class. This feature is in an experimental phase, and will not be documented until the end of the tests. + +## [2.5.10] +- Removed remnants of previousArgs on routeObserver. +This feature had been deprecated in previous updates, and was removed in version 2.5.8. Some remaining references on the routeObserver were causing exceptions in version 2.5.9, and were removed completely in version 2.5.10. + +## [2.5.9] +- Fix Get.find with named instance + +## [2.5.8] +- Added docs +- Added tests(@chimon2000) + +## [2.5.7] +- Fix Get.generalDialog optionals +- Added GetX onInit support + +## [2.5.6] +- GetBuilder refactor to work with lazyPut. +Now you can list your controllers in advance with Get.lazyPut, and only when it is called for the first time will it be relocated in memory. +- Fix english typos(@gumbarros) + +## [2.5.5] +- Fix arguments broken by new methods + +## [2.5.4] +- Refactor methods + +## [2.5.3] +- Fix snackbar padding on iPhone SE 2. +- Added themes docs +- Added ThemeMode (@RodBr) + +## [2.5.2] +- Fix: key not found when Get.key is used with no MaterialApp + +## [2.5.1] +- Improve - GetBuilder uses 18% less ram on more of 20 controllers. + +## [2.5.0] +- Added List.obs +- Now you can transform any class on obs + +## [2.4.0] +- Added GetX, state manager rxDart based. +- Fix error on add for non global controllers + +## [2.3.2] +- Fix close method called on not root GetBuilder + +## [2.3.1] +- Auto close stream inside close method +- Added docs + +## [2.3.0] +- Added interface to GetX support + +## [2.2.8] +- Added api to platform brightness + +## [2.2.7] +- Fix typos + +## [2.2.6] +- Fix cancel button on defaultDialog don't appear when widget implementation usage + +## [2.2.5] +- Refator defaultDialog + +## [2.2.4] +- Clean code +- Fix Get.LazyPut + +## [2.2.3] +- Remove defaultDialog type + +## [2.2.2] +- Fix GetRoute not found + +## [2.2.1] +- Improve lazyPut and fix tag to lazyput(@rochadaniel) + +## [2.2.0] +- Added: Ability to choose or delay a widget's state change according to its ID. +- Added: Ability to fire triggers when loading materialApp. +- Added: Ability to change theme dynamically. +- Added: Ability to rebuild the entire app with one command. +- Added: Ability to trigger events on the MaterialApp. +- Added: Get.lazyPut (lazy loading of dependencies). +- Added: Get.creator - a factory of dependencies . +- Added: Capability of define abstract class on dependencies. + +## [2.1.2] +- Get.defaultDialog refactor + +## [2.1.1] +- fix typo + +## [2.1.0] +- Added Get.rawSnackbar +- Added instantInit config to snackbars +- Refactor Get Instance Manager +- Improved performance and bug fix to Get State Manager +- Improved performance of GetRoute on namedRoutes +- Hotfix on namedRoutes + +## [2.0.10] +- Bump new Flutter version +- Added Get.generalDialog + +## [2.0.6] +- Fix typo on readme + +## [2.0.5] +- Changing the bottomsheet API to comply with the documentation. + +## [2.0.4] +- Fix type not found in some versions of Flutter stable + +## [2.0.3] +- Update Docs + +## [2.0.2] +- Update GetObserver + +## [2.0.1] +- Fix docs and typos + +## [2.0.0] +- Added easy state manager +- Change dialog API +- Added GetMaterialApp +- Added new experimental APIs +- Improve Observer +- Added default duration on Transitions +- Added new routeNamed sistem +- Added Global stateManager config +- Improve Get instance manager +- Added routingCallback +- Added closeOverlays to Get.back +- Added dynamic urls +- Cleaner code +- Improve lib performance +- Many others minor APIs added + +## [1.20.1] +- Improve: Get.finds + +## [1.20.0] +- Added Get Instance Manager + Get.put / Get.find / Get.delete + +## [1.19.1] +- Fix default transitions for namedRoutes + +## [1.19.0] +- Added nested navigators + +## [1.18.0] +- Added SafeArea to bottomsheets +- Added docs + +## [1.17.0] +- Added experimental APIs + + +## [1.16.1] +- Improve: GetObserver + +## [1.16.0-dev] +- Added Get config +- Added logEnable +- Added Default transition +- Added default popGesture behaviour +- Added overlayContext +- Fix Duration transition + +## [1.14.1-dev] +- Fix ternary on new dart version + +## [1.14.0-dev] +- Added compatibility with Flutter 1.17.1 +- Added back popGesture to iOS (default) and Android (optional) +- Improve performance +- Decrease lib size to 94.9kb (25.4k after compiled on release) + +## [1.13.1-dev] +- Fix back function + +## [1.13.0-dev] +- Plugin refactor +- Added GetPlatform + +## [1.12.0-dev] +-Compatibility with Dev branch + +## [1.11.4] +- Refactor code of library + +## [1.11.3] +-Added docs + + +## [1.11.2] + -Fix flutter web platform and added GetPlatform + +## [1.11.1] + -Improve swipe to back on iOS devices + + ## [1.11.0] + -Added experimental GetCupertino + +## [1.10.5] + -Added setKey to improve modular compatibility + -Added ability to define transition duration directly when calling the new route. + +## [1.10.4] + -Improve Get.offAll() - predicate now is optional + +## [1.10.3] + -Improve default color from dialogs + + ## [1.10.2] + -Improve snackbar text color + -Added background color to snackbar (@claudneysessa) + + ## [1.10.1] + -Backdrop improvement + +## [1.10.0] + -Added backdrop + +## [1.9.2] + -Added docs to GetObserver + + ## [1.9.1] + -Fix typo on snackbar route + +## [1.9.0] + -Added: Navigator observer + -Added: Get.args to named routes + -Improve snackbar performance + +## [1.8.1] + -Fix new snackbar features + +## [1.8.0] + -Add Get.close method. + -Add many Snackbars features + +## [1.7.4] + -Fix dialog child error + +## [1.7.3] + -Added transitions docs + +## [1.7.2] + -Fix bottomsheet on macos + +## [1.7.1] + -Fix docs + +## [1.7.0] + + - Improve geral performance. Get.to Wrap now consumes even less RAM and CPU. In an application with 20 screens, it obtained 82% less RAM usage compared to the traditional method Navigator.push and had a CPU normalization of 23% in a Moto z2, against 64% CPU usage in Navigator.push with MaterialPageRoute. Test it for yourself! + - Added BottomSheet with no context + - Added modern Blur Snackbar + - Added customs transitions + - Improve dialogs performance + +## [1.6.4] + + - Improve performance. + +## [1.6.3] + + - Clean code. + +## [1.6.2] + + - Fix bugs on blurred Snackbars + +## [1.6.1] + + - Add docs and improve performance + +## [1.6.0] + + - Add support to snackbars + +## [1.5.0+1] + + - Add color and opacity to dialogs + +## [1.5.0] + + - Add support to dialogs + +## [1.4.0+7] + + - Add more documentation + +## [1.4.0+6] + +- Improve performance and bug fix + +## [1.4.0] + +- Added Get.removeRoute // ability to remove one route. + Get.until // back repeatedly until the predicate returns true. + Get.offUntil // go to next route and remove all the previous routes until the predicate returns true. + Get.offNamedUntil // go to next named route and remove all the previous routes until the predicate returns true. + +## [1.3.4] + +- Improve performance + +## [1.3.3] + +- Fix Get.back arguments + +## [1.3.2] + +- Improve performance + +## [1.3.1] + +- Update docs + +## [1.3.0] + +- Update docs, readme, and add full support to flutter_web + +## [1.2.1] + +- Fix bug currentState = null + + +## [1.2.0] + +- Add routes navigation with no context + +## [1.1.0] + +- Add support to named routes + +## [1.0.3] + +- Improve Performance + +## [1.0.2] + +- Add examples + +## [1.0.1] + +- Doc changes + +## [1.0.0] + +- initial release diff --git a/packages/get/LICENSE b/packages/get/LICENSE new file mode 100644 index 0000000..2fb920b --- /dev/null +++ b/packages/get/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Jonny Borges + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/get/README-ar.md b/packages/get/README-ar.md new file mode 100644 index 0000000..e7b364d --- /dev/null +++ b/packages/get/README-ar.md @@ -0,0 +1,1307 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +
+ +**Languages:** + +[![English](https://img.shields.io/badge/Language-English-blueviolet?style=for-the-badge)](README.md) +[![Vietnamese](https://img.shields.io/badge/Language-Vietnamese-blueviolet?style=for-the-badge)](README-vi.md) +[![Indonesian](https://img.shields.io/badge/Language-Indonesian-blueviolet?style=for-the-badge)](README.id-ID.md) +[![Urdu](https://img.shields.io/badge/Language-Urdu-blueviolet?style=for-the-badge)](README.ur-PK.md) +[![Chinese](https://img.shields.io/badge/Language-Chinese-blueviolet?style=for-the-badge)](README.zh-cn.md) +[![Portuguese](https://img.shields.io/badge/Language-Portuguese-blueviolet?style=for-the-badge)](README.pt-br.md) +[![Spanish](https://img.shields.io/badge/Language-Spanish-blueviolet?style=for-the-badge)](README-es.md) +[![Russian](https://img.shields.io/badge/Language-Russian-blueviolet?style=for-the-badge)](README.ru.md) +[![Polish](https://img.shields.io/badge/Language-Polish-blueviolet?style=for-the-badge)](README.pl.md) +[![Korean](https://img.shields.io/badge/Language-Korean-blueviolet?style=for-the-badge)](README.ko-kr.md) +[![French](https://img.shields.io/badge/Language-French-blueviolet?style=for-the-badge)](README-fr.md) +[![العربيه](https://img.shields.io/badge/Language-arabic-blueviolet?style=for-the-badge)](README-ar.md) + +
+
+ +- [عن المكتبة](#عن-المكتبة) +- [التركيب](#التركيب) +- [بناء تطبيق العداد 🔢](#بناء-تطبيق-العداد-) +- [The Three pillars](#the-three-pillars) + - [State management](#state-management) + - [Reactive State Manager](#reactive-state-manager) + - [More details about state management](#more-details-about-state-management) + - [Route management](#route-management) + - [More details about route management](#more-details-about-route-management) + - [Dependency management](#dependency-management) + - [More details about dependency management](#more-details-about-dependency-management) +- [Utils](#utils) + - [Internationalization](#internationalization) + - [Translations](#translations) + - [Using translations](#using-translations) + - [Using translation with singular and plural](#using-translation-with-singular-and-plural) + - [Using translation with parameters](#using-translation-with-parameters) + - [Locales](#locales) + - [Change locale](#change-locale) + - [System locale](#system-locale) + - [Change Theme](#change-theme) + - [GetConnect](#getconnect) + - [Default configuration](#default-configuration) + - [Custom configuration](#custom-configuration) + - [GetPage Middleware](#getpage-middleware) + - [Priority](#priority) + - [Redirect](#redirect) + - [onPageCalled](#onpagecalled) + - [OnBindingsStart](#onbindingsstart) + - [OnPageBuildStart](#onpagebuildstart) + - [OnPageBuilt](#onpagebuilt) + - [OnPageDispose](#onpagedispose) + - [Other Advanced APIs](#other-advanced-apis) + - [Optional Global Settings and Manual configurations](#optional-global-settings-and-manual-configurations) + - [Local State Widgets](#local-state-widgets) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [Useful tips](#useful-tips) + - [StateMixin](#statemixin) + - [GetView](#getview) + - [GetResponsiveView](#getresponsiveview) + - [How to use it](#how-to-use-it) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) + - [Tests](#tests) + - [Tips](#tips) + - [Mockito or mocktail](#mockito-or-mocktail) + - [Using Get.reset()](#using-getreset) + - [Get.testMode](#gettestmode) +- [Breaking changes from 2.0](#breaking-changes-from-20) +- [Why Getx?](#why-getx) +- [Community](#community) + - [Community channels](#community-channels) + - [How to contribute](#how-to-contribute) + - [Articles and videos](#articles-and-videos) + +# عن المكتبة + +- `GetX` مكتبه خفيفه وقوية لفلاتر , توفر المكتبه السرعه العاليه في التحكم في الحاله , نظام حقن `Ddependency injection` ذكي , والتحكم في التنقل بين الصفحات بسرعه وسهوله + +- `GetX` +- تعتمد علي 3 نقاط اساسية . **الانتاجية والسرعه والتنظيم** + + - **السرعه:** `GetX` تركز علي السرعه واقل استخدام للموارد,`GetX` لا تستخدم `Streams` او `ChangeNotifier`. + + - **الانتاجية:** `GetX` تستخدم طريقه سهله ومريحة في كتابة الكود , لا يهم ماذا تريد انت تبني , يوجد دائما طريقه اسهل لبناء باستخدام `GetX` , ستوفر ساعات من العمل وتوفر لك اعلي سرعه يمكن الوصل لها في تطبيقاتك عموما , يجب ان يهتم المطور بالتخلص من الموارد الغير مستخدمه من الذاكرة , مع `GetX` هذا غير ضروري لانه يتم التخلص من الموارد الغير مستخدمه من الذاكره تلقائيا, اذا اردت تركهم دائما في الذاكرة يمكنك ذلك لكن يجب عليك ان تستخدم `permanent: true` بالاضافه الي توفير الوقت تم تقليل امكانية ترك الموارد في الذاكره بدون التخلص منها , يتم حقن الموارد `lazy` افتراضيا + + - **التنظيم:** `GetX` تسمح لك بفصل الـ `view` عن الـ `presentation logic` و `business logic` باكامل, + بالنسبة للحقن `dependency injection` و التنقل بين الشاشات لا تحتاج فيهم `context` للتنقل بين الصفحات , ولا تحتاك `context` للوصول للموارد عن طريق widget tree, لذلك يتم الفصل بالكامل بين `presentation logic` و `business logic` لا تحتاج لحقن ال `Controllers/Models/Blocs` + داخل شجره العناصر `Widget Tree` خلال `MultiProvider`s. + لان , `GetX` تستخدم نظام حقن خاص بها ويمكنك من فصل الـ `DI` عن الوجهات بالكامل . + +- مع `Getx` تعرف ايه يكون الكود الخاص ب كل جزء في التطبيق , تساعدك في كتابة كود نظيف , بالاضافه الي سهوله التطوير مستقبلا , وهذا يمكنك من مشاركه الاجزاء `modules` امر صعب ليصبح سهل جدا . + `BLOC` كان نقطه البداية لهذا الامر وتظيم الكود بهذه الطريقه في فلاتر , عن طريق فصل كود البزنس عن الواجهات , `GetX` هي التطور لذلك الامر , وذلك عن طريق الاضافه الي ذلك فصل حقن الموارد وفصل التنقل بين الشاشات ايضا , وطبقه البيانات بالكامل ايضا , تعلم اين يكون كل شي في المشروع + +- `Getx` توفر لك السهوله في بناء المشروع والاستقرار كلما كبر حجم المشروع واقصي سرعه ممكن , توفر لك ايضا نظام كامل يعمل في تجانس تام , سهل للمبتدئين , ومنظم للخبراء , امن , مستقر , ومحدث باستمرار ويوفر لك موجموعه من الادوات لتسهل عليك + +- `GetX` ليست ضخمه , تمتلك المكتبة العديد من المميزات تجعلك تبدا في البرمجه بدون القلق عن اي شي كل ميزه منهم منقسمه عن الاخري ولا يبداو الا عندما تستخدمهم , اذا استخدمت جزء التحكم في الحاله فقط لن يتم استخدام جزء التنقل بين الشاشات في تطبيقك الا `Compiled` والعكس صحيح ! . + +-`Getx` لديها نظام شامل , ومجتمع كبير , وعداد كبير من المطورين , وسوف يتم تحديثها باستمرار , تعمل المكتبة علي كل الانظمه بنفس الكود دون تغيير `Android`, `iOS`, `Web`, `Mac`, `Linux`, `Windows` حتي علي الخادم يمكنك استخدام `Getx` لبناء تطبيقات الويب +**[Get Server](https://github.com/jonataslaw/get_server)**. + +**بالاضافه الي ذلك يمكن محاكاه الامر اكثر في فلاتر والخادم عن طريق [Get CLI](https://github.com/jonataslaw/get_cli)**. + +**وللمزيد من الانتاجية يمكنك استخدام اضافه للـ** + +- [فيجوال ستوديو كود](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) +- [اندرويد استوديو و انتلج](https://plugins.jetbrains.com/plugin/14975-getx-snippets) + +# التركيب + +استخدم المكتبة في ملف `pubspec.yaml` + +
+ +```yaml +dependencies: + get: +``` + +
+استدعي المكتبة في الملفات الي ستستخدمها +
+ +```dart +import 'package:get/get.dart'; +``` + +
+ +# بناء تطبيق العداد 🔢 + +تطبيق العداد الذي يتم انشاء مع كل مشروع جديد يتعدي ال 100 سطر (بالتعليقات) ولكي اريك مدي قوه `GetX` +ساوضح لك كيفيه بناء التطبيق مع تغير قيمه العداد مع كل ضغطه زر والتقل بين الشاشات ومشاركه الحاله كل ذلك بطريقه منذمه وفصل تام لكود البزنس عن الواجهات فقط ب 26 سطر من ضمنهم التعليقات 🔥 + +- الخطوه الاولي : + اكتب `Get` امام `MaterialApp` لتصبح `GetMaterialApp` + +
+ +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +
+ +- ملحوظه : هذا لا يعتبر تعديل علي `MaterialApp` لان , `GetMaterialApp` عباره عن عنصر معد مسبقا ويستخدم `MaterialApp` تحت الغطاء , يمكن تغير الاعدادات يدوين لكن هذا غير ضروري لان ``سيقوم بعمل المسارات و حقن العناصر والترجمه وكل شي تحتاجه ولكن اذا كنت تنوي لاستخدام المكتبة فقط للتحكم في الحاله`State managment`فهذه الخطوه غير ضرورية تكون هذه الخطوه ضرورية عندما تريد التنقل بين الشاشات او عرض`snackbars`والترجمه و اي شي يعتمد علي`context`وتقوم`getx` بتوفيره + +- الخطوه الثانية + قم بكتابة الكود داخل `class` وكتابة المتغيرات والدوال , يمكنك جعل المتغير قابلع لاعاده بناء الواجها عند تغير قيمته باستخدام ال `getter` `.obs` . + +
+ +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +
+ +- الخطوه الثالثه +ابني الواجهه واستخدم `StatelessWidget` لتوفير الموارد , مع `Getx` يمكنك الاستغناء عن `StatefulWidget`. +
+ +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Instantiate your class using Get.put() to make it available for all "child" routes there. + final c = Get.put(Controller()); + + return Scaffold( + // Use Obx(()=> to update Text() whenever count is changed. + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // You can ask Get to find a Controller that is being used by another page and redirect you to it. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Access the updated count variable + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +
+ +Result: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +This is a simple project but it already makes clear how powerful Get is. As your project grows, this difference will become more significant. + +Get was designed to work with teams, but it makes the job of an individual developer simple. + +Improve your deadlines, deliver everything on time without losing performance. Get is not for everyone, but if you identified with that phrase, Get is for you! + +# The Three pillars + +## State management + +Get has two different state managers: the simple state manager (we'll call it GetBuilder) and the reactive state manager (GetX/Obx) + +### Reactive State Manager + +Reactive programming can alienate many people because it is said to be complicated. GetX turns reactive programming into something quite simple: + +- You won't need to create StreamControllers. +- You won't need to create a StreamBuilder for each variable +- You will not need to create a class for each state. +- You will not need to create a get for an initial value. +- You will not need to use code generators + +Reactive programming with Get is as easy as using setState. + +Let's imagine that you have a name variable and want that every time you change it, all widgets that use it are automatically changed. + +This is your count variable: + +```dart +var name = 'Jonatas Borges'; +``` + +To make it observable, you just need to add ".obs" to the end of it: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +And in the UI, when you want to show that value and update the screen whenever the values changes, simply do this: + +```dart +Obx(() => Text("${controller.name}")); +``` + +That's all. It's _that_ simple. + +### More details about state management + +**See an more in-depth explanation of state management [here](./documentation/en_US/state_management.md). There you will see more examples and also the difference between the simple state manager and the reactive state manager** + +You will get a good idea of GetX power. + +## Route management + +If you are going to use routes/snackbars/dialogs/bottomsheets without context, GetX is excellent for you too, just see it: + +Add "Get" before your MaterialApp, turning it into GetMaterialApp + +```dart +GetMaterialApp( // Before: MaterialApp( + home: MyHome(), +) +``` + +Navigate to a new screen: + +```dart + +Get.to(NextScreen()); +``` + +Navigate to new screen with name. See more details on named routes [here](./documentation/en_US/route_management.md#navigation-with-named-routes) + +```dart + +Get.toNamed('/details'); +``` + +To close snackbars, dialogs, bottomsheets, or anything you would normally close with Navigator.pop(context); + +```dart +Get.back(); +``` + +To go to the next screen and no option to go back to the previous screen (for use in SplashScreens, login screens, etc.) + +```dart +Get.off(NextScreen()); +``` + +To go to the next screen and cancel all previous routes (useful in shopping carts, polls, and tests) + +```dart +Get.offAll(NextScreen()); +``` + +Noticed that you didn't have to use context to do any of these things? That's one of the biggest advantages of using Get route management. With this, you can execute all these methods from within your controller class, without worries. + +### More details about route management + +**Get works with named routes and also offers lower-level control over your routes! There is in-depth documentation [here](./documentation/en_US/route_management.md)** + +## Dependency management + +Get has a simple and powerful dependency manager that allows you to retrieve the same class as your Bloc or Controller with just 1 lines of code, no Provider context, no inheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); +``` + +- Note: If you are using Get's State Manager, pay more attention to the bindings API, which will make it easier to connect your view to your controller. + +Instead of instantiating your class within the class you are using, you are instantiating it within the Get instance, which will make it available throughout your App. +So you can use your controller (or class Bloc) normally + +**Tip:** Get dependency management is decoupled from other parts of the package, so if for example, your app is already using a state manager (any one, it doesn't matter), you don't need to rewrite it all, you can use this dependency injection with no problems at all + +```dart +controller.fetchApi(); +``` + +Imagine that you have navigated through numerous routes, and you need data that was left behind in your controller, you would need a state manager combined with the Provider or Get_it, correct? Not with Get. You just need to ask Get to "find" for your controller, you don't need any additional dependencies: + +```dart +Controller controller = Get.find(); +//Yes, it looks like Magic, Get will find your controller, and will deliver it to you. You can have 1 million controllers instantiated, Get will always give you the right controller. +``` + +And then you will be able to recover your controller data that was obtained back there: + +```dart +Text(controller.textFromApi); +``` + +### More details about dependency management + +**See a more in-depth explanation of dependency management [here](./documentation/en_US/dependency_management.md)** + +# Utils + +## Internationalization + +### Translations + +Translations are kept as a simple key-value dictionary map. +To add custom translations, create a class and extend `Translations`. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### Using translations + +Just append `.tr` to the specified key and it will be translated, using the current value of `Get.locale` and `Get.fallbackLocale`. + +```dart +Text('title'.tr); +``` + +#### Using translation with singular and plural + +```dart +var products = []; +Text('singularKey'.trPlural('pluralKey', products.length, Args)); +``` + +#### Using translation with parameters + +```dart +import 'package:get/get.dart'; + + +Map> get keys => { + 'en_US': { + 'logged_in': 'logged in as @name with email @email', + }, + 'es_ES': { + 'logged_in': 'iniciado sesión como @name con e-mail @email', + } +}; + +Text('logged_in'.trParams({ + 'name': 'Jhon', + 'email': 'jhon@example.com' + })); +``` + +### Locales + +Pass parameters to `GetMaterialApp` to define the locale and translations. + +```dart +return GetMaterialApp( + translations: Messages(), // your translations + locale: Locale('en', 'US'), // translations will be displayed in that locale + fallbackLocale: Locale('en', 'UK'), // specify the fallback locale in case an invalid locale is selected. +); +``` + +#### Change locale + +Call `Get.updateLocale(locale)` to update the locale. Translations then automatically use the new locale. + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### System locale + +To read the system locale, you could use `Get.deviceLocale`. + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## Change Theme + +Please do not use any higher level widget than `GetMaterialApp` in order to update it. This can trigger duplicate keys. A lot of people are used to the prehistoric approach of creating a "ThemeProvider" widget just to change the theme of your app, and this is definitely NOT necessary with **GetX™**. + +You can create your custom theme and simply add it within `Get.changeTheme` without any boilerplate for that: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +If you want to create something like a button that changes the Theme in `onTap`, you can combine two **GetX™** APIs for that: + +- The api that checks if the dark `Theme` is being used. +- And the `Theme` Change API, you can just put this within an `onPressed`: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +When `.darkmode` is activated, it will switch to the _light theme_, and when the _light theme_ becomes active, it will change to _dark theme_. + +## GetConnect + +GetConnect is an easy way to communicate from your back to your front with http or websockets + +### Default configuration + +You can simply extend GetConnect and use the GET/POST/PUT/DELETE/SOCKET methods to communicate with your Rest API or websockets. + +```dart +class UserProvider extends GetConnect { + // Get request + Future getUser(int id) => get('http://youapi/users/$id'); + // Post request + Future postUser(Map data) => post('http://youapi/users', body: data); + // Post request with File + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` + +### Custom configuration + +GetConnect is highly customizable You can define base Url, as answer modifiers, as Requests modifiers, define an authenticator, and even the number of attempts in which it will try to authenticate itself, in addition to giving the possibility to define a standard decoder that will transform all your requests into your Models without any additional configuration. + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // All request will pass to jsonEncode so CasesModel.fromJson() + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; // It define baseUrl to + // Http and websockets if used with no [httpClient] instance + + // It's will attach 'apikey' property on header from all requests + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // Even if the server sends data from the country "Brazil", + // it will never be displayed to users, because you remove + // that data from the response, even before the response is delivered + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazilll'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // Set the header + request.headers['Authorization'] = "$token"; + return request; + }); + + //Autenticator will be called 3 times if HttpStatus is + //HttpStatus.unauthorized + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## GetPage Middleware + +The GetPage has now new property that takes a list of GetMiddleWare and run them in the specific order. + +**Note**: When GetPage has a Middlewares, all the children of this page will have the same middlewares automatically. + +### Priority + +The Order of the Middlewares to run can be set by the priority in the GetMiddleware. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` + +those middlewares will be run in this order **-8 => 2 => 4 => 5** + +### Redirect + +This function will be called when the page of the called route is being searched for. It takes RouteSettings as a result to redirect to. Or give it null and there will be no redirecting. + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### onPageCalled + +This function will be called when this Page is called before anything created +you can use it to change something about the page or give it new page + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +This function will be called right before the Bindings are initialize. +Here you can change Bindings for this page. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +This function will be called right after the Bindings are initialize. +Here you can do something after that you created the bindings and before creating the page widget. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### OnPageBuilt + +This function will be called right after the GetPage.page function is called and will give you the result of the function. and take the widget that will be showed. + +### OnPageDispose + +This function will be called right after disposing all the related objects (Controllers, views, ...) of the page. + +## Other Advanced APIs + +```dart +// give the current args from currentScreen +Get.arguments + +// give name of previous route +Get.previousRoute + +// give the raw route to access for example, rawRoute.isFirst() +Get.rawRoute + +// give access to Routing API from GetObserver +Get.routing + +// check if snackbar is open +Get.isSnackbarOpen + +// check if dialog is open +Get.isDialogOpen + +// check if bottomsheet is open +Get.isBottomSheetOpen + +// remove one route. +Get.removeRoute() + +// back repeatedly until the predicate returns true. +Get.until() + +// go to next route and remove all the previous routes until the predicate returns true. +Get.offUntil() + +// go to next named route and remove all the previous routes until the predicate returns true. +Get.offNamedUntil() + +//Check in what platform the app is running +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +//Check the device type +GetPlatform.isMobile +GetPlatform.isDesktop +//All platforms are supported independently in web! +//You can tell if you are running inside a browser +//on Windows, iOS, OSX, Android, etc. +GetPlatform.isWeb + + +// Equivalent to : MediaQuery.of(context).size.height, +// but immutable. +Get.height +Get.width + +// Gives the current context of the Navigator. +Get.context + +// Gives the context of the snackbar/dialog/bottomsheet in the foreground, anywhere in your code. +Get.contextOverlay + +// Note: the following methods are extensions on context. Since you +// have access to context in any place of your UI, you can use it anywhere in the UI code + +// If you need a changeable height/width (like Desktop or browser windows that can be scaled) you will need to use context. +context.width +context.height + +// Gives you the power to define half the screen, a third of it and so on. +// Useful for responsive applications. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// Similar to MediaQuery.of(context).size +context.mediaQuerySize() + +/// Similar to MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// Similar to MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// Similar to MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// Similar to MediaQuery.of(context).orientation; +context.orientation() + +/// Check if device is on landscape mode +context.isLandscape() + +/// Check if device is on portrait mode +context.isPortrait() + +/// Similar to MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// Similar to MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// Get the shortestSide from screen +context.mediaQueryShortestSide() + +/// True if width be larger than 800 +context.showNavbar() + +/// True if the shortestSide is smaller than 600p +context.isPhone() + +/// True if the shortestSide is largest than 600p +context.isSmallTablet() + +/// True if the shortestSide is largest than 720p +context.isLargeTablet() + +/// True if the current device is Tablet +context.isTablet() + +/// Returns a value according to the screen size +/// can give value for: +/// watch: if the shortestSide is smaller than 300 +/// mobile: if the shortestSide is smaller than 600 +/// tablet: if the shortestSide is smaller than 1200 +/// desktop: if width is largest than 1200 +context.responsiveValue() +``` + +### Optional Global Settings and Manual configurations + +GetMaterialApp configures everything for you, but if you want to configure Get manually. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +You will also be able to use your own Middleware within `GetObserver`, this will not influence anything. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +You can create _Global Settings_ for `Get`. Just add `Get.config` to your code before pushing any route. +Or do it directly in your `GetMaterialApp` + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +You can optionally redirect all the logging messages from `Get`. +If you want to use your own, favourite logging package, +and want to capture the logs there: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // pass the message to your favourite logging package here + // please note that even if enableLog: false log messages will be pushed in this callback + // you get check the flag if you want through GetConfig.isLogEnable +} + +``` + +### Local State Widgets + +These Widgets allows you to manage a single value, and keep the state ephemeral and locally. +We have flavours for Reactive and Simple. +For instance, you might use them to toggle obscureText in a `TextField`, maybe create a custom +Expandable Panel, or maybe modify the current index in `BottomNavigationBar` while changing the content +of the body in a `Scaffold`. + +#### ValueBuilder + +A simplification of `StatefulWidget` that works with a `.setState` callback that takes the updated value. + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // same signature! you could use ( newValue ) => updateFn( newValue ) + ), + // if you need to call something outside the builder method. + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### ObxValue + +Similar to [`ValueBuilder`](#valuebuilder), but this is the Reactive version, you pass a Rx instance (remember the magical .obs?) and +updates automatically... isn't it awesome? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx has a _callable_ function! You could use (flag) => data.value = flag, + ), + false.obs, +), +``` + +## Useful tips + +`.obs`ervables (also known as _Rx_ Types) have a wide variety of internal methods and operators. + +> Is very common to _believe_ that a property with `.obs` **IS** the actual value... but make no mistake! +> We avoid the Type declaration of the variable, because Dart's compiler is smart enough, and the code +> looks cleaner, but: + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + +Even if `message` _prints_ the actual String value, the Type is **RxString**! + +So, you can't do `message.substring( 0, 4 )`. +You have to access the real `value` inside the _observable_: +The most "used way" is `.value`, but, did you know that you can also use... + +```dart +final name = 'GetX'.obs; +// only "updates" the stream, if the value is different from the current one. +name.value = 'Hey'; + +// All Rx properties are "callable" and returns the new value. +// but this approach does not accepts `null`, the UI will not rebuild. +name('Hello'); + +// is like a getter, prints 'Hello'. +name() ; + +/// numbers: + +final count = 0.obs; + +// You can use all non mutable operations from num primitives! +count + 1; + +// Watch out! this is only valid if `count` is not final, but var +count += 1; + +// You can also compare against values: +count > 2; + +/// booleans: + +final flag = false.obs; + +// switches the value between true/false +flag.toggle(); + + +/// all types: + +// Sets the `value` to null. +flag.nil(); + +// All toString(), toJson() operations are passed down to the `value` +print( count ); // calls `toString()` inside for RxInt + +final abc = [0,1,2].obs; +// Converts the value to a json Array, prints RxList +// Json is supported by all Rx types! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList and RxSet are special Rx types, that extends their native types. +// but you can work with a List as a regular list, although is reactive! +abc.add(12); // pushes 12 to the list, and UPDATES the stream. +abc[3]; // like Lists, reads the index 3. + + +// equality works with the Rx and the value, but hashCode is always taken from the value +final number = 12.obs; +print( number == 12 ); // prints > true + +/// Custom Rx Models: + +// toJson(), toString() are deferred to the child, so you can implement override on them, and print() the observable directly. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user` is "reactive", but the properties inside ARE NOT! +// So, if we change some variable inside of it... +user.value.name = 'Roi'; +// The widget will not rebuild!, +// `Rx` don't have any clue when you change something inside user. +// So, for custom classes, we need to manually "notify" the change. +user.refresh(); + +// or we can use the `update()` method! +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` + +## StateMixin + +Another way to handle your `UI` state is use the `StateMixin` . +To implement it, use the `with` to add the `StateMixin` +to your controller which allows a T model. + +```dart +class Controller extends GetController with StateMixin{} +``` + +The `change()` method change the State whenever we want. +Just pass the data and the status in this way: + +```dart +change(data, status: RxStatus.success()); +``` + +RxStatus allow these status: + +```dart +RxStatus.loading(); +RxStatus.success(); +RxStatus.empty(); +RxStatus.error('message'); +``` + +To represent it in the UI, use: + +```dart +class OtherClass extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + + body: controller.obx( + (state)=>Text(state.name), + + // here you can put your custom loading indicator, but + // by default would be Center(child:CircularProgressIndicator()) + onLoading: CustomLoadingIndicator(), + onEmpty: Text('No data found'), + + // here also you can set your own error widget, but by + // default will be an Center(child:Text(error)) + onError: (error)=>Text(error), + ), + ); +} +``` + +#### GetView + +I love this Widget, is so simple, yet, so useful! + +Is a `const Stateless` Widget that has a getter `controller` for a registered `Controller`, that's all. + +```dart + class AwesomeController extends GetController { + final String title = 'My Awesome View'; + } + + // ALWAYS remember to pass the `Type` you used to register your controller! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // just call `controller.something` + ); + } + } +``` + +#### GetResponsiveView + +Extend this widget to build responsive view. +this widget contains the `screen` property that have all +information about the screen size and type. + +##### How to use it + +You have two options to build it. + +- with `builder` method you return the widget to build. +- with methods `desktop`, `tablet`,`phone`, `watch`. the specific + method will be built when the screen type matches the method + when the screen is [ScreenType.Tablet] the `tablet` method + will be exuded and so on. + **Note:** If you use this method please set the property `alwaysUseBuilder` to `false` + +With `settings` property you can set the width limit for the screen types. + +![example](https://github.com/SchabanBo/get_page_example/blob/master/docs/Example.gif?raw=true) +Code to this screen +[code](https://github.com/SchabanBo/get_page_example/blob/master/lib/pages/responsive_example/responsive_view.dart) + +#### GetWidget + +Most people have no idea about this Widget, or totally confuse the usage of it. +The use case is very rare, but very specific: It `caches` a Controller. +Because of the _cache_, can't be a `const Stateless`. + +> So, when do you need to "cache" a Controller? + +If you use, another "not so common" feature of **GetX**: `Get.create()`. + +`Get.create(()=>Controller())` will generate a new `Controller` each time you call +`Get.find()`, + +That's where `GetWidget` shines... as you can use it, for example, +to keep a list of Todo items. So, if the widget gets "rebuilt", it will keep the same controller instance. + +#### GetxService + +This class is like a `GetxController`, it shares the same lifecycle ( `onInit()`, `onReady()`, `onClose()`). +But has no "logic" inside of it. It just notifies **GetX** Dependency Injection system, that this subclass +**can not** be removed from memory. + +So is super useful to keep your "Services" always reachable and active with `Get.find()`. Like: +`ApiService`, `StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// AWAIT SERVICES INITIALIZATION. + runApp(SomeApp()); +} + +/// Is a smart move to make your Services intiialize before you run the Flutter app. +/// as you can control the execution flow (maybe you need to load some Theme configuration, +/// apiKey, language defined by the User... so load SettingService before running ApiService. +/// so GetMaterialApp() doesnt have to rebuild, and takes the values directly. +void initServices() async { + print('starting services ...'); + /// Here is where you put get_storage, hive, shared_pref initialization. + /// or moor connection, or whatever that's async. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +The only way to actually delete a `GetxService`, is with `Get.reset()` which is like a +"Hot Reboot" of your app. So remember, if you need absolute persistence of a class instance during the +lifetime of your app, use `GetxService`. + +### Tests + +You can test your controllers like any other class, including their lifecycles: + +```dart +class Controller extends GetxController { + @override + void onInit() { + super.onInit(); + //Change value to name2 + name.value = 'name2'; + } + + @override + void onClose() { + name.value = ''; + super.onClose(); + } + + final name = 'name1'.obs; + + void changeName() => name.value = 'name3'; +} + +void main() { + test(''' +Test the state of the reactive variable "name" across all of its lifecycles''', + () { + /// You can test the controller without the lifecycle, + /// but it's not recommended unless you're not using + /// GetX dependency injection + final controller = Controller(); + expect(controller.name.value, 'name1'); + + /// If you are using it, you can test everything, + /// including the state of the application after each lifecycle. + Get.put(controller); // onInit was called + expect(controller.name.value, 'name2'); + + /// Test your functions + controller.changeName(); + expect(controller.name.value, 'name3'); + + /// onClose was called + Get.delete(); + + expect(controller.name.value, ''); + }); +} +``` + +#### Tips + +##### Mockito or mocktail + +If you need to mock your GetxController/GetxService, you should extend GetxController, and mixin it with Mock, that way + +```dart +class NotificationServiceMock extends GetxService with Mock implements NotificationService {} +``` + +##### Using Get.reset() + +If you are testing widgets, or test groups, use Get.reset at the end of your test or in tearDown to reset all settings from your previous test. + +##### Get.testMode + +if you are using your navigation in your controllers, use `Get.testMode = true` at the beginning of your main. + +# Breaking changes from 2.0 + +1- Rx types: + +| Before | After | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController and GetBuilder now have merged, you no longer need to memorize which controller you want to use, just use GetxController, it will work for simple state management and for reactive as well. + +2- NamedRoutes +Before: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Now: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +Why this change? +Often, it may be necessary to decide which page will be displayed from a parameter, or a login token, the previous approach was inflexible, as it did not allow this. +Inserting the page into a function has significantly reduced the RAM consumption, since the routes will not be allocated in memory since the app was started, and it also allowed to do this type of approach: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# Why Getx? + +1- Many times after a Flutter update, many of your packages will break. Sometimes compilation errors happen, errors often appear that there are still no answers about, and the developer needs to know where the error came from, track the error, only then try to open an issue in the corresponding repository, and see its problem solved. Get centralizes the main resources for development (State, dependency and route management), allowing you to add a single package to your pubspec, and start working. After a Flutter update, the only thing you need to do is update the Get dependency, and get to work. Get also resolves compatibility issues. How many times a version of a package is not compatible with the version of another, because one uses a dependency in one version, and the other in another version? This is also not a concern using Get, as everything is in the same package and is fully compatible. + +2- Flutter is easy, Flutter is incredible, but Flutter still has some boilerplate that may be unwanted for most developers, such as `Navigator.of(context).push (context, builder [...]`. Get simplifies development. Instead of writing 8 lines of code to just call a route, you can just do it: `Get.to(Home())` and you're done, you'll go to the next page. Dynamic web urls are a really painful thing to do with Flutter currently, and that with GetX is stupidly simple. Managing states in Flutter, and managing dependencies is also something that generates a lot of discussion, as there are hundreds of patterns in the pub. But there is nothing as easy as adding a ".obs" at the end of your variable, and place your widget inside an Obx, and that's it, all updates to that variable will be automatically updated on the screen. + +3- Ease without worrying about performance. Flutter's performance is already amazing, but imagine that you use a state manager, and a locator to distribute your blocs/stores/controllers/ etc. classes. You will have to manually call the exclusion of that dependency when you don't need it. But have you ever thought of simply using your controller, and when it was no longer being used by anyone, it would simply be deleted from memory? That's what GetX does. With SmartManagement, everything that is not being used is deleted from memory, and you shouldn't have to worry about anything but programming. You will be assured that you are consuming the minimum necessary resources, without even having created a logic for this. + +4- Actual decoupling. You may have heard the concept "separate the view from the business logic". This is not a peculiarity of BLoC, MVC, MVVM, and any other standard on the market has this concept. However, this concept can often be mitigated in Flutter due to the use of context. +If you need context to find an InheritedWidget, you need it in the view, or pass the context by parameter. I particularly find this solution very ugly, and to work in teams we will always have a dependence on View's business logic. Getx is unorthodox with the standard approach, and while it does not completely ban the use of StatefulWidgets, InitState, etc., it always has a similar approach that can be cleaner. Controllers have life cycles, and when you need to make an APIREST request for example, you don't depend on anything in the view. You can use onInit to initiate the http call, and when the data arrives, the variables will be populated. As GetX is fully reactive (really, and works under streams), once the items are filled, all widgets that use that variable will be automatically updated in the view. This allows people with UI expertise to work only with widgets, and not have to send anything to business logic other than user events (like clicking a button), while people working with business logic will be free to create and test the business logic separately. + +This library will always be updated and implementing new features. Feel free to offer PRs and contribute to them. + +# Community + +## Community channels + +GetX has a highly active and helpful community. If you have questions, or would like any assistance regarding the use of this framework, please join our community channels, your question will be answered more quickly, and it will be the most suitable place. This repository is exclusive for opening issues, and requesting resources, but feel free to be part of GetX Community. + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## How to contribute + +_Want to contribute to the project? We will be proud to highlight you as one of our collaborators. Here are some points where you can contribute and make Get (and Flutter) even better._ + +- Helping to translate the readme into other languages. +- Adding documentation to the readme (a lot of Get's functions haven't been documented yet). +- Write articles or make videos teaching how to use Get (they will be inserted in the Readme and in the future in our Wiki). +- Offering PRs for code/tests. +- Including new functions. + +Any contribution is welcome! + +## Articles and videos + +- [Flutter Getx EcoSystem package for arabic people](https://www.youtube.com/playlist?list=PLV1fXIAyjeuZ6M8m56zajMUwu4uE3-SL0) - Tutorial by [Pesa Coder](https://github.com/UsamaElgendy). +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. +- [A minimal example on dartpad](https://dartpad.dev/2b3d0d6f9d4e312c5fdbefc414c1727e?) - by [Roi Peker](https://github.com/roipeker) + +
diff --git a/packages/get/README-es.md b/packages/get/README-es.md new file mode 100644 index 0000000..2cea241 --- /dev/null +++ b/packages/get/README-es.md @@ -0,0 +1,578 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +*Idiomas: Español (este archivo), [Vietnamita](README-vi.md), [Indonesio](README.id-ID.md), [Urdu](README.ur-PK.md), [Lengua china](README.zh-cn.md), [Inglés](README.md), [Portugués de Brasil](README.pt-br.md), [Ruso](README.ru.md), [Polaco](README.pl.md), [Coreano](README.ko-kr.md), [Francés](README-fr.md).* + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + + Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +

Lamentamos la inconsistencia en la traducción. El paquete GetX se actualiza con bastante frecuencia y es posible que las traducciones a documentos no sean tan rápidas. Entonces, para que esta documentación aún tenga todo el contenido, dejaré aquí todos los textos nuevos sin traducir (considero que es mejor tener los documentos en inglés que no tenerlos), por lo que si alguien quiere traducir, sería de gran ayuda 😁

+ +- [Sobre GetX](#sobre-getx) +- [Instalación](#instalación) +- [Proyecto contador con GetX](#proyecto-contador-con-getx) +- [Los tres pilares](#los-tres-pilares) + - [Gestión del Estado](#gestión-del-estado) + - [Reactivo STATE_MANAGER](#reactivo-state_manager) + - [Más detalles sobre la gestión del estado.](#más-detalles-sobre-la-gestión-del-estado) + - [Explicación en video sobre state management](#explicación-en-video-sobre-state-management) + - [Gestión de Rutas](#gestión-de-rutas) + - [Más detalles sobre la gestión de rutas.](#más-detalles-sobre-la-gestión-de-rutas) + - [Explicación del video](#explicación-del-video) + - [Gestión de dependencias](#gestión-de-dependencias) + - [Más detalles sobre la gestión de dependencias.](#más-detalles-sobre-la-gestión-de-dependencias) +- [Utilidades](#utilidades) + - [Cambiar de tema](#cambiar-de-tema) + - [Otras API avanzadas y configuraciones manuales](#otras-api-avanzadas-y-configuraciones-manuales) + - [Configuraciones globales opcionales](#configuraciones-globales-opcionales) + - [Video explanation of Other GetX Features](#video-explanation-of-other-getx-features) +- [Cambios importantes desde 2.0](#cambios-importantes-desde-20) +- [¿Por qué Getx?](#por-qué-getx) +- [Comunidad](#comunidad) + - [Canales de la comunidad](#canales-de-la-comunidad) + - [Cómo contribuir](#cómo-contribuir) + - [Artículos y vídeos](#artículos-y-vídeos-inglés) + +# Sobre GetX + +- GetX es una solución extra ligera y potente para Flutter. Combina gestión de estádo de alto rendimiento, inyección de dependencia inteligente y gestión de rutas de forma rápida y práctica. + +- GetX tiene 3 principios básicos, esto significa que esta es la prioridad para todos los recursos de la biblioteca. + - **RENDIMIENTO:** GetX se centra en el rendimiento y el consumo mínimo de recursos. Los puntos de referencia casi siempre no son importantes en el mundo real, pero si lo desea, aquí hay un indicador de consumo.([benchmarks](https://github.com/jonataslaw/benchmarks)), donde GetX lo hace mejor que otros enfoques de gestión estatal, por ejemplo. La diferencia no es grande, pero muestra nuestra preocupación por no desperdiciar sus recursos. + - **PRODUCTIVIDAD:** GetX utiliza una sintaxis fácil y agradable. + - **ORGANIZACIÓN:** GetX permite el desacoplamiento total de la vista de la lógica de negocio. + +* GetX ahorrará horas de desarrollo y extraerá el máximo rendimiento que su aplicación puede ofrecer, siendo fácil para los principiantes y precisa para los expertos. Navega sin contexto, abre diálogos, snackbars o bottomsheets desde cualquier lugar de tu código, gestiona estados e inyecta dependencias de forma fácil y práctica. Get es seguro, estable, actualizado y ofrece una amplia gama de API que no están presentes en el marco predeterminado. + +- GetX no es bloated. Tiene una multitud de características que le permiten comenzar a programar sin preocuparse por nada, pero cada una de estas características se encuentran en contenedores separados y solo se inician después de su uso. Si solo usa State Management, solo se compilará State Management. Si solo usa rutas, no se compilará nada de la administración estatal. Puede compilar el repositorio de referencia y verá que al usar solo la administración de estado de Get, la aplicación compilada con Get se ha vuelto más pequeña que todas las demás aplicaciones que solo tienen la administración de estado de otros paquetes, porque nada que no se use se compilará en su código, y cada solución GetX fue diseñada para ser muy liviana. El mérito aquí también proviene del movimiento del árbol de Flutter, que es increíble y logra eliminar los recursos no utilizados como ningún otro marco lo hace. + +**GetX hace que su desarrollo sea productivo, pero ¿quiere hacerlo aún más productivo? [Agregue la extensión a su VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets)** + +# Instalación + +Añada la librería Get en tu archivo pubspec.yaml: + +```yaml +dependencies: + get: +``` + +Importe Get en los archivos en los que se utilizará: + +```dart +import 'package:get/get.dart'; +``` + +# Proyecto Contador con GetX + +Vea una explicación más detallada de la administración del estado [aquí](./documentation/es_ES/state_management.md). Allí verá más ejemplos y también la diferencia entre el Gestión del Estado simple y el Gestión del Estado reactivo + +El proyecto "contador" creado por defecto en un nuevo proyecto en Flutter tiene más de 100 líneas (con comentarios). Para mostrar el poder de GetX, demostraré cómo hacer un "contador" cambiando el estado con cada clic, cambiando de página y compartiendo el estado entre pantallas, todo de manera organizada, separando la vista de la lógica de negocio, SOLO 26 LÍNEAS DE CÓDIGO INCLUIDOS COMENTARIOS. + +- Paso 1: Agregue "Get" antes de su materialApp, convirtiéndolo en GetMaterialApp + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +**Nota**: esto no modifica el MaterialApp del Flutter, GetMaterialApp no es una MaterialApp modificado, es solo un Widget preconfigurado que tiene como child un MaterialApp por defecto. Puede configurar esto manualmente, pero definitivamente no es necesario. GetMaterialApp creará rutas, las inyectará, inyectará traducciones, inyectará todo lo que necesita para la navegación de rutas. Si usa Get solo para la gestión de estado o dependencias, no es necesario usar GetMaterialApp. GetMaterialApp es necesario para rutas, snackbars, internacionalización, bottomSheets, diálogos y APIs de alto nivel relacionadas con rutas y ausencia de contexto. + +**Nota²:** Este paso solo es necesario si va a usar route management (`Get.to()`, `Get.back()` y así). Si no lo va a usar, no es necesario que realice el paso 1 + +- Paso 2: Cree su clase con la lógica de negocio colocando todas las variables, métodos y controladores dentro de ella. Puede hacer que cualquier variable sea observable usando un simple ".obs". + +```dart +class Controller extends GetxController { + var count = 0.obs; + increment() => count.value++; +} +``` + +- Paso 3: Cree su vista, use StatelessWidget y ahorre algo de RAM, con GetX ya no necesitará usar StatefulWidget. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Cree una instancia de su clase usando Get.put() para que esté disponible para todas las rutas "secundarias" allí. + final Controller c = Get.put(Controller()); + + return Scaffold( + // Utilice Obx(()=> para actualizar Text() siempre que se cambie el recuento. + appBar: AppBar(title: Obx(() => Text("Clicks: " + c.count.string))), + + // Reemplace el Navigator.push de 8 líneas por un simple Get.to(). No necesitas contexto + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // Puede pedirle a Get que busque un controlador que está siendo utilizado por otra página y le redirija a él. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Acceder a la variable de recuento actualizada + return Scaffold(body: Center(child: Text(c.count.string))); + } +} + +``` + +Resultado: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +Este es un proyecto simple pero ya deja en claro cuán poderoso es GetX. A medida que su proyecto crezca, esta diferencia se volverá más significativa. GetX fue diseñado para trabajar con equipos, pero también simplifica el trabajo de un desarrollador individual. Mejore sus plazos, entregue todo a tiempo, sin perder rendimiento. GetX no es para todos, pero si te identificaste con esa frase, ¡GET es para ti! + +# Los tres pilares + +## Gestión del Estado + +Actualmente hay varios State Managers para Flutter. Sin embargo, con la mayoría de ellos implica utilizar ChangeNotifier para actualizar widgets y este es un enfoque malo y muy malo para el rendimiento de aplicaciones medianas o grandes. Puede verificar en la documentación oficial de Flutter que [ChangeNotifier debe usarse con 1 o un máximo de 2 listeners](https://api.Flutter.dev/Flutter/foundation/ChangeNotifier-class.html), por lo que es prácticamente inutilizable para cualquier aplicación mediana o grande. + +GetX no es mejor ni peor que cualquier otro gestor de estado, pero debe analizar estos puntos, así como los puntos que se mencionan a continuación, para elegir entre usar GetX en forma pura (vanilla) o usarlo junto con otro gestor de estado. + +Definitivamente, GetX no es enemigo de ningún otro gestor de estado, porque GetX es más bien un microframework, no solo un gestor de estado, y se puede usar solo o en combinación con ellos. + +### Reactivo STATE_MANAGER + +La programación reactiva puede alienar a muchas personas porque se dice que es complicada. GetX convierte la programación reactiva en algo tan simple que puede ser aprendido y utilizado por aquellos que comenzaron en ese mismo momento en Flutter. No, no necesitará crear StreamControllers. Tampoco necesitará crear un StreamBuilder para cada variable. No necesitará crear una clase para cada estado. No necesitará crear un get para un valor inicial. La programación reactiva con GetX es tan fácil como usar setState (¡o incluso más fácil!). + +Imaginemos que tiene una variable "name" y desea que cada vez que la modifique, todos los widgets que la usan cambien automáticamente. + +Ej. esta es tu variable "name": + +```dart +var name = 'Jonatas Borges'; +``` + +Para que sea observable, solo necesita agregar ".obs" al final: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +¿StreamBuilder? ¿initialValue? ¿builder? No, solo necesitas jugar con esta variable dentro de un widget Obx. + +```dart +Obx(() => Text (controller.name)); +``` + +### Más detalles sobre la gestión del estado. + +**Vea una explicación más detallada de la administración del estado [aquí](./documentation/es_ES/state_management.md). Allí verá más ejemplos y también la diferencia entre el Gestión del Estado simple y el Gestión del Estado reactivo** + +### Explicación en video sobre state management + +Darwin Morocho hizo una increíble serie de videos sobre state management! Link: [Complete GetX State Management](https://www.youtube.com/watch?v=PTjj0DFK8BA&list=PLV0nOzdUS5XtParoZLgKoVwNSK9zROwuO) + +Obtendrá una buena idea de la potencia de GetX. + +## Gestión de Rutas + +Para navegar a una nueva pantalla: + +```dart +Get.to(NextScreen()); +``` + +Para cerrar snackbars, dialogs, bottomsheets o cualquier cosa que normalmente cierre con Navigator.pop(contexto); + +```dart +Get.back(); +``` + +Para ir a la siguiente pantalla, sin opción a volver (util por ejemplo en SplashScreens, LoginScreen, etc.) + +```dart +Get.off(NextScreen()); +``` + +Para ir a la siguiente pantalla y cancelar todas las rutas anteriores (útil en carritos de compras, encuestas y exámenes) + +```dart +Get.offAll(NextScreen()); +``` + +Para navegar a la siguiente ruta y recibir o actualizar datos tan pronto como se regrese de ella: + +```dart +var data = await Get.to(Payment()); +``` + +### Más detalles sobre la gestión de rutas. + +**Vea una explicación más detallada de la Gestión de Rutas [aquí](./documentation/es_ES/route_management.md).** + +### Explicación del video + +Amateur Coder hizo un excelente video que cubre route management con Get! aquí esta el link: [Complete Getx Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) + +## Gestión de dependencias + +- Nota: si está utilizando el gestor de estado de GetX, no tiene que preocuparse por esto, solo lea para obtener información, pero preste más atención a la API de bindings, que hará todo esto automáticamente por usted. + +¿Ya estás utilizando GetX y quieres que tu proyecto sea lo más ágil posible? GetX tiene un gestor de dependencias simple y poderoso que le permite recuperar la misma clase que su BLoC o Controller con solo una líneas de código, sin contexto de Provider, sin inheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); +``` + +En lugar de crear una instancia de su clase dentro de la clase que está utilizando, la está creando dentro de la instancia GetX, que la hará disponible en toda su aplicación. Entonces puede usar su Controller (o BLoC) normalmente. + +```dart +controller.fetchApi(); +``` + +Imagine que ha navegado a través de numerosas rutas y necesita datos que quedaron en su controlador, necesitaría un gestor de estado combinado con Provider o Get_it, ¿correcto? No con GetX. Solo necesita pedirle a GetX que "encuentre" su controlador, no necesita dependencias adicionales: + +```dart +Controller controller = Get.find(); +//Sí, parece que es magia, Get encontrará su controlador y se lo entregará. Puede tener 1 millón de controladores instanciados, Get siempre le dará el controlador correcto. +``` + +Y luego podrá recuperar los datos de su controlador que se obtuvieron allí: + +```dart +Text(controller.textFromApi); +``` + +¿Buscando lazy loading? Puede declarar todos sus controladores, y se llamará solo cuando alguien lo necesite. Puedes hacer esto con: + +```dart +Get.lazyPut(()=> ApiMock()); +/// ApiMock solo se llamará cuando alguien use Get.find por primera vez +``` + +### Más detalles sobre la gestión de dependencias. + +**Vea una explicación más detallada de la Gestión de dependencias [aquí](./documentation/es_ES/dependency_management.md).** + +# Utilidades + +## Cambiar de tema + +No utilice ningún widget de nivel superior que GetMaterialApp para actualizarlo. Esto puede activar claves duplicadas. Mucha gente está acostumbrada al enfoque prehistórico de crear un widget "ThemeProvider" solo para cambiar el tema de su aplicación, y esto definitivamente NO es necesario con GetX. + +Puede crear su tema personalizado y simplemente agregarlo dentro de Get.changeTheme sin ningún boilerplate para eso: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +Si desea crear algo así como un botón que cambia el tema con onTap, puede combinar dos APIs GetX para eso, la API que verifica si se está utilizando el tema oscuro y la API de cambio de tema, simplemente puede poner esto dentro de un onPressed: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +Cuando el modo oscuro está activado, cambiará al tema claro, y cuando el tema claro esté activado, cambiará a oscuro. + +Si quieres saber en profundidad cómo cambiar el tema, puedes seguir este tutorial en Medium que incluso enseña la persistencia del tema usando GetX: + +- [Temas dinámicos en 3 líneas usando GetX](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial de [Rod Brown](https://github.com/RodBr). + +## Otras API avanzadas y configuraciones manuales + +GetMaterialApp configura todo para usted, pero si desea configurar GetX manualmente utilizando APIs avanzadas. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +También podrá usar su propio Middleware dentro de GetObserver, esto no influirá en nada. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver(MiddleWare.observer)], // Here +); +``` + +```dart +// dar los argumentos actuales de currentScreen +Get.arguments + +// dar el nombre de la ruta anterior +Get.previousRoute + +// dar la ruta sin procesar para acceder, por ejemplo, rawRoute.isFirst() +Get.rawRoute + +// dar acceso a Routing API desde GetObserver +Get.routing + +// comprobar si la cafetería está abierta +Get.isSnackbarOpen + +// comprobar si el diálogo está abierto +Get.isDialogOpen + +// comprobar si bottomsheet está abierto +Get.isBottomSheetOpen + +// eliminar una ruta. +Get.removeRoute() + +// volver repetidamente hasta que predicate devuelva verdadero. +Get.until() + +//ir a la siguiente ruta y eliminar todas las rutas anteriores hasta que predicate devuelva verdadero. +Get.offUntil() + +// ir a la siguiente ruta con nombre y eliminar todas las rutas anteriores hasta que predicate devuelve verdadero. +Get.offNamedUntil() + +//Verifique en qué plataforma se ejecuta la aplicación +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isWeb + +// Equivalente al método: MediaQuery.of(context).size.height, pero son inmutables. +Get.height +Get.width + +// Da el contexto de la pantalla en primer plano en cualquier parte de su código. +Get.context + +// Da el contexto de la barra de bocadillos / diálogo / hoja inferior en primer plano en cualquier parte de su código. +Get.contextOverlay + +// Note: los siguientes métodos son extensiones de context. Desde que tu +// tiene acceso al contexto en cualquier lugar de su interfaz de usuario, puede usarlo en cualquier lugar del código de la interfaz de usuario + +// Si necesita un cambiable height/width (como las ventanas del navegador que se pueden escalar) necesitará usar context. +context.width +context.height + + + +// le da el poder de definir la mitad de la pantalla ahora, un tercio y así sucesivamente. +// Útil para aplicaciones receptivas. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// Similar a MediaQuery.of(context).size +context.mediaQuerySize() + +/// similar a MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// similar a MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// similar a MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// similar a MediaQuery.of(context).orientation; +context.orientation() + +/// comprobar si el dispositivo esta en landscape mode +context.isLandscape() + +/// comprobar si el dispositivo esta en portrait mode +context.isPortrait() + +/// similar a MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// similar a MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// obtener el lado más corto de la pantalla +context.mediaQueryShortestSide() + +/// Verdadero si el ancho es mayor que 800 +context.showNavbar() + +/// Verdadero si el lado más corto es menor que 600p +context.isPhone() + +/// Verdadero si el lado más corto es más grande que 600p +context.isSmallTablet() + +/// Verdadero si el lado más corto es mayor que 720p +context.isLargeTablet() + +/// Verdadero si el dispositivo actual es una tableta +context.isTablet() +``` + +### Configuraciones globales opcionales + +Puede crear configuraciones globales para GetX. Simplemente agregue Get.config a su código antes de insertar cualquier ruta o hágalo directamente en su GetMaterialApp + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +Opcionalmente, puede redirigir todos los mensajes de registro de Get. Si desea utilizar su propio paquete de registro favorito y desea capturar los registros allí. + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // pase el mensaje a su paquete de registro favorito aquí + //Nota: incluso si los mensajes de registro están desactivados + // con el comando "enableLog: false", los mensajes seguirán pasando por aquí + // Debe verificar esta configuración manualmente aquí si desea respetarla +} + +``` + +## Video explanation of Other GetX Features + +Amateur Coder hizo un video asombroso sobre utilidades, almacenamiento, enlaces y otras características! Link: [GetX Other Features](https://youtu.be/ttQtlX_Q0eU) + +# Cambios importantes desde 2.0 + +1- Rx types: + +| Antes | Ahora | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController y GetBuilder ahora se han fusionado, ya no necesita memorizar qué controlador desea usar, solo use GetXController, funcionará para gestión de estádo simple y también para reactivo. + +2- Rutas Nombradas + +Antes: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Ahora: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +¿Por qué este cambio? + +A menudo, puede ser necesario decidir qué página se mostrará desde un parámetro o un token de inicio de sesión, el enfoque anterior era inflexible, ya que no permitía esto. + +Insertar la página en una función ha reducido significativamente el consumo de RAM, ya que las rutas no se asignarán en la memoria desde que se inició la aplicación, y también permitió hacer este tipo de enfoque: + +```dart +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# ¿Por qué Getx? + +1- Después de una actualización de Flutter, muchos paquetes suelen romperse. A veces se producen errores de compilación, errores de los que aún no hay respuestas y el desarrollador necesita saber el origen del error, poder rastrear, y solo entonces intentar abrir un issue en el repositorio correspondiente, para finalmente ver su problema resuelto. Getx centraliza los principales recursos para el desarrollo (gestión de estado, dependencia y rutas), lo que le permite agregar un único paquete a su pubspec y comenzar a trabajar. Después de una actualización de Flutter, lo único que debe hacer es actualizar la dependencia Get y ponerse a trabajar. Get también resuelve problemas de compatibilidad. ¿Cuántas veces una versión de un paquete no es compatible con la versión de otro, porque una usa una dependencia en una versión y la otra en otra? Tampoco es una preocupación usando Get, ya que todo estará en el mismo paquete y será totalmente compatible. + +2- Flutter es fácil, Flutter es increíble, pero todavía tiene algo repetitivo que puede ser no deseado para la mayoría de los desarrolladores, como `Navigator.of(context).push (context, builder [...]`. Get simplifica el desarrollo. En lugar de escribir 8 líneas de código para simplemente llamar a una ruta, simplemente puede hacerlo: `Get.to(Home())` y listo, irá a la página siguiente. Algo doloroso de hacer con Flutter actualmente, mientras que con GetX es estúpidamente simple. Gestionar estados en Flutter y dependencias también es algo que genera mucho debate, ya que hay cientos de patrones en el pub. Pero no hay nada tan fácil como agregar un ".obs" al final de su variable, y colocar su widget dentro de un Obx, y eso es todo, todas las actualizaciones de esa variable se actualizarán automáticamente en la pantalla. + +3- Facilidad sin preocuparse por el rendimiento. El rendimiento de Flutter ya es sorprendente, pero imagine que usa un gestor de estado y un localizador para distribuir sus clases de bloc/stores/controllers/ etc. Tendrá que llamar manualmente a la exclusión de esa dependencia cuando no la necesite. Pero, ¿alguna vez pensó en simplemente usar el controlador, y cuando ya no sea necesario, simplemente se elimine de la memoria? Eso es lo que hace GetX. Con SmartManagement, todo lo que no se está utilizando se elimina de la memoria, y no debería tener que preocuparse por nada más que la programación. Se le garantiza el consumo mínimo de recursos, sin siquiera haber creado una lógica para esto. + +4- Desacoplamiento real. Es posible que haya escuchado la idea de "separar la vista de la lógica de negocio". Esta no es una peculiaridad de BLoC, MVC, MVVM, cualquier otro estándar en el mercado tiene este concepto. Sin embargo, a menudo se puede mitigar en Flutter debido al uso del contexto. +Si necesita contexto para encontrar un InheritedWidget, lo necesita en la vista o pasado por parámetro. En particular, encuentro esta solución muy fea, y para trabajar en equipo siempre tendremos una dependencia de la lógica de negocios de la vista. Getx no es ortodoxo con el enfoque estándar, y aunque no prohíbe completamente el uso de StatefulWidgets, InitState, etc., siempre tiene un enfoque similar que puede ser más limpio. Los controladores tienen ciclos de vida, y cuando necesita hacer una solicitud API REST, por ejemplo, no depende de nada en la vista. Puede usar onInit para iniciar la llamada http, y cuando lleguen los datos, se rellenarán las variables. Como GetX es completamente reactivo (realmente, y funciona bajo streams), una vez que se llenan los elementos, todos los widgets que usan esa variable se actualizarán automáticamente en la vista. Esto permite que las personas con experiencia en IU trabajen solo con widgets y no tengan que enviar nada a la lógica de negocios que no sean eventos de usuario (como hacer clic en un botón), mientras que las personas que trabajan con lógica de negocios podrán crearla y probarla por separado. + +Esta librería siempre se actualizará e implementará nuevas características. Siéntase libre de ofrecer PRs y contribuir a ellas. + +# Comunidad + +## Canales de la comunidad + +GetX tiene una comunidad muy activa e implicada. Si tiene dudas, o necesita cualquier tipo de asistencia sobre el uso de este framework, no dude en unirse a nuestr, tu duda será resuelta lo antes posible. Este repositorio es de uso exclusivo para abrir issues, pero siéntase libre de unirse a la Comunidad de GetX. + + +| **Slack (🇬🇧)** | **Discord (🇬🇧 y 🇵🇹)** | **Telegram (🇵🇹)** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + + +# Cómo contribuir + +_¿Quieres contribuir al proyecto? Estaremos orgullosos de destacarte como uno de nuestros colaboradores. Aquí hay algunos puntos en los que puede contribuir y hacer que GetX (y Flutter) sea aún mejor._ + +- Ayudando a traducir el archivo Léame a otros idiomas. + +- Agregar documentación al archivo Léame (ni siquiera la mitad de las funciones de GetX han sido documentadas todavía). + +- Escriba artículos o haga videos que enseñen cómo usar GetX (se insertarán en el archivo Léame y en el futuro en nuestro Wiki). + +- Ofreciendo PRs para código/pruebas. + +- Incluyendo nuevas funciones. + +¡Cualquier contribución es bienvenida! + +## Artículos y vídeos (inglés) + +- [Flutter Getx EcoSystem package for arabic people](https://www.youtube.com/playlist?list=PLV1fXIAyjeuZ6M8m56zajMUwu4uE3-SL0) - Tutorial by [Pesa Coder](https://github.com/UsamaElgendy). +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. +- [A minimal example on dartpad](https://dartpad.dev/2b3d0d6f9d4e312c5fdbefc414c1727e?) - by [Roi Peker](https://github.com/roipeker) diff --git a/packages/get/README-fr.md b/packages/get/README-fr.md new file mode 100644 index 0000000..765fd18 --- /dev/null +++ b/packages/get/README-fr.md @@ -0,0 +1,1134 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +**Langues: Français (Ce fichier), [Anglais](README.md), [Vietnamien](README-vi.md), [Indonésien](README.id-ID.md), [Urdu](README.ur-PK.md), [Chinois](README.zh-cn.md), [Portuguais du Brésil](README.pt-br.md), [Espagnol](README-es.md), [Russe](README.ru.md), [Polonais](README.pl.md), [Koréen](README.ko-kr.md).** + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Achetez moi un cafe + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +- [A Propos de Get](#a-propos-de-get) +- [Installation](#installation) +- [L'application 'Counter' avec GetX](#application-counter-avec-getx) +- [Les trois pilliers](#les-trois-pilliers) + - [Gestion d'état (State management)](#gestion-d-etat) + - [Gestionnaire d'état réactif (Reactive State Manager)](#gestionnaire-d-etat-reactif) + - [Plus de détails sur la gestion d'état](#plus-de-details-sur-la-gestion-d-etat) + - [Gestion de route](#gestion-de-route) + - [Plus de détails sur la gestion de route](#plus-de-details-sur-la-gestion-de-route) + - [Gestion des dépendances](#gestion-des-dependances) + - [Plus de détails sur la gestion des dépendances](#plus-de-details-sur-la-gestion-des-dependances) +- [Utils](#utils) + - [Internationalization](#internationalization) + - [Traductions](#traductions) + - [Utiliser les traductions](#utiliser-les-traductions) + - [Locales](#locales) + - [Changer la locale](#changer-la-locale) + - [Locale du Système](#locale-du-systeme) + - [Changer le Thème](#changer-le-theme) + - [GetConnect](#getconnect) + - [Configuration par défaut](#configuration-par-defaut) + - [Configuration personnalisée](#configuration-personnalisee) + - [Middleware GetPage](#middleware-getpage) + - [Priority](#priority) + - [Redirect](#redirect) + - [onPageCalled](#onpagecalled) + - [OnBindingsStart](#onbindingsstart) + - [OnPageBuildStart](#onpagebuildstart) + - [OnPageBuilt](#onpagebuilt) + - [OnPageDispose](#onpagedispose) + - [Autres APIs](#autres-apis) + - [Paramètres globaux et configurations manuelles facultatifs](#parametres-globaux-et-configurations-manuelles-facultatifs) + - [State Widgets Locaux](#state-widgets-locaux) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [Conseils utiles](#conseils-utiles) + - [GetView](#getview) + - [GetResponsiveView](#getresponsiveview) + - [Guide d'utilisation](#guide-d-utilisation) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [Changements par rapport à 2.0](#changements-par-rapport-a-20) +- [Pourquoi Getx?](#pourquoi-getx) +- [Communité](#communite) + - [Chaînes communautaires](#chaines-communautaires) + - [Comment contribuer](#comment-contribuer) + - [Articles et videos](#articles-et-videos) + +# A Propos de Get + +- GetX est une solution extra-légère et puissante pour Flutter. Il combine une gestion d'état (state management) de haute performance, une injection de dépendances (dependency injection) intelligente et une gestion de route (route management) rapide et pratique. + +- GetX a 3 principes de base. Cela signifie que ces principes sont les priorités pour toutes les ressources de la bibliothèque GetX: **PRODUCTIVITÉ, PERFORMANCE ET ORGANIZATION.** + + - **PERFORMANCE:** GetX se concentre sur la performance et la consommation minimale de ressources. GetX n'utilise ni Streams ni ChangeNotifier. + + - **PRODUCTIVITÉ:** GetX utilise une syntaxe simple et agréable. Peu importe ce que vous voulez faire, il existe toujours un moyen plus simple avec GetX. Cela économisera des heures de développement et fournira les performances maximales que votre application peut offrir. + + En règle générale, le développeur doit s'occuper lui-même de la suppression des contrôleurs de la mémoire. Avec GetX, cela n'est pas nécessaire car les ressources sont, par défaut, supprimées de la mémoire lorsqu'elles ne sont pas utilisées. Si vous souhaitez les conserver en mémoire, vous devez déclarer explicitement "permanent: true" comme paramètre lors de la création de la ressource. De cette façon, en plus de gagner du temps, vous risquez moins d'avoir des ressources inutiles dans la mémoire. L'initialisation des ressources est également 'lazy' par défaut (i.e. se fait seulement lorsque la ressource est nécessaire). + + - **ORGANIZATION:** GetX permet le découplage total de la Vue (View), de la Logique de Présentation (Presentation Logic), de la Business Logic, de l'injection de dépendances (Dependency Injection) et de la Navigation. Vous n'avez pas besoin de contexte pour naviguer entre les routes, vous n'êtes donc pas dépendant de la hiérarchisation des widgets (visualisation) pour cela. Vous n'avez pas besoin de 'context' pour accéder à vos contrôleurs/blocs via un inheritedWidget, vous dissociez donc complètement votre logique de présentation (Vue) et votre Business logic de votre couche de visualisation. Vous n'avez pas besoin d'injecter vos classes Controlleûrs / Modèles / Blocs le long de la hiérarchie de Widgets via `MultiProvider`. Pour cela, GetX utilise sa propre fonction d'injection de dépendances (DI), découplant complètement la DI de sa Vue. + + Avec GetX, vous savez où trouver chaque module de votre application, avec un code propre par défaut. En plus de rendre la maintenance facile, cela rend le partage de modules quelque chose qui jusque-là dans Flutter était impensable, quelque chose de totalement possible. + BLoC était un point de départ pour organiser le code dans Flutter, il sépare la Business logic de la visualisation. GetX en est une évolution naturelle, séparant non seulement la Business logic mais aussi la logique de présentation. L'injection de dépendances et les routes sont également découplées, et la couche de données est séparée du tout. Vous savez où tout se trouve, et tout cela d'une manière plus facile que de construire un 'Hello World''. + GetX est le moyen le plus simple, pratique et évolutif de créer des applications hautes performances avec le SDK Flutter. Il possède un vaste écosystème qui fonctionne parfaitement, c'est facile pour les débutants et précis pour les experts. Il est sécurisé, stable, à jour et offre une vaste gamme d'API intégrées qui ne sont pas présentes dans le SDK Flutter par défaut. + +- GetX possède une multitude de fonctionnalités qui vous permettent de démarrer la programmation sans vous soucier de quoi que ce soit, mais chacune de ces fonctionnalités se trouve dans des conteneurs séparés et ne démarre qu'après utilisation. Si vous n'utilisez que la gestion des états (State Management), seule la gestion des états sera compilée. Si vous n'utilisez que des routes, rien de la gestion d'état ne sera compilé. + +- GetX a un énorme écosystème, une grande communauté, un grand nombre de collaborateurs, et sera maintenu tant que Flutter existera. GetX est également capable de fonctionner avec le même code sur Android, iOS, Web, Mac, Linux, Windows et sur votre serveur. Il est possible de réutiliser entièrement votre code créé sur le frontend et le backend avec Get Server. + **Il est possible d'entièrement réutiliser votre code écrit sur le frontend, pour le backend avec [Get Server](https://github.com/jonataslaw/get_server)**. + +**De plus, l'ensemble du processus de développement peut être complètement automatisé, à la fois sur le serveur et sur le front-end avec [Get CLI](https://github.com/jonataslaw/get_cli)**. + +**De plus, pour augmenter encore votre productivité, nous avons l'[extension pour VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) et l'[extension pour Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)** + +# Installation + +Ajoutez Get à votre fichier pubspec.yaml: + +```yaml +dependencies: + get: +``` + +Importez Get dans les fichiers dans lesquels il doit être utilisé: + +```dart +import 'package:get/get.dart'; +``` + +# Application Counter avec Getx + +Le projet "Counter" créé par défaut sur chaque nouveau projet Flutter comporte plus de 100 lignes (avec commentaires). Pour montrer la puissance de Get, je vais vous montrer comment faire un "compteur" changeant d'état à chaque clic, naviguer entre les pages et partager l'état entre les écrans, le tout de manière organisée, en séparant la Business logic de la Vue, en SEULEMENT 26 LIGNES DE CODE INCLUANT LES COMMENTAIRES. + +- Step 1: + Ajoutez "Get" avant MaterialApp, pour le transformer en GetMaterialApp + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- Note: cela ne modifie pas le MaterialApp de Flutter, GetMaterialApp n'est pas un MaterialApp modifié, il s'agit simplement d'un widget préconfiguré, qui a le MaterialApp par défaut comme enfant (child: ). Vous pouvez le configurer manuellement, mais ce n'est certainement pas nécessaire. GetMaterialApp créera des routes, les injectera, injectera les traductions, injectera tout ce dont vous avez besoin pour la navigation de routes. Si vous utilisez Get uniquement pour la gestion de l'état (State management) ou la gestion des dépendances (DI), il n'est pas nécessaire d'utiliser GetMaterialApp. GetMaterialApp est nécessaire pour les routes, les 'snackbars', l'internationalisation, les 'bottomSheets', les dialogues et les API de haut niveau liés aux routes et à l'absence de 'context'. + +- Note²: Cette étape n'est nécessaire que si vous allez utiliser la gestion de routes (Get.to(), Get.back(), etc). Si vous ne l'utiliserez pas, il n'est pas nécessaire de faire l'étape 1. + +- Step 2: + Créez votre classe de Business logic et placez-y toutes les variables, méthodes et contrôleurs. + Vous pouvez rendre toute variable observable en utilisant un simple ".obs". + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- Step 3: + Créez votre Vue, utilisez StatelessWidget et économisez de la RAM, avec Get, vous n'aurez peut-être plus besoin d'utiliser StatefulWidget. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Instanciez votre classe en utilisant Get.put() pour le rendre disponible pour tous les routes "descendantes". + final Controller c = Get.put(Controller()); + + return Scaffold( + // Utilisez Obx(()=> pour mettre à jour Text() chaque fois que count est changé. + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // Remplacez les 8 lignes Navigator.push par un simple Get.to(). Vous n'avez pas besoin de 'context' + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // Vous pouvez demander à Get de trouver un contrôleur utilisé par une autre page et de vous y rediriger. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Accéder à la variable 'count' qui est mise à jour + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +Résultat: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +C'est un projet simple mais il montre déjà à quel point Get est puissant. Au fur et à mesure que votre projet se développe, cette différence deviendra plus significative. + +Get a été conçu pour fonctionner avec des équipes, mais il simplifie le travail d'un développeur individuel. + +Améliorez vos délais, livrez tout à temps sans perte de performances. Get n'est pas pour tout le monde, mais si vous vous êtes identifié à cette phrase, Get est fait pour vous! + +# Les trois pilliers + +## Gestion d Etat + +Get a deux gestionnaires d'état différents: le gestionnaire d'état simple (nous l'appellerons GetBuilder) et le gestionnaire d'état réactif (GetX / Obx). + +### Gestionnaire d Etat Reactif + +La programmation réactive peut aliéner de nombreuses personnes car on dit qu'elle est compliquée. GetX fait de la programmation réactive quelque chose d'assez simple: + +- Vous n'aurez pas besoin de créer des StreamControllers. +- Vous n'aurez pas besoin de créer un StreamBuilder pour chaque variable +- Vous n'aurez pas besoin de créer une classe pour chaque état. +- Vous n'aurez pas besoin de créer un 'get' pour une valeur initiale. +- Vous n'aurez pas besoin d'utiliser des générateurs de code + +La programmation réactive avec Get est aussi simple que d'utiliser setState. + +Imaginons que vous ayez une variable 'name' et que vous souhaitiez que chaque fois que vous la modifiez, tous les widgets qui l'utilisent soient automatiquement modifiés. + +Voici votre variable: + +```dart +var name = 'Jonatas Borges'; +``` + +Pour la rendre observable, il vous suffit d'ajouter ".obs" à la fin: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +Et dans l'interface utilisateur, lorsque vous souhaitez afficher cette valeur et mettre à jour l'écran chaque fois qu'elle change, faites simplement: + +```dart +Obx(() => Text("${controller.name}")); +``` + +C'est _tout_. Si simple que ca. + +### Plus de details sur la gestion d Etat + +**Lire une explication plus approfondie de la gestion d'état [ici](./documentation/fr_FR/state_management.md). Là-bas, vous verrez plus d'exemples surtout pour la différence entre le gestionnaire d'état simple et le gestionnaire d'état réactif.** + +Vous pourrez vous faire une meilleure idée de la puissance de GetX. + +## Gestion de route + +Si vous envisagez d'utiliser des routes/snackbars/dialogs/bottomsheets sans 'context', GetX est également excellent pour vous, voyez par vous-même: + +Ajoutez "Get" avant votre MaterialApp, en le transformant en GetMaterialApp + +```dart +GetMaterialApp( // Avant: MaterialApp( + home: MyHome(), +) +``` + +Accédez à un nouvel écran: + +```dart + +Get.to(ÉcranSuivant()); +``` + +Accédez au nouvel écran par le nom. Voir plus de détails sur les itinéraires nommés (named routes) [ici](./documentation/fr_FR/route_management.md#navigation-avec-des-itinraires-nomms) + +```dart + +Get.toNamed('/details'); +``` + +Pour fermer des snackbars, dialogs, bottomsheets, ou tout ce que vous auriez normalement fermé avec Navigator.pop(context); + +```dart +Get.back(); +``` + +Pour aller à l'écran suivant avec aucune option pour revenir à l'écran précédent (pour une utilisation dans SplashScreens, écrans de connexion, etc.) + +```dart +Get.off(NextScreen()); +``` + +Pour aller à l'écran suivant et annuler tous les itinéraires précédents (utile dans les paniers d'achat en ligne, les sondages et les tests) + +```dart +Get.offAll(NextScreen()); +``` + +Avez-vous remarqué que vous n'avez eu besoin d'utiliser 'context' pour aucune de ces opérations? C'est l'un des plus grands avantages de l'utilisation de la gestion de route avec Get. Avec cela, vous pouvez appeler toutes ces méthodes à partir de votre classe de contrôleur, sans soucis. + +### Plus de details sur la gestion de route + +**Get fonctionne avec des itinéraires nommés (named routes) et offre également un contrôle plus granulaire de vos routes! Il y a une documentation approfondie [ici](./documentation/fr_FR/route_management.md)** + +## Gestion des dependances + +Get a un gestionnaire de dépendances (dependency manager) simple et puissant qui vous permet de récupérer la même classe que votre Bloc ou Controller avec seulement 1 ligne de code, pas de 'context' Provider, pas d'inheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Au lieu de Controller controller = Controller(); +``` + +- Remarque: Si vous utilisez le gestionnaire d'état de Get, accordez plus d'attention à l'API 'Bindings', qui facilitera la connexion de vos Vues à vos contrôleurs. + +Au lieu d'instancier votre classe dans la classe que vous utilisez, vous l'instanciez dans l'instance Get, ce qui la rendra disponible dans toute votre application. +Vous pouvez donc utiliser votre contrôleur (ou classe Bloc) normalement. + +**Conseil:** La gestion des dépendances est découplée des autres parties du package, donc si, par exemple, votre application utilise déjà un gestionnaire d'état (n'importe lequel, peu importe), vous n'avez pas besoin de tout réécrire, vous pouvez l'utiliser avec l'injection de dépendance de Get sans aucun problème. + +```dart +controller.fetchApi(); +``` + +Imaginez que vous ayez parcouru de nombreuses routes et que vous ayez besoin de données qui ont été laissées dans votre contrôleur, vous auriez besoin d'un gestionnaire d'état combiné avec le 'Provider' ou 'Get_it', n'est-ce pas? Pas avec Get. Il vous suffit de demander à Get de "trouver" votre contrôleur, vous n'avez pas besoin de dépendances supplémentaires: + +```dart +Controller controller = Get.find(); +//Oui, cela ressemble à de la magie. Get trouvera votre contrôleur et vous le livrera. Vous pouvez avoir 1 million de contrôleurs instanciés, Get vous retournera toujours le bon contrôleur. +``` + +Et puis vous pourrez récupérer les données de votre contrôleur obtenu précédemment: + +```dart +Text(controller.textFromApi); +``` + +### Plus de details sur la gestion des dependances + +**Trouvez une explication plus détaillée sur la gestion des dépendances [ici](./documentation/fr_FR/dependency_management.md)** + +# Utils + +## Internationalization + +### Traductions + +Les traductions sont enregistrées sous forme de dictionaire clé-valeur simple. +Pour ajouter des traductions, créez une classe qui 'extend' `Translations`. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### Utiliser les traductions + +Ajouter juste `.tr` à la clé et elle sera traduite selon la valeur actuelle `Get.locale` et de `Get.fallbackLocale`. + +```dart +Text('title'.tr); +``` + +#### Utiliser les traductions avec le singulier et le pluriel + +```dart +var products = []; +Text('cléAuSingulier'.trPlural('cléAuPluriel', products.length, Args)); +``` + +#### Utiliser les traductions avec paramètres + +```dart +import 'package:get/get.dart'; + + +Map> get keys => { + 'en_US': { + 'logged_in': 'logged in as @name with email @email', + }, + 'es_ES': { + 'logged_in': 'iniciado sesión como @name con e-mail @email', + } +}; + +Text('logged_in'.trParams({ + 'name': 'Jhon', + 'email': 'jhon@example.com' + })); +``` + +### Locales + +'Locales' signifie lieux. +Pour definir les traductions, passer les paramètres 'locale' et 'translations' à GetMaterialApp. + +```dart +return GetMaterialApp( + translations: Messages(), // Vos traductions + locale: Locale('en', 'US'), // Les traductions seront faites dans cette 'locale' (langue) + fallbackLocale: Locale('en', 'UK'), // definit le 'language de secours' au cas oú un language invalide est sélectionné. +); +``` + +#### Changer la locale + +Appelez `Get.updateLocale (locale)` pour mettre à jour la locale. Les traductions utilisent alors automatiquement la nouvelle langue. + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### Locale du systeme + +Pour lire les paramètres régionaux ('locales') du système, vous pouvez utiliser `Get.deviceLocale`. + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## Changer le Theme + +Veuillez ne pas utiliser de widget de niveau supérieur à `GetMaterialApp` pour le mettre à jour. Cela peut créer des clés ('keys') en double. Beaucoup de gens sont habitués à l'approche préhistorique de la création d'un widget "ThemeProvider" juste pour changer le thème de votre application, et ce n'est certainement PAS nécessaire avec **GetX ™**. + +Vous pouvez créer votre thème personnalisé et l'ajouter simplement dans `Get.changeTheme` sans aucune préconfiguration pour cela: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +Si vous voulez créer quelque chose comme un bouton qui change le thème dans `onTap`, vous pouvez combiner deux API **GetX ™** pour cela: + +- L'API qui vérifie si le "Thème" sombre est utilisé. +- Et l'API de changement de thème, vous pouvez simplement le mettre dans un 'onPressed': + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +Lorsque 'onPressed' est appelé, si `.darkmode` est activé, il passera au _thème clair_, et lorsque le _thème clair_ est actif, il passera au _thème sombre_. + +## GetConnect + +GetConnect est un moyen facile de communiquer de votre backend à votre frontend avec http ou websockets. + +### Configuration par defaut + +Vous pouvez simplement 'extends' GetConnect et utiliser les méthodes GET / POST / PUT / DELETE / SOCKET pour communiquer avec votre API Rest ou vos websockets. + +```dart +class UserProvider extends GetConnect { + // Get request + Future getUser(int id) => get('http://youapi/users/$id'); + // Post request + Future postUser(Map data) => post('http://youapi/users', body: data); + // Post request with File + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` + +### Configuration personnalisee + +GetConnect est hautement personnalisable. Vous pouvez définir l'URL de base, comme modificateurs de réponse, comme modificateurs de requêtes, définir un authentificateur, et même le nombre de tentatives oú il tentera de s'authentifier, en plus de donner la possibilité de définir un décodeur standard qui transformera toutes vos Requêtes dans vos Modèles sans aucune configuration supplémentaire. + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // Toute 'Request' passera à jsonEncode donc CasesModel.fromJson() + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; + // Il définit baseUrl pour Http et websockets si utilisé sans instance [httpClient] + + // Cela attachera la propriété 'apikey' sur l'en-tête ('header') de toutes les 'request's + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // Même si le serveur envoie des données avec le pays "Brésil", + // cela ne sera jamais affiché aux utilisateurs, car vous supprimez + // ces données de la réponse, même avant que la réponse ne soit délivrée + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazil'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // Définit l'en-tête + request.headers['Authorization'] = "$token"; + return request; + }); + + // L'Autenticator sera appelé 3 fois si HttpStatus est HttpStatus.unauthorized + httpClient.maxAuthRetries = 3; + } + + + @override + Future> getCases(String path) => get(path); +} +``` + +## Middleware GetPage + +GetPage a maintenant une nouvelle propriété qui prend une liste de GetMiddleWare et les exécute dans l'ordre spécifique. + +**Note**: Lorsque GetPage a un Middleware, tous les enfants de cette page auront automatiquement les mêmes middlewares. + +### Priority + +L'ordre des middlewares à exécuter peut être défini par la priorité dans GetMiddleware. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` + +ces middlewares seront exécutés dans cet ordre **-8 => 2 => 4 => 5** + +### Redirect + + Cette fonction sera appelée lors de la recherche de la page de l'itinéraire appelé. Elle reçoit RouteSettings comme résultat vers oú rediriger. Sinon donnez-lui la valeur null et il n'y aura pas de redirection. + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login'); +} +``` + +### onPageCalled + +Cette fonction sera appelée lorsque cette page sera appelée. +Vous pouvez l'utiliser pour changer quelque chose sur la page ou lui donner une nouvelle page. + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +Cette fonction sera appelée juste avant l'initialisation des liaisons ('bidings'). +Ici, vous pouvez modifier les liaisons de cette page. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +Cette fonction sera appelée juste après l'initialisation des liaisons ('bidings'). +Ici, vous pouvez faire quelque chose après avoir créé les liaisons et avant de créer le widget de page. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('les liaisons sont prêtes'); + return page; +} +``` + +### OnPageBuilt + +Cette fonction sera appelée juste après l'appel de la fonction GetPage.page et vous donnera le résultat de la fonction et prendra le widget qui sera affiché. + +### OnPageDispose + +Cette fonction sera appelée juste après avoir disposé tous les objets associés (contrôleurs, vues, ...) à la page. + +## Autres APIs + +```dart +// donne les arguments actuels de currentScreen +Get.arguments + +// donne le nom de l'itinéraire précédent +Get.previousRoute + +// donne la route brute d'accès par exemple, rawRoute.isFirst() +Get.rawRoute + +// donne accès à l'API de routing de GetObserver +Get.routing + +// vérifier si le snackbar est ouvert +Get.isSnackbarOpen + +// vérifier si la boîte de dialogue est ouverte +Get.isDialogOpen + +// vérifie si la bottomSheet est ouverte +Get.isBottomSheetOpen + +// supprime une route. +Get.removeRoute() + +// retourne à plusieurs reprises jusqu'à ce que le prédicat retourne 'true'. +Get.until() + +// passe à la route suivante et supprime toutes les routes précédentes jusqu'à ce que le prédicat retourne 'true'. +Get.offUntil() + +// passe à la route nommée suivante et supprime toutes les routes précédentes jusqu'à ce que le prédicat retourne 'true'. +Get.offNamedUntil() + +// Vérifie sur quelle plate-forme l'application s'exécute +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +// Vérifie le type d'appareil +GetPlatform.isMobile +GetPlatform.isDesktop +// Toutes les plates-formes sont prises en charge indépendamment, dans le Web! +// Vous pouvez dire si vous utilisez un navigateur +// sur Windows, iOS, OSX, Android, etc. +GetPlatform.isWeb + + +// Équivaut à: MediaQuery.of(context).size.height, +// mais immuable. +Get.height +Get.width + +// Donne le 'context' actuel de 'Navigator'. +Get.context + +// Donne le contexte du snackbar / dialogue / bottomsheet au premier plan, n'importe où dans votre code. +Get.contextOverlay + +// Remarque: les méthodes suivantes sont des extensions sur le 'context'. Puisque vous +// avez accès au contexte à n'importe quel endroit de votre interface utilisateur, vous pouvez l'utiliser n'importe où dans le code de l'interface utilisateur + +// Si vous avez besoin d'une hauteur / largeur variable (comme les fenêtres de bureau ou de navigateur qui peuvent être mises à l'échelle), vous devrez utiliser le contexte. +context.width +context.height + +// Vous donne le pouvoir de définir la moitié de l'écran, un tiers de celui-ci et ainsi de suite. +// Utile pour les applications responsives. +// paramètre dividedBy (double) optionnel - par défaut: 1 +// paramètre reducedBy (double) facultatif - par défaut: 0 +context.heightTransformer () +context.widthTransformer () + +/// Similaire à MediaQuery.of(context).size +context.mediaQuerySize() + +/// Similaire à MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// Similaire à MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// Similaire à MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// Similaire à MediaQuery.of(context).orientation; +context.orientation() + +/// Vérifie si l'appareil est en mode paysage +context.isLandscape() + +/// Vérifie si l'appareil est en mode portrait +context.isPortrait() + +/// Similaire à MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// Similaire à MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// Obtenir le côté le plus court de l'écran +context.mediaQueryShortestSide() + +/// Vrai si la largeur est supérieure à 800p +context.showNavbar() + +/// Vrai si le côté le plus court est inférieur à 600p +context.isPhone() + +/// Vrai si le côté le plus court est plus grand que 600p +context.isSmallTablet() + +/// Vrai si le côté le plus court est plus grand que 720p +context.isLargeTablet() + +/// Vrai si l'appareil actuel est une tablette +context.isTablet() + +/// Renvoie une valeur en fonction de la taille de l'écran +/// peut donner une valeur pour: +/// watch: si le côté le plus court est inférieur à 300 +/// mobile: si le côté le plus court est inférieur à 600 +/// tablette: si le côté le plus court est inférieur à 1200 +/// bureautique: si la largeur est supérieure à 1200 +context.responsiveValue() +``` + +### Parametres globaux et configurations manuelles facultatifs + +GetMaterialApp configure tout pour vous, mais si vous souhaitez configurer Get manuellement: + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +Vous pourrez également utiliser votre propre middleware dans `GetObserver`, cela n'influencera rien. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Ici + ], +); +``` + +Vous pouvez créer _Global Settings_ pour `Get`. Ajoutez simplement `Get.config` à votre code avant de changer de route. +Ou faites-le directement dans votre `GetMaterialApp` + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +Vous pouvez éventuellement rediriger tous les messages de journalisation (logging) de `Get`. +Si vous souhaitez utiliser votre propre package de journalisation préféré, +et souhaitez capturer les logs là-bas: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // transmettez le message à votre package de journalisation préféré ici + // veuillez noter que même si enableLog: false, les messages du journal seront poussés dans ce 'callback' + // vérifiez le 'flag' si vous le souhaitez via GetConfig.isLogEnable +} + +``` + +### State Widgets Locaux + +Ces Widgets vous permettent de gérer une valeur unique, et de garder l'état éphémère et localement. +Nous avons des saveurs pour réactif et simple. +Par exemple, vous pouvez les utiliser pour basculer obscureText dans un `TextField`, peut-être créer un +Panneau extensible, ou peut-être modifier l'index actuel dans `BottomNavigationBar` tout en modifiant le contenu +de 'body' dans un `Scaffold`. + +#### ValueBuilder + +Une simplification de `StatefulWidget` qui fonctionne avec un callback `.setState` qui prend la valeur mise à jour. + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // même signature! vous pouvez utiliser (newValue) => updateFn (newValue) + ), + // si vous devez appeler quelque chose en dehors de la méthode du builder. + onUpdate: (value) => print("Valeur mise à jour: $value"), + onDispose: () => print("Widget détruit"), +), +``` + +#### ObxValue + +Similaire à [`ValueBuilder`](#valuebuilder), mais c'est la version Reactive, vous passez une instance Rx (rappelez-vous les .obs magiques?) et il +se met à jour automatiquement ... n'est-ce pas génial? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx a une fonction _callable_! Vous pouvez utiliser (flag) => data.value = flag, + ), + false.obs, +), +``` + +## Conseils utiles + +`.obs`ervables (également appelés types _Rx_) ont une grande variété de méthodes et d'opérateurs internes. + +> Il est très courant de croire qu'une propriété avec `.obs` ** EST ** la valeur réelle ... mais ne vous y trompez pas! +> Nous évitons la déclaration Type de la variable, car le compilateur de Dart est assez intelligent, et le code +> semble plus propre, mais: + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" est de Type ${message.runtimeType}'); +``` + +Bien que `message` _prints_ la vraie valeur du String, le Type est **RxString**! + +Donc, vous ne pouvez pas faire `message.substring( 0, 4 )`. +Vous devez utiliser la vraie `valeur` dans _observable_: +La façon "la plus utilisée" est `.value`, mais, que vous pouviez aussi... + +```dart +final name = 'GetX'.obs; +// "met à jour" le flux, uniquement si la valeur est différente de la valeur actuelle. +name.value = 'Hey'; + +// Toutes les propriétés Rx sont "appelables" et renvoie la nouvelle valeur. +// mais cette approche n'accepte pas `null`, l'interface utilisateur ne sera pas reconstruite. +name('Hello'); + +// est comme un getter, affiche `Hello`. +name() ; + +/// nombres: + +final count = 0.obs; + +// Vous pouvez utiliser toutes les opérations non mutables à partir de num primitives! +count + 1; + +// Fais attention! ceci n'est valable que si `count` n'est pas final, mais var +count += 1; + +// Vous pouvez également comparer avec des valeurs: +count > 2; + +/// booleans: + +final flag = false.obs; + +// bascule la valeur entre true / false +flag.toggle(); + + +/// tous les types: + +// Définit la `valeur` sur null. +flag.nil(); + +// Toutes les opérations toString (), toJson () sont transmises à la `valeur` +print( count ); // appelle `toString ()` à l'intérieur de RxInt + +final abc = [0,1,2].obs; +// Convertit la valeur en un Array json, affiche RxList +// Json est pris en charge par tous les types Rx! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList et RxSet sont des types Rx spéciaux, qui étendent leurs types natifs. +// mais vous pouvez travailler avec une liste comme une liste régulière, bien qu'elle soit réactive! +abc.add(12); // pousse 12 dans la liste et MET À JOUR le flux. +abc[3]; // comme Lists, lit l'index 3. + + +// l'égalité fonctionne avec le Rx et la valeur, mais hashCode est toujours pris à partir de la valeur +final number = 12.obs; +print( number == 12 ); // retource > true + +/// Modèles Rx personnalisés: + +// toJson (), toString () sont différés à l'enfant, vous pouvez donc implémenter 'override' sur eux, et print() l'observable directement. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age ans'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user` est" réactif ", mais les propriétés à l'intérieur NE SONT PAS! +// Donc, si nous changeons une variable à l'intérieur ... +user.value.name = 'Roi'; +// Le widget ne se reconstruira pas !, +// `Rx` n'a aucun indice lorsque vous changez quelque chose à l'intérieur de l'utilisateur. +// Donc, pour les classes personnalisées, nous devons "notifier" manuellement le changement. +user.refresh(); + +// ou utiliser `update()`! +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` + +#### GetView + +J'adore ce widget. Si simple, mais si utile! + +C'est un widget `const Stateless` qui a un getter` controller` pour un `Controller` enregistré, c'est tout. + +```dart + class AwesomeController extends GetxController { + final String title = 'My Awesome View'; + } + + // N'oubliez PAS de passer le `Type` que vous avez utilisé pour enregistrer votre contrôleur! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // appelez `controller.quelqueChose` + ); + } + } +``` + +#### GetResponsiveView + +Étendez ce widget pour créer une vue réactive. +ce widget contient la propriété `screen` qui a toutes les +informations sur la taille et le type de l'écran. + +##### Guide d utilisation + +Vous avez deux options pour le créer: + +- avec la méthode `builder` vous renvoyez le widget à construire. +- avec les méthodes `desktop`,` tablet`, `phone`,` watch`. la méthode spécifique sera exécutée lorsque le type d'écran correspond à la méthode. + Lorsque l'écran est [ScreenType.Tablet], la méthode `tablet` sera exécutée et ainsi de suite. + **Note:** Si vous utilisez cette méthode, veuillez définir la propriété `alwaysUseBuilder` à `false` + +Avec la propriété `settings`, vous pouvez définir la limite de largeur pour les types d'écran. + +![exemple](https://github.com/SchabanBo/get_page_example/blob/master/docs/Example.gif?raw=true) +Code pour cet écran +[code](https://github.com/SchabanBo/get_page_example/blob/master/lib/pages/responsive_example/responsive_view.dart) + +#### GetWidget + +La plupart des gens n'ont aucune idée de ce widget ou confondent totalement son utilisation. +Le cas d'utilisation est très rare, mais très spécifique: il `met en cache` un contrôleur. +En raison du _cache_, ne peut pas être un `const Stateless`. + +> Alors, quand avez-vous besoin de "mettre en cache" un contrôleur? + +Si vous utilisez, une autre fonctionnalité "pas si courante" de **GetX**: `Get.create()`. + +`Get.create(()=>Controller())` générera un nouveau `Controller` chaque fois que vous appelez +`Get.find()`. + +C'est là que `GetWidget` brille ... comme vous pouvez l'utiliser, par exemple, +pour conserver une liste de s. Donc, si le widget est "reconstruit", il conservera la même instance de contrôleur. + +#### GetxService + +Cette classe est comme un `GetxController`, elle partage le même cycle de vie ( `onInit()`, `onReady()`, `onClose()`), mais n'a pas de "logique" en elle. +Il notifie simplement le **GetX** Dependency Injection system, que cette sous-classe +**ne peut pas** être supprimé de la mémoire. + +Donc est très utile pour garder vos "Services" toujours à portée de main et actifs avec `Get.find()`. Comme: +`ServiceAPI`, `ServiceDeSauvegarde`, `ServiceDeCaching`. + +```dart +Future main() async { + await initServices(); /// Attend l'initialisation des services. + runApp(SomeApp()); +} + +/// Est une démarche intelligente pour que vos services s'initialisent avant d'exécuter l'application Flutter. +/// car vous pouvez contrôler le flux d'exécution (peut-être devez-vous charger une configuration de thème, +/// apiKey, langue définie par l'utilisateur ... donc chargez SettingService avant d'exécuter ApiService. +/// donc GetMaterialApp () n'a pas besoin de se reconstruire et prend les valeurs directement. +void initServices() async { + print('starting services ...'); + /// C'est ici que vous mettez get_storage, hive, shared_pref initialization. + /// ou les connexions moor, ou autres choses async. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('Tous les services ont démarré...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType retarde de 2 sec'); + await 2.delay(); + print('$runtimeType prêts!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print("$runtimeType retarde d'1 sec"); + await 1.delay(); + print('$runtimeType prêts!'); + } +} + +``` + +La seule façon de supprimer réellement un `GetxService`, est d'utiliser`Get.reset ()`qui est comme un +"Hot Reboot" de votre application. N'oubliez donc pas que si vous avez besoin d'une persistance absolue d'une instance de classe +durée de vie de votre application, utilisez `GetxService`. + +# Changements par rapport a 2.0 + +1- Types Rx: + +| Avant | Après | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController et GetBuilder ont maintenant fusionné, vous n'avez plus besoin de mémoriser le contrôleur que vous souhaitez utiliser, utilisez simplement GetxController, cela fonctionnera pour une gestion simple de l'état et également pour la réactivité. + +2- NamedRoutes + +Avant: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Maintenant: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +Pourquoi ce changement? +Souvent, il peut être nécessaire de décider quelle page sera affichée à partir d'un paramètre, ou d'un 'login token', l'approche précédente était inflexible, car elle ne le permettait pas. +L'insertion de la page dans une fonction a considérablement réduit la consommation de RAM, puisque les routes ne seront pas allouées en mémoire depuis le démarrage de l'application, et cela a également permis de faire ce type d'approche: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# Pourquoi Getx? + +1- Plusieurs fois après une mise à jour de Flutter, plusieurs de vos packages seront invalides. Parfois, des erreurs de compilation se produisent, des erreurs apparaissent souvent pour lesquelles il n'y a toujours pas de réponses, et le développeur doit savoir d'où vient l'erreur, suivre l'erreur, puis seulement essayer d'ouvrir un problème dans le référentiel correspondant et voir son problème résolu. Get centralise les principales ressources pour le développement (gestion des états, des dépendances et des routes), vous permettant d'ajouter un package unique à votre pubspec et de commencer à travailler. Après une mise à jour Flutter, la seule chose à faire est de mettre à jour la dépendance Get et de vous mettre au travail. Get résout également les problèmes de compatibilité. Combien de fois une version d'un package n'est pas compatible avec la version d'un autre, parce que l'une utilise une dépendance dans une version et l'autre dans une autre version? Ce n'est pas non plus un problème avec Get, car tout est dans le même package et est entièrement compatible. + +2- Flutter est facile, Flutter est incroyable, mais Flutter a encore quelques règles standard qui peuvent être indésirables pour la plupart des développeurs, comme `Navigator.of (context) .push (context, builder [...]`. Get simplifie le développement. Au lieu de écrire 8 lignes de code pour simplement appeler une route, vous pouvez simplement le faire: `Get.to (Home ())` et vous avez terminé, vous passerez à la page suivante. Les URL Web dynamiques sont une chose vraiment pénible à voir avec Flutter actuellement, et cela avec GetX est stupidement simple. La gestion des états dans Flutter et la gestion des dépendances sont également quelque chose qui génère beaucoup de discussions, car il y a des centaines de modèles dans la pub. Mais rien n'est aussi simple que d'ajouter un ".obs" à la fin de votre variable, et placez votre widget dans un Obx, et c'est tout, toutes les mises à jour de cette variable seront automatiquement mises à jour à l'écran. + +3- Facilité sans vous soucier des performances. Les performances de Flutter sont déjà étonnantes, mais imaginez que vous utilisez un gestionnaire d'état et un localisateur pour distribuer vos classes blocs / stores / contrôleurs / etc. Vous devrez appeler manuellement l'exclusion de cette dépendance lorsque vous n'en avez pas besoin. Mais avez-vous déjà pensé à simplement utiliser votre «contrôleur`, et quand il n'était plus utilisé par personne, il serait simplement supprimé de la mémoire? C'est ce que fait GetX. Avec SmartManagement, tout ce qui n'est pas utilisé est supprimé de la mémoire et vous ne devriez pas avoir à vous soucier d'autre chose que de la programmation. Vous serez assuré de consommer le minimum de ressources nécessaires, sans même avoir créé de logique pour cela. + +4- Découplage réel. Vous avez peut-être entendu le concept "séparer la vue de la business logic". Ce n'est pas une particularité de BLoC, MVC, MVVM, et tout autre standard sur le marché a ce concept. Cependant, ce concept peut souvent être atténué dans Flutter en raison de l'utilisation de `context`. +Si vous avez besoin de contexte pour trouver un InheritedWidget, vous en avez besoin dans la vue, ou passez le `context` par paramètre. Je trouve particulièrement cette solution très moche, et pour travailler en équipe, nous serons toujours dépendants de la 'business logic' de View. Getx n'est pas orthodoxe avec l'approche standard, et même s'il n'interdit pas complètement l'utilisation de StatefulWidgets, InitState, etc., il a toujours une approche similaire qui peut être plus propre. Les contrôleurs ont des cycles de vie, et lorsque vous devez faire une requête APIREST par exemple, vous ne dépendez de rien de la vue. Vous pouvez utiliser onInit pour lancer l'appel http et lorsque les données arrivent, les variables sont remplies. Comme GetX est totalement réactif (vraiment, et fonctionne sous streams), une fois les éléments remplis, tous les widgets qui utilisent cette variable seront automatiquement mis à jour dans la vue. +Cela permet aux personnes ayant une expertise de l'interface utilisateur de travailler uniquement avec des widgets et de ne pas avoir à envoyer quoi que ce soit à la business logic autre que des événements utilisateur (comme cliquer sur un bouton), tandis que les personnes travaillant avec la business logic seront libres de créer et de tester la Business logic séparément. + +# Communite + +## Chaines communautaires + +GetX a une communauté très active et utile. Si vous avez des questions, ou souhaitez obtenir de l'aide concernant l'utilisation de ce framework, veuillez rejoindre nos canaux communautaires, votre question sera répondue plus rapidement, et ce sera l'endroit le plus approprié. Ce référentiel est exclusif pour l'ouverture des issues Github et la demande de ressources, mais n'hésitez pas à faire partie de la communauté GetX. +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get sur Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## Comment contribuer + +_Voulez-vous contribuer au projet? Nous serons fiers de vous mettre en avant comme l'un de nos collaborateurs. Voici quelques points sur lesquels vous pouvez contribuer et améliorer encore Get (et Flutter)._ + +- Aider à traduire les 'Readme's dans d'autres langues. +- Ajout de documentation au readme (beaucoup de fonctions de Get n'ont pas encore été documentées). +- Rédiger des articles ou réaliser des vidéos pour apprendre à utiliser Get (ils seront insérés dans le Readme et à l'avenir dans notre Wiki). +- Offrir des PRs pour code / tests. +- Ajouter de nouvelles fonctions. + +Toute contribution est bienvenue! + +## Articles et videos + +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. diff --git a/packages/get/README-vi.md b/packages/get/README-vi.md new file mode 100644 index 0000000..8c53de5 --- /dev/null +++ b/packages/get/README-vi.md @@ -0,0 +1,1176 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +**Ngôn ngữ: Tiếng Việt (file này), [English](README.md), [Indonesian](README.id-ID.md), [Urdu](README.ur-PK.md), [Chinese](README.zh-cn.md), [Brazilian Portuguese](README.pt-br.md), [Spanish](README-es.md), [Russian](README.ru.md), [Polish](README.pl.md), [Korean](README.ko-kr.md), [French](README-fr.md).** + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +- [Về GetX](#về-getx) +- [Cài Đặt](#cài-đặt) +- [Counter App với GetX](#counter-app-với-getx) +- [Tam Trụ](#tam-trụ) + - [Quản lý State](#quản-lý-state) + - [Quản lý Reactive State](#quản-lý-reactive-state) + - [Thêm thông tin về quản lý state](#thêm-thông-tin-về-quản-lý-state) + - [Quản lý route](#quản-lý-route) + - [Thêm thông tin về quản lý route](#thêm-thông-tin-về-quản-lý-route) + - [Quản lý dependency](#quản-lý-dependency) + - [Thêm thông tin về quản lý dependency](#thêm-thông-tin-về-quản-lý-dependency) +- [Utils](#utils) + - [Internationalization](#internationalization) + - [Dịch thuật](#dịch-thuật) + - [Sử dụng bản dịch thuật](#sử-dụng-bản-dịch-thuật) + - [Locales](#locales) + - [Đổi locale](#đổi-locale) + - [System locale](#system-locale) + - [Đổi Theme](#đổi-theme) + - [GetConnect](#getconnect) + - [Cấu hình mặc định](#cấu-hình-mặc-định) + - [Cấu hình tùy chỉnh](#cấu-hình-tùy-chỉnh) + - [GetPage Middleware](#getpage-middleware) + - [Ưu tiên](#ưu-tiên) + - [Chuyển hướng](#chuyển-hướng) + - [onPageCalled](#onpagecalled) + - [OnBindingsStart](#onbindingsstart) + - [OnPageBuildStart](#onpagebuildstart) + - [OnPageBuilt](#onpagebuilt) + - [OnPageDispose](#onpagedispose) + - [APIs nâng cao khác](#apis-nâng-cao-khác) + - [Cấu hình thủ công và cài đặt chung tuỳ chọn](#cấu-hình-thủ-công-và-cài-đặt-chung-tuỳ-chọn) + - [Local State Widgets](#local-state-widgets) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [Mẹo hữu ích](#mẹo-hữu-ích) + - [GetView](#getview) + - [GetResponsiveView](#getresponsiveview) + - [Hướng dẫn sử dụng trước khi dùng](#hướng-dẫn-sử-dụng-trước-khi-dùng) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [Thay đổi đột phá 2.0](#thay-đổi-đột-phá-2.0) +- [Tại sao lại dùng GetX](#tại-sao-lại-dùng-getx) +- [Cộng đồng](#cộng-đồng) + - [Kênh Cộng đồng](#kênh-cộng-đồng) + - [Cách cống hiến](#cách-cống-hiến) + - [Các bài báo và video](#các-bài-báo-và-video) + +# Về GetX + +- GetX hướng tới sự nhỏ gọn và giải pháp tối ưu cho Flutter với tốc độ ưu việt trong quản lý state, nạp dependency thông minh, và quản lý route nhanh chóng và thực tế. + +- GetX hướng tới 3 tham vọng chính, nghĩa là tất cả các tài nguyên của thư viện sẽ dành cho những điểm ưu tiên sau: **NĂNG SUẤT, HIỆU SUẤT VÀ TỔ CHỨC.** + + - **HIỆU SUẤT:** GetX tập trung vào hiệu suất và mức tiêu thụ tài nguyên tối thiểu, do đó nó không sử dụng Streams hoặc ChangeNotifier. + + - **NĂNG SUẤT:** GetX sử dụng một cú pháp dễ dàng và dễ thở. Bất kể bạn muốn làm gì, luôn có một cách dễ dàng hơn với GetX. Nó sẽ tiết kiệm hàng giờ phát triển và sẽ cung cấp hiệu suất tối đa mà ứng dụng của bạn có thể mang lại. + + Nói chung, nhà phát triển nên quan tâm đến việc xóa những controller ra khỏi bộ nhớ. Với GetX, mặc định các tài nguyên sẽ + TỰ ĐỘNG xóa khỏi bộ nhớ khi không dùng nữa. Nếu bạn muốn giữ nó trong bộ nhớ, bạn phải khai báo rõ ràng "permanent: true" trong phần dependency của mình. Từ đó, bạn sẽ tiết kiệm thời gian và giảm rủi ro khi phụ thuộc vào bộ nhớ. Theo mặc định, tính năng tải dependency cũng lười biếng. + + - **TỔ CHỨC:** + GetX cho phép tách toàn bộ View, presentation logic, business logic, nạp dependencies và điều hướng. Bạn không cần "context" để điều hướng giữa các route, vì vậy bạn sẽ độc lập trong sơ đồ widget (trực quan hóa). Bạn không cần "context" để truy cập Controller / Blocs của mình thông qua một InheritedWidget, vì vậy bạn hoàn toàn tách rời presentation logic và business logic ra khỏi lớp trực quan của mình. Bạn không cần phải đưa các Controller / Models / Blocs vào sơ đồ widget của mình thông qua `MultiProvider`, vì GetX sử dụng tính năng nạp dependency của riêng nó, tách hoàn toàn DI khỏi chế độ xem của nó. + + Với GetX, bạn biết nơi tìm từng tính năng ứng dụng của mình, với cơ chế clean code theo mặc định. Ngoài việc giúp bảo trì dễ dàng, GetX giúp việc chia sẻ các mô-đun trở thành khả thi trong Flutter. + BLoC là điểm khởi đầu để tổ chức code trong Flutter, nó tách biệt business logic ra khỏi lớp trực quan hóa (visualization). GetX nảy sinh từ điều này, không chỉ tách biệt presentation logic mà còn cả business logic. Nạp dependency bổ sung và route cũng được tách ra và lớp dữ liệu cũng biến mất. Bạn sẽ biết mọi thứ ở đâu và sẽ hình dung tất cả những điều này dễ hơn cả xây dựng chương trình "Hello World". + GetX là cách dễ nhất, thiết thực và có thể mở rộng để xây dựng các ứng dụng hiệu suất cao với Flutter SDK. GetX chứa đựng một hệ sinh thái rộng lớn xung quanh nó hoạt động hoàn hảo cùng nhau, rất dễ dàng cho người mới bắt đầu và nó chính xác cho các chuyên gia. Nó an toàn, ổn định, luôn cập nhật và cung cấp một loạt các API được tích hợp sẵn mà không có trong Flutter SDK mặc định. + +- GetX không cồng kềnh và có vô số tính năng cho phép bạn bắt đầu lập trình mà không cần lo lắng về bất cứ điều gì. Đặc biệt, nó cho phép mỗi tính năng này nằm trong các vùng chứa riêng biệt và chỉ được bắt đầu sau khi sử dụng. Nếu bạn chỉ sử dụng phần quản lý state của GetX thì sẽ chỉ có quản lý state được sử dụng. Nếu bạn chỉ sử dụng route, thì GetX không biên dịch phần quản lý state. + +- GetX có một hệ sinh thái khổng lồ, một cộng đồng lớn, một số lượng lớn cộng tác viên và sẽ được duy trì miễn là Flutter còn tồn tại. GetX có khả năng chạy cùng một mã (code) trên Android, iOS, Web, Mac, Linux, Windows và trên máy chủ của bạn. + **Bạn hoàn toàn có thể sử dụng lại mã của mình trên frontend qua backend với [Get Server](https://github.com/jonataslaw/get_server)**. + +**Ngoài ra, toàn bộ quá trình phát triển có thể hoàn toàn tự động, cả trên máy chủ và frontend với [Get CLI](https://github.com/jonataslaw/get_cli)**. + +**Ngoài ra, nhằm tăng thêm năng suất của bạn, chúng tôi hỗ trợ +[tiện ích trên VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) và [tiện ích cho Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)** + +# Cài Đặt + +Thêm Get vào file pubspec.yaml: + +```yaml +dependencies: + get: +``` + +Import get vào file cần sử dụng: + +```dart +import 'package:get/get.dart'; +``` + +# Counter App với GetX + +Dự án "counter" được tạo theo mặc định trên dự án mới trên Flutter có hơn 100 dòng (có comments). Để thể hiện sức mạnh của Get, tôi sẽ trình bày cách tạo "counter" thay đổi trạng thái với mỗi lần nhấp, chuyển đổi giữa các trang và chia sẻ trạng thái giữa các màn hình, tất cả đều theo cách có tổ chức, tách biệt logic nghiệp vụ khỏi chế độ xem, CHỈ VỚI 26 DÒNG! + +- Bước 1: + Thêm "Get" trước MaterialApp, nó sẽ thành GetMaterialApp + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- Chú ý: điều này không sửa đổi MaterialApp của Flutter, GetMaterialApp không phải là MaterialApp được sửa đổi, nó chỉ là một Widget được tạo trước với MaterialApp mặc định là child. Bạn có thể cấu hình điều này theo cách thủ công, nhưng nó chắc chắn là không cần thiết. GetMaterialApp sẽ tạo các route, đưa chúng vào, đưa bản dịch, đưa mọi thứ bạn cần để điều hướng route. Nếu bạn chỉ sử dụng Get để quản lý trạng thái hoặc quản lý phụ thuộc, thì không cần thiết phải sử dụng GetMaterialApp. Tóm lại, GetMaterialApp chỉ cần thiết cho các route, snacksbar, internationalization, bottomSheets, Dialog và các APIs cấp cao liên quan đến route và không có "context". +- Chú ý²: Một lần nữa, bước này chỉ cần thiết nếu bạn sử dụng quản lý route (`Get.to ()`, `Get.back ()`, v.v.). Nếu bạn không sử dụng nó thì không cần thực hiện bước 1 + +- Bước 2: + Tạo lớp business logic của bạn và đặt tất cả các biến (variables), hàm (function) và controller bên trong nó. + Bạn có thể làm cho bất kỳ biến nào có thể quan sát được đơn giản bằng cách sử dụng ".obs". + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- Bước 3: + Tạo widget của bạn, sử dụng StatelessWidget và tiết kiệm RAM, với Get, bạn có thể không cần sử dụng StatefulWidget nữa. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Instantiate your class using Get.put() to make it available for all "child" routes there. + final Controller c = Get.put(Controller()); + + return Scaffold( + // Use Obx(()=> to update Text() whenever count is changed. + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // You can ask Get to find a Controller that is being used by another page and redirect you to it. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Access the updated count variable + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +Kết quả: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +Đây là một dự án đơn giản nhưng nó đã cho thấy rõ sức mạnh của Get. Khi dự án của bạn phát triển, sự khác biệt này sẽ trở nên đáng kể hơn. + +Get được thiết kế để làm việc với các nhóm, nhưng nó làm cho công việc của một nhà phát triển cá nhân trở nên đơn giản. + +Cải thiện thời gian, giao mọi thứ đúng hạn mà không làm giảm hiệu suất. Get không dành cho tất cả mọi người, nhưng nếu bạn đã xác định gắn với Get, Get sẽ "get" bạn! + +# Tam Trụ + +## Quản lý State + +Get có 2 cách quản lý trạng thái (state managers) khác nhau : quản lý trạng thái đơn giản (chúng ta gọi nó là GetBuilder) và quản lý trạng thái phản ứng (the reactive state manager) (GetX/Obx). + +### Quản lý Reactive State + +Lập trình phản ứng (reactive programming) có thể khiến nhiều người xa lánh vì nó được cho là phức tạp. GetX biến lập trình phản ứng thành một thứ khá đơn giản: + +- Bạn sẽ không cần tạo StreamControllers. +- Bạn sẽ không cần tạo StreamBuilder cho mỗi biến. +- Bạn sẽ không cần tạo một lớp (class) cho mỗi trạng thái. +- Bạn sẽ không cần tạo get cho một giá trị ban đầu. +- Bạn sẽ không cần sử dụng trình tạo mã. + +Lập trình phản ứng với Get dễ dàng như sử dụng setState. + +Hãy tưởng tượng rằng bạn có một biến tên và muốn rằng mỗi khi bạn thay đổi nó, tất cả các widget sử dụng nó sẽ được tự động thay đổi. + +Đây là biến đếm của bạn: + +```dart +var name = 'Jonatas Borges'; +``` + +Để nó có thể được lắng nghe, bạn chỉ cần thêm ".obs" ở cuối: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +Và trong UI, khi bạn muốn hiển thị giá trị đó và cập nhật màn hình bất cứ khi nào giá trị thay đổi, chỉ cần thực hiện điều này: + +```dart +Obx(() => Text("${controller.name}")); +``` + +Thế thôi. Chỉ là _thế_ thôi người ơi~. + +### Thêm thông tin về Quản lý state + +**Xem thông tin cụ thể tại [đây](./documentation/en_US/state_management.md). Tại đó, bạn có thể tham khảo ví dụ và so sánh sự khác nhau giữa quản lý state cơ bản và quản lý state reactive** + +Bạn sẽ hình dung được sức mạnh của GetX. + +## Quản lý route + +Nếu bạn chỉ sử dụng routes/snackbars/dialogs/bottomsheets không có context, GetX là lựa chọn số 2 trừ 1, nhìn đây: + +Thêm "Get" trước MaterialApp, nó sẽ biến thành GetMaterialApp + +```dart +GetMaterialApp( // Before: MaterialApp( + home: MyHome(), +) +``` + +Di chuyển tới màn hình mới: + +```dart + +Get.to(NextScreen()); +``` + +Di chuyển tới màn hình mới theo tên. Xem thêm tại [đây](./documentation/en_US/route_management.md#navigation-with-named-routes) + +```dart + +Get.toNamed('/details'); +``` + +Để đóng snackbars, dialogs, bottomsheets, hay bất kì thứ gì, bạn có thể xài cái này để thay Navigator.pop(context); + +```dart +Get.back(); +``` + +Đi đến màn hình kế tiếp và bỏ luôn màn hình cũ (thường dùng cho màn hình giới thiệu, màn hình đăng nhập, etc.) + +```dart +Get.off(NextScreen()); +``` + +Đi đến màn hình kế tiếp và đóng tất cả các routes (hữu dụng cho shopping cart, polls, và tests) + +```dart +Get.offAll(NextScreen()); +``` + +Bạn có thấy nãy giờ chúng ta không sử dụng từ khóa "context"? Đây chính là thang điểm 9 + 1 của quản lý route ở Get. Với điểm mạnh trên, bạn có thể thao tác bất cứ đâu, kể cả trong controller class. + +### Thêm thông tin về quản lý route + +**Get hoạt động được với named routes và cũng cung cấp cách điều khiển ở cấp thấp (lower-level control) cho routes của bạn! Tài liệu chi tiết tại [đây](./documentation/en_US/route_management.md)** + +## Quản lý dependency + +Get hỗ trợ tính năng giúp bạn lấy class như Bloc hoặc Controller chỉ với 1 dòng, không cần Provider context hay InheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); +``` + +- Chú ý: Nếu bạn dùng Get's State Manager, hãy chú ý đến việc bindings API, có thể giúp dễ dàng kết nối view đến controller. + +Thay vì khởi tạo class của bạn trong class bạn đang sử dụng, bạn đang khởi tạo nó trong phiên bản Get, điều này sẽ làm cho nó có sẵn trên toàn bộ Ứng dụng của bạn. +Vì vậy, bạn có thể sử dụng bộ điều khiển (hoặc Bloc) của mình một cách bình thường + +**Mẹo:** quản lý dependency của Get được tách ra khỏi các phần khác của package, vì vậy, ví dụ: nếu ứng dụng của bạn đã sử dụng 1 trình quản lý trạng thái (bất kỳ cái nào, không quan trọng), bạn không cần phải viết lại tất cả, bạn có thể sử dụng nạp dependency của Get vô lo + +```dart +controller.fetchApi(); +``` + +Hãy tưởng tượng rằng bạn đã điều hướng qua nhiều route và bạn cần dữ liệu bị còn sót trong controller của mình, bạn sẽ cần một trình quản lý dependency kết hợp với Provider hoặc Get_it, đúng không? Với Get, sử dụng Get để "find" cho controller, bạn sẽ hoàn toàn độc lập: + +```dart +Controller controller = Get.find(); +//Yes, it looks like Magic, Get will find your controller, and will deliver it to you. You can have 1 million controllers instantiated, Get will always give you the right controller. +``` + +Và sau đó, bạn sẽ có thể khôi phục dữ liệu controller của mình đã lấy được ở đó: + +```dart +Text(controller.textFromApi); +``` + +### Thêm thông tin về quản lý dependency + +**Xem thêm tại [đây](./documentation/en_US/dependency_management.md)** + +# Utils + +## Internationalization + +### Dịch thuật + +Các bản dịch được lưu giữ như một bản đồ từ điển (dictionary map) key-value đơn giản. +Để thêm các bản dịch tùy chỉnh, hãy tạo một class và kế thừa (extend) từ `Translation`. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### Sử dụng bản dịch thuật + +Chỉ cần thêm `.tr` vào key được chỉ định và nó sẽ được dịch, sử dụng giá trị hiện tại của` Get.locale` và `Get.fallbackLocale`. + +```dart +Text('title'.tr); +``` + +#### Sử dụng bản dịch thuật với số ít và số nhiều + +```dart +var products = []; +Text('singularKey'.trPlural('pluralKey', products.length, Args)); +``` + +#### Sử dụng bản dịch với tham số (parameters) + +```dart +import 'package:get/get.dart'; + + +Map> get keys => { + 'en_US': { + 'logged_in': 'logged in as @name with email @email', + }, + 'es_ES': { + 'logged_in': 'iniciado sesión como @name con e-mail @email', + } +}; + +Text('logged_in'.trParams({ + 'name': 'Jhon', + 'email': 'jhon@example.com' + })); +``` + +### Locales + +Chuyển các tham số (parameters) cho `GetMaterialApp` để xác định ngôn ngữ và bản dịch. + +```dart +return GetMaterialApp( + translations: Messages(), // your translations + locale: Locale('en', 'US'), // translations will be displayed in that locale + fallbackLocale: Locale('en', 'UK'), // specify the fallback locale in case an invalid locale is selected. +); +``` + +#### Đổi locale + +Gọi `Get.updateLocale (locale)` 'để cập nhật ngôn ngữ. Các bản dịch sau đó sẽ tự động sử dụng ngôn ngữ mới. + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### System locale + +Để đọc system locale, sử dụng `Get.deviceLocale`. + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## Đổi chủ đề (Theme) + +Vui lòng không sử dụng bất kỳ Widget con nào cấp cao hơn `GetMaterialApp` để cập nhật nó. Điều này có thể kích hoạt các key trùng lặp. Rất nhiều người đã quen với cách tiếp cận thời tiền sử là tạo tiện ích "ThemeProvider" chỉ để thay đổi chủ đề ứng dụng của bạn và điều này KHÔNG cần thiết với ** GetX ™ **. + +Bạn có thể tạo chủ đề tùy chỉnh của mình và chỉ cần thêm nó vào trong `Get.changeTheme` mà không cần bất kỳ điều gì khác: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +Nếu bạn muốn tạo một cái gì đó giống như một nút thay đổi Theme với `onTap`, bạn có thể kết hợp hai API ** GetX ™ ** cho điều đó: + +- Api kiểm tra xem `Theme` tối có đang được sử dụng hay không. +- Và `Theme` sẽ thay đổi API, bạn sử dụng với `onPressed`: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +Khi bật `.darkmode`, nó sẽ chuyển _light theme_, và khi bật _light theme_ , nó sẽ chuyển _dark theme_. + +## GetConnect + +GetConnect tạo giao thức tới http hoặc websockets + +### Cấu hình mặc định + +Đơn giản, bạn có thể kế thừa (extend) từ GetConnect và sử dụng các phương thức GET/POST/PUT/DELETE/SOCKET khi giao tiếp với Rest API hoặc websockets. + +```dart +class UserProvider extends GetConnect { + // Get request + Future getUser(int id) => get('http://youapi/users/$id'); + // Post request + Future postUser(Map data) => post('http://youapi/users', body: data); + // Post request with File + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` + +### Cấu hình tùy chỉnh + +GetConnect có khả năng tùy chỉnh cao Bạn có thể xác định Url chính như answers, modifiers như request, xác địng authenticator và thậm chí số lần thử mà nó sẽ cố gắng authenticate, ngoài việc cung cấp khả năng xác định bộ giải mã chuẩn sẽ chuyển đổi tất cả các request của bạn thành Model mà không cần bất kỳ cấu hình bổ sung nào. + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // All request will pass to jsonEncode so CasesModel.fromJson() + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; // It define baseUrl to + // Http and websockets if used with no [httpClient] instance + + // It's will attach 'apikey' property on header from all requests + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // Even if the server sends data from the country "Brazil", + // it will never be displayed to users, because you remove + // that data from the response, even before the response is delivered + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazilll'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // Set the header + request.headers['Authorization'] = "$token"; + return request; + }); + + //Autenticator will be called 3 times if HttpStatus is + //HttpStatus.unauthorized + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## GetPage Middleware + +GetPage hiện có thuộc tính mới lấy danh sách GetMiddleWare và chạy chúng theo thứ tự cụ thể. + +**Chú ý**: Khi GetPage có Middleware (phần trung gian), tất cả các children của trang này sẽ tự động có cùng middlewares. + +### Ưu tiên + +Thứ tự ưu tiên của Middlewares có thể đặt như sau trong GetMiddleware. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` + +và chúng sẽ chạy như thế này **-8 => 2 => 4 => 5** + +### Chuyển hướng + +Khi bạn muốn tìm kiếm trang của route được gọi, function (hàm) sẽ khởi động. Kết quả là phải có RouteSettings để chuyển hướng đến. Hoặc cung cấp cho nó null và chuyển hướng không xảy ra. + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### onPageCalled + +Khi bạn gọi một trang trước mọi thứ được tạo, hàm này sẽ khởi động và +bạn có thể sử dụng nó để thay đổi điều gì đó về trang hoặc tạo cho nó một trang mới + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +Hàm này sẽ khởi động ngay trước khi Bindings diễn ra và bạn có thể thay đổi Bindings cho trang này. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +Hàm này sẽ khởi động ngay sau khi Bindings diễn ra. Ở đây, bạn có thể làm thứ gì đó sau khi bạn tạo Bindings và trước khi tạo trang widget. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### OnPageBuilt + +Hàm này sẽ khởi động ngay sau khi GetPage.page được gọi và sẽ cho bạn kết quả của hàm và lấy widget được hiển thị. + +### OnPageDispose + +Function này sẽ khởi động ngay sau khi hủy bỏ tất cả các đối tượng liên quan (Controller, views, ...) của trang. + +## APIs nâng cao khác + +```dart +// give the current args from currentScreen +Get.arguments + +// give name of previous route +Get.previousRoute + +// give the raw route to access for example, rawRoute.isFirst() +Get.rawRoute + +// give access to Routing API from GetObserver +Get.routing + +// check if snackbar is open +Get.isSnackbarOpen + +// check if dialog is open +Get.isDialogOpen + +// check if bottomsheet is open +Get.isBottomSheetOpen + +// remove one route. +Get.removeRoute() + +// back repeatedly until the predicate returns true. +Get.until() + +// go to next route and remove all the previous routes until the predicate returns true. +Get.offUntil() + +// go to next named route and remove all the previous routes until the predicate returns true. +Get.offNamedUntil() + +//Check in what platform the app is running +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +//Check the device type +GetPlatform.isMobile +GetPlatform.isDesktop +//All platforms are supported independently in web! +//You can tell if you are running inside a browser +//on Windows, iOS, OSX, Android, etc. +GetPlatform.isWeb + + +// Equivalent to : MediaQuery.of(context).size.height, +// but immutable. +Get.height +Get.width + +// Gives the current context of the Navigator. +Get.context + +// Gives the context of the snackbar/dialog/bottomsheet in the foreground, anywhere in your code. +Get.contextOverlay + +// Chí ú: Nếu bạn dùng cái này, nhớ đặtt. thànhnce you +// have access to context in any place of your UI, you can use it anywhere in the UI code + +// If you need a changeable height/width (like Desktop or browser windows that can be scaled) you will need to use context. +context.width +context.height + +// Gives you the power to define half the screen, a third of it and so on. +// Useful for responsive applications. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// Similar to MediaQuery.of(context).size +context.mediaQuerySize() + +/// Similar to MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// Similar to MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// Similar to MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// Similar to MediaQuery.of(context).orientation; +context.orientation() + +/// Check if device is on landscape mode +context.isLandscape() + +/// Check if device is on portrait mode +context.isPortrait() + +/// Similar to MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// Similar to MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// Get the shortestSide from screen +context.mediaQueryShortestSide() + +/// True if width be larger than 800 +context.showNavbar() + +/// True if the shortestSide is smaller than 600p +context.isPhone() + +/// True if the shortestSide is largest than 600p +context.isSmallTablet() + +/// True if the shortestSide is largest than 720p +context.isLargeTablet() + +/// True if the current device is Tablet +context.isTablet() + +/// Returns a value according to the screen size +/// can give value for: +/// watch: if the shortestSide is smaller than 300 +/// mobile: if the shortestSide is smaller than 600 +/// tablet: if the shortestSide is smaller than 1200 +/// desktop: if width is largest than 1200 +context.responsiveValue() +``` + +### Cấu hình thủ công và cài đặt chung tuỳ chọn + +GetMaterialApp configures everything for you, but if you want to configure Get manually. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +Bạn cũng sẽ có thể dùng Middleware của riêng bạn trong `GetObserver`, điều này không ảnh hưởng những thứ khác. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +Bạn có thể tạo _Global Settings_ cho `Get`. Chỉ cần thêm `Get.config` vào code của bạn trước khi đẩy (push) bất cứ route nào. +Hoặc làm nó trực tiếp trong `GetMaterialApp` của bạn. + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +Bạn có thể tự chọn chuyển hướng tất cả logging messages từ `Get`. +Nếu bạn muốn sử dụng logging package ưa thích của riêng bạn, và muốn chụp lại những logs đó: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // pass the message to your favourite logging package here + // please note that even if enableLog: false log messages will be pushed in this callback + // you get check the flag if you want through GetConfig.isLogEnable +} + +``` + +### Local State Widgets + +Các Widget này cho phép bạn quản lý một giá trị duy nhất và giữ trạng thái tạm thời và cục bộ. +Chúng ta có các hướng đi cho Reactive và Simple. +Ví dụ: bạn có thể sử dụng chúng để chuyển đổi văn bản tối nghĩa trong một `TextField`, có thể tạo một widget +Expandable Panel tùy chỉnh hoặc có thể sửa đổi chỉ mục hiện tại trong `BottomNavigationBar` trong khi thay đổi nội dung +bên trong một `Scaffold`. + +#### ValueBuilder + +Đơn giản hóa của `StatefulWidget` hoạt động với lệnh gọi lại` .setState` nhận giá trị cập nhật. + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // same signature! you could use ( newValue ) => updateFn( newValue ) + ), + // if you need to call something outside the builder method. + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### ObxValue + +Tương tự như [`ValueBuilder`](#valuebuilder), nhưng đây là phiên bản Reactive, bạn kèm một lệnh Rx (nhớ cái .obs không?) và nó cập nhật tự động ... hay chưa? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx has a _callable_ function! You could use (flag) => data.value = flag, + ), + false.obs, +), +``` + +## Mẹo hữu ích + +`.obs` observable (variable có thể quan sát được) (còn được gọi là loại _Rx_) có nhiều phương thức và toán tử bên trong. + +> Is very common to _believe_ that a property with `.obs` **IS** the actual value... but make no mistake! +> We avoid the Type declaration of the variable, because Dart's compiler is smart enough, and the code +> looks cleaner, but: + +```dart +var message = 'Xin Chào'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + +Ngay cả khi `message` _prints_ giá trị String, thì kiểu của nó lại là ** RxString **! + +Vì vậy, bạn không thể thực hiện `message.substring (0, 4) '. Bạn phải truy cập vào `value`thực bên trong _observable_: Cách được sử dụng nhiều nhất là`.value`, nhưng, bạn có biết rằng bạn cũng có thể sử dụng ... + +```dart +final name = 'GetX'.obs; +// only "updates" the stream, if the value is different from the current one. +name.value = 'Hey'; + +// All Rx properties are "callable" and returns the new value. +// but this approach does not accepts `null`, the UI will not rebuild. +name('Hello'); + +// is like a getter, prints 'Hello'. +name() ; + +/// numbers: + +final count = 0.obs; + +// You can use all non mutable operations from num primitives! +count + 1; + +// Watch out! this is only valid if `count` is not final, but var +count += 1; + +// You can also compare against values: +count > 2; + +/// booleans: + +final flag = false.obs; + +// switches the value between true/false +flag.toggle(); + + +/// all types: + +// Sets the `value` to null. +flag.nil(); + +// All toString(), toJson() operations are passed down to the `value` +print( count ); // calls `toString()` inside for RxInt + +final abc = [0,1,2].obs; +// Converts the value to a json Array, prints RxList +// Json is supported by all Rx types! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList and RxSet are special Rx types, that extends their native types. +// but you can work with a List as a regular list, although is reactive! +abc.add(12); // pushes 12 to the list, and UPDATES the stream. +abc[3]; // like Lists, reads the index 3. + + +// equality works with the Rx and the value, but hashCode is always taken from the value +final number = 12.obs; +print( number == 12 ); // prints > true + +/// Custom Rx Models: + +// toJson(), toString() are deferred to the child, so you can implement override on them, and print() the observable directly. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'Khang', last: 'Huỳnh', age: 33).obs; + +// `user` is "reactive", but the properties inside ARE NOT! +// So, if we change some variable inside of it... +user.value.name = 'Kaiser'; +// The widget will not rebuild!, +// `Rx` don't have any clue when you change something inside user. +// So, for custom classes, we need to manually "notify" the change. +user.refresh(); + +// or we can use the `update()` method! +user.update((value){ + value.name='Kaiser'; +}); + +print( user ); +``` + +## StateMixin + +Một cách khác để xử lý trạng thái `UI` của bạn là sử dụng`StateMixin `. +Để triển khai nó, hãy sử dụng dấu `with` để thêm`StateMixin ` vào bộ điều khiển (controller) của bạn cho phép tích hợp kèm mô hình T. + +```dart +class Controller extends GetController with StateMixin{} +``` + +Phương thức `change()` thay đổi trạng thái bất cứ khi nào chúng ta muốn. +Chỉ cần chuyển dữ liệu và trạng thái theo cách này: + +```dart +change(data, status: RxStatus.success()); +``` + +RxStatus cho phép những trang thái này: + +```dart +RxStatus.loading(); +RxStatus.success(); +RxStatus.empty(); +RxStatus.error('message'); +``` + +Để biểu hiện nó trên UI, sử dụng: + +```dart +class OtherClass extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + + body: controller.obx( + (state)=>Text(state.name), + + // here you can put your custom loading indicator, but + // by default would be Center(child:CircularProgressIndicator()) + onLoading: CustomLoadingIndicator(), + onEmpty: Text('No data found'), + + // here also you can set your own error widget, but by + // default will be an Center(child:Text(error)) + onError: (error)=>Text(error), + ), + ); +} +``` + +#### GetView + +Widget này là bảo bối của GetX, rất đơn giản, nhưng rất hữu ích! + +Là một Widget `const Stateless` có getter` controller` cho một `Controller` đã đăng ký, chỉ vậy thôi người ơi~. + +```dart + class AwesomeController extends GetController { + final String title = 'My Awesome View'; + } + + // ALWAYS remember to pass the `Type` you used to register your controller! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // just call `controller.something` + ); + } + } +``` + +#### GetResponsiveView + +Mở rộng tiện ích này để xây dựng chế độ responsive. +Widget này chứa thuộc tính `screen` có tất cả +thông tin về kích thước và loại màn hình. + +##### Hướng dẫn sử dụng trước khi dùng + +Bạn có hai lựa chọn để xây dựng nó. + +- với phương thức `builder` bạn trả về tiện ích con để xây dựng. +- với các phương thức `desktop`,` tablet`, `phone`,` watch`. cụ thể, các phương thức này sẽ tạo các loại màn hình khớp với ngữ cảnh khi màn hình là [ScreenType.Tablet] thì phương thức `tablet` sẽ được tạo ra và cứ như vậy. + **Chú ý:** Nếu bạn dùng cái này, nhớ đặt `alwaysUseBuilder` thành `false` + +Với thuộc tính `settings` bạn có thể đặt chiều dài tối thiểu cho các loại màn hình. + +![example](https://github.com/SchabanBo/get_page_example/blob/master/docs/Example.gif?raw=true) +Code to this screen +[code](https://github.com/SchabanBo/get_page_example/blob/master/lib/pages/responsive_example/responsive_view.dart) + +#### GetWidget + +Hầu hết mọi người không biết gì về Widget này, hoặc hoàn toàn nhầm lẫn về cách sử dụng nó. +Trường hợp sử dụng rất hiếm, nhưng rất cụ thể: Nó `caches` một Bộ điều khiển. +Bởi vì _cache_ không thể là một `const Stateless`. + +> Vậy khi nào mình cần cache bộ điều khiển (controller)? + +Nếu sử dụng, bạn sẽ dùng cái này **GetX**: `Get.create()`. + +`Get.create(()=>Controller())` sẽ tạo một `Controller` với mỗi lần gọi `Get.find()`, + +Đó là nơi mà `GetWidget` tỏa sáng ... chẳng hạn như bạn có thể sử dụng nó, để giữ một danh sách các mục Todo. Vì vậy, nếu widget được "xây dựng lại", nó sẽ giữ nguyên phiên bản controller. + +#### GetxService + +Class này giống như một `GetxController`, nó chia sẻ cùng một vòng đời (`onInit ()`,`onReady ()`,`onClose ()`). +Nhưng không có "logic" bên trong của nó. Nó chỉ thông báo cho ** GetX ** Hệ thống Nạp Dependency rằng class con này ** không thể ** bị xóa khỏi bộ nhớ. + +Vì vậy, rất hữu ích để giữ cho "Service" của bạn luôn có thể truy cập và hoạt động với `Get.find ()`. Giống: +`ApiService`,` StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// AWAIT SERVICES INITIALIZATION. + runApp(SomeApp()); +} + +/// Is a smart move to make your Services intiialize before you run the Flutter app. +/// as you can control the execution flow (maybe you need to load some Theme configuration, +/// apiKey, language defined by the User... so load SettingService before running ApiService. +/// so GetMaterialApp() doesnt have to rebuild, and takes the values directly. +void initServices() async { + print('starting services ...'); + /// Here is where you put get_storage, hive, shared_pref initialization. + /// or moor connection, or whatever that's async. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +Cách duy nhất để thực sự xóa một `GetxService`, là với `Get.reset ()` giống như cách thức "Khởi động nóng" ứng dụng của bạn. Vì vậy, hãy nhớ rằng, nếu bạn cần sự tồn tại tuyệt đối của một class trong vòng đời tồn tại của nó trong ứng dụng của bạn, hãy sử dụng `GetxService`. + +# Thay đổi đột phá 2.0 + +1- Rx types: + +| Before | After | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController và GetBuilder bây giờ đã hợp nhất, bạn không cần phải ghi nhớ bộ điều khiển nào bạn muốn sử dụng, chỉ cần sử dụng GetxController, nó sẽ hoạt động để quản lý trạng thái đơn giản và reactive. + +2- NamedRoutes +Before: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Now: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +Tại sao lại thay đổi? +Thông thường, có thể cần phải quyết định trang nào sẽ được hiển thị từ một tham số hoặc mã thông báo đăng nhập, cách tiếp cận trước đây không linh hoạt, vì nó không cho phép điều này. +Việc chèn trang vào một hàm đã làm giảm đáng kể mức tiêu thụ RAM, vì các tuyến sẽ không được cấp phát trong bộ nhớ kể từ khi ứng dụng được khởi động và nó cũng cho phép thực hiện kiểu tiếp cận này: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# Tại sao lại dùng GetX + +1- Nhiều lần sau khi cập nhật Flutter, nhiều package của bạn sẽ bị hỏng. Đôi khi lỗi biên dịch code xảy ra, lỗi thường xuất hiện mà vẫn không có câu trả lời; và, chúng ta, nhà phát triển, cần biết lỗi đến từ đâu, theo dõi lỗi, chỉ sau đó cố gắng mở một vấn đề trong kho lưu trữ tương ứng và xem vấn đề của nó đã được giải quyết. Tập trung các tài nguyên chính để phát triển (Quản lý state, dependency và route), cho phép bạn thêm một gói duy nhất vào pubspec của mình và bắt đầu hoạt động. Sau khi cập nhật Flutter, điều duy nhất bạn cần làm là cập nhật Get dependency và bắt đầu làm việc. Get cũng giải quyết các vấn đề tương thích. Có bao nhiêu lần một phiên bản của một gói không tương thích với phiên bản của gói khác, vì một gói sử dụng phần phụ thuộc trong một phiên bản và gói kia trong phiên bản khác? Đây cũng không phải là vấn đề đáng lo ngại khi sử dụng Get, vì mọi thứ đều nằm trong cùng một gói và hoàn toàn tương thích. + +2- Flutter dễ học, Flutter siêu phàm, nhưng Flutter vẫn có một số bản soạn sẵn có thể không mong muốn đối với hầu hết các nhà phát triển, chẳng hạn như `Navigator.of (context) .push (context, builder [...] '. Get đơn giản hóa việc phát triển. Thay vì viết 8 dòng mã chỉ để gọi một tuyến đường, bạn chỉ cần làm điều đó: `` Get.to (Home ()) 'và bạn đã hoàn tất, bạn sẽ chuyển sang trang tiếp theo. Các url web động là một điều thực sự khó khăn để làm với Flutter hiện tại và điều đó với GetX đơn giản đến đần độn :). Quản lý trạng thái trong Flutter và quản lý các phần phụ thuộc cũng là điều tạo ra nhiều cuộc thảo luận, vì có hàng trăm mẫu trong pub (Dart package website). Nhưng không có gì dễ dàng bằng việc thêm ".obs" ở cuối biến của bạn, và đặt tiện ích của bạn bên trong Obx, và thế là xong, tất cả các cập nhật cho biến đó sẽ được tự động cập nhật trên màn hình. + +3- Dễ dàng mà không phải lo lắng về hiệu suất. Hiệu suất của Flutter đã đáng kinh ngạc rồi, nhưng hãy tưởng tượng rằng bạn sử dụng trình quản lý state và trình định vị để phân phối các Blocs / stores / controllers / v.v. của bạn. Bạn sẽ phải gọi thủ công loại trừ sự phụ thuộc khi bạn không cần đến chúng. Nhưng bạn đã bao giờ nghĩ chỉ cần sử dụng bộ điều khiển của mình và khi nó không còn được ai sử dụng nữa, nó sẽ đơn giản được xóa khỏi bộ nhớ? Đó là những gì GetX làm. Với SmartManagement, mọi thứ không được sử dụng sẽ được xóa khỏi bộ nhớ và bạn không phải lo lắng về bất cứ điều gì ngoài lập trình. Bạn sẽ được đảm bảo rằng bạn đang sử dụng các nguồn tài nguyên cần thiết tối thiểu mà thậm chí không cần tạo ra một logic nào cho việc này. + +4- Tách khỏi thực tế. Bạn có thể đã nghe đến khái niệm "tách khung nhìn (view) khỏi business logic". Đây không phải là đặc thù của BLoC, MVC, MVVM và bất kỳ tiêu chuẩn nào khác trên thị trường đều có khái niệm này. Tuy nhiên, khái niệm này thường có thể được giảm thiểu trong Flutter do việc sử dụng ngữ cảnh (context). +Nếu bạn cần ngữ cảnh để tìm một InheritedWidget, bạn cần nó trong dạng xem hoặc chuyển ngữ cảnh theo tham số. Tôi đặc biệt thấy giải pháp này rất chán đời; hơn nữa, để làm việc theo nhóm, chúng tôi sẽ luôn phụ thuộc vào business logic của View. GetX không chính thống với cách tiếp cận tiêu chuẩn và mặc dù nó không cấm hoàn toàn việc sử dụng StatefulWidgets, InitState, v.v., nhưng nó luôn có một cách tiếp cận tương tự có thể rõ ràng hơn. Controller có vòng đời và khi bạn cần thực hiện yêu cầu APIREST chẳng hạn, bạn độc lập với View. Bạn có thể sử dụng onInit để bắt đầu cuộc gọi http và khi dữ liệu đến, các biến sẽ được điền. Vì GetX hoạt động hoàn toàn reactive (đó là sự thực và hoạt động theo luồng), khi các mục được lấp đầy, tất cả tiện ích con sử dụng biến đó sẽ được cập nhật tự động trong View. Điều này cho phép những người có chuyên môn về UI chỉ làm việc với các widget và không phải gửi bất kỳ thứ gì đến logic nghiệp vụ ngoài các sự kiện của người dùng (như nhấp vào nút), trong khi những người làm việc với logic nghiệp vụ sẽ được tự do tạo và kiểm tra logic nghiệp vụ riêng. + +Thư viện này sẽ luôn được cập nhật và triển khai các tính năng mới. Hãy thoải mái đưa ra các bài PR và đóng góp cho chúng. + +# Cộng đồng + +## Kênh Cộng đồng + +GetX có một cộng đồng rất tích cực và hữu ích. Nếu bạn có thắc mắc hoặc muốn được hỗ trợ về việc sử dụng khuôn khổ này, vui lòng tham gia các kênh cộng đồng của chúng tôi, câu hỏi của bạn sẽ được trả lời nhanh hơn và đó sẽ là nơi phù hợp nhất. Kho lưu trữ này dành riêng cho các vấn đề mở và yêu cầu tài nguyên, nhưng hãy thoải mái trở thành một phần của Cộng đồng GetX. + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## Cách cống hiến + +_Bạn muốn đóng góp cho dự án? Chúng tôi sẽ tự hào giới thiệu bạn với tư cách là một trong những cộng tác viên của chúng tôi. Dưới đây là một số điểm mà bạn có thể đóng góp và làm cho Get (và Flutter) tốt hơn nữa._ + +- Giúp dịch readme sang các ngôn ngữ khác. +- Thêm tài liệu vào readme (rất nhiều chức năng của Get chưa được tài liệu hóa). +- Viết bài hoặc làm video dạy cách sử dụng Get (chúng sẽ được chèn vào Readme và trong tương lai trong Wiki của chúng tôi). +- Đưa ra các PR cho mã / bài kiểm tra. +- Bao gồm các chức năng mới. + +Mọi đóng góp đều được hoan nghênh! + +## Các bài báo và video + +- [Flutter GetX EcoSystem package for arabic people](https://www.youtube.com/playlist?list=PLV1fXIAyjeuZ6M8m56zajMUwu4uE3-SL0) - Hướng dẫn bởi [Pesa Coder](https://github.com/UsamaElgendy). +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Hướng dẫn bởi [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Quản lý route bởi Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - Quản lý State video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - Quản lý State by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Nạp dependency by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - Giới thiệu sơ lược về quản lý State and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. +- [A minimal example on dartpad](https://dartpad.dev/2b3d0d6f9d4e312c5fdbefc414c1727e?) - by [Roi Peker](https://github.com/roipeker) diff --git a/packages/get/README.id-ID.md b/packages/get/README.id-ID.md new file mode 100644 index 0000000..6b0c07c --- /dev/null +++ b/packages/get/README.id-ID.md @@ -0,0 +1,1113 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +**Bahasa: Indonesia (file ini), [Inggris](README.md), [Orang Vietnam](README-vi.md), [Urdu](README.ur-PK.md), [China](README.zh-cn.md), [Portugis (Brazil)](README.pt-br.md), [Spanyol](README-es.md), [Russia](README.ru.md), [Polandia](README.pl.md), [Korea](README.ko-kr.md), [French](README-fr.md)** + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +- [Tentang Get](#tentang-get) +- [Instalasi](#instalasi) +- [Aplikasi Counter menggunakan GetX](#aplikasi-counter-menggunakan-getx) +- [Tiga Pilar](#tiga-pilar) + - [State management](#state-management) + - [Reactive State Manager](#reactive-state-manager) + - [Detail lebih lanjut mengenai state management](#detail-lebih-lanjut-mengenai-state-management) + - [Route management](#route-management) + - [Detail lebih lanjut mengenai route management](#detail-lebih-lanjut-mengenai-route-management) + - [Dependency management](#dependency-management) + - [Detail lebih lanjut mengenai dependency management](#detail-lebih-lanjut-mengenai-dependency-management) +- [Utilitas](#utilitas) + - [Internasionalisasi](#internasionalisasi) + - [Translasi](#translasi) + - [Menggunakan Translasi](#menggunakan-translasi) + - [Lokalisasi](#lokalisasi) + - [Mengubah Lokal](#mengubah-lokal) + - [Lokal Sistem](#lokal-sistem) + - [Mengubah Tema](#mengubah-tema) + - [GetConnect](#getconnect) + - [Konfigurasi Default](#konfigurasi-default) + - [Konfigurasi Kustom](#konfigurasi-kustom) + - [GetPage Middleware](#getpage-middleware) + - [Prioritas](#prioritas) + - [Redirect](#redirect) + - [OnPageCalled](#onpagecalled) + - [OnBindingsStart](#onbindingsstart) + - [OnPageBuildStart](#onpagebuildstart) + - [OnPageBuilt](#onpagebuilt) + - [OnPageDispose](#onpagedispose) + - [API Lanjutan Lainnya](#api-lanjutan-lainnya) + - [Pengaturan Global Opsional dan Konfigurasi Manual](#pengaturan-global-opsional-dan-konfigurasi-manual) + - [Local State Widgets](#local-state-widgets) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [Tips berguna](#tips-berguna) + - [GetView](#getview) + - [GetResponsiveView](#getresponsiveview) + - [Cara pakai](#cara-pakai) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [Breaking change dari 2.0](#breaking-change-dari-20) +- [Mengapa Getx?](#mengapa-getx) +- [Komunitas](#komunitas) + - [Channel Komunitas](#kanal-komunitas) + - [Cara berkontribusi](#cara-berkontribusi) + - [Artikel dan Video](#artikel-dan-video) + +# Tentang Get + +- GetX adalah solusi ekstra-ringan dan powerful untuk Flutter. Ini mengkombinasikan state management dengan performa tinggi, injeksi dependensi yang cerdas, dan route management secara singkat dan praktis. + +- GetX memiliki 3 prinsip dasar, yang menjadi prioritas untuk semua resource yang ada di dalamnya: **PRODUKTIFITAS, PERFORMA DAN ORGANISASI** + + - **PERFORMA:** GetX fokus pada performa dan konsumsi resource minimum. GetX tidak menggunakan Stream atau ChangeNotifier. + + - **PRODUKTIFITAS:** GetX menggunakan sintaks yang mudah dan nyaman. Tidak peduli apa yang akan anda lakukan, akan selalu ada cara yang lebih mudah dengan GetX. Ini akan menghemat waktu development, dan meng-ekstrak performa maksimum pada aplikasi anda. + Umumnya, developer akan selalu berhubungan dengan penghapusan controller dari memori. Dengan GetX, ini tidak diperlukan, karena resource akan dihapus dari memori secara default ketika tidak digunakan. Jika anda ingin menyimpannnya kedalam memori, anda harus secara eksplisit mendeklarasikan "permanent: true" pada dependensi anda. Dengan begitu, selain menghemat waktu, anda juga mengurangi resiko memiliki dependensi yang tidak diperlukan dalam memori. Pemuatan dependensi juga bersifat "lazy" secara default. + + - **ORGANISASI:** GetX memungkinkan pemisahan View, Presentation Logic, Business Logic, Dependency Injection, dan Navigasi. + Anda tidak perlu konteks untuk berpindah antar halaman. Jadi, anda tidak lagi bergantung pada widget tree (visualisasi) untuk hal ini. Anda tidak perlu konteks untuk mengakses controller/bloc melalui InheritedWidget. Dengan ini, anda benar benar memisahkan presentation logic dan business logic dari lapisan visual. Anda tidak perlu menginjeksi kelas Controller/Model/Bloc kedalam widget tree melalui multiprovider, untuk hal ini GetX menggunakan fitur dependency injection nya sendiri, memisahkan DI dari View secara total. + Dengan GetX, anda tahu dimana harus mencari setiap fitur dalam aplikasi anda, memiliki kode yang bersih secara default. Ini selain untuk memfasilitasi maintenance, membuat pembagian modul, sesuatu yang hingga saat itu di Flutter tidak terpikirkan, sesuatu yang sangat mungkin. + BLoC adalah permulaan awal dalam meng-organisir kode di Flutter, ini memisahkan business logic dari visualisasi. GetX adalah evolusi natural dari ini, tidak hanya memisahkan business logic, tapi juga presentation logic. Injeksi dependensi dan route juga dipisahkan sebagai bonus, dan lapisan data benar-benar terpisah secara menyeluruh. Anda tahu dimana semuanya berada, dan segalanya dengan cara yang lebih mudah daripada membuat sebuah hello world. + GetX adalah cara termudah, praktis, dan scalable untuk membangun aplikasi dengan performa tinggi menggunakan Flutter SDK, dengan ekosistem besar di sekelilingnya yang bekerjasama secara sempurna, mudah dipahami untuk pemula, dan akurat untuk ahli. Aman, stabil, up-to-date, dan menawarkan banyak cakupan build-in API yang tidak tersedia di dalam default Flutter SDK. + +- GetX tidak "bloated". Dirinya memiliki banyak fitur yang memungkinkan anda memulai programming tanpa mengkhawatirkan apapun, namun setiap fiturnya terletak didalam kontainer terpisah, dan hanya dimulai setelah digunakan. Jika anda hanya menggunakan State Management, hanya State Management yang akan di-compile. Jika anda hanya menggunakan routes, state management tidak akan di-compile. + +- GetX memiliki ekosistem yang besar, komunitas yang juga besar, banyak kolaborator, dan akan di maintenance selama Flutter ada. GetX juga mampu berjalan dengan kode yang sama di Android, iOS, Web, Mac, Linux, Windows, dan server anda. +**Juga memungkinkan untuk me-reuse kode yang dibuat di frontend ke backend dengan [Get Server](https://github.com/jonataslaw/get_server)**. + +**Selain itu, seluruh proses development bisa di automasi secara menyeluruh, untuk keduanya (server dan frontend) menggunakan [Get CLI](https://github.com/jonataslaw/get_cli)**. + +**Selain itu, untuk lebih meningkatkan produktifitas anda, kami memiliki [ekstensi untuk VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) dan [ekstensi untuk Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)** + +# Instalasi + +Tambahkan Get kedalam file `pubspec.yaml` anda: + +```yaml +dependencies: + get: +``` + +Import get didalam file dimana get akan digunakan: + +```dart +import 'package:get/get.dart'; +``` + +# Aplikasi Counter menggunakan GetX + +Proyek "counter" yang dibuat secara default ketika membuat proyek Flutter memiliki lebih dari 100 baris (termasuk comment). Untuk menunjukkan kekuatan Get, kami akan mendemonstrasikan bagaimana cara membuat "counter" yang mengubah state setiap klik, berpindah, dan berbagi state antar halaman, semua dalam cara yang terorganisir, memisahkan business logic dari view, dalam HANYA 26 BARIS KODE TERMASUK COMMENT. + +- Langkah 1: + Tambahkan "Get" sebelum MaterialApp, mengubahnya menjadi GetMaterialApp + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- Catatan: ini tidak mengubah MaterialApp bawaan Flutter, GetMaterialApp bukan sebuah MaterialApp yang dimodifikasi, itu hanyalah sebuah Widget yang telah dikonfigurasi sebelumnya, yang mana memiliki default MaterialApp sebagai child. Anda bisa mengkonfigurasinya secara manual, namun hal itu benar-benar tidak diperlukan. GetMaterialApp akan membuat route, menginjeksinya, menginjeksi translasi/terjemahan, dan semua yang anda butuhkan untuk navigasi route. Jika anda hanya menggunakan Get untuk manajemen state atau manajemen dependensi, tidak perlu menggunakan GetMaterialApp. GetMaterialApp diperlukan untuk route, snackbar, internasionalisasi/terjemahan, bottomSheet, dialog, dan high-level API yang berhubungan dengan route dan ketiadaan konteks. + +- Catatan²: Langkah ini hanya diperlukan jika anda akan menggunakan manajemen route (`Get.to()`, `Get.back()` dan seterusnya). Jika anda tidak menggunakannya, langkah 1 tidak diperlukan. + +- Langkah 2: + Buat file baru untuk business logic dan taruh semua variabel, metode, dan kontroler didalamnya. + Anda bisa membuat variabel apapun menjadi "observable" menggunakan notasi tambahan ".obs". + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- Langkah 3: + Buat file baru untuk View, gunakan StatelessWidget dan hemat penggunaan RAM, dengan Get, anda mungkin tidak perlu lagi menggunakan StatefulWidget. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Instansiasi kelas anda menggunakan Get.put() untuk membuatnya tersedia untuk seluruh "child" route dibawahnya. + final Controller c = Get.put(Controller()); + + return Scaffold( + // Gunakan Obx(() => ...) untuk mengupdate Text() ketika `count` berubah. + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // Ganti 8 baris Navigator.push menggunan Get.to() agar lebih sederhana. Anda tidak perlu `context`. + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // Anda bisa meminta Get untuk menemukan kontroler yang digunakan di halaman lain dan redirect ke halaman itu. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Akses variabel `count` yang telah di update. + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +Hasil: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +Ini adalah proyek sederhana, namun sudah membuatnya terlihat jelas betapa powerful kemampuan yang dimiliki Get. Sepanjang proyek anda berkembang, perbedaan ini akan menjadi lebih signifikan. + +Get di desain untuk bekerja dalam tim, namun juga memudahkan pekerjaan untuk developer perseorangan dan membuatnya menjadi lebih sederhana. + +Tingkatkan deadline anda, antarkan semuanya tanpa kehilangan performa. Get bukan untuk semua orang, namun jika anda tersinggung dengan frasa tersebut, Get cocok untukmu! + +# Tiga Pilar + +## State management + +Get memiliki dua state manager berbeda: Simple state manager (kami menyebutnya GetBuilder) dan Reactive state manager (GetX/Obx) + +### Reactive State Manager + +Reactive programming bisa meng-alienasi banya orang karena katanya, sulit dimengerti. GetX mengubah reactive programming menjadi sesuatu yang cukup sederhana: + +- Anda tidak perlu membuat StreamController. +- Anda tidak perlu membuat StreamBuilder untuk setiap variabel. +- Anda tidak perlu membuat kelas untuk setiap state. +- Anda tidak perlu membuat get untuk sebuah value awal (initial value). +- Anda tidak perlu menggunakan generator kode. + +Reactive programming dengan Get semudah menggunakan setState. + +Bayangkan anda memiliki variabel nama, dan setiap kali anda mengubahnya, semua widget yang menggunakannya akan berubah secara otomatis. + +Ini variabel count anda: + +```dart +var name = 'Jonatas Borges'; +``` + +Untuk membuatnya "observable", anda hanya perlu menambahkan ".obs" di belakangnya: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +Dan didalam UI, ketika anda ingin menampilkan value dan update tampilan ketika value itu berubah, cukup lakukan ini: + +```dart +Obx(() => Text("${controller.name}")); +``` + +Selesai! _Sesederhana_ itu. + +### Detail lebih lanjut mengenai state management + +**Baca penjelasan lebih lanjut tentang state management [disini](./documentation/id_ID/state_management.md). Disana anda akan melihat contoh lebih banyak dan juga perbedaan diantara simple state manager dengan reactive state manager** + +Anda akan mendapatkan pemahaman yang baik tentang kekuatan dari GetX. + +## Route management + +Jika anda ingin menggunakan routes/snackbars/dialogs/bottomsheets tanpa context, GetX luar biasa cocok untuk anda, lihat ini: + +Tambahkan "Get" sebelum MaterialApp, mengubahnya menjadi GetMaterialApp + +```dart +GetMaterialApp( // Sebelumnya: MaterialApp( + home: MyHome(), +) +``` + +Pindah ke halaman baru: + +```dart + +Get.to(NextScreen()); +``` + +Pindah ke halaman baru menggunakan nama. Baca detail lebih lanjut tentang penamaan route [disini](./documentation/id_ID/route_management.md#navigation-with-named-routes) + +```dart + +Get.toNamed('/details'); +``` + +Untuk menutup snackbar, dialog, bottomsheet, atau apapun yang normalnya anda tutup menggunakan Navigator.pop(context); + +```dart +Get.back(); +``` + +Untuk pergi ke halaman baru dan mencegah user kembali ke halaman sebelumnya (biasanya digunakan untuk SplashScreen, LoginScreen, dsb). + +```dart +Get.off(NextScreen()); +``` + +Untuk pergi ke halaman baru dan batalkan navigasi sebelumnya (berguna untuk shopping cart, polls, dan test). + +```dart +Get.offAll(NextScreen()); +``` + +Sadarkah bahwa anda tidak menggunakan context sama sekali untuk hal tersebut? Itu adalah keuntungan terbesar dalam menggunakan Get route management. Dengan ini, anda bisa mengeksekusi semua metode dari controller, tanpa ragu. + +### Detail lebih lanjut mengenai route management + +**Get bekerja dengan named route dan juga menawarkan kontrol dengan level yang lebih rendah untuk navigasimu! Dokumentasinya ada [disini](./documentation/id_ID/route_management.md)** + +## Dependency management + +Get memiliki dependency manager sederhana dan powerful yang memungkinkan anda mendapatkan kelas yang setara dengan Bloc atau Controller hanya dengan 1 baris kode, tanpa Provider context, tanpa inheritedWidget: + +```dart +Controller controller = Get.put(Controller()); +``` + +- Catatan: Jika anda menggunakan State Manager milik Get, harap untuk lebih memperhatikan [Bindings](./documentation/id_ID/dependency_management.md#bindings) api, yang mana akan membuat pengkoneksian View terhadap Controller jadi lebih mudah. + +Daripada menginstansiasi kelas anda didalam kelas yang anda gunakan, cukup lakukan hal itu di dalam Get instance, ini akan membuatnya tersedia di semua tempat di Aplikasimu. Jadi anda bisa menggunakan controller (atau class Bloc) secara normal. + +**Tips:** Dependency Management Get terpisah dari bagian lain dari package, jadi jika sebagai contoh aplikasi anda sudah menggunakan state manager (tidak peduli apapun itu), anda tidak perlu menulis ulang sama sekali, anda bisa menggunakan dependency injection tanpa masalah. + +```dart +controller.fetchApi(); +``` + +Bayangkan anda bernavigasi melewati route yang sangat banyak, dan anda membutuhkan data yang tertinggal didalam controller jauh di belakang route sebelumnya, anda akan butuh state manager dikombinasikan dengan Provider atau Get_it, benar kan? Tidak dengan Get. Anda hanya perlu meminta Get untuk "menemukan" controllernya, anda tidak perlu dependensi tambahan: + +```dart +Controller controller = Get.find(); +// Ya, terlihat seperti Sulap, Get akan menemukan controller anda, dan akan mengantarkannya ke lokasi anda. +// Anda bisa memiliki 1 juta controller terinisialisasi, Get akan selalu memberimu controller yang tepat. +``` + +Dan setelahnya anda bisa memperoleh data yang tertinggal sebelumnya: + +```dart +Text(controller.textFromApi); +``` + +### Detail lebih lanjut mengenai dependency management + +**Baca penjelasan lebih lanjut tentang dependency management [disini](./documentation/id_ID/dependency_management.md)** + +# Utilitas + +## Internasionalisasi + +### Translasi + +Translasi disimpan sebagai key-value map sederhana. +Untuk menambahkan translasi kustom, buat sebuah kelas dan extend `Translations`. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'id_ID': { + 'hello': 'Halo Dunia', + } + }; +} +``` + +#### Menggunakan Translasi + +Cukup tambahkan `.tr` setelah key yang disebutkan dan value nya akan diterjemahkan, menggunakan value awal dari `Get.locale` dan `Get.fallbackLocale`. + +```dart +Text('title'.tr); +``` + +### Lokalisasi + +Berikan parameter ke `GetMaterialApp` untuk mendefinisikan lokal dan translasi. + +```dart +return GetMaterialApp( + translations: Messages(), // gunakan translasi yang anda buat + locale: Locale('id', 'ID'), // translasi akan ditampilkan di lokal ini + fallbackLocale: Locale('en', 'US'), // berikan lokal penumpu untuk berjaga-jaga jika lokal yang tidak valid dipilih +); +``` + +#### Mengubah Lokal + +Panggil `Get.updateLocale(locale)` untuk memperbarui lokal. Setelahnya, translasi akan menggunakan lokal baru. + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### Lokal Sistem + +Untuk membaca lokal sistem, anda bisa menggunakan `Get.deviceLocale`. + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## Mengubah Tema + +Harap untuk tidak menggunakan widget dengan level lebih tinggi daripada `GetMaterialApp` untuk memperbaruinya. Ini akan menyebabkan "duplicate keys". Banyak orang terbiasa menggunakan cara lama untuk membuat sebuah "ThemeProvider" widget hanya untuk mengubah tema aplikasi anda, dan ini tentu saja TIDAK diperlukan dengan **GetX™**. + +Anda bisa membuat tema kustom anda sendiri dan cukup menambahkannya kedalam `Get.changeTheme` tanpa boilerplate: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +Jika anda ingin membuat sesuatu seperti tombol yang mengubah Tema ketika `onPressed`, anda bisa mengkombinasikan dua **GetX™** API: + +- API yang melakukan pengecekan terhadap tema gelap `Get.isDarkMode`. +- Dan API pengubah tema `Get.changeTheme`, anda cukup meletakannya didalam `onPressed`: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +Ketika `.darkmode` aktif, ini akan mengubah aplikasi anda ke _light theme_, dan sebaliknya, jika _light theme_ sedang aktif, ini akan mengubah aplikasi anda ke _dark theme_. + +## GetConnect + +GetConnect adalah cara mudah untuk berkomunikasi dari backend ke frontend menggunakan http atau websocket. + +### Konfigurasi Default + +Anda bisa secara sederhana meng-extend GetConnect dan menggunakan GET/POST/PUT/DELETE/SOCKET untuk berkomunikasi dengan REST API atau Websocket anda. + +```dart +class UserProvider extends GetConnect { + // Get request + Future getUser(int id) => get('http://youapi/users/$id'); + // Post request + Future postUser(Map data) => post('http://youapi/users', body: data); + // Post request dengan File + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` + +### Konfigurasi Kustom + +GetConnect sangat bisa di disesuaikan, anda bisa mendefinisikan base URL, Response Modifier, Request Modifier, Authenticator, dan bahkan jumlah percobaan akses ulang (retry) yang mana akan mencoba meng-autentikasi dirinya sendiri, sebagai tambahan, anda juga bisa mendefinisikan dekoder standar yang akan mengubah seluruh request kedalam Model anda tanpa konfigurasi tambahan. + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // Semua request akan melewati jsonEncode, jadi, CasesModel.fromJson() + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; // Ini akan men-setting baseUrl ke + // Http dan websocket jika digunakan tanpa [httpClient] + + // Ini akan mengaitkan properti 'apikey' kedalam header dari semua request. + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // Bahkan jika server mengirim data dari negara "Brazil" + // itu tidak akan pernah ditampilkan ke user, karena anda menghapus + // data tersebut sebelum response, bahkan sebelum response diantarkan. + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazilll'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // Sesuaikan header + request.headers['Authorization'] = "$token"; + return request; + }); + + // Authenticator akan dipanggil 3 kali jika + // HttpStatus == HttpStatus.unauthorized + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## GetPage Middleware + +GetPage sekarang memiliki properti baru yang menerima list GetMiddleware dan menjalankannya dalam urutan spesifik. + +**Catatan**: Ketika GetPage memiliki middleware, seluruh child dari halaman tersebut akan secara otomatis memiliki middleware yang sama. + +### Prioritas + +Urutan dari Middleware yang akan dijalankan bisa diatur berdasarkan prioritas didalam GetMiddleware. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` + +middleware diatas akan dijalankan dengan urutan sebagai berikut **-8 => 2 => 4 => 5** + +### Redirect + +Fungsi ini akan terpanggil ketika halaman dari route yang dipanggil sedang dicari. RouteSettings diperlukan untuk mengatur tujuan dari fungsi redirect. Atau berikan null jika tidak ingin ada redirect. + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### OnPageCalled + +Fungsi ini akan terpanggil ketika halaman yang dituju dipanggil sebelum apapun dibuat, +anda bisa menggunakannya untuk mengubah sesuatu tentang halaman tersebut atau +berikan halaman baru. + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +Fungsi ini akan terpanggil tepat sebelum Binding ter-inisialisasi. +Disini anda bisa mengubah Binding untuk halaman yang dituju. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +Fungsi ini akan terpanggil tepat setelah Binding ter-inisialisasi. +Disini anda bisa melakukan sesuatu sebelum halaman yang dituju dibuat. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### OnPageBuilt + +Fungsi ini akan terpanggil tepat setelah fungsi `GetPage.page` terpanggil dan akan memberikan anda hasil dari fungsinya. Dan mengambil widget yang akan ditampilkan. + +### OnPageDispose + +Fungsi ini akan terpanggil tepat setelah semua objek yang berhubungan (Controller, Views, ...) ter-dispose dari halaman. + +## API Lanjutan Lainnya + +```dart +// memberikan argument dari halaman yang sedang ditampilkan +Get.arguments + +// memberikan nama dari route sebelumnya +Get.previousRoute + +// memberikan akses raw route, contoh: rawRoute.isFirst() +Get.rawRoute + +// memberikan akses terhadap Routing API dari GetObserver +Get.routing + +// cek apakah snackbar sedang tampil +Get.isSnackbarOpen + +// cek apakah dialog sedang tampil +Get.isDialogOpen + +// cek apakah bottomsheet sedang tampil +Get.isBottomSheetOpen + +// hapus satu route +Get.removeRoute() + +// kembali berturut-turut hingga predikat mereturn nilai true. +Get.until() + +// pergi ke halaman selanjutnya dan hapus semua route sebelumnya hingga predikat mereturn nilai true. +Get.offUntil() + +// pergi ke halaman selanjutnya menggunakan nama dan hapus semua route sebelumnya hingga predikat mereturn nilai true. +Get.offNamedUntil() + +// Cek di platform apa aplikasi sedang berjalan +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +// Cek tipe perangkat +GetPlatform.isMobile +GetPlatform.isDesktop +// Semua platform didukung secara independen di web! +// Anda bisa mengetahui apakah anda menjalankannya didalam browser +// di Windows, iOS, OSX, Android, dsb. +GetPlatform.isWeb + + +// Sama dengan : MediaQuery.of(context).size.height, +// tapi immutable. +Get.height +Get.width + +// Memberikan konteks saat ini dari sebuah Navigator +Get.context + +// Memberikan konteks dari snackbar/dialog/bottomsheet di Gives the latar depan, dimanapun di kode anda +Get.contextOverlay + +// Catatan: metode berikut adalah sebuah perluasan konteks. Berhubung anda +// memiliki akses terhadap konteks dimanapun di UI anda, anda bisa menggunakannya dimanapun di kode UI + +// Jika anda memerlukan height/width yang bisa dirubah (seperti Desktop atau browser yang bisa di sesuaikan) anda akan memerlukan konteks +context.width +context.height + +// Memberikan anda kemampuan untuk mendefinisikan separuh layar, sepertiga, dan seterusnya. +// Berguna untuk aplikasi responsive. +// param dibagi dengan (double) optional - default: 1 +// param dikurangi dengan (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// Mirip seperti MediaQuery.of(context).size +context.mediaQuerySize() + +/// Mirip seperti MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// Mirip seperti MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// Mirip seperti MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// Mirip seperti MediaQuery.of(context).orientation; +context.orientation() + +/// Cek apakah perangkat sedang dalam mode lansekap +context.isLandscape() + +/// Cek apakah perangkat sedang dalam mode portrait +context.isPortrait() + +/// Mirip seperti MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// Mirip seperti MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// Dapatkan shortestSide dari layar +context.mediaQueryShortestSide() + +/// True jika layar lebih besar dari 800 +context.showNavbar() + +/// True jika shortestSide kurang dari 600p +context.isPhone() + +/// True jika shortestSide lebih besar dari 600p +context.isSmallTablet() + +/// True jika shortestSide lebih besar dari 720p +context.isLargeTablet() + +/// True jika perangkat adalah sebuah Tablet +context.isTablet() + +/// Memberikan sebuah value berdasarkan ukuran layar +/// dapat memberi value untuk: +/// watch: jika shortestSide lebih kecil dari 300 +/// mobile: jika shortestSide lebih kecil dari 600 +/// tablet: jika shortestSide lebih kecil dari 1200 +/// desktop: jika lebar lebih besar dari 1200 +context.responsiveValue() +``` + +### Pengaturan Global Opsional dan Konfigurasi Manual + +GetMaterialApp mengkonfigurasi semuanya untuk anda, namun jika anda ingin mengkonfigurasi Get secara manual. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +Anda juga bisa menggunakan Middleware anda sendiri melalui `GetObserver`, ini tidak akan mempengaruhi apapun. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Disini + ], +); +``` + +Anda bisa membuat _Pengaturan Global_ untuk `Get`. Cukup tambahkan `Get.config` kedalam kode anda sebelum berpindah ke route manapun. +Atau lakukan secara langsung di `GetMaterialApp` + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +Anda bisa secara opsional me-redirect seluruh pesan logging dari `Get`. +Jika anda ingin menggunakan logging buatan anda sendiri, logging package favorit, +dan ingin meng-capture lognya: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // oper message ke logging package favorit anda disini + // harap dicatat bahwa meskipun enableLog: false, pesan log akan di-push dalam callback ini, + // anda dapat memeriksa flag-nya jika anda mau melalui GetConfig.isLogEnable +} + +``` + +### Local State Widgets + +Widget ini memungkinkan anda untuk mengelola satu nilai, dan menjaga state emphemeral dan lokal. +Kita memiliki rasa untuk Reactive dan Simple. +Contohnya, anda mungkin menggunakannya untuk men-toggle obscureText di sebuah `TextField`, mungkin membuat +Expandable Panel kustom, atau mungkin memodifikasi index saat ini dalam `BottomNavigationBar` sembari mengganti konten +dari body didalam `Scaffold` + +#### ValueBuilder + +Sebuah simplifikasi dari `StatefulWidget` yang berfungsi dengan sebuah callback `.setState` yang menerima value yang telah diperbarui. + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // signaturenya sama! anda bisa menggunakan ( newValue ) => updateFn( newValue ) + ), + // jika anda perlu memanggil sesuatu diluar builder method. + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### ObxValue + +Mirip seperti [`ValueBuilder`](#valuebuilder), tapi ini versi Reactive nya, anda bisa menaruh Rx instance (ingat .obs?) dan +akan ter-update secara otomatis... keren kan? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx memiliki sebuah _callable_ function! Anda bisa menggunakan (flag) => data.value = flag, + ), + false.obs, +), +``` + +## Tips berguna + +`.obs`ervables (juga dikenal sebagai _Rx_ Types) memiliki beragam metode dan operator internal. + +> Sangat umum untuk _percaya_ bahwa sebuah properti dengan `.obs` **ADALAH** nilai aktual... jangan salah! +> Kami menghindari Type declaration dari sebuah variabel, karena compiler Dart cukup pintar, dan kode nya +> terlihat lebih bersih, tapi: + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + +Meskipun `message` _mengeluarkan output_ nilai String aktual, tipenya adalah **RxString**! + +Jadi, anda tidak bisa melakukan `message.substring( 0, 4 )`. +Anda perlu mengakses `value` aslinya didalam _observable_: +Cara yang paling "sering digunakan" adalah `.value`, tapi, tahukah anda bahwa anda juga bisa menggunakan... + +```dart +final name = 'GetX'.obs; +// hanya "memperbarui" stream, jika nilainya berbeda dari sebelumnya. +name.value = 'Hey'; + +// Seluruh properti Rx "bisa dipanggil" dan akan mereturn nilai baru. +// tapi cara ini tidak menerima `null`, UI-nya tidak akan rebuild. +name('Hello'); + +// ini seperti getter, mengeluarkan output 'Hello'. +name(); + +/// angka: + +final count = 0.obs; + +// Anda bisa menggunakan semua operasi non-mutable dari primitif num! +count + 1; + +// Hati hati! ini hanya valid jika `count` tidak final, melainkan var +count += 1; + +// Anda juga bisa melakukan komparasi antar nilai: +count > 2; + +/// boolean: + +final flag = false.obs; + +// bertukar nilai antara true/false +flag.toggle(); + + +/// semua tipe: + +// Atur `value` menjadi null. +flag.nil(); + +// Semua operasi toString(), toJson() dikirimkan ke `value` +print( count ); // memanggil `toString()` didalamnya untuk RxInt + +final abc = [0,1,2].obs; +// Mengkonversi nilai dari Array json, mengeluarkan output RxList +// Json didukung oleh semua tipe Rx! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList dan RxSet adalah tipe Rx spesial, mereka meng-extends native type masing-masing. +// tapi anda bisa bekerja menggunakan List sebagai list biasa, meskipun reactive! +abc.add(12); // memasukkan 12 kedalam list, dan MEMPERBARUI stream. +abc[3]; // seperti List, membaca index ke 3. + + +// persamaan berfungsi dengan Rx dan value nya, namun hashCode nya selalu diambil dari value +final number = 12.obs; +print( number == 12 ); // mengeluarkan output: true + +/// Model Rx Kustom: + +// toJson(), toString() ditangguhkan ke child, jadi anda bisa mengimplementasi override pada mereka dan print() observable nya secara langsung + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user` memang "reaktif", tapi properti didalamnya TIDAK REAKTIF! +// Jadi, jika kita mengubah variabel didalamnya... +user.value.name = 'Roi'; +// Widget tidak akan rebuild!, +// `Rx` tidak mengetahui apapun ketika anda mengubah sesuatu didalam user. +// Jadi, untuk kelas kustom, kita perlu secara manual "memberi tahu" perubahannya. +user.refresh(); + +// atau kita bisa menggunakan `update()` method! +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` + +#### GetView + +Saya menyukai Widget ini, sangat simpel dan berguna! + +Adalah sebuah `const Stateless` Widget yang memiliki getter `controller` untuk `Controller` yang terdaftar, itu saja. + +```dart + class AwesomeController extends GetxController { + final String title = 'My Awesome View'; + } + + // SELALU ingat untuk memberikan `Type` yang anda gunakan untuk mendaftarkan controller anda! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // cukup panggil `controller.something` + ); + } + } +``` + +#### GetResponsiveView + +Extend widget ini untuk membuat responsive view. +widget ini mengandung properti `screen` yang memiliki semua +informasi tentang ukuran layar dan tipenya. + +##### Cara pakai + +Anda memiliki dua opsi untuk mem-buildnya. + +- dengan `builder` method yang anda return ke widget yang akan di-build. +- dengan metode `desktop`, `tablet`,`phone`, `watch`. method +spesifik akan dibuat ketika tipe layar cocok dengan method. +ketika layarnya adalah [ScreenType.Tablet] maka method `tablet` +akan di eksekusi dan seterusnya. +**Catatan:** Jika anda menggunakan metode ini, mohon atur properti `alwaysUseBuilder` ke `false` + +Dengan properti `settings` anda bisa mengatur batasan lebar untuk tipe layar. + +![example](https://github.com/SchabanBo/get_page_example/blob/master/docs/Example.gif?raw=true) +Code to this screen +[code](https://github.com/SchabanBo/get_page_example/blob/master/lib/pages/responsive_example/responsive_view.dart) + +#### GetWidget + +Kebanyakan orang tidak tahu untuk apa Widget ini, atau benar benar membingungkan penggunaannya. +Kasus penggunaannya sangat langka, namun sangat spesifik: Melakukan `cache` terhadap Controller. +Karena _cache_, tidak bisa dijadikan `const Stateless`. + +> Lalu, kapan anda harus men-"cache" sebuah Controller? + +Jika anda menggunakan, fitur "tidak terlalu umum" dari **GetX**: `Get.create()`. + +`Get.create(()=>Controller())` akan men-generate `Controller` baru setiap kali anda memanggil +`Get.find()`, + +Itulah dimana `GetWidget` bercahaya... karena anda bisa menggunakannya, sebagai contoh, +untuk menyimpan list dari sebuah Todo item. Jadi, jika widget ter-"rebuild", dia akan meyimpan controller yang sama. + +#### GetxService + +Kelas ini mirip seperti `GetxController`, dia berbagi lifecycle ( `onInit()`, `onReady()`, `onClose()`). +Tetapi tidak memiliki "logic" didalamnya. Dia hanya memberi tahu Sistem Dependency Injection **GetX**, bahwa subclass +ini **TIDAK BISA** dihapus dari memori. + +Jadi ini sangat berguna untuk memastikan "Service" anda selalu dapat dijangkau dan aktif dengan `Get.find()`. Seperti: +`ApiService`, `StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// AWAIT SERVICES INITIALIZATION. + runApp(SomeApp()); +} + +/// Adalah gerakan yang cerdas untuk membuat Service anda menginisialisasi sebelum anda menjalankan aplikasi Flutter +/// seperti anda bisa mengontrol flow eksekusi (mungkin anda perlu memuat beberapa konfigurasi tema, +/// apiKey, bahasa yang ditentukan oleh user...) jadi, load SettingSerice sebelum menjalankan ApiService. +/// supaya GetMaterialApp() tidak perlu rebuild, dan mengambil nilainya secara langsung. +void initServices() async { + print('starting services ...'); + /// Disini adalah dimana anda meletakkan get_storage, hive, inisialisasi shared_pref. + /// atau koneksi moor, atau apapun yang sifatnya async. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +The only way to actually delete a `GetxService`, is with `Get.reset()` which is like a +"Hot Reboot" of your app. So remember, if you need absolute persistence of a class instance during the +lifetime of your app, use `GetxService`. + +Satu-satunya cara untuk benar benar menghapus sebuah `GetxService`, adalah dengan `Get.reset()` dimana ini seperti +"Hot Reboot" dari aplikasi anda. Jadi ingat, jika anda butuh persistensi absolut dari sebuah instance kelas selama +masa hidup aplikasi anda, gunakan `GetxService`. + +# Breaking change dari 2.0 + +1- Tipe Rx: + +| Sebelum | Sesudah | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController dan GetBuilder sekarang digabungkan, anda tidak lagi perlu mengingat kontroler mana yang ingin anda gunakan, cukup gunakan GetxController, ini akan bekerja untuk simple state management dan reactive juga. + +2- NamedRoutes +Sebelumnya: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Sekarang: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +Mengapa berubah? +Seringkali, mungkin diperlukan untuk memutuskan halaman mana yang akan ditampilkan melalui sebuah parameter, atau login token, cara sebelumnya sangat tidak fleksibel dan tidak memungkinkan untuk melakukan hal ini. +Memasukkan data kedalam fungsi mengurangi konsumsi RAM secara signifikan, mengingat route tidak akan di alokasikan ke memori sejak aplikasi dimulai, dan ini memungkinkan kita melakukan ini: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# Mengapa Getx? + +1- Seringkali setelah Flutter update, banyak package anda yang akan berhenti bekerja. Terkadang compilation error terjadi, error yang sering muncul dan belum ada jawabannya, dan developer perlu mengetahui dimana errornya berasal, mencari errornya, lalu kemudian mencoba membuka sebuah isu di repository yang bersangkutan, dan melihat apakah problemnya terselesaikan. Get memusatkan resource utama untuk development (State, dependency dan route management), memungkinkan anda untuk menambahkan satu package kedalam pubspec, dan mulai bekerja. Setelah Flutter update, satu-satunya hal yang anda perlu lakukan adalah memperbarui dependensi Get, dan kembali bekerja. Get juga menyelesaikan isu kompatibilitas. Berapa kali sebuah versi dari sebuah package tidak kompatibel dengan versi lainnya, karena yang satu menggunakan sebuah dependensi dalam satu versi, dan yang lain menggunakan versi lainnya? Ini juga bukan sebuah masalah menggunakan Get, yang mana semua berada di package yang sama dan kompatibel secara penuh. + +2- Flutter mudah digunakan, Flutter luar biasa, tetapi Flutter masih memiliki beberapa boilerplate yang mungkin tidak diinginkan untuk kebanyakan developer, seperti `Navigator.of(context).push(context builder [...]`. Get menyederhanakan proses development. Daripada menulis 8 baris kode hanya untuk memanggil route, anda bisa menggunakan: `Get.to(Home())` dan selesai, anda akan pergi ke halaman selanjutnya. URL web dinamis adalah hal yang sangat menyakitkan untuk dilakukan dengan Flutter saat ini, dan dengan GetX sangat sederhana. Mengelola state di Flutter, dan megelola dependensi juga suatu hal yang menghasilkan banyak diskusi, dengan ratusan jenis pattern di pub. Tetapi tidak ada yang semudah menambahkan ".obs" di akhir variabel anda, dan meletakkan widget didalam Obx, dan selesai, semua update terhadap variabel tersebut akan secara otomatis terupdate di layar. + +3- Meringankan tanpa mengkhawatirkan performa. Performa Flutter sudah luar biasa, tetapi bayangkan anda menggunakan state manager, dan sebuah locator untuk mendistribusikan bloc/store/controller dsb, kelas. Anda perlu secara manual memanggil pengecualian terhadap dependensi ketika anda tidak membutuhkannya. Namun apakah anda pernah terfikirkan ketika simpelnya, anda menggunakan controller, dan tidak lagi digunakan oleh siapapun, akan dihapus dari memori? Itu yang GetX lakukan. Dengan SmartManagement, semua yang tidak digunakan akan dihapus dari memori, dan anda tidak perlu khawatir tentang apapun selain programming. Anda akan terjamin bahwa anda mengkonsumsi resource minimum yang diperlukan, bahkan tanpa harus membuat logic untuk hal ini. + +4- Actual decoupling. Anda mungkin pernah mendengar konsep "pisahkan view dari business logic". Ini bukanlah sebuah keanehan dari BLoC, MVC, MVVM, dan standard lainnya dalam market yang memiliki konsep ini. Namun, konsep ini terkadang termitigasi di Flutter karena penggunaan konteks. +Jika anda memerlukan konteks untuk menemukan InheritedWidget, anda membutuhkannya di view, atau mengirim konteks melalui parameter. Saya menemukan bahwa solusi ini sangat jelek, dan untuk bekerja dalam tim kami harus selalu memiliki sebuah ketergantungan pada business logic di dalam view. GetX adalah cara yang tidak lazim dengan metode standard, dan sementara itu tidak benar-benar secara penuh melarang penggunaan StatefulWidgets, InitState, dsb., ini selalu memiliki metode yang mirip dan bisa lebih bersih. Controller memiliki life cycle, dan ketika anda perlu membuat APIREST request sebagai contoh, anda tidak bergantung pada apapun didalam view. Anda bisa menggunakan onInit untuk menginisiasi pemanggilan http dan ketika datanya sampai, variabel akan dipopulasikan. GetX juga secara penuh reaktif (serius, dan bekerja dibawah stream), sekali items terisi, semua widget yang menggunakan variabel itu akan secara otomatis diperbarui didalam view. Ini memungkinkan orang orang dengan keahlian di bagian UI untuk bekerja hanya dengan widget, dan tidak perlu mengirim apapun ke business logic selain user event (seperti meng-klik sebuah tombol), sementara orang yang bekerja dengan business logic akan bebas membuat dan melakukan test terhadap business logic secara terpisah. + +Library ini akan terus diperbarui dan mengimplementasikan fitur baru. Jangan ragu untuk menawarkan PR dan berkontribusi ke mereka. + +# Komunitas + +## Channel Komunitas + +GetX memiliki komunitas yang sangat aktif dan membantu. Jika anda memiliki pertanyaan, atau membutuhkan bantuan mengenai penggunaan framework ini, bergabunglah dengan kanal komunitas kami, pertanyaan anda akan dijawab lebih cepat, dan akan menjadi tempat yang paling cocok. Repositori ini eksklusif untuk pembukaan isu dan permintaan resource, tapi jangan ragu untuk menjadi bagian dari Komunitas GetX. + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## Cara berkontribusi + +_Ingin berkontribusi kedalam proyek? Kami akan sangat bangga untuk menyorot anda sebagai salah satu dari kolaborator kami. Ini adalah beberapa point dimana anda bisa berkontribusi dan membuat Get (dan Flutter) jadi lebih baik_ + +- Membantu menerjemahkan readme ke dalam bahasa lain. +- Menambahkan dokumentasi ke dalam readme (banyak fungsi dari Get yang masih belum terdokumentasi). +- Menulis artikel atau membuat video mengajarkan tentang penggunaan Get (akan dimasukkan kedalam readme dan Wiki kami di masa yang akan datang). +- Menawarkan PR untuk kode/test. +- Menambahkan fungsi baru. + +Kontribusi dalam bentuk apapun dipersilahkan! + +## Artikel dan Video + +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial oleh [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video oleh Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video oleh Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video oleh Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video oleh Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video oleh Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management oleh [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection oleh [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation oleh Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video oleh Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article oleh Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - oleh App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - oleh App With Flutter. diff --git a/packages/get/README.ja-JP.md b/packages/get/README.ja-JP.md new file mode 100644 index 0000000..5f77d85 --- /dev/null +++ b/packages/get/README.ja-JP.md @@ -0,0 +1,1256 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + + +
+ +**言語** + + +[![英語](https://img.shields.io/badge/Language-English-blueviolet?style=for-the-badge)](README.md) +[![ベトナム語](https://img.shields.io/badge/Language-Vietnamese-blueviolet?style=for-the-badge)](README-vi.md) +[![インドネシア語](https://img.shields.io/badge/Language-Indonesian-blueviolet?style=for-the-badge)](README.id-ID.md) +[![ウルドゥー語](https://img.shields.io/badge/Language-Urdu-blueviolet?style=for-the-badge)](README.ur-PK.md) +[![中国語](https://img.shields.io/badge/Language-Chinese-blueviolet?style=for-the-badge)](README.zh-cn.md) +[![ポルトガル語](https://img.shields.io/badge/Language-Portuguese-blueviolet?style=for-the-badge)](README.pt-br.md) +[![スペイン語](https://img.shields.io/badge/Language-Spanish-blueviolet?style=for-the-badge)](README-es.md) +[![ロシア語](https://img.shields.io/badge/Language-Russian-blueviolet?style=for-the-badge)](README.ru.md) +[![ポーランド語](https://img.shields.io/badge/Language-Polish-blueviolet?style=for-the-badge)](README.pl.md) +[![韓国語](https://img.shields.io/badge/Language-Korean-blueviolet?style=for-the-badge)](README.ko-kr.md) +[![フランス語](https://img.shields.io/badge/Language-French-blueviolet?style=for-the-badge)](README-fr.md) +[![日本語](https://img.shields.io/badge/Language-Japanese-blueviolet?style=for-the-badge)](README-ja.md) + +
+ +- [Getとは](#Getとは) +- [インストール方法](#インストール方法) +- [GetXによるカウンターアプリ](#GetXによるカウンターアプリ) +- [三本柱](#三本柱) + - [状態管理](#状態管理) + - [リアクティブな状態管理](#リアクティブな状態管理) + - [状態管理に関する詳細ドキュメント](#状態管理に関する詳細ドキュメント) + - [Route管理](#Route管理) + - [Route管理に関する詳細ドキュメント](#Route管理に関する詳細ドキュメント) + - [依存オブジェクト管理](#依存オブジェクト管理) + - [依存オブジェクト管理に関する詳細ドキュメント](#依存オブジェクト管理に関する詳細ドキュメント) +- [ユーティリティ](#ユーティリティ) + - [多言語対応](#多言語対応) + - [翻訳ファイル](#翻訳ファイル) + - [翻訳ファイルの利用](#翻訳ファイルの利用) + - [ロケール](#ロケール) + - [ロケールの変更](#ロケールの変更) + - [システムのロケールを読み込む](#システムのロケールを読み込む) + - [Themeの変更](#Themeの変更) + - [GetConnect](#getconnect) + - [デフォルト設定](#デフォルト設定) + - [カスタム設定](#カスタム設定) + - [GetPageにミドルウェアを設定](#GetPageにミドルウェアを設定) + - [実行優先度](#実行優先度) + - [redirect](#redirect) + - [onPageCalled](#onpagecalled) + - [onBindingsStart](#onbindingsstart) + - [onPageBuildStart](#onpagebuildstart) + - [onPageBuilt](#onpagebuilt) + - [onPageDispose](#onpagedispose) + - [その他API](#その他API) + - [オプションのグローバル設定と手動設定](#オプションのグローバル設定と手動設定) + - [ローカルステートWidget](#ローカルステートWidget) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [お役立ちTIPS](#お役立ちTIPS) + - [StateMixin](#statemixin) + - [GetView](#getview) + - [GetResponsiveView](#getresponsiveview) + - [使い方](#使い方]) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) + - [テストの実行](#テストの実行) + - [mockitoやmocktailを使う場合](#mockitoやmocktailを使う場合) + - [Get.reset()](#Get.reset()) + - [Get.testMode](#Get.testMode) +- [バージョン2.0からの破壊的変更](#バージョン2.0からの破壊的変更) +- [なぜGetXなのか](#なぜGetXなのか) +- [コミュニティ](#コミュニティ) + - [コミュニティチャンネル](#コミュニティチャンネル) + - [コントリビュート方法](#コントリビュート方法) + - [GetXに関する記事と動画](#GetXに関する記事と動画) + +# Getとは + +- GetXはFlutterのための超軽量でパワフルなソリューションです。高パフォーマンスな状態管理機能、インテリジェントな依存オブジェクト管理機能、そしてRoute管理機能の三本柱を軽量かつ実用的な形で組み合わせています。 + +- GetXは3つの基本原則を念頭に開発されています。 **【生産性、パフォーマンス、コードの分離性】** これらはライブラリ内のすべてのリソースに優先適用されている原則です。 + + - **パフォーマンス:** GetXは高いパフォーマンスと最小限のリソース消費を目標にしています。GetXはでは Stream および ChangeNotifier を利用しなくて済みます。 + + - **生産性:** GetXはシンプルで使い心地のいいシンタックスを採用しています。あなたの実現したい機能がどんなものであれ、GetXを使えばより簡単に実現できる方法が見つかるでしょう。開発にかかる時間を短縮し、あなたのアプリケーションのパフォーマンスを最大限引き出してくれます。 + + 開発者はメモリリソースの管理に気を配るのが常です。しかしGetXでは、リソースが使用されていないときはメモリから削除されるのがデフォルト動作のため、過度に気にかける必要はありません。(逆にメモリに残しておきたい場合は、依存オブジェクトをインスタンス化するメソッドを使う際に「permanent: true」と宣言してください)これにより時間が節約できますし、不要な依存オブジェクトがメモリ上に残るリスクも少なくなります。メモリへの読み込みについてもデフォルトは遅延読み込みであり、使用するときに初めてメモリ上に読み込まれます。 + + - **コードの分離性:** GetXを使うと、ビュー、プレゼンテーションロジック、ビジネスロジック、依存オブジェクトの注入、およびナビゲーション周りのコードを書き分けやすくなります。Routeのナビゲーションにはcontextを必要としないため、Widgetツリーに依存することはありません。ロジックについてもInheritedWidget経由でController/BLoCにアクセスする際のcontextは必要ありません。プレゼンテーションロジックとビジネスロジックをUIクラスから完全に切り離すことができます。また、Controller/モデル/BLoCのクラスを、`MultiProvider`を使ってWidgetツリーに注入する必要もありません。GetXでは独自の依存オブジェクト注入機能を使用し、ビュークラスからビューとは無関係なコードをなくすことができるのです。 + + GetXを使うことでアプリケーションの各機能がどこにあるのかがわかりやすくなり、自然と見やすいコードになります。メンテナンスが容易になるだけでなく、それまでのFlutterでは考えられなかったモジュール共有が簡単に実現できるようになりました。 + BLoCはこの分野におけるFlutterの出発点と言えるものでしたが、GetXはこれを正統進化させており、ビジネスロジックのみならずプレゼンテーションロジックも分離することができます。そのほかデータレイヤーはもちろん、依存オブジェクトやRouteの注入に関するコードも。どこに何が配置されているのか全体の見通しがしやすくなり、Hello Worldを表示させるかのように簡単にアプリの機能を利用できるようになるでしょう。 + Flutterアプリを作るならGetXは最も簡単で実用的、かつスケーラブルなソリューションです。強力なエコシステムも存在があるため、初心者にはわかりやすさ、プロには正確性を提供することができます。そしてFlutter SDKにはない幅広い種類のAPIを提供し、セキュアで安定的な環境を構築します。 + +- GetXは肥大化したライブラリではありません。何も気にせずすぐに開発を始められるよう多数の機能を標準で備えていますが、それぞれの機能は個別にコンテナに入っており、使用してはじめて起動します。状態管理機能しか利用していない場合はその機能だけがコンパイルされます。Route管理機能だけを利用していれば、状態管理機能がコンパイルされることはありません。 + +- GetXには巨大なエコシステム、コミュニティ、コラボレーターの存在があるため、Flutterが存在する限りメンテナンスされ続けます。またGetXもFlutterと同様にAndroid、iOS、Web、Mac、Linux、Windows、そしてあなたのサーバー上で、単一のコードから実行することができます。 + +**[Get Server](https://github.com/jonataslaw/get_server)を使うことで、フロントエンドで作成したコードをバックエンドで再利用することが可能です。** + +**さらに、[Get CLI](https://github.com/jonataslaw/get_cli)を使えば、サーバー側でもフロントエンド側でも開発プロセス全体を自動化することができます。** + +**また、生産性をさらに高めるためのツールとして、[VSCode用の拡張機能](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) と [Android Studio/Intellij用の拡張機能](https://plugins.jetbrains.com/plugin/14975-getx-snippets)があります。** + +# インストール方法 + +Getパッケージを pubspec.yaml に追加します: + +```yaml +dependencies: + get: +``` + +使用するときはこのようにインポートしてください: + +```dart +import 'package:get/get.dart'; +``` + +# GetXによるカウンターアプリ + +Flutterで新規プロジェクトを作成する際に表示されるカウンターアプリは、コメントを含めると100行以上あります。Getの実力を示すため、このカウンターアプリを可読性を重視した形で、コメントを含めてわずか26行のコードで作成する方法を紹介します。 + +- ステップ1: + MaterialAppの前に「Get」を足して、GetMaterialAppにします。 + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- 注1: GetMaterialAppはFlutterのMaterialAppに手を加えたものではありません。MaterialAppをchildに持ち、諸々の追加設定をしてくれるWidgetに過ぎません。この設定は手動でも可能ですが、その必要はありません。GetMaterialAppは、Routeの作成・注入、言語翻訳の注入など、ナビゲーションに必要なものをすべて注入してくれます。Getを状態管理や依存オブジェクト管理に限定して使用する場合は、GetMaterialAppを使用する必要はありません。GetMaterialAppは、Route、SnackBar、多言語対応、BottomSheet、Dialog、contextなしの高レベルAPIを利用する場合に必要です。 +- 注2: このステップは、Route管理機能(`Get.to()`や`Get.back()`など)を使用しない場合は、必要ありません。 + +- ステップ2: + ビジネスロジッククラスを作成し、そこに必要な変数、メソッド、コントローラをすべて配置します。 + 変数に ".obs" を付け足すことで、その変数の値の変化を監視することが可能になります。 + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- ステップ3: + ビューを作成します。StatelessWidgetを使用することでRAMが節約できます。GetではStatefulWidgetを使用する必要がなくなるかもしれません。 + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Get.put()を使ってクラスをインスタンス化することですべての子Routeで利用できるようになります。 + final Controller c = Get.put(Controller()); + + return Scaffold( + // countが変わるたびにTextを更新するにはObx(()=>)を使ってください。 + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // 8行使っていたNavigator.pushの代わりに短い Get.to()を使ってください。context不要です。 + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // 他のページで使われているコントローラーを見つけてきてくれます。 + final Controller c = Get.find(); + + @override + Widget build(context){ + // 最新のcount変数の値にアクセス + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +Result: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +これはシンプルな例ですが、すでにGetがいかに強力であるかがわかると思います。プロジェクトが大きければ大きいほど、この差はもっと開くでしょう。 + +Getはチームでの作業を想定して設計されていますが、個人開発者の仕事もシンプルにしてくれます。 + +パフォーマンスを落とさず納期までにすべて納品。Getはすべての人に向いているわけではありませんが、このフレーズにぴんと来た人には確実に向いています! + +# 三本柱 + +## 状態管理 + +Getの状態管理には、非リアクティブ(GetBuilder)と、リアクティブ(GetX/Obx)の2つのアプローチがあります。 + +### リアクティブな状態管理 + +リアクティブプログラミングは複雑であると言われ、多くの人に敬遠されています。GetXは、リアクティブプログラミングをシンプルなものに変えます: + +* StreamControllerを作る必要はありません。 +* 変数ごとにStreamBuilderをセットする必要はありません。 +* 状態ごとにクラスを作る必要はありません。 +* 初期値のためにgetを準備する必要はありません。 +- コードの自動生成をする必要がありません。 + +GetにおけるリアクティブプログラミングはsetStateと同じように簡単です。 + +例えば、名前の変数があって、それを変更するたびに、その名前を使っているすべてのWidgetを自動で更新したい場合。 + +```dart +var name = 'Jonatas Borges'; +``` + +このnameをObservable(監視可能)にするには, ".obs"を値の末尾に付けるだけです。 + +```dart +var name = 'Jonatas Borges'.obs; +``` + +UIでその値を表示し、値が変わるたびに内容を更新したい場合は次のようにします。 + +```dart +Obx(() => Text("${controller.name}")); +``` + +以上です。こんなに簡単なんですよ。 + +### 状態管理に関する詳細ドキュメント + +**状態管理に関するより詳細な説明を知りたい方は[こちらの日本語ドキュメント](./documentation/ja_JP/state_management.md)をご覧ください。多くの事例や、非リアクティブな状態管理とリアクティブな状態管理の違いについても説明されています。** + +GetXパワーがもたらす利点をより理解していただけると思います。 + +## Route管理 + +GetXはcontextなしでRoute/SnackBar/Dialog/BottomSheetを使用することができます。具体的に見ていきましょう。 + +いつものMaterialAppの前に「Get」を付け足して、GetMaterialAppにしましょう。 + +```dart +GetMaterialApp( // MaterialApp の前に Get + home: MyHome(), +) +``` + +新しいRouteに画面遷移するにはこのシンタックス。 + +```dart +Get.to(NextScreen()); +``` + +名前付きRouteに画面遷移するにはこのシンタックス。名前付きRouteの詳細は[こちらの日本語ドキュメント](./documentation/ja_JP/route_management.md#navigation-with-named-routes) + +```dart +Get.toNamed('/details'); +``` + +SnackBar、Dialog、BottomSheetなど、Navigator.pop(context)で閉じられるRouteはこれで閉じます。 + +```dart +Get.back(); +``` + +次の画面に移動した後、前の画面に戻れないようにする場合(スプラッシュスクリーンやログイン画面など)はこちら。 + +```dart +Get.off(NextScreen()); +``` + +次の画面に進み、前のRouteをすべてキャンセルする場合(ショッピングカート、アンケート、テストなど)はこちら。 + +```dart +Get.offAll(NextScreen()); +``` + +以上、contextを一度も使わなかったことに気付きましたか?これがGetでRoute管理を行う最大のメリットのひとつです。contextを使わないので、たとえばcontrollerクラスの中でも、これらのメソッドを実行することができます。 + +### Route管理に関する詳細ドキュメント + +**Getは名前付きRouteでも動作し、Routeの下位レベルの制御も可能です。詳細なドキュメントは[こちらの日本語ドキュメント](./documentation/ja_JP/route_management.md)にあります。** + +## 依存オブジェクト管理 + +Getにはシンプルで強力な依存オブジェクト注入機能があります。わずか1行のコードで、Provider contextやinheritedWidgetも使わず、BLoCやControllerのようなクラスのインスタンスを取得することができます。 + +```dart +Controller controller = Get.put(Controller()); // controller = Controller() とする代わりに +``` + +- 注: Getの状態管理機能を使用している場合は、Bindings APIにもご注目を。BindingsはビューとControllerを結びつけるのをより便利にしてくれます。 + +一つのクラスの中でControllerクラスをインスタンス化するのではなく、Getインスタンスの中でインスタンス化することで、アプリ全体でControllerが利用できるようになります。 + +**ヒント:** Getの依存オブジェクト注入機能の部分は、パッケージ全体の中でも他の部分と切り離されているので、たとえば、あなたのアプリがすでに状態管理機能を一部で使用していたとしても、それらを書き直す必要はなく、この依存オブジェクト注入機能をそのまま使用することができます。 + +```dart +controller.fetchApi(); +``` + +色々なRouteを行き来した後に、あるControllerクラスのデータにアクセスする必要が生じたとしましょう。ProviderやGet_itなら再びそのクラスに依存オブジェクトを注入する必要がありますよね?Getの場合は違います。Getでは「find」と依頼するだけで、追加の依存オブジェクトの注入は必要ありません。 + +```dart +Controller controller = Get.find(); +//マジックみたいですね。Getは正しいcontrollerをきちんと探してきてくれますよ。100万のcontrollerのインスタンスがあっても、Getは必ず正しいcontrollerを探し当てます。 +``` + +そして、findで取得したコントローラーのデータをこのように呼び出すことができます。 + +```dart +Text(controller.textFromApi); +``` + +### 依存オブジェクト管理に関する詳細ドキュメント + +**依存オブジェクト管理に関するより詳細な説明は[こちらの日本語ドキュメント](./documentation/ja_JP/dependency_management.md)をご覧ください。** + +# ユーティリティ + +## 多言語対応 + +### 翻訳ファイル + +翻訳ファイルはシンプルなキーと値のMapとして保持されます。 +翻訳を追加するには、クラスを作成して `Translations` を継承します。 + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### 翻訳ファイルの利用 + +指定されたキーに `.tr` (translateのtr)を追加するだけで、`Get.locale` と `Get.fallbackLocale` の現在の値をに沿って適切な言語に翻訳されます。 + +```dart +Text('title'.tr); +``` + +#### 単数系と複数形に対応 + +```dart +var products = []; +Text('singularKey'.trPlural('pluralKey', products.length, Args)); +``` + +#### パラメーターに対応 + +```dart +import 'package:get/get.dart'; + + +Map> get keys => { + 'en_US': { + 'logged_in': 'logged in as @name with email @email', + }, + 'es_ES': { + 'logged_in': 'iniciado sesión como @name con e-mail @email', + } +}; + +Text('logged_in'.trParams({ + 'name': 'Jhon', + 'email': 'jhon@example.com' + })); +``` + +### ロケール + +ロケールと翻訳を定義するため、`GetMaterialApp`にパラメータを渡します。 + +```dart +return GetMaterialApp( + translations: Messages(), // Translationsを継承したクラスのインスタンス + locale: Locale('en', 'US'), // このロケール設定に沿って翻訳が表示される + fallbackLocale: Locale('en', 'UK'), // 無効なロケールだったときのフォールバックを指定 +); +``` + +#### ロケールの変更 + +ロケールを変更するには、`Get.updateLocale(locale)`を呼び出します。翻訳は新しいロケールに沿ってなされます。 + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### システムのロケールを読み込む + +システムのロケールを読み込むには、`Get.deviceLocale`を使用します。 + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## Themeの変更 + +`GetMaterialApp`より上位のWidgetを使ってThemeを変更しないでください。Keyの重複を引き起こす可能性があります。アプリのThemeを変更するためには「ThemeProvider」Widgetを作成するという前時代的なアプローチが採られることが多いですが、**GetX™**ではこのようなことは必要ありません。 + +カスタムのThemeDataを作成したら、それを`Get.changeTheme`内に追加するだけです。 + +```dart +Get.changeTheme(ThemeData.light()); +``` + +もし、`onTap`でThemeを変更するボタンを作りたいのであれば、以下の2つの**GetX™** APIを組み合わせることができます。 + +- Dark Theme が使われているかどうかをチェックするAPI +- Theme を変えるAPI(ボタンの`onPressed`の中に設置できます) + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +Darkモードが有効であれば、_light theme_に切り替わり、Lightモードが有効なら、_dark theme_に切り替わります。 + +## GetConnect + +GetConnect は、http または websocket を使用してバックエンドとフロントエンド間の通信を行う機能です。 + +### デフォルト設定 + +GetConnectを拡張することで、GET/POST/PUT/DELETE/SOCKETメソッドを使用して、Rest APIやウェブソケットと通信することができます。 + +```dart +class UserProvider extends GetConnect { + // Get リクエスト + Future getUser(int id) => get('http://youapi/users/$id'); + // Post リクエスト + Future postUser(Map data) => post('http://youapi/users', body: data); + // File付き Post リクエスト + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` + +### カスタム設定 + +GetConnect は高度なカスタマイズが可能です。ベースUrlの定義はもちろん、リクエストヘッダーを足したり、レスポンスボディに変更を加えたり、認証情報を追加したり、認証回数の制限を設けたりすることができるほか、リクエストをModelに変換するデコーダを定義することもできます。 + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // デフォルトデコーダーをセット + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrlをセット + + // リクエストヘッダーに 'apikey' プロパティを付け足しています。 + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // サーバーが"Brazil"を含むデータを送ってきてもユーザーに表示されることはありません。 + // レスポンスがUIレイヤーに届けられる前にデータが取り除かれているからです。 + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazilll'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // ヘッダーをセット + request.headers['Authorization'] = "$token"; + return request; + }); + + // HttpStatus が HttpStatus.unauthorized である限り、 + // 3回まで認証が試みられます。 + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## GetPageにミドルウェアを設定 + +GetPageに新しいプロパティが追加され、GetMiddleWareのListを設定することができるようになりました。GetMiddleWareは設定した任意の順序で実行されます。 + +**注**: GetPageにミドルウェアを設定すると、そのページの子ページはすべて同じミドルウェアを自動的に持つことになります。 + +### 実行優先度 + +GetMiddlewareに設定したpriority(優先度)の若い順にミドルウェアが実行されます。 + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` + +この場合の実行順序は **-8 => 2 => 4 => 5** + +### redirect + +redirect関数は、Routeを呼び出してページが検索されると実行されます。リダイレクト先のRouteSettingsが戻り値となります。もしくはnullを与えれば、リダイレクトは行われません。 + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### onPageCalled + +onPageCalled関数は、ページが呼び出された直後に実行されます。 +この関数を使ってページの内容を変更したり、新しいページを作成したりすることができます。 + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### onBindingsStart + +onBindingsStart関数は、Bindingsが初期化される直前に実行されます。 +たとえば、ページのBindingsを変更することもできます。 + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### onPageBuildStart + +onPageBuildStart関数は、Bindingsが初期化された直後、ページWidgetが作成される前に実行されます。 + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### onPageBuilt + +onPageBuilt関数は、GetPage.page(ページのビルダー)が呼び出された直後に実行され、表示されるWidgetを結果として受け取ることができます。 + +### onPageDispose + +onPageDispose関数は、ページに関するすべてのオブジェクト(Controller、ビューなど)が破棄された直後に実行されます。 + +## その他API + +```dart +// 現在の画面に渡されているargs(引数)を取得 +Get.arguments + +// 直前のRouteの名前("/" など)を取得 +Get.previousRoute + +// 現在のRouteオブジェクトを取得 +Get.rawRoute + +// GetObserverからRoutingを取得 +Get.routing + +// SnackBarが開いているかチェック +Get.isSnackbarOpen + +// Dialogが開いているかチェック +Get.isDialogOpen + +// BottomSheetが開いているかチェック +Get.isBottomSheetOpen + +// Routeを削除 +Get.removeRoute() + +// 引数のRoutePredicateがtrueを返すまで画面を戻る +Get.until() + +// 引数で指定したRouteに進み、RoutePredicateがtrueを返すまで画面を戻る +Get.offUntil() + +// 引数で指定した名前付きRouteに進み、RoutePredicateがtrueを返すまで画面を戻る +Get.offNamedUntil() + +// アプリがどのプラットフォームで実行されているかのチェック +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +// アプリがどのデバイスで実行されているかのチェック +GetPlatform.isMobile +GetPlatform.isDesktop +// プラットフォームとデバイスのチェックは独立 +// 同じOSでもウェブで実行されているのか、ネイティブで実行されているのか区別 +GetPlatform.isWeb + + +// MediaQuery.of(context).size.height と同じ +// ただしimmutable +Get.height +Get.width + +// Navigatorの現在のcontextを取得 +Get.context + +// SnackBar/Dialog/BottomSheet などフォアグラウンドのcontextを取得 +Get.overlayContext + +// 注: 以降のメソッドはcontextの拡張メソッドです。 +// contextと同じくUIのどこからでもアクセスできます。 + +// ウィンドウサイズの変更などに合わせて変わる height/width を取得 +context.width +context.height + +// 画面の半分のサイズ,1/3のサイズなどを取得 +// レスポンシブなデザインの場合に便利 +// オプションのパラメーター dividedBy で割る数を指定 +// オプションのパラメーター reducedBy でパーセンテージを指定 +context.heightTransformer() +context.widthTransformer() + +/// MediaQuery.of(context).size とほぼ同じ +context.mediaQuerySize() + +/// MediaQuery.of(context).padding とほぼ同じ +context.mediaQueryPadding() + +/// MediaQuery.of(context).viewPadding とほぼ同じ +context.mediaQueryViewPadding() + +/// MediaQuery.of(context).viewInsets とほぼ同じ +context.mediaQueryViewInsets() + +/// MediaQuery.of(context).orientation とほぼ同じ +context.orientation() + +/// デバイスがランドスケープ(横長)モードかどうかチェック +context.isLandscape() + +/// デバイスがポートレート(縦長)モードかどうかチェック +context.isPortrait() + +/// MediaQuery.of(context).devicePixelRatio とほぼ同じ +context.devicePixelRatio() + +/// MediaQuery.of(context).textScaleFactor とほぼ同じ +context.textScaleFactor() + +/// 画面の短辺の長さを取得 +context.mediaQueryShortestSide() + +/// 画面の横幅が800より大きい場合にtrueを返す +context.showNavbar() + +/// 画面の短辺が600より小さい場合にtrueを返す +context.isPhone() + +/// 画面の短辺が600より小さい場合にtrueを返す +context.isSmallTablet() + +/// 画面の短辺が720より大きい場合にtrueを返す +context.isLargeTablet() + +/// デバイスがタブレットの場合にtrueを返す +context.isTablet() + +/// 画面サイズに合わせて value を返す +/// たとえば: +/// 短辺が300より小さい → watchパラメーターの値を返す +/// 短辺が600より小さい → mobileパラメーターの値を返す +/// 短辺が1200より小さい → tabletパラメーターの値を返す +/// 横幅が1200より大きい → desktopパラメーターの値を返す +context.responsiveValue() +``` + +### オプションのグローバル設定と手動設定 + +GetMaterialApp はすべてあなたの代わりに設定してくれますが、手動で設定を施したい場合は MaterialApp の navigatorKey と navigatorObservers の値を指定してください。 + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +`GetObserver`内で独自のミドルウェアを使用することもできます。これは他に影響を及ぼすことはありません。 + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // ここ + ], +); +``` + +`Get` クラスに_グローバル設定_を施すことができます。Routeをプッシュする前のコードに `Get.config` を追加するだけです。もしくは、`GetMaterialApp` 内で直接設定することもできます。 + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +オプションで、すべてのログメッセージを `Get` からリダイレクトさせることができます。 +お好みのロギングパッケージを使ってログを取得したい場合はこのようにしてください。 + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // ここでお好みのロギングパッケージにメッセージを渡してください + // enableLog: false にしても、ログメッセージはこのコールバックでプッシュされる点ご注意を + // ログが有効かどうかのチェックは Get.isLogEnable で可能 +} + +``` + +### ローカルステートWidget + +ローカルステートWidgetは、1つの変数の状態を一時的かつローカルに管理したい場合に便利です。 +シンプルなValueBuilderとリアクティブなObxValueの2種類があります。 +たとえば、`TextField` Widgetの obscureText プロパティを切り替えたり、折りたたみ可能なパネルをカスタムで作成したり、`BottomNavigation` の現在のインデックス値を変更して内容を変更したりといった用途に最適です。 + +#### ValueBuilder + +setStateでお馴染みの `StatefulWidget` をシンプルにしたビルダーWidgetです。 + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // ( newValue ) => updateFn( newValue ) も可 + ), + // builderメソッドの外で何か実行する場合 + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### ObxValue + +[`ValueBuilder`](#valuebuilder)に似ていますが、これはそのリアクティブバージョンです。Rxインスタンス(.obsを付けたときに戻る値です)を渡すと自動で更新されます。すごいでしょ? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, + // Rxには_呼び出し可能な_関数が備わっているのでこれだけでOK + // (flag) => data.value = flag も可能 + ), + false.obs, +), +``` + +## お役立ちTIPS + +`.obs`が付いた型(_Rx_型とも呼ばれる)には、さまざまな内部メソッドや演算子が用意されています。 + +> `.obs`が付いたプロパティが **実際の値** だと信じてしまいがちですが...間違えないように! +> 我々がcontrollerにおける変数の型宣言を省略してvarとしているのはDartのコンパイラが賢い上に、 +> そのほうがコードがすっきる見えるからですが… + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + +`message`を _print_ することで実際の文字列が取り出されはしますが、型は **RxString** です! + +そのため `message.substring( 0, 4 )` などといったことはできません。 +Stringのメソッドにアクセスするには _observable_ の中にある実際の値 `value` にアクセスします。 +アクセスには `.value`を使うのが通常ですが、他の方法もあるのでご紹介します。 + +```dart +final name = 'GetX'.obs; +// 新しい値が現在のものと異なる場合のみ Stream が更新されます。 +name.value = 'Hey'; + +// すべてのRxプロパティは「呼び出し可能」で、valueを返してくれます。 +// ただし `null` は受付不可。nullの場合はUIが更新されない。 +name('Hello'); + +// これはgetterみたいなものです。'Hello' を返します。 +name() ; + +/// num型の場合 + +final count = 0.obs; + +// num型の非破壊的な演算子はすべて使えます。 +count + 1; + +// 注意! この場合は`count`がfinalなら有効ではないです。varなら有効。 +count += 1; + +// 比較演算子も使用可能 +count > 2; + +/// bool型の場合 + +final flag = false.obs; + +// true/false を入れ替えることができます。 +flag.toggle(); + + +/// すべての型 + +// `value` を null にセット。 +flag.nil(); + +// toString(), toJson() などの操作はすべて `value` が対象になります。 +print( count ); // RxIntの `toString()` が呼び出されて数字がprintされる。 + +final abc = [0,1,2].obs; +// json配列に変換した値と、'RxList' がprintされます。 +// JsonはすべてのRx型でサポートされています! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap、RxList、RxSetはそれぞれの元の型を拡張した特別なRx型です。 +// たとえばRxListは通常のListとして扱うことができる上にリアクティブです。 +abc.add(12); // 12をListにプッシュし、Streamを更新してくれます。 +abc[3]; // Listと同様にインデックス番号3の値を取得してくれます。 + + +// 等価演算子はRx型と元の型でも動作しますが、.hashCode は常にvalueから取得します。 +final number = 12.obs; +print( number == 12 ); // true + +/// カスタムのRxモデル + +// toJson()やtoString()をモデルクラスに設定すれば、.obsからでもprintされるように実装可能。 + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user` 自体はリアクティブですが、その中のプロパティはリアクティブではありません。 +// そのため、このようにプロパティの値を変更してもWidgetは更新されません。 +user.value.name = 'Roi'; +// `Rx` には自ら変更を検知する手段がないからです。 +// そのため、カスタムクラスの場合はこのようにWidgetに変更を知らせる必要があります。 +user.refresh(); + +// もしくは `update()` メソッドを使用してください。 +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` +#### StateMixin + +`UI`の状態を管理するもう一つの手法として、`StateMixin`を利用する方法があります。 +controllerクラスに`with`を使って`StateMixin`を追加することで実装可能です。 + +``` dart +class Controller extends GetController with StateMixin{} +``` + +`change()`メソッドにより好きなタイミングで状態を変更することができます。 +このようにデータと状態を渡すだけです。 + +```dart +change(data, status: RxStatus.success()); +``` + +RxStatus には以下のステータスが存在します。 + +``` dart +RxStatus.loading(); +RxStatus.success(); +RxStatus.empty(); +RxStatus.error('message'); +``` + +ステータスごとにUIを設定するにはこのようにします。 + +```dart +class OtherClass extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + + body: controller.obx( + (state)=>Text(state.name), + + // ローディング中はカスタムのインジケーターの設定も可能ですが、 + // デフォルトで Center(child:CircularProgressIndicator()) となります。 + onLoading: CustomLoadingIndicator(), + onEmpty: Text('No data found'), + + // 同様にエラーWidgetはカスタム可能ですが、 + // デフォルトは Center(child:Text(error)) です。 + onError: (error)=>Text(error), + ), + ); +} +``` + +#### GetView + +このWidgetは私のお気に入りです。とてもシンプルで扱いやすいですよ! + +このWidgetを一言で表現すると、「controllerをgetterに持つ `const` な StatelessWidget」です。 + +```dart + class AwesomeController extends GetController { + final String title = 'My Awesome View'; + } + + // controllerの `型` を渡すのを忘れずに! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // `controller.なんとか` でアクセス + ); + } + } +``` + +#### GetResponsiveView + +GetViewをレスポンシブデザインに対応させたい場合はこのWidgetを継承してください。 +画面サイズやデバイスタイプなどの情報を持つ `screen` プロパティを保持しています。 + +##### 使い方 + +Widgetをビルドする方法は2つあります。 + +- `builder` メソッドを使う。 +- `desktop`, `tablet`, `phone`, `watch` メソッドを使う。 + 画面サイズ、デバイスタイプに応じたWidgetがビルドされます。 + たとえば画面が [ScreenType.Tablet] なら `tablet` メソッドが実行されます。 + **注:** `alwaysUseBuilder` プロパティをfalseにする必要があります。 + +`settings` プロパティでブレイクポイントを設定することもできます。 + +![例](https://github.com/SchabanBo/get_page_example/blob/master/docs/Example.gif?raw=true) +この画面のコード +[コード](https://github.com/SchabanBo/get_page_example/blob/master/lib/pages/responsive_example/responsive_view.dart) + +#### GetWidget + +このWidgetはあまり知られておらず、使用するケースは稀です。 +GetViewとの違いは、Controllerを`キャッシュ`してくれる点です。 +このキャッシュがあるため `const` にはできません。 + +> それでは一体いつControllerをキャッシュする必要があるのかって? + +それは **GetX** のこれまた使う機会の少ない `Get.create()` を使うときです。 + +`Get.create(()=>Controller())` は `Get.find()` を実行するたびに +新しいControllerインスタンスを生成します。 + +そこで `GetWidget` の出番です。たとえば、Todoアイテムのリスト内容を保持したいとき。 +Widgetが更新されてもアイテムはControllerのキャッシュを参照してくれます。 + +#### GetxService + +このクラスは `GetxController` に似ており、同様のライフサイクル(`onInit()`, `onReady()`, `onClose()`)を共有しますが、そこに「ロジック」はありません。**GetX**の依存オブジェクト注入システムに、このサブクラスがメモリから **削除できない** ということを知らせるだけです。 + +そのため `Get.find()` で `ApiService`, `StorageService`, `CacheService` のようなサービス系クラスにいつでもアクセスできるようにしておくと非常に便利です。 + +```dart +Future main() async { + await initServices(); /// サービスクラスの初期化をawait + runApp(SomeApp()); +} + +/// Flutterアプリ実行前にサービスクラスを初期化してフローをコントロールするのは賢いやり方です。 +/// たとえば GetMaterialAppを更新する必要がないようにUser別の +/// Theme、apiKey、言語設定などをApiサービス実行前にロードしたり。 +void initServices() async { + print('starting services ...'); + /// get_storage, hive, shared_pref の初期化はここで行います。 + /// あるいは moor の connection など非同期のメソッドならなんでも。 + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +`GetxService` を破棄する唯一の方法は `Get.reset()` メソッドを使うことです。 +これはアプリにおける「ホットリブート」のようなものです。あるクラスのインスタンスを +ライフサイクルの間ずっと残しておきたい場合は `GetxService` を使うというのを覚えておいてください。 + + +## テストの実行 + +Controllerのライフサイクル含め、他のクラスと同様にテストを実行することができます。 + +```dart +class Controller extends GetxController { + @override + void onInit() { + super.onInit(); + // 値を name2 に変更 + name.value = 'name2'; + } + + @override + void onClose() { + name.value = ''; + super.onClose(); + } + + final name = 'name1'.obs; + + void changeName() => name.value = 'name3'; +} + +void main() { + test(''' +Test the state of the reactive variable "name" across all of its lifecycles''', + () { + /// ライフサイクルごとのテストは必ずしも行う必要はありませんが、 + /// GetXの依存オブジェクト注入機能を使用しているのであれば実行をおすすめします。 + final controller = Controller(); + expect(controller.name.value, 'name1'); + + /// このようにライフサイクル経過ごとの状態をテスト可能です。 + Get.put(controller); // onInit が実行される + expect(controller.name.value, 'name2'); + + /// 関数もテストしましょう + controller.changeName(); + expect(controller.name.value, 'name3'); + + /// onClose が実行される + Get.delete(); + + expect(controller.name.value, ''); + }); +} +``` + +#### mockitoやmocktailを使う場合 +GetxController/GetxService をモックする場合 Mock をミックスインしてください。 + +```dart +class NotificationServiceMock extends GetxService with Mock implements NotificationService {} +``` + +#### Get.reset() +WidgetやGroupのテスト時に、テストの最後かtearDownの中で Get.reset() を実行することで設定をリセットすることができます。 + +#### Get.testMode +Controllerの中でナビゲーションを使用している場合は、`Get.testMode = true`をmainの開始で実行してください。 + + +# バージョン2.0からの破壊的変更 + +1- Rx型の名称 + +| 変更前 | 変更後 | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxControllerとGetBuilderが統合され、Controllerにどれを使うか覚えておく必要がなくなりました。GetxControllerを使うだけで、リアクティブと非リアクティブな状態管理の両方に対応できるようになりました。 + +2- 名前付きRoute +変更前: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +変更後: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +変更の効果: +ページ表示にはパラメータやログイントークンを起点にする方法もありますが、以前のアプローチではこれができず、柔軟性に欠けていました。 +ページを関数から取得するよう変更したことで、このようなアプローチを可能にし、アプリ起動直後にRouteがメモリに割り当てられることもないため、RAMの消費量を大幅に削減することもできました。 + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# なぜGetXなのか + +1- Flutterのアップデートが重なると、依存パッケージがうまく動かなくなることがあります。コンパイルエラーを起こしたり、その時点で解決方法がないようなエラーが発生したり。開発者はそのエラーを追跡し、該当リポジトリにissueを提起し、問題が解決されるのを待つ必要があります。Getは開発に必要な主要リソース(状態管理、依存オブジェクト管理、Route管理)を一元化し、Pubspecにパッケージを1つ追加するだけでコーディングを開始することができます。Flutterがアップデートしたときに必要なことは、Getも併せてアップデートすることだけです。それですぐに作業を再開できます。またGetはパッケージ間の互換性の問題も解消します。互いに依存するパッケージAの最新バージョンとBの最新バージョンの間に互換性がない、ということが何度あったでしょうか。Getを使えばすべてが同じパッケージ内にあるため、互換性の心配はありません。 + +2- Flutterは手軽で素晴らしいフレームワークですが、`Navigator.of(context).push (context, builder [...]`のように、ほとんどの開発者にとって不要な定型文が一部にあります。Getを使えばそのような定型文を簡素化できます。Routeを呼ぶためだけに8行のコードを書く代わりに、`Get.to(Home())`を実行すれば、次の画面に遷移することができるのです。またウェブURLを動的なものにすることは現在Flutterでは本当に骨の折れる作業ですが、GetXを使えば非常に簡単です。そしてFlutterにおける状態管理と依存オブジェクト管理については、たくさんのパターンやパッケージがあるので多くの議論を生んでいます。しかしGetXのアプローチは大変シンプルです。これは一例ですが、変数の最後に「.obs」を追加して「Obx()」の中にWidgetを配置するだけで、その変数の状態変化が自動でWidgetに反映されます。 + +3- GetXではパフォーマンスのことをあまり気にせず開発ができます。Flutterのパフォーマンスはそれだけで素晴らしいものですが、状態管理と併せて BLoC / データストア / Controller などを届けるためのサービスロケーターを使用することを想像してみてください。そのインスタンスが必要ないときはリソースを解放するイベントを明示的に呼び出さなければなりません。そんなとき、使用されなくなったら自動でメモリから削除してくれればいいのに、と考えたことはありませんか?それを実現してくれるのがGetXです。SmartManagement機能により未使用のリソースはすべて自動でメモリから破棄されるので、本来の開発作業に集中することができます。メモリ管理のためのロジックを作らなくても、常に必要最小限のリソースを使っていることが保証されるのです。 + +4- コードのデカップリング(分離)がしやすい。「ビューをビジネスロジックから分離する」というコンセプトを聞いたことがあるかもしれません。これはなにもBLoC、MVC、MVVMに限ったことではなく、どのアーキテクチャパターンもこのコンセプトが考え方の基本にあると言っていいでしょう。しかし、Flutterではcontextの使用によりこのコンセプトが薄まってしまいがちです。 +InheritedWidgetを参照するためにcontextが必要なとき、ビューの中でそれを使用するか、引数としてcontextを渡しますよね?私はこの方法は美しくないと感じます。常にビュー内のビジネスロジックに依存しなければならないのは、特にチームで仕事をする場面においては不便だと感じます。GetXによるアプローチでは、StatefulWidgetやinitStateなどの使用を禁止しているわけではありませんが、それらよりもずっとスッキリ書けるようになっています。Controller自体にライフサイクルがあるため、たとえばREST APIのリクエストを行うときも、ビューの中の何かに依存するということがありません。Controllerのライフサイクルの一つである onInit を使用してhttpを呼び出し、データが到着すると変数にセットされます。GetXはリアクティブな変数を扱うことができるので、インスタンス変数が変わりし次第、その変数に依存するWidgetがすべて自動更新されます。これによりUIの担当者はWidgetの見た目に注力することができ、ボタンクリックなどのユーザーイベント以外のものをビジネスロジックに渡す必要がなくなります。その一方でビジネスロジックの担当者はビジネスロジックだけに集中し、個別のテストを簡単に行うことができます。 + +GetXライブラリは今後も更新され続け、新しい機能を実装していきます。気軽にプルリクエストを出していただき、ライブラリの成長に貢献していただけるとうれしいです。 + +# コミュニティ + +## コミュニティチャンネル + +GetXコミュニティは非常に活発で有益な情報であふれています。ご質問がある場合や、このフレームワークの使用に関して支援が必要な場合は、ぜひコミュニティチャンネルにご参加ください。このリポジトリは、issueの提起およびリクエスト専用ですが、気軽にコミュニティにご参加いただければ幸いです。 + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## コントリビュート方法 + +_GetXプロジェクトに貢献してみませんか?あなたをコントリビューターの一人としてご紹介できるのを楽しみにしています。GetおよびFlutterをより良いものにするためのコントリビュート例をご紹介します。_ + +- Readmeの多言語対応。 +- Readmeの追加ドキュメント執筆 (ドキュメントで触れられていない機能がまだまだたくさんあります)。 +- Getの使い方を紹介する記事やビデオの作成(Readmeに掲載させていただきます。将来的にWikiができればそこにも掲載予定)。 +- コードやテストのプルリクエスト。 +- 新機能の提案。 + +どのような形の貢献であれ歓迎しますので、ぜひコミュニティにご参加ください! + +## GetXに関する記事と動画 + +- [Flutter Getx EcoSystem package for arabic people](https://www.youtube.com/playlist?list=PLV1fXIAyjeuZ6M8m56zajMUwu4uE3-SL0) - Tutorial by [Pesa Coder](https://github.com/UsamaElgendy). +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. +- [A minimal example on dartpad](https://dartpad.dev/2b3d0d6f9d4e312c5fdbefc414c1727e?) - by [Roi Peker](https://github.com/roipeker) diff --git a/packages/get/README.ko-kr.md b/packages/get/README.ko-kr.md new file mode 100644 index 0000000..ab1770e --- /dev/null +++ b/packages/get/README.ko-kr.md @@ -0,0 +1,1266 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + + +
+ +**Languages:** + + +[![영어](https://img.shields.io/badge/Language-English-blueviolet?style=for-the-badge)](README.md) +[![베트남어](https://img.shields.io/badge/Language-Vietnamese-blueviolet?style=for-the-badge)](README-vi.md) +[![인도네시아어](https://img.shields.io/badge/Language-Indonesian-blueviolet?style=for-the-badge)](README.id-ID.md) +[![우르두어](https://img.shields.io/badge/Language-Urdu-blueviolet?style=for-the-badge)](README.ur-PK.md) +[![중국어](https://img.shields.io/badge/Language-Chinese-blueviolet?style=for-the-badge)](README.zh-cn.md) +[![포르투칼어](https://img.shields.io/badge/Language-Portuguese-blueviolet?style=for-the-badge)](README.pt-br.md) +[![스페인어](https://img.shields.io/badge/Language-Spanish-blueviolet?style=for-the-badge)](README-es.md) +[![러시아어](https://img.shields.io/badge/Language-Russian-blueviolet?style=for-the-badge)](README.ru.md) +[![폴란드어](https://img.shields.io/badge/Language-Polish-blueviolet?style=for-the-badge)](README.pl.md) +[![한국어](https://img.shields.io/badge/Language-Korean-blueviolet?style=for-the-badge)](README.ko-kr.md) +[![프랑스어](https://img.shields.io/badge/Language-French-blueviolet?style=for-the-badge)](README-fr.md) + +
+ +- [Get에 대하여](#get에-대하여) +- [설치](#설치) +- [GetX를 사용한 Counter 앱](#getx를-사용한-counter-앱) +- [세가지 주요점](#세가지-주요점) + - [상태 관리](#상태-관리) + - [반응형 상태 관리자](#반응형-상태-관리자) + - [상태 관리에 대한 자세한 내용](#상태-관리에-대한-자세한-내용) + - [라우트 관리](#라우트-관리) + - [라우트 관리에 대한 자세한 내용](#라우트-관리에-대한-자세한-내용) + - [종속성 관리](#종속성-관리) + - [종속성 관리에 대한 자세한 내용](#종속성-관리에-대한-자세한-내용) +- [기능들](#기능들) + - [국제화](#국제화) + - [번역](#번역) + - [번역 사용법](#번역-사용법) + - [지역화](#지역화) + - [지역 변경](#지역-변경) + - [시스템 지역](#시스템-지역) + - [테마 변경](#테마-변경) + - [GetConnect](#getconnect) + - [기본 구성](#기본-구성) + - [커스텀 구성](#커스텀-구성) + - [GetPage Middleware](#getpage-middleware) + - [Priority](#priority) + - [Redirect](#redirect) + - [onPageCalled](#onpagecalled) + - [OnBindingsStart](#onbindingsstart) + - [OnPageBuildStart](#onpagebuildstart) + - [OnPageBuilt](#onpagebuilt) + - [OnPageDispose](#onpagedispose) + - [기타 고급 API](#기타-고급-api) + - [선택적 전역 설정과 수동 구성](#선택적-전역-설정과-수동-구성) + - [지역 상태 위젯들](#지역-상태-위젯들) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [유용한 팁](#유용한-팁) + - [GetView](#getview) + - [GetResponsiveView](#getresponsiveview) + - [사용 방법](#사용-방법) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [2.0의 주요 변경점](#20의-주요-변경점) +- [왜 Getx인가?](#왜-getx인가) +- [커뮤니티](#커뮤니티) + - [커뮤니티 채널](#커뮤니티-채널) + - [기여하는 방법](#기여하는-방법) + - [기사 및 비디오](#기사-및-비디오) + +# Get에 대하여 + +- GetX는 Flutter를 위한 매우 가볍고 강력한 솔루션입니다. 고성능 상태 관리, 지능형 종속성 주입 및 빠르고 실용적인 라우트 관리가 결합되어 있습니다. + +- GetX는 라이브러리의 모든 사항에 대해서 **생산성, 성능, 조직화**의 3 가지 기본 원칙을 가지고 있습니다. + + - **성능:** GetX는 성능과 최소한의 리소스 소비에 중점을 둡니다. GetX는 Streams나 ChangeNotifier를 사용하지 않습니다. + + - **생산성:** GetX는 쉽고 친숙한 구문을 사용합니다. 원하시는 것보다 Getx에는 항상 더 쉬운 방법이 있습니다. 개발 시간을 아끼고 애플리케이션을 최대 성능으로 제공할 수 있습니다. + + 일반적으로 개발자는 메모리에서 컨트롤러들을 제거하는 데 관심을 가져야합니다. GetX에서는 리소스가 기본적으로 사용되지 않으면 메모리에서 제거되므로 필요하지 않습니다. 만약 메모리에 유지하려면 종속성에서 "permanent : true"를 명시적으로 선언해야합니다. 이렇게하면 시간을 절약 할 수있을뿐만 아니라 불필요한 메모리 종속성이 발생할 위험이 줄어 듭니다. 종속성은 기본적으로 lazy로 로드됩니다. + + - **조직화:** GetX는 화면, 프레젠테이션 로직, 비즈니스 로직, 종속성 주입 및 네비게이션을 완전히 분리 할 수 있습니다. 라우트간 전환을 하는데에 컨텍스트가 필요하지 않아 위젯 트리(시각객체)에 독립적입니다. inheritedWidget을 통해 컨트롤러/블록에 접근하는 데 컨텍스트가 필요하지 않아 시각화 계층에서 프레젠테이션 로직과 비즈니스 로직을 완전히 분리됩니다. 이 GetX는 자체 종속성 주입 기능을 사용하여 DI를 뷰에서 완전히 분리하기 때문에 다중 Provider를 통해 위젯 트리에서 컨트롤러/모델/블록으로 주입 할 필요가 없습니다. + + GetX를 사용하면 기본적으로 클린 코드를 가지게 되어 애플리케이션의 각 기능을 쉽게 찾을 수있습니다. 이것은 유지 보수를 용이하게 하며 모듈의 공유가 가능하고 Flutter에서는 생각할 수 없었던 것들도 전부 가능합니다. + BLoC은 Flutter에서 코드를 구성하기 위한 시작점으로 비즈니스 로직과 시각객체를 분리합니다. Getx는 비즈니스 로직 뿐만 아니라 프레젠테이션 로직을 분리하는 자연스러운 진화입니다. 추가로 종속성 주입과 라우트 또한 분리되고 데이터 계층이 모두로부터 분리됩니다. Hello World를 구현하는 것보다 더 쉽게 모든 것이 어디 있는지 알수 있습니다. + Flutter SDK와 함께 GetX를 사용하면 가장 쉽고 실용적이며 확장 가능한 고성능 어플리케이션을 만들수 있습니다. 초보자에게는 쉬우며 전문가에게는 정확하고 완벽하게 동작하는 대규모 생태계가 함께합니다. 안전하고 안정적이며 업데이트되고 기본 Flutter SDK에 없는 광범위한 API 빌드를 제공합니다. + +- GetX는 비대하지 않습니다. 아무 걱정없이 프로그래밍을 시작할 수 있는 다양한 기능이 있지만 각 기능은 별도의 컨테이너에 있으며 사용한 후에만 시작됩니다. 만약 상태 관리만 사용하면 오직 상태 관리만 컴파일 됩니다. 라우트만 사용하는 경우 상태 관리는 컴파일되지 않습니다. + +- GetX는 거대한 생태계, 대규모 커뮤니티, 수많은 공동 작업자를 보유하고 있으며 Flutter가 존재하는 한 유지됩니다. GetX도 Android, iOS, 웹, Mac, Linux, Windows 및 서버에서 동일한 코드로 실행할 수 있습니다. +**[Get Server](https://github.com/jonataslaw/get_server)를 사용한 백엔드에는 프런트엔드에서 만든 코드를 완전히 재사용 할 수 있습니다.** + +**추가로 [Get CLI](https://github.com/jonataslaw/get_cli)를 프런트엔드와 서버 양쪽에서 사용하면 전체 개발 프로세스를 자동화 할 수 있습니다.** + +**추가로 생산성 향상을 위해 +[VSCode 확장](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets)과 [Android Studio/Intellij 확장](https://plugins.jetbrains.com/plugin/14975-getx-snippets)이 있습니다.** + +# 설치 + +pubspec.yaml 파일에 Get 추가: + +```yaml +dependencies: + get: +``` + +사용할 파일에 Import get: + +```dart +import 'package:get/get.dart'; +``` + +# GetX를 사용한 Counter 앱 + +Flutter의 새 프로젝트에서 기본적으로 생성 되는 "counter" 프로젝트는 100줄이 넘습니다 (코멘트 포함). Get의 힘을 보여주기 위해 클릭 할 때마다 상태를 변경하고, 페이지 사이를 전환하고, 화면 사이의 상태를 공유하는 "counter"를 만드는 방법을 주석이 포함된 26줄의 코드로 보여줄 것입니다. + +- 1 단계: + MaterialApp 에 "Get"을 추가하여 GetMaterialApp 으로 변경합니다. + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- 주석: 이는 Flutter의 MaterialApp을 변경하지 않으며 GetMaterialApp 또한 수정 된 MaterialApp이 아니고, 기본 MaterialApp을 자식으로 갖는 사전 구성된 위젯 일뿐입니다. 수동으로 구성 할 수 있지만 반드시 필요한 것은 아닙니다. GetMaterialApp은 라우트를 생성하고 추가하며, 번역을 추가하고, 라우트 탐색에 필요한 모든 것을 추가합니다. 만약 상태 관리 또는 종속성 관리에만 Get을 사용하는 경우 GetMaterialApp을 사용할 필요가 없습니다. GetMaterialApp은 라우트, 스택바, 국제화, bottomSheets, 다이얼로그 및 컨텍스트 부재와 라우트에 연관된 상위 api들에 필요합니다. +- 주석²: 이 단계는 라우트 관리 (`Get.to ()`,`Get.back ()` 등)를 사용하려는 경우에만 필요합니다. 사용하지 않을 경우 1 단계를 수행 할 필요가 없습니다. + +- 2 단계: + 비즈니스 로직 클래스를 만들고 모든 변수, 함수, 컨트롤러를 포함하십시오. + ".obs"를 이용하면 간단히 모든 변수를 observable로 만들수 있습니다. + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- 3 단계: + StatelessWidget를 이용해 View를 만들어 RAM을 아끼고 StatefulWidget은 더 이상 사용하지 않아도 됩니다. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Get.put()을 사용하여 클래스를 인스턴스화하여 모든 "child'에서 사용가능하게 합니다. + final Controller c = Get.put(Controller()); + + return Scaffold( + // count가 변경 될 때마다 Obx(()=> 를 사용하여 Text()에 업데이트합니다. + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // 8줄의 Navigator.push를 간단한 Get.to()로 변경합니다. context는 필요없습니다. + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // 다른 페이지에서 사용되는 컨트롤러를 Get으로 찾아서 redirect 할 수 있습니다. + final Controller c = Get.find(); + + @override + Widget build(context){ + // 업데이트된 count 변수에 연결 + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +결론: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +이것은 간단한 프로젝트 이지만 Get이 얼마나 강력한지 명확히 보여줍니다. 프로젝트가 성장하면 차이점이 더 커질 것 입니다. + +Get은 팀단위 업무에 맞춰 디자인되었지만 개별 개발자의 작업도 단순화합니다. + +마감일을 개선하고 성능의 손실 없이 재시간에 제공하십시오. Get은 모두를 위한 것은 아니지만 위의 설명에 해당사항이 있으면 당신을 위한 것입니다! + +# 세가지 주요점 + +## 상태 관리 + +Get은 두가지 상태 관리자가 있습니다: 단순 상태관리자(GetBuilder라고 함)와 반응형 상태관리자(GetX/Obx) + +### 반응형 상태 관리자 + +반응형 프로그래밍은 복잡하다고 알려져있기 때문에 많은 사람들에게 소외될 수 있습니다. GetX가 매우 단순하게 반응형 프로그래밍을 바꿉니다: + +- StreamControllers를 만들 필요가 없습니다. +- 각 변수에 대해 StreamBuilder를 만들 필요가 없습니다. +- 각각의 상태(state)를 위한 클래스를 만들 필요가 없습니다. +- 초기값을 위한 get이 필요하지 않습니다. +- 코드 생성기를 사용할 필요가 없습니다. + +Get의 반응형 프로그램은 setState를 사용하는 것 만큼 쉽습니다. + +매번 변경되기를 원하고 모든 위젯에서 자동적으로 반영되는 변수가 있다고 가정해봅시다. + +여기 name 변수가 있습니다: + +```dart +var name = 'Jonatas Borges'; +``` + +".obs"만 끝에 추가하여 observable로 만듭니다: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +아래와 같이 간단히 보여주고 싶은 UI에 추가하면 값이 변경될때마다 화면에 업데이트 됩니다: + +```dart +Obx(() => Text("${controller.name}")); +``` + +이게 다 입니다. _정말_ 간단하죠. + +### 상태 관리에 대한 자세한 내용 + +**상태 관리에 대한 자세한 설명은 [여기](./documentation/kr_KO/state_management.md)를 보십시오. 여기에서 더 많은 예제와 단순 상태 관리자와 반응형 상태 관리자의 차이점을 볼 수 있습니다.** + +GetX 능력에 대한 좋은 아이디어를 얻을 수 있습니다. + +## 라우트 관리 + +만약 라우트/스낵바/다이얼로그/bottomsheets을 context 없이 사용하려면 GetX는 훌륭한 대안입니다. 여기를 보십시오: + +MaterialApp 앞에 "Get"을 추가해서 GetMaterialApp으로 변경합니다. + +```dart +GetMaterialApp( // Before: MaterialApp( + home: MyHome(), +) +``` + +새로운 화면으로 이동합니다: + +```dart + +Get.to(NextScreen()); +``` + +명칭으로 새로운 화면으로 이동합니다. 명칭으로 라우트하는 더 자세한 사항은 [여기](./documentation/kr_KO/route_management.md#이름있는-라우트-탐색) 있습니다. + +```dart + +Get.toNamed('/details'); +``` + +스낵바, 다이얼로그, bottomsheets 또는 Navigator.pop(context);로 닫아야 하는 어떤것도 닫게 합니다: + +```dart +Get.back(); +``` + +다음 화면으로 이동하고 이전 화면으로 돌아갈 필요가 없는 경우 (스플래시, 로그인화면 등..) + +```dart +Get.off(NextScreen()); +``` + +다음 화면으로 이동하고 이전 화면들 모두 닫는 경우 (쇼핑카트, 투표, 테스트에 유용) + +```dart +Get.offAll(NextScreen()); +``` + +이러한 작업을 수행하기 위해 컨텍스트를 사용할 필요가 없다는 것을 보셨나요? 이것이 Get 라우트 관리를 사용하는 가장 큰 장점 중 하나입니다. 이를 통해 걱정없이 컨트롤러 클래스 내에서 이러한 모든 메서드를 실행할 수 있습니다. + +### 라우트 관리에 대한 자세한 내용 + +**Get은 명명된 라우트로 작업하고 더 쉬운 방식으로 라우트의 제어를 제공합니다! [여기](./documentation/kr_KO/route_management.md)에 더 자세한 문서가 있습니다.** + +## 종속성 관리 + +Get은 간단하고 강력한 종속성 관리자를 가지고 있어 Bloc나 Controller와 유사한 클래스를 Provide context, inheritedWidget 없이 1줄의 코드로 끌어낼 수 있습니다: + +```dart +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); +``` + +- 주석: Get의 상태 관리자를 사용중이면 뷰를 controller에 더 쉽게 연결할 수 있는 바인딩 api에 더 주의를 기울이십시오. + +사용 중인 클래스에서 클래스를 인스턴스화하는 대신에 Get 인스턴스에서 인스턴스화하면 앱에서 해당 클래스를 사용할 수 있습니다. +그래서 controller(또는 Bloc)를 정상적으로 사용할 수 있습니다. + +**팁:** Get 종속성 관리는 패키지의 다른 부분과 분리되어서 예제 앱이 이미 상태 관리자(하나여도 상관없음)를 사용중이면 모두 다시 작성할 필요 없이 아무 문제 없이 종속성 주입을 사용할 수 있습니다. + +```dart +controller.fetchApi(); +``` + +여러 경로들을 탐색했고 controller에 남아있는 데이터가 필요가 있다고 가정하십시오. Get_it이나 Provider와 조합된 상태 관리자가 필요합니다. 맞습니까? Get은 아닙니다. 다른 추가적인 종속성이 필요없이 controller를 Get의 "find"로 찾으면 됩니다: + +```dart +Controller controller = Get.find(); +//마법처럼 Get이 controller를 찾아서 가져올 것 입니다. 백만개의 인스턴스화 contrller를 가질수 있고 Get은 올바른 controller를 항상 가져다 줄 것입니다. +``` + +그리고나서 가져온 controller 데이터를 사용할 수 있습니다: + +```dart +Text(controller.textFromApi); +``` + +### 종속성 관리에 대한 자세한 내용 + +**종속성 관리에 대한 더 자세한 사항은 [여기](./documentation/kr_KO/dependency_management.md)에 있습니다.** + +# 기능들 + +## 국제화 + +### 번역 + +번역은 간단한 key-value 맵으로 유지됩니다. +커스텀 번역을 추가하려면 `Translations`으로 확장하여 클래스를 만드세요. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### 번역 사용법 + +단지 `.tr`로 명시된 키만 추가하면 `Get.locale`과 `Get.fallbackLocale`의 현재값을 사용해서 번역될 것 입니다. + +```dart +Text('title'.tr); +``` + +#### 단수와 복수의 번역 사용법 + +```dart +var products = []; +Text('singularKey'.trPlural('pluralKey', products.length, Args)); +``` + +#### 파라미터로 번역 사용하는 방법 + +```dart +import 'package:get/get.dart'; + + +Map> get keys => { + 'en_US': { + 'logged_in': 'logged in as @name with email @email', + }, + 'es_ES': { + 'logged_in': 'iniciado sesión como @name con e-mail @email', + } +}; + +Text('logged_in'.trParams({ + 'name': 'Jhon', + 'email': 'jhon@example.com' + })); +``` + +### 지역화 + +`GetMaterialApp`의 파라미터를 전달하여 지역과 번역어를 정의합니다. + +```dart +return GetMaterialApp( + translations: Messages(), // 번역들 + locale: Locale('en', 'US'), // 해당 지역의 번역이 표시 + fallbackLocale: Locale('en', 'UK'), // 잘못된 지역이 선택된 경우 복구될 지역을 지정 +); +``` + +#### 지역 변경 + +지역을 업데이트할때 `Get.updateLocale(locale)`를 콜하십시오. 새로운 지역을 사용하여 자동적으로 번역합니다. + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### 시스템 지역 + +`Get.deviceLocale`를 사용해서 시스템 지역을 읽어옵니다. + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## 테마 변경 + +테마를 업데이트하기 위해 `GetMaterialApp` 보다 더 상위 위젯을 사용하지 말아 주십시오. 이러면 중복 키가 트리거 될 수 있습니다. 많은 사람들이 테마를 바꾸기 위해 "ThemeProvider" 위젯을 사용하고 있는데 **GetX**는 이런 방식이 필요 없습니다. + +다른 표준사항은 없이 `Get.changeTheme`로 추가하고 간단하게 커스텀 테마를 만들수 있습니다: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +`onTap`에 테마 변경이 있는 버튼 같은 무언가를 만들고 싶다면 두개의 **GetX™** API를 조합하여 가능합니다: + +- 다크`테마`를 사용중인지 확인합니다. +- 그리고 `테마` 변경 API 를 `onPressed`에 넣으면 됩니다: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +`.darkmode`가 활성화 될때 _light theme_ 로 바뀔것 이고 _light theme_ 가 활성화되면 _dark theme_ 로 변경될 것입니다. + +## GetConnect + +GetConnect는 http나 websockets으로 프론트와 백엔드의 통신을 위한 쉬운 방법입니다. + +### 기본 구성 + +GetConnect를 간단하게 확장하고 Rest API나 websockets의 GET/POST/PUT/DELETE/SOCKET 메서드를 사용할 수 있습니다. + +```dart +class UserProvider extends GetConnect { + // Get request + Future getUser(int id) => get('http://youapi/users/$id'); + // Post request + Future postUser(Map data) => post('http://youapi/users', body: data); + // Post request with File + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` + +### 커스텀 구성 + +GetConnect는 고도로 커스텀화 할 수 있습니다. base Url을 정의하고 응답자 및 요청을 수정하고 인증자를 정의할 수 있습니다. 그리고 인증 횟수까지 정의 할 수 있습니다. 더해서 추가 구성없이 모델로 응답을 변형시킬 수 있는 표준 디코더 정의도 가능합니다. + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // 모든 요청은 jsonEncode로 CasesModel.fromJson()를 거칩니다. + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; + // [httpClient] 인스턴트 없이 사용하는경우 Http와 websockets의 baseUrl 정의 + + // 모든 요청의 헤더에 'apikey' 속성을 첨부합니다. + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // 서버가 "Brazil"이란 데이터를 보내더라도 + // 응답이 전달되기 전에 응답의 데이터를 지우기 때문에 + // 사용자에게 표시되지 않을 것입니다. + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazilll'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // 헤더 설정 + request.headers['Authorization'] = "$token"; + return request; + }); + + // 인증자가 HttpStatus가 HttpStatus.unauthorized이면 + // 3번 호출됩니다. + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## GetPage Middleware + +GetPage는 GetMiddleWare의 목록을 특정 순서로 실행하는 새로운 프로퍼티를 가집니다. + +**주석**: GetPage가 Middleware를 가질때 페이지의 모든 하위는 같은 Middleware를 자동적으로 가지게 됩니다. + +### Priority + +Middleware의 실행 순서는 GetMiddleware안의 priority에 따라서 설정할 수 있습니다. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` + +이 Middleware는 다음 순서로 실행됩니다. **-8 => 2 => 4 => 5** + +### Redirect + +이 함수는 호출된 라우트의 페이지를 검색할때 호출됩니다. 리다이렉트한 결과로 RouteSettings을 사용합니다. 또는 null을 주면 리다이렉트 하지 않습니다. + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### onPageCalled + +이 함수는 생성되지 않은 페이지가 호출될 때 호출됩니다. +페이지에 대한 어떤것을 변경하는데 사용하거나 새로운 페이지를 줄 수 있습니다. + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +이 함수는 Bindings가 초기화되기 바로 직전에 호출됩니다. +여기에서 이 페이지를 위해 Bindings을 변경할 수 있습니다. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +이 함수는 Bindings가 초기화된 직후에 호출됩니다. +여기에서 bindings를 생성한 후 페이지 위젯을 생성하기 전에 무엇이든 할 수 있습니다. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### OnPageBuilt + +이 함수는 GetPage.page 함수가 호출된 직후에 호출며 함수의 결과를 제공합니다. 그리고 표시될 위젯을 가져옵니다. + +### OnPageDispose + +이 함수는 페이지의 연관된 모든 오브젝트들(Controllers, views, ...)이 해제된 직후에 호출됩니다. + +## 기타 고급 API + +```dart +// currentScreen에서 현재 인수들을 제공 +Get.arguments + +// 이전 경로의 이름을 제공 +Get.previousRoute + +// rawRoute.isFirst()와 같은 접근에 필요한 원시 경로를 제공 +Get.rawRoute + +// GetObserver로 부터 Rounting API의 접근을 제공 +Get.routing + +// snackbar가 열려 있는지 확인 +Get.isSnackbarOpen + +// dialog가 열려 있는지 확인 +Get.isDialogOpen + +// bottomsheet가 열려 있는지 확인 +Get.isBottomSheetOpen + +// 1개의 경로 제거 +Get.removeRoute() + +// 값이 true가 될때까지 반복적으로 되돌림 +Get.until() + +// 다음 경로로 이동하고 값이 true가 될때까지 이전 모든 경로를 제거 +Get.offUntil() + +// 명명된 다음 경로로 이동하고 값이 true가 될때까지 이전 모든 경로를 제거 +Get.offNamedUntil() + +// 앱이 구동중인 플랫폼을 확인 +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +// 장치 타입을 확인 +GetPlatform.isMobile +GetPlatform.isDesktop +// 모든 플랫폼은 독립적으로 웹을 제공합니다! +// Windows, iOS, OSX, Android 등의 +// 브러우저에서 구동중이면 알 수 있습니다. +GetPlatform.isWeb + + +// MediaQuery.of(context).size.height 과 동일 +// 하지만 불변함. +Get.height +Get.width + +// Navigator의 현재 context를 제공 +Get.context + +// 코드 어디에서든지 foreground에서 snackbar/dialog/bottomsheet의 context를 제공 +Get.contextOverlay + +// 주석: 다음 메서드는 context의 확장입니다. +// UI의 모든 위치에서 컨텍스트에 액세스 할 수 있으므로 UI 코드의 어느 곳에서나 사용할 수 있습니다. + +// 변경되는 height/width(데스크탑이나 브라우저와 같이 늘어날 수 있는 것)가 필요하면 context를 사용해야함 +context.width +context.height + +// 화면의 절반, 1/3 등을 정의할 수 있는 기능을 제공합니다. +// 반응성이 높은 앱에 유용합니다. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// MediaQuery.of(context).size 와 유사함 +context.mediaQuerySize() + +/// MediaQuery.of(context).padding 와 유사함 +context.mediaQueryPadding() + +/// MediaQuery.of(context).viewPadding 와 유사함 +context.mediaQueryViewPadding() + +/// MediaQuery.of(context).viewInsets; 와 유사함 +context.mediaQueryViewInsets() + +/// MediaQuery.of(context).orientation; 와 유사함 +context.orientation() + +/// 장치의 가로 모드 확인 +context.isLandscape() + +/// 장치의 세로 모드 확인 +context.isPortrait() + +/// MediaQuery.of(context).devicePixelRatio; 와 유사함 +context.devicePixelRatio() + +/// MediaQuery.of(context).textScaleFactor; 와 유사함 +context.textScaleFactor() + +/// 화면에서 shortestSide를 제공 +context.mediaQueryShortestSide() + +/// True if width be larger than 800 +context.showNavbar() + +/// shortestSide가 600p 미만이면 True +context.isPhone() + +/// shortestSide가 600p 이상이면 True +context.isSmallTablet() + +/// shortestSide가 720p 이상이면 True +context.isLargeTablet() + +/// 현재 장치가 Tablet이면 True +context.isTablet() + +/// 화면 사이즈에 따라 value를 반환 +/// 반환될 수 있는 값들: +/// watch: shortestSide가 300 미만일 때 +/// mobile: shortestSide가 600 미만일 때 +/// tablet: shortestSide가 1200 미만일 때 +/// desktop: shortestSide가 1200 이상일 때 +context.responsiveValue() +``` + +### 선택적 전역 설정과 수동 구성 + +GetMaterialApp은 모든 것이 구성되어 있지만 원한다면 수동으로 Get을 구성할 수 있습니다. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +`GetObserver`안에 Middleware를 사용할 수 있고 이로 인한 어떤 영향도 없습니다. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +`Get`을 위한 _Global Settings_ 을 만들수 있습니다. 어떠한 라우트도 포함되기 전에 `Get.config`에 추가하십시오. +또는 `GetMaterialApp`에 직접 추가 하십시오. + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +선택적으로 `Get`으로 모든 로그 메세지를 리다이렉트 할 수 있습니다. +만약 유명한 로그 패키지를 사용하고 싶으면 +여기에서 원하는 로그가 있습니다: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // pass the message to your favourite logging package here + // please note that even if enableLog: false log messages will be pushed in this callback + // you get check the flag if you want through GetConfig.isLogEnable +} + +``` + +### 지역 상태 위젯들 + +이러한 위젯은 단일값을 관리하고 지역적이고 임시적인 상태를 유지합니다. +우리는 반응적이고 단순함을 위해 추가할 수 있습니다. +예를 들어 `TextField`의 obscureText의 전환으로 사용하거나 +커스텀된 확장되는 패널을 만들거나 +`Scaffold`의 body가 변경되는 동안 `BottomNavigationBar`의 현재 index를 수정할 수 있습니다. + +#### ValueBuilder + +업데이트된 값을 되돌려 받는 `.setState`로 작동하는 `StatefulWidget`의 단순화 입니다. + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // same signature! you could use ( newValue ) => updateFn( newValue ) + ), + // if you need to call something outside the builder method. + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### ObxValue + +[`ValueBuilder`](#valuebuilder)와 비슷하지만 Rx 인스턴스(마법같은 .obs를 기억하세요)를 전달하고 +자동적으로 업데이트되는 반응형 버전입니다... 놀랍지 않습니까? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx에는 호출가능한 함수가 있습니다! (flag) => data.value = flag, 가 사용가능 합니다. + ), + false.obs, +), +``` + +## 유용한 팁 + +`.obs`(_Rx_ 타입이라고 알려진)는 다양한 내부 메서드와 연산자가 있습니다. + +> `.obs`프로퍼티가 **실제 값**이라고 _믿는_ 것은 일반적이지만 실수하지 마십시오! +> 다트의 컴파일러는 충분히 똑똑하고 코드가 깔끔하기 때문에 변수의 타입 선언을 하지 않습니다. +> 하지만: + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + +`message`가 실제 String 값을 _출력_ 하더라도 타입은 **RxString**입니다! + +그래서 `message.substring( 0, 4 )`은 사용하지 못합니다. +_observable(.obs)_ 안의 실제 값에 접근해야 합니다: +가장 많이 사용되는 방법은 `.value`지만 사용할 수 있었는지 알고 있었나요... + +```dart +final name = 'GetX'.obs; +// 현재 값과 다른 값이면 stream을 업데이트만 합니다. +name.value = 'Hey'; + +// 모든 Rx 프로퍼티가 "호출 가능"하고 새로운 값을 반환합니다. +// 하지만 이 접근방식은 `null`를 허용하지 않고 UI가 재구축하지 않습니다. +name('Hello'); + +// getter와 과 같이 'Hello'를 출력합니다. +name() ; + +/// 숫자 타입들: + +final count = 0.obs; + +// 기존 숫자 타입으로 모든 변형 불가 작업을 사용할수 있습니다. +count + 1; + +// 주의하세요! 아래는 `count`가 final이 아닌 경우에만 유효합니다. +count += 1; + +// 값들을 비교할 수도 있습니다: +count > 2; + +/// booleans: + +final flag = false.obs; + +// true/false 사이의 전환이 됩니다. +flag.toggle(); + + +/// 모든 타입들: + +// `값`을 null로 셋합니다. +flag.nil(); + +// 모든 toString(), toJson() 함수들은 `값`으로 전달됩니다. +print( count ); // RxInt 내부에서 `toString()`이 호출됩니다. + +final abc = [0,1,2].obs; +// 값을 json 배열로 바꾸고 RxList를 출력합니다. +// Json은 모든 Rx 타입들을 지원합니다! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList 그리고 RxSet은 그들의 native 타입들을 확장한 특별한 Rx 타입들입니다. +// 반응형이긴 하지만 일반 list로서 RxList가 동작합니다! +abc.add(12); // list에 12가 들어가고 stream을 업데이트합니다. +abc[3]; // List와 같이 인덱스 3을 읽습니다. + + +// 동등비교는 Rx와 값에서 동작하지만 해시코드는 항상 값으로부터 받습니다. +final number = 12.obs; +print( number == 12 ); // prints > true + +/// 커스텀 Rx 모델들: + +// toJson(), toString()은 child에게 지연됩니다. 그래서 이것들을 재정의 하고 직접 관찰하여 print() 할수 있습니다. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user`는 "반응형"이지만 내부 프로퍼티들은 아닙니다! +// 그래서 만약 내부의 변수를 바꾸면... +user.value.name = 'Roi'; +// 위젯은 재구성 되지 않을것 입니다! +// user의 내부의 무언가가 바뀌어도 `Rx`는 알 수가 않습니다. +// 그래서 커스텀 클래스들은 수동으로 바뀌었다고 "알릴" 필요가 있습니다. +user.refresh(); + +// 또는 `update()` 함수를 사용할 수 있습니다! +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` +## StateMixin + +`UI` 상태를 처리하는 또 다른 방법은 `StateMixin` 를 사용하는 것입니다. +이를 구현하려면 `with`를 사용하여 `StateMixin`을 추가하고 +T 모델을 허용하는 컨트롤러에 연결합니다. + +``` dart +class Controller extends GetController with StateMixin{} +``` + +`change()` 메소드는 우리가 원할 때마다 State를 변경합니다. +다음과 같이 데이터와 상태를 전달하면 됩니다: + +```dart +change(data, status: RxStatus.success()); +``` + +RxStatus는 다음 상태를 허용합니다: + +``` dart +RxStatus.loading(); +RxStatus.success(); +RxStatus.empty(); +RxStatus.error('message'); +``` + +UI에서 사용하는 방법: + +```dart +class OtherClass extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + + body: controller.obx( + (state)=>Text(state.name), + + // 여기에 사용자 정의 로딩 표시기를 넣을 수 있지만 + // 기본값은 Center(child:CircularProgressIndicator()) 입니다 + onLoading: CustomLoadingIndicator(), + onEmpty: Text('No data found'), + + // 여기에서도 자신의 오류 위젯을 설정할 수 있지만 + // 기본값은 Center(child:Text(error)) 입니다 + onError: (error)=>Text(error), + ), + ); +} +``` + +#### GetView + +이 위젯을 사랑합니다. 매우 간단하고 유용합니다! + +등록된 `Controller`인 `controller`의 getter로 가져온 `const Stateless`위젯 입니다. 이게 전부입니다. + +```dart + class AwesomeController extends GetxController { + final String title = 'My Awesome View'; + } + + // controller를 등록할때 사용한 `타입`을 전달하는 것을 항상 기억하세요! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // 단지 `controller.something`을 호출합니다. + ); + } + } +``` + +#### GetResponsiveView + +ResponsiveView 를 빌드하려면 이 위젯을 확장하세요. 이 위젯에는 화면 크기 및 유형에 대한 모든 정보가 있는 화면 속성이 포함되어 있습니다. + +##### 사용 방법 + +그것을 빌드하기 위한 두가지 옵션이 있습니다. +- `builder` method 를 사용하면 빌드 할 위젯을 반환합니다. +- `desktop`, `tablet`, `phone`, `watch` method를 사용하면 특정 메소드는 screen type 이 일치할때 빌드됩니다. Screen type이 [ScreenType.Tablet] 일때, tablet method 가 스며나옵니다. 참고: 만약 이 method 를 사용할 경우, `alwaysUseBuilder` 프로퍼티를 `false` 로 설정해주세요. + +`settings` 프로퍼티를 사용하면 screen types 를 위한 width limit 를 설정할 수 있습니다. + +![example](https://github.com/SchabanBo/get_page_example/blob/master/docs/Example.gif?raw=true) +Code to this screen +[code](https://github.com/SchabanBo/get_page_example/blob/master/lib/pages/responsive_example/responsive_view.dart) + +#### GetWidget + +대부분의 사람들이 이 위젯에대해 모르거나 사용법을 완전히 혼동합니다. +사용 사례는 매우 드물지만 매우 구체적입니다: Controller를 `caches`합니다. +_cache_ 이기 때문에 `const Stateless`가 될 수 없습니다. + +> 그러면 언제 Controller를 "cache"할 필요가 있을까요? + +만약 **GetX**의 기능 중 또 다른 "흔하지 않은" 기능을 사용하는 경우:`Get.create()` + +`Get.create(()=>Controller())`가 `Get.find()`을 호출할 때마다 +새로운 `Controller`를 생성할 것 입니다. + +여기서 `GetWidget`이 빛나게 됩니다... 예를 들어 Todo 리스트를 유지하려고 사용할 때 입니다. +위젯이 "재구성"될때 동일한 controller 인스턴스를 유지할 것입니다. + +#### GetxService + +이 클래스틑 `GetxController`와 같이 동일한 생성주기(`onInit()`, `onReady()`, `onClose()`)를 공유합니다. +하지만 이안에 "로직"은 없습니다. 단지 **GetX** 종속성 주입 시스템이 하위클래스를 메모리에서 +**삭제할 수 없음**을 알립니다. + +그래서 `Get.find()`로 활성화하고 항상 접근하는 "서비스들"을 유지하는데 매우 유용합니다. : +`ApiService`, `StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// 서비스들 초기화를 기다림. + runApp(SomeApp()); +} + +/// 플러터 앱이 실행되기 전에 서비스들을 초기화하는 현명한 방법입니다. +/// 실행 흐름을 제어 할수 있으므로(테마 구성, apiKey, 사용자가 정의한 언어등을 로드해야 할 필요가 있으므로 +/// ApiService의 구동전에 SettingService를 로드해야 합니다. +/// 그래서 GetMaterialApp()은 재구성하지 않고 직접적으로 값을 가져옵니다. +Future initServices() async { + print('starting services ...'); + /// 여기에서 get_storage, hive, shared_pref 초기화를 하세요. + /// 또는 연결 고정 또는 비동기적인 무엇이든 하세요. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +`GetxService`를 실질적으로 지우는 한가지 방법은 앱의 "Hot Reboot"과 같은 `Get.reset()`뿐 입니다. +따라서 앱 실행중 절대로 유지되어야 하는 클래스 인스턴스가 필요하면 +`GetxService`를 사용하세요. + +### 테스트 + +당신은 당신의 컨트롤러들을 생성주기를 포함하여 다른 어떤 클래스처럼 테스트할 수 있습니다 : + +```dart +class Controller extends GetxController { + @override + void onInit() { + super.onInit(); + //name2로 값 변경 + name.value = 'name2'; + } + + @override + void onClose() { + name.value = ''; + super.onClose(); + } + + final name = 'name1'.obs; + + void changeName() => name.value = 'name3'; +} + +void main() { + test(''' +Test the state of the reactive variable "name" across all of its lifecycles''', + () { + /// 당신은 생성주기를 제외하고 컨트롤러를 테스트할 수 있습니다, + /// 그러나 당신이 사용하지 않는다면 추천되지 않습니다 + /// GetX 종속성 주입 + final controller = Controller(); + expect(controller.name.value, 'name1'); + + /// 당신이 그것을 사용한다면, 당신은 모든 것을 테스트할 수 있습니다, + /// 각각의 생성주기 이후 어플리케이션의 상태를 포함하여. + Get.put(controller); // onInit was called + expect(controller.name.value, 'name2'); + + /// 당신의 함수를 테스트하세요 + controller.changeName(); + expect(controller.name.value, 'name3'); + + /// onClose 호출됨 + Get.delete(); + + expect(controller.name.value, ''); + }); +} +``` + +#### 팁들 + +##### Mockito 또는 mocktail +당신이 당신의 GetxController/GetxService를 모킹하려고 한다면, 당신은 GetxController를 extend 하고, Mock과 mixin 하라, 그렇게 되면 + +```dart +class NotificationServiceMock extends GetxService with Mock implements NotificationService {} +``` + +##### Get.reset() 사용하기 +당신이 위젯 또는 테스트 그룹을 테스트하고 있다면, 당신의 테스트의 마지막 또는 해제 때 당신의 이전 테스트에서 모든 설정을 리셋하기 위해 Get.rest을 사용하십시오 + +##### Get.testMode +당신이 당신의 컨트롤러에서 당신의 네비게이션을 사용하고 있다면, 당신의 메인의 시작에 `Get.testMode = true` 를 사용하십시오. + + +# 2.0의 주요 변경점 + +1- Rx 타입들: + +| 이전 | 이후 | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController와 GetBuilder는 합쳐졌습니다. 더이상 사용할 controller를 기억시킬 필요가 없습니다. GetxController를 사용하세요. 단순 및 반응형 상태관리 모두에서 잘 동작합니다. + +2- 명명된 라우트 +이전: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +지금: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +무엇이 달라졌습니까? +종종 매개 변수 또는 로그인 토큰에 의해 표시 할 페이지를 결정해야 할 수 있습니다. 이전 접근 방식은 이를 허용하지 않았기 때문에 유연하지 않았습니다. +페이지를 함수에 삽입하면 앱이 시작된 이후 라우트가 메모리에 할당되지 않고 이러한 유형의 접근 방식이 가능하기 때문에 RAM 소비가 크게 감소했습니다: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# 왜 Getx인가? + +1- 플러터가 업데이트된 이후 자주 많은 패키지가 깨졌을 것입니다. 때때로 컴파일중 에러가 발생하고 종종 이에 대해 답변을 해줄 사람이 없었을 겁니다. 그리고 개발자는 에러가 어디에서 발생했는지 추적해서 알아야합니다. 그리고 오직 리포지트리를 통해서 이슈를 오픈하고 해결책을 찾아야합니다. Get은 개발을 위한 주 리소스들(상태, 종속성, 라우트 관리)을 중앙화합니다. pubspec에 단일 패키지를 추가하고 작업을 시작 할 수 있습니다. 플러터가 업데이트 된 이후에도 Get 의존을 업데이트하면 작업할 수 있습니다. Get은 호환성 이슈도 해결합니다. 한 버전에서 종속적으로 사용하여 다른 버전에서 다른 버전을 사용할때 패키지 버전이 다른 버전과 호환되지 않는 경우가 몇 번입니까? 모든 것이 동일한 패키지에 있고 완벽하게 호환되므로 Get을 사용하면 문제가 되지 않습니다. + +2- 플러터는 쉽고 놀랍지만 대다수의 개발자들이 원하지 않는 몇가지 상용구가 있습니다. `Navigator.of(context).push (context, builder [...]` 같은 것들 입니다. Get은 개발을 단순화합니다. 라우트를 위해 8줄의 코드를 작성하고 `Get.to(Home())`만 하면 다음 페이지로 갈 수 있습니다. 동적 웹 url은 현재 플러터에서 정말로 고통스러운 것이고 GetX로 하는 것은 정말 간단합니다. 플러터에서 상태와 종속성을 관리하는 것은 pub에서 수백가지의 패턴이라 많은 논의를 생산합니다. 그러나 변수 끝에 ".obs"를 추가하고 위젯을 Obx 안에 배치하는 것만큼 쉬운 것은 없습니다. 이것으로 해당 변수가 업데이트되면 화면에 자동으로 업데이트됩니다. + +3- 성능에 대하여 걱정하지 않아도 됩니다. 플러터의 성능은 이미 놀랍습니다. 하지만 상태관리자를 사용하고 blocs/stores/controllers 등의 클래스들을 로케이터로 배포하는 것을 상상해보십시오. 종속성이 필요 없는 경우 종속성 제외를 수동으로 호출해야 합니다. 하지만 간단하게 controller를 사용하고 이것들을 더이상 사용하지 않을때 간단하게 메모리에서 삭제될수 있을까요? 이것이 GetX가 하는 일입니다. SmartManagement를 사용하면 사용하지 않는 모든것이 메모리에서 삭제되기 때문에 프로그래밍 말고 다른 걱정을 할 필요가 없습니다. 이러한 로직을 만들지 않고도 최소한의 리소스만 사용함을 보장합니다. + +4- 실질적으로 분리됨. "비즈니스 로직으로부터 뷰를 분리"라는 개념을 들어보셨을 겁니다. 이것은 BLoC, MVC, MVVM의 특징이 아니며 이미 나와 있는 또 다른 표준 개념입니다. 그러나 이 개념은 context의 사용으로 인해 플러터에서 종종 완화됩니다. +만약 InheritedWidget을 찾기 위해 context가 필요하면 뷰나 파라미터로 conetext를 전달해야 합니다. 저는 특히 이 방식이 매우 별로이고 팀의 작업이 항상 뷰의 비즈니스 로직에 의존하게 됩니다. GetX는 표준 접근에서 비정통적이고 StatefulWidgets, InitState 등의 사용을 완전 배제하지 않지만 항상 깔끔하게 유사한 접근을 제공합니다. 예를 들어 Controllers의 수명주기에서 APIREST 요청이 필요할 때 뷰에 어떤 것도 의존할 필요가 없습니다. http 호출의 초기화를 onInit 에서 사용가능 하고 데이터가 도착하면 변수들이 채워집니다. GetX는 완전히 반응형이며(실제 스트림으로 동작) 아이탬중 하나가 채워지면 이 변수를 사용중인 모든 위젯이 자동적으로 화면에서 갱신됩니다. 이를 통해 UI 전문가는 위젯으로만 작업하고 사용자 이벤트(예 : 버튼 클릭) 이외의 비즈니스 로직에 아무것도 보낼 필요가 없으며 비즈니스 로직을 개발하는 사람들은 비즈니스 로직을 별도로 만들고 테스트 할 수 있습니다. + +이 라이브러리는 항상 업데이트되고 새로운 기능이 포함됩니다. 자유롭게 PR을 제공하고 여기에 기여하세요. + +# 커뮤니티 + +## 커뮤니티 채널 + +GetX에는 매우 활동적이고 유용한 커뮤니티가 있습니다. 이 프레임워크의 사용과 관련하여 질문이 있거나 도움이 필요한 경우 커뮤니티 채널에 가입하십시오. 질문에 대한 답변이 더 빨리 제공되며 가장 적합한 장소가 될 것입니다. 이 저장소는 이슈오픈 및 리소스 요청 전용이지만 GetX 커뮤니티의 일부에 속해있습니다. + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## 기여하는 방법 + +_프로젝트에 기여하고 싶으신가요? 우리는 귀하를 우리의 협력자 중 한 명으로 부각시켜 자랑스럽게 생각합니다. 다음은 Get(그리고 플러터)을 더욱 향상시키고 기여할 수 있는 몇 가지 사항입니다._ + +- readme을 다른 언어로 번역하는 데 도움이 됩니다. +- readme에 문서를 추가합니다(Get의 많은 기능이 아직 문서화되지 않았습니다). +- Get 사용법을 설명하는 기사를 쓰거나 비디오를 만듭니다(읽기 및 향후 위키에 삽입될 예정). +- 코드/테스트에 대한 PR을 제공합니다. +- 새로운 기능을 포함합니다. + +어떤 기여도 환영합니다! + +## 기사 및 비디오 + +- [Flutter Getx EcoSystem package for arabic people](https://www.youtube.com/playlist?list=PLV1fXIAyjeuZ6M8m56zajMUwu4uE3-SL0) - Tutorial by [Pesa Coder](https://github.com/UsamaElgendy). +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. +- [A minimal example on dartpad](https://dartpad.dev/2b3d0d6f9d4e312c5fdbefc414c1727e?) - by [Roi Peker](https://github.com/roipeker) diff --git a/packages/get/README.md b/packages/get/README.md new file mode 100644 index 0000000..956dd52 --- /dev/null +++ b/packages/get/README.md @@ -0,0 +1,1276 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + + +
+ +**Languages:** + + +[![English](https://img.shields.io/badge/Language-English-blueviolet?style=for-the-badge)](README.md) +[![Vietnamese](https://img.shields.io/badge/Language-Vietnamese-blueviolet?style=for-the-badge)](README-vi.md) +[![Indonesian](https://img.shields.io/badge/Language-Indonesian-blueviolet?style=for-the-badge)](README.id-ID.md) +[![Urdu](https://img.shields.io/badge/Language-Urdu-blueviolet?style=for-the-badge)](README.ur-PK.md) +[![Chinese](https://img.shields.io/badge/Language-Chinese-blueviolet?style=for-the-badge)](README.zh-cn.md) +[![Portuguese](https://img.shields.io/badge/Language-Portuguese-blueviolet?style=for-the-badge)](README.pt-br.md) +[![Spanish](https://img.shields.io/badge/Language-Spanish-blueviolet?style=for-the-badge)](README-es.md) +[![Russian](https://img.shields.io/badge/Language-Russian-blueviolet?style=for-the-badge)](README.ru.md) +[![Polish](https://img.shields.io/badge/Language-Polish-blueviolet?style=for-the-badge)](README.pl.md) +[![Korean](https://img.shields.io/badge/Language-Korean-blueviolet?style=for-the-badge)](README.ko-kr.md) +[![French](https://img.shields.io/badge/Language-French-blueviolet?style=for-the-badge)](README-fr.md) +[![Japanese](https://img.shields.io/badge/Language-Japanese-blueviolet?style=for-the-badge)](README.ja-JP.md) + + +
+ +- [About Get](#about-get) +- [Installing](#installing) +- [Counter App with GetX](#counter-app-with-getx) +- [The Three pillars](#the-three-pillars) + - [State management](#state-management) + - [Reactive State Manager](#reactive-state-manager) + - [More details about state management](#more-details-about-state-management) + - [Route management](#route-management) + - [More details about route management](#more-details-about-route-management) + - [Dependency management](#dependency-management) + - [More details about dependency management](#more-details-about-dependency-management) +- [Utils](#utils) + - [Internationalization](#internationalization) + - [Translations](#translations) + - [Using translations](#using-translations) + - [Locales](#locales) + - [Change locale](#change-locale) + - [System locale](#system-locale) + - [Change Theme](#change-theme) + - [GetConnect](#getconnect) + - [Default configuration](#default-configuration) + - [Custom configuration](#custom-configuration) + - [GetPage Middleware](#getpage-middleware) + - [Priority](#priority) + - [Redirect](#redirect) + - [onPageCalled](#onpagecalled) + - [OnBindingsStart](#onbindingsstart) + - [OnPageBuildStart](#onpagebuildstart) + - [OnPageBuilt](#onpagebuilt) + - [OnPageDispose](#onpagedispose) + - [Other Advanced APIs](#other-advanced-apis) + - [Optional Global Settings and Manual configurations](#optional-global-settings-and-manual-configurations) + - [Local State Widgets](#local-state-widgets) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [Useful tips](#useful-tips) + - [GetView](#getview) + - [GetResponsiveView](#getresponsiveview) + - [How to use it](#how-to-use-it) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [Breaking changes from 2.0](#breaking-changes-from-20) +- [Why Getx?](#why-getx) +- [Community](#community) + - [Community channels](#community-channels) + - [How to contribute](#how-to-contribute) + - [Articles and videos](#articles-and-videos) + +# About Get + +- GetX is an extra-light and powerful solution for Flutter. It combines high-performance state management, intelligent dependency injection, and route management quickly and practically. + +- GetX has 3 basic principles. This means that these are the priority for all resources in the library: **PRODUCTIVITY, PERFORMANCE AND ORGANIZATION.** + + - **PERFORMANCE:** GetX is focused on performance and minimum consumption of resources. GetX does not use Streams or ChangeNotifier. + + - **PRODUCTIVITY:** GetX uses an easy and pleasant syntax. No matter what you want to do, there is always an easier way with GetX. It will save hours of development and will provide the maximum performance your application can deliver. + + Generally, the developer should be concerned with removing controllers from memory. With GetX this is not necessary because resources are removed from memory when they are not used by default. If you want to keep it in memory, you must explicitly declare "permanent: true" in your dependency. That way, in addition to saving time, you are less at risk of having unnecessary dependencies on memory. Dependency loading is also lazy by default. + + - **ORGANIZATION:** GetX allows the total decoupling of the View, presentation logic, business logic, dependency injection, and navigation. You do not need context to navigate between routes, so you are not dependent on the widget tree (visualization) for this. You don't need context to access your controllers/blocs through an inheritedWidget, so you completely decouple your presentation logic and business logic from your visualization layer. You do not need to inject your Controllers/Models/Blocs classes into your widget tree through `MultiProvider`s. For this, GetX uses its own dependency injection feature, decoupling the DI from its view completely. + + With GetX you know where to find each feature of your application, having clean code by default. In addition to making maintenance easy, this makes the sharing of modules something that until then in Flutter was unthinkable, something totally possible. + BLoC was a starting point for organizing code in Flutter, it separates business logic from visualization. GetX is a natural evolution of this, not only separating the business logic but the presentation logic. Bonus injection of dependencies and routes are also decoupled, and the data layer is out of it all. You know where everything is, and all of this in an easier way than building a hello world. + GetX is the easiest, practical, and scalable way to build high-performance applications with the Flutter SDK. It has a large ecosystem around it that works perfectly together, it's easy for beginners, and it's accurate for experts. It is secure, stable, up-to-date, and offers a huge range of APIs built-in that are not present in the default Flutter SDK. + +- GetX is not bloated. It has a multitude of features that allow you to start programming without worrying about anything, but each of these features are in separate containers and are only started after use. If you only use State Management, only State Management will be compiled. If you only use routes, nothing from the state management will be compiled. + +- GetX has a huge ecosystem, a large community, a large number of collaborators, and will be maintained as long as the Flutter exists. GetX too is capable of running with the same code on Android, iOS, Web, Mac, Linux, Windows, and on your server. + **It is possible to fully reuse your code made on the frontend on your backend with [Get Server](https://github.com/jonataslaw/get_server)**. + +**In addition, the entire development process can be completely automated, both on the server and on the front end with [Get CLI](https://github.com/jonataslaw/get_cli)**. + +**In addition, to further increase your productivity, we have the +[extension to VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) and the [extension to Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)** + +# Installing + +Add Get to your pubspec.yaml file: + +```yaml +dependencies: + get: +``` + +Import get in files that it will be used: + +```dart +import 'package:get/get.dart'; +``` + +# Counter App with GetX + +The "counter" project created by default on new project on Flutter has over 100 lines (with comments). To show the power of Get, I will demonstrate how to make a "counter" changing the state with each click, switching between pages and sharing the state between screens, all in an organized way, separating the business logic from the view, in ONLY 26 LINES CODE INCLUDING COMMENTS. + +- Step 1: + Add "Get" before your MaterialApp, turning it into GetMaterialApp + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- Note: this does not modify the MaterialApp of the Flutter, GetMaterialApp is not a modified MaterialApp, it is just a pre-configured Widget, which has the default MaterialApp as a child. You can configure this manually, but it is definitely not necessary. GetMaterialApp will create routes, inject them, inject translations, inject everything you need for route navigation. If you use Get only for state management or dependency management, it is not necessary to use GetMaterialApp. GetMaterialApp is necessary for routes, snackbars, internationalization, bottomSheets, dialogs, and high-level apis related to routes and absence of context. +- Note²: This step is only necessary if you gonna use route management (`Get.to()`, `Get.back()` and so on). If you not gonna use it then it is not necessary to do step 1 + +- Step 2: + Create your business logic class and place all variables, methods and controllers inside it. + You can make any variable observable using a simple ".obs". + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- Step 3: + Create your View, use StatelessWidget and save some RAM, with Get you may no longer need to use StatefulWidget. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Instantiate your class using Get.put() to make it available for all "child" routes there. + final Controller c = Get.put(Controller()); + + return Scaffold( + // Use Obx(()=> to update Text() whenever count is changed. + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // You can ask Get to find a Controller that is being used by another page and redirect you to it. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Access the updated count variable + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +Result: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +This is a simple project but it already makes clear how powerful Get is. As your project grows, this difference will become more significant. + +Get was designed to work with teams, but it makes the job of an individual developer simple. + +Improve your deadlines, deliver everything on time without losing performance. Get is not for everyone, but if you identified with that phrase, Get is for you! + +# The Three pillars + +## State management + +Get has two different state managers: the simple state manager (we'll call it GetBuilder) and the reactive state manager (GetX/Obx) + +### Reactive State Manager + +Reactive programming can alienate many people because it is said to be complicated. GetX turns reactive programming into something quite simple: + +- You won't need to create StreamControllers. +- You won't need to create a StreamBuilder for each variable +- You will not need to create a class for each state. +- You will not need to create a get for an initial value. +- You will not need to use code generators + +Reactive programming with Get is as easy as using setState. + +Let's imagine that you have a name variable and want that every time you change it, all widgets that use it are automatically changed. + +This is your count variable: + +```dart +var name = 'Jonatas Borges'; +``` + +To make it observable, you just need to add ".obs" to the end of it: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +And in the UI, when you want to show that value and update the screen whenever the values changes, simply do this: + +```dart +Obx(() => Text("${controller.name}")); +``` + +That's all. It's _that_ simple. + +### More details about state management + +**See an more in-depth explanation of state management [here](./documentation/en_US/state_management.md). There you will see more examples and also the difference between the simple state manager and the reactive state manager** + +You will get a good idea of GetX power. + +## Route management + +If you are going to use routes/snackbars/dialogs/bottomsheets without context, GetX is excellent for you too, just see it: + +Add "Get" before your MaterialApp, turning it into GetMaterialApp + +```dart +GetMaterialApp( // Before: MaterialApp( + home: MyHome(), +) +``` + +Navigate to a new screen: + +```dart + +Get.to(NextScreen()); +``` + +Navigate to new screen with name. See more details on named routes [here](./documentation/en_US/route_management.md#navigation-with-named-routes) + +```dart + +Get.toNamed('/details'); +``` + +To close snackbars, dialogs, bottomsheets, or anything you would normally close with Navigator.pop(context); + +```dart +Get.back(); +``` + +To go to the next screen and no option to go back to the previous screen (for use in SplashScreens, login screens, etc.) + +```dart +Get.off(NextScreen()); +``` + +To go to the next screen and cancel all previous routes (useful in shopping carts, polls, and tests) + +```dart +Get.offAll(NextScreen()); +``` + +Noticed that you didn't have to use context to do any of these things? That's one of the biggest advantages of using Get route management. With this, you can execute all these methods from within your controller class, without worries. + +### More details about route management + +**Get works with named routes and also offers lower-level control over your routes! There is in-depth documentation [here](./documentation/en_US/route_management.md)** + +## Dependency management + +Get has a simple and powerful dependency manager that allows you to retrieve the same class as your Bloc or Controller with just 1 lines of code, no Provider context, no inheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); +``` + +- Note: If you are using Get's State Manager, pay more attention to the bindings API, which will make it easier to connect your view to your controller. + +Instead of instantiating your class within the class you are using, you are instantiating it within the Get instance, which will make it available throughout your App. +So you can use your controller (or class Bloc) normally + +**Tip:** Get dependency management is decoupled from other parts of the package, so if for example, your app is already using a state manager (any one, it doesn't matter), you don't need to rewrite it all, you can use this dependency injection with no problems at all + +```dart +controller.fetchApi(); +``` + +Imagine that you have navigated through numerous routes, and you need data that was left behind in your controller, you would need a state manager combined with the Provider or Get_it, correct? Not with Get. You just need to ask Get to "find" for your controller, you don't need any additional dependencies: + +```dart +Controller controller = Get.find(); +//Yes, it looks like Magic, Get will find your controller, and will deliver it to you. You can have 1 million controllers instantiated, Get will always give you the right controller. +``` + +And then you will be able to recover your controller data that was obtained back there: + +```dart +Text(controller.textFromApi); +``` + +### More details about dependency management + +**See a more in-depth explanation of dependency management [here](./documentation/en_US/dependency_management.md)** + +# Utils + +## Internationalization + +### Translations + +Translations are kept as a simple key-value dictionary map. +To add custom translations, create a class and extend `Translations`. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### Using translations + +Just append `.tr` to the specified key and it will be translated, using the current value of `Get.locale` and `Get.fallbackLocale`. + +```dart +Text('title'.tr); +``` + +#### Using translation with singular and plural + +```dart +var products = []; +Text('singularKey'.trPlural('pluralKey', products.length, Args)); +``` + +#### Using translation with parameters + +```dart +import 'package:get/get.dart'; + + +Map> get keys => { + 'en_US': { + 'logged_in': 'logged in as @name with email @email', + }, + 'es_ES': { + 'logged_in': 'iniciado sesión como @name con e-mail @email', + } +}; + +Text('logged_in'.trParams({ + 'name': 'Jhon', + 'email': 'jhon@example.com' + })); +``` + +### Locales + +Pass parameters to `GetMaterialApp` to define the locale and translations. + +```dart +return GetMaterialApp( + translations: Messages(), // your translations + locale: Locale('en', 'US'), // translations will be displayed in that locale + fallbackLocale: Locale('en', 'UK'), // specify the fallback locale in case an invalid locale is selected. +); +``` + +#### Change locale + +Call `Get.updateLocale(locale)` to update the locale. Translations then automatically use the new locale. + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### System locale + +To read the system locale, you could use `Get.deviceLocale`. + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## Change Theme + +Please do not use any higher level widget than `GetMaterialApp` in order to update it. This can trigger duplicate keys. A lot of people are used to the prehistoric approach of creating a "ThemeProvider" widget just to change the theme of your app, and this is definitely NOT necessary with **GetX™**. + +You can create your custom theme and simply add it within `Get.changeTheme` without any boilerplate for that: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +If you want to create something like a button that changes the Theme in `onTap`, you can combine two **GetX™** APIs for that: + +- The api that checks if the dark `Theme` is being used. +- And the `Theme` Change API, you can just put this within an `onPressed`: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +When `.darkmode` is activated, it will switch to the _light theme_, and when the _light theme_ becomes active, it will change to _dark theme_. + +## GetConnect + +GetConnect is an easy way to communicate from your back to your front with http or websockets + +### Default configuration + +You can simply extend GetConnect and use the GET/POST/PUT/DELETE/SOCKET methods to communicate with your Rest API or websockets. + +```dart +class UserProvider extends GetConnect { + // Get request + Future getUser(int id) => get('http://youapi/users/$id'); + // Post request + Future postUser(Map data) => post('http://youapi/users', body: data); + // Post request with File + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` + +### Custom configuration + +GetConnect is highly customizable You can define base Url, as answer modifiers, as Requests modifiers, define an authenticator, and even the number of attempts in which it will try to authenticate itself, in addition to giving the possibility to define a standard decoder that will transform all your requests into your Models without any additional configuration. + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // All request will pass to jsonEncode so CasesModel.fromJson() + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; // It define baseUrl to + // Http and websockets if used with no [httpClient] instance + + // It's will attach 'apikey' property on header from all requests + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // Even if the server sends data from the country "Brazil", + // it will never be displayed to users, because you remove + // that data from the response, even before the response is delivered + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazilll'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // Set the header + request.headers['Authorization'] = "$token"; + return request; + }); + + //Autenticator will be called 3 times if HttpStatus is + //HttpStatus.unauthorized + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## GetPage Middleware + +The GetPage has now new property that takes a list of GetMiddleWare and run them in the specific order. + +**Note**: When GetPage has a Middlewares, all the children of this page will have the same middlewares automatically. + +### Priority + +The Order of the Middlewares to run can be set by the priority in the GetMiddleware. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` + +those middlewares will be run in this order **-8 => 2 => 4 => 5** + +### Redirect + +This function will be called when the page of the called route is being searched for. It takes RouteSettings as a result to redirect to. Or give it null and there will be no redirecting. + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### onPageCalled + +This function will be called when this Page is called before anything created +you can use it to change something about the page or give it new page + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +This function will be called right before the Bindings are initialize. +Here you can change Bindings for this page. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +This function will be called right after the Bindings are initialize. +Here you can do something after that you created the bindings and before creating the page widget. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### OnPageBuilt + +This function will be called right after the GetPage.page function is called and will give you the result of the function. and take the widget that will be showed. + +### OnPageDispose + +This function will be called right after disposing all the related objects (Controllers, views, ...) of the page. + +## Other Advanced APIs + +```dart +// give the current args from currentScreen +Get.arguments + +// give name of previous route +Get.previousRoute + +// give the raw route to access for example, rawRoute.isFirst() +Get.rawRoute + +// give access to Routing API from GetObserver +Get.routing + +// check if snackbar is open +Get.isSnackbarOpen + +// check if dialog is open +Get.isDialogOpen + +// check if bottomsheet is open +Get.isBottomSheetOpen + +// remove one route. +Get.removeRoute() + +// back repeatedly until the predicate returns true. +Get.until() + +// go to next route and remove all the previous routes until the predicate returns true. +Get.offUntil() + +// go to next named route and remove all the previous routes until the predicate returns true. +Get.offNamedUntil() + +//Check in what platform the app is running +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +//Check the device type +GetPlatform.isMobile +GetPlatform.isDesktop +//All platforms are supported independently in web! +//You can tell if you are running inside a browser +//on Windows, iOS, OSX, Android, etc. +GetPlatform.isWeb + + +// Equivalent to : MediaQuery.of(context).size.height, +// but immutable. +Get.height +Get.width + +// Gives the current context of the Navigator. +Get.context + +// Gives the context of the snackbar/dialog/bottomsheet in the foreground, anywhere in your code. +Get.contextOverlay + +// Note: the following methods are extensions on context. Since you +// have access to context in any place of your UI, you can use it anywhere in the UI code + +// If you need a changeable height/width (like Desktop or browser windows that can be scaled) you will need to use context. +context.width +context.height + +// Gives you the power to define half the screen, a third of it and so on. +// Useful for responsive applications. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// Similar to MediaQuery.of(context).size +context.mediaQuerySize() + +/// Similar to MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// Similar to MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// Similar to MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// Similar to MediaQuery.of(context).orientation; +context.orientation() + +/// Check if device is on landscape mode +context.isLandscape() + +/// Check if device is on portrait mode +context.isPortrait() + +/// Similar to MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// Similar to MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// Get the shortestSide from screen +context.mediaQueryShortestSide() + +/// True if width be larger than 800 +context.showNavbar() + +/// True if the shortestSide is smaller than 600p +context.isPhone() + +/// True if the shortestSide is largest than 600p +context.isSmallTablet() + +/// True if the shortestSide is largest than 720p +context.isLargeTablet() + +/// True if the current device is Tablet +context.isTablet() + +/// Returns a value according to the screen size +/// can give value for: +/// watch: if the shortestSide is smaller than 300 +/// mobile: if the shortestSide is smaller than 600 +/// tablet: if the shortestSide is smaller than 1200 +/// desktop: if width is largest than 1200 +context.responsiveValue() +``` + +### Optional Global Settings and Manual configurations + +GetMaterialApp configures everything for you, but if you want to configure Get manually. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +You will also be able to use your own Middleware within `GetObserver`, this will not influence anything. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +You can create _Global Settings_ for `Get`. Just add `Get.config` to your code before pushing any route. +Or do it directly in your `GetMaterialApp` + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +You can optionally redirect all the logging messages from `Get`. +If you want to use your own, favourite logging package, +and want to capture the logs there: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // pass the message to your favourite logging package here + // please note that even if enableLog: false log messages will be pushed in this callback + // you get check the flag if you want through GetConfig.isLogEnable +} + +``` + +### Local State Widgets + +These Widgets allows you to manage a single value, and keep the state ephemeral and locally. +We have flavours for Reactive and Simple. +For instance, you might use them to toggle obscureText in a `TextField`, maybe create a custom +Expandable Panel, or maybe modify the current index in `BottomNavigationBar` while changing the content +of the body in a `Scaffold`. + +#### ValueBuilder + +A simplification of `StatefulWidget` that works with a `.setState` callback that takes the updated value. + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // same signature! you could use ( newValue ) => updateFn( newValue ) + ), + // if you need to call something outside the builder method. + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### ObxValue + +Similar to [`ValueBuilder`](#valuebuilder), but this is the Reactive version, you pass a Rx instance (remember the magical .obs?) and +updates automatically... isn't it awesome? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx has a _callable_ function! You could use (flag) => data.value = flag, + ), + false.obs, +), +``` + +## Useful tips + +`.obs`ervables (also known as _Rx_ Types) have a wide variety of internal methods and operators. + +> Is very common to _believe_ that a property with `.obs` **IS** the actual value... but make no mistake! +> We avoid the Type declaration of the variable, because Dart's compiler is smart enough, and the code +> looks cleaner, but: + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + +Even if `message` _prints_ the actual String value, the Type is **RxString**! + +So, you can't do `message.substring( 0, 4 )`. +You have to access the real `value` inside the _observable_: +The most "used way" is `.value`, but, did you know that you can also use... + +```dart +final name = 'GetX'.obs; +// only "updates" the stream, if the value is different from the current one. +name.value = 'Hey'; + +// All Rx properties are "callable" and returns the new value. +// but this approach does not accepts `null`, the UI will not rebuild. +name('Hello'); + +// is like a getter, prints 'Hello'. +name() ; + +/// numbers: + +final count = 0.obs; + +// You can use all non mutable operations from num primitives! +count + 1; + +// Watch out! this is only valid if `count` is not final, but var +count += 1; + +// You can also compare against values: +count > 2; + +/// booleans: + +final flag = false.obs; + +// switches the value between true/false +flag.toggle(); + + +/// all types: + +// Sets the `value` to null. +flag.nil(); + +// All toString(), toJson() operations are passed down to the `value` +print( count ); // calls `toString()` inside for RxInt + +final abc = [0,1,2].obs; +// Converts the value to a json Array, prints RxList +// Json is supported by all Rx types! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList and RxSet are special Rx types, that extends their native types. +// but you can work with a List as a regular list, although is reactive! +abc.add(12); // pushes 12 to the list, and UPDATES the stream. +abc[3]; // like Lists, reads the index 3. + + +// equality works with the Rx and the value, but hashCode is always taken from the value +final number = 12.obs; +print( number == 12 ); // prints > true + +/// Custom Rx Models: + +// toJson(), toString() are deferred to the child, so you can implement override on them, and print() the observable directly. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user` is "reactive", but the properties inside ARE NOT! +// So, if we change some variable inside of it... +user.value.name = 'Roi'; +// The widget will not rebuild!, +// `Rx` don't have any clue when you change something inside user. +// So, for custom classes, we need to manually "notify" the change. +user.refresh(); + +// or we can use the `update()` method! +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` +## StateMixin + +Another way to handle your `UI` state is use the `StateMixin` . +To implement it, use the `with` to add the `StateMixin` +to your controller which allows a T model. + +``` dart +class Controller extends GetController with StateMixin{} +``` + +The `change()` method change the State whenever we want. +Just pass the data and the status in this way: + +```dart +change(data, status: RxStatus.success()); +``` + +RxStatus allow these status: + +``` dart +RxStatus.loading(); +RxStatus.success(); +RxStatus.empty(); +RxStatus.error('message'); +``` + +To represent it in the UI, use: + +```dart +class OtherClass extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + + body: controller.obx( + (state)=>Text(state.name), + + // here you can put your custom loading indicator, but + // by default would be Center(child:CircularProgressIndicator()) + onLoading: CustomLoadingIndicator(), + onEmpty: Text('No data found'), + + // here also you can set your own error widget, but by + // default will be an Center(child:Text(error)) + onError: (error)=>Text(error), + ), + ); +} +``` + +#### GetView + +I love this Widget, is so simple, yet, so useful! + +Is a `const Stateless` Widget that has a getter `controller` for a registered `Controller`, that's all. + +```dart + class AwesomeController extends GetController { + final String title = 'My Awesome View'; + } + + // ALWAYS remember to pass the `Type` you used to register your controller! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // just call `controller.something` + ); + } + } +``` + +#### GetResponsiveView + +Extend this widget to build responsive view. +this widget contains the `screen` property that have all +information about the screen size and type. + +##### How to use it + +You have two options to build it. + +- with `builder` method you return the widget to build. +- with methods `desktop`, `tablet`,`phone`, `watch`. the specific + method will be built when the screen type matches the method + when the screen is [ScreenType.Tablet] the `tablet` method + will be exuded and so on. + **Note:** If you use this method please set the property `alwaysUseBuilder` to `false` + +With `settings` property you can set the width limit for the screen types. + +![example](https://github.com/SchabanBo/get_page_example/blob/master/docs/Example.gif?raw=true) +Code to this screen +[code](https://github.com/SchabanBo/get_page_example/blob/master/lib/pages/responsive_example/responsive_view.dart) + +#### GetWidget + +Most people have no idea about this Widget, or totally confuse the usage of it. +The use case is very rare, but very specific: It `caches` a Controller. +Because of the _cache_, can't be a `const Stateless`. + +> So, when do you need to "cache" a Controller? + +If you use, another "not so common" feature of **GetX**: `Get.create()`. + +`Get.create(()=>Controller())` will generate a new `Controller` each time you call +`Get.find()`, + +That's where `GetWidget` shines... as you can use it, for example, +to keep a list of Todo items. So, if the widget gets "rebuilt", it will keep the same controller instance. + +#### GetxService + +This class is like a `GetxController`, it shares the same lifecycle ( `onInit()`, `onReady()`, `onClose()`). +But has no "logic" inside of it. It just notifies **GetX** Dependency Injection system, that this subclass +**can not** be removed from memory. + +So is super useful to keep your "Services" always reachable and active with `Get.find()`. Like: +`ApiService`, `StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// AWAIT SERVICES INITIALIZATION. + runApp(SomeApp()); +} + +/// Is a smart move to make your Services intiialize before you run the Flutter app. +/// as you can control the execution flow (maybe you need to load some Theme configuration, +/// apiKey, language defined by the User... so load SettingService before running ApiService. +/// so GetMaterialApp() doesnt have to rebuild, and takes the values directly. +void initServices() async { + print('starting services ...'); + /// Here is where you put get_storage, hive, shared_pref initialization. + /// or moor connection, or whatever that's async. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +The only way to actually delete a `GetxService`, is with `Get.reset()` which is like a +"Hot Reboot" of your app. So remember, if you need absolute persistence of a class instance during the +lifetime of your app, use `GetxService`. + + +### Tests + +You can test your controllers like any other class, including their lifecycles: + +```dart +class Controller extends GetxController { + @override + void onInit() { + super.onInit(); + //Change value to name2 + name.value = 'name2'; + } + + @override + void onClose() { + name.value = ''; + super.onClose(); + } + + final name = 'name1'.obs; + + void changeName() => name.value = 'name3'; +} + +void main() { + test(''' +Test the state of the reactive variable "name" across all of its lifecycles''', + () { + /// You can test the controller without the lifecycle, + /// but it's not recommended unless you're not using + /// GetX dependency injection + final controller = Controller(); + expect(controller.name.value, 'name1'); + + /// If you are using it, you can test everything, + /// including the state of the application after each lifecycle. + Get.put(controller); // onInit was called + expect(controller.name.value, 'name2'); + + /// Test your functions + controller.changeName(); + expect(controller.name.value, 'name3'); + + /// onClose was called + Get.delete(); + + expect(controller.name.value, ''); + }); +} +``` + +#### Tips + +##### Mockito or mocktail +If you need to mock your GetxController/GetxService, you should extend GetxController, and mixin it with Mock, that way + +```dart +class NotificationServiceMock extends GetxService with Mock implements NotificationService {} +``` + +##### Using Get.reset() +If you are testing widgets, or test groups, use Get.reset at the end of your test or in tearDown to reset all settings from your previous test. + +##### Get.testMode +if you are using your navigation in your controllers, use `Get.testMode = true` at the beginning of your main. + + +# Breaking changes from 2.0 + +1- Rx types: + +| Before | After | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController and GetBuilder now have merged, you no longer need to memorize which controller you want to use, just use GetxController, it will work for simple state management and for reactive as well. + +2- NamedRoutes +Before: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Now: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +Why this change? +Often, it may be necessary to decide which page will be displayed from a parameter, or a login token, the previous approach was inflexible, as it did not allow this. +Inserting the page into a function has significantly reduced the RAM consumption, since the routes will not be allocated in memory since the app was started, and it also allowed to do this type of approach: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# Why Getx? + +1- Many times after a Flutter update, many of your packages will break. Sometimes compilation errors happen, errors often appear that there are still no answers about, and the developer needs to know where the error came from, track the error, only then try to open an issue in the corresponding repository, and see its problem solved. Get centralizes the main resources for development (State, dependency and route management), allowing you to add a single package to your pubspec, and start working. After a Flutter update, the only thing you need to do is update the Get dependency, and get to work. Get also resolves compatibility issues. How many times a version of a package is not compatible with the version of another, because one uses a dependency in one version, and the other in another version? This is also not a concern using Get, as everything is in the same package and is fully compatible. + +2- Flutter is easy, Flutter is incredible, but Flutter still has some boilerplate that may be unwanted for most developers, such as `Navigator.of(context).push (context, builder [...]`. Get simplifies development. Instead of writing 8 lines of code to just call a route, you can just do it: `Get.to(Home())` and you're done, you'll go to the next page. Dynamic web urls are a really painful thing to do with Flutter currently, and that with GetX is stupidly simple. Managing states in Flutter, and managing dependencies is also something that generates a lot of discussion, as there are hundreds of patterns in the pub. But there is nothing as easy as adding a ".obs" at the end of your variable, and place your widget inside an Obx, and that's it, all updates to that variable will be automatically updated on the screen. + +3- Ease without worrying about performance. Flutter's performance is already amazing, but imagine that you use a state manager, and a locator to distribute your blocs/stores/controllers/ etc. classes. You will have to manually call the exclusion of that dependency when you don't need it. But have you ever thought of simply using your controller, and when it was no longer being used by anyone, it would simply be deleted from memory? That's what GetX does. With SmartManagement, everything that is not being used is deleted from memory, and you shouldn't have to worry about anything but programming. You will be assured that you are consuming the minimum necessary resources, without even having created a logic for this. + +4- Actual decoupling. You may have heard the concept "separate the view from the business logic". This is not a peculiarity of BLoC, MVC, MVVM, and any other standard on the market has this concept. However, this concept can often be mitigated in Flutter due to the use of context. +If you need context to find an InheritedWidget, you need it in the view, or pass the context by parameter. I particularly find this solution very ugly, and to work in teams we will always have a dependence on View's business logic. Getx is unorthodox with the standard approach, and while it does not completely ban the use of StatefulWidgets, InitState, etc., it always has a similar approach that can be cleaner. Controllers have life cycles, and when you need to make an APIREST request for example, you don't depend on anything in the view. You can use onInit to initiate the http call, and when the data arrives, the variables will be populated. As GetX is fully reactive (really, and works under streams), once the items are filled, all widgets that use that variable will be automatically updated in the view. This allows people with UI expertise to work only with widgets, and not have to send anything to business logic other than user events (like clicking a button), while people working with business logic will be free to create and test the business logic separately. + +This library will always be updated and implementing new features. Feel free to offer PRs and contribute to them. + +# Community + +## Community channels + +GetX has a highly active and helpful community. If you have questions, or would like any assistance regarding the use of this framework, please join our community channels, your question will be answered more quickly, and it will be the most suitable place. This repository is exclusive for opening issues, and requesting resources, but feel free to be part of GetX Community. + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## How to contribute + +_Want to contribute to the project? We will be proud to highlight you as one of our collaborators. Here are some points where you can contribute and make Get (and Flutter) even better._ + +- Helping to translate the readme into other languages. +- Adding documentation to the readme (a lot of Get's functions haven't been documented yet). +- Write articles or make videos teaching how to use Get (they will be inserted in the Readme and in the future in our Wiki). +- Offering PRs for code/tests. +- Including new functions. + +Any contribution is welcome! + +## Articles and videos + +- [Flutter Getx EcoSystem package for arabic people](https://www.youtube.com/playlist?list=PLV1fXIAyjeuZ6M8m56zajMUwu4uE3-SL0) - Tutorial by [Pesa Coder](https://github.com/UsamaElgendy). +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. +- [A minimal example on dartpad](https://dartpad.dev/2b3d0d6f9d4e312c5fdbefc414c1727e?) - by [Roi Peker](https://github.com/roipeker) diff --git a/packages/get/README.pl.md b/packages/get/README.pl.md new file mode 100644 index 0000000..cbc6861 --- /dev/null +++ b/packages/get/README.pl.md @@ -0,0 +1,547 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +*Languages: [English](README.md), [Wietnamski](README-vi.md), [Indonezyjski](README.id-ID.md), [Urdu](README.ur-PK.md), [Język chiński](README.zh-cn.md), [Brazilian Portuguese](README.pt-br.md), [Spanish](README-es.md), [Russian](README.ru.md), Polish (Jesteś tu), [Koreański](README.ko-kr.md), [French](README-fr.md)* + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + + Awesome Flutter + +Buy Me A Coffee + + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +- [Kanały komunikacji i wsparcia:](#kanały-komunikacji-i-wsparcia) +- [Wprowadzenie](#wprowadzenie) +- [Instalacja](#instalacja) +- [Counter App z GetX](#counter-app-z-getx) +- [Trzy filary](#trzy-filary) + - [Menadżer stanu](#menadżer-stanu) + - [Reaktywny menadżer stanu](#reaktywny-menadżer-stanu) + - [Bardziej szczegółowo o menadżerze stanu](#bardziej-szczegółowo-o-menadżerze-stanu) + - [Video tłumaczące użycie menadżera stanu](#video-tłumaczące-użycie-menadżera-stanu) + - [Zarządzanie routami](#zarządzanie-routami) + - [Więcej o routach](#więcej-o-routach) + - [Video tłumaczące użycie](#video-tłumaczące-użycie) + - [Zarządzanie dependencies](#zarządzanie-dependencies) + - [Bardziej szczegółowo o menadżerze dependencies](#bardziej-szczegółowo-o-menadżerze-dependencies) +- [Jak włożyć coś od siebie](#jak-włożyć-coś-od-siebie) +- [Narzędzia](#narzędzia) + - [Zmiana motywu](#zmiana-motywu) + - [Inne zaawansowane API](#inne-zaawansowane-api) + - [Opcjonalne globalne ustawienia i manualna konfiguracja](#opcjonalne-globalne-ustawienia-i-manualna-konfiguracja) + - [Video tłumaczące inne funkcjonalności GetX](#video-tłumaczące-inne-funkcjonalności-getx) +- [Zmiany od 2.0](#zmiany-od-20) + + +# Kanały komunikacji i wsparcia: + +[**Slack (English)**](https://communityinviter.com/apps/getxworkspace/getx) + +[**Discord (English and Portuguese)**](https://discord.com/invite/9Hpt99N) + +[**Telegram (Portuguese)**](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +# Wprowadzenie +- GetX jest bardzo lekką, a zarazem potężną biblioteką do Flattera. Łączy wysoką wydajność menadżera stanu, inteligętne dodawanie dependencies i zarządzanie routami w szybki i praktyczny sposób. +- GetX nie jest dla wszystkich, skupia się na jak najmniejszej konsumpcji zasobów (wydajności) ([zobacz benchmarki](https://github.com/jonataslaw/benchmarks)), używaniu łatwej skłani (produktywności) i daniu możliwości pełnego rozbicia View na z logiki biznesowej (organizacja). +- GetX da Ci supermoce i zwiększy produktywność w tworzeniu projektu. Oszczędzi godziny zarówno początkującym jak i ekspertom. +- Nawiguj bez podawania `context`, używaj open `dialogs`, `snackbarów` oraz `bottomsheetów` z każdego miejsca w kodzie. Zarządzaj stanami i dodawaj dependencies w prosty i praktyczny sposób! +- Get jest bezpieczny, stabilny i aktualny. Oprócz tego oferuje szeroki zakres API, które nie są zawarte w standardowym frameworku. +- GetX nie jest przytłaczający. Ma wiele funkcjonalności pozwalajacych na rozpoczęcie programowania bez martwienia się zupełnie nic. Wszystkie funkcjonalności są w osobnych kontenerach, które dodawane są dopiero po ich użyciu. Jeśli tylko używasz menadżera stanu, tylko on będzie kompilowany. Jeśli używasz routów, lecz nic z menadżera stanu to nie będzie on kompilowany. Możesz skompilować repozytorium benchmark i zobaczysz że używa tylko menadżera stanu. Aplikacje używajace Get są mniejsze niz inne, ponieważ wszystkie rozwiązania GetX są projektowane z myślą o lekkości i wydajności. Jest to też zasługa Flutterowego AOT, które jest niesamowite i eliminuje nieużywane zasoby jak żaden inny framework. + +**GetX zwiększa twoja produktywność, lecz możesz to jeszcze przyspieszyć instalując rozszerzenie [GetX extension](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) do swojego VSCode**. Jeszcze nie dostępne w innych IDE. + +# Instalacja + +Dodaj Get do swojego pliku pubspec.yaml: + +```yaml +dependencies: + get: +``` + +Zaimportuj Get do plików w których chcesz go użyć: + +```dart +import 'package:get/get.dart'; +``` + +# Counter App z GetX + +Przykładowa aplikaja tworzona domyślnie podczas kreacji nowego projektu we Flaterze ma ponad 100 lini kodu (z komentarzami). By pokazać siłę Get pokażę jak zrobić "licznik" ze zmianą stanu przy każdym kliknięciu, zmianą stron i udostępniajac stan pomiędzy ekranami. Wszystko w zorganizowany sposób dzieląc bussines logic z view w zaledwie 26 LINI KODU WŁĄCZAJĄC W TO KOMENTARZE. + +-Krok 1: +Dodaj "Get" przed MaterialApp, zamieniając je na GetMaterialApp + + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- Note: nie jest to modyfikaja MaterialApp, ponieważ GetMaterialApp nie jest zmodyfikowanym MaterialApp z Fluttera, jest tylko skonfigurowanym Widgetem mającym domyślnie MaterialApp jako dziecko. Możesz to konfigurować ręcznie, ale nie jest to konieczne. GetMaterialApp jest niezbędne dla działania routów, snackbarów, bootomsheetów, internacjonalizacji, dialogów i wysokopoziomowych api powiązanych z routami i nieobecnościa kontekstu. Nie jest to jednak wymagane do używania zarzadzania stanem i dependencies. + +-Krok 2: +Tworzymy klasę business logic i umieszczmy w niej wszystkie zmienne, metody oraz kontrolery. Możesz zmienić zmiennaą na obserwowalną używajac prostego subfixu ".obs" + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count.value++; +} +``` +- Krok 3: +Tworzymy View. Użyj StatelessWidget oszczędzajac przy tym RAM. Z Get nie będzie Ci potrzebny StatefullWidget. + + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Instantiate your class using Get.put() to make it available for all "child" routes there. + final Controller c = Get.put(Controller()); + + return Scaffold( + // Use Obx(()=> to update Text() whenever count is changed. + appBar: AppBar(title: Obx(() => Text("Clicks: " + c.count.string))), + + // Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // You can ask Get to find a Controller that is being used by another page and redirect you to it. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Access the updated count variable + return Scaffold(body: Center(child: Text(c.count.string))); + } +} +``` +Wynik: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +Jest to prosty projekt, ale już na jego przykładzie widać potęgę Get. Wraz ze wzrostem rozmiaru aplikacji ta różnica tylko się powiększa. + +Get był projektowany dla pracy z zespołem, ale równie dobrze sprawdza się w indywidualnych projektach. + +Zawsze dotrzymuj deadlinów i dostarczaj swoje rozwiązania na czas bez straty na wydajności. Get nie jest dla wszystkich jak już wspominałem, ale jeśli identyfikujesz się z powyższym zdaniem Get jest właśnie dla Ciebie. + +# Trzy filary + +## Menadżer stanu + +Obecnie istnieje kilka menadżeów dla Fluttera. Jednak większość z nich wymaga używania ChangeNotifier, po to aby zaktualizować widżety, co nie sprawdza się pod kątem wydajności w średnich i dużych aplikacach. Możesz sprawdzić w oficjalnej dokumentacji, że ChangeNotifier powinien być używany z maksimum dwoma listinerami (https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html), będąc praktycznie bezużytecznym w średnich i duzych projektach. + +Get nie jest ani lepszy, ani gorszy od innych menadżerów stanów, ale powinieneś rozpatrzyć te punkty jak i poniższe, aby wybrać między użyciem Get w czystej formie (Vanilla), albo używaniem go wraz z innym menadżerem. + +Definitywnie Get nie jest przeciwnikiem żadnego innego menadżera, ponieważ jest on mikroframeworkiem, nie tylko menadżerem stanu. Może być użyty samodzielnie, lub w koegzystencji. + +Get ma bardzo lekki i prosty menadżer stanu (napisany w tylko 95 lini kodu), który nie używa ChangeNotifier. Sprosta on wymaganiom szczególnie nowych we Flutterze i nie sprawi problemu nawet w dużych aplikacjach. + +### Reaktywny menadżer stanu + +Reaktywne programowanie może odtrącać niektórych, ponieważ powszechnie jest uważane za skomplikowane. GetX zamienia to w coś prostego: + +- Nie musisz tworzyć StreamControllerów, +- Nie musisz tworzyć StreamBuildera dla każdej zmiennej, +- Nie ma potrzeby tworzenia klasy dla każdego stanu, +- Nie musisz tworzyć Get dla inicjalnej zmiennej + +Wyobraź sobie, że masz zmienną i za każdym razem jak zmienisz ją chcesz żeby wszystkie widżety używające jej automatycznie się zmieniły + +Przykładowa zmienna: +```dart +var name = 'Jonatas Borges'; +``` + +By zamienić ją na obserwowalną dodaj ".obx" na końcu: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +I w UI, kiedy chcesz go zaktualizować przy modyfikacji zmiennej po prostu dodaj to: +```dart +Obx (() => Text (controller.name)); +``` + +To wszystko. *Proste*, co nie? + +### Bardziej szczegółowo o menadżerze stanu +**Zobacz bardziej szczegółowe wytłumaczenie menadżera stanu [tutaj](./documentation/en_US/state_management.md). Znajdują się tam przykłady jak o różnice między prostym menadżerem stanu oraz reaktywnym** + +### Video tłumaczące użycie menadżera stanu + +Tadas Petra nagrał o tym niezwykły film: + +Link: [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) + +## Zarządzanie routami + +Jeśli chcesz używać routes/snackbars/dialogs/bottomsheets z GetX możesz to robić bez contextu. + +Zamień MaterialApp na GetMaterialApp +```dart +GetMaterialApp( // Before: MaterialApp( + home: MyHome(), +) +``` + +By nawigować do nowego ekranu: + +```dart +Get.to(NextScreen()); +``` + +By powrócić do poprzedniego ekranu + +```dart +Get.back(); +``` + +By przejść do następnego ekranu bez możliwości powrotu do poprzedniego (do zastosowania SplashScreenów, ekranów logowania itd.) + +```dart +Get.off(NextScreen()); +``` + +By przejść do następnego ekranu niszcząc poprzednie routy (użyteczne w koszykach, ankietach i testach) + +```dart +Get.offAll(NextScreen()); +``` + +By nawigować do następnego routa i otrzymać, lub uaktualnić dane zaraz po tym jak z niego wrócisz: +```dart +var data = await Get.to(Payment()); +``` +w innym ekranie wyślij dane z poprzedniego routa:featury + +```dart +Get.back(result: 'sucess'); +``` +I użyj następujące np.: +```dart +if(data == 'sucess') madeAnything(); +``` +Zobacz, ze do żadnej z tych operacji nie potrzebowałeś contextu. Jest to jedna z głównych zalet GetX oszczędzającego na niepotrzebnej obudowie w kod i dającego możliwość używania tych metod w klasie kontrolera. + + +### Więcej o routach + +**Get używa named routes oraz oferuje niskopoziomową obsługę routów! Zobacz bardziej szczegółową dokumentacje [tutaj](./documentation/en_US/route_management.md)** + +### Video tłumaczące użycie + +Tadas Petra nagrał o tym niezwykły film: + +Link: [Complete GetX Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) + +## Zarządzanie dependencies + +Get ma prosty, a zarazem potężny menadżer dependencies. Pozwala on na otrzymanie tych samych klas jak twoje Bloc lub Kontroler pisząc jedną linię kodu bez Provider context i inheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); +``` + +- Note: Jeśli używasz menadżera stanu Get zwróć uwagę na binding api, które pozwoli Ci łatwiej połączyć twój widok z kontrolerem. +https://github.com/jonataslaw/get +**Tip:** Menadżer dependency Get jest oddzielony od innych części pakietu więc jeśli już używasz menadżera stanu(którego kolwiek, bez różnicy) nie musisz przepisywać tego wszystkiego na nowo. Możesz używać tego dodawania dependencies bez poroblemu. + +```dart +controller.fetchApi(); +``` +Wyobraź sobie, że musisz nawigować pomiędzy wieloma routami i potrzebujesz dane z kontrolerów z poprzednich ekranów. Musiałbyś użyć menadżera stanu z dodatkiem Providera albo Get_it, prawda? Otóż nie z Fet. Musisz po prostu poprosić Get o znalezienie tego kontrolera i nie potrzebujesz przy tym dodatkowych dependencies. + +```dart +Controller controller = Get.find(); +//Tak, to wygląda jak Magia, Get znjadzie Twój kontroler i Ci go dostarczy. Możesz mieć nawet MILION kontrolerów, a Get zawsze da Ci prawidłowy kontroler. +``` + +I wtedy będziesz mógł otrzymać z niego dane bez żadnego problemu + +```dart +Text(controller.textFromApi); +``` +### Bardziej szczegółowo o menadżerze dependencies + +**Zobzcz więcej w dokumentacji [tutaj](./documentation/en_US/dependency_management.md)** + +# Jak włożyć coś od siebie + +Możesz uczestniczyć w rozwoju projektu na różny sposób: +- Pomagając w tłumaczeniu readme na inne języki. +- Dodając dokumentację do readme (nawet połowa funkcji została jeszcze opisana). +- Pisząc artykuły i nagrywając filmy pokazujące użycie biblioteki Get (będą zamieszczone w readme, a w przyszłości na naszej Wiki). +- Oferując PR-y dla kodu i testów. +- Dodając nowe funkcje. + +Każda współpraca jest mile widziana! + +# Narzędzia + +## Zmiana motywu + +Nie powinno się używać innego widżetu niż GetMaterialApp by go zaktualizować. To może powodować duplikacje kluczy. Wiele osób nawykło do prehistorycznego podejścia tworzenia widżetu "ThemeProvider" tylko po to by zmienić motyw aplikacji. Z Get nie jest to wymagane. + +Możesz stworzyć customowy motyw i łatwo go dodać z Get.changeTheme bez niepotrzebnego kodu. + +```dart +Get.changeTheme(ThemeData.light()); +``` + +Jeśli chcesz stworzyć coś jak przycisk zmieniający motyw aplikacji na onTap, możesz połączyć dwia Get API. Api sprawdzające czy ciemny motyw jest używany i Api zajmujące się zmianą motywu. Po prostu użyj tego w onPressed: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark());featury +``` + +Kiedy ciemny motyw jest aktywny zmieni się on na jasny, w przeciwnym wypadku zmieni się na ciemny. + +Jeśli interesuje Cię jak zmieniać motywy podążaj za samouczkiem na Medium pokazującum zmianę motywu przy użyciu Get: + +- [Dynamic Themes in 3 lines using Get](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Samouczek stworzony przez [Rod Brown](https://github.com/RodBr). + +## Inne zaawansowane API + +```dart +// give the current args from currentScreen +Get.arguments + +// give name of previous route +Get.previousRoute + +// give the raw route to access for example, rawRoute.isFirst() +Get.rawRoute + +// give access to Rounting API from GetObserver +Get.routing + +// check if snackbar is open +Get.isSnackbarOpen + +// check if dialog is open +Get.isDialogOpen + +// check if bottomsheet is opefeaturyn +Get.isBottomSheetOpen + +// remove one route. +Get.removeRoute() + +// back repeatedly until the predicate returns true. +Get.until() + +// go to next route and remove all the previous routes until the predicate returns true. +Get.offUntil() + +// go to next named route and remove all the previous routes until the predicate returns true. +Get.offNamedUntil() + +//Check in what platform the app is running +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isWeb + +// Equivalent to the method: MediaQuery.of(context).size.height, but they are immutable. +Get.height +Get.width + +// Gives the current context of navigator. +Get.context + +// Gives the context of the snackbar/dialog/bottomsheet in the foreground anywhere in your code. +Get.contextOverlay + +// Note: the following methods are extensions on context. Since you +// have access to context in any place of your UI, you can use it anywhere in the UI code + +// If you need a changeable height/width (like browser windows that can be scfeaturyaled) you will need to use context. +context.width +context.height + +// gives you the power to define half the screen now, a third of it and so on. +//Useful for responsive applications. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// similar to MediaQuery.of(context).size +context.mediaQuerySize() + +/// similar to MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// similar to MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// similar to MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// similar to MediaQuery.of(context).orientation; +context.orientation() + +/// check if device is on landscape mode +context.isLandscape() + +/// check if device is on portrait mode +context.isPortrait() + +/// similar to MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// similar to MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// get the shortestSide from screen +context.mediaQueryShortestSide() + +/// True if width be larger thfeaturyan 800 +context.showNavbar() + +/// True if the shortestSide is smaller than 600p +context.isPhone() + +/// True if the shortestSide is largest than 600p +context.isSmallTablet() + +/// True if the shortestSide is largest than 720p +context.isLargeTablet() + +/// True if the current device is Tablet +context.isTablet() +``` + +### Opcjonalne globalne ustawienia i manualna konfiguracja + +GetMaterialApp konfiguruje wszystko za Ciebie, ale jeśli chcesz możesz konfigurować Get manualnie. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +Będziesz mógł używać swojego Midware z GetObserver, nie wpływa to na nic. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +Mozesz stworzyć globalne ustawienia dla Get. Tylko dodaj Get.config do swojego kodu przed użyciem routów, lub bezpośrednio w GetMaterialApp + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState,https://github.com/jonataslaw/ge +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +Opcjonalnie możesz przekierować wszystkie logi z Get by używać swojej ulubionej paczki i zbierać w niej logi. + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, + ); + void localLogWriter(String text, {bool isError = false}) { + // tutaj przekaż wiadomosci do ulubionej paczki + // pamiętaj że nawet jeśli "enableLog: false" logi i tak będą wysłane w tym callbacku + // Musisz sprawdzić konfiguracje flag jeśli chcesz przez GetConfig.isLogEnable + } +``` +## Video tłumaczące inne funkcjonalności GetX + + +Tadas Petra nagrał niezwykły film tłumaczący powyższe zagadnienia! + +Link: [GetX Other Features](https://youtu.be/ttQtlX_Q0eU) + + +# Zmiany od 2.0 + +1- Typy Rx: + +| Przed | Po | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMax` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RXController i GetBuilder teraz zostały połączone. Nie musisz już pamiętać którego kontrolera chcesz użyć, po prostu korzystaj z GetxController, będzie działać zarówno dla prostego jak i reaktywnego menadżera stanów. + +2- NamedRoutes +Wcześniej: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Teraz: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +Po co ta zmiana? +Często może być niezbędnym decydowanie która strona będzie wyświetlana w zależności od parametru, lub tokenu logowania. Wczesniejsze podejście było nieelastyczne, ponieważ na to nie pozwalało. Zawarcie strony w funkcji zmniejszyło sporzycie RAM-u, ze względu na niealokowanie routów od początku działania aplikacji. Pozwoliło to także na takie podejscie: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` diff --git a/packages/get/README.pt-br.md b/packages/get/README.pt-br.md new file mode 100644 index 0000000..7793293 --- /dev/null +++ b/packages/get/README.pt-br.md @@ -0,0 +1,1132 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +**Idiomas: [Inglês](README.md), [Vietnamita](README-vi.md), [Indonésia](README.id-ID.md), [Urdu](README.ur-PK.md), [Chinês](README.zh-cn.md), Português (este arquivo), [Espanhol](README-es.md), [Russo](README.ru.md), [Polonês](README.pl.md), [Coreano](README.ko-kr.md), [Francês](README-fr.md)** + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + + Awesome Flutter + +Buy Me A Coffee + + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +

Pedimos desculpas por qualquer parte não traduzida aqui. O GetX™ é atualizado com muita frequência e as traduções podem não vir ao mesmo tempo. Então, para manter essa documentação pelo menos com tudo que a versão em inglês tem, eu vou deixar todos os textos não-traduzidos aqui (eu considero que é melhor ele estar lá em inglês do que não estar), então se alguém quiser traduzir, seria muito útil 😁

+ +- [Sobre Get](#sobre-get) +- [Instalando](#instalando) +- [App Counter usando GetX](#app-counter-usando-getx) +- [Os três pilares](#os-três-pilares) + - [Gerenciamento de estado](#gerenciamento-de-estado) + - [Reactive state manager](#reactive-state-manager) + - [Mais detalhes sobre gerenciamento de estado](#mais-detalhes-sobre-gerenciamento-de-estado) + - [Explicação em video do gerenciamento de estado](#explicação-em-video-do-gerenciamento-de-estado) + - [Gerenciamento de rotas](#gerenciamento-de-rotas) + - [Mais detalhes sobre gerenciamento de rotas](#mais-detalhes-sobre-gerenciamento-de-rotas) + - [Explicação em video do gerenciamento de rotas](#explicação-em-video-do-gerenciamento-de-rotas) + - [Gerenciamento de Dependência](#gerenciamento-de-dependência) + - [Mais detalhes sobre gerenciamento de dependências](#mais-detalhes-sobre-gerenciamento-de-dependências) +- [Utilidades](#utilidades) + - [Internacionalização](#internacionalização) + - [Traduções](#traduções) + - [Usando traduções](#usando-traduções) + - [Localidade](#localidade) + - [Alterar local](#alterar-local) + - [Localidade do sistema operacional](#localidade-do-sistema-operacional) + - [Mudar tema (changeTheme)](#mudar-tema-changetheme) + - [GetConnect](#getconnect) + - [Configuração Padrão](#configuração-padrão) + - [Configuração Personalizada](#configuração-personalizada) + - [GetPage Middleware](#getpage-middleware) + - [Priority](#priority) + - [Redirect](#redirect) + - [onPageCalled](#onpagecalled) + - [OnBindingsStart](#onbindingsstart) + - [OnPageBuildStart](#onpagebuildstart) + - [OnPageBuilt](#onpagebuilt) + - [OnPageDispose](#onpagedispose) + - [Outras APIs avançadas](#outras-apis-avançadas) + - [Configurações Globais opcionais e configurações manuais](#configurações-globais-opcionais-e-configurações-manuais) + - [Widgets de Estado Local](#widgets-de-estado-local) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [Explicação em vídeo sobre Outras Features do GetX](#explicação-em-vídeo-sobre-outras-features-do-getx) + - [Dicas Úteis](#dicas-úteis) + - [GetView](#getview) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [Breaking Changes da versão 2 para 3](#breaking-changes-da-versão-2-para-3) + - [Tipagem Rx](#tipagem-rx) + - [RxController e GetBuilder se uniram](#rxcontroller-e-getbuilder-se-uniram) + - [Rotas nomeadas](#rotas-nomeadas) + - [Porque essa mudança?](#porque-essa-mudança) +- [Por que GetX™?](#por-que-getx) +- [Comunidade](#comunidade) + - [Canais da comunidade](#canais-da-comunidade) + - [Como contribuir](#como-contribuir) + - [Artigos e vídeos](#artigos-e-vídeos) + +# Sobre Get + +- Get é uma biblioteca poderosa e extraleve para Flutter. Ela combina um gerenciador de estado de alta performance, injeção de dependência inteligente e gerenciamento de rotas de uma forma rápida e prática. + +- GetX™ possui 3 princípios básicos, o que significa que esta é a prioridade para todos os recursos da biblioteca: **PRODUTIVIDADE, PERFORMANCE AND ORGANIZAÇÃO.** + + - **PERFOMANCE**: GetX™ é focado em desempenho e consumo mínimo de recursos. GetX não usa Streams ou ChangeNotifier. + + - **PRODUTIVIDADE**: GetX™ usa uma sintaxe fácil e agradável. Não importa o que você queira fazer, sempre há uma maneira mais fácil com GetX™. Isso economizará horas de desenvolvimento e extrairá o máximo de desempenho que seu aplicativo pode oferecer. + Geralmente, o desenvolvedor deve se preocupar em remover os controladores da memória. Com GetX™, isso não é necessário porque, por padrão, os recursos são removidos da memória quando não são usados. Se quiser mantê-lo na memória, você deve declarar explicitamente "permanent: true" em sua dependência. Dessa forma, além de economizar tempo, você corre menos risco de ter dependências desnecessárias na memória. O carregamento da dependência também é lazy por padrão. + + - **ORGANIZAÇÃO**: GetX™ permite o desacoplamento total da View, lógica de apresentação, lógica de negócios, injeção de dependência e navegação. Você não precisa de contexto para navegar entre as rotas, portanto, você não depende da árvore do widget (visualização) para isso. Você não precisa de contexto para acessar seus Controllers/BLoCs por meio de um inheritedWidget, então você desacopla completamente sua lógica de apresentação e lógica de negócios de sua camada de visualização. Você não precisa injetar suas classes Controllers/Models/BLoCs em sua árvore de widgets através de multiproviders, pois GetX™ usa seu próprio recurso de injeção de dependência, desacoplando a DI de sua View completamente. + Com GetX™ você sabe onde encontrar cada recurso de sua aplicação, tendo o código limpo por padrão. Isso além de facilitar a manutenção, torna o compartilhamento dos módulos, algo que até então em Flutter era impensável, em algo totalmente possível. + O BLoC foi um ponto de partida para organizar o código no Flutter, ele separa a lógica de negócios da visualização. GetX™ é uma evolução natural disso, separando não apenas a lógica de negócios, mas a lógica de apresentação. O bônus da injeção de dependências e rotas também são dissociadas e a camada de dados está fora de tudo. Você sabe onde está tudo e tudo isso de uma maneira mais fácil do que construir um hello world. + GetX™ é a maneira mais fácil, prática e escalonável de construir aplicativos de alto desempenho com o Flutter SDK, com um grande ecossistema em torno dele que funciona perfeitamente em conjunto, sendo fácil para iniciantes e preciso para especialistas. É seguro, estável, atualizado e oferece uma grande variedade de APIs integradas que não estão presentes no Flutter SDK padrão. + +- GetX™ não é inchado. Possui uma infinidade de recursos que permitem que você comece a programar sem se preocupar com nada, mas cada um desses recursos está em contêineres separados e só são iniciados após o uso. Se você usar apenas o Gerenciamento de estado, apenas o Gerenciamento de estado será compilado. Se você usar apenas rotas, nada do gerenciamento de estado será compilado. + +- GetX™ possui um enorme ecossistema, uma grande comunidade, um grande número de colaboradores e será mantido enquanto o Flutter existir. Getx também é capaz de rodar com o mesmo código no Android, iOS, Web, Mac, Linux, Windows e em seu servidor. +**É possível reutilizar totalmente seu código feito no frontend em seu backend com [Get Server](https://github.com/jonataslaw/get_server)**. + +**Além disso, todo o processo de desenvolvimento pode ser totalmente automatizado, tanto no servidor quanto no front-end com **[Get CLI](https://github.com/jonataslaw/get_cli)**. + +**Além disso, para aumentar ainda mais sua produtividade, temos a [extensão para VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) e a [extensão para Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)** + +# Instalando + +Adicione Get ao seu arquivo pubspec.yaml + +```yaml +dependencies: + get: +``` + +Importe o get nos arquivos que ele for usado: + +```dart +import 'package:get/get.dart'; +``` + +# App Counter usando GetX + +O app 'Counter' criado por padrão no flutter com o comando `flutter create` tem mais de 100 linhas(incluindo os comentários). Para demonstrar o poder do Get, irei demonstrar como fazer o mesmo 'Counter' mudando o estado em cada toque trocando entre páginas e compartilhando o estado entre telas. Tudo de forma organizada, separando a lógica de negócio da View, COM SOMENTE 26 LINHAS INCLUINDO COMENTÁRIOS + +- Passo 1: +Troque `MaterialApp` para `GetMaterialApp` + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- **Obs:** Isso não modifica o `MaterialApp` do Flutter, GetMaterialApp não é uma versão modificada do MaterialApp, é só um Widget pré-configurado, que tem como child o MaterialApp padrão. Você pode configurar isso manualmente, mas definitivamente não é necessário. GetMaterialApp vai criar rotas, injetá-las, injetar traduções, injetar tudo que você precisa para navegação por rotas (gerenciamento de rotas). Se você quer somente usar o gerenciador de estado ou somente o gerenciador de dependências, não é necessário usar o GetMaterialApp. Ele somente é necessário para: + - Rotas + - Snackbars/bottomsheets/dialogs + - apis relacionadas a rotas e a ausência de `context` + - Internacionalização +- **Obs²:** Esse passo só é necessário se você for usar o gerenciamento de rotas (`Get.to()`, `Get.back()` e assim por diante), Se você não vai usar isso então não é necessário seguir o passo 1 + +- Passo 2: +Cria a sua classe de regra de negócio e coloque todas as variáveis, métodos e controllers dentro dela. +Você pode fazer qualquer variável observável usando um simples `.obs` + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count.value++; +} +``` + +- Passo 3: +Crie sua View usando StatelessWidget, já que, usando Get, você não precisa mais usar StatefulWidgets. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Instancie sua classe usando Get.put() para torná-la disponível para todas as rotas subsequentes + final Controller c = Get.put(Controller()); + + return Scaffold( + // Use Obx(()=> para atualizar Text() sempre que a contagem é alterada. + appBar: AppBar(title: Obx(() => Text("Total de cliques: ${c.count}"))), + + // Troque o Navigator.push de 8 linhas por um simples Get.to(). Você não precisa do 'context' + body: Center(child: ElevatedButton( + child: Text("Ir pra Outra tela"), onPressed: () => Get.to(Outra()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Outra extends StatelessWidget { + // Você pode pedir o Get para encontrar o controller que foi usado em outra página e redirecionar você pra ele. + final Controller c = Get.find(); + @override + Widget build(context) => Scaffold(body: Center(child: Text("${c.count}"))); +} + +``` + +Resultado: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +Esse é um projeto simples mas já deixa claro o quão poderoso o Get é. Enquanto seu projeto cresce, essa diferença se torna bem mais significante. + +Get foi feito para funcionar com times, mas torna o trabalho de um desenvolvedor individual simples. + +Melhore seus prazos, entregue tudo a tempo sem perder performance. Get não é para todos, mas se você identificar com o que foi dito acima, Get é para você! + + +# Os três pilares + +## Gerenciamento de estado + +GetX™ possui dois gerenciadores de estado diferentes: o gerenciador de estado simples (vamos chamá-lo de GetBuilder) e o gerenciador de estado reativo (GetX/Obx) + +### Reactive state manager + +Programação reativa pode alienar muitas pessoas porque é dito que é complicado. GetX™ transforma a programação reativa em algo bem simples: + +* Você não precisa criar StreamControllers +* Você não precisa criar um StreamBuilder para cada variável +* Você não precisa criar uma classe para cada estado +* Você não precisa criar um get para o valor inicial +* Você não precisará usar geradores de código + +Programação reativa com o Get é tão fácil quanto usar setState. + +Vamos imaginar que você tenha uma variável e quer que toda vez que ela alterar, todos os widgets que a usam são automaticamente alterados. + +Essa é sua variável: + +```dart +var name = 'Jonatas Borges'; +``` + +Para fazer dela uma variável observável, você só precisa adicionar `.obs` no final: + +```dart +var name = 'Jonatas Borges'.obs; +``` + +E Na UI, quando quiser mostrar a variável e escutar as mudanças dela, simplesmente faça isso: + +```dart +Obx (() => Text (controller.name)); +``` + +Só isso. É *simples assim*; + +### Mais detalhes sobre gerenciamento de estado + +**Veja uma explicação mais completa do gerenciamento de estado [aqui](./documentation/pt_BR/state_management.md). Lá terá mais exemplos e também a diferença do simple state manager do reactive state manager** + +### Explicação em video do gerenciamento de estado + +Amateur Coder fez um vídeo ótimo sobre o gerenciamento de estado! (em inglês). Link: [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) + +Você vai ter uma boa idea do poder do GetX™ + +## Gerenciamento de rotas + +Se você for usar routes / snackbars / dialogs / bottomsheets sem contexto, GetX™ é excelente para você também, veja: + +Adicione "Get" antes do seu MaterialApp, transformando-o em GetMaterialApp + +```dart +GetMaterialApp( // Antes: MaterialApp( + home: MyHome(), +) +``` + +Para navegar para uma próxima tela: + +```dart +Get.to(ProximaTela()); +``` + +Para navegar para uma próxima tela com uma rota nomeada. Veja mais detalhes sobre rotas nomeadas [aqui](./documentation/pt_BR/route_management.md#navegar-com-rotas-nomeadas) + +```dart +Get.toNamed('/detalhes'); +``` + +Para fechar snackbars, dialogs, bottomsheets, ou qualquer coisa que você normalmente fecharia com o `Navigator.pop(context)` (como por exemplo fechar a View atual e voltar para a anterior): + +```dart +Get.back(); +``` + +Para ir para a próxima tela e NÃO deixar opção para voltar para a tela anterior (bom para SplashScreens, telas de login e etc.): + +```dart +Get.off(ProximaTela()); +``` + +Para ir para a próxima tela e cancelar todas as rotas anteriores (útil em telas de carrinho, votações ou testes): + +```dart +Get.offAll(ProximaTela()); +``` + +Para navegar para a próxima rota e receber ou atualizar dados assim que retornar da rota: + +```dart +var dados = await Get.to(Pagamento()); +``` + +Notou que você não precisou usar `context` para fazer nenhuma dessas coisas? Essa é uma das maiores vantagens de usar o gerenciamento de rotas do GetX™. Com isso, você pode executar todos esse métodos de dentro da classe Controller, sem preocupações. + +### Mais detalhes sobre gerenciamento de rotas + +**GetX™ funciona com rotas nomeadas também! Veja uma explicação mais completa do gerenciamento de rotas [aqui](./documentation/pt_BR/route_management.md)** + +### Explicação em video do gerenciamento de rotas + +Amateur Coder fez um outro vídeo excelente sobre gerenciamento de rotas! Link: [Complete Getx Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) + +## Gerenciamento de Dependência + +- Nota: Se você está usando o gerenciador de estado do Get, você não precisa se preocupar com isso, só leia a documentação, mas dê uma atenção a api `Bindings`, que vai fazer tudo isso automaticamente para você. + +Já está usando o Get e quer fazer seu projeto o melhor possível? Get tem um gerenciador de dependência simples e poderoso que permite você pegar a mesma classe que seu Bloc ou Controller com apenas uma linha de código, sem Provider context, sem inheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Em vez de Controller controller = Controller(); +``` + +Em vez de instanciar sua classe dentro da classe que você está usando, você está instanciando ele dentro da instância do Get, que vai fazer ele ficar disponível por todo o App para que então você possa usar seu controller (ou uma classe Bloc) normalmente + + +**Dica:** O gerenciamento de dependência Get é desacoplado de outras partes do pacote, então se, por exemplo, seu aplicativo já estiver usando um gerenciador de estado (qualquer um, não importa), você não precisa reescrever tudo, você pode usar esta injeção de dependência sem problemas + +```dart +controller.fetchApi(); +``` + +Agora, imagine que você navegou por inúmeras rotas e precisa de dados que foram deixados para trás em seu controlador. Você precisaria de um gerenciador de estado combinado com o Provider ou Get_it, correto? Não com Get. Você só precisa pedir ao Get para "procurar" pelo seu controlador, você não precisa de nenhuma dependência adicional para isso: + +```dart +Controller controller = Get.find(); +// Sim, parece Magia, o Get irá descobrir qual é seu controller e irá te entregar. +// Você pode ter 1 milhão de controllers instanciados, o Get sempre te entregará o controller correto. +// Apenas se lembre de Tipar seu controller, final controller = Get.find(); por exemplo, não irá funcionar. +``` + +E então você será capaz de recuperar os dados do seu controller que foram obtidos anteriormente: + +```dart +Text(controller.textFromApi); +``` + +Procurando por `lazyLoading` (carregar somente quando for usar)? Você pode declarar todos os seus controllers e eles só vão ser inicializados e chamados quando alguém precisar. Você pode fazer isso + +```dart +Get.lazyPut(()=> ApiMock()); +/// ApiMock só será chamado quando alguém usar o Get.find pela primeira vez +``` + +### Mais detalhes sobre gerenciamento de dependências + +**Veja uma explicação mais completa do gerenciamento de dependência [aqui](./documentation/pt_BR/dependency_management.md)** + +# Utilidades + +## Internacionalização +### Traduções +Nós mantemos as traduções num simples dictionary map de chave-valor. +Para adicionar traduções personalizadas, crie uma classe e estenda `Translations`. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### Usando traduções +Basta anexar `.tr` a chave especificada e ela será traduzida, usando o valor atual de `Get.locale` ou `Get.fallbackLocale`. +```dart +Text('hello'.tr); +``` + +### Localidade +Passe parâmetros para `GetMaterialApp` definir a localidade e as traduções. + +```dart +return GetMaterialApp( + translations: Messages(), // suas traduções + locale: Locale('en', 'US'), // as traduções serão exibidas para esta localidade + fallbackLocale: Locale('en', 'UK'), // especifica uma localidade em caso de falha na localidade definida +); +``` + +#### Alterar local +Use `Get.updateLocale(locale)` para atualizar a localidade. As traduções usarão automaticamente a nova localidade e a UI será atualizada. +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### Localidade do sistema operacional +Para ler a localidade do sistema operacional, você pode usar `Get.deviceLocale`. +```dart +import 'dart:ui' as ui; + +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## Mudar tema (changeTheme) + +Por favor não use widget acima do GetMaterialApp para atualizar o tema. Isso pode causar keys duplicadas. Várias pessoas estão acostumadas com o jeito normal de criar um Widget `ThemeProvider` só pra alterar o tema do app, mas isso definitivamente NÃO é necessário com GetX™. + +Você pode criar seu tema customizado e simplesmente adicionar dentro do `Get.changeTheme` sem nenhum boilerplate para isso: + +```dart +Get.changeTheme(ThemeData.light()) +``` + +Se você quer criar algo como um botão que muda o tema com o toque, você pode combinar duas APIs GetX™ pra isso: +- A API que checa se o tema dark está sendo aplicado; +- A API de mudar o tema e colocar isso no `onPressed:` + +```dart +Get.changeTheme(Get.isDarkMode ? ThemeData.light() : ThemeData.dark()) +``` + +Quando o modo Dark está ativado, ele vai trocar pro modo light e vice versa. + +Se você quiser saber mais como trocar o tema, você pode seguir esse tutorial no Medium que até ensina persistência do tema usando Get (e SharedPreferences): + +- [Dynamic Themes in 3 lines using Get](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). + + +## GetConnect +GetConnect é uma maneira fácil de se comunicar de trás para a frente com http ou websockets + +### Configuração Padrão +Você pode simplesmente estender GetConnect e usar os métodos GET/POST/PUT/DELETE/SOCKET para se comunicar com sua API Rest ou websockets. + +```dart +class UserProvider extends GetConnect { + // Requisição Get + Future getUser(int id) => get('http://youapi/users/$id'); + // Requisição Post + Future postUser(Map data) => post('http://youapi/users', body: data); + // Requisição Post com Arquivo + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` +### Configuração Personalizada +GetConnect é altamente personalizável, você pode definir uma base Url, modificadores de resposta, modificadores de Requests, definir um autenticador e até o número de tentativas em que tentará se autenticar, além de dar a possibilidade de definir um decodificador padrão que irá transformar todas as suas solicitações em seus modelos sem qualquer configuração adicional. + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // Todas as requisições passam por jsonEncode e então por CasesModel.fromJson() + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; // Define baseUrl para + // Http e websockets se usado sem uma instância [httpClient] + + // Anexa a propriedade 'apikey' no cabeçalho de todas as requisições + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // Mesmo que o servidor envie dados do país "Brasil", + // eles nunca serão exibidos para os usuários, porque você removeu + // os dados da resposta, mesmo antes de a resposta ser entregue + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazil'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // Configurando um cabeçalho + request.headers['Authorization'] = "$token"; + return request; + }); + + // O autenticador será chamado 3 vezes se HttpStatus for + // HttpStatus.unauthorized + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## GetPage Middleware + +O GetPage agora tem uma nova propriedade que recebe uma lista de GetMiddleWare e executa cada item na ordem específica. + +**Nota**: Quando GetPage tem Middlewares, todos os filhos desta página terão os mesmos middlewares automaticamente. + +### Priority + +A ordem dos middlewares a serem executados pode ser definida pela prioridade no GetMiddleware. + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` +Esses middlewares serão executados nesta ordem: **-8 => 2 => 4 => 5** + +### Redirect + +Esta função será chamada quando a página da rota chamada estiver sendo pesquisada. RouteSettings se torna o resultado do redirecionamento. Ou retorne nulo e não haverá redirecionamento. + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### onPageCalled + +Esta função será chamada quando uma página for chamada, antes de qualquer coisa ser criada e +você pode usá-la para mudar algo sobre a página ou dar-lhe uma nova página + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### OnBindingsStart + +Esta função será chamada logo antes da inicialização dos Bindings. +Aqui você pode alterar as ligações desta página. + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### OnPageBuildStart + +Esta função será chamada logo após a inicialização dos Bindings. +Aqui você pode fazer algo depois de criar as ligações e antes de criar o widget da página. + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### OnPageBuilt + +Esta função será chamada logo após a função GetPage.page ser chamada e fornecerá o resultado da função e obtém o widget que será mostrado. + +### OnPageDispose + +Esta função será chamada logo após descartar todos os objetos relacionados (controladores, visualizações, ...) da página. + +## Outras APIs avançadas + +```dart +// fornece os arguments da tela atual +Get.arguments + +// fornece o nome da rota anterior +Get.previousRoute + +// fornece a rota bruta para acessar por exemplo, rawRoute.isFirst() +Get.rawRoute + +// fornece acesso a API de rotas de dentro do GetObserver +Get.routing + +// checa se o snackbar está aberto +Get.isSnackbarOpen + +// checa se o dialog está aberto +Get.isDialogOpen + +// checa se o bottomsheet está aberto +Get.isBottomSheetOpen + +// remove uma rota. +Get.removeRoute() + +// volta repetidamente até o predicate retorne true. +Get.until() + +// vá para a próxima rota e remove todas as rotas +//anteriores até que o predicate retorne true. +Get.offUntil() + +// vá para a próxima rota nomeada e remove todas as +//rotas anteriores até que o predicate retorne true. +Get.offNamedUntil() + +// Verifica em que plataforma o app está sendo executado +// (Esse método é completamente compatível com o FlutterWeb, +// diferente do método do framework "Platform.isAndroid") +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +// Verifica o tipo de dispositivo +GetPlatform.isMobile +GetPlatform.isDesktop +// Todas as plataformas são suportadas de forma independente na web! +// Você pode saber se está executando dentro de um navegador +// no Windows, iOS, OSX, Android, etc. +GetPlatform.isWeb + +// Equivalente ao método: MediaQuery.of(context).size.width ou height, mas é imutável. +// Significa que não irá atualizar mesmo que o tamanho da tela mude (como em navegadores ou app desktop) +Get.height +Get.width + +// fornece o context da tela em qualquer lugar do seu código. +Get.context + +// fornece o context de snackbar/dialog/bottomsheet em qualquer lugar do seu código. +Get.contextOverlay + +// Obs: os métodos a seguir são extensions do context. Já que se +// tem acesso ao context em qualquer lugar do código da UI, você pode usar lá + +// Se você precisa de um width/height adaptável (como em navegadores em que a janela pode ser redimensionada) +// você precisa usar 'context' +context.width +context.height + +// Dá a você agora o poder de definir metade da tela, um terço da dela e assim por diante. +// Útil para aplicativos responsivos. +// param dividedBy (double) opcional - default: 1 +// param reducedBy (double) opcional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// similar a MediaQuery.of(context).size +context.mediaQuerySize() + +/// similar a MediaQuery.of(this).padding +context.mediaQueryPadding() + +/// similar a MediaQuery.of(this).viewPadding +context.mediaQueryViewPadding() + +/// similar a MediaQuery.of(this).viewInsets; +context.mediaQueryViewInsets() + +/// similar a MediaQuery.of(this).orientation; +context.orientation() + +/// verifica se o dispositivo está no modo paisagem +context.isLandscape() + +/// verifica se o dispositivo está no modo retrato +context.isPortrait() + +/// similar a MediaQuery.of(this).devicePixelRatio; +context.devicePixelRatio() + +/// similar a MediaQuery.of(this).textScaleFactor; +context.textScaleFactor() + +/// obtém a menor dimensão (largura ou altura) da tela +context.mediaQueryShortestSide() + +/// retorna True se a largura da tela for maior que 800px +context.showNavbar() + +/// retorna True se a menor dimensão (largura ou altura) da tela for menor que 600px +context.isPhone() + +/// retorna True se a menor dimensão (largura ou altura) da tela for maior ou igual a 600px +context.isSmallTablet() + +/// retorna True se a menor dimensão (largura ou altura) da tela for maior ou igual a 720px +context.isLargeTablet() + +/// retorna True se o dispositivo é um Tablet +context.isTablet() + +/// Retorna um valor de acordo com o tamanho da tela +/// Os valores possíveis são: +/// swatch: se a menor dimensão (largura ou altura) da tela for menor que 300px +/// mobile: se a menor dimensão (largura ou altura) da tela for menor que 600px +/// tablet: se a menor dimensão (largura ou altura) da tela for menor que 1200px +/// desktop: se a largura da tela é maior ou iguial a 1200px +context.responsiveValue() +``` + +### Configurações Globais opcionais e configurações manuais + +GetMaterialApp configura tudo para você, mas se quiser configurar Get manualmente, você pode. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +Você também será capaz de usar seu próprio Middleware dentro do GetObserver, isso não irá influenciar em nada. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Aqui + ], +); +``` + +Você pode criar Configurações Globais para o Get. Apenas adicione `Get.config` ao seu código antes de usar qualquer rota ou faça diretamente no seu GetMaterialApp + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +É possível redirecionar todas as mensagens de log do GetX™. Útil quando se tem um package de logging e vc quer que ele lide com todos os logs + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // passage a mensagem para seu package de logging favorito aqui + // Obs: mesmo que as mensagens de log estejam desativadas + // com o comando "enableLog: false", as mensagens ainda vão passar por aqui + // Você precisa checar essa config manualmente aqui se quiser respeitá-la +} +``` + +### Widgets de Estado Local + +Esses Widgets permitem que você gerencie um único valor e mantenha o estado efêmero e localmente. Temos versões para Reativo e Simples. Por exemplo, você pode usá-los para alternar obscureText em um `TextField`, talvez criar um painel expansível personalizado ou talvez modificar o índice atual em um `BottomNavigationBar` enquanto altera o conteúdo do corpo em um `Scaffold`. + +#### ValueBuilder +Uma simplificação de `StatefulWidget` que funciona com um callback de `setState` que passa o valor atualizado. + + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // mesma assinatura! Você poderia usar ( newValue ) => updateFn( newValue ) + ), + // se você precisa chamar algo fora do método builder. + onUpdate: (value) => print("Valor atualizado: $value"), + onDispose: () => print("Widget desmontado"), +), +``` + +#### ObxValue +Similar a ValueBuilder, mas esta é a versão Reativa, você passa uma instância Rx (lembra do .obs mágico?) e +atualiza automaticamente... não é incrível? + +```dart +ObxValue( + (data) => Switch( + value: data.value, + onChanged: data, // Rx tem uma função _callable_! Você poderia usar (flag) => data.value = flag, + ), + false.obs, +), +``` + +### Explicação em vídeo sobre Outras Features do GetX + +Amateur Coder fez um vídeo incrível sobre utils, storage, bindings e outras features! Link: [GetX Other Features](https://youtu.be/ttQtlX_Q0eU) + + +## Dicas Úteis + +`.obs`ervables (também conhecidos como _Rx_ Types) possuem uma grande variedade de métodos e operadores internos. + +> É muito comum acreditar que uma propriedade com `.obs` **É** o valor real... mas não se engane! +> Evitamos a declaração de tipo da variável, porque o compilador do Dart é inteligente o suficiente e o código +> parece mais limpo, mas: + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" é do tipo ${message.runtimeType}'); +``` + +Mesmo que `message` _imprima_ o valor da string, seu tipo é **RxString**! + +Então, você não pode fazer `message.substring( 0, 4 )`. +Você tem que acessar o `valor` real dentro do _observable_: +A "maneira" mais usada é utilizando `.value`, mas, você sabia que também pode usar: + +```dart +final name = 'GetX'.obs; +// apenas "atualiza" o stream, se o valor for diferente do atual. +name.value = 'Hey'; + +// Todas as propriedades Rx são "chamáveis" e retorna o novo valor. +// mas esta abordagem não aceita `null`, a UI não será reconstruída +name('Hello'); + +// é como um getter, imprime 'Hello' +name() ; + +/// números: + +final count = 0.obs; + +// Você pode usar todas as operações não mutáveis ​​de um num! +count + 1; + +// Cuidado! isso só é válido se `count` não for final, mas var +count += 1; + +// Você também pode comparar com os valores: +count > 2; + +/// booleans: + +final flag = false.obs; + +// mude o valor entre true/false +flag.toggle(); + + +/// todos os tipos: + +// Defina `value` como null. +flag.nil(); + +// Todas as operações toString() e toJson() são passada para `value` +print( count ); // chama `toString()` de RxInt + +final abc = [0,1,2].obs; +// Converte o valor em um Array json, imprime RxList +// Json é suportado por todos os Rx types! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList e RxSet são Rx types especiais, que estendem seus tipos nativos. +// mas você pode trabalhar com uma lista como uma lista normal, embora seja reativa! +abc.add(12); // Coloca 12 na lista, e ATUALIZA o stream. +abc[3]; // como uma lista lê o índice 3. + +// a igualdade funciona com o Rx e o value do observável, mas o hashCode é sempre obtido do value +final number = 12.obs; +print( number == 12 ); // prints > true + +/// Rx Models personalizados: + +// toJson(), toString() são transferidos para o filho, para que você possa implementar +// override neles e imprimir o observável diretamente. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user` é "reativo", mas as propriedades dentro NÃO SÃO! +// Então, se mudarmos alguma variável dentro dele: +user.value.name = 'Roi'; +// O widget não vai reconstruir!, +// `Rx` não tem nenhuma notificação quando você muda algo dentro do usuário. +// Portanto, para classes personalizadas, precisamos "notificar" manualmente a mudança. +user.refresh(); + +// ou podemos usar o método `update()`! +user.update((value){ + value.name='Roi'; +}); + +print( user ); // Resultado (toString): Roi Doe, 33 years old +``` + +#### GetView + +Eu amo este Widget, é tão simples, mas tão útil! + +É um Widget `const Stateless` que tem um getter `controller` registrado para Controller, só isso. + +```dart +class AwesomeController extends GetxController { + final String title = 'My Awesome View'; +} + +// SEMPRE lembre de passar o `Type` que você usou para registrar seu controlador! +class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title ), // apenas chame `controller.something` + ); + } +} +``` + +#### GetWidget + +A maioria das pessoas não tem ideia sobre este widget, ou confunde totalmente o uso dele. +O caso de uso é muito raro, mas muito específico: Ele armazena em `cache` um Controller. +Por causa do _cache_, não pode ser um `const Stateless`. + +> Então, quando você precisa armazenar em "cache" um Controller? + +Se você usar, uma outra característica "não tão comum" de **GetX™**: `Get.create()`. + +`Get.create(()=>Controller())` irá gerar um novo `Controller` cada vez que você chamar +`Get.find()`, + +É aí que `GetWidget` brilha... já que você pode usá-lo, por exemplo, +para manter uma lista de itens Todo. Portanto, se o widget for "reconstruído", ele manterá a mesma instância do controlador. + +#### GetxService + +Esta classe é como um `GetxController`, ele compartilha o mesmo ciclo de vida ( `onInit()`, `onReady()`, `onClose()`). +Mas não tem "lógica" dentro dele. Ele apenas notifica o sistema de injeção de dependência do GetX™ de que esta subclasse +**não pode** ser removida da memória. + +Portanto, é muito útil manter seus "Services" sempre acessíveis e ativos com `Get.find()`. Como: +`ApiService`, `StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// Aguarda a inicialização dos Services. + runApp(SomeApp()); +} + +/// É uma jogada inteligente para inicializar seus services antes de executar o aplicativo Flutter, +/// já que você pode controlar o fluxo de execução (talvez você precise carregar alguma configuração de tema, +/// apiKey, linguagem definida pelo usuário ... então carregue SettingService antes de executar ApiService. +/// então GetMaterialApp() não precisa reconstruir e obtém os valores diretamente. +void initServices() async { + print('iniciando serviços...'); + /// Aqui é onde você coloca a inicialização de get_storage, hive, shared_pref. + /// ou checa a conexão, ou o que quer que seja assíncrono. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('Todos os serviços iniciados.'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} +``` + +A única maneira de realmente excluir um `GetxService`, é com o `Get.reset()`, que é como uma +"hot restart" do seu aplicativo. Portanto, lembre-se, se você precisar de persistência absoluta de uma instância de classe durante +o ciclo de vida de seu aplicativo, use GetxService. + + +# Breaking Changes da versão 2 para 3 + +## Tipagem Rx + +| Antes | Depois | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +## RxController e GetBuilder se uniram + +RxController e GetBuilder agora viraram um só, você não precisa mais memorizar qual controller quer usar, apenas coloque `GetxController`, vai funcionar para os dois gerenciamento de estados + +```dart +//Gerenciador de estado simples +class Controller extends GetXController { + String nome = ''; + + void atualizarNome(String novoNome) { + nome = novoNome; + update() + } +} +``` + +```dart +class Controller extends GetXController { + final nome = ''.obs; + + // não precisa de um método direto pra atualizar o nome + // só usar o nome.value +} +``` + +## Rotas nomeadas + +Antes: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Agora: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +### Porque essa mudança? + +Frequentemente, pode ser necessário decidir qual pagina vai ser mostrada ao usuário a partir de um parâmetro, como um token de login. A forma abordada anteriormente não era flexível, já que não permitia isso. + +Inserir a página numa função reduziu significativamente o consumo de RAM, já que as rotas não são alocadas na memória no momento que o app é iniciado e também permite fazer esse tipo de abordagem: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# Por que GetX™? + +1- Muitas vezes após uma atualização do Flutter, muitos dos seus packages irão quebrar. As vezes acontecem erros de compilação, muitas vezes aparecem erros que ainda não existem respostas sobre e o desenvolvedor necessita saber de onde o erro veio, rastreá-lo, para só então tentar abrir uma issue no repositório correspondente e ver seu problema resolvido. Get centraliza os principais recursos para o desenvolvimento (Gerência de estado, de dependências e de rotas), permitindo você adicionar um único package em seu pubspec e começar a trabalhar. Após uma atualização do Flutter, a única coisa que você precisa fazer é atualizar a dependencia do Get e começar a trabalhar. Get também resolve problemas de compatibilidade. Quantas vezes uma versão de um package não é compatível com a versão de outro, porque um utiliza uma dependência em uma versão e o outro em outra versão? Essa também não é uma preocupação usando Get, já que tudo está no mesmo package e é totalmente compatível. + +2- Flutter é fácil, Flutter é incrível, mas Flutter ainda tem algum boilerplate que pode ser indesejado para maioria dos desenvolvedores, como o Navigator.of(context).push(context, builder[...]. Get simplifica o desenvolvimento. Em vez de escrever 8 linhas de código para apenas chamar uma rota, você pode simplesmente fazer: Get.to(Home()) e pronto, você irá para a próxima página. Urls dinâmicas da web é algo realmente doloroso de fazer com o Flutter atualmente e isso com o GetX™ é estupidamente simples. Gerenciar estados no Flutter e gerenciar dependências também é algo que gera muita discussão, por haver centenas de padrões na pub. Mas não há nada que seja tão fácil quanto adicionar um ".obs" no final de sua variável, colocar o seu widget dentro de um Obx e pronto, todas atualizações daquela variável serão automaticamente atualizadas na tela. + +3- Facilidade sem se preocupar com desempenho. O desempenho do Flutter já é incrível, mas imagine que você use um gerenciador de estados e um locator para distribuir suas classes blocs/stores/controllers/ etc. Você deverá chamar manualmente a exclusão daquela dependência quando não precisar dela. Mas já pensou em simplesmente usar seu controlador e quando ele não tivesse mais sendo usado por ninguém, ele simplesmente fosse excluído da memória? É isso que GetX™ faz. Com o SmartManagement, tudo que não está sendo usado é excluído da memória e você não deve se preocupar em nada além de programar. Você terá garantia que está consumindo o mínimo de recursos necessários, sem ao menos ter criado uma lógica para isso. + +4- Desacoplamento real. Você já deve ter ouvido o conceito "separar a view da lógica de negócios". Isso não é uma peculiaridade do BLoC, MVC ou MVVM, qualquer outro padrão existente no mercado tem esse conceito. No entanto, muitas vezes esse conceito pode ser mitigado no Flutter por conta do uso do context. +Se você precisa de context para localizar um InheritedWidget, você precisa disso na view ou passar o context por parâmetro. Eu particularmente acho essa solução muito feia e para trabalhar em equipes teremos sempre uma dependência da lógica de negócios da View. GetX™ é pouco ortodoxo com a abordagem padrão e apesar de não proibir totalmente o uso de StatefulWidgets, InitState e etc, ele tem sempre uma abordagem similar que pode ser mais limpa. Os controllers tem ciclos de vida e quando você precisa fazer uma solicitação APIREST por exemplo, você não depende de nada da view. Você pode usar onInit para iniciar a chamada http e quando os dados chegarem, as variáveis serão preenchidas. Como GetX™ é totalmente reativo (de verdade e trabalha sob streams), assim que os itens forem preenchidos, automaticamente será atualizado na view todos os widgets que usam aquela variável. Isso permite que as pessoas especialistas em UI trabalhem apenas com widgets e não precisem enviar nada para a lógica de negócio além de eventos do usuário (como clicar em um botão), enquanto as pessoas que trabalham com a lógica de negócio ficarão livres para criá-la e testá-la separadamente. + +# Comunidade + +## Canais da comunidade + +GetX™ tem uma comunidade altamente ativa e útil. Se você tiver dúvidas, ou quiser alguma ajuda com relação ao uso deste framework, por favor entre em nossos canais da comunidade, sua dúvida será respondida mais rapidamente, e será o lugar mais adequado. Este repositório é exclusivo para abertura de issues e solicitação de recursos, mas fique à vontade para fazer parte da Comunidade GetX™. + +| **Slack (Inglês)** | **Discord (Inglês e Português)** | **Telegram (Português)** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## Como contribuir + +_Quer contribuir com o projeto? Teremos o orgulho de destacá-lo como um de nossos colaboradores. Aqui estão alguns pontos onde você pode contribuir e tornar o Get (e Flutter) ainda melhor._ + +- Ajudando a traduzir o readme para outros idiomas. +- Adicionando documentação ao readme (muitas funções do Get ainda não foram documentadas). +- Escreva artigos ou faça vídeos ensinando como usar o Get (eles serão inseridos no Readme e futuramente em nosso Wiki). +- Fazendo PRs para código/testes. +- Incluindo novas funções. + +Qualquer contribuição é bem-vinda! + + +## Artigos e vídeos + +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). (inglês) +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. (inglês) +- [Complete GetX™ State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. (inglês) +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. (inglês) +- [Firestore User with GetX™ | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. (inglês) +- [Firebase Auth with GetX™ | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. (inglês) +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). (inglês) +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). (inglês) +- [GetX™, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. (inglês) +- [Build a To-do List App from scratch using Flutter and GetX™](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. (inglês) +- [GetX™ Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. (inglês) +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. (inglês) +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. (inglês) diff --git a/packages/get/README.ru.md b/packages/get/README.ru.md new file mode 100644 index 0000000..d6d1bab --- /dev/null +++ b/packages/get/README.ru.md @@ -0,0 +1,912 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +_Языки: Русский (этот файл), [вьетнамский](README-vi.md), [индонезийский](README.id-ID.md), [урду](README.ur-PK.md), [Английский](README.md), [Китайский](README.zh-cn.md), [Бразильский Португальский](README.pt-br.md), [Испанский](README-es.md), [Польский](README.pl.md), [Kорейский](README.ko-kr.md), [French](README-fr.md)._ + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +- [Про Get](#про-get) +- [Установка](#установка) +- [Приложение "Счётчик" с GetX](#приложение-счётчик-с-getx) +- [Три столпа](#три-столпа) + - [Управление состоянием](#управление-состоянием) + - [Реактивное управление состоянием](#реактивное-управление-состоянием) + - [Подробнее об управлении состоянием](#подробнее-об-управлении-состоянием) + - [Управление маршрутами](#управление-маршрутами) + - [Подробнее об управлении маршрутами](#подробнее-об-управлении-маршрутами) + - [Внедрение зависимостей](#внедрение-зависимостей) + - [Подробнее о внедрении зависимостей](#подробнее-о-внедрении-зависимостей) +- [Утилиты](#утилиты) + - [Интернационализация](#интернационализация) + - [Переводы](#переводы) + - [Использование переводов](#использование-переводов) + - [Локализация](#локализация) + - [Изменение локализации](#изменение-локализации) + - [Системная локализация](#системная-локализация) + - [Изменение темы](#изменение-темы) + - [Другие API](#другие-api) + - [Дополнительные глобальные настройки и ручные настройки](#дополнительные-глобальные-настройки-и-ручные-настройки) + - [Локальные виджеты состояния](#локальные-виджеты-состояния) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [Полезные советы](#полезные-советы) + - [GetView](#getview) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [Критические изменения по сравнению с версией 2.0](#критические-изменения-по-сравнению-с-версией-20) +- [Почему Getx?](#почему-getx) +- [Сообщества](#сообщества) + - [Каналы сообщества](#каналы-сообщества) + - [Как внести свой вклад](#как-внести-свой-вклад) + - [Статьи и видео](#статьи-и-видео) + +# Про Get + +- GetX - это сверхлегкое и мощное решение для Flutter. Оно совмещает в себе высокопроизводительное управление состоянием, интеллектуальное внедрение зависимостей, управление маршрутами быстрым и практичным способом. + +- GetX имеет 3 базовых принципа, являющихся приоритетом для всех ресурсов в библиотеке + + - **Производительность:** GetX сфокусирован на производительности и минимальном потреблении ресурсов. Бенчмарки почти всегда не имеют значения в реальном мире, но, если Вам угодно, здесь ([бенчмарки](https://github.com/jonataslaw/benchmarks)) есть индикаторы потребления, где GetX работает лучше, чем другие подходы к управлению состоянием. Разница небольшая, но демонстрирует нашу заботу о ресурсах. + - **Продуктивность:** GetX использует простой и приятный синтаксис. Не имеет значения, что вы хотите сделать, всегда есть более легкий способ с GetX. Это сэкономит часы разработки и обеспечит максимальную производительность, которую может обеспечить ваше приложение. + - **Организация:** GetX позволяет полностью разделить представление, логику представления, бизнес-логику, внедрение зависимостей и навигацию. Вам не нужен контекст для навигации между маршрутами, поэтому вы не зависите от дерева виджетов. Вам не нужен контекст для доступа к вашим контроллерам / блокам через наследуемый виджет, поэтому вы полностью отделяете логику представления и бизнес-логику от уровня визуализации. Вам не нужно внедрять классы Controllers / Models / Blocs в дерево виджетов через мультипровайдеры, поскольку GetX использует собственную функцию внедрения зависимостей, полностью отделяя DI от его представления. + С GetX вы знаете, где найти каждую функцию вашего приложения, имея чистый код по умолчанию. Это, помимо упрощения обслуживания, делает возможным совместное использование модулей, что до того момента во Flutter было немыслимо. + BLoC был отправной точкой для организации кода во Flutter, он отделяет бизнес-логику от визуализации. Getx является естественным развитием этого, разделяя не только бизнес-логику, но и логику представления. Дополнительное внедрение зависимостей и маршрутов также разделено, и уровень данных не учитывается. Вы знаете, где все находится, и это проще, чем написать "Hello World". + GetX - это самый простой, практичный и масштабируемый способ создания высокопроизводительных приложений с помощью Flutter SDK с большой экосистемой вокруг него, которая отлично работает, прост для новичков и точен для экспертов. Он безопасен, стабилен, актуален и предлагает огромный набор встроенных API, которых нет в Flutter SDK по умолчанию. + +- GetX не раздут. Он имеет множество функций, которые позволяют вам начать программировать, ни о чем не беспокоясь, но каждая из этих функций находится в отдельных контейнерах и запускается только после использования. Если вы используете только управление состоянием, то будет скомпилировано только управление состоянием. Если вы используете маршрутизацию, то ничего из управления состоянием не будет скомпилировано. Вы можете воспользоваться репозиторием бенчмарка, и вы увидите, что используя только управление состоянием Get, приложение, которое скомпилировано с помощью Get, имеет меньший размер, чем приложения использующие другие пакеты для управления состоянием, потому что всё, что не используется, не будет скомпилировано в Ваш код. Таким образом каждое решение GetX было спроектировано, чтобы быть сверхлёгким. Также в этом есть и заслуга Flutter, который умеет устранять неиспользуемые ресурсы, как ни один другой фреймворк. + +- Getx имеет огромную экосистему, способную работать с одним и тем же кодом на Android, iOS, в Интернете, Mac, Linux, Windows и на вашем сервере. +**С помощью [Get Server](https://github.com/jonataslaw/get_server) ваш код, созданный на веб-интерфейсе, можно повторно использовать на вашем сервере.** + +**Кроме того, весь процесс разработки может быть полностью автоматизирован как на сервере, так и во внешнем интерфейсе с помощью [Get CLI](https://github.com/jonataslaw/get_cli)**. + +**Кроме того, для дальнейшего повышения вашей продуктивности у нас есть [расширение для VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) и [расширение для Android Studio / Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets).** + +# Установка + +Добавьте Get в файл pubspec.yaml: + +```yaml +dependencies: + get: +``` + +Импортируйте Get в файлы, в которых планируете его использовать: + +```dart +import 'package:get/get.dart'; +``` + +# Приложение "Счётчик" с GetX + +Проект "Счётчик", созданный по умолчанию для нового проекта на Flutter, имеет более 100 строк (с комментариями). Чтобы показать возможности Get, я продемонстрирую, как сделать "Счётчик", изменяющий состояние при каждом клике, переключении между страницами и передаче состояния между экранами. Всё это вместе с разделением бизнес логики от представления занимает ВСЕГО ЛИШЬ 26 СТРОК КОДА, ВКЛЮЧАЯ КОММЕНТАРИИ. + +- Шаг 1: + Добавьте "Get" перед вашим MaterialApp, превращая его в GetMaterialApp + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- Примечание: это не изменяет MaterialApp, GetMaterialApp не является модифицированным MaterialApp, это просто предварительно настроенный виджет, у которого в качестве дочернего по умолчанию используется MaterialApp. Вы можете настроить это вручную, но это не обязательно. GetMaterialApp будет создавать маршруты, вводить их, вводить переводы, вводить всё, что вам нужно для навигации. Если вы используете Get только для управления состоянием или зависимостями, нет необходимости использовать GetMaterialApp. GetMaterialApp необходим для навигации, снекбаров, интернационализации, bottomSheets, диалогов и API, связанных с маршрутами и отсутствием контекста. +- Примечание²: Этот шаг необходим только в том случае, если вы собираетесь использовать управление маршрутами (`Get.to()`, `Get.back()` и так далее). Если вы не собираетесь его использовать, то шаг 1 выполнять необязательно. + +- Шаг 2: + Создайте свой класс бизнес-логики и поместите в него все переменные, методы и контроллеры. + Вы можете сделать любую переменную наблюдаемой, используя простой ".obs". + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- Шаг 3: + Создайте свой View, используйте StatelessWidget и сэкономьте немного оперативной памяти, с Get вам больше не нужно использовать StatefulWidget. + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // Создайте экземпляр вашего класса с помощью Get.put(), чтобы сделать его доступным для всех "дочерних" маршрутов. + final Controller c = Get.put(Controller()); + + return Scaffold( + // Используйте Obx(()=> чтобы обновить Text() как только count изменится. + appBar: AppBar(title: Obx(() => Text("Кликов: ${c.count}"))), + + // Замените 8 строк Navigator.push простым Get.to(). Вам не нужен context! + body: Center(child: ElevatedButton( + child: Text("Перейти к Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // "Попросите" Get найти и предоставить вам ваш Controller, используемый на другой странице. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Получите доступ к обновленной переменной count + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +Результат: + +![](counter-app-gif.gif) + +Это простой проект, но он уже дает понять, насколько мощным является Get. По мере роста вашего проекта эта разница будет становиться все более значительной. + +Get был разработан для работы с командами, но он упрощает работу отдельного разработчика. + +Оптимизируйте ваши сроки, доставляйте всё вовремя без потери производительности. Get не для всех, но, если вы идентифицировали себя с предыщим предложением, Get для вас! + +# Три столпа + +## Управление состоянием + +В настоящее время для Flutter есть несколько менеджеров состояний. Однако большинство из них связано с использованием ChangeNotifier для обновления виджетов, и это плохой и очень плохой подход к производительности для средних или больших приложений. Вы можете проверить в официальной документации Flutter, что [ChangeNotifier следует использовать с 1 или максимум 2 слушателями](https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html), что делает его практически непригодным для любого приложения среднего или большого размера. + +Get не лучше и не хуже, чем любой другой менеджер состояний, но вам следует проанализировать его, а также пункты ниже, чтобы выбрать между использованием Get в чистой форме (Vanilla), либо совместно с другим менеджером состояний. + +Определенно, Get не враг любого другого менеджера состояний, потому что Get - это микрофреймворк, а не просто менеджер состояний, и его можно использовать отдельно или вместе с ними. + +Get имеет два разных менеджера состояний: простой менеджер состояний (мы назовем его GetBuilder) и реактивный менеджер состояний (который называется GetX). + +### Реактивное управление состоянием + +Реактивное программирование может оттолкнуть многих людей, потому что считается сложным. GetX превращает реактивное программирование в нечто довольно простое: + +- Вам не нужно создавать StreamControllers. +- Вам не нужно создавать StreamBuilder для каждой переменной. +- Вам не нужно создавать класс для каждого состояния. +- Вам не нужно создавать геттер начального значения. + +Реактивное программирование с Get так же просто, как использование setState. + +Представим, что у вас есть переменная name и вы хотите, чтобы каждый раз, когда вы её изменяете, все виджеты, которые её используют, менялись автоматически. + +Это ваша переменная: + +```dart +var name = 'Джонатас Борхес'; +``` + +Чтобы сделать его наблюдаемым, вам просто нужно добавить в конец ".obs": + +```dart +var name = 'Джонатас Борхес'.obs; +``` + +А в пользовательском интерфейсе, если вы хотите отображать это значение и обновлять экран при изменении значений, просто сделайте следующее: + +```dart +Obx(() => Text("${controller.name}")); +``` + +Вот и всё. Это _так_ просто. + +### Подробнее об управлении состоянием + +**Более подробное объяснение управления состоянием [здесь](./documentation/ru_RU/state_management.md). Там вы увидите больше примеров, а также разницу между простым менеджером состояния и реактивным менеджером состояния.** + +Вы получите хорошее представление о мощности GetX. + +## Управление маршрутами + +Если вы собираетесь использовать маршруты / снекбары / диалоги / bottomsheets без контекста, GetX отлично подойдёт вам, просто посмотрите: + +Добавьте "Get" перед MaterialApp, превратив его в GetMaterialApp. + +```dart +GetMaterialApp( // Ранее: MaterialApp( + home: MyHome(), +) +``` + +Перейдите на новый экран: + +```dart + +Get.to(NextScreen()); +``` + +Перейдите на новый экран с именем. Более подробную информацию об именованных маршрутах смотрите [здесь](./documentation/ru_RU/route_management.md#navigation-with-named-routes) + +```dart + +Get.toNamed('/details'); +``` + +Закрыть снекбар, диалог, bottomsheets, или что-то иное, что вы обычно закрывали с помощью Navigator.pop(context); + +```dart +Get.back(); +``` + +Для перехода к следующему экрану без возможности вернуться к предыдущему экрану (для использования в SplashScreens, экранах входа и т. д.) + +```dart +Get.off(NextScreen()); +``` + +Для перехода к следующему экрану и отмены всех предыдущих маршрутов (полезно в корзинах для покупок, опросах и тестах) + +```dart +Get.offAll(NextScreen()); +``` + +Заметили, что вам не нужно было использовать контекст, чтобы делать что-либо из этого? Это одно из самых больших преимуществ использования Get. Благодаря этому вы можете без проблем выполнять все эти методы из класса контроллера. + +### Подробнее об управлении маршрутами + +**Get работает с именованными маршрутами, а также предлагает более низкий уровень контроля над вашими маршрутами! [Здесь](./documentation/ru_RU/route_management.md) есть подробная документация.** + +## Внедрение зависимостей + +Get имеет простой и мощный менеджер зависимостей, который позволяет вам получить тот же класс, что и ваш BLoC или контроллер, всего одной строкой кода, без Provider context, без InheritedWidget: + +```dart +Controller controller = Get.put(Controller()); // Вместо Controller controller = Controller(); +``` + +- Примечание: Если вы используете Get State Manager, обратите больше внимания на API привязок, который упростит подключение вашего представления к контроллеру. + +Вместо того, чтобы создавать экземпляр вашего класса внутри класса, который вы используете, вы создаете его в экземпляре Get, что сделает его доступным во всем приложении. Таким образом, вы можете использовать свой контроллер (или BLoC) в обычном режиме. + +**Совет:** Управление зависимостями Get не связано с другими частями пакета, поэтому, если, например, ваше приложение уже использует менеджер состояний (любой, не имеет значения), вам не нужно все это переписывать, вы можете использовать это внедрение зависимостей без проблем. + +```dart +controller.fetchApi(); +``` + +Представьте, что вы прошли через множество маршрутов и вам нужны данные, которые остались в вашем контроллере, вам понадобится менеджер состояний в сочетании с Provider или Get_it, верно? Только не с Get. Вам просто нужно попросить Get «найти» ваш контроллер, никаких дополнительных зависимостей вам не потребуется: + +```dart +Controller controller = Get.find(); +// Да, это выглядит как Магия! Get найдет ваш controller и доставит его вам. У вас может быть миллион созданных контроллеров, и Get всегда найдет нужный. +``` + +И тогда вы сможете восстановить данные вашего контроллера, которые были там получены: + +```dart +Text(controller.textFromApi); +``` + +### Подробнее о внедрении зависимостей + +**Более подробное объяснение управления зависимостями [здесь](./documentation/ru_RU/dependency_management.md)** + +# Утилиты + +## Интернационализация + +### Переводы + +Переводы хранятся в виде карты пар "ключ-значение". Чтобы добавить собственные переводы, создайте класс и расширьте `Translations`. + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### Использование переводов + +Просто добавьте `.tr` к указанному ключу, и он будет переведен с использованием текущего значения `Get.locale` и `Get.fallbackLocale`. + +```dart +Text('title'.tr); +``` + +### Локализация + +Передайте параметры в `GetMaterialApp`, чтобы определить языковой стандарт и переводы. + +```dart +return GetMaterialApp( + translations: Messages(), // ваши переводы + locale: Locale('en', 'US'), // перевод будет осуществлен в этой локализации + fallbackLocale: Locale('en', 'UK'), // установите резервную локализацию на случай если будет выбрана невалидный локализация. +); +``` + +#### Изменение локализации + +Вызовите `Get.updateLocale(locale)`, чтобы обновить локализацию. Затем переводы автоматически используют новый языковой стандарт. + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### Системная локализация + +Чтобы узнать системную локализацию, вам следует использовать `window.locale`. + +```dart +import 'dart:ui' as ui; + +return GetMaterialApp( + locale: ui.window.locale, +); +``` + +## Изменение темы + +Пожалуйста, не используйте виджет более высокого уровня, чем `GetMaterialApp`, для его обновления. Это может вызвать повторяющиеся ключи. Многие люди привыкли к старому подходу к созданию виджета «ThemeProvider» только для того, чтобы изменить тему вашего приложения, а это НЕ требуется с GetX ™. + +Вы можете создать свою собственную тему и просто добавить ее в `Get.changeTheme` без повторяющегося кода: + +```dart +Get.changeTheme(ThemeData.light()); +``` + +Если вы хотите создать что-то вроде кнопки, которая изменяет тему, вы можете объединить для этого два API **GetX ™**: + +- API, который проверяет, используется ли темная тема. +- И API смены темы. + +Вы можете просто поместить это в `onPressed`: + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +Когда `.darkmode` активен, он переключится на _light theme_, и когда _light theme_ станет активной, он изменится на _dark theme_. + +## Другие API + +```dart +// получить текущие аргументы текущего экрана +Get.arguments + +// получить аргументы предыдущего маршрута +Get.previousArguments + +// получить имя предыдущего маршрута +Get.previousRoute + +// получить чистый маршрут, например, чтобы узнать: rawRoute.isFirst() +Get.rawRoute + +// получить доступ к Rounting API из GetObserver +Get.routing + +// проверить, открыт ли снекбар +Get.isSnackbarOpen + +// открыт ли диалог +Get.isDialogOpen + +// открыт ли bottomsheets +Get.isBottomSheetOpen + +// удалить один маршрут +Get.removeRoute() + +// возвращаться назад, пока данный предикат не выполнится +Get.until() + +// идти вперед, удалив предыдущие маршруты, пока данный предикат не выполнится +Get.offUntil() + +// перейти к следующему именованному маршруту, удалив предыдущие маршруты, пока данный предикат не выполнится +Get.offNamedUntil() + +// проверить на какой платформе работает приложение +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +// проверить тип устройства +GetPlatform.isMobile +GetPlatform.isDesktop +// В вебе все платформы поддерживаются независимо! +// Можно узнать, работает ли приложение сейчас в браузере +// и на Windows, и на iOS, и на OSX, и на Android и так далее +GetPlatform.isWeb + + +// Эквивалент : MediaQuery.of(context).size.height, +// но неизменяемый. +Get.height +Get.width + +// Текущий контекст навигации +Get.context + +// Получить контекст показанного снекбара/диалога/bottomsheets в любом месте вызова. +Get.contextOverlay + +// Внимание: методы ниже являются расширениями класса BuildContext. +// Поскольку доступ к контексту есть в любом месте из вашего UI, +// вы можете использовать расширения в любом месте UI кода + +// Если вам нужна изменяемая высота/ширина (например, настольное или браузерное окно, размер которого можно изменить), вам нужно использовать context +context.width +context.height + +// Дает возможность определить половину экрана, треть и так далее. +// Полезно для отзывчивых приложений. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// Схоже с MediaQuery.of(context).size +context.mediaQuerySize() + +/// Схоже с MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// Схоже с MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// Схоже с MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// Схоже с MediaQuery.of(context).orientation; +context.orientation() + +/// Проверить, в горизонтальном ли режиме устройство +context.isLandscape() + +/// Проверить, в вертикальном ли режиме устройство +context.isPortrait() + +/// Схоже с to MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// Схоже с MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// Получить shortestSide экрана +context.mediaQueryShortestSide() + +/// Вернет True, если ширина больше 800 +context.showNavbar() + +/// Вернет True, если меньшая сторона меньше 600p +context.isPhone() + +/// Вернет True, если меньшая сторона больше 600p +context.isSmallTablet() + +/// Вернет True, если меньшая сторона больше 720p +context.isLargeTablet() + +/// Вернет True, если текущее устройство — Планшет +context.isTablet() + +/// Возвращает value в зависимости от размера экрана +/// Можно устанавливать значения для: +/// watch: Если меньшая сторона меньше 300 +/// mobile: Если меньшая сторона меньше 600 +/// tablet: Если меньшая сторона меньше 1200 +/// desktop: Если ширина больше 1200 +context.responsiveValue() +``` + +### Дополнительные глобальные настройки и ручные настройки + +GetMaterialApp настраивает все за вас, но если вы хотите настроить Get вручную. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +Вы также сможете использовать собственное промежуточное ПО в `GetObserver`, это ни на что не повлияет. + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +Вы можете создать _Глобальные Настройки_ Для `Get`. Просто добавьте `Get.config` в ваш код прежде чем нажимать на любой из маршрутов. +Или сделайте это прямо в `GetMaterialApp` + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +При желании, вы сможете перенаправить все сообщения из `Get`. +Если вы хотите использовать свой любимый пакет для логирования и собирать логи там: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // передайте сообщение вашей любимой log-библиотеке + // но учитывайте, что даже если enableLog: false, сообщения все равно будут передаваться сюда + // узнать значение этого флага можно с помощью GetConfig.isLogEnable +} + +``` + +### Локальные виджеты состояния + +Эти виджеты позволяют управлять одним значением, сохраняя состояние эфемерным и локальным. +У нас есть варианты для Reactive и Simple. +Например, вы можете использовать их для переключения obscureText в `TextField`, возможно, для создания кастомного ExpandablePanel или, возможно, для изменения текущего индекса в `BottomNavigationBar` при изменении содержимого body в `Scaffold`. + +#### ValueBuilder + +Упрощение `StatefulWidget` который работает с вызовом `.setState` принимающим обновленное значение. + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // такая же сигнатура! Вы можете использовать ( newValue ) => updateFn( newValue ) + ), + // Если нужно вызвать что-то вне метода builder + onUpdate: (value) => print("Значение обновлено: $value"), + onDispose: () => print("Виджет удален"), +), +``` + +#### ObxValue + +Похож на [`ValueBuilder`](#valuebuilder), но это реактивная версия, вы передаёте Rx экземпляр (помните волшебный .obs?) и +автоматически обновляетесь... разве это не великолепно? + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // У Rx есть _callable_ функция! Вы можете использовать (flag) => data.value = flag, + ), + false.obs, +), +``` + +## Полезные советы + +`.obs`ervables (наблюдатели) (также известные как Rx-типы) имеют широкий спектр внутренних методов и операторов + +> Очень распространено _мнение_, что свойство с `.obs` **ЯВЛЯЕТСЯ** действительным значением... но не ошибайтесь! +> Мы избегаем объявления типа переменной, потому что компилятор Dart достаточно умен, и +> код выглядит чище, но: + +```dart +var message = 'Привет, мир'.obs; +print( 'Тип "$message" — ${message.runtimeType}'); +``` + +Даже если `message` _выводит_ значение String, его тип - **RxString**! + +Итак, вы не сможете сделать `message.substring( 0, 4 )`. +Вы должны получить доступ к реальному `value` внутри _observable_: +Самый "используемый способ" это `.value`, но, знаете ли вы, что вы также можете использовать ... + +```dart +final name = 'GetX'.obs; +// "обновляет" поток только если значение отличается от текущего. +name.value = 'Хей'; + +// Все свойства Rx являются "вызываемыми" и возвращают новые значения. +// но это не работает с `null`: UI не будет перестроен. +name('Привет'); + +// как геттер, напечатает 'Привет'. +name() ; + +/// числа: + +final count = 0.obs; + +// Вы можете использовать все неизменяемые операции с числами! +count + 1; + +// Осторожно! Это можно использовать только если `count` не final, а var +count += 1; + +// Сравнения так же работают: +count > 2; + +/// логические: + +final flag = false.obs; + +// переключает значение между true/false +flag.toggle(); + + +/// все типы: + +// обнуляет значение переменной `value`. +flag.nil(); + +// Все toString(), toJson() операции применяются к `value` +print( count ); // вызывает `toString()` внутри RxInt + +final abc = [0,1,2].obs; +// Преобразует значение в json массив, выводит RxList +// Json поддерживается всеми Rx типами! +print('json: ${jsonEncode(abc)}, тип: ${abc.runtimeType}'); + +// RxMap, RxList и RxSet являются особенными Rx типами: они расширяют нативные типы. +// Но вы можете работать со списком как и с обычным списком, хоть и реактивным! +abc.add(12); // добавлеет 12 в список, and ОБНОВЛЯЕТ поток. +abc[3]; // как списки, возвращает значение с индексом 3. + + +// Сравнение равенства работает с Rx и с его value, но хэш код всегда берется у value +final number = 12.obs; +print( number == 12 ); // печатает true + +/// Кастомные Rx Модели: + +// toJson(), toString() передаются child, так что вы можете перегрузить эти методы в нем, и вызвать print напрямую. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, возраст: $age'; +} + +final user = User(name: 'Джон', last: 'Доу', age: 33).obs; + +// `user` – "реактивный", но его свойства – НЕТ! +// Так что если мы обновим что-либо внутри user... +user.value.name = 'Рой'; +// Виджет перестроен не будет! +// `Rx` не знает, изменили ли вы что-то у user. +// Так что для кастомных классов вам нужно явно "уведомлять" об изменении. +user.refresh(); + +// или мы можем использовать метод `update()`! +user.update((value){ + value.name='Рой'; +}); + +print( user ); +``` + +#### GetView + +Я люблю этот виджет, он такой простой, но такой полезный! + +Это `const Stateless` виджет, который имеет геттер `controller` для зарегистрированного `Controller`, вот и всё. + +```dart + class AwesomeController extends GetxController { + final String title = 'Моя Удивительная View'; + } + + // ВСЕГДА передавайте `Тип` вашего контроллера! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text( controller.title ), // просто вызовите `controller.что-то` + ); + } + } +``` + +#### GetWidget + +Большинство людей понятия не имеют об этом виджете или путаются при его применении. +Вариант его использования редок, но конкретен: он кэширует Controller. +Поэтому из-за _cache_, он не может быть `const Stateless`. + +> Итак, когда вам нужно «кэшировать» контроллер? + +В случаях использования другой "не распространённой" фичи **GetX**: `Get.create()`. + +`Get.create(()=>Controller())` будет создавать новый `Controller` каждый раз при вызове +`Get.find()`, + +Это тот самый случай, когда `GetWidget` блистает... поскольку вы можете использовать его, например, для хранения списка элементов Todo. Итак, если виджет будет «перестроен», он сохранит тот же экземпляр контроллера. + +#### GetxService + +Этот класс похож на `GetxController`, у него такой же жизненный цикл ( `onInit()`, `onReady()`, `onClose()`). +Но внутри нет никакой «логики». Он просто уведомляет систему **GetX** Dependency Injection о том, что этот подкласс **нельзя** удалить из памяти. + +Так что очень полезно держать ваши «Сервисы» всегда доступными и активными с помощью `Get.find()`. Например: +`ApiService`, `StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// ПОДОЖДИТЕ ИНИЦИАЛИЗАЦИЮ СЕРВИСОВ. + runApp(SomeApp()); +} + +/// Умным решением будет проинициализировать сервисы перед вызовом runApp, +/// поскольку вы можете контроллировать процесс инициализации +/// (может, вам нужно загрузить конфигурацию Темы, ключи API, язык, определенный пользователем... +/// Загружайте SettingService прежде чем запускать ApiService. +/// Таким образом GetMaterialApp() принимает параметры напрямую, и ему не нужно будет перезагружаться +void initServices() async { + print('запуск сервисов ...'); + /// Здесь вы инициализируете get_storage, hive, shared_pref, + /// или что-либо другое асинхронное. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('Все сервисы запущены...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType задержка 2 секунды'); + await 2.delay(); + print('$runtimeType готов!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType задержка 1 секунду'); + await 1.delay(); + print('$runtimeType готов!'); + } +} + +``` + +Единственный способ удалить `GetxService` - использовать `Get.reset()`, который похож на «горячую перезагрузку» вашего приложения. Так что помните, если вам нужен постоянный экземпляр класса в течение всего жизненного цикла вашего приложения, используйте `GetxService`. + +# Критические изменения по сравнению с версией 2.0 + +1- Rx типы: + +| До | После | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +RxController и GetBuilder теперь объединены, вам больше не нужно запоминать, какой контроллер вы хотите использовать, просто используйте GetxController, он будет работать как для простого управления состоянием, так и для реактивного. + +2- NamedRoutes +До: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +Сейчас: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +Для чего это изменение? +Часто может потребоваться решить, какая страница будет отображаться с помощью параметра или токена входа, предыдущий подход был негибким, так как он не позволял этого. +Вставка страницы в функцию значительно снизила потребление оперативной памяти, поскольку маршруты не будут выделяться в памяти с момента запуска приложения, а также позволил использовать такой подход: + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# Почему Getx? + +1- Много раз после обновления Flutter многие из ваших пакетов ломались. Иногда случаются ошибки компиляции, часто возникают ошибки, на которые до сих пор нет ответов, и разработчику необходимо знать, откуда возникла ошибка, отслеживать ошибку, только затем попытаться открыть проблему в соответствующем репозитории и увидеть, как проблема решена. Get централизует основные ресурсы для разработки (управление состоянием, зависимостями и маршрутами), позволяя вам добавить один пакет в свой pubspec и начать работу. После обновления Flutter единственное, что вам нужно сделать, это обновить зависимость Get и приступить к работе. Get также решает проблемы совместимости. Как часто бывало, что одна версия пакета несовместима с другой, потому что одна использует зависимость в одной версии, а другая - в другой? Это не проблема при использовании Get, поскольку все находится в одном пакете и полностью совместимо. + +2- Flutter - это просто, Flutter - это невероятно, но у Flutter все еще некоторый шаблонный код, который может быть нежелательным для большинства разработчиков, например `Navigator.of(context).push (context, builder [...]`. Get упрощает разработку. Вместо того, чтобы писать 8 строк кода для вызова маршрута, вы можете просто сделать это: `Get.to(Home())` и всё готово, вы перейдёте на следующую страницу. Динамические URL-адреса - это действительно болезненная вещь, которую нужно решать во Flutter в настоящее время, а с GetX это элементарно. Управление состояниями во Flutter и управление зависимостями также вызывает много споров, поскольку в pub есть сотни паттернов. Но нет ничего проще, чем добавить «.obs» в конец вашей переменной и поместить ваш виджет внутри Obx, и всё, все обновления этой переменной будут автоматически обновляться на экране. + +3- Лёгкость, не беспокоясь о производительности. Производительность Flutter уже потрясающая, но представьте, что вы используете диспетчер состояний и локатор для распределения классов блоков / хранилищ / контроллеров / и других классов. Вам придётся вручную вызывать исключение этой зависимости, когда она вам не нужна. Но вы когда-нибудь думали о том, чтобы просто использовать свой контроллер, и когда он больше никем не использовался, он просто был бы удален из памяти? Это то, что делает GetX. Благодаря SmartManagement всё, что не используется, удаляется из памяти, и вам не нужно беспокоиться ни о чем, кроме программирования. Вы будете уверены, что потребляете минимум необходимых ресурсов, даже не создав для этого логики. + +4- Действительное разделение. Вы могли слышать о концепции разделения представления от бизнес логики. Это не исключительная особенность BLoC, MVC, MVVM и тд, любой стандарт реализует эту концепцию. Однако во Flutter возможно ослабление этой концепции из-за необходимости использования контекста. +Если вам нужен контекст для поиска InheritedWidget, он вам нужен в представлении, либо нужно передать контекст как параметр. Мы считаем это решение очень уродливым, и для работы в команде мы всегда будем зависеть от логики представления (View). Getx - необычный подход со стандартным доступом, который хоть и не запрещает использование StatefulWidgets, InitState, и т.д., всегда имеет более чистый аналог. У контроллеров есть жизненные циклы, и когда вам нужно сделать, например, запрос APIREST, вы не зависите ни от чего в представлении. Вы можете использовать onInit для инициирования http-вызова, и когда данные поступят, переменные будут заполнены. Поскольку GetX полностью реактивен (действительно реактивен и работает с потоками), после заполнения элементов все виджеты, использующие эту переменную, будут автоматически обновлены в представлении. Это позволяет людям с опытом работы с пользовательским интерфейсом работать только с виджетами и не отправлять в бизнес-логику ничего, кроме пользовательских событий (например, нажатия кнопки), в то время как люди, работающие с бизнес-логикой, смогут создавать и тестировать бизнес-логику отдельно. + +Эта библиотека всегда будет обновляться и реализовывать новые функции. Не стесняйтесь предлагать PR. + +# Сообщества + +## Каналы сообщества + +У GetX очень активное и готовое к взаимовыручке сообщество. Если у вас есть вопросы или вы хотите получить какую-либо помощь относительно использования этого фреймворка, присоединяйтесь к нашим каналам сообщества, на ваш вопрос ответят быстро. Этот репозиторий предназначен исключительно для открытия проблем и запроса ресурсов, но не стесняйтесь быть частью сообщества GetX. + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## Как внести свой вклад + +_Хотите внести свой вклад в проект? Вы будем рады отметить вас как одного из наших соавторов. Вот несколько направлений, где вы можете сделать Get (и Flutter) лучше._ + +- Помощь в переводе readme на другие языки. +- Добавление документации в readme (многие функции Get еще не задокументированы). +- Напишите статью или сделайте видео, обучающие использованию Get (они будут вставлены в Readme и в будущем в нашу Wiki). +- Предложите PRs для кода/тестов. +- Новые фичи. + +Приветствуется любой вклад! + +## Статьи и видео + +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. diff --git a/packages/get/README.ur-PK.md b/packages/get/README.ur-PK.md new file mode 100644 index 0000000..8579a91 --- /dev/null +++ b/packages/get/README.ur-PK.md @@ -0,0 +1,1054 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +**🌎 اردو ( Selected ✔) [| انگریزی |](README.md) [| ویتنامی |](README-vi.md) [| انڈونیشی |](README.id-ID.md) [چینی |](README.zh-cn.md) [برازیلی پرتگالی |](README.pt-br.md) [ہسپانوی |](README-es.md) [روسی |](README.ru.md) [پولش |](README.pl.md) [کورین |](README.ko-kr.md), [French](README-fr.md)** + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +- [تعارف](#تعارف) +- [انسٹال](#انسٹال) +- [کاؤنٹرایپ](#کاؤنٹرایپ) +- [تین ستون](#تین-ستون) + - [اسٹیٹ مینجمنٹ](#اسٹیٹ-مینجمنٹ) + - [ری ایکٹو اسٹیٹ منیجر](#ری-ایکٹو-اسٹیٹ-منیجر) + - [اسٹیٹ مینجمنٹ کے بارے میں مزید تفصیلات](#اسٹیٹ-مینجمنٹ-کے-بارے-میں-مزید-تفصیلات) + - [روٹ مینجمنٹ](#روٹ-مینجمنٹ) + - [روٹ مینجمنٹ کے بارے میں مزید تفصیلات](#روٹ-مینجمنٹ-کے-بارے-میں-مزید-تفصیلات) + - [انحصار کا انتظام](#انحصار-کا-انتظام) + - [انحصار کے انتظام کے بارے میں مزید تفصیلات](#انحصار-کے-انتظام-کے-بارے-میں-مزید-تفصیلات) +- [استعمال](#استعمال) + - [عالمگیریت](#عالمگیریت) + - [ترجمہ](#ترجمہ) + - [ترجمہ کا استعمال](#ترجمہ-کا-استعمال) + - [مقامی](#مقامی) + - [مقام کی تبدیلی](#مقام-کی-تبدیلی) + - [سسٹم لوکیشن](#سسٹم-لوکیشن) + - [تھیم کی تبدیلی](#تھیم-کی-تبدیلی) + - [رابطے کا قیام](#رابطے-کا-قیام) + - [ڈیفالٹ کنکشن کا قیام](#ڈیفالٹ-کنکشن-کا-قیام) + - [خود سے رابطے کا قیام](#خود-سے-رابطے-کا-قیام) + - [گیٹ پیج مڈل ویئر](#گیٹ-پیج-مڈل-ویئر) + - [ترجیح](#ترجیح) + - [ری ڈائریکٹ](#ری-ڈائریکٹ) + - [جب پیج کی درخواست کی جائے](#جب-پیج-کی-درخواست-کی-جائے) + - [آنبائنڈنگ اسٹارٹ](#آنبائنڈنگ-اسٹارٹ) + - [آنپیج بلڈ اسٹارٹ](#آنپیج-بلڈ-اسٹارٹ) + - [جب پیج لوڈ ہو](#جب-پیج-لوڈ-ہو) + - [جب صفحہ تصرف ہوجائے](#جب-صفحہ-تصرف-ہوجائے) + - [دوسرے اعلی درجے کی APIs](#دوسرے-اعلی-درجے-کی-apis) + - [اختیاری عالمی ترتیبات اور دستی تشکیلات](#اختیاری-عالمی-ترتیبات-اور-دستی-تشکیلات) + - [مقامی اسٹیٹ ویجٹ](#مقامی-اسٹیٹ-ویجٹ) + - [ویلیو بلڈر](#ویلیو-بلڈر) + - [اوبکس ویلیو](#اوبکس-ویلیو) + - [کارآمد نکات](#کارآمد-نکات) + - [گیٹ ویو](#گیٹ-ویو) + - [گیٹ ویجٹ](#گیٹ-ویجٹ) + - [گیٹکس سروس](#گیٹکس-سروس) +- [پچھلے ورژن سے اہم تبدیلیاں](#پچھلے-ورژن-سے-اہم-تبدیلیاں) +- [گیٹکس کیوں؟](#گیٹکس-کیوں) +- [سماجی خدمات](#سماجی-خدمات) + - [کمیونٹی چینلز](#کمیونٹی-چینلز) + - [کس طرح شراکت کریں](#کس-طرح-شراکت-کریں) + - [مضامین اور ویڈیوز](#مضامین-اور-ویڈیوز) + +# تعارف + +گیٹ ایکس اسٹیٹ مینجمنٹ کے لئے ایک ہلکا پھلکا اور طاقتور حل ہے۔ یہ تیز اور عملی انداز میں اعلی کارکردگی والی اسٹسٹ مینجمنٹ ، ذہین انحصار انجکشن ، اور روٹ مینجمنٹ کو یکجا کرتا ہے۔ گیٹ ایکس کے 3 بنیادی اصول ہیں ، اس کا مطلب یہ ہے کہ لائبریری میں موجود تمام وسائل کی ترجیح یہی ہے: **پروڈکٹیوٹی, کارکردگی اور تنظیم** + + **پروڈکٹیوٹی :** گیٹ ایکس کارکردگی اور وسائل کی کم سے کم کھپت پر مرکوز ہے۔ گیٹ ایکس اسٹریمز یا چینج نوٹیفائر استعمال نہیں کرتا ہے۔ + + **کارکردگی :** گیٹ ایکس ایک آسان اور خوشگوار ترکیب استعمال کرتا ہے۔ اس سے کوئی فرق نہیں پڑتا ہے کہ آپ کیا کرنا چاہتے ہیں ، گیٹ-ایکس کے ساتھ ہمیشہ ایک آسان راستہ رہتا ہے۔ اس سے کوڈنگ کے کئی گھنٹوں کی بچت ہوگی اور یہ آپ کی ایپلیکیشن فراہم کرنے والی زیادہ سے زیادہ کارکردگی کو نکال دے گی۔ عام طور پر ، ڈویلپر میموری سے کنٹرولرز کو ہٹانے سے متعلق رہنا چاہئے۔ گیٹ-ایکس کے ساتھ یہ ضروری نہیں ہے ، کیونکہ وسائل میموری سے حذف ہوجاتے ہیں جب وہ بطور ڈیفالٹ استعمال نہیں ہوتے ہیں۔ اگر آپ اسے یاد میں رکھنا چاہتے ہیں تو ، آپ کو اپنی انحصار میں واضح طور پر "مستقل: سچ" کا اعلان کرنا ہوگا۔ اس طرح ، وقت کی بچت کے علاوہ ، آپ کو میموری پر غیر ضروری انحصار کرنے کا خطرہ بھی کم ہوتا ہے۔ انحصار لوڈنگ ڈیفالٹ کے لحاظ سے بھی سست ہے۔ + + **تنظیم :** گیٹ-ایکس کی مدد سے منظر ، نمائش کی منطق ، کاروباری منطق ، انحصار انجیکشن ، اور نیویگیشن کی مجموعی ڈوپولنگ کی اجازت دیتا ہے۔ راستوں کے مابین تشریف لے جانے کے لئے سیاق و سباق کی ضرورت نہیں ہے ، لہذا ، آپ اس کے لئے ویجیٹ ٹری (ویژنائزیشن) پر منحصر نہیں ہیں۔ وراثت میں ملنے والے ویجیٹ کے ذریعے اپنے کنٹرولرز / بلاکس تک رسائی حاصل کرنے کے لئے سیاق و سباق کی ضرورت نہیں ہے ، لہذا آپ اپنی پریزنٹیشن منطق اور کاروباری منطق کو اپنی نظریاتی پرت سے مکمل طور پر ڈوپل کرتے ہیں۔ آپ کو متعدد فراہم کنندگان کے ذریعہ اپنے ویجیٹ ٹری میں اپنے کنٹرولرز / ماڈلز / بلاکس کی کلاسیں انجیکشن کرنے کی ضرورت نہیں ہے ، کیونکہ یہ گیٹ ایکس اپنی انحصار انجیکشن کی خصوصیت استعمال کرتا ہے ، جس سے ڈی آئی کو اس کے نظارے کو مکمل طور پر خارج کردیتی ہے۔ گیٹ-ایکس کے ذریعے آپ جانتے ہو کہ اپنی درخواست کی ہر خصوصیت کو کہاں تلاش کرنا ہے ، بطور ڈیفالٹ صاف ستھرا۔ بحالی کی سہولت فراہم کرنے کے علاوہ ، یہ ماڈیولوں کی شیئرنگ کو بھی یقینی بناتا ہے ، ایسی کوئی چیز جو اس وقت تک پھڑپھڑ پھینک کر ناقابل فہم تھی ، اور کچھ مکمل طور پر ممکن تھا۔ +بی ایل او سی پھڑپھڑا میں کوڈ کو منظم کرنے کا نقطہ آغاز تھا ، یہ کاروباری منطق کو تصور سے الگ کرتا ہے۔ گیٹ ایکس اس کا فطری ارتقا ہے ، جس سے نہ صرف کاروباری منطق کو الگ کیا جائے بلکہ پیش کش کی منطق بھی۔ انحصار اور راستوں کا بونس انجیکشن بھی ڈوپل ہوچکا ہے ، اور ڈیٹا لیئر ان سب سے باہر ہے۔ آپ جانتے ہیں کہ سب کچھ کہاں ہے ، اور یہ سب کچھ ہیلو دنیا کی تعمیر سے زیادہ آسان طریقے سے ہے۔ گیٹ-ایکس ، فلٹر ایس ڈی کے کے ساتھ اعلی کارکردگی کی ایپلی کیشنز کی تعمیر کا آسان ترین ، عملی اور اسکیل ایبل طریقہ ہے ، جس کے ارد گرد ایک بہت بڑا ماحولیاتی نظام ہے جو کامل کے ساتھ مل کر کام کرتا ہے ، ابتدائی افراد کے لئے آسان اور ماہرین کے لئے درست ہے۔ یہ محفوظ ، مستحکم ، تازہ ترین ہے ، اور APIs کی ایک بہت بڑی رینج پیش کرتا ہے جو پہلے سے طے شدہ فلوٹر SDK پر موجود نہیں ہے۔ + +گیٹ ایکس پھولا ہوا نہیں ہے۔ اس میں بہت ساری خصوصیات ہیں جو آپ کو کسی بھی چیز کی فکر کیے بغیر پروگرامنگ شروع کرنے کی اجازت دیتی ہیں ، لیکن ان خصوصیات میں سے ہر ایک الگ الگ کنٹینر میں ہے ، اور صرف استعمال کے بعد شروع کی گئی ہے۔ اگر آپ صرف اسٹیٹ مینجمنٹ کا استعمال کرتے ہیں تو صرف اسٹیٹ مینجمنٹ مرتب کی جائے گی۔ اگر آپ صرف راستے ہی استعمال کرتے ہیں تو ، اسٹیٹ مینجمنٹ کی طرف سے کوئی بھی چیز مرتب نہیں کی جائے گی۔ + +گیٹ ایکس میں ایک بہت بڑا ماحولیاتی نظام ، ایک بڑی برادری ، بڑی تعداد میں تعاون کار موجود ہے ، اور جب تک پھڑپھڑ موجود ہے اس کو برقرار رکھا جائے گا۔ گیٹ ایکس بھی اسی کوڈ کے ساتھ اینڈروئیڈ ، آئی او ایس ، ویب ، میک ، لینکس ، ونڈوز اور اپنے سرور پر چلنے کے قابل ہے۔ +**یہ ممکن ہے کہ اپنے پس منظر میں فرنٹ اینڈ پر تیار کردہ اپنے کوڈ کو پوری طرح سے استعمال کریں [گیٹ ایکس سرور](https://github.com/jonataslaw/get_server)**. + +**اس کے علاوہ ، سرور پر اور سامنے والے اختتام پر ، پوری ترقی کا عمل مکمل طور پر خودکار ہوسکتا ہے [CLI حاصل کریں](https://github.com/jonataslaw/get_cli)**. + +**اس کے علاوہ ، آپ کی پیداوری کو مزید بڑھانے کے لئے ، ہمارے پاس ہے +[VSCode](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) اور [Android Studio/Intellij](https://plugins.jetbrains.com/plugin/14975-getx-snippets)** + +# انسٹال +کوڈ میں گیٹ ایکس کی تنصیب +```yaml +# pubspec.yaml +dependencies: + get: +``` +ان فائلوں میں امپورٹ کریں جو استعمال ہوں گی +```dart +import 'package:get/get.dart'; +``` + +# کاؤنٹرایپ + +گیٹ-ایکس کی طاقت کو ظاہر کرنے کے ل I ، میں یہ ظاہر کروں گا کہ کس طرح ہر کلک کے ساتھ "کاؤنٹر" بنانا ہے ، کس طرح صفحات کے مابین تبادلہ کرنا اور اسکرینوں کے درمیان اسٹسٹ کو مشترکہ انداز میں بانٹنا ، کاروباری منطق کو صرف نظر سے الگ کرنا ، 26 لائنز کوڈ شامل تبصرے۔ + +- پہلا قدم : + اپنے میٹریل ایپ سے پہلے "گیٹ" شامل کریں ، اسے گیٹ میٹریئل ایپ میں تبدیل کریں + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +نوٹ: اس سے مٹیریل ایپ میں ترمیم نہیں ہوتی ، گیٹ میٹیرال ایپ کوئی ترمیم شدہ میٹریل ایپ نہیں ہے ، یہ ایک کنفیگریڈ ویجیٹ ہے ، جس میں بطور سی سی فلڈ میٹریل ایپ ہے۔ آپ اسے دستی طور پر تشکیل دے سکتے ہیں ، لیکن یہ یقینی طور پر ضروری نہیں ہے۔ گیٹ میٹریئل ایپ راستوں کو تخلیق کرے گی ، انہیں انجیکشن دے گی ، ترجمہ انجیکشن کرے گی ، روٹ نیویگیشن کے لئے آپ کی ضرورت کی ہر چیز کو انجیکشن دے گی۔ اگر آپ صرف ریاستی انتظام یا انحصار کے انتظام کے لئے گیٹیکس کا استعمال کرتے ہیں تو ، گیٹ میٹریئل ایپ کو استعمال کرنے کی ضرورت نہیں ہے۔ گیٹ میٹیرال ایپ راستوں ، سنیکبارز ، عالمگیریت ، نچلی شیٹس ، مکالموں ، اور روٹس سے متعلق اعلی سطحی اپس اور سیاق و سباق کی عدم موجودگی کے لئے ضروری ہے۔ +یہ اقدام صرف اس صورت میں ضروری ہے اگر آپ روٹ مینجمنٹ کا استعمال کریں گے (`Get.to()`, `Get.back()`). اگر آپ اسے استعمال نہیں کریں گے تو پھر ضروری نہیں ہے کہ قدم 1 کریں + +- دوسرا مرحلہ : + اپنی کاروباری منطق کلاس بنائیں اور اس کے اندر تمام متغیرات ، طریقے اور کنٹرولر رکھیں۔ + کا استعمال کرتے ہوئے کسی بھی متغیر کو قابل مشاہدہ کرسکتے ہیں ".obs". + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- تیسرا قدم : + اپنا نظارہ بنائیں ، اسٹیٹ لیس ویجیٹ استعمال کریں اور کچھ رام کو بچائیں ، گیٹ-ایکس کی مدد سے آپ کو اب اسٹیٹ فل ویجٹ استعمال کرنے کی ضرورت نہیں ہوگی۔ + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + // آپ کی کلاس کا آغاز + // Instantiate your class using Get.put() to make it available for all "child" routes there. + final Controller c = Get.put(Controller()); + + return Scaffold( + // Use Obx(()=> to update Text() whenever count is changed. + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // Replace the 8 lines Navigator.push by a simple Get.to(). You don't need context + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // You can ask Get to find a Controller that is being used by another page and redirect you to it. + final Controller c = Get.find(); + + @override + Widget build(context){ + // Access the updated count variable + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +نتیجہ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) +یہ ایک سادہ پروجیکٹ ہے لیکن اس سے پہلے ہی یہ واضح ہوجاتا ہے کہ گیٹ کتنا طاقتور ہے۔ جیسے جیسے آپ کا پروجیکٹ بڑھتا جائے گا ، یہ فرق مزید نمایاں ہوتا جائے گا۔ +گیٹ کو ٹیموں کے ساتھ کام کرنے کے لئے ڈیزائن کیا گیا تھا ، لیکن اس سے ایک فرد ڈویلپر کا کام آسان ہوجاتا ہے۔ +اپنی آخری تاریخ کو بہتر بنائیں ، کارکردگی کو کھونے کے بغیر وقت پر سب کچھ فراہم کریں۔ اگر آپ نے اس جملے کی نشاندہی کی ہے تو ، گیٹ-ایکس آپ کے لئے ہے! +# تین ستون +## اسٹیٹ مینجمنٹ +گیٹ کے دو مختلف مینیجر ہوتے ہیں: سادہ ریاستی مینیجر (ہم اسے گیٹ بلڈر کہیں گے) اور رد عمل کا مظاہرہ کرنے والے مینیجر (گیٹ-ایکس / اوب-ایکس) +### ری ایکٹو اسٹیٹ منیجر +ری ایکٹیو پروگرامنگ بہت سے لوگوں کو اجنبی بنا سکتا ہے کیونکہ ایسا کہا جاتا ہے کہ یہ پیچیدہ ہے۔ گیٹ ایکس نے رد عمل مندانہ پروگرامنگ کو کسی آسان چیز میں تبدیل کردیا: +- آپ کو اسٹریمکنٹرولر بنانے کی ضرورت نہیں ہوگی +- آپ کو ہر متغیر کے لئے ایک اسٹریم بلڈر بنانے کی ضرورت نہیں ہوگی +- آپ کو ہر ریاست کے لئے کلاس بنانے کی ضرورت نہیں ہوگی +- آپ کو ابتدائی قدر کے لئے گیٹ ایکس بنانے کی ضرورت نہیں ہوگی +- آپ کو کوڈ جنریٹر استعمال کرنے کی ضرورت نہیں ہوگی + + +گیٹ-ایکس کے ساتھ قابل عمل پروگرامنگ اتنا ہی آسان ہے جتنا سیٹ اسٹیٹ کے استعمال سے۔ + +آئیے تصور کریں کہ آپ کے پاس متغیر ہے اور چاہتے ہیں کہ جب بھی آپ اسے تبدیل کریں ، اس کا استعمال کرنے والے تمام وجیٹس خود بخود تبدیل ہوجائیں۔ + +یہ آپ کی گنتی متغیر ہے: + +```dart +var name = 'Jonatas Borges'; +``` + +".obs" اسے مشاہدہ کرنے کے لئے؛ آپ کو اس کے آخر میں شامل کرنے کی ضرورت ہے + +```dart +var name = 'Jonatas Borges'.obs; +``` + +اور صارف کے انٹرفیس میں ، جب آپ اس نمبر کو دکھانا چاہتے ہیں اور جب بھی اس کی اہمیت بدل جاتی ہے تو اسکرین کو اپ ڈیٹ کرنا چاہتے ہیں ، صرف یہ کریں: + +```dart +Obx(() => Text("${controller.name}")); +``` + +بس۔ یہ آسان ہے. + +### اسٹیٹ مینجمنٹ کے بارے میں مزید تفصیلات + +**اسٹیٹ مینجمنٹ کی مزید گہرائی سے وضاحت ملاحظہ کریں [یہاں](./documentation/en_US/state_management.md). وہاں آپ مزید مثالیں دیکھیں گے اور آسان ریاستی مینیجر اور رد عمل ریاست کے مینیجر کے مابین بھی فرق** + +آپ کو گیٹ ایکس پاور کا ایک اچھا خیال ملے گا۔ + +## روٹ مینجمنٹ +اگر آپ سیاق و سباق کے بغیر راستے / سنیکبارز / مکالمے / بوتل شیٹ استعمال کرنے جارہے ہیں تو گیٹ ایکس آپ کے لئے بھی بہترین ہے ، بس اسے دیکھیں: +اپنے میٹریل ایپ سے پہلے "گیٹ" شامل کریں ، اسے گیٹ میٹریئل ایپ میں تبدیل کریں +```dart +GetMaterialApp( // Before: MaterialApp( + home: MyHome(), +) +``` + +نئی اسکرین پر جائیں: + +```dart + +Get.to(NextScreen()); +``` + +نام کے ساتھ نئی اسکرین پر جائیں۔ نامزد راستوں کے بارے میں مزید تفصیلات دیکھیں [یہاں](./documentation/en_US/route_management.md#navigation-with-named-routes) + +```dart + +Get.toNamed('/details'); +``` + +سنیک بار ، ڈائیلاگ ، نیچے شیٹ کو بند کریں +Navigator.pop(context); + +```dart +Get.back(); +``` + +اگلی اسکرین پر جانے کے لئے اور پچھلی اسکرین پر واپس جانے کا کوئی آپشن نہیں (اسپلش اسکرین ، لاگ ان اسکرینوں وغیرہ میں استعمال کیلئے) + +```dart +Get.off(NextScreen()); +``` + +اگلی سکرین پر جانے اور پچھلے سبھی راستوں کو منسوخ کرنے کے لئے (شاپنگ کارٹس ، پولز اور ٹیسٹوں میں کارآمد) + +```dart +Get.offAll(NextScreen()); +``` + +غور کیا کہ آپ کو ان میں سے کوئی بھی کام کرنے کے لئے سیاق و سباق کا استعمال نہیں کرنا پڑا؟ گیٹ روٹ مینجمنٹ کو استعمال کرنے کا سب سے بڑا فائدہ یہ ہے۔ اس کی مدد سے ، آپ اپنے کنٹرولر کلاس کے اندر ، تشویش کے بغیر ، ان تمام طریقوں کو انجام دے سکتے ہیں۔ + +### روٹ مینجمنٹ کے بارے میں مزید تفصیلات + +**گیٹ ایکس نامی روٹ کے ساتھ کام کرتا ہے اور اپنے راستوں پر نچلی سطح کا کنٹرول بھی پیش کرتا ہے! ایک گہرائی میں دستاویزات موجود ہیں [یہاں](./documentation/en_US/route_management.md)** + +## انحصار کا انتظام + +گیٹ ایکس کے پاس ایک سادہ اور طاقتور انحصار منیجر ہے جو آپ کو اپنے بلاک یا کنٹرولر کی طرح ایک ہی کلاس کو دوبارہ حاصل کرنے کی سہولت دیتا ہے جس میں کوڈ کی صرف 1 لائنز ، کوئی فراہم کنندہ سیاق و سباق ، کوئی وراثت والا ویجٹ نہیں ہے۔ + +```dart +Controller controller = Get.put(Controller()); // Rather Controller controller = Controller(); +``` +نوٹ: اگر آپ گیٹ اسٹیٹ منیجر استعمال کررہے ہیں تو ، اے پی آئی کی پابندیوں پر زیادہ توجہ دیں ، جس سے آپ کے قول کو اپنے کنٹرولر سے مربوط کرنے میں آسانی ہوگی۔ + +آپ جس کلاس کو استعمال کررہے ہیں اس میں اپنی کلاس کو تیز کرنے کے بجائے ، آپ اسے حاصل کریں مثال کے طور پر اندر داخل کررہے ہیں ، جس سے یہ آپ کے ایپ میں دستیاب ہوگا۔ +لہذا آپ اپنے کنٹرولر (یا کلاس بلاک) کو عام طور پر استعمال کرسکتے ہیں + +**اشارہ:**گیٹ ایکس انحصار کا انتظام پیکیج کے دوسرے حصوں سے گر گیا ہے ، لہذا اگر مثال کے طور پر آپ کی ایپ پہلے ہی اسٹیٹ مینیجر کو استعمال کررہی ہے (کوئی بھی ، اس سے کوئی فرق نہیں پڑتا ہے) ، آپ کو یہ سب کچھ دوبارہ لکھنے کی ضرورت نہیں ہے ، آپ اس انحصار کو استعمال کرسکتے ہیں۔ +```dart +controller.fetchApi(); +``` + +ذرا تصور کریں کہ آپ نے متعدد راستوں سے گھوما ہوا ہے ، اور آپ کو ایک ایسے ڈیٹا کی ضرورت ہے جو آپ کے کنٹرولر میں پیچھے رہ گیا ہو ، آپ کو فراہم کنندہ یا گیٹ_یٹ کے ساتھ مل کر ایک ریاستی مینیجر کی ضرورت ہوگی ، صحیح؟ گیٹ ایکس کے ساتھ نہیں۔ آپ کو اپنے کنٹرولر کے ل "" ڈھونڈنے "کے لئے گیٹ ایکس سے پوچھنے کی ضرورت ہے ، آپ کو کسی بھی اضافی انحصار کی ضرورت نہیں ہے۔ + +```dart +Controller controller = Get.find(); +``` + +اور پھر آپ اپنا کنٹرولر ڈیٹا دوبارہ حاصل کرنے میں کامیاب ہوجائیں گے جو وہاں واپس حاصل کیا گیا تھا + +```dart +Text(controller.textFromApi); +``` + +### انحصار کے انتظام کے بارے میں مزید تفصیلات + +**انحصار کے انتظام کی مزید گہرائی سے وضاحت ملاحظہ کریں [یہاں](./documentation/en_US/dependency_management.md)** + +# استعمال + +## عالمگیریت + +### ترجمہ + +ترجمہ کو ایک آسان کلیدی قدر والے لغت کے نقشے کے طور پر رکھا جاتا ہے۔ +حسب ضرورت ترجمہ شامل کرنے کے لئے ، ایک کلاس تشکیل دیں اور توسیع کریں +`Translations` +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'en_US': { + 'hello': 'Hello World', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### ترجمہ کا استعمال + +بس ضمیمہ کریں `.tr` مخصوص کی میں اور اس کی موجودہ قیمت کا استعمال کرتے ہوئے ترجمہ کیا جائے گا`Get.locale` اور `Get.fallbackLocale`. + +```dart +Text('title'.tr); +``` + +### مقامی + +مقام اور ترجمے کی وضاحت کے لئے پیرامیٹرز کو `گیٹ میٹیرال ایپ` پاس کریں۔ + +```dart +return GetMaterialApp( + translations: Messages(), // your translations + locale: Locale('en', 'US'), // translations will be displayed in that locale + fallbackLocale: Locale('en', 'UK'), // specify the fallback locale in case an invalid locale is selected. +); +``` + +#### مقام کی تبدیلی + +لوکل کو اپ ڈیٹ کرنے کے لئے کال کریں گیٹ۔ اپ ڈیٹ لوکل (لوکل)۔ پھر ترجمے خود بخود نیا مقام استعمال کرتے ہیں۔ + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### سسٹم لوکیشن + +ڈیوائس لوکل حاصل کرنے کے لئے اس لائن کو استعمال کریں + +```dart +return GetMaterialApp( + locale: Get.deviceLocale, +); +``` + +## تھیم کی تبدیلی + +برائے کرم `گیٹ میٹرال ایپ` سے زیادہ کسی بھی اعلی سطح کے ویجیٹ کو اپ ڈیٹ کرنے کیلئے استعمال نہ کریں۔ اس سے ڈپلیکیٹ کیز کو متحرک کیا جاسکتا ہے۔ بہت سارے لوگ صرف اپنی ایپ کے تھیم کو تبدیل کرنے کے لئے "تھیم پیڈائزر" ویجیٹ بنانے کے پراگیتہاسک نقطہ نظر کے عادی ہیں ، اور یہ ** گیٹ ایکس ™ ** کے ساتھ یقینی طور پر ضروری نہیں ہے۔ + +آپ اپنا کسٹم تھیم تشکیل دے سکتے ہیں اور اس کے لئے کسی بھی بوائلر پلیٹ کے بغیر اسے `گیٹ.چینج تھیم` میں شامل کرسکتے ہیں: + +```dart +Get.changeTheme(ThemeData.light()); +``` + + +اگر آپ بٹن کی طرح کوئی چیز بنانا چاہتے ہیں جو تھیم کو `آن ٹیپ میں تبدیل کردے ، تو آپ اس کے لئے دو ** گیٹ ایکس ™ ** اے پی پی کو جوڑ سکتے ہیں: + +- اے پی آئی جو چیک کرتا ہے کہ آیا گہرا `تھیم` استعمال کیا جارہا ہے۔ +- اور `تھیم` کی تبدیلی ، آپ اسے صرف `آن پیسڈ` میں ڈال سکتے ہیں۔ + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +جب ڈارک موڈ چالو ہوجاتا ہے ، تو وہ _ لائٹ تھیم_ میں تبدیل ہوجائے گا ، اور جب _ لائٹ تھیم_ فعال ہوجائے گا ، تو یہ _ ڈارک تھیم_ میں بدل جائے گا۔ + +## رابطے کا قیام +گیٹ کنیکٹ آپ کی پیٹھ سے اپنے سامنے تک HTTP یا ویب ساکٹس کے ذریعہ مواصلت کرنے کا ایک آسان طریقہ ہے + +### ڈیفالٹ کنکشن کا قیام +آپ آرام سے گیٹ کنیکٹ کو بڑھا سکتے ہیں اور GET / POST / PUT / DELETE / SOCKET طریقوں کو اپنے ریسٹ API یا ویب ساکٹس کے ساتھ بات چیت کرسکتے ہیں۔ + +```dart +class UserProvider extends GetConnect { + // Get request + Future getUser(int id) => get('http://youapi/users/$id'); + // Post request + Future postUser(Map data) => post('http://youapi/users', body: data); + // Post request with File + Future> postCases(List image) { + final form = FormData({ + 'file': MultipartFile(image, filename: 'avatar.png'), + 'otherFile': MultipartFile(image, filename: 'cover.png'), + }); + return post('http://youapi/users/upload', form); + } + + GetSocket userMessages() { + return socket('https://yourapi/users/socket'); + } +} +``` +### خود سے رابطے کا قیام + +گیٹ کنیکٹ انتہائی حسب ضرورت ہے آپ درخواست کو تبدیل کرنے والے ، جواب دہندگان کے بطور ، جواب دہندگان کی حیثیت سے ، ایک مستند کی وضاحت ، اور حتی کہ کوششوں کی تعداد بھی کرسکتے ہیں جس میں وہ خود کو مستند کرنے کی کوشش کرے گی ، اس کے علاوہ یہ ایک معیاری ڈیکوڈر کی وضاحت کے امکان کو بھی فراہم کرے گی جو تبدیل ہوجائے گی۔ آپ کی ساری درخواستیں آپ میں اضافی تشکیل کے بغیر ماڈل کرتی ہیں۔ + +```dart +class HomeProvider extends GetConnect { + @override + void onInit() { + // All request will pass to jsonEncode so CasesModel.fromJson() + httpClient.defaultDecoder = CasesModel.fromJson; + httpClient.baseUrl = 'https://api.covid19api.com'; + // baseUrl = 'https://api.covid19api.com'; // It define baseUrl to + // Http and websockets if used with no [httpClient] instance + + // It's will attach 'apikey' property on header from all requests + httpClient.addRequestModifier((request) { + request.headers['apikey'] = '12345678'; + return request; + }); + + // Even if the server sends data from the country "Brazil", + // it will never be displayed to users, because you remove + // that data from the response, even before the response is delivered + httpClient.addResponseModifier((request, response) { + CasesModel model = response.body; + if (model.countries.contains('Brazil')) { + model.countries.remove('Brazilll'); + } + }); + + httpClient.addAuthenticator((request) async { + final response = await get("http://yourapi/token"); + final token = response.body['token']; + // Set the header + request.headers['Authorization'] = "$token"; + return request; + }); + + //Autenticator will be called 3 times if HttpStatus is + //HttpStatus.unauthorized + httpClient.maxAuthRetries = 3; + } + } + + @override + Future> getCases(String path) => get(path); +} +``` + +## گیٹ پیج مڈل ویئر + +گیٹ پیج کے پاس اب نئی پراپرٹی ہے جو گیٹ میڈل ویئر کی فہرست لیتی ہے اور انہیں مخصوص ترتیب میں چلاتی ہے۔ + +نوٹ: جب گیٹ پیج کے مڈل ویئرز ہوں گے تو ، اس صفحے کے سبھی بچوں میں ایک جیسے مڈل ویئرز خودبخود ہوں گے۔ + +### ترجیح + +مڈل ویئر کو چلانے کا آرڈر گیٹ میڈل ویئر میں ترجیحی طور پر ترتیب دیا جاسکتا ہے۔ + +```dart +final middlewares = [ + GetMiddleware(priority: 2), + GetMiddleware(priority: 5), + GetMiddleware(priority: 4), + GetMiddleware(priority: -8), +]; +``` +وہ مڈل ویئر اسی ترتیب سے چلائے جائیں گے **-8 => 2 => 4 => 5** + +### ری ڈائریکٹ + +اس فنکشن کو اس وقت کہا جائے گا جب کال والے راستے کے صفحے کی تلاش کی جا رہی ہو۔ اس کو ری ڈائریکٹ کرنے کے نتیجے میں روٹ سیٹنگز لیتے ہیں۔ یا اسے کالعدم کردیں اور کوئی ردوبدل نہیں ہوگا۔ + +```dart +RouteSettings redirect(String route) { + final authService = Get.find(); + return authService.authed.value ? null : RouteSettings(name: '/login') +} +``` + +### جب پیج کی درخواست کی جائے + +جب اس صفحے کو کچھ بھی تخلیق کرنے سے پہلے بلایا جائے گا تو اس فنکشن کو کہا جائے گا +آپ اسے صفحہ کے بارے میں کچھ تبدیل کرنے یا نیا صفحہ دینے کیلئے استعمال کرسکتے ہیں + +```dart +GetPage onPageCalled(GetPage page) { + final authService = Get.find(); + return page.copyWith(title: 'Welcome ${authService.UserName}'); +} +``` + +### آنبائنڈنگ اسٹارٹ + +اس فنکشن کو بائنڈنگ شروع کرنے سے پہلے ہی کہا جائے گا۔ +یہاں آپ اس صفحے کے لئے پابندیوں کو تبدیل کرسکتے ہیں۔ + +```dart +List onBindingsStart(List bindings) { + final authService = Get.find(); + if (authService.isAdmin) { + bindings.add(AdminBinding()); + } + return bindings; +} +``` + +### آنپیج بلڈ اسٹارٹ + +اس فنکشن کو بائنڈنگ شروع کرنے کے بعد ہی کہا جائے گا۔ +یہاں آپ اس کے بعد اور پیج ویجیٹ بنانے سے پہلے پابندیوں کو تخلیق کرنے کے بعد کچھ کرسکتے ہیں۔ + +```dart +GetPageBuilder onPageBuildStart(GetPageBuilder page) { + print('bindings are ready'); + return page; +} +``` + +### جب پیج لوڈ ہو + +اس فنکشن کو گیٹ پیج ڈاٹ پیج فنکشن کے بلانے کے ٹھیک ہی بعد میں کہا جائے گا اور آپ کو اس فنکشن کا نتیجہ پیش کرے گا۔ اور دکھایا جائے گا کہ ویجیٹ لے لو. + +### جب صفحہ تصرف ہوجائے + +اس فنکشن کو صفحے کے تمام متعلقہ اشیاء (کنٹرولرز ، آراء ، ...) کو ضائع کرنے کے بعد ہی کہا جائے گا۔ + +## دوسرے اعلی درجے کی APIs + +```dart +// give the current args from currentScreen +Get.arguments + +// give name of previous route +Get.previousRoute + +// give the raw route to access for example, rawRoute.isFirst() +Get.rawRoute + +// give access to Routing API from GetObserver +Get.routing + +// check if snackbar is open +Get.isSnackbarOpen + +// check if dialog is open +Get.isDialogOpen + +// check if bottomsheet is open +Get.isBottomSheetOpen + +// remove one route. +Get.removeRoute() + +// back repeatedly until the predicate returns true. +Get.until() + +// go to next route and remove all the previous routes until the predicate returns true. +Get.offUntil() + +// go to next named route and remove all the previous routes until the predicate returns true. +Get.offNamedUntil() + +//Check in what platform the app is running +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +//Check the device type +GetPlatform.isMobile +GetPlatform.isDesktop +//All platforms are supported independently in web! +//You can tell if you are running inside a browser +//on Windows, iOS, OSX, Android, etc. +GetPlatform.isWeb + + +// Equivalent to : MediaQuery.of(context).size.height, +// but immutable. +Get.height +Get.width + +// Gives the current context of the Navigator. +Get.context + +// Gives the context of the snackbar/dialog/bottomsheet in the foreground, anywhere in your code. +Get.contextOverlay + +// Note: the following methods are extensions on context. Since you +// have access to context in any place of your UI, you can use it anywhere in the UI code + +// If you need a changeable height/width (like Desktop or browser windows that can be scaled) you will need to use context. +context.width +context.height + +// Gives you the power to define half the screen, a third of it and so on. +// Useful for responsive applications. +// param dividedBy (double) optional - default: 1 +// param reducedBy (double) optional - default: 0 +context.heightTransformer() +context.widthTransformer() + +/// Similar to MediaQuery.of(context).size +context.mediaQuerySize() + +/// Similar to MediaQuery.of(context).padding +context.mediaQueryPadding() + +/// Similar to MediaQuery.of(context).viewPadding +context.mediaQueryViewPadding() + +/// Similar to MediaQuery.of(context).viewInsets; +context.mediaQueryViewInsets() + +/// Similar to MediaQuery.of(context).orientation; +context.orientation() + +/// Check if device is on landscape mode +context.isLandscape() + +/// Check if device is on portrait mode +context.isPortrait() + +/// Similar to MediaQuery.of(context).devicePixelRatio; +context.devicePixelRatio() + +/// Similar to MediaQuery.of(context).textScaleFactor; +context.textScaleFactor() + +/// Get the shortestSide from screen +context.mediaQueryShortestSide() + +/// True if width be larger than 800 +context.showNavbar() + +/// True if the shortestSide is smaller than 600p +context.isPhone() + +/// True if the shortestSide is largest than 600p +context.isSmallTablet() + +/// True if the shortestSide is largest than 720p +context.isLargeTablet() + +/// True if the current device is Tablet +context.isTablet() + +/// اسکرین کے سائز کے مطابق ایک قیمت لوٹاتا ہے +/// اس کی قیمت دے سکتے ہیں: +/// واچ: اگر مختصر ترین جگہ 300 سے چھوٹی ہے +/// موبائل: اگر مختصر ترین سائٹ 600 سے چھوٹی ہے +/// ٹیبلٹ: اگر مختصر ترین سائٹ 1200 سے چھوٹی ہے +/// ڈیسک ٹاپ: اگر چوڑائی 1200 سے زیادہ ہے +context.responsiveValue() +``` + +### اختیاری عالمی ترتیبات اور دستی تشکیلات + +گیٹ میٹریئل ایپ آپ کے لئے ہر چیز کو کنفیگر کرتی ہے ، لیکن اگر آپ تشکیل کرنا چاہتے ہیں تو دستی طور پر حاصل کریں۔ + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +آپ `گیٹ اوزرور` کے اندر اپنا مڈل ویئر بھی استعمال کرسکیں گے ، اس سے کسی بھی چیز پر اثر نہیں پڑے گا۔ + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +آپ `گیٹ` کیلئے _ عالمی ترتیبات_ تشکیل دے سکتے ہیں۔ کسی بھی راستے کو آگے بڑھانے سے پہلے صرف اپنے کوڈ میں `گیٹ کنفیگ` شامل کریں۔ +یا اسے اپنے `گیٹ میٹیرال ایپ` میں براہ راست کریں + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +آپ لاگ ان پیغامات کو اختیاری طور پر `گیٹ` سے دوبارہ بھیج سکتے ہیں۔ +اگر آپ خود اپنا ، پسندیدہ لاگنگ پیکیج استعمال کرنا چاہتے ہیں تو ، +اور وہاں موجود نوشتہ جات پر قبضہ کرنا چاہتے ہیں: + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // pass the message to your favourite logging package here + // please note that even if enableLog: false log messages will be pushed in this callback + // you get check the flag if you want through GetConfig.isLogEnable +} + +``` + +### مقامی اسٹیٹ ویجٹ + +یہ وجیٹس آپ کو ایک ہی قیمت کا انتظام کرنے ، اور مقامی طور پر ریاست کو دائمی اور مقامی رکھنے کی اجازت دیتے ہیں۔ +ہمارے پاس ری ایکٹیو اور سادہ ذائقے ہیں۔ +مثال کے طور پر ، آپ ان کو ٹیکسٹ فیلڈ میں چھپے ہوئے متن کو ٹوگل کرنے کے لئے استعمال کرسکتے ہیں ، شاید کوئی رواج بنائیں +توسیع پذیر پینل ، یا ہوسکتا ہے کہ موجودہ فہرست میں ترمیم کرکے نیچے کی نیویگیشن بار میں مواد کو تبدیل کرتے ہوئے +`Scaffold` میں جسم کا + +#### ویلیو بلڈر + +`StatefulWidget` کی ایک سادگی جو` .setState` کال بیک کے ساتھ کام کرتی ہے جو تازہ ترین قیمت لیتی ہے۔ + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // same signature! you could use ( newValue ) => updateFn( newValue ) + ), + // if you need to call something outside the builder method. + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### اوبکس ویلیو + +اس طرح آپ کو قیمت ملتی ہے + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx has a _callable_ function! You could use (flag) => data.value = flag, + ), + false.obs, +), +``` + +## کارآمد نکات + +`.obs`ervables ( _Rx_ Types) +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + + `message` --> **RxString** + +[x] `message.substring( 0, 4 )`. +[o] `.value` + +```dart +final name = 'GetX'.obs; +// only "updates" the stream, if the value is different from the current one. +name.value = 'Hey'; + +// All Rx properties are "callable" and returns the new value. +// but this approach does not accepts `null`, the UI will not rebuild. +name('Hello'); + +// is like a getter, prints 'Hello'. +name() ; + +/// numbers: + +final count = 0.obs; + +// You can use all non mutable operations from num primitives! +count + 1; + +// Watch out! this is only valid if `count` is not final, but var +count += 1; + +// You can also compare against values: +count > 2; + +/// booleans: + +final flag = false.obs; + +// switches the value between true/false +flag.toggle(); + + +/// all types: + +// Sets the `value` to null. +flag.nil(); + +// All toString(), toJson() operations are passed down to the `value` +print( count ); // calls `toString()` inside for RxInt + +final abc = [0,1,2].obs; +// Converts the value to a json Array, prints RxList +// Json is supported by all Rx types! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList and RxSet are special Rx types, that extends their native types. +// but you can work with a List as a regular list, although is reactive! +abc.add(12); // pushes 12 to the list, and UPDATES the stream. +abc[3]; // like Lists, reads the index 3. + + +// equality works with the Rx and the value, but hashCode is always taken from the value +final number = 12.obs; +print( number == 12 ); // prints > true + +/// Custom Rx Models: + +// toJson(), toString() are deferred to the child, so you can implement override on them, and print() the observable directly. + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user` is "reactive", but the properties inside ARE NOT! +// So, if we change some variable inside of it... +user.value.name = 'Roi'; +// The widget will not rebuild!, +// `Rx` don't have any clue when you change something inside user. +// So, for custom classes, we need to manually "notify" the change. +user.refresh(); + +// or we can use the `update()` method! +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` + +#### گیٹ ویو + + +مجھے یہ ویجیٹ پسند ہے ، بہت آسان ، پھر بھی ، اتنا مفید ہے! + +ایک کانسٹیٹ اسٹیٹ لیس ویجیٹ ہے جس میں رجسٹرڈ `کنٹرولر` کے لئے حاصل کرنے والا `کنٹرولر` ہے ، بس۔ + +```dart + class AwesomeController extends GetxController { + final String title = 'My Awesome View'; + } + + // ALWAYS remember to pass the `Type` you used to register your controller! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text(controller.title), // just call `controller.something` + ); + } + } +``` + +#### گیٹ ویجٹ + +زیادہ تر لوگوں کو اس ویجیٹ کے بارے میں کوئی اندازہ نہیں ہے ، یا اس کے استعمال کو پوری طرح سے الجھن میں ہے +استعمال کا معاملہ بہت کم ہے ، لیکن بہت ہی خاص ہے: یہ ایک کنٹرولر کی مدد کرتا ہے +کیچ_کی وجہ سے ، `مجاز اسٹیٹ لیس نہیں ہوسکتا ہے + +> تو ، جب آپ کو ایک کنٹرولر "کیش" کرنے کی ضرورت ہے؟ + +اگر آپ استعمال کرتے ہیں تو ، ** گیٹ ایکس ** کی ایک اور "اتنی عام نہیں" خصوصیت: `گیٹ.کریٹ`۔ + +`Get.create(()=>Controller())` ایک نیا پیدا کرے گا `Controller` ہر بار جب آپ کال کریں گے +`Get.find()`, + +اسی جگہ پر `گیٹ ویجٹ` چمکتا ہے ... جیسے کہ آپ اسے استعمال کرسکتے ہیں ، مثال کے طور پر ، +ٹوڈو اشیاء کی ایک فہرست رکھنے کے ل. لہذا ، اگر آپکے پاس وجٹس کو "دوبارہ تعمیر" ہو جاتا ہے تو ، یہ وہی کنٹرولر مثال برقرار رکھے گا۔ + +#### گیٹکس سروس + +This class is like a `GetxController`, it shares the same lifecycle ( `onInit()`, `onReady()`, `onClose()`). +But has no "logic" inside of it. It just notifies **GetX** Dependency Injection system, that this subclass +**can not** be removed from memory. + +So is super useful to keep your "Services" always reachable and active with `Get.find()`. Like: +`ApiService`, `StorageService`, `CacheService`. + +```dart +Future main() async { + await initServices(); /// AWAIT SERVICES INITIALIZATION. + runApp(SomeApp()); +} + +/// Is a smart move to make your Services intiialize before you run the Flutter app. +/// as you can control the execution flow (maybe you need to load some Theme configuration, +/// apiKey, language defined by the User... so load SettingService before running ApiService. +/// so GetMaterialApp() doesnt have to rebuild, and takes the values directly. +void initServices() async { + print('starting services ...'); + /// Here is where you put get_storage, hive, shared_pref initialization. + /// or moor connection, or whatever that's async. + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +`گیٹکسسروس` کو اصل میں حذف کرنے کا واحد راستہ ،`گیٹ.ریسیٹ` ہے جو ایک جیسے ہے +آپ کی ایپ کا "گرم ریبوٹ"۔ لہذا ، یاد رکھیں ، اگر آپ کو دوران کلاس مثال کے طور پر مطلق استقامت کی ضرورت ہو +اپنی ایپ کی زندگی بھر ، `گیٹکسسروس` استعمال کریں۔ + +# پچھلے ورژن سے اہم تبدیلیاں + +1. آر ایکس اقسام: + +| Before | After | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +آر ایکس کنٹرولر اور گیٹ بلڈر اب آپس میں مل گئے ہیں ، اب آپ کو یہ حفظ کرنے کی ضرورت نہیں ہے کہ آپ کون سے کنٹرولر استعمال کرنا چاہتے ہیں ، صرف گیٹکسکنٹرولر کا استعمال کریں ، یہ سادہ سسٹم مینجمنٹ اور رد عمل کے بھی کام کرے گا۔ + +2. نامزد روٹس +پہلے: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +اب: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +یہ تبدیلی کیوں؟ +اکثر ، یہ فیصلہ کرنا ضروری ہوسکتا ہے کہ پیرامیٹر ، یا لاگ ان ٹوکن سے کون سا صفحہ ڈسپلے ہوگا ، پچھلا نقطہ نظر پیچیدہ تھا ، کیونکہ اس نے اس کی اجازت نہیں دی۔ +صفحہ کو کسی فنکشن میں داخل کرنے سے رام کی کھپت میں نمایاں کمی واقع ہوئی ہے ، کیونکہ ایپ شروع ہونے کے بعد سے روٹوں کو میموری میں مختص نہیں کیا جائے گا ، اور اس طرح اس طرح کے نقطہ نظر کو کرنے کی بھی اجازت دی گئی ہے۔ + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# گیٹکس کیوں؟ + +1. فلٹر کی تازہ کاری کے بعد ، آپ کے بہت سے پیکیجز ٹوٹ جائیں گے۔ بعض اوقات تالیف کی غلطیاں ہوتی ہیں ، غلطیاں اکثر ظاہر ہوتی ہیں کہ اب بھی اس کے بارے میں کوئی جواب نہیں ملتا ہے ، اور ڈویلپر کو یہ جاننے کی ضرورت ہوتی ہے کہ غلطی کہاں سے ہوئی ہے ، غلطی کو ٹریک کریں ، تب ہی متعلقہ ذخیرہ میں کوئی مسئلہ کھولنے کی کوشش کریں ، اور دیکھیں کہ اس کا مسئلہ حل ہوتا ہے۔ ترقی کے مرکزی وسائل کو مرکز بنائیں (ریاست ، انحصار اور روٹ مینجمنٹ) ، آپ کو اپنے پبسپیک میں ایک پیکیج شامل کرنے اور کام شروع کرنے کی اجازت دے۔ پھڑپھڑانے کی تازہ کاری کے بعد ، آپ کو صرف انحصار کرنے کی ضرورت ہے گیٹ انحصار کو اپ ڈیٹ کریں ، اور کام کریں۔ مطابقت کے مسائل کو بھی حل کریں حاصل کریں۔ ایک پیکج کا ورژن کتنی بار دوسرے کے ورژن کے ساتھ مطابقت نہیں رکھتا ہے ، کیونکہ ایک ورژن میں انحصار استعمال کرتا ہے ، اور دوسرا دوسرے ورژن میں۔ گیٹ کو استعمال کرنے میں بھی یہ کوئی تشویش نہیں ہے ، کیونکہ سب کچھ ایک ہی پیکج میں ہے اور مکمل طور پر ہم آہنگ ہے۔ + +2. فلٹر آسان ہے .فلٹر ناقابل یقین ہے ، لیکن .فلٹر کے پاس اب بھی کچھ بوائلرپلیٹ موجود ہے جو زیادہ تر ڈویلپرز کے لئے ناپسندیدہ ہوسکتا ہے ، جیسے `Navigator.of(context).push (context, builder [...]`. پروگرامنگ کو آسان بنائیں۔ صرف راستے پر کال کرنے کے لئے 8 لائنوں کے کوڈ لکھنے کے بجائے ، آپ صرف یہ کرسکتے ہیں: `Get.to(Home())` اور آپ کر چکے ہیں ، آپ اگلے صفحے پر جائیں گے۔ متحرک ویب یو آر ایل ایک بہت تکلیف دہ چیز ہے جس کے ساتھ کرنا ہے ۔فلٹر فی الحال ، اور یہ کہ گیٹیکس کے ساتھ احمقانہ حد تک آسان ہے۔ .. فلٹر میں ریاستوں کا انتظام کرنا ، اور انحصار کا انتظام کرنا بھی ایک ایسی چیز ہے جو بہت ساری بحثیں پیدا کرتی ہے ، کیوں کہ پب میں سیکڑوں نمونوں کی موجودگی موجود ہے۔ لیکن آپ کے متغیر کے اختتام پر `.obs` شامل کرنے جتنا آسان کوئی چیز نہیں ہے ، اور اپنے ویجیٹ کو کسی اوکس کے اندر رکھ دیں ، اور بات یہ ہے کہ اس متغیر کی تمام تر تازہ کاری خود بخود اسکرین پر اپ ڈیٹ ہوجائے گی۔ + +3. کارکردگی کی فکر کئے بغیر آسانی۔ .فلٹر کی کارکردگی پہلے ہی حیرت انگیز ہے ، لیکن تصور کریں کہ آپ اپنے بلاکس / اسٹورز / کنٹرولرز / وغیرہ کلاسوں کو تقسیم کرنے کے لئے اسٹیٹ مینیجر اور لوکیٹر کا استعمال کرتے ہیں۔ جب آپ کو ضرورت نہ ہو تو آپ کو دستی طور پر اس انحصار کے اخراج کو کال کرنا پڑے گا۔ لیکن کیا آپ نے کبھی اپنے کنٹرولر کو محض استعمال کرنے کے بارے میں سوچا ہے ، اور جب اب یہ کسی کے ذریعہ استعمال نہیں ہو رہا تھا تو ، اسے آسانی سے میموری سے حذف کردیا جائے گا؟ گیٹ ایکس یہی کرتا ہے۔ اسمارٹ مینجمنٹ کے ساتھ ، ہر وہ چیز جو استعمال نہیں ہورہی ہے اسے میموری سے حذف کردیا جاتا ہے ، اور آپ کو پروگرامنگ کے علاوہ کسی بھی چیز کی فکر کرنے کی ضرورت نہیں ہے۔ آپ کو یقین دلایا جائے گا کہ آپ کم از کم ضروری وسائل بروئے کار لا رہے ہیں ، حتی کہ اس کے لئے بھی کوئی منطق پیدا نہیں کیا۔ + +4. اصل ڈیکوپلنگ۔ آپ نے یہ نظریہ "کاروبار کی منطق سے نظریہ کو الگ کریں" سنا ہوگا۔ یہ ریاستی انتظام کے دیگر حلوں کی کوئی خاصیت نہیں ہے اور مارکیٹ میں کسی دوسرے معیار کا یہ تصور ہے۔ تاہم ، سیاق و سباق کے استعمال کی وجہ سے پھڑپھڑ میں اکثر اس تصور کو کم کیا جاسکتا ہے۔ +اگر آپ کو وراثت والے ویجیٹ کو تلاش کرنے کے لئے سیاق و سباق کی ضرورت ہوتی ہے تو ، آپ کو اس کی نظر میں ضرورت ہوگی ، یا پیرامیٹر کے ذریعہ سیاق و سباق کو منتقل کریں۔ مجھے خاص طور پر یہ حل بہت ہی بدصورت معلوم ہوتا ہے ، اور ٹیموں میں کام کرنے کے لئے ہمیں ہمیشہ ویو کی کاروباری منطق پر انحصار کرنا پڑے گا۔ گیٹکس معیاری نقطہ نظر کے ساتھ غیر روایتی ہے ، اور اگرچہ اس میں اسٹیٹ فل وِیجٹس ، انیسٹیٹ وغیرہ کے استعمال پر مکمل پابندی نہیں ہے تو ، اس کا ہمیشہ ایسا ہی نقطہ نظر ہوتا ہے جو صاف ستھرا ہوسکتا ہے۔ کنٹرولرز کے پاس زندگی کا دور رہتا ہے ، اور جب آپ کو مثال کے طور پر درخواست دینے کی ضرورت ہوتی ہے تو ، آپ کو نظر میں کسی چیز پر انحصار نہیں کرنا ہوتا ہے۔ آپ ایچ ٹی ٹی پی کال شروع کرنے کے لئے اونٹ کا استعمال کرسکتے ہیں ، اور جب ڈیٹا آجائے گا تو متغیرات آباد ہوجائیں گے۔ چونکہ گیٹ ایکس مکمل طور پر رد عمل مند ہے (واقعتا، ، اور نہروں کے تحت کام کرتا ہے) ، ایک بار جب سامان بھر جاتا ہے تو ، اس متغیر کو استعمال کرنے والے تمام ویجٹ خود بخود منظر میں اپ ڈیٹ ہوجائیں گے۔ اس سے UI کی مہارت رکھنے والے افراد کو صرف وگیٹس کے ساتھ کام کرنے کا موقع ملتا ہے ، اور صارف کے واقعات (جیسے بٹن پر کلک کرنے کے علاوہ) کے علاوہ کاروباری منطق پر کچھ بھی نہیں بھیجنا پڑتا ہے ، جبکہ کاروباری منطق کے ساتھ کام کرنے والے افراد الگ الگ کاروبار کی منطق کی تخلیق اور جانچ کر سکتے ہیں۔ + +اس لائبریری کو ہمیشہ اپ ڈیٹ کیا جائے گا اور نئی خصوصیات کو نافذ کیا جائے گا۔ بلا جھجک پی آر پیش کریں اور ان میں اپنا حصہ ڈالیں۔ + +# سماجی خدمات + +## کمیونٹی چینلز + +گیٹ ایکس میں انتہائی فعال اور مددگار کمیونٹی ہے۔ اگر آپ کے ذہن میں سوالات ہیں ، یا اس فریم ورک کے استعمال کے سلسلے میں کوئی مدد چاہتے ہیں تو ، براہ کرم ہمارے کمیونٹی چینلز میں شامل ہوں ، آپ کے سوال کا زیادہ جلد جواب دیا جائے گا ، اور یہ سب سے موزوں جگہ ہوگی۔ یہ ذخیر. مسائل کو کھولنے ، اور وسائل کی درخواست کرنے کے لئے خصوصی ہے ، لیکن گیٹ ایکس کمیونٹی کا حصہ بننے میں آزاد محسوس کرتے ہیں۔ + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## کس طرح شراکت کریں + + +منصوبے میں شراکت کرنا چاہتے ہیں؟ ہمیں اپنے ایک ساتھی کی حیثیت سے آپ کو اجاگر کرنے پر فخر ہوگا۔ یہاں کچھ نکات ہیں جہاں آپ اپنا حصہ ڈال سکتے ہیں اور گیٹ (اور پھڑپھڑنا) کو اور بہتر بنا سکتے ہیں۔ + +- ریڈمی کو دوسری زبانوں میں ترجمہ کرنے میں مدد کرنا۔ +- دستاویزات کو ریڈ می میں شامل کرنا (گیٹ کے بہت سارے کام ابھی دستاویزی نہیں ہوئے ہیں)۔ +- مضامین لکھیں یا ویڈیوز بنائیں جس کی تعلیم دیتے ہیں کہ گیٹ (ان کو ریڈیم میں اور مستقبل میں ہمارے ویکی میں داخل کیا جائے گا) کو کس طرح استعمال کیا جائے۔ +- کوڈ / ٹیسٹ کے لئے پی آر پیش کرنا۔ +- نئے افعال سمیت. + +کسی بھی شراکت کا خیرمقدم ہے! + +## مضامین اور ویڈیوز + +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - Utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [The Flutter GetX™ Ecosystem ~ Dependency Injection](https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9) - Dependency Injection by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. + + diff --git a/packages/get/README.zh-cn.md b/packages/get/README.zh-cn.md new file mode 100644 index 0000000..9814a8d --- /dev/null +++ b/packages/get/README.zh-cn.md @@ -0,0 +1,919 @@ +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/get.png) + +_语言: 中文, [英文](README.md), [越南文](README-vi.md), [印度尼西亚](README.id-ID.md), [乌尔都语](README.ur-PK.md), [巴西葡萄牙语](README.pt-br.md), [俄语](README.ru.md), [西班牙语](README-es.md), [波兰语](README.pl.md), [韩国语](README.ko-kr.md), [法语](README-fr.md), [French](README-fr.md)._ + +[![pub package](https://img.shields.io/pub/v/get.svg?label=get&color=blue)](https://pub.dev/packages/get) +[![popularity](https://badges.bar/get/popularity)](https://pub.dev/packages/sentry/score) +[![likes](https://badges.bar/get/likes)](https://pub.dev/packages/get/score) +[![pub points](https://badges.bar/get/pub%20points)](https://pub.dev/packages/get/score) +![building](https://github.com/jonataslaw/get/workflows/build/badge.svg) +[![style: effective dart](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://pub.dev/packages/effective_dart) +[![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) +[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) +[![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) + +Awesome Flutter + +Buy Me A Coffee + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/getx.png) + +- [关于Get](#关于get) +- [安装](#安装) +- [GetX的计数器示例](#getx的计数器示例) +- [三大功能](#三大功能) + - [状态管理](#状态管理) + - [响应式状态管理器](#响应式状态管理器) + - [关于状态管理的更多细节](#关于状态管理的更多细节) + - [路由管理](#路由管理) + - [关于路由管理的更多细节](#关于路由管理的更多细节) + - [依赖管理](#依赖管理) + - [关于依赖管理的更多细节](#关于依赖管理的更多细节) +- [实用工具](#实用工具) + - [国际化](#国际化) + - [翻译](#翻译) + - [使用翻译](#使用翻译) + - [语言](#语言) + - [改变语言](#改变语言) + - [系统语言](#系统语言) + - [改变主题](#改变主题) + - [其他高级API](#其他高级api) + - [可选的全局设置和手动配置](#可选的全局设置和手动配置) + - [局部状态组件](#局部状态组件) + - [ValueBuilder](#valuebuilder) + - [ObxValue](#obxvalue) + - [有用的提示](#有用的提示) + - [GetView](#getview) + - [GetWidget](#getwidget) + - [GetxService](#getxservice) +- [从2.0开始的兼容性变化](#从20开始的兼容性变化) +- [为什么选择Getx?](#为什么选择getx) +- [社区](#社区) + - [社区渠道](#社区渠道) + - [如何做贡献](#如何做贡献) + - [文章和视频](#文章和视频) + +# 关于Get + +- GetX 是 Flutter 上的一个轻量且强大的解决方案:高性能的状态管理、智能的依赖注入和便捷的路由管理。 + +- GetX 有3个基本原则: + + - **性能:** GetX 专注于性能和最小资源消耗。GetX 打包后的apk占用大小和运行时的内存占用与其他状态管理插件不相上下。如果你感兴趣,这里有一个[性能测试](https://github.com/jonataslaw/benchmarks)。 + - **效率:** GetX 的语法非常简捷,并保持了极高的性能,能极大缩短你的开发时长。 + - **结构:** GetX 可以将界面、逻辑、依赖和路由完全解耦,用起来更清爽,逻辑更清晰,代码更容易维护。 + +- GetX 并不臃肿,却很轻量。如果你只使用状态管理,只有状态管理模块会被编译,其他没用到的东西都不会被编译到你的代码中。它拥有众多的功能,但这些功能都在独立的容器中,只有在使用后才会启动。 + +- Getx有一个庞大的生态系统,能够在Android、iOS、Web、Mac、Linux、Windows和你的服务器上用同样的代码运行。 +**通过[Get Server](https://github.com/jonataslaw/get_server)** 可以在你的后端完全重用你在前端写的代码。 + +**此外,通过[Get CLI](https://github.com/jonataslaw/get_cli)**,无论是在服务器上还是在前端,整个开发过程都可以完全自动化。 + +**此外,为了进一步提高您的生产效率,我们还为您准备了一些插件** + +- **getx_template**:一键生成每个页面必需的文件夹、文件、模板代码等等 + - [Android Studio/Intellij插件](https://plugins.jetbrains.com/plugin/15919-getx) +- **GetX Snippets**:输入少量字母,自动提示选择后,可生成常用的模板代码 + - [Android Studio/Intellij扩展](https://plugins.jetbrains.com/plugin/14975-getx-snippets) + - [VSCode扩展](https://marketplace.visualstudio.com/items?itemName=get-snippets.get-snippets) + +# 安装 + +将 Get 添加到你的 pubspec.yaml 文件中。 + +```yaml +dependencies: + get: +``` + +在需要用到的文件中导入,它将被使用。 + +```dart +import 'package:get/get.dart'; +``` + +# GetX的计数器示例 + +Flutter默认创建的 "计数器 "项目有100多行(含注释),为了展示Get的强大功能,我将使用 GetX 重写一个"计数器 Plus版",实现: +- 每次点击都能改变状态 +- 在不同页面之间切换 +- 在不同页面之间共享状态 +- 将业务逻辑与界面分离 + +而完成这一切只需 **26 行代码(含注释)** + +- 步骤1. +在你的MaterialApp前添加 "Get",将其变成GetMaterialApp。 + +```dart +void main() => runApp(GetMaterialApp(home: Home())); +``` + +- 注意:这并不能修改Flutter的MaterialApp,GetMaterialApp并不是修改后的MaterialApp,它只是一个预先配置的Widget,它的子组件是默认的MaterialApp。你可以手动配置,但绝对没有必要。GetMaterialApp会创建路由,注入它们,注入翻译,注入你需要的一切路由导航。如果你只用Get来进行状态管理或依赖管理,就没有必要使用GetMaterialApp。GetMaterialApp对于路由、snackbar、国际化、bottomSheet、对话框以及与路由相关的高级apis和没有上下文(context)的情况下是必要的。 +- 注2: 只有当你要使用路由管理(`Get.to()`, `Get.back()`等)时才需要这一步。如果你不打算使用它,那么就不需要做第1步。 + +- 第二步: + 创建你的业务逻辑类,并将所有的变量,方法和控制器放在里面。 + 你可以使用一个简单的".obs "使任何变量成为可观察的。 + +```dart +class Controller extends GetxController{ + var count = 0.obs; + increment() => count++; +} +``` + +- 第三步: + 创建你的界面,使用StatelessWidget节省一些内存,使用Get你可能不再需要使用StatefulWidget。 + +```dart +class Home extends StatelessWidget { + + @override + Widget build(context) { + + // 使用Get.put()实例化你的类,使其对当下的所有子路由可用。 + final Controller c = Get.put(Controller()); + + return Scaffold( + // 使用Obx(()=>每当改变计数时,就更新Text()。 + appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))), + + // 用一个简单的Get.to()即可代替Navigator.push那8行,无需上下文! + body: Center(child: ElevatedButton( + child: Text("Go to Other"), onPressed: () => Get.to(Other()))), + floatingActionButton: + FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); + } +} + +class Other extends StatelessWidget { + // 你可以让Get找到一个正在被其他页面使用的Controller,并将它返回给你。 + final Controller c = Get.find(); + + @override + Widget build(context){ + // 访问更新后的计数变量 + return Scaffold(body: Center(child: Text("${c.count}"))); + } +} +``` + +结果: + +![](https://raw.githubusercontent.com/jonataslaw/getx-community/master/counter-app-gif.gif) + +这是一个简单的项目,但它已经让人明白Get的强大。随着项目的发展,这种差异将变得更加显著。 + +Get的设计是为了与团队合作,但它也可以让个人开发者的工作变得更简单。 + +加快开发速率,在不损失性能的情况下按时交付一切。Get并不适合每一个人,但如果你认同这句话,Get就是为你准备的! + +# 三大功能 + +## 状态管理 + +目前,Flutter有几种状态管理器。但是,它们中的大多数都涉及到使用ChangeNotifier来更新widget,这对于中大型应用的性能来说是一个很糟糕的方法。你可以在Flutter的官方文档中查看到,[ChangeNotifier应该使用1个或最多2个监听器](https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html),这使得它们实际上无法用于任何中等或大型应用。 + +Get 并不是比任何其他状态管理器更好或更差,而是说你应该分析这些要点以及下面的要点来选择只用Get,还是与其他状态管理器结合使用。 + +Get不是其他状态管理器的敌人,因为Get是一个微框架,而不仅仅是一个状态管理器,既可以单独使用,也可以与其他状态管理器结合使用。 + +Get有两个不同的状态管理器:简单的状态管理器(GetBuilder)和响应式状态管理器(GetX)。 + +### 响应式状态管理器 + +响应式编程可能会让很多人感到陌生,因为觉得它很复杂,但是GetX将响应式编程变得非常简单。 + +- 你不需要创建StreamControllers. +- 你不需要为每个变量创建一个StreamBuilder。 +- 你不需要为每个状态创建一个类。 +- 你不需要为一个初始值创建一个get。 + +使用 Get 的响应式编程就像使用 setState 一样简单。 + +让我们想象一下,你有一个名称变量,并且希望每次你改变它时,所有使用它的小组件都会自动刷新。 + +这就是你的计数变量。 + +```dart +var name = 'Jonatas Borges'; +``` + +要想让它变得可观察,你只需要在它的末尾加上".obs"。 + +```dart +var name = 'Jonatas Borges'.obs; +``` + +而在UI中,当你想显示该值并在值变化时更新页面,只需这样做。 + +```dart +Obx(() => Text("${controller.name}")); +``` + +这就是全部,就这么简单。 + +### 关于状态管理的更多细节 + +**关于状态管理更深入的解释请查看[这里](./documentation/zh_CN/state_management.md)。在那里你将看到更多的例子,以及简单的状态管理器和响应式状态管理器之间的区别**。 + +你会对GetX的能力有一个很好的了解。 + +## 路由管理 + +如果你想免上下文(context)使用路由/snackbars/dialogs/bottomsheets,GetX对你来说也是极好的,来吧展示: + +在你的MaterialApp前加上 "Get",把它变成GetMaterialApp。 + +```dart +GetMaterialApp( // Before: MaterialApp( + home: MyHome(), +) +``` + +导航到新页面 + +```dart + +Get.to(NextScreen()); +``` + +用别名导航到新页面。查看更多关于命名路由的详细信息[这里](./documentation/zh_CN/route_management.md#navigation-with-named-routes) + +```dart + +Get.toNamed('/details'); +``` + +要关闭snackbars, dialogs, bottomsheets或任何你通常会用Navigator.pop(context)关闭的东西。 + +```dart +Get.back(); +``` + +进入下一个页面,但没有返回上一个页面的选项(用于闪屏页,登录页面等)。 + +```dart +Get.off(NextScreen()); +``` + +进入下一个页面并取消之前的所有路由(在购物车、投票和测试中很有用)。 + +```dart +Get.offAll(NextScreen()); +``` + +注意到你不需要使用context来做这些事情吗?这就是使用Get路由管理的最大优势之一。有了它,你可以在你的控制器类中执行所有这些方法,而不用担心context在哪里。 + +### 关于路由管理的更多细节 + +**关于别名路由,和对路由的低级控制,请看[这里](./documentation/zh_CN/route_management.md)**。 + +## 依赖管理 + +Get有一个简单而强大的依赖管理器,它允许你只用1行代码就能检索到与你的Bloc或Controller相同的类,无需Provider context,无需inheritedWidget。 + +```dart +Controller controller = Get.put(Controller()); // 而不是 Controller controller = Controller(); +``` + +- 注意:如果你使用的是Get的状态管理器,请多注意绑定api,这将使你的界面更容易连接到你的控制器。 + +你是在Get实例中实例化它,而不是在你使用的类中实例化你的类,这将使它在整个App中可用。 +所以你可以正常使用你的控制器(或类Bloc)。 + +**提示:** Get依赖管理与包的其他部分是解耦的,所以如果你的应用已经使用了一个状态管理器(任何一个,都没关系),你不需要全部重写,你可以使用这个依赖注入。 + +```dart +controller.fetchApi(); +``` + +想象一下,你已经浏览了无数条路由,现在你需要拿到一个被遗留在控制器中的数据,那你需要一个状态管理器与Provider或Get_it一起使用来拿到它,对吗?用Get则不然,Get会自动为你的控制器找到你想要的数据,而你甚至不需要任何额外的依赖关系。 + +```dart +Controller controller = Get.find(); +//是的,它看起来像魔术,Get会找到你的控制器,并将其提供给你。你可以实例化100万个控制器,Get总会给你正确的控制器。 +``` + +然后你就可以恢复你在后面获得的控制器数据。 + +```dart +Text(controller.textFromApi); +``` + +### 关于依赖管理的更多细节 + +**关于依赖管理的更深入解释请看[此处](./documentation/zh_CN/dependency_management.md)**。 + +# 实用工具 + +## 国际化 + +### 翻译 + +翻译被保存为一个简单的键值字典映射。 +要添加自定义翻译,请创建一个类并扩展`翻译`。 + +```dart +import 'package:get/get.dart'; + +class Messages extends Translations { + @override + Map> get keys => { + 'zh_CN': { + 'hello': '你好 世界', + }, + 'de_DE': { + 'hello': 'Hallo Welt', + } + }; +} +``` + +#### 使用翻译 + +只要将`.tr`追加到指定的键上,就会使用`Get.locale`和`Get.fallbackLocale`的当前值进行翻译。 + +```dart +Text('title'.tr); +``` + +### 语言 + +传递参数给`GetMaterialApp`来定义语言和翻译。 + +```dart +return GetMaterialApp( + translations: Messages(), // 你的翻译 + locale: Locale('zh', 'CN'), // 将会按照此处指定的语言翻译 + fallbackLocale: Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在 +); +``` + +#### 改变语言 + +调用`Get.updateLocale(locale)`来更新语言环境。然后翻译会自动使用新的locale。 + +```dart +var locale = Locale('en', 'US'); +Get.updateLocale(locale); +``` + +#### 系统语言 + +要读取系统语言,可以使用`window.locale`。 + +```dart +import 'dart:ui' as ui; + +return GetMaterialApp( + locale: ui.window.locale, +); +``` + +## 改变主题 + +请不要使用比`GetMaterialApp`更高级别的widget来更新主题,这可能会造成键重复。很多人习惯于创建一个 "ThemeProvider "的widget来改变应用主题,这在**GetX™**中是绝对没有必要的。 + +你可以创建你的自定义主题,并简单地将其添加到`Get.changeTheme`中,而无需任何模板。 + +```dart +Get.changeTheme(ThemeData.light()); +``` + +如果你想在 "onTap "中创建类似于改变主题的按钮,你可以结合两个**GetX™** API来实现。 + +- 检查是否使用了深色的 "Theme "的API,以及 "Theme "更改API。 +- 而`Theme` Change API,你可以把下面的代码放在`onPressed`里。 + +```dart +Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark()); +``` + +当`.darkmode`被激活时,它将切换到light主题,当light主题被激活时,它将切换到dark主题。 + +## 其他高级API + +```dart +// 给出当前页面的args。 +Get.arguments + +//给出以前的路由名称 +Get.previousRoute + +// 给出要访问的原始路由,例如,rawRoute.isFirst() +Get.rawRoute + +// 允许从GetObserver访问Rounting API。 +Get.routing + +// 检查 snackbar 是否打开 +Get.isSnackbarOpen + +// 检查 dialog 是否打开 +Get.isDialogOpen + +// 检查 bottomsheet 是否打开 +Get.isBottomSheetOpen + +// 删除一个路由。 +Get.removeRoute() + +//反复返回,直到表达式返回真。 +Get.until() + +// 转到下一条路由,并删除所有之前的路由,直到表达式返回true。 +Get.offUntil() + +// 转到下一个命名的路由,并删除所有之前的路由,直到表达式返回true。 +Get.offNamedUntil() + +//检查应用程序在哪个平台上运行。 +GetPlatform.isAndroid +GetPlatform.isIOS +GetPlatform.isMacOS +GetPlatform.isWindows +GetPlatform.isLinux +GetPlatform.isFuchsia + +//检查设备类型 +GetPlatform.isMobile +GetPlatform.isDesktop +//所有平台都是独立支持web的! +//你可以知道你是否在浏览器内运行。 +//在Windows、iOS、OSX、Android等系统上。 +GetPlatform.isWeb + + +// 相当于.MediaQuery.of(context).size.height, +//但不可改变。 +Get.height +Get.width + +// 提供当前上下文。 +Get.context + +// 在你的代码中的任何地方,在前台提供 snackbar/dialog/bottomsheet 的上下文。 +Get.contextOverlay + +// 注意:以下方法是对上下文的扩展。 +// 因为在你的UI的任何地方都可以访问上下文,你可以在UI代码的任何地方使用它。 + +// 如果你需要一个可改变的高度/宽度(如桌面或浏览器窗口可以缩放),你将需要使用上下文。 +context.width +context.height + +// 让您可以定义一半的页面、三分之一的页面等。 +// 对响应式应用很有用。 +// 参数: dividedBy (double) 可选 - 默认值:1 +// 参数: reducedBy (double) 可选 - 默认值:0。 +context.heightTransformer() +context.widthTransformer() + +/// 类似于 MediaQuery.of(context).size。 +context.mediaQuerySize() + +/// 类似于 MediaQuery.of(context).padding。 +context.mediaQueryPadding() + +/// 类似于 MediaQuery.of(context).viewPadding。 +context.mediaQueryViewPadding() + +/// 类似于 MediaQuery.of(context).viewInsets。 +context.mediaQueryViewInsets() + +/// 类似于 MediaQuery.of(context).orientation; +context.orientation() + +///检查设备是否处于横向模式 +context.isLandscape() + +///检查设备是否处于纵向模式。 +context.isPortrait() + +///类似于MediaQuery.of(context).devicePixelRatio。 +context.devicePixelRatio() + +///类似于MediaQuery.of(context).textScaleFactor。 +context.textScaleFactor() + +///查询设备最短边。 +context.mediaQueryShortestSide() + +///如果宽度大于800,则为真。 +context.showNavbar() + +///如果最短边小于600p,则为真。 +context.isPhone() + +///如果最短边大于600p,则为真。 +context.isSmallTablet() + +///如果最短边大于720p,则为真。 +context.isLargeTablet() + +///如果当前设备是平板电脑,则为真 +context.isTablet() + +///根据页面大小返回一个值。 +///可以给值为: +///watch:如果最短边小于300 +///mobile:如果最短边小于600 +///tablet:如果最短边(shortestSide)小于1200 +///desktop:如果宽度大于1200 +context.responsiveValue() +``` + +### 可选的全局设置和手动配置 + +GetMaterialApp为你配置了一切,但如果你想手动配置Get。 + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [GetObserver()], +); +``` + +你也可以在`GetObserver`中使用自己的中间件,这不会影响任何事情。 + +```dart +MaterialApp( + navigatorKey: Get.key, + navigatorObservers: [ + GetObserver(MiddleWare.observer) // Here + ], +); +``` + +你可以为 "Get "创建_全局设置。只需在推送任何路由之前将`Get.config`添加到你的代码中。 +或者直接在你的`GetMaterialApp`中做。 + +```dart +GetMaterialApp( + enableLog: true, + defaultTransition: Transition.fade, + opaqueRoute: Get.isOpaqueRouteDefault, + popGesture: Get.isPopGestureEnable, + transitionDuration: Get.defaultDurationTransition, + defaultGlobalState: Get.defaultGlobalState, +); + +Get.config( + enableLog = true, + defaultPopGesture = true, + defaultTransition = Transitions.cupertino +) +``` + +你可以选择重定向所有来自`Get`的日志信息。 +如果你想使用你自己喜欢的日志包,并想查看那里的日志。 + +```dart +GetMaterialApp( + enableLog: true, + logWriterCallback: localLogWriter, +); + +void localLogWriter(String text, {bool isError = false}) { + // 在这里把信息传递给你最喜欢的日志包。 + // 请注意,即使enableLog: false,日志信息也会在这个回调中被推送。 + // 如果你想的话,可以通过GetConfig.isLogEnable来检查这个标志。 +} + +``` + +### 局部状态组件 + +这些Widgets允许您管理一个单一的值,并保持状态的短暂性和本地性。 +我们有Reactive和Simple两种风格。 +例如,你可以用它们来切换`TextField`中的obscureText,也许可以创建一个自定义的可扩展面板(Expandable Panel),或者在"Scaffold "的主体中改变内容的同时修改`BottomNavigationBar`中的当前索引。 + + +#### ValueBuilder + +`StatefulWidget`的简化,它与`.setState`回调一起工作,并接受更新的值。 + +```dart +ValueBuilder( + initialValue: false, + builder: (value, updateFn) => Switch( + value: value, + onChanged: updateFn, // 你可以用( newValue )=> updateFn( newValue )。 + ), + // 如果你需要调用 builder 方法之外的东西。 + onUpdate: (value) => print("Value updated: $value"), + onDispose: () => print("Widget unmounted"), +), +``` + +#### ObxValue + +类似于[`ValueBuilder`](#valuebuilder),但这是Reactive版本,你需要传递一个Rx实例(还记得神奇的.obs吗?自动更新......是不是很厉害?) + +```dart +ObxValue((data) => Switch( + value: data.value, + onChanged: data, // Rx 有一个 _callable_函数! 你可以使用 (flag) => data.value = flag, + ), + false.obs, +), +``` + +## 有用的提示 + +`.obs`ervables (也称为_Rx_ Types)有各种各样的内部方法和操作符。 + +> `.obs`的属性**是**实际值,不要搞错了! +> 我们避免了变量的类型声明,因为Dart的编译器足够聪明,而且代码 +> 看起来更干净,但: + +```dart +var message = 'Hello world'.obs; +print( 'Message "$message" has Type ${message.runtimeType}'); +``` + +即使`message` _prints_实际的字符串值,类型也是**RxString**! +所以,你不能做`message.substring( 0, 4 )`。 +你必须在_observable_里面访问真正的`value`。 +最常用的方法是".value", 但是你也可以用... + +```dart +final name = 'GetX'.obs; +//只有在值与当前值不同的情况下,才会 "更新 "流。 +name.value = 'Hey'; + +// 所有Rx属性都是 "可调用 "的,并返回新的值。 +//但这种方法不接受 "null",UI将不会重建。 +name('Hello'); + +// 就像一个getter,打印'Hello'。 +name() ; + +///数字。 + +final count = 0.obs; + +// 您可以使用num基元的所有不可变操作! +count + 1; + +// 注意!只有当 "count "不是final时,这才有效,除了var +count += 1; + +// 你也可以与数值进行比较。 +count > 2; + +/// booleans: + +final flag = false.obs; + +// 在真/假之间切换数值 +flag.toggle(); + + +/// 所有类型。 + +// 将 "value "设为空。 +flag.nil(); + +// 所有的toString()、toJson()操作都会向下传递到`value`。 +print( count ); // 在内部调用 "toString() "来GetRxInt + +final abc = [0,1,2].obs; +// 将值转换为json数组,打印RxList。 +// 所有Rx类型都支持Json! +print('json: ${jsonEncode(abc)}, type: ${abc.runtimeType}'); + +// RxMap, RxList 和 RxSet 是特殊的 Rx 类型,扩展了它们的原生类型。 +// 但你可以像使用普通列表一样使用列表,尽管它是响应式的。 +abc.add(12); // 将12添加到列表中,并更新流。 +abc[3]; // 和Lists一样,读取索引3。 + + +// Rx和值是平等的,但hashCode总是从值中提取。 +final number = 12.obs; +print( number == 12 ); // prints > true + +///自定义Rx模型。 + +// toJson(), toString()都是递延给子代的,所以你可以在它们上实现覆盖,并直接打印()可观察的内容。 + +class User { + String name, last; + int age; + User({this.name, this.last, this.age}); + + @override + String toString() => '$name $last, $age years old'; +} + +final user = User(name: 'John', last: 'Doe', age: 33).obs; + +// `user`是 "响应式 "的,但里面的属性却不是! +// 所以,如果我们改变其中的一些变量: +user.value.name = 'Roi'; +// 小部件不会重建! +// 对于自定义类,我们需要手动 "通知 "改变。 +user.refresh(); + +// 或者我们可以使用`update()`方法! +user.update((value){ + value.name='Roi'; +}); + +print( user ); +``` + +#### GetView + +我很喜欢这个Widget,很简单,很有用。 + +它是一个对已注册的`Controller`有一个名为`controller`的getter的`const Stateless`的Widget,仅此而已。 + +```dart + class AwesomeController extends GetxController { + final String title = 'My Awesome View'; + } + + // 一定要记住传递你用来注册控制器的`Type`! + class AwesomeView extends GetView { + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(20), + child: Text( controller.title ), // 只需调用 "controller.something"。 + ); + } + } +``` + +#### GetWidget + +大多数人都不知道这个Widget,或者完全搞不清它的用法。 +这个用例非常少见且特殊:它 "缓存 "了一个Controller,由于_cache_,不能成为一个 "const Stateless"(因为_cache_,所以不能成为一个`const Stateless`)。 + +> 那么,什么时候你需要 "缓存 "一个Controller? + +如果你使用了**GetX**的另一个 "不常见 "的特性 `Get.create()` + +`Get.create(()=>Controller())` 会在每次调用时生成一个新的`Controller` +`Get.find()` + +你可以用它来保存Todo项目的列表,如果小组件被 "重建",它将保持相同的控制器实例。 + +#### GetxService + +这个类就像一个 "GetxController",它共享相同的生命周期("onInit()"、"onReady()"、"onClose()")。 +但里面没有 "逻辑"。它只是通知**GetX**的依赖注入系统,这个子类**不能**从内存中删除。 + +所以这对保持你的 "服务 "总是可以被`Get.find()`获取到并保持运行是超级有用的。比如 +`ApiService`,`StorageService`,`CacheService`。 + +```dart +Future main() async { + await initServices(); /// 等待服务初始化. + runApp(SomeApp()); +} + +/// 在你运行Flutter应用之前,让你的服务初始化是一个明智之举。 +////因为你可以控制执行流程(也许你需要加载一些主题配置,apiKey,由用户自定义的语言等,所以在运行ApiService之前加载SettingService。 +///所以GetMaterialApp()不需要重建,可以直接取值。 +void initServices() async { + print('starting services ...'); + ///这里是你放get_storage、hive、shared_pref初始化的地方。 + ///或者moor连接,或者其他什么异步的东西。 + await Get.putAsync(() => DbService().init()); + await Get.putAsync(SettingsService()).init(); + print('All services started...'); +} + +class DbService extends GetxService { + Future init() async { + print('$runtimeType delays 2 sec'); + await 2.delay(); + print('$runtimeType ready!'); + return this; + } +} + +class SettingsService extends GetxService { + void init() async { + print('$runtimeType delays 1 sec'); + await 1.delay(); + print('$runtimeType ready!'); + } +} + +``` + +实际删除一个`GetxService`的唯一方法是使用`Get.reset()`,它就像"热重启 "你的应用程序。 + +所以如果你需要在你的应用程序的生命周期内对一个类实例进行绝对的持久化,请使用`GetxService`。 + +# 从2.0开始的兼容性变化 + +1- Rx类型。 + +| Before | After | +| ------- | ---------- | +| StringX | `RxString` | +| IntX | `RxInt` | +| MapX | `RxMap` | +| ListX | `RxList` | +| NumX | `RxNum` | +| DoubleX | `RxDouble` | + +现在RxController和GetBuilder已经合并了,你不再需要记住你要用哪个控制器,只要用GetxController就可以了,它可以用于简单的状态管理,也可以用于响应式。 + +2- 别名路由 +之前: + +```dart +GetMaterialApp( + namedRoutes: { + '/': GetRoute(page: Home()), + } +) +``` + +现在: + +```dart +GetMaterialApp( + getPages: [ + GetPage(name: '/', page: () => Home()), + ] +) +``` + +为什么要做这样的改变? +通常情况下,可能需要通过一个参数,或者一个登录令牌来决定显示哪个页面。 +将页面插入到一个函数中,大大降低了RAM的消耗,因为自从应用程序启动后,路由将不会在内存中分配。 + +```dart + +GetStorage box = GetStorage(); + +GetMaterialApp( + getPages: [ + GetPage(name: '/', page:(){ + return box.hasData('token') ? Home() : Login(); + }) + ] +) +``` + +# 为什么选择Getx? + +1- Flutter更新后,很多时候,你的很多包都会坏掉。有时会发生编译错误,经常出现的错误,至今仍没有答案,开发者需要知道错误的来源,跟踪错误,才会尝试在相应的仓库中开一个问题,并看到其问题的解决。Get集中了开发的主要资源(状态、依赖和路由管理),让你可以在pubspec中添加一个包,然后开始工作。Flutter更新后,你唯一需要做的就是更新Get依赖,然后开始工作。Get还可以解决兼容性问题。有多少次,一个包的版本与另一个包的版本不兼容,因为一个包在一个版本中使用了依赖,而另一个包在另一个版本中使用了依赖?使用Get也不用担心这个问题,因为所有的东西都在同一个包里,是完全兼容的。 + +2- Flutter很简单,Flutter很不可思议,但是Flutter仍然有一些代码,对于大多数开发者来说可能是不需要的,比如`Navigator.of(context).push (context, builder [...]`,你写了8行代码仅仅只为了调用一个路由。而使用Get只需`Get.to(Home())`就完成了,你将进入下一个页面。动态网页URL是目前Flutter中非常痛苦的一件事,而用GetX则非常简单。在Flutter中管理状态,管理依赖关系也产生了很多讨论,因为pub中的模式有上百种。但是没有什么比在你的变量末尾加一个".obs "更简单的了,把你的widget放在一个Obx里面,就这样,所有对这个变量的更新都会在页面上自动更新。 + +3-轻松,不用担心性能。Flutter的性能已经很惊人了,但是想象一下,你使用一个状态管理器,和一个定位器来分布你的blocs/stores/controllers/等等类。当你不需要那个依赖的时候,你必须手动调用排除它。但是,你有没有想过简单地使用你的控制器,当它不再被任何人使用时,它会简单地从内存中删除?这就是GetX所做的。有了SmartManagement,所有不被使用的东西都会从内存中删除,除了编程,您不应该担心任何事情。GetX将保证您消耗的是最低限度的必要资源,甚至没有为此创建一个逻辑。 + +4-实际解耦。你可能听说过 "将界面与业务逻辑分离 "的概念。这并不是BLoC、MVC、MVVM的特例,市面上的其他标准都有这个概念。但是,由于使用了上下文(context),这个概念在Flutter中往往可以得到缓解。 +如果你需要上下文来寻找InheritedWidget,你需要在界面中找到它,或者通过参数传递上下文。我特别觉得这种解决方案非常丑陋,要在团队中工作,我们总会对View的业务逻辑产生依赖。Getx与标准的做法不一样,虽然它并没有完全禁止使用StatefulWidgets、InitState等,但它总有类似的方法,可以更干净。控制器是有生命周期的,例如当你需要进行APIREST请求时,你不依赖于界面中的任何东西。你可以使用onInit来启动http调用,当数据到达时,变量将被填充。由于GetX是完全响应式的(真的,在流下工作),一旦项目被填充,所有使用该变量的widgets将在界面中自动更新。这使得具有UI专业知识的人只需要处理widget,除了用户事件(比如点击按钮)之外,不需要向业务逻辑发送任何东西,而处理业务逻辑的人将可以自由地单独创建和测试业务逻辑。 + +这个库会一直更新和实现新的功能。欢迎提供PR,并为其做出贡献。 + +# 社区 + +## 社区渠道 + +GetX拥有一个非常活跃且乐于助人的社区。如果你有问题,或者想得到关于这个框架使用的任何帮助,请加入我们的社区频道。这个资源库是提问、申请资源的专用库,欢迎随时加入GetX社区。 + +| **Slack** | **Discord** | **Telegram** | +| :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- | +| [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://communityinviter.com/apps/getxworkspace/getx) | [![Discord Shield](https://img.shields.io/discord/722900883784073290.svg?logo=discord)](https://discord.com/invite/9Hpt99N) | [![Telegram](https://img.shields.io/badge/chat-on%20Telegram-blue.svg)](https://t.me/joinchat/PhdbJRmsZNpAqSLJL6bH7g) | + +## 如何做贡献 + +_想为项目做贡献吗?我们将自豪地强调你是我们的合作者之一。以下是您可以做出贡献并使Get(和Flutter)变得更好的几点。 + +- 帮助将readme翻译成其他语言。 +- 为readme添加文档(Get的很多功能还没有被记录下来)。 +- 撰写文章或制作视频,教大家如何使用Get(它们将被记录到readme和未来的Wiki中)。 +- 提供代码/测试的PR。 +- 包括新功能。 + +欢迎任何贡献 + +## 文章和视频 + +- [Dynamic Themes in 3 lines using GetX™](https://medium.com/swlh/flutter-dynamic-themes-in-3-lines-c3b375f292e3) - Tutorial by [Rod Brown](https://github.com/RodBr). +- [Complete GetX™ Navigation](https://www.youtube.com/watch?v=RaqPIoJSTtI) - Route management video by Amateur Coder. +- [Complete GetX State Management](https://www.youtube.com/watch?v=CNpXbeI_slw) - State management video by Amateur Coder. +- [GetX™ Other Features](https://youtu.be/ttQtlX_Q0eU) - utils, storage, bindings and other features video by Amateur Coder. +- [Firestore User with GetX | Todo App](https://www.youtube.com/watch?v=BiV0DcXgk58) - Video by Amateur Coder. +- [Firebase Auth with GetX | Todo App](https://www.youtube.com/watch?v=-H-T_BSgfOE) - Video by Amateur Coder. +- [The Flutter GetX™ Ecosystem ~ State Management](https://medium.com/flutter-community/the-flutter-getx-ecosystem-state-management-881c7235511d) - State management by [Aachman Garg](https://github.com/imaachman). +- [GetX, the all-in-one Flutter package](https://www.youtube.com/watch?v=IYQgtu9TM74) - A brief tutorial covering State Management and Navigation by Thad Carnevalli. +- [Build a To-do List App from scratch using Flutter and GetX](https://www.youtube.com/watch?v=EcnqFasHf18) - UI + State Management + Storage video by Thad Carnevalli. +- [GetX Flutter Firebase Auth Example](https://medium.com/@jeffmcmorris/getx-flutter-firebase-auth-example-b383c1dd1de2) - Article by Jeff McMorris. +- [Flutter State Management with GetX – Complete App](https://www.appwithflutter.com/flutter-state-management-with-getx/) - by App With Flutter. +- [Flutter Routing with Animation using Get Package](https://www.appwithflutter.com/flutter-routing-using-get-package/) - by App With Flutter. +- [Flutter GetX use --- simple charm!](https://github.com/CNAD666/getx_template/blob/main/docs/Use%20of%20Flutter%20GetX---simple%20charm!.md) - CNAD666 + - [Flutter GetX使用---简洁的魅力!](https://juejin.cn/post/6924104248275763208) + diff --git a/packages/get/_config.yml b/packages/get/_config.yml new file mode 100644 index 0000000..c419263 --- /dev/null +++ b/packages/get/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file diff --git a/packages/get/analysis_options.yaml b/packages/get/analysis_options.yaml new file mode 100644 index 0000000..60e2162 --- /dev/null +++ b/packages/get/analysis_options.yaml @@ -0,0 +1,90 @@ +# Include option is buggy: +# https://github.com/flutter/flutter/issues/62591 +# In case the include issue gets fixed, lines below INCLUDE_FIX +# can be removed +# include: package:flutter_lints/flutter.yaml + +# include: package:effective_dart/analysis_options.1.2.0.yaml +analyzer: + strong-mode: + implicit-casts: false +linter: + rules: + await_only_futures: true + # This one is desirable, but that's a lot of work for now + public_member_api_docs: false + # Desirable, but would be breaking changes: + avoid_positional_boolean_parameters: false + constant_identifier_names: false + include_file_not_found: false + + # INCLUDE_FIX (copy of effective dart 1.2.0) + # STYLE + camel_case_types: true + close_sinks: true + unnecessary_statements: true + camel_case_extensions: true + library_names: true + file_names: true + library_prefixes: true + non_constant_identifier_names: true + directives_ordering: true + lines_longer_than_80_chars: true # avoid + curly_braces_in_flow_control_structures: true + + # DOCUMENTATION + slash_for_doc_comments: true + package_api_docs: true # prefer + #- comment_references # Unused because https://github.com/dart-lang/sdk/issues/36974 + + # USAGE + implementation_imports: true + avoid_relative_lib_imports: true # prefer + prefer_relative_imports: true # prefer + prefer_adjacent_string_concatenation: true + prefer_interpolation_to_compose_strings: true # prefer + unnecessary_brace_in_string_interps: true # avoid + prefer_collection_literals: true + avoid_function_literals_in_foreach_calls: true # avoid + prefer_iterable_whereType: true + prefer_function_declarations_over_variables: true + unnecessary_lambdas: true + prefer_equal_for_default_values: true + avoid_init_to_null: true + unnecessary_getters_setters: true + annotate_overrides: true + #- unnecessary_getters # prefer # Disabled pending fix: https://github.com/dart-lang/linter/issues/23 + #- prefer_expression_function_bodies # consider + unnecessary_this: true + prefer_initializing_formals: true + type_init_formals: true + empty_constructor_bodies: true + unnecessary_new: true + unnecessary_const: true + avoid_catches_without_on_clauses: true # avoid + avoid_catching_errors: true + use_rethrow_when_possible: true + unrelated_type_equality_checks: true + + # DESIGN + use_to_and_as_if_applicable: true # prefer + one_member_abstracts: true # avoid + avoid_classes_with_only_static_members: true # avoid + prefer_mixin: true + prefer_final_fields: true # prefer + use_setters_to_change_properties: true + avoid_setters_without_getters: true + avoid_returning_null: true # avoid + avoid_returning_this: true # avoid + type_annotate_public_apis: true # prefer + #- prefer_typing_uninitialized_variables # consider + omit_local_variable_types: true # avoid + avoid_types_on_closure_parameters: true # avoid + avoid_return_types_on_setters: true # avoid + prefer_generic_function_type_aliases: true + avoid_private_typedef_functions: true # prefer + #- use_function_type_syntax_for_parameters # consider + hash_and_equals: true + avoid_equals_and_hash_code_on_mutable_classes: true # avoid + avoid_null_checks_in_equality_operators: true + diff --git a/packages/get/build/test_cache/build/c075001b96339384a97db4862b8ab8db.cache.dill.track.dill b/packages/get/build/test_cache/build/c075001b96339384a97db4862b8ab8db.cache.dill.track.dill new file mode 100644 index 0000000000000000000000000000000000000000..917c94d686cadf8de013826bf1ded4ec06ad1e1f GIT binary patch literal 34533184 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 z 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

b9VjP~G-68;r?(5$5!U&Di(DR_fN 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%0D=J{-s306 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

  • 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

    yeGY^jSaV?Afqe(g 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 z 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⩔kIw)A4@RndW!wJ?`8 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 z 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 z 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

    ofKx40Gc_Lx|vqoT=95iWx|5aF}IbK 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

    I#t13%^?JMb;)%7Od%bF->L??9Et$PWC0 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�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

    Vkca^5pfG2GsRDn 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%0DcIXHv%*tGEFw*>7-n7 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

    iG15k4a;-|G@k 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

    !4z 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 z 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

    a<_Ikc3cYK#No5D>o(JvX#KJebB*KoZ@- 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�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 ck?HHrq`vXi;{RCgSI@+ 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ͺ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�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 l1U_=tE8N&kh#EA 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