From f08c5cccb95e211d2514db2b97ea0efe22dd2612 Mon Sep 17 00:00:00 2001 From: nyne Date: Sun, 29 Sep 2024 16:17:03 +0800 Subject: [PATCH] initial commit --- .gitignore | 43 ++ .metadata | 42 ++ README.md | 16 + analysis_options.yaml | 29 + android/.gitignore | 13 + android/app/build.gradle | 96 +++ android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 51 ++ .../wgh136/venera/DocumentPickActivity.kt | 32 + .../com/github/wgh136/venera/MainActivity.kt | 159 ++++ .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5790 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 858 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 4697 bytes .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 0 -> 4697 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3183 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 464 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2418 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 0 -> 2418 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8224 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 1322 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 6085 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 6085 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14637 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 2954 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 11607 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 0 -> 11607 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19791 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 4237 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 14772 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 0 -> 14772 bytes .../app/src/main/res/values-night/styles.xml | 18 + android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle | 18 + android/gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.properties | 5 + android/settings.gradle | 25 + assets/init.js | 576 ++++++++++++++ assets/translation.json | 3 + ios/.gitignore | 34 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 1 + ios/Flutter/Release.xcconfig | 1 + 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 + ios/Runner/AppDelegate.swift | 80 ++ .../AppIcon.appiconset/AppIcon-20@2x.png | Bin 0 -> 1055 bytes .../AppIcon.appiconset/AppIcon-20@2x~ipad.png | Bin 0 -> 1055 bytes .../AppIcon.appiconset/AppIcon-20@3x.png | Bin 0 -> 1946 bytes .../AppIcon.appiconset/AppIcon-20~ipad.png | Bin 0 -> 439 bytes .../AppIcon.appiconset/AppIcon-29.png | Bin 0 -> 731 bytes .../AppIcon.appiconset/AppIcon-29@2x.png | Bin 0 -> 1875 bytes .../AppIcon.appiconset/AppIcon-29@2x~ipad.png | Bin 0 -> 1875 bytes .../AppIcon.appiconset/AppIcon-29@3x.png | Bin 0 -> 2976 bytes .../AppIcon.appiconset/AppIcon-29~ipad.png | Bin 0 -> 731 bytes .../AppIcon.appiconset/AppIcon-40@2x.png | Bin 0 -> 2625 bytes .../AppIcon.appiconset/AppIcon-40@2x~ipad.png | Bin 0 -> 2625 bytes .../AppIcon.appiconset/AppIcon-40@3x.png | Bin 0 -> 4765 bytes .../AppIcon.appiconset/AppIcon-40~ipad.png | Bin 0 -> 1055 bytes .../AppIcon.appiconset/AppIcon-60@2x~car.png | Bin 0 -> 4765 bytes .../AppIcon.appiconset/AppIcon-60@3x~car.png | Bin 0 -> 6652 bytes .../AppIcon-83.5@2x~ipad.png | Bin 0 -> 6065 bytes .../AppIcon.appiconset/AppIcon@2x.png | Bin 0 -> 4765 bytes .../AppIcon.appiconset/AppIcon@2x~ipad.png | Bin 0 -> 5307 bytes .../AppIcon.appiconset/AppIcon@3x.png | Bin 0 -> 6652 bytes .../AppIcon~ios-marketing.png | Bin 0 -> 63239 bytes .../AppIcon.appiconset/AppIcon~ipad.png | Bin 0 -> 2436 bytes .../AppIcon.appiconset/Contents.json | 134 ++++ .../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 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 + ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 51 ++ ios/Runner/Runner-Bridging-Header.h | 1 + ios/RunnerTests/RunnerTests.swift | 12 + lib/components/appbar.dart | 623 ++++++++++++++++ lib/components/button.dart | 309 ++++++++ lib/components/components.dart | 34 + lib/components/consts.dart | 3 + lib/components/custom_slider.dart | 222 ++++++ lib/components/flyout.dart | 315 ++++++++ lib/components/image.dart | 314 ++++++++ lib/components/layout.dart | 139 ++++ lib/components/loading.dart | 391 ++++++++++ lib/components/menu.dart | 117 +++ lib/components/message.dart | 217 ++++++ lib/components/navigation_bar.dart | 695 +++++++++++++++++ lib/components/pop_up_widget.dart | 184 +++++ lib/components/scroll.dart | 100 +++ lib/components/select.dart | 346 +++++++++ lib/components/side_bar.dart | 223 ++++++ lib/components/window_frame.dart | 624 ++++++++++++++++ lib/foundation/app.dart | 73 ++ lib/foundation/app_page_route.dart | 356 +++++++++ lib/foundation/appdata.dart | 23 + lib/foundation/cache_manager.dart | 294 ++++++++ lib/foundation/comic_source/category.dart | 153 ++++ lib/foundation/comic_source/comic_source.dart | 540 ++++++++++++++ lib/foundation/comic_source/favorites.dart | 50 ++ lib/foundation/comic_source/parser.dart | 652 ++++++++++++++++ lib/foundation/comic_type.dart | 23 + lib/foundation/consts.dart | 6 + lib/foundation/context.dart | 36 + lib/foundation/favorites.dart | 487 ++++++++++++ lib/foundation/history.dart | 319 ++++++++ .../image_provider/base_image_provider.dart | 148 ++++ .../image_provider/cached_image.dart | 80 ++ lib/foundation/js_engine.dart | 425 +++++++++++ lib/foundation/local.dart | 201 +++++ lib/foundation/log.dart | 99 +++ lib/foundation/res.dart | 36 + lib/foundation/state_controller.dart | 231 ++++++ lib/foundation/widget_utils.dart | 110 +++ lib/init.dart | 19 + lib/main.dart | 153 ++++ lib/network/app_dio.dart | 194 +++++ lib/network/cookie_jar.dart | 221 ++++++ lib/network/download.dart | 23 + lib/pages/categories_page.dart | 10 + lib/pages/explore_page.dart | 10 + lib/pages/favorites_page.dart | 10 + lib/pages/home_page.dart | 498 +++++++++++++ lib/pages/main_page.dart | 116 +++ lib/utils/ext.dart | 92 +++ lib/utils/io.dart | 140 ++++ lib/utils/translations.dart | 43 ++ linux/.gitignore | 1 + linux/CMakeLists.txt | 145 ++++ linux/flutter/CMakeLists.txt | 88 +++ linux/flutter/generated_plugin_registrant.cc | 27 + linux/flutter/generated_plugin_registrant.h | 15 + linux/flutter/generated_plugins.cmake | 27 + linux/main.cc | 6 + linux/my_application.cc | 124 +++ linux/my_application.h | 18 + macos/.gitignore | 7 + macos/Flutter/Flutter-Debug.xcconfig | 1 + macos/Flutter/Flutter-Release.xcconfig | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 18 + macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + macos/Runner/AppDelegate.swift | 60 ++ .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 65254 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5041 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 523 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 11282 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1054 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 27569 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2265 bytes macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ macos/Runner/Configs/AppInfo.xcconfig | 14 + macos/Runner/Configs/Debug.xcconfig | 2 + macos/Runner/Configs/Release.xcconfig | 2 + macos/Runner/Configs/Warnings.xcconfig | 13 + macos/Runner/DebugProfile.entitlements | 12 + macos/Runner/Info.plist | 32 + macos/Runner/MainFlutterWindow.swift | 15 + macos/Runner/Release.entitlements | 12 + macos/RunnerTests/RunnerTests.swift | 12 + pubspec.lock | 464 ++++++++++++ pubspec.yaml | 41 + windows/.gitignore | 17 + windows/CMakeLists.txt | 108 +++ windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 23 + windows/flutter/generated_plugin_registrant.h | 15 + windows/flutter/generated_plugins.cmake | 27 + windows/runner/CMakeLists.txt | 40 + windows/runner/Runner.rc | 121 +++ windows/runner/flutter_window.cpp | 165 ++++ windows/runner/flutter_window.h | 33 + windows/runner/main.cpp | 43 ++ windows/runner/resource.h | 16 + windows/runner/resources/app_icon.ico | Bin 0 -> 33673 bytes windows/runner/runner.exe.manifest | 20 + windows/runner/utils.cpp | 65 ++ windows/runner/utils.h | 19 + windows/runner/win32_window.cpp | 288 +++++++ windows/runner/win32_window.h | 102 +++ 196 files changed, 16761 insertions(+) create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/github/wgh136/venera/DocumentPickActivity.kt create mode 100644 android/app/src/main/kotlin/com/github/wgh136/venera/MainActivity.kt create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png create mode 100644 android/app/src/main/res/values-night/styles.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 assets/init.js create mode 100644 assets/translation.json create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Podfile create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 ios/RunnerTests/RunnerTests.swift create mode 100644 lib/components/appbar.dart create mode 100644 lib/components/button.dart create mode 100644 lib/components/components.dart create mode 100644 lib/components/consts.dart create mode 100644 lib/components/custom_slider.dart create mode 100644 lib/components/flyout.dart create mode 100644 lib/components/image.dart create mode 100644 lib/components/layout.dart create mode 100644 lib/components/loading.dart create mode 100644 lib/components/menu.dart create mode 100644 lib/components/message.dart create mode 100644 lib/components/navigation_bar.dart create mode 100644 lib/components/pop_up_widget.dart create mode 100644 lib/components/scroll.dart create mode 100644 lib/components/select.dart create mode 100644 lib/components/side_bar.dart create mode 100644 lib/components/window_frame.dart create mode 100644 lib/foundation/app.dart create mode 100644 lib/foundation/app_page_route.dart create mode 100644 lib/foundation/appdata.dart create mode 100644 lib/foundation/cache_manager.dart create mode 100644 lib/foundation/comic_source/category.dart create mode 100644 lib/foundation/comic_source/comic_source.dart create mode 100644 lib/foundation/comic_source/favorites.dart create mode 100644 lib/foundation/comic_source/parser.dart create mode 100644 lib/foundation/comic_type.dart create mode 100644 lib/foundation/consts.dart create mode 100644 lib/foundation/context.dart create mode 100644 lib/foundation/favorites.dart create mode 100644 lib/foundation/history.dart create mode 100644 lib/foundation/image_provider/base_image_provider.dart create mode 100644 lib/foundation/image_provider/cached_image.dart create mode 100644 lib/foundation/js_engine.dart create mode 100644 lib/foundation/local.dart create mode 100644 lib/foundation/log.dart create mode 100644 lib/foundation/res.dart create mode 100644 lib/foundation/state_controller.dart create mode 100644 lib/foundation/widget_utils.dart create mode 100644 lib/init.dart create mode 100644 lib/main.dart create mode 100644 lib/network/app_dio.dart create mode 100644 lib/network/cookie_jar.dart create mode 100644 lib/network/download.dart create mode 100644 lib/pages/categories_page.dart create mode 100644 lib/pages/explore_page.dart create mode 100644 lib/pages/favorites_page.dart create mode 100644 lib/pages/home_page.dart create mode 100644 lib/pages/main_page.dart create mode 100644 lib/utils/ext.dart create mode 100644 lib/utils/io.dart create mode 100644 lib/utils/translations.dart create mode 100644 linux/.gitignore create mode 100644 linux/CMakeLists.txt create mode 100644 linux/flutter/CMakeLists.txt create mode 100644 linux/flutter/generated_plugin_registrant.cc create mode 100644 linux/flutter/generated_plugin_registrant.h create mode 100644 linux/flutter/generated_plugins.cmake create mode 100644 linux/main.cc create mode 100644 linux/my_application.cc create mode 100644 linux/my_application.h create mode 100644 macos/.gitignore create mode 100644 macos/Flutter/Flutter-Debug.xcconfig create mode 100644 macos/Flutter/Flutter-Release.xcconfig create mode 100644 macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 macos/Runner.xcodeproj/project.pbxproj create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner/AppDelegate.swift create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 macos/Runner/Base.lproj/MainMenu.xib create mode 100644 macos/Runner/Configs/AppInfo.xcconfig create mode 100644 macos/Runner/Configs/Debug.xcconfig create mode 100644 macos/Runner/Configs/Release.xcconfig create mode 100644 macos/Runner/Configs/Warnings.xcconfig create mode 100644 macos/Runner/DebugProfile.entitlements create mode 100644 macos/Runner/Info.plist create mode 100644 macos/Runner/MainFlutterWindow.swift create mode 100644 macos/Runner/Release.entitlements create mode 100644 macos/RunnerTests/RunnerTests.swift create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 windows/.gitignore create mode 100644 windows/CMakeLists.txt create mode 100644 windows/flutter/CMakeLists.txt create mode 100644 windows/flutter/generated_plugin_registrant.cc create mode 100644 windows/flutter/generated_plugin_registrant.h create mode 100644 windows/flutter/generated_plugins.cmake create mode 100644 windows/runner/CMakeLists.txt create mode 100644 windows/runner/Runner.rc create mode 100644 windows/runner/flutter_window.cpp create mode 100644 windows/runner/flutter_window.h create mode 100644 windows/runner/main.cpp create mode 100644 windows/runner/resource.h create mode 100644 windows/runner/resources/app_icon.ico create mode 100644 windows/runner/runner.exe.manifest create mode 100644 windows/runner/utils.cpp create mode 100644 windows/runner/utils.h create mode 100644 windows/runner/win32_window.cpp create mode 100644 windows/runner/win32_window.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29a3a50 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..7387ee4 --- /dev/null +++ b/.metadata @@ -0,0 +1,42 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "b0850beeb25f6d5b10426284f506557f66181b36" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: b0850beeb25f6d5b10426284f506557f66181b36 + base_revision: b0850beeb25f6d5b10426284f506557f66181b36 + - platform: android + create_revision: b0850beeb25f6d5b10426284f506557f66181b36 + base_revision: b0850beeb25f6d5b10426284f506557f66181b36 + - platform: ios + create_revision: b0850beeb25f6d5b10426284f506557f66181b36 + base_revision: b0850beeb25f6d5b10426284f506557f66181b36 + - platform: linux + create_revision: b0850beeb25f6d5b10426284f506557f66181b36 + base_revision: b0850beeb25f6d5b10426284f506557f66181b36 + - platform: macos + create_revision: b0850beeb25f6d5b10426284f506557f66181b36 + base_revision: b0850beeb25f6d5b10426284f506557f66181b36 + - platform: windows + create_revision: b0850beeb25f6d5b10426284f506557f66181b36 + base_revision: b0850beeb25f6d5b10426284f506557f66181b36 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md new file mode 100644 index 0000000..2d42093 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# venera + +A comic app. + +## 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/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..06a768b --- /dev/null +++ b/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.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + - collection_methods_unrelated_type + # 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/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..3eb1ef6 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,96 @@ +plugins { + id "com.android.application" + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader("UTF-8") { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") +if (flutterVersionCode == null) { + flutterVersionCode = "1" +} + +def flutterVersionName = localProperties.getProperty("flutter.versionName") +if (flutterVersionName == null) { + flutterVersionName = "1.0" +} + +def keystorePropertiesFile = rootProject.file("key.properties") +def keystoreProperties = new Properties() +keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) + +android { + namespace = "com.github.wgh136.venera" + compileSdk = flutter.compileSdkVersion + ndkVersion "25.1.8937393" + + splits{ + abi { + enable true + universalApk true + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + signingConfigs { + debug { + storeFile file(keystoreProperties['storeFile']) + storePassword keystoreProperties['storePassword'] + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + } + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile file(keystoreProperties['storeFile']) + storePassword keystoreProperties['storePassword'] + } + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.github.wgh136.venera" + // 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. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInteger() + versionName = flutterVersionName + } + + buildTypes { + release { + signingConfig signingConfigs.release + applicationVariants.all { variant -> + variant.outputs.all { output -> + def abi = output.getFilter(com.android.build.OutputFile.ABI) + if (abi != null) { + outputFileName = "venera-${variant.versionName}-${abi}.apk" + } else { + outputFileName = "venera-${variant.versionName}.apk" + } + } + } + } + } +} + +flutter { + source = "../.." +} + +dependencies { + implementation "androidx.activity:activity-ktx:1.9.2" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..53dc21d --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/github/wgh136/venera/DocumentPickActivity.kt b/android/app/src/main/kotlin/com/github/wgh136/venera/DocumentPickActivity.kt new file mode 100644 index 0000000..a16e19d --- /dev/null +++ b/android/app/src/main/kotlin/com/github/wgh136/venera/DocumentPickActivity.kt @@ -0,0 +1,32 @@ +package com.github.wgh136.venera + +import android.app.Instrumentation +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.result.ActivityResult +import androidx.activity.result.contract.ActivityResultContracts + +class DirectoryPickerActivity : ComponentActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) + resultLauncher.launch(intent) + } + + private val resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> + val returnIntent = Intent() + if (result.resultCode == RESULT_OK) { + val uri: Uri? = result.data?.data + if (uri != null) { + contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) + returnIntent.putExtra("directoryUri", uri.toString()) + } + } + setResult(RESULT_OK, returnIntent) + finish() + } +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/github/wgh136/venera/MainActivity.kt b/android/app/src/main/kotlin/com/github/wgh136/venera/MainActivity.kt new file mode 100644 index 0000000..c325ada --- /dev/null +++ b/android/app/src/main/kotlin/com/github/wgh136/venera/MainActivity.kt @@ -0,0 +1,159 @@ +package com.github.wgh136.venera + +import android.app.Activity +import android.content.ContentResolver +import android.content.Intent +import android.net.Uri +import android.os.Environment +import android.view.KeyEvent +import io.flutter.embedding.android.FlutterActivity +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.plugin.common.EventChannel +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugins.GeneratedPluginRegistrant +import java.io.File +import java.io.FileOutputStream +import java.io.InputStream +import java.io.OutputStream +import java.lang.Exception + +class MainActivity : FlutterActivity() { + var volumeListen = VolumeListen() + var listening = false + + private val pickDirectoryCode = 1 + + private lateinit var result: MethodChannel.Result + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == pickDirectoryCode && resultCode == Activity.RESULT_OK) { + val pickedDirectoryUri = data?.getStringExtra("directoryUri") + if (pickedDirectoryUri == null) { + result.success(null) + } + val uri = Uri.parse(pickedDirectoryUri) + Thread { + try { + result.success(onPickedDirectory(uri)) + } + catch (e: Exception) { + result.error("Failed to Copy Files", e.toString(), null) + } + }.start() + } + } + + override fun configureFlutterEngine(flutterEngine: FlutterEngine) { + GeneratedPluginRegistrant.registerWith(flutterEngine) + MethodChannel( + flutterEngine.dartExecutor.binaryMessenger, + "venera/method_channel" + ).setMethodCallHandler { call, res -> + when (call.method) { + "getProxy" -> res.success(getProxy()) + "setScreenOn" -> { + val set = call.argument("set") ?: false + if (set) { + window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } else { + window.clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + res.success(null) + } + "getDirectoryPath" -> { + this.result = res + val intent = Intent(this, DirectoryPickerActivity::class.java) + startActivityForResult(intent, pickDirectoryCode) + } + else -> res.notImplemented() + } + } + + val channel = EventChannel(flutterEngine.dartExecutor.binaryMessenger, "venera/volume") + channel.setStreamHandler( + object : EventChannel.StreamHandler { + override fun onListen(arguments: Any?, events: EventChannel.EventSink) { + listening = true + volumeListen.onUp = { + events.success(1) + } + volumeListen.onDown = { + events.success(2) + } + } + override fun onCancel(arguments: Any?) { + listening = false + } + }) + } + + private fun getProxy(): String { + val host = System.getProperty("http.proxyHost") + val port = System.getProperty("http.proxyPort") + return if (host != null && port != null) { + "$host:$port" + } else { + "No Proxy" + } + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if(listening){ + when (keyCode) { + KeyEvent.KEYCODE_VOLUME_DOWN -> { + volumeListen.down() + return true + } + KeyEvent.KEYCODE_VOLUME_UP -> { + volumeListen.up() + return true + } + } + } + return super.onKeyDown(keyCode, event) + } + + /// copy the directory to tmp directory, return copied directory + private fun onPickedDirectory(uri: Uri): String { + val tempDir = File(context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), "tempDir") + if (!tempDir.exists()) { + tempDir.mkdirs() + } + + val contentResolver: ContentResolver = context.contentResolver + + val childrenUri = Uri.withAppendedPath(uri, "children") + + contentResolver.query(childrenUri, null, null, null, null)?.use { cursor -> + while (cursor.moveToNext()) { + val documentId = cursor.getString(cursor.getColumnIndexOrThrow("_id")) + val fileUri = Uri.withAppendedPath(uri, documentId) + + // 复制文件 + val inputStream: InputStream? = contentResolver.openInputStream(fileUri) + val outputStream: OutputStream = FileOutputStream(File(tempDir, documentId)) + + inputStream?.use { input -> + outputStream.use { output -> + input.copyTo(output) + } + } + } + } + + return tempDir.absolutePath + } +} + +class VolumeListen{ + var onUp = fun() {} + var onDown = fun() {} + fun up(){ + onUp() + } + fun down(){ + onDown() + } +} + diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..345888d --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..21ee7fccaa9b681f2aa3d911e6314f9836487bc3 GIT binary patch literal 5790 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3d0ee7ad78417149f65b9e26f12b133d3de70e GIT binary patch literal 858 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz4M-mPBqj}{7>k44ofy`glX=O&z%1hF;uum9 z_x4gC?*Rn?R>uiV(|&~qGv+pR-tIrhFuiv3`OkHygA;ZfU@NR(ynmlbp=p8!LsAl( zd&3EbMGPICk}`}+%$-aMYH0;59Xu*r4KrpO6jU%8RWup|LpBxIyJ}U-H3xn!1!fio MPgg&ebxsLQ04tUIDF6Tf literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd27fccd0d647e9b9da9500b6fe058037ce67b5 GIT binary patch literal 4697 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 MSl=8~qURLxAGpwh`Tzg` literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd27fccd0d647e9b9da9500b6fe058037ce67b5 GIT binary patch literal 4697 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 MSl=8~qURLxAGpwh`Tzg` literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9c44ba463c37669311762dc7caaa9708b43b4066 GIT binary patch literal 3183 zcmV-#43P7QP)Px>DM>^@RA@uhS!r|>Wfr})_L2omL?kI}0VDx*FsyZ(q4b#*5}|4g6L zNp*GA*YCb}-+k|UMdAPaMg2kclXZ-5v!!JK#`o_s;r9U045r(5o!g*M%%J|X932NH ztdmGZ_4V3G0kW(dkw27t^D~H5XDIQ;@$$2u9xN(acn5%_166M@cLRXjLjz#@j5wMA zzIl>_=%+m*;P%K6CBW_W+MyY){byN#p=B@(1(pG5sqBC(T-@^Io?bZsJUTFS22x)D z#Bi?9sKRj+7c<8thP4u065JjNvh4M^_rJk-^@JH9o~OVu)uoK*{L*8)W48hz@HLv% z3Z$+8$aPGQA-P@n@GeUPDXOnSkReG5LwxS`9jXULgHIZUhh4!Fj?k1zUOetaFbyBysG!SE)v9vGKFA9D_?8Ns0V~%RuU1h zXhuO^>>4#1BuDNV05P8LJEmy43oWKqJH5g6xy8f?Eh3ut{psYrAs|vZKa>0IRti?? z!m5JY4zmEb)Z8!y5h?a6qQ~<<1bbn1L2k#H!9bV+ zAm{jA!;ejMGk;#;^m)F9u(DFKLUCV95pNv`h=e{`nqv$O(x^rvVWYoGJ-Mg*Y88ZE zVw(YAW1q_E#xxrBg+t}M&y#vNG#vZX$b?E-B8TF?U(Oh)XtPofE3$k3kUyb7RVQCQ z7y%IK*m{k+u)jix>ZRzqUqub(`I`LlJv}^bznIL2%}CUpZa&dEM2iv$gI7H_rtr7 zyz)(zD?CO!si}>T^C5FU4r-z6103`df_IXL7)EeaX{;(dGfVI?`0p2kmkap_e? zi-)(;E}UjT+g3DEmkIdwvV_+Xd30#aAa$7&H*c$|QzKe_D%7MAg_Unuap+4A)@QrX z?jaiQ&a&W0p@D*3Z=^f1_cJB3-sCq)*l|Nx%$;OKX10LzEpEJ-!ejKa zJQl2UV&?&Gk76up`hJVF8)YTKnwOUzyi62H>*@K}LA%E~nE@M(oHyhCgH34cNVnnU z9T`KXR^#F3G`6p>~RSv-m8+@Ptql|?@-Tm#X}S@{Y4fNM_90WyMXl{ zd9W0X!AxQEuyd#%@U!M}kc-;fHKyT*>_hBTf_t^!R_$WFK6 zw`&p-=QvSS?O%Z#MpDRr-==h%LsO~|)d0xJu%q;%goI=VJZjIWr;8b#$T>TA^;pq? zhe=JSQ2KlT4Ld(yS>{o9Ql?SRsf>1*GM2-XF+9>Xy09hJg%z``=o8E0mA4!y_|`uP z{o)wBKhKK1!ye3kU%+dL943#lU`eI}n|6sIJ6xmsaV&85lZbl(+#ÐyO=S6tO9 zFJ-8}eyXI?*XB(rL86TTJ?pnmBGsz;fs2|Jk1gq_0E6RU8w%+SdO;lAFn=MP6T22id6i0(MJ@`|75{aU8Ls;nsuklRv(d&rI1X#(a==8>4dW6_#wY|WE=s$)tSL+#OQ z3`Wwb`?0GkcS%do*}p)vf`YTVn9!sewme04@r5}M;EY*=i;Ll4pz zo9a;Z&%0OIaP5YSAt_Z51h0}C+YIfb!H+&4n*gZ1VtTQ@$FE_kU!_ic*@C3!IV@T$ zAm>vT)-JT8eJdJCa~!Z*DP+BE#qrY~On*l}VgiSm6L_rJ=ECZ2?f}g<>sZZl(g+}` zL;S6)-hB4HOe3MT_r?gde2~VTwRW8QRl?BZYV_^KVD$nUw&b`G)esoehr_tpRrvla zus_p=s0I`UPN>3vulo-Lf=0rCfQE?D!wr2oK&-x})4(%(BsM0_*Si~G8#f#}q~xpF zlPpL|;PCeh0o(Vwu|3U(N7^u87$EcFjvnu%RqJ+GNyl}>K_@v|pi*Xn@M$aUI#yjxq6;(P7oBUdxrzoTc*T3!GwxaB-3jkCN12~cg?fakF zA+v3I*S3%uD6NBh`>z%ZAIM?udjfWS;s!+llSlKIk;G$tw#%<&Hf#85^FAw{{k%B8 z%SZq>$(}&JABbqzW8Djg7?U9@vs*O~L4;Tze*KS8?N7w@xn|8coz6D&8EmH zDQ=gqneP{BGn{-+K>}U*VM0q)P1Od^0x@!0A z;)3xT0FdVj%I?QFm9PT1w_U%}*%H?}&X)`Ipph9MO%(i=3DV;PivTMY7Zm6Jg>avE z-#4)`&V`hk5c9~aUY4e_@+8?(@7~CWHDEIothoun9hws0y1abIrK07Z1E|y{62=H< zpNS$xwSMA*6ec2mz6ic%={j|&I!jDw5=@qZ*-w+x9jV5VgT_x<36?X?0*K3X9PFYF^YHOp?d`bpn(Vj5Z$Kd z$A6P;apPn)C;V0jq9%7^w2uOm0LpoMYst~UZ>h%nCUNxvppQiKL$Mntu?^zqdJ|i1 zyKCuCL(#+RJ0g`7B|y5pZ^^ln<1A0C- zW4ekm4`anP?OyAELaDHn3zX+vVa4TbE3W*!ij2{3sgvjc+SHXo`sEPGTdOV+&|gcU zK@=(iK!X;YSHxQ)yC+C|%N|gG5S$Do-OkS63&fd(CPYX)pxwV57496%z3_GFJ^;7X z{)QAOwc)7UEA;{3%Q1BnLwYBoRN=PBHqrOBp4^MKw(bnJach}t{^<;i^FQa0i5ZmF%Cb7CXdV0HcV()78&qol`;+06CSZIRF3v literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..ff93b823396e543ab397cb1fd8ac75c3bc973112 GIT binary patch literal 2418 zcmc&$`#;l*AO2`=dF6f^){;a;jOC!YrI9;ZndTO0qnrC>rWnaJ6s8$jXB{HfXcE#6 z-;B(P4J{fa_cTIs(j4Ev;{5QupI@HW`+5KJykAeYm&X}d8BG}g0A!t=kmy~$_J2rA z?#=?d&)_bJ#h}mF0}UL=0s!nabVi;!M+jV|UcD3Gt;*WDDvaU0g!jZ&osJk#`Soz& zubEG|n7yb+VI%+8xu-v=RyFIgp(`zCYOav&ZyeUs$p9p2%i8yj7#}}qqlxk}qt}}% z|2g%nFSd$X`bm%!=sNl$Nw2ad@~!sQjYe4;SIU}T=IMxQUagsWouacv2jm$w9VZCOST-%lSh0Vr zKpAyC8U1A&P~?!`CRSXiVTj(?_YxZN7c7FfT&`;pk?5H1#MA`>kw_^SvC(B#f6$#|v9;`{k^xQTAs{2G8tVwb+bA=SkYqq{doW5vZK=-=Fo_F~6T7T= z#8b+2Hyd0CLh1a=K-*e$Jyct}Fk61g&Gf!4UIZfL%@%GPt=|}XQ+@(IDLr*d^4)%y zn&(co!ChW(;k{a2xUJ2}lkFG7!m4?fjuf%%cNbBj_<1gjbobH}5n=Q7kfVxs{B5c;}Z*@dPx*~>g*!TzN#c91Cp~%>$>-viu+y%Jw{wW9kW^Kpkgii=2aL+etJc8}1@EIZB1SYP%`WCC40$2C`zz&` zO4B@_^x(G4(zuGb%wqIw4-*gWbuw&Xh_l1bS_lgo)T3!R5T-1GC9~&Ya4Gh7s7~Q> zg20VCI0D;#&E0F^7ZEOOaHJVSWF~5|1ctxyEs23D4k>1wK{=>p^ToLO_&&)y@x5Qe zg6bKDzq-(i&2-wFxrA>@pT(Ex`VIG4UHLudPb2j|rqP<>`wuqi(=X(7P_~kFj)kk{ z53>C~j*TaIBf9xH3xuFN$B=4t&Gwo_syO=< zS(EAv9J+Roiu3Uq>tP#?$3&%{b5LNdT9REH!jtFx3UwQI)9@Vo2&xH%1{#dyTI3r` z_pBtud^>4j#<=92vh$Zac=^tM}ad^Og95O6^7_L zjNqrT^Z#3YAcpsE&6HNBn$6YvE_psTy3JP&uFg^Nu9%w~^-bw+3o96H&x$yq*|@a0 z*uIHOIPBaC&q>>289b2eyBvfLsl(LnDBKsLlmi%=N9?t0*XoiYBO|+2V$UA+DK+Ib z4t_9mMS_qj1qTqVqIH4b6_7TUYwsS)Bt^ z=jiJy;y%=(&Wuvruaue_HtX+yvPx*EU-_2F>WTrw(Rkw3N+q?MKGYcIXA6NsM(}FZ z?Nk<25<_#~!6f{nu(l*DFrt&O)r7v{MPhR}M#693k`?UCNyJA(7Jl(%4a`ET2Ovya z`d0WJ-%U>@gE|kN9o{?+y#6Q7zauTH3so18m|Uhu%#8XV&lq)(cwITG3&SVN0(?6s z5&E6=t*mH%Z`s>i+4M76PR9;LZ+$g=wIPiF<`nPMWqO$Dr)mJ3PVVp8W?FoguCh1H zt+r0ISFg+^iX`ec=G=B3BiH}n?o^Ea^V{Q|X@C1ZHz;EQ$2lFy!RmC_;RD5|Y=JL` zns1NUhD)UrJ*qQDfjQ-S6PcD{{*roHIg?655_DoA?m%{$-NfzPcOj8ls6X(U0~=^w zBBKwO$#r@ko#Am-eqv_~o7BJphf+zZ4+>nMc|n&Sf{r&cD^oeMjya&!_eE?@*sVS*)hL=y zC%b0jzqGs%7T&))%UL^&)b*ANEn8z=I{i0$r)0PY+bGyC{`W-Bo9i-n#~NlBqjQLkkSPtB$Pv);EZc31Ik=k7aU~i-BJD z_wE|28(;DGME_xP+4YUq@Fz2nndel40`ng zsIBT{ZH`@GJpKv|VDOKE*xmqc?FaMCF}$S!)Uxm4*A?h_>}x|-Qc#Il@qPiwpq4U2 zkY}5cntPIhaH=g3VJcSAE1n=8lD*l{olADQf^lc84BzV4_)yCn*6cJM$p*axNk3%ZY-WdHyG literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..ff93b823396e543ab397cb1fd8ac75c3bc973112 GIT binary patch literal 2418 zcmc&$`#;l*AO2`=dF6f^){;a;jOC!YrI9;ZndTO0qnrC>rWnaJ6s8$jXB{HfXcE#6 z-;B(P4J{fa_cTIs(j4Ev;{5QupI@HW`+5KJykAeYm&X}d8BG}g0A!t=kmy~$_J2rA z?#=?d&)_bJ#h}mF0}UL=0s!nabVi;!M+jV|UcD3Gt;*WDDvaU0g!jZ&osJk#`Soz& zubEG|n7yb+VI%+8xu-v=RyFIgp(`zCYOav&ZyeUs$p9p2%i8yj7#}}qqlxk}qt}}% z|2g%nFSd$X`bm%!=sNl$Nw2ad@~!sQjYe4;SIU}T=IMxQUagsWouacv2jm$w9VZCOST-%lSh0Vr zKpAyC8U1A&P~?!`CRSXiVTj(?_YxZN7c7FfT&`;pk?5H1#MA`>kw_^SvC(B#f6$#|v9;`{k^xQTAs{2G8tVwb+bA=SkYqq{doW5vZK=-=Fo_F~6T7T= z#8b+2Hyd0CLh1a=K-*e$Jyct}Fk61g&Gf!4UIZfL%@%GPt=|}XQ+@(IDLr*d^4)%y zn&(co!ChW(;k{a2xUJ2}lkFG7!m4?fjuf%%cNbBj_<1gjbobH}5n=Q7kfVxs{B5c;}Z*@dPx*~>g*!TzN#c91Cp~%>$>-viu+y%Jw{wW9kW^Kpkgii=2aL+etJc8}1@EIZB1SYP%`WCC40$2C`zz&` zO4B@_^x(G4(zuGb%wqIw4-*gWbuw&Xh_l1bS_lgo)T3!R5T-1GC9~&Ya4Gh7s7~Q> zg20VCI0D;#&E0F^7ZEOOaHJVSWF~5|1ctxyEs23D4k>1wK{=>p^ToLO_&&)y@x5Qe zg6bKDzq-(i&2-wFxrA>@pT(Ex`VIG4UHLudPb2j|rqP<>`wuqi(=X(7P_~kFj)kk{ z53>C~j*TaIBf9xH3xuFN$B=4t&Gwo_syO=< zS(EAv9J+Roiu3Uq>tP#?$3&%{b5LNdT9REH!jtFx3UwQI)9@Vo2&xH%1{#dyTI3r` z_pBtud^>4j#<=92vh$Zac=^tM}ad^Og95O6^7_L zjNqrT^Z#3YAcpsE&6HNBn$6YvE_psTy3JP&uFg^Nu9%w~^-bw+3o96H&x$yq*|@a0 z*uIHOIPBaC&q>>289b2eyBvfLsl(LnDBKsLlmi%=N9?t0*XoiYBO|+2V$UA+DK+Ib z4t_9mMS_qj1qTqVqIH4b6_7TUYwsS)Bt^ z=jiJy;y%=(&Wuvruaue_HtX+yvPx*EU-_2F>WTrw(Rkw3N+q?MKGYcIXA6NsM(}FZ z?Nk<25<_#~!6f{nu(l*DFrt&O)r7v{MPhR}M#693k`?UCNyJA(7Jl(%4a`ET2Ovya z`d0WJ-%U>@gE|kN9o{?+y#6Q7zauTH3so18m|Uhu%#8XV&lq)(cwITG3&SVN0(?6s z5&E6=t*mH%Z`s>i+4M76PR9;LZ+$g=wIPiF<`nPMWqO$Dr)mJ3PVVp8W?FoguCh1H zt+r0ISFg+^iX`ec=G=B3BiH}n?o^Ea^V{Q|X@C1ZHz;EQ$2lFy!RmC_;RD5|Y=JL` zns1NUhD)UrJ*qQDfjQ-S6PcD{{*roHIg?655_DoA?m%{$-NfzPcOj8ls6X(U0~=^w zBBKwO$#r@ko#Am-eqv_~o7BJphf+zZ4+>nMc|n&Sf{r&cD^oeMjya&!_eE?@*sVS*)hL=y zC%b0jzqGs%7T&))%UL^&)b*ANEn8z=I{i0$r)0PY+bGyC{`W-Bo9i-n#~NlBqjQLkkSPtB$Pv);EZc31Ik=k7aU~i-BJD z_wE|28(;DGME_xP+4YUq@Fz2nndel40`ng zsIBT{ZH`@GJpKv|VDOKE*xmqc?FaMCF}$S!)Uxm4*A?h_>}x|-Qc#Il@qPiwpq4U2 zkY}5cntPIhaH=g3VJcSAE1n=8lD*l{olADQf^lc84BzV4_)yCn*6cJM$p*axNk3%ZY-WdHyG literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0d454ec7c2ef3601e426864028dc233caa2083 GIT binary patch literal 8224 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 RUg+|4hI(eY7;Trh{{vtUHXHx| literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b3077ecdb2001364598cdee7883a44c9fc11c7 GIT binary patch literal 6085 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 RUg+|4hI(eY7;Trh{{vtUHXHx| literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5727762ebe6fb3c09eabde14b6739d0e09801c21 GIT binary patch literal 14637 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..bf78b39dfbbef77401be522659f71e1f762ee4d0 GIT binary patch literal 2954 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4mO}j{44ikK#H+A$lZxy-8q?;3=G^Zo-U3d z6>)EGZtP_W6kt7gH=rZ+bAKDd0fuzdmRt3u-z@IV+MKA&lyQMCjM zhroxaH>H948rGk=2QsfF^&3dp2mb^49rxIQ0)N_G@Cqn6fVd!eG;UKv{VEm}WfqPc z4vt61=H_}fI0y(FX-H{dXyj#dyt8AoE~fwoQ$Sc;iJ?(Jp@Z=x z2P2a-Q`3&Z^k^Xk0TvcR1xZDR1ZM{U^LIJkOe{?e3T&f}84a1yG&7o;M$4Je5_q&a k7_BHrn-C+can)#EcJG_@Rl9&PVB?y>)78&qol`;+0AO2UzyJUM literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..6588fdd9ae96f885ab381578c4a5aed0d32e9b55 GIT binary patch literal 11607 zcmeHtS6fq2*DXz?N+<$S1Vm8;DNUbwUJdPV{#i^* ze&h9rHVEX*6U0#Ph$5NO>~C`2ja4JqeEj`J8oFKDyZjyebSjXY8!^7IuU>(+u1fd{ zyr&X!EI>MrZ{er08JdYD^J8oIL!ydCq{!=#Ya$gu3aNpPUOWtvbK~z-0t(F1{ivJAA zOcH~cfV)AQ`eb~0I|Ki@KLh!{*S=~vbzc5A?!2HBmhzt?LyDs-%mk)?X z4_d12GEIt`($Qp8y8^G2k%J0lnl#G%(PR{oy8OypGdO3T-bRLLl40W;b+zo;lc-xC18e8kkd0%XxtfEm>j7YcHk zziNQrj1cu~zy$?h_TTCLcXj`}8U7y$HQI-xCUvHE+Oj`Oxn&zx*O=`-a`__*_mnvFzKlcv?AISXew*YQQ&JJo*v{14%uUWqOuxKm4t8$S5oa}tjjaXJ1d{o;r1_sgC(e$XkR(+#x z#}Co%Cd|o9Nkl$_C={|XQ1`g9qcmg$%u5mEe$M^$Ugpil*ob)^-*~^eP>&fjTI$o} zFYii$rAKEHqHFoaS7Ns75d-s1ihU( z3tp5|TaMP`EY^Fs%dQ!yG0P}q{piHW0drdonMua0L<=7aU`kh?|0H`TajvNB&AaJDJcnV?rx#w z<0@gi&J#kzq2@GtJT)HQJBMyP{Ghz&3w6M3MmY<~(L}mD2{E7LjFsrL%H6Fpmy!6w z`})tmK03V`H7R8BlJNqE*pL-JG`o0l{h3mO{?3)p z9_K;=eL6LvwZ(@TGt!5(CakIMF62}TRAJ6_w#|WdK1^@rTL+95@*BAef7x<(8(j46 zpO-xoj;f=Bu$Q)Uo6mKGyvKdP&_fqba4ifW>S;R+mVQ5FGIbR94aH$|C;RJKnV)nN zbtmAX$@g%$0Ys~_?fi%Ffq~2G{bY+zgn$gUY-j=<4`SMo>}uM3mZs9c7jIHG4j2D< zt7f2Sb2A{&!!4Qgy%TEFzb`IqJ}?z<>8-6qM7mUck2FD`)GEtl$nGdhU< zRM-6BF+RfCqi0sv%^W79)@zNyzh2IWsJC@8KRRoCF`TM+FuBOnD}jJOau&Wuwwa&1 z{AebmyZ0i^@AR$62p}vRUM;zSM4JQ7idGY|K-T-HQ;P3yK zgT^OSs88l5M8)UVszz3nVCjs}?dx@hBjVEs4`g89!>lIGf6oQsBIXwQQ+yl_5|Mu= zuTw?KH)92Zn(wu|OI!@lwp54juf1zE@oEZnP4OtHa6_9M90*VC9&(}HwBR5Sc~kqH z+rj9p7RJK?!dnrAskiUj1Z)u&EWD;=gM>KHAS+75XOo(mx-wU@LPnLQYk)8Hg}Zg+ z@#mr->@|~wAC=Wx<^rH~PtA8sE{k8krV3a5_PE)1Ap^54RGKKl+0Te9PD>KA_}Rd3 z@=baCzU<_{R6u74lc5Y9A-tB-?*^~6VC<==6$$$LabhDO#O6N3;@#wsG0z|GZtcEN zWAYN8uH3~-oP5pUTzH=)gHqj8LmOKJ0Ui_r(nzpsl=T1S-54yem*Ms|{(sy4l zlYUv;umWNdNRDpt*DmDaAk!l?E=G>a?h{zv?hY(Aa`Wgl?yctG+d~5+I08X8+OI|6 zxG1?NTYbDI*3jIteN7I_a+1U}NYjNfl`hu%eE+n@6Au%)$slA5)SGYR5>^s2*50w# z4AH*l6YtpC(Qf8FW%hY&VuBWfW)=&vJer`H1lQT<^1XB~Yd61vbciewgZNj-T7~rU zBnJu$2a>0*TI-Gy)8!Zz-Ifd#kk*((UE%jmd-8nNtd?Za@;$e`XSPL*NUS*m^#aM= z{WnjtC-;x(b3R%@+r?3b=d9&f6C#v)iQ4Jhh5GQl4t(5pMXt45(F4En7x4latg27? zvvK%~i;EUHIk_N_Y3cjKa|j-MU$N_a)N^*WDHvP$fMg+lg;OIGsG37N+VN)9+dA<* za+=kMpMCVb-LQ=<>(holYJ12HWRWMgCBRK8(8!srsm2m5;q7F%hJDum+!cnEn zn;#w$Y%6yAWo372y&V-?~4{=dbc_|zw1C7Ro?*2fgDO-HF ztdXX)VAQqEU@##j#1$%BKSA9ek&Vy$`S>)fM&*iO&0y9`qVbZ(wuB|2?N38o%#MwN z^)|Q8ccd|f*!|*KDEzMO#_9B7Z#Q*xV5^70M$BguOP{#?JhX0h35FiwhM&IFw57GzyX_vIg-hl>_I2{( z0G|aJxZw;V#IN12zvev`I}nCSXj}~cWNS9`$>%jlBwRp8I`MjXZAX~{y6&2k#n$hN z@B}yGbN{$#q}Tf^lDisv?lTDGBQ+x#3R@_2S`_N)ErvaV&3rpGHj_ zMmby?5b$wGL_FHq+O(RT{pI~7OTURjQ({%##_JB77*|@TH*yD9$MkwqRZ&qMxF3na z=xlte5+Ht9Pxv$wA8MjF!32{j4}7;@xCb3t$lyt4B6ze_DcYZR_uiJS#XCpiv z=pVp&>cablb31}ShL$c#=AO}w+%2edNDm?DCf$*hE<+&Caye{5*IMV6k;g<+OcF7* z2*Bozy1~6?SC@3vxfSJ;@=raJsCe)VUqsf-ZyJ`aZk*seQKj*^;&J)lVn8#9C{mH4m>T z?KYo@*P&&$pX*tb`JIj!^CC!wSfqJfWdjs~o$k@t9PxwMYdQP8*k7$z3bHez^HR_tN^!>5U+R z?OT%$8H$_fkG8(LOid9Cg_IZj76Jr9cCJVY?0inp4v;5f;s2i{!xxyJd1m6g>aIJ{X5otRbIO@++xgc+t6 zn&0ggi?XQ>zHE`xnUlDDhkA?YAy%025^(@^*Yn5j(z0F0$a&@quCN-VC3=CXd@tAMa05fHJJ4_!frE!RAf!V%J!dF=tdoXUyfIW3uobL zT3D!hK2^-_(x1HfhXUmi4E4XHH#sqxigug_mLce<5zJEhiT}Q2zQFD++;oMa`DG~B%EIEW`8fWkltUf)c(66@Vx2K=C45flZlu` zObHo9!^N_rq59v}E!P}7h;Bud=fkbQ*m*~Tp$;|^Bd4!t^k$2ZiY3RwMXRwj8MUr- z`w^r&!b{nz4SY?YZ-lK)#Xw)J;diZmb*2s9^1IMFU^s(dsG<15QmFMHUdBDW=&(|* zUx`#$d1bF!7f6B;Bg2UqLq3I8gN;w{ z$9`u?e!NdsOh)XhD6{Hc)oE#C4_J`tD_t5BaEtQF{tIQc`=`b0*X?Hx&TIUxWDSGw zU8U2Q;56BLviP)qtNQ-dx?=ikzH~hcfP2l{k-FD@nVKEWmLkXc)^|U@hVSf;S9^Fp zJ}J|8%F1QxgdklSKRM54AInX3+g$&`DNL@}d0CY+9`{>%lUPGrZCE%swA7QKop=9M z;NtO$aUItA&?+btKG3HQ?mK%%<3qu0$DDvX6M4=Nqm29k(Rk6^(&BD&F*JdAk$+-l zxQOU0zSz|;FVJj|6FJ=5gR>_y;^h1{P5YTfzR}0aCZerI(@G>5?z z)4ynyxhhpMYa8*3(i}ynr(*?Ikk>+uHt$%DJ~*5etN?*Qs(sf}^5n9Iu_}y=<6mYZ zgMDi-DWd4JclZ0=^Z8jF%Fi@AOa#{%c2bIJk!asOzf^15?SrPQ_wU?`?mEQI%%uC2 zty2Nurt_J02Kz_7r9j>jex)=rGR=GHZ^$3loC=Zx%*w_Fmo+djP(mkwEn}FF=(Nt& zZ!=G?AtlSW2Tlfz*Krt%Oher71Fw!_E^JhBMcleG_`AlsG1NY6d}Cf;Z3t}$9(s+$ z@|6VJk3Od7u$S4`jOf+=d_mJkD{ChxIa^U{Je3kS>l#;C9rTGlX8WM0CwjCh5aSm? zqOw9qDnlBEy&gMYCoSe)gr;=)wk~F{`*_!2_@;CA*SI1kjB7EEYifIQCtz06ZB6^P zAI})Wgf15FxrBm8&YupMg6dqrJ3txF8g<3MXg&mGAZ%g$EosgvGjHOOigzb$y*uSp zue_|xLEmDgt|DKZ-jH%9X5LM0NGiVL)y7adBYoh@0$*Jy?>5gwSF5d=O%iwSKQ?+C zwy|?{SYqT>>7+%V!syJ|cUIjZ|6h@(eLz6c@e~RDV=Jo9(BGMU`xJ&$x}K*#>D1s6yXbSq^YiaNUVHQyM=J>_nA=vUhP_%x(|7EMyv%@3bhE26k%zxdmmfL!D zb@CMIw*mwF;xV<(BgI{dz4_`LRRdG#nW(`pA~p&UDC@Aa?@(1iu%G;b3mw3)4O-GO zej=SXlf~Wh6M@I=(qzaRj)irYWO{)4Oh$H>UT$4DU1X}Wbxcyw{|P}vO+9YEzyy{` z(EiL%<322$p7o7&vQb30!C`Mm=F{gxE~JlILVr6Ih6f) zbN{3EIUx40d+7|kge*0lM!mGiFwQg=5cXy+gfx%8gYwwl& zqwpBpq%7a=R$1i65t3x*GA#osw^XlfX$jJAFl<-L-Q|BQd|}%b{$qJ-i|9OBtoV0; zsFfr7Hi7TrZHl%*hEm`l;{B9WOT&8R7pG@k_sDtk9Ss2jg-X&kH;#%5h-`3FC>1`C zPETJt=^3>dU%I_KpwPs8?$Th}6Jy|S)%~7LxBf_F+qA+`30_@YttB(yh5^q?zkv6d zYy<&N6YfQr7luO9P~Yg)#CG=kq((PL;~^b5m;87)#=%v*_gXI#ID9ht@^$$)V^=mC zZv)2|*upEdrT4N=jswPXviV4e!j7G@0F0hFF*NnC|ev zk4;(~$HyfPumXHh-tLpytNrp-_77Wy>}#)qYRaoa@KDnSicsg`SQW zd>Zgn$4pI4$-Dmk%OR6iDI8p;XsHBUKf!ftS$0Q8xZ=mEP2BPiXqUbWsGgb5w2PW- zoTrM{Sw@V&9ub0zLkYQ`YxRA=L2DH_1hlJ55!LlJxWf@ho9{P|d5r^#S9tGKbRq^| zp`{D$I5E$NXP)0}0?RTF7!47>O&i6ZU$TH-Rf!TWnw-{DjLEy3?)T<}8S1yyqd`Um znwaR-ye0i=w$r|0v@Y1n{IjhJoD)(&_tj@sgLKv%r5IS!(&e%L`NJ>yFMtq@)Y;so zUtgV9wXg`zu5=x&j!8A!^FP?%QtYaD+<-KGp@D{PVc0MQEw7N>zpS173UdF{BiA)=ZEmL?WuGczLFoR;|l z0|O)5+S)=IUCo$WAgF^1HAFaga&kh>`{b~j)Me8b(HFq8q7A_IyC)kTxuTlPBR-l# zx5~_aII{)&e1FKH%s+limA1eA-i%r$7@b4dDGj@++GrOdsi;?H^yg zjl@N?a1Ty%tkin_E9*u_TT?yJmAiFMGwH;ED0NQEiyOQthI)OZKKsrZ1r<+Wzt?Vw zhP&uGTr+tFiZ^+xow7xlI>%>5gW{v=scwgn(9nl7>FW{%`}-QW=&kw~`WV|h*gAoe z!?F+#1L7b+QE^dD9!vwv%4dg)@}AlYT+H~*>6+#2r!LS*giil8QB9mI+I?sE1DU~! z3QMYrsyeWMy^K357wS8Fy5j>5{o2peYoKkF;knsEPw|g4Eig)!D^C#*8UoH&%8x2? z%vzrDt@d^Ybmt5rQp|vuP1=qQ)*aFR~M5MZVn)b-QK0 zD-t-Yzm$C^B`m4WuI8%m$?#G}HeFoFJNsiv0mw0iRCJElAl4>y_#RgAFMbFB5VfvD zxVnV=7?}Vf%5c5ijZ^|NjNUKrG?dwWb$mlR(Pg6Z4`RjACNY+=RD&(r{mAYJ4yZ}S zmqkcF0_LK=csy#?U>2u2%lzt%E96JMRfZq>8u$@qZuT+Dcz(vtXAOtRN=w(7ydJj{ z=!;OLS-Nkjw%5Ig>37jFvWh+d#P6)#aV~?!2e2@ep2kw6FFP?`-%!v%Iwi9x5TgmM z`K@VB?gag-h*XCqN?)8LgiHF3flml1Bl`{U5wF!wVVW4J@~jVx(GEbvz@>k^06~3< zl@qv8v?k*M$IU*34D5PETUC$^w%`z_n@o!tG@uQ~q zxktP6(cB~o7JU=oZWM%v-qeVL7%B3p3*x-XkIuli^N@emX% zt2JgybYPM(OWB%B5&iZ)-#_V>W+P(xkE(>0jBYMu^oxd1>?=9XEF1OKazcrBfMmH? z_o=FFA>^{TKK2-Y)uOia^c4q{jYN5B;4Zgs0%B=6w}6N}TP}H8x|)zbX~G%*NlUow zlp`Vhu~uqRb2Iivg+k|m#_Jk31h#LUtIqSBcc_BJY@*&5er zNi}Jj+Tx&gk9?ECfb?c|#f3z{t-6SS@1rM5yk7ZxxH5{ESSK9-`rCwgyJCirUtY4y zv3MN!KRD=GlmeqQ_Fz9C5k6(Yxm`ii&1d(RWe|VxJAfPrX70zL<>!M5VrC}9H^E^BA+9XY{5ZRwkk{rtg*f(O?K{eIs^Fr}+c-p#~LhdXf?$1zExUGAulgn z0DHT|ns-E>N0$o8!L6@eVEgA%v>i|=C-lb+%ut0dFG?@FBq&J97QUX`xYXlXxnTCU zycB6k7k5-F)c5pX$fCz*B1@MBwqw422E6w!s4jX?)L-!5Ps#IwwpoIS;Io#MRuTjB)t^O@Y27$e!)A-$xq+uoI7qNt-nY^Cd+FwOPo`1AX4_Ou=jP@37#K z@7jK<69F7t796?HyKH*-X}ru3oy5HsM8JS;KJfz+Fxz0Ja&}v%-u>P{HT9Mj8o@1P zEcW!aw{Y>@U}7TZ3t-CJLIs=;+nhkJ9X?rosL+ucRq=VD=}S(;88jB`&% zlLC*~0XPf0&?rAaC>2|}fks_!8W!lqsoe3*%|Ckfo4YbE#Ks8`otP!^^0HlUf!GpC zP@mz-J9hvMV4tG?CLearr|7%ozFFYyNAh}t3LV!@2n(KHv9dRun$-kGFt6pcnl97R zHwbT^3o`Tu2mh_?F?=xQ$-iU>qn{bT}d|BWk1 zQJ%p^?WSD!RR-4Jdr?LIOr5-u!bT?B346_wGc2(@#O4W#6PM-eWB<0 zYbl70VaJ`tJ~TCp`#;4OE{o}@;e#BYGHw_fLA6;2`mU)wnwn3+G=izTDF|BoNfW|i^- pF8({+|E}(TH^cvrp*Bw<$ND$XOtEon0iDuhPao?*V5+t;{{uE;Uv&Tg literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..6588fdd9ae96f885ab381578c4a5aed0d32e9b55 GIT binary patch literal 11607 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0f4995f7ffebd6927f20855489cff8703e62ed GIT binary patch literal 19791 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

n8<_i(3ShgT_ouycJna@mWp@hfn=c$KQselH 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..225d4d9ec167505f7e1e5a201845811918a2194b GIT binary patch literal 14772 zcmeHu`8U*W_`XDxiprWjrR-agy$BfzLw1HF%UEJeW1o~L%XpW4PZ~=Yi7|{d$|TvB zVHj%+#xCm^zAx|3Ip5FU@HyxGgX5f+=QZQGpZmV<>$;xjd29O6;M|$ZXBZe5&Kcgn z2WDV6@#Xl3^%U^r=R!s8R*@GBj4v5xuKv&CPYfqgepXkwGaV0OjDsDIy(99Dk;(eXXxqmN$Aehq zyN(|+MBF>W;q=yvKUV*EkVx}wmVZC`qQspS*S>m7Up^l6f?-DBzYqQ|6iokR#eW6z zA6EPaoBtO&h!c((pDF{>@*7Yfqpq>DB}szz#yq%Aizb-Hotn6K5|uPd5jU6Q1Zf5C3^lII6u^CW<5l|t;#@(h1~(6Uxi?qdq zYMH}LzsLPUy=e(9PwZYWbUZ&YaNT*NZ4C}sN_1Rs0epn{r9X{AxRnA9Q^`~iTUG25p zkk}-}aOVQLl4*IjM<*q>mv7Rbw=z>2I_@PwRon6?TW?+SCw!G17|9im(r#DnVhQks z*ehvh)FaK!`)71m6OksEf573t17sI31XjFgKOHT=C?_$=JoN!;Cxh1jy>TD?`SXuN zXQw9KWm*kAV5ajXB!F;M<+87@1m~eHPRkqKgq%ztQW4T}YkmevX-8TIAP{z`_WtcB zb>8S2&++ko&Ke&l{dGxH7`U?5#0)T{w`6WsUHEI)w+R^n?lp4`6X0LDPZis4HeYtG zsh+$IdoXw3+?zLw$2J9C+n$5j@AUme$qIb@2=N;=)ppQTFa{#;*T}N!cEiW*EfEOJVEsHE#Qa zt{z`g`2*|faHv^-Kbq7H(fJIOw{l&iDY84#AP9& zoZ-H{z7lnD)>bL64#i+<&6I(#%%7#z`L4TyjOAC4XOLiaiMMp1++AWe{_t)|;J3oe z4b1ka;Ykn{cLNI~;DW5i*+Dr0LNLxJtdFYiiS7UOx+USkw%KMqOVh@zoNzChEQp*6 zEYzmcu?@C%o7A%tesKxvcR?P1C4&oN^F%5ETKv>bd!K(oV=PVk$J$A{>077%sBdpW zmIsH*>#k_WtiV2n#`}aFfL0d-)eDwYoLiof6$~+(^ffbzYvVj!k#=UNe8Rt{)W$rw zhrH9~J?fjL?Dw)4$$9hgx9e=oJ5W5#G`hKqiSGcq?h^dU7#DbSJt;D-xIXks; zp@*?}7kpFQr-k=0lbDm;y@E=8tl_=(&*Bfi4Qg%&ezvP{rfJbka=-j~W}ILs!9FBd z={M8X<pz>s%*OqUO~S!_@ww!k7t2X+7%xQ}W@HRna*z;nZxYC?t$76R zI%r-}*k7A)e2P^IaJ`aSSJ_-Nwu{sc(1=8kb1EH%I=MHXQyKdb|$9yC|~< zMw@uRXXJW3j|Mc5h7!5zdLefh*^)X&lPvgJ-yKM=o6hAA{JN8DG>6xz2yp8=pP*cjJkNt z#|xv?nQ&^NC68Y3DG7A%PGj(X)VN|r;T_oj6IRm7cd7ixjxAf zVa6%atbZX|6v$kkqAAF@?N7ci zNavs3kk878K952|LJn$^wvjh?!=E8#DMHR)p7Jp{CwSXs<6V-#V%m5YdZZF}ch_G{ z33x-1(j}4R-}Oa9oWo{i52-h}iT6eQGjyljg3GWn9rHsbITY&jf^gMv!(_S%J52_)Jl%pMn3v~g%yW_;wS_*8=^ zi7q%Ts+>_;F}{|*kGOM%tyWW?ohpSW~_@%O!0TbC2v z>?yUVhM!L+TcIifh~cbs#3HIV=$j2Qu@QvR!jvetT>ACe0jXHkZtr5lubpShYNn8t zZvrZ&t6G|vn82*8QWqN78niX{|7PW%PbZYfwa%Gh@8I=dCo(;J>{iNqBdn zui;(l?_^JrTISoD`IUWZL*}ZA^?BCkG0{NhI~LJAZT8KZ`E~XNLN1EEGyE*v!ngD3 z&&dk9Vpw+NR5ns>_78&KXXS_PGCV$g*)AGG%+9=|6m%HmXCOOIC~fq$FXUOo5D%V4 zqm7bCr0EiV??n31Cf7t5K|6Hm0Fr(jEOQ`O7IDEY5g^Um6-l`GoHzjqg#gMvJdwM5 zsP14NQzrz~o=ZDPd%$hAc`%3$^})2Kty`2N;qS0I|E(Q}@*aJdts1n^9kA1@bbDhQ zld@p~r_QKN?38!U`WJ3C$X&YSiO_q&Fv@kSjhAhpeiHK%%HMEibVxgN`VT5)V*cTf zlIh-kE9e3ZXe8vx`^$f-=lZ~j3Ny#ODyNe&#wSj-X$Xc>$7*3%t?vDA?BNdkYtbgw zzBXSw+)?mMM-{~O-y_B2hE;b30IrzJE^*BIi-(yVK?XDw`#O^&Z&{c6^H7L(nfh(7 z@%mcmuOtag@z~AQwVbROUgnbab;9Rr9CAJmRsA%-8~suQKMY^)2q50PZBHLfDfqZu zg59lY6&r+LZ>CNZk1CO|01z9U=5Wg5DbIL8iB70Pp~Fs&2RaYx&v?)3+@<;OYreu7 z;cd^5#WP8L+6Vi^f-;EoxRF+Dif|PB?G$*?H?`?ld$mtVwvfp~T6sA30G;4a(+6Kp zKLvZ!ss3C*%ey5q`azp%Y%>P1R_Y`Pw_PGU2et9m0V~RUyitoM2)#`sOLLu>M&<<% z-fFY;H(sfjVs4W9L&l|*LQRHz#_E?(_7^;eTV*Y$&(NlJ{8cF$O;1L z1TY%gQHbpIeHLE_wIX$PIO`G$KxFmcxLe#s7F4Lwj|1t%h*V@_dzrp2^^Z)1v1GvXNFkj|C>sTH(KARs{SU8XR*Sq`8U585Tjl zAkzHYAfcj-5ssdldmTu6;>7V;-JYPhuNc6q5AS$SDsRz2ulP$-x5TNWOIYH>^U?Yp zImd%f?PDif#hSc)Jy6=IeftZmt4DY2>@r8B>P3oX?Qy@|AhzE*kEui*bip?|C-nrsIUmfot#v0Bzv zHzcf#y#r5WxaCMtwSU6iDcwBCgm)Ux?jFY2YOjm^6bhctJI%%;dovtVImE;%x~9m; z#9P=_BKsjJ1087%_20PFvexx-Mxd~6xKmfxA@P^7os5wu@&u8+RULK;Hji%bpWhVSnf{H9%{m;`_M+0!mKVOYMQHS zF+Dgu$0scHl3`KZj_=s{LTC*tCxNZs(kOW?)axk3GB(AvpEY&+gDo)j%) zTT9G~?oz?uxpHyZtvac25wjYV>7%~sK#;??eV2;)$W`qvEFC#Hm@0b{o-h94C{@$b z++T$0P?|%p7bGzo>cEapYWnErei)HR%2D8j<#S8}TymY_-P+oE$-FYwBoVDzfG zs*0+()8MErn%fPXkd(~%(6^Q&OM$K1S=u5fYZ|_JRQyh+v=5-l`K8CRHH~X}#25HK z01UKKZ9ZEH==Z)#Ns3#U3Rq__nV; zqua|9*|(irYQ%S zvjQq~{k3eSG0LHYxGK#ROS1ABhjr6g1mFWLv*NIu8mm(}hn)tjes$YQqYqFfGK^{f z5kOtMK< zUVKY4lcV=<5X!YSUN8$Qt3K0YMM>c?+n371v}-#2e&=w03E!Nnd}^He^sk6*t+Q>`)89tMJ@1u7VIClm&ZG=I$_t}Rr^n|;9+sk z$?+X2*amvdjPiYn%z%V4pxwr)T6=1Bk~Zsg?TKO5JG*{lC929B6UPIzp^77N_IaY; zz!iBCkmc^N{u(Y3*NiOxjPG^Ph5Q7JXffXd-^Wk{2a>v>4O@c^Ug?|Z`3XTcC~D$6 z9Al5|hHmBseS5RshEQ~JfAYt?b9O^JQ-HWbC(in-lHL5;Z^VROLu>RtLBaWzbJarT zZsrq8(*$yDnF0XG=OD4zX5r*i6AXr$`@L<6}tq+h|HORcm{}2vxhm z4;g!MECAbdUNG>pJwka%b2Oa^*$J7`b~W?}DBK68G?vs&K)6jTB!DG(^d!Su*8XI3 zYeP8hdA^3)i6feNH2+Esy>{O9>-btFcf|};OiPtR&Oq6(9<$zc-` zLUxdvf$J6Jc13j42c1~csAgFp=j*<=eW>6V9#;=Mh(vKO^KZ97i)d4WKeAxeE5S+N z@<*TpLr`AW3e9;p4`{NQbZdmBoHtIP8mU;dN`d$QiL`{l+C51mPw`IUxU~qqnujrp6fREqU5OcZ+VMUy;QHFD$;K>dqa`jJLABJ_TuP^Pr~Ac!^BYLXIh-kYxYW~l zA5B^dxBOj;gvv+HQ~5Q}m6e_I-j0bg=CLn|8BRQv)TgJNDYdWL`ngy6xA6t7MQ1TQ zz(K(+H?QtXyk?kh_Rt`P{^Iv;4YhhpNHxSiwU?rYr|wO_9XU#2-XU`2bu-SgYVQz? z58XiaV5w>q5p$sm!MfVZ+qw6n%_Gsj6Vv88 zyV_0kZ^ebOLr9@Vyn0Y+2{$T6;p|`-$|ZiU#;JWbtJc@Fy#+@W-H%J_A(^umBPq+bl35v|pQwA0?JS?KDER=aJ_>CH;LlDMa*hEUa@w4~TbsjT1s%gc#n4 zbRWuY-FdZKo5hb@zC&F(!V}QvBYFV_uCM#fCGPDV4t=PX(Gl$P{o*NM$1pfWm6A0> zmAx;)HF4gMmYl;A+0dlr47}{97Wb#|>NfUi&aiGz(UqwE^&@F_D#=D%7#Fp3@ zG3V1HwHlr;&u-5B-iurj7!Y0a1lV19fijHmwAZrW{@N$hT#50i!Gkq*bk?RBS;3k2 z@Rh3#WT*_;=<`0w|K{pRUgS0xB_lNhRP;v$N&%nU?hQEF{lZ5`VjUM3az(X zZrTw!`|5|U_VUjV|Q6`ToK= zwyxmSx>atSs)a6f`P-r1A$A?<_^rDfp+Bp=^Q~f}avbRmC+9jfO%Uf7Ifl&vV9I&# z<|r0{r(|a$Ivrm>x_n5;JX7oI@$f3uagAONg+k^hqkA*5Tr%yQHh7Hqc=`5dL;f~2 zqo3=OA**3tZSM?(O5wt-b-AHm_lklxb5eBNwY9`^X1df@bA!hG47_>*^3O(SiUV>@ zAy{1bf++}lMsyliHGMR=|27FsJ#~t-voha<@9g{e^XDi3+ETd9J{#Lw{n|k2xI&}B z-+$vA9)fw0FS%;MBRn%RJbWGbAg8^HxxtG8da~Pj)MND-DK%Mf%X$ z;H`uEd&WNwaBzZzXiHNt(IeKUX?=fJhLC+IZBub&r#fs-E2X=3^SSN8$CsnNO<~*9 zKVsv@LAO-3u&i+ffIP{_5P&{l-v1vN{+v~`s(g6!)fWPMNdo-K)Xk54M6dtSEoGLx zlc|DcVBmXvd=>!gj-0|Fp8O#@bapoNs2;N2a^}?ZFf1079gNy}R{M|k0|ZL_C}09k z5ZcS=KUUn`Y>gS+bw?tRJ;65$+AE6noTLG-u)=gU%|%>Z-a@qmTN{wv&XjDsY;KHx zzwKr`XiFb@ELwgfDb0GA1|#RgiGL@54X$bg9F8~1@6FK0cT$vd5##M*8L;8IycmUp z#k*^rzK*vxb#kgp4IhjIa>(!TUuLJep5x;gt`CBF0J8d|4y#pa3tLNP5HY>L4!L^C zBtUiyF>cw>*C-WQ)6jJE#ZXW%Vc~c0+5rKEsk~FDj5*!9rbY0p%GI+hr}4~gb`jwT z!o*vb4{yEJ>6+JiD^4in1`1uIxlJe81y$VK+|yHNmzjCg{^Y%F{`xvN??cGlSAP$7 zyVk0=v!`B}l2_D*rnAcy@@6}Dgo2w-te=#^3a4*0=S#7Nbc(VGjgM3u9niuy8jl9V zP%g`bR&tTx&;E1iZqFSMWOzO@HH@qW$a`5poFV2r)QAya;3^CT1=xT4MwxXWI)(2M`HaIclD5el)U31j9vp7V658BQ| z`4>NX|F7nfW86n(%((t2JsCk^)|cE8PBGeJPk$i|!NGg)Ru+!sskgDev=bOT1nf{x zu>;52$pa+Ld2x9;ySKM@y>!KI8ZUp=p%+KXul2(lk@6G$+;wMva%ol zZT&~}1qBcPO^C)CI4Td{_x1Y-p0KWgbkNG}Z!{uYf)cw(zC+Ua*VTMU^~>W6{o=yK zb>fR0yuJVe22xq63K!R2PJ)O-O-Sd^wGbhPux5qm-wt`V-hunrUTW8%D*L6*LT)>* znr=;FhBjQ~4vunia)KNj985ercS3vnCJqn#5-0Y>$t;$?q9}v@m=gM;RL-2+(IM6R zVOaNQfHp+Q20)2=N#F}hT7F-3x%MH+Gd5`vcUG$?<_dO(4Kc2O4q2bR9^M{;d2%s!7GtH z^}i3h4N3zfp|g2?>8~y`wdDi2BvjXu5yup&ec(o@s1jb|6|TqGYJM!SZ-lsg zbnQq{H4qH@8>ULsv?x5R?YTJJib^6%+f{t@=slzn5YLI>PkzZD#$dgfJc9XQM{Odk z#Np~gb(Y_`A(boP08P^Xy4OsFRB8MD54L4pKWEvXhmE5)Vt5Tdg0iW zmBzF2ZO_scJ5gd)+L^Jbocg_&3FBMQ&sJKhd0#fC0r~5q-w^@vj<9W|d5BUPiBHDg z-I4ZrKD&H8Jyp?rq0ai14;wtzFu+7o zy`9bKu9%h#KIJ;Y+-l`K%}sdkJCt2MM(0=%{x|w0Zf&lGx2A-ob28>ZTc3@|0fPbr-?CjmfXcrxQ z{h_C4%t?J(RBav@r<#JMGZ>)<)FU}mF3YXVvUnwdJty-0$ZayQZV$5qVv|VSQn9)? z2x#OQ`j1CP{_ySdST}&Y;Nc5@WvKC+7eWhmw~*O`7JpJRGh5yW)Bam z2Rm@wBV(XP!ekd_v%l(gi%rXXP41>1ZZEjjeT z%N2!}H})H3X8D0$T^^wFa`K!WvB4N|7S4JVaL0{6h1P}dn(s7d72e8C@cmE{HkeI` z-kF7ULE+cWyqr8cT79I4J46yCuIX#}Z#@#U%7&rJVR0-uK?PfDs<7(x`mYus4R@Qq z`PeQsXx^!abrB$Cqh-HDDO`AS1zwq?LwoxRRQ!y#y?Yt+){S4qNU=^yu(K}))%C;xzl0Jka zSR9g|!m~-*xnCMG9u!2RqqaXfS`6Ej7_UkuPfLj-_Vbf6ZbS}CM)n+Lo=XmHt|;B* zx@IM`Vv+Xp>KXSVg{ywBQoe|Hw)AR$(Q>+UIYn4b(GWC}pO1UKOlpZs4>>oSa+vtf z%#8lK-Ot`e%j)wqvw(at*U-Jj?e597wGnR_87nCJ2abqHprB4ec{^@hn*SfqsHWqI z#UMMljkCRmeF z;babM8u`EkNB=xZ<1He(;do-H0dtG1R^DaakE1zThKku+*FsP;S%v2OM8G@S2Yd#| zvEIg5ba{Dr;)kA`#j;*C2G-M-U|n8u2Q5^O1~yez_~)a05inF(}@$OIHyISSZ_WSCANrGEaoTKQm6}N!8BzUo?95!XY5wCY)=qn}%*v|G$|5-G zsqn#+|G7nBcb4gRsgl0LU}@5P;s)CHYH8%~Q$tl7inU)ncrjMz4RW9?fhxJR?_vC7 z+I?*L*ArXM3&UbS4-|5C>(dnNQL)g(H`E5=+Q-hx?Rtu?dO}u&^cE4|nADI)>${+l zp7bUf3Cflly7sD795IMItmy>*x{$3}bXQ~nDDgh^pZi$moTDzwAJw1G>i18Z)w%6e z_M7QJcY=zUdc~KzbeP*!RFz z<+a+7QnIy^(Zr;kI1b0_@XmU()i>3@iy5ED4CEvIqnx0WXwqs>^qG zdNgJEA8^&;0O1y>_+7M6aFNSY%WK=6M+2I&aMn0C0B|)B(b#zW3-B+?>DpB?LOOI&@eaZ>vpN|wX%XN+PWF!w~>H+ zj753UM_q(0dfPMXIcj__un9;-yaUY`&4O2y#0kQsG&dXy zD1;TBVAr0yJw$wP-nv``BhAf*bUR-AzN>d$po=q?epolNwMf~I?iaN;=Vc%~OTM|T ztE+GK^q9Jt!#0)4gbEF$2G+S1wV>qo5D=_`T|>>Q7w&%q0OdQTV$ST+u$H1?ZN7DI zTlHVLNLI1gvK8tw$+soaEQrf;rzK&|fqEvhnhsx3w5G(d&nVXGcI#kENhvQhx&5<{NgVj~nHF~_= zc;_;J5jUSFYx1!T(ATIz1pLn@PMw?McE2b{AH}&JSdheZ@ZxEsUtteWX2llgJv}{b zef|yC4Io?UT&6A`&Q*=}-JSQymO&2iy1aI- z`t|jXKs@P4;&fzSzSOMnzbo>;FP1JXq$`$J!WyojOVo!G1~#(11*%s5n!-%#x z*r|44?L}kXP-1~&PdhhLK}Y{C=U0F|xaM^%^;%C>oC{+Sy4^rmNQ`(SXK&u69@3=q zA~_kX+c$|4eg|eBNrBh2s}<>qNC9s` zhws6DpA~20!whMUfn^jvxn7zW<2j zX?ij_K=phmE0@zt&yS7Vt&*9wisR{IU{bvDfrd-EaK8F&Gvtg#{o2@jXqXiN-DFF9 zXi)q2D?1_1cf2HN{vEh#c`4BBQ}sD^_D)|YlsaJ}(_|o0ay&!z?nW##Ant)&O9(`t z2 zOQEa~gTlHhOsZrS>H`BlS#+}Hy8?&h?(P(|Ztd@(?N<_0l8}CG=g`yT_hOCV6HQ-| zx+iW#PFBh}SS%_6_bOb!E_(%AF{Rval@r3`h<^I=$yFV6!&j%)JwSJyr@PLXHaTXP zEpwg8`Ko~38#!`7|0DAC9BXniR^e2HG@!_AmefLyuWNvTl}3Mf>vaOSr1A3@wSHhK z-Hva1Fawi4lkt=L_s!|5D?>diW1D{)5W@^ZlXui23)`qkv9Bjq|`YOa?=} Lhxaf#PA~r-*QsX7 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..225d4d9ec167505f7e1e5a201845811918a2194b GIT binary patch literal 14772 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 Lhxaf#PA~r-*QsX7 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..d2ffbff --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,18 @@ +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/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..5f5d39d --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,6 @@ +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b5fc5a7 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..f4d9899 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,25 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version '8.2.1' apply false + id "org.jetbrains.kotlin.android" version "1.7.10" apply false +} + +include ":app" diff --git a/assets/init.js b/assets/init.js new file mode 100644 index 0000000..3fbc758 --- /dev/null +++ b/assets/init.js @@ -0,0 +1,576 @@ +/// encode, decode, hash, decrypt +let Convert = { + /** + * @param {ArrayBuffer} value + * @returns {string} + */ + encodeBase64: (value) => { + return sendMessage({ + method: "convert", + type: "base64", + value: value, + isEncode: true + }); + }, + + /** + * @param {string} value + * @returns {ArrayBuffer} + */ + decodeBase64: (value) => { + return sendMessage({ + method: "convert", + type: "base64", + value: value, + isEncode: false + }); + }, + + /** + * @param {ArrayBuffer} value + * @returns {ArrayBuffer} + */ + md5: (value) => { + return sendMessage({ + method: "convert", + type: "md5", + value: value, + isEncode: true + }); + }, + + /** + * @param {ArrayBuffer} value + * @returns {ArrayBuffer} + */ + sha1: (value) => { + return sendMessage({ + method: "convert", + type: "sha1", + value: value, + isEncode: true + }); + }, + + /** + * @param {ArrayBuffer} value + * @returns {ArrayBuffer} + */ + sha256: (value) => { + return sendMessage({ + method: "convert", + type: "sha256", + value: value, + isEncode: true + }); + }, + + /** + * @param {ArrayBuffer} value + * @returns {ArrayBuffer} + */ + sha512: (value) => { + return sendMessage({ + method: "convert", + type: "sha512", + value: value, + isEncode: true + }); + }, + + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @returns {ArrayBuffer} + */ + decryptAesEcb: (value, key) => { + return sendMessage({ + method: "convert", + type: "aes-ecb", + value: value, + key: key, + isEncode: false + }); + }, + + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @param {ArrayBuffer} iv + * @returns {ArrayBuffer} + */ + decryptAesCbc: (value, key, iv) => { + return sendMessage({ + method: "convert", + type: "aes-ecb", + value: value, + key: key, + iv: iv, + isEncode: false + }); + }, + + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @param {number} blockSize + * @returns {ArrayBuffer} + */ + decryptAesCfb: (value, key, blockSize) => { + return sendMessage({ + method: "convert", + type: "aes-cfb", + value: value, + key: key, + blockSize: blockSize, + isEncode: false + }); + }, + + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @param {number} blockSize + * @returns {ArrayBuffer} + */ + decryptAesOfb: (value, key, blockSize) => { + return sendMessage({ + method: "convert", + type: "aes-ofb", + value: value, + key: key, + blockSize: blockSize, + isEncode: false + }); + }, + + /** + * @param {ArrayBuffer} value + * @param {ArrayBuffer} key + * @returns {ArrayBuffer} + */ + decryptRsa: (value, key) => { + return sendMessage({ + method: "convert", + type: "rsa", + value: value, + key: key, + isEncode: false + }); + } +} + +function randomInt(min, max) { + return sendMessage({ + method: 'random', + min: min, + max: max + }); +} + +class _Timer { + delay = 0; + + callback = () => { }; + + status = false; + + constructor(delay, callback) { + this.delay = delay; + this.callback = callback; + } + + run() { + this.status = true; + this._interval(); + } + + _interval() { + if (!this.status) { + return; + } + this.callback(); + setTimeout(this._interval.bind(this), this.delay); + } + + cancel() { + this.status = false; + } +} + +function setInterval(callback, delay) { + let timer = new _Timer(delay, callback); + timer.run(); + return timer; +} + +function Cookie(name, value, domain = null) { + let obj = {}; + obj.name = name; + obj.value = value; + if (domain) { + obj.domain = domain; + } + return obj; +} + +/** + * Network object for sending HTTP requests and managing cookies. + * @namespace Network + */ +let Network = { + /** + * Sends an HTTP request. + * @param {string} method - The HTTP method (e.g., GET, POST, PUT, PATCH, DELETE). + * @param {string} url - The URL to send the request to. + * @param {Object} headers - The headers to include in the request. + * @param data - The data to send with the request. + * @returns {Promise} The response from the request. + */ + async fetchBytes(method, url, headers, data) { + let result = await sendMessage({ + method: 'http', + http_method: method, + bytes: true, + url: url, + headers: headers, + data: data, + }); + + if (result.error) { + throw result.error; + } + + return result; + }, + + /** + * Sends an HTTP request. + * @param {string} method - The HTTP method (e.g., GET, POST, PUT, PATCH, DELETE). + * @param {string} url - The URL to send the request to. + * @param {Object} headers - The headers to include in the request. + * @param data - The data to send with the request. + * @returns {Promise} The response from the request. + */ + async sendRequest(method, url, headers, data) { + let result = await sendMessage({ + method: 'http', + http_method: method, + url: url, + headers: headers, + data: data, + }); + + if (result.error) { + throw result.error; + } + + return result; + }, + + /** + * Sends an HTTP GET request. + * @param {string} url - The URL to send the request to. + * @param {Object} headers - The headers to include in the request. + * @returns {Promise} The response from the request. + */ + async get(url, headers) { + return this.sendRequest('GET', url, headers); + }, + + /** + * Sends an HTTP POST request. + * @param {string} url - The URL to send the request to. + * @param {Object} headers - The headers to include in the request. + * @param data - The data to send with the request. + * @returns {Promise} The response from the request. + */ + async post(url, headers, data) { + return this.sendRequest('POST', url, headers, data); + }, + + /** + * Sends an HTTP PUT request. + * @param {string} url - The URL to send the request to. + * @param {Object} headers - The headers to include in the request. + * @param data - The data to send with the request. + * @returns {Promise} The response from the request. + */ + async put(url, headers, data) { + return this.sendRequest('PUT', url, headers, data); + }, + + /** + * Sends an HTTP PATCH request. + * @param {string} url - The URL to send the request to. + * @param {Object} headers - The headers to include in the request. + * @param data - The data to send with the request. + * @returns {Promise} The response from the request. + */ + async patch(url, headers, data) { + return this.sendRequest('PATCH', url, headers, data); + }, + + /** + * Sends an HTTP DELETE request. + * @param {string} url - The URL to send the request to. + * @param {Object} headers - The headers to include in the request. + * @returns {Promise} The response from the request. + */ + async delete(url, headers) { + return this.sendRequest('DELETE', url, headers); + }, + + /** + * Sets cookies for a specific URL. + * @param {string} url - The URL to set the cookies for. + * @param {Cookie[]} cookies - The cookies to set. + */ + setCookies(url, cookies) { + sendMessage({ + method: 'cookie', + function: 'set', + url: url, + cookies: cookies, + }); + }, + + /** + * Retrieves cookies for a specific URL. + * @param {string} url - The URL to get the cookies from. + * @returns {Promise} The cookies for the given URL. + */ + getCookies(url) { + return sendMessage({ + method: 'cookie', + function: 'get', + url: url, + }); + }, + + /** + * Deletes cookies for a specific URL. + * @param {string} url - The URL to delete the cookies from. + */ + deleteCookies(url) { + sendMessage({ + method: 'cookie', + function: 'delete', + url: url, + }); + }, +}; + +/** + * HtmlDocument class for parsing HTML and querying elements. + */ +class HtmlDocument { + static _key = 0; + + key = 0; + + /** + * Constructor for HtmlDocument. + * @param {string} html - The HTML string to parse. + */ + constructor(html) { + this.key = HtmlDocument._key; + HtmlDocument._key++; + sendMessage({ + method: "html", + function: "parse", + key: this.key, + data: html + }) + } + + /** + * Query a single element from the HTML document. + * @param {string} query - The query string. + * @returns {HtmlElement} The first matching element. + */ + querySelector(query) { + let k = sendMessage({ + method: "html", + function: "querySelector", + key: this.key, + query: query + }) + if(!k) return null; + return new HtmlElement(k); + } + + /** + * Query all matching elements from the HTML document. + * @param {string} query - The query string. + * @returns {HtmlElement[]} An array of matching elements. + */ + querySelectorAll(query) { + let ks = sendMessage({ + method: "html", + function: "querySelectorAll", + key: this.key, + query: query + }) + return ks.map(k => new HtmlElement(k)); + } +} + +/** + * HtmlDom class for interacting with HTML elements. + */ +class HtmlElement { + key = 0; + + /** + * Constructor for HtmlDom. + * @param {number} k - The key of the element. + */ + constructor(k) { + this.key = k; + } + + /** + * Get the text content of the element. + * @returns {string} The text content. + */ + get text() { + return sendMessage({ + method: "html", + function: "getText", + key: this.key + }) + } + + /** + * Get the attributes of the element. + * @returns {Object} The attributes. + */ + get attributes() { + return sendMessage({ + method: "html", + function: "getAttributes", + key: this.key + }) + } + + /** + * Query a single element from the current element. + * @param {string} query - The query string. + * @returns {HtmlElement} The first matching element. + */ + querySelector(query) { + let k = sendMessage({ + method: "html", + function: "dom_querySelector", + key: this.key, + query: query + }) + if(!k) return null; + return new HtmlElement(k); + } + + /** + * Query all matching elements from the current element. + * @param {string} query - The query string. + * @returns {HtmlElement[]} An array of matching elements. + */ + querySelectorAll(query) { + let ks = sendMessage({ + method: "html", + function: "dom_querySelectorAll", + key: this.key, + query: query + }) + return ks.map(k => new HtmlElement(k)); + } + + /** + * Get the children of the current element. + * @returns {HtmlElement[]} An array of child elements. + */ + get children() { + let ks = sendMessage({ + method: "html", + function: "getChildren", + key: this.key + }) + return ks.map(k => new HtmlElement(k)); + } +} + +function log(level, title, content) { + sendMessage({ + method: 'log', + level: level, + title: title, + content: content, + }) +} + +let console = { + log: (content) => { + log('info', 'JS Console', content) + }, + warn: (content) => { + log('warning', 'JS Console', content) + }, + error: (content) => { + log('error', 'JS Console', content) + }, +}; + +class ComicSource { + name = "" + + key = "" + + version = "" + + minAppVersion = "" + + url = "" + + /** + * load data with its key + * @param {string} dataKey + * @returns {any} + */ + loadData(dataKey) { + return sendMessage({ + method: 'load_data', + key: this.key, + data_key: dataKey + }) + } + + /** + * save data + * @param {string} dataKey + * @param data + */ + saveData(dataKey, data) { + return sendMessage({ + method: 'save_data', + key: this.key, + data_key: dataKey, + data: data + }) + } + + /** + * delete data + * @param {string} dataKey + */ + deleteData(dataKey) { + return sendMessage({ + method: 'delete_data', + key: this.key, + data_key: dataKey, + }) + } + + init() { } + + static sources = {} +} \ No newline at end of file diff --git a/assets/translation.json b/assets/translation.json new file mode 100644 index 0000000..0e0dcd2 --- /dev/null +++ b/assets/translation.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..7c56964 --- /dev/null +++ b/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 + 12.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..8eaa995 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '12.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + #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/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..4468bc3 --- /dev/null +++ b/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 */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.wgh136.venera; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.github.wgh136.venera.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.github.wgh136.venera.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.github.wgh136.venera.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.wgh136.venera; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.wgh136.venera; + 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/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..8e3ca5d --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..d236fa2 --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,80 @@ +import Flutter +import UIKit +import UniformTypeIdentifiers + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + var flutterResult: FlutterResult? + var directoryPath: URL! + + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + + let methodChannel = FlutterMethodChannel(name: "venera/method_channel", binaryMessenger: controller.binaryMessenger) + methodChannel.setMethodCallHandler { (call, result) in + if call.method == "getProxy" { + if let proxySettings = CFNetworkCopySystemProxySettings()?.takeUnretainedValue() as NSDictionary?, + let dict = proxySettings.object(forKey: kCFNetworkProxiesHTTPProxy) as? NSDictionary, + let host = dict.object(forKey: kCFNetworkProxiesHTTPProxy) as? String, + let port = dict.object(forKey: kCFNetworkProxiesHTTPPort) as? Int { + let proxyConfig = "\(host):\(port)" + result(proxyConfig) + } else { + result("") + } + } else if call.method == "setScreenOn" { + if let arguments = call.arguments as? Bool { + let screenOn = arguments + UIApplication.shared.isIdleTimerDisabled = screenOn + } + result(nil) + } else if call.method == "getDirectoryPath" { + self.flutterResult = result + self.getDirectoryPath() + } else if call.method == "stopAccessingSecurityScopedResource" { + self.directoryPath?.stopAccessingSecurityScopedResource() + self.directoryPath = nil + result(nil) + } else { + result(FlutterMethodNotImplemented) + } + } + + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + func getDirectoryPath() { + let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [UTType.folder], asCopy: false) + documentPicker.delegate = self + documentPicker.allowsMultipleSelection = false + documentPicker.directoryURL = nil + documentPicker.modalPresentationStyle = .formSheet + + if let rootViewController = window?.rootViewController { + rootViewController.present(documentPicker, animated: true, completion: nil) + } + } + + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { + self.directoryPath = urls.first + if self.directoryPath == nil { + flutterResult?(nil) + return + } + + let success = self.directoryPath.startAccessingSecurityScopedResource() + + if success { + flutterResult?(self.directoryPath.path) + } else { + flutterResult?(nil) + } + } + + func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) { + flutterResult?(nil) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6a779d31b4b7f6e0c2f8bdaf24357a15b1463701 GIT binary patch literal 1055 zcmV+)1mOFLP)Px&*-1n}R9HvtmRoETRUC)Encbb)owZE~v1l~WCdz|vK4~NvWdSiIt)MAI=#^@l zN-Ztc+LGd}R!Y1CLsu+eDaCFi27|#1RIms|tXC9Y42jXGBn2!Hx-)y59W%Q&B7t_g z(+3~s|FqeibM`ym`JMA0p&)R{;D20#188%19D_Cm;uv%c+BINzypuu4;Dmu2t{2iD zN6#CG0^Br5ijYWEt{jiTpmANQPkXTd|A)bJbdKEtZPG?1Y>F7t5svU#1pF|N*YzhF2c|*g&%%OvV5(EK_)U&m1RJ4qI>Ri z(ckT3)Akqx`;!cZ6||_q{8cK(6%xIY!N|LQE{?;33Y90zJk*xTEMGg$kEf@?`uF!~ z0V+O$1KYiT$inIffxF%GZ1mFkW{l9@|5|KW0fjX?@~B_!JxQaB^I}4 z&%~S-pgEvufs5DMe7xEhCpZx2!?%36TmprUtLXp4%5BDBr;l@EP_j;AL!Cs$GKs3T zafZLKZZ9i9FnB-cCodNsSff%}=w@TRmlaJKU!Bs^|85>Aa}iHMU=XNOktKnnZ!4TRn@VqIS+R%qS~-2K z>>tW3U^2I~4MA;NI05OXj=jYLcmLSIO~XzYqIIGp6uem`!};Qk5?RkPOGW(+WsMK>=s zdFj{^Bm6;vBmF+&34uk`D)o!(`7khZFL8hur!>-IKt4L0w(sVN-9MOA&kavTSu$(=#*A+0Nk1U|f3^2hgrz$Dm`-t^vE_oebJF Z_&1j=r>I?>VQK&X002ovPDHLkV1flq{#yV5 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..6a779d31b4b7f6e0c2f8bdaf24357a15b1463701 GIT binary patch literal 1055 zcmV+)1mOFLP)Px&*-1n}R9HvtmRoETRUC)Encbb)owZE~v1l~WCdz|vK4~NvWdSiIt)MAI=#^@l zN-Ztc+LGd}R!Y1CLsu+eDaCFi27|#1RIms|tXC9Y42jXGBn2!Hx-)y59W%Q&B7t_g z(+3~s|FqeibM`ym`JMA0p&)R{;D20#188%19D_Cm;uv%c+BINzypuu4;Dmu2t{2iD zN6#CG0^Br5ijYWEt{jiTpmANQPkXTd|A)bJbdKEtZPG?1Y>F7t5svU#1pF|N*YzhF2c|*g&%%OvV5(EK_)U&m1RJ4qI>Ri z(ckT3)Akqx`;!cZ6||_q{8cK(6%xIY!N|LQE{?;33Y90zJk*xTEMGg$kEf@?`uF!~ z0V+O$1KYiT$inIffxF%GZ1mFkW{l9@|5|KW0fjX?@~B_!JxQaB^I}4 z&%~S-pgEvufs5DMe7xEhCpZx2!?%36TmprUtLXp4%5BDBr;l@EP_j;AL!Cs$GKs3T zafZLKZZ9i9FnB-cCodNsSff%}=w@TRmlaJKU!Bs^|85>Aa}iHMU=XNOktKnnZ!4TRn@VqIS+R%qS~-2K z>>tW3U^2I~4MA;NI05OXj=jYLcmLSIO~XzYqIIGp6uem`!};Qk5?RkPOGW(+WsMK>=s zdFj{^Bm6;vBmF+&34uk`D)o!(`7khZFL8hur!>-IKt4L0w(sVN-9MOA&kavTSu$(=#*A+0Nk1U|f3^2hgrz$Dm`-t^vE_oebJF Z_&1j=r>I?>VQK&X002ovPDHLkV1flq{#yV5 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe981651961c284f0a789b6da56bc3b3d6c5fdc GIT binary patch literal 1946 zcmV;L2W9w)P)Px+R7pfZRA@u(nt6~EzNgMCFLcB}fT|a1~ zO>J$a|Cy@Unzz5-`@H8@t2FF-!Q=nvQ8I!nIqeMLN)DI|;SAwQ=7CH|S2CcN$;lAT z5Uyk%$b@ty1DYvXnUKzebS3jZ${`&JDh%lppu=4nufG$gWNVyA6l&L0D4Y=F+D+U-%8ReZ+4yE0+ewW?>Vi$k>2EN! zkHO*N31%#f@y`1RzSBx&<;*O3n)$0@tb8esca@qo74nCf^zWr(J087rB7Abx&&YblNi*;L^YcE()pk-r~#ZyAmy+L8c2AgH;9UKQr76fT_o5qJ9yNq}$#;MY) zQ{1?L%Hjf(M)ft`-Q)6;yePG6D2y4X^KcJ?KmEmJ^sE?%j$NI-E5$&{goUvhRTW0| zGZ>hybNHCc#IVf=`(1i<)hHYv;`{}VqUUX1c*Xfz%7Fkp(a&H|ZyiHd7(6+`&OHe_ zeOqJZ=pePKDJ)oHvv#vBQzzA@T!K{v+PBu2_A`@uH>oULXHi@dNBDnzVTfjpRJQ*y zPQe0;6Q}<-mD?Mr%p7IX<_?V=@3{;qh*C96VeBBCM;3OkUCxAq;d%s z25MGUc(T7izn(hBP9|gsA3TzvXO{r;Cj>cFnjpN&;iWhKJ7rCSf!P5@_B9EaFr*;H z?>}&9bBD^ZsUfO_V0lT>nPugmn-;->a_4pd@`oBUxLIY%I-6&HX;b|=h2rT!S~k&m zbz7X-%VV58bLBv6R8Nt`>U(Vi{PquV#>}>e#yqBvGU?MpXWv1WnaeD8?@Oc_$zT1h z+=PXts#O#wk1)u-PnYfJfngE(`NMm4=8iQvdB$V7R_!`nVOTVzQrYu z%<;cpOj5qS2ILPlWh!jjoy^mtClbubHThAuWDy)UC(7=9<*Uq>dM2%cMTHIL2kF)! zz!zr|JT^Yci8C-LTW3UHLssl3rbXHRiHFF>wyji_ObMZ>9t)ngS+^xl^F}Jq%`mA} zRb$gzHWR}!;;xz!&9o05S2EbCjmpxgAvrv(-e@y-g-xrbDg`4=?rfsT3cln88&!p; za}4_2Z}9G(I5U=6e0toI-(`0*D2sXw$cwV~K=~`PZ-j+m(?E`gUE1j!JmQi&+v3RQ z9yyQdaz-xwo5zpGMCFvWcAlUM#U(byFFM@STxE8yN&UJS8{V+U4?DPS+Tf1kUP+nONbNq`2Mh{{F@(-Z-PZ%{&}v+4>||fwbzyV@}CcT%o%IS2~2DlYc@Nw zSl!)1lk{8MuF73k?7UIS54mX^JT4y@p+jr2-v-fCh54&(*1h7;^jj*cW`%HE=$9Lj zZENsDI*<3&Ie!s`PmQr>zx%c8WUB7)jj%Y-jkOecQz15|-@Wh3dHT?2B9{#=Mv%EH zE)ky2NwzFOR}{3;^FAc+zdYotV6oJ9?--DRM3I`g%x2Tuj$HTLgn|=?$9n0E9$;{~ zGreXn*Oo2~H?bV#4K=v`o`Afz89y(^=ckec#mv08ASA;*iC7b- zj5O%dF2H;HTn6OF&~@1KOpy9FYi!*Sm-+2C-D@UT+;ED^IdMr>B}<{>BW2X84zDe* z!s&A!;Z>HrZ@${=+*B*{H4`jeRI{2w*Y*J}lzIGmS8}=S**PE!)Z05<%D&-+eX62; z&*4-L=GX5sg8lMrMX{S9Tv15)b&d>SzdTz}>}Cj86cT=&BSY9P&sG$>8NwBXgkR^# g5cbQn6~*p90Pg@ylFuSCm;e9(07*qoM6N<$f?Wi>u>b%7 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..fcdf00817baab1c27ec289b6ca7d6d5bd044378a GIT binary patch literal 439 zcmV;o0Z9IdP)Px$aY;l$R5(xVls_y3Q5?rVch|dXZNeaeq>0I3WD*fmZ3Yaakzi}JK|{nqDvdNs zR750%P%IWnHx@$|36sslAO;gd_4QhEl=yRPDwuf7Ti*NR`@Y}r?@7+qy9a)7N&moa zyZQSbI&_#C)QGI7>2j$o#sm+!9!L`S+$y_qgFv6g_6t-WvyI`f z;5OH+vQmj@pU%;7hMGzUuYRBbmOw>;^^k+rJ%Ovq_N2sIixWEAaRX1cN>AYaRryx3&_Gq8rBPvYHf0$`Q3}mNC3cB{P8HP#(Jk?*cORt|H7T<6d@WnV hM^_Z^D+B%qfsc7emd#jAr9}V$002ovPDHLkV1hC+zy$yR literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b913253fc00676db29f2aab7749263a151d062 GIT binary patch literal 731 zcmV<10wn#3P)Px%l}SWFR7gwhm0d^_VHky7pnppsS*|$?muyJ=9t3ec9qGg`MV@;y+~n> zMEy;T%v3WUr+xGdxY1k-Pbr|if&gjT%^W!(aj8|Myg=dYgcp0GIuGeerN!T5^Bs+| z1v1yVTs$7~1k6RynXXwSaPEY{$ZId}CcV_!WHO4Kj8Ayy02AXxx*M&OR;wg!5?LE7 zP}{09^*L}BgOciM5AKotmN~AfTsWmLGUlP?x`xLCk{PPX6k?W%)VHggFP7=-b41TgTEmm zNp-c^`y}!*CGsnNVK0;!fA6EYQ^R&tVOcaZc4*wFve43{aqmHJm4=k+hoYkdZe6r6 z@XW)DQ4hy+WP18tWTiwel4v5UWX2yZBW0LW z2iw2XL`j}PU7O0vr6)OkmzhI*&2;y<$xSzNyT|QclfKaTnS%<;Uj477Q36TvA|F2aSiM4E z_@$R`Kf+)%vK$r)hA4neBLLp;`228TD>ahNP-h~fp&a_F@BfdzzX1io73+{02Iv3) N002ovPDHLkV1fpVRX6|u literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c167173a0d1fc1d5bf3c9a4d6b9a0f266be276 GIT binary patch literal 1875 zcmV-Z2dwysP)Px+4M{{nRA@u(n0s(k?-iun=PNU zWp%wl;IUMRcTWX4d^|`X2=-^A9+EJ87JL5~;FEK0JG1rw+nu@(+%2(qy2AAx1S&Qe zY~5*c(~TlarppZIEAc|LLCx!CTX>Q)O=a9jiMNghSX!lX{vymvSD5&S#Muilw^ZkE z?+4p-X4pg%G^i=lxZ^e#?|&5F$>((^>dR)UjCxS!e1pZ%iA@;3&~SC@EO4MY0hcK7 z>MkEkUo_~^&Bc~dH%VPZ>W-LXJD38ed$tSh3m1_C0=5QzTX{ zbQ1_#ly5ModE=XFRTM4eOjbxAqvAI$(sH~`9Znf7Gkt=B{rx0QGbi4=W@21*L)b*^ zPP?gCVy+I6O5YqNsgH>L7_1^V~ExS>&%V*mKZiP=6QIB^npMuqfZ?R4+Ft7W~g|!l4^>jkf;zP2ELurzuVv+o|g* z(@_+G%K0ky-!1X#EFct9xg`F&x8(NbJ~WQn1!%n=IB9s0>V&sIBu+vcbov z=fk1*-`_@zsLKW8Mo7#}Q*kRWWuce1-w87EUWwu?mBuE>D)w^h??D7CY-d$5-;LjI zIoHWsM@=3~k*HeY=0bzT@^w13bpe8w5D}&kBWk1hagxZgSqg*ikT~>bleAo&q%I

uQQxLY+Iqx_ZAoX>;2@d^>OyIFfPuogeRgz z?OL7uxXjFn3JIFP)GM_*ex!^iO~L1f@mXH3>i{(+8qK<`oR8W%lSflslzTK9E?Jaq zG@PLz9D@*13;1<8)wPqr`a+GqHw%tin!G@F%>L4uElO{E%}=+^@bFNXx+8uTuhO~H zB(km2%};N3@t1c@rsnDq>9k+Q7g0r94}Nx>O!hM>&0Y&nnZfVtO)`F|kU2p{l0cRO z$4OOg_VG%spYcDJ$<0uZWx=_Jx9z^RKW=N`Muli%M}Zwxnp2;)Tbfs9&^b|{a)C;!%mA#+ag)-|#Rne;cw(0B1SrxgDnxCNPd{c)F>Ys2E_|uw4$YjPI4;P( zOH0=2&I~(xxQyo+g~aOwo-eUGZQEwpPy-S*q8)!I@SBwyy^=(B?DJE)!N(6Y*ixpU z8!%~JGm<2bo1rq|9*Gn0nN0HNc#Tk@w{2h4h}tlo{Dn;6Y?aez0**5}^mdR(ACR2X z++QDH#Jv(rGF1{g!tA0Jj~uNPRibtW-cab~C%s)%|IWwSt$v!k7IpFv&6hi&q(Z^w01|v8xe|I?)8T;JgLduLbs# z$|KX7NpQpN^$Cu$FZ{~K)}4OGHAQnpov01|_C6x%W9;D?7F8N(Zi}Kh8s{zs9jEl+ z$I(^O#_+8WwcSwnP9k<2`s7o~QL@Ls$2!xrID6iTYHhY=$+to@nkgCT*>R$wMk-eJ z#TAVer9#CSS2WZ}#mc_8qOqb>s5s+_h8n3@*%wzdR+I`A=l4d@e*s>99OP8q4gmlF N002ovPDHLkV1f`^o%sL& literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c167173a0d1fc1d5bf3c9a4d6b9a0f266be276 GIT binary patch literal 1875 zcmV-Z2dwysP)Px+4M{{nRA@u(n0s(k?-iun=PNU zWp%wl;IUMRcTWX4d^|`X2=-^A9+EJ87JL5~;FEK0JG1rw+nu@(+%2(qy2AAx1S&Qe zY~5*c(~TlarppZIEAc|LLCx!CTX>Q)O=a9jiMNghSX!lX{vymvSD5&S#Muilw^ZkE z?+4p-X4pg%G^i=lxZ^e#?|&5F$>((^>dR)UjCxS!e1pZ%iA@;3&~SC@EO4MY0hcK7 z>MkEkUo_~^&Bc~dH%VPZ>W-LXJD38ed$tSh3m1_C0=5QzTX{ zbQ1_#ly5ModE=XFRTM4eOjbxAqvAI$(sH~`9Znf7Gkt=B{rx0QGbi4=W@21*L)b*^ zPP?gCVy+I6O5YqNsgH>L7_1^V~ExS>&%V*mKZiP=6QIB^npMuqfZ?R4+Ft7W~g|!l4^>jkf;zP2ELurzuVv+o|g* z(@_+G%K0ky-!1X#EFct9xg`F&x8(NbJ~WQn1!%n=IB9s0>V&sIBu+vcbov z=fk1*-`_@zsLKW8Mo7#}Q*kRWWuce1-w87EUWwu?mBuE>D)w^h??D7CY-d$5-;LjI zIoHWsM@=3~k*HeY=0bzT@^w13bpe8w5D}&kBWk1hagxZgSqg*ikT~>bleAo&q%I

uQQxLY+Iqx_ZAoX>;2@d^>OyIFfPuogeRgz z?OL7uxXjFn3JIFP)GM_*ex!^iO~L1f@mXH3>i{(+8qK<`oR8W%lSflslzTK9E?Jaq zG@PLz9D@*13;1<8)wPqr`a+GqHw%tin!G@F%>L4uElO{E%}=+^@bFNXx+8uTuhO~H zB(km2%};N3@t1c@rsnDq>9k+Q7g0r94}Nx>O!hM>&0Y&nnZfVtO)`F|kU2p{l0cRO z$4OOg_VG%spYcDJ$<0uZWx=_Jx9z^RKW=N`Muli%M}Zwxnp2;)Tbfs9&^b|{a)C;!%mA#+ag)-|#Rne;cw(0B1SrxgDnxCNPd{c)F>Ys2E_|uw4$YjPI4;P( zOH0=2&I~(xxQyo+g~aOwo-eUGZQEwpPy-S*q8)!I@SBwyy^=(B?DJE)!N(6Y*ixpU z8!%~JGm<2bo1rq|9*Gn0nN0HNc#Tk@w{2h4h}tlo{Dn;6Y?aez0**5}^mdR(ACR2X z++QDH#Jv(rGF1{g!tA0Jj~uNPRibtW-cab~C%s)%|IWwSt$v!k7IpFv&6hi&q(Z^w01|v8xe|I?)8T;JgLduLbs# z$|KX7NpQpN^$Cu$FZ{~K)}4OGHAQnpov01|_C6x%W9;D?7F8N(Zi}Kh8s{zs9jEl+ z$I(^O#_+8WwcSwnP9k<2`s7o~QL@Ls$2!xrID6iTYHhY=$+to@nkgCT*>R$wMk-eJ z#TAVer9#CSS2WZ}#mc_8qOqb>s5s+_h8n3@*%wzdR+I`A=l4d@e*s>99OP8q4gmlF N002ovPDHLkV1f`^o%sL& literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0b66df3996a7ba53560a71d10d5d2697fade54b7 GIT binary patch literal 2976 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b913253fc00676db29f2aab7749263a151d062 GIT binary patch literal 731 zcmV<10wn#3P)Px%l}SWFR7gwhm0d^_VHky7pnppsS*|$?muyJ=9t3ec9qGg`MV@;y+~n> zMEy;T%v3WUr+xGdxY1k-Pbr|if&gjT%^W!(aj8|Myg=dYgcp0GIuGeerN!T5^Bs+| z1v1yVTs$7~1k6RynXXwSaPEY{$ZId}CcV_!WHO4Kj8Ayy02AXxx*M&OR;wg!5?LE7 zP}{09^*L}BgOciM5AKotmN~AfTsWmLGUlP?x`xLCk{PPX6k?W%)VHggFP7=-b41TgTEmm zNp-c^`y}!*CGsnNVK0;!fA6EYQ^R&tVOcaZc4*wFve43{aqmHJm4=k+hoYkdZe6r6 z@XW)DQ4hy+WP18tWTiwel4v5UWX2yZBW0LW z2iw2XL`j}PU7O0vr6)OkmzhI*&2;y<$xSzNyT|QclfKaTnS%<;Uj477Q36TvA|F2aSiM4E z_@$R`Kf+)%vK$r)hA4neBLLp;`228TD>ahNP-h~fp&a_F@BfdzzX1io73+{02Iv3) N002ovPDHLkV1fpVRX6|u literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7a0a1616fcd605a6d47cc0661dbd80cd76457f GIT binary patch literal 2625 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 N`>x)dat)i%e*uk2`NjYM literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7a0a1616fcd605a6d47cc0661dbd80cd76457f GIT binary patch literal 2625 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 N`>x)dat)i%e*uk2`NjYM literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f20acd771099b78b34091337bb5f741f1308b14b GIT binary patch literal 4765 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 Z_&1j=r>I?>VQK&X002ovPDHLkV1flq{#yV5 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png new file mode 100644 index 0000000000000000000000000000000000000000..f20acd771099b78b34091337bb5f741f1308b14b GIT binary patch literal 4765 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 R|Gjf?R9|T-)xNX{`44;}3i|*6 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..846c0507a52cbec43cfe2e0f3598cdd1d970e04d GIT binary patch literal 6065 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f20acd771099b78b34091337bb5f741f1308b14b GIT binary patch literal 4765 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..33203dc4701643052a9a8f286a605c0ea8b60765 GIT binary patch literal 6652 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 R|Gjf?R9|T-)xNX{`44;}3i|*6 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png new file mode 100644 index 0000000000000000000000000000000000000000..e64eb409a82fba5d9550640f30d323d5eefad6d0 GIT binary patch literal 63239 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

=$E)CiUU#q0Osqx11_Pq?D%FO53=JY9SY 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..429894d375b75e3b4a68012bdc57a84bad939798 GIT binary patch literal 2436 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 Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/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/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/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/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/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/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..02592e6 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Venera + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + venera + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + NSPhotoLibraryUsageDescription + Choose images + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/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/lib/components/appbar.dart b/lib/components/appbar.dart new file mode 100644 index 0000000..1f2124c --- /dev/null +++ b/lib/components/appbar.dart @@ -0,0 +1,623 @@ +part of 'components.dart'; + +class Appbar extends StatefulWidget implements PreferredSizeWidget { + const Appbar( + {required this.title, + this.leading, + this.actions, + this.backgroundColor, + super.key}); + + final Widget title; + + final Widget? leading; + + final List? actions; + + final Color? backgroundColor; + + @override + State createState() => _AppbarState(); + + @override + Size get preferredSize => const Size.fromHeight(56); +} + +class _AppbarState extends State { + ScrollNotificationObserverState? _scrollNotificationObserver; + bool _scrolledUnder = false; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + _scrollNotificationObserver?.removeListener(_handleScrollNotification); + _scrollNotificationObserver = ScrollNotificationObserver.maybeOf(context); + _scrollNotificationObserver?.addListener(_handleScrollNotification); + } + + @override + void dispose() { + if (_scrollNotificationObserver != null) { + _scrollNotificationObserver!.removeListener(_handleScrollNotification); + _scrollNotificationObserver = null; + } + super.dispose(); + } + + void _handleScrollNotification(ScrollNotification notification) { + if (notification is ScrollUpdateNotification && + defaultScrollNotificationPredicate(notification)) { + final bool oldScrolledUnder = _scrolledUnder; + final ScrollMetrics metrics = notification.metrics; + switch (metrics.axisDirection) { + case AxisDirection.up: + // Scroll view is reversed + _scrolledUnder = metrics.extentAfter > 0; + case AxisDirection.down: + _scrolledUnder = metrics.extentBefore > 0; + case AxisDirection.right: + case AxisDirection.left: + // Scrolled under is only supported in the vertical axis, and should + // not be altered based on horizontal notifications of the same + // predicate since it could be a 2D scroller. + break; + } + + if (_scrolledUnder != oldScrolledUnder) { + setState(() { + // React to a change in MaterialState.scrolledUnder + }); + } + } + } + + @override + Widget build(BuildContext context) { + var content = SizedBox( + height: _kAppBarHeight, + child: Row( + children: [ + const SizedBox(width: 8), + widget.leading ?? + Tooltip( + message: "Back".tl, + child: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () => Navigator.pop(context), + ), + ), + const SizedBox( + width: 16, + ), + Expanded( + child: DefaultTextStyle( + style: DefaultTextStyle.of(context).style.copyWith(fontSize: 20), + maxLines: 1, + overflow: TextOverflow.ellipsis, + child: widget.title, + ), + ), + ...?widget.actions, + const SizedBox( + width: 8, + ) + ], + ), + ).paddingTop(context.padding.top); + if (widget.backgroundColor != Colors.transparent) { + return Material( + elevation: (_scrolledUnder && context.width < changePoint) ? 1 : 0, + surfaceTintColor: Theme.of(context).colorScheme.surfaceTint, + color: widget.backgroundColor ?? Theme.of(context).colorScheme.surface, + child: content, + ); + } + return content; + } +} + +class SliverAppbar extends StatelessWidget { + const SliverAppbar({ + super.key, + required this.title, + this.leading, + this.actions, + this.color, + this.radius = 0, + }); + + final Widget? leading; + + final Widget title; + + final List? actions; + + final Color? color; + + final double radius; + + @override + Widget build(BuildContext context) { + return SliverPersistentHeader( + pinned: true, + delegate: _MySliverAppBarDelegate( + leading: leading, + title: title, + actions: actions, + topPadding: MediaQuery.of(context).padding.top, + color: color, + radius: radius, + ), + ); + } +} + +const _kAppBarHeight = 58.0; + +class _MySliverAppBarDelegate extends SliverPersistentHeaderDelegate { + final Widget? leading; + + final Widget title; + + final List? actions; + + final double topPadding; + + final Color? color; + + final double radius; + + _MySliverAppBarDelegate( + {this.leading, + required this.title, + this.actions, + this.color, + required this.topPadding, + this.radius = 0}); + + @override + Widget build( + BuildContext context, double shrinkOffset, bool overlapsContent) { + return SizedBox.expand( + child: Material( + color: color, + elevation: 0, + borderRadius: BorderRadius.circular(radius), + child: Row( + children: [ + const SizedBox(width: 8), + leading ?? + (Navigator.of(context).canPop() + ? Tooltip( + message: "返回".tl, + child: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () => Navigator.pop(context), + ), + ) + : const SizedBox()), + const SizedBox( + width: 24, + ), + Expanded( + child: DefaultTextStyle( + style: + DefaultTextStyle.of(context).style.copyWith(fontSize: 20), + maxLines: 1, + overflow: TextOverflow.ellipsis, + child: title, + ), + ), + ...?actions, + const SizedBox( + width: 8, + ) + ], + ).paddingTop(topPadding), + ), + ); + } + + @override + double get maxExtent => _kAppBarHeight + topPadding; + + @override + double get minExtent => _kAppBarHeight + topPadding; + + @override + bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) { + return oldDelegate is! _MySliverAppBarDelegate || + leading != oldDelegate.leading || + title != oldDelegate.title || + actions != oldDelegate.actions; + } +} + +class FloatingSearchBar extends StatefulWidget { + const FloatingSearchBar({ + super.key, + this.height = 56, + this.trailing, + required this.onSearch, + required this.controller, + this.onChanged, + }); + + /// height of search bar + final double height; + + /// end of search bar + final Widget? trailing; + + /// callback when user do search + final void Function(String) onSearch; + + /// controller of [TextField] + final TextEditingController controller; + + final void Function(String)? onChanged; + + @override + State createState() => _FloatingSearchBarState(); +} + +class _FloatingSearchBarState extends State { + double get effectiveHeight { + return math.max(widget.height, 53); + } + + @override + Widget build(BuildContext context) { + final ColorScheme colorScheme = Theme.of(context).colorScheme; + var text = widget.controller.text; + if (text.isEmpty) { + text = "Search"; + } + var padding = 12.0; + return Container( + padding: EdgeInsets.fromLTRB(padding, 9, padding, 0), + width: double.infinity, + height: effectiveHeight, + child: Material( + elevation: 0, + color: colorScheme.primaryContainer, + borderRadius: BorderRadius.circular(effectiveHeight / 2), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Row(children: [ + Tooltip( + message: "返回".tl, + child: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () => context.pop(), + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(right: 8), + child: TextField( + controller: widget.controller, + decoration: const InputDecoration( + border: InputBorder.none, + ), + onSubmitted: (s) { + widget.onSearch(s); + }, + onChanged: widget.onChanged, + ), + ), + ), + if (widget.trailing != null) widget.trailing! + ]), + ), + ), + ); + } +} + +class FilledTabBar extends StatefulWidget { + const FilledTabBar({super.key, this.controller, required this.tabs}); + + final TabController? controller; + + final List tabs; + + @override + State createState() => _FilledTabBarState(); +} + +class _FilledTabBarState extends State { + late TabController _controller; + + late List keys; + + static const _kTabHeight = 48.0; + + static const tabPadding = EdgeInsets.symmetric(horizontal: 6, vertical: 6); + + static const tabRadius = 12.0; + + _IndicatorPainter? painter; + + var scrollController = ScrollController(); + + var tabBarKey = GlobalKey(); + + var offsets = []; + + @override + void initState() { + keys = widget.tabs.map((e) => GlobalKey()).toList(); + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + void didChangeDependencies() { + _controller = widget.controller ?? DefaultTabController.of(context); + _controller.animation!.addListener(onTabChanged); + initPainter(); + super.didChangeDependencies(); + } + + @override + void didUpdateWidget(covariant FilledTabBar oldWidget) { + if (widget.controller != oldWidget.controller) { + _controller = widget.controller ?? DefaultTabController.of(context); + _controller.animation!.addListener(onTabChanged); + initPainter(); + } + super.didUpdateWidget(oldWidget); + } + + void initPainter() { + var old = painter; + painter = _IndicatorPainter( + controller: _controller, + color: context.colorScheme.primary, + padding: tabPadding, + radius: tabRadius, + ); + if (old != null) { + painter!.update(old.offsets!, old.itemHeight!); + } + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller, + builder: buildTabBar, + ); + } + + void _tabLayoutCallback(List offsets, double itemHeight) { + painter!.update(offsets, itemHeight); + this.offsets = offsets; + } + + Widget buildTabBar(BuildContext context, Widget? _) { + var child = SmoothScrollProvider( + controller: scrollController, + builder: (context, controller, physics) { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + padding: EdgeInsets.zero, + controller: controller, + physics: physics, + child: CustomPaint( + painter: painter, + child: _TabRow( + callback: _tabLayoutCallback, + children: List.generate(widget.tabs.length, buildTab), + ), + ).paddingHorizontal(4), + ); + }, + ); + return Container( + key: tabBarKey, + height: _kTabHeight, + width: double.infinity, + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: context.colorScheme.outlineVariant, + width: 0.6, + ), + ), + ), + child: widget.tabs.isEmpty + ? const SizedBox() + : child + ); + } + + int? previousIndex; + + void onTabChanged() { + final int i = _controller.index; + if (i == previousIndex) { + return; + } + updateScrollOffset(i); + previousIndex = i; + } + + void updateScrollOffset(int i) { + // try to scroll to center the tab + final RenderBox tabBarBox = + tabBarKey.currentContext!.findRenderObject() as RenderBox; + final double tabLeft = offsets[i]; + final double tabRight = offsets[i + 1]; + final double tabWidth = tabRight - tabLeft; + final double tabCenter = tabLeft + tabWidth / 2; + final double tabBarWidth = tabBarBox.size.width; + final double scrollOffset = tabCenter - tabBarWidth / 2; + if (scrollOffset == scrollController.offset) { + return; + } + scrollController.animateTo( + scrollOffset, + duration: const Duration(milliseconds: 200), + curve: Curves.easeInOut, + ); + } + + void onTabClicked(int i) { + _controller.animateTo(i); + } + + Widget buildTab(int i) { + return InkWell( + onTap: () => onTabClicked(i), + borderRadius: BorderRadius.circular(tabRadius), + child: KeyedSubtree( + key: keys[i], + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: DefaultTextStyle( + style: DefaultTextStyle.of(context).style.copyWith( + color: i == _controller.index + ? context.colorScheme.primary + : context.colorScheme.onSurface, + fontWeight: FontWeight.w500, + ), + child: widget.tabs[i], + ), + ), + ), + ).padding(tabPadding); + } +} + +typedef _TabRenderCallback = void Function( + List offsets, + double itemHeight, +); + +class _TabRow extends Row { + const _TabRow({required this.callback, required super.children}); + + final _TabRenderCallback callback; + + @override + RenderFlex createRenderObject(BuildContext context) { + return _RenderTabFlex( + direction: Axis.horizontal, + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + textDirection: Directionality.of(context), + verticalDirection: VerticalDirection.down, + callback: callback); + } + + @override + void updateRenderObject(BuildContext context, _RenderTabFlex renderObject) { + super.updateRenderObject(context, renderObject); + renderObject.callback = callback; + } +} + +class _RenderTabFlex extends RenderFlex { + _RenderTabFlex({ + required super.direction, + required super.mainAxisSize, + required super.mainAxisAlignment, + required super.crossAxisAlignment, + required TextDirection super.textDirection, + required super.verticalDirection, + required this.callback, + }); + + _TabRenderCallback callback; + + @override + void performLayout() { + super.performLayout(); + RenderBox? child = firstChild; + final List xOffsets = []; + while (child != null) { + final FlexParentData childParentData = + child.parentData! as FlexParentData; + xOffsets.add(childParentData.offset.dx); + assert(child.parentData == childParentData); + child = childParentData.nextSibling; + } + xOffsets.add(size.width); + callback(xOffsets, firstChild!.size.height); + } +} + +class _IndicatorPainter extends CustomPainter { + _IndicatorPainter({ + required this.controller, + required this.color, + required this.padding, + this.radius = 4.0, + }) : super(repaint: controller.animation); + + final TabController controller; + final Color color; + final EdgeInsets padding; + final double radius; + + List? offsets; + double? itemHeight; + Rect? _currentRect; + + void update(List offsets, double itemHeight) { + this.offsets = offsets; + this.itemHeight = itemHeight; + } + + int get maxTabIndex => offsets!.length - 2; + + Rect indicatorRect(Size tabBarSize, int tabIndex) { + assert(offsets != null); + assert(offsets!.isNotEmpty); + assert(tabIndex >= 0); + assert(tabIndex <= maxTabIndex); + var (tabLeft, tabRight) = (offsets![tabIndex], offsets![tabIndex + 1]); + + const horizontalPadding = 12.0; + + var rect = Rect.fromLTWH( + tabLeft + padding.left + horizontalPadding, + _FilledTabBarState._kTabHeight - 3.6, + tabRight - tabLeft - padding.horizontal - horizontalPadding * 2, + 3, + ); + + return rect; + } + + @override + void paint(Canvas canvas, Size size) { + if (offsets == null || itemHeight == null) { + return; + } + final double index = controller.index.toDouble(); + final double value = controller.animation!.value; + final bool ltr = index > value; + final int from = (ltr ? value.floor() : value.ceil()).clamp(0, maxTabIndex); + final int to = (ltr ? from + 1 : from - 1).clamp(0, maxTabIndex); + final Rect fromRect = indicatorRect(size, from); + final Rect toRect = indicatorRect(size, to); + _currentRect = Rect.lerp(fromRect, toRect, (value - from).abs()); + final Paint paint = Paint()..color = color; + final RRect rrect = + RRect.fromRectAndCorners(_currentRect!, topLeft: Radius.circular(radius), topRight: Radius.circular(radius)); + canvas.drawRRect(rrect, paint); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) { + return false; + } +} diff --git a/lib/components/button.dart b/lib/components/button.dart new file mode 100644 index 0000000..f065448 --- /dev/null +++ b/lib/components/button.dart @@ -0,0 +1,309 @@ +part of 'components.dart'; + +class HoverBox extends StatefulWidget { + const HoverBox( + {super.key, required this.child, this.borderRadius = BorderRadius.zero}); + + final Widget child; + + final BorderRadius borderRadius; + + @override + State createState() => _HoverBoxState(); +} + +class _HoverBoxState extends State { + bool isHover = false; + + @override + Widget build(BuildContext context) { + return MouseRegion( + onEnter: (_) => setState(() => isHover = true), + onExit: (_) => setState(() => isHover = false), + cursor: SystemMouseCursors.click, + child: AnimatedContainer( + duration: const Duration(milliseconds: 200), + decoration: BoxDecoration( + color: isHover + ? Theme.of(context).colorScheme.surfaceContainerLow + : null, + borderRadius: widget.borderRadius), + child: widget.child, + ), + ); + } +} + +enum ButtonType { filled, outlined, text, normal } + +class Button extends StatefulWidget { + const Button( + {super.key, + required this.type, + required this.child, + this.isLoading = false, + this.width, + this.height, + this.padding, + this.color, + this.onPressedAt, + required this.onPressed}); + + const Button.filled( + {super.key, + required this.child, + required this.onPressed, + this.width, + this.height, + this.padding, + this.color, + this.onPressedAt, + this.isLoading = false}) + : type = ButtonType.filled; + + const Button.outlined( + {super.key, + required this.child, + required this.onPressed, + this.width, + this.height, + this.padding, + this.color, + this.onPressedAt, + this.isLoading = false}) + : type = ButtonType.outlined; + + const Button.text( + {super.key, + required this.child, + required this.onPressed, + this.width, + this.height, + this.padding, + this.color, + this.onPressedAt, + this.isLoading = false}) + : type = ButtonType.text; + + const Button.normal( + {super.key, + required this.child, + required this.onPressed, + this.width, + this.height, + this.padding, + this.color, + this.onPressedAt, + this.isLoading = false}) + : type = ButtonType.normal; + + static Widget icon( + {Key? key, + required Widget icon, + required VoidCallback onPressed, + double? size, + Color? color, + String? tooltip}) { + return _IconButton( + key: key, + icon: icon, + onPressed: onPressed, + size: size, + color: color, + tooltip: tooltip, + ); + } + + final ButtonType type; + + final Widget child; + + final bool isLoading; + + final void Function() onPressed; + + final void Function(Offset location)? onPressedAt; + + final double? width; + + final double? height; + + final EdgeInsets? padding; + + final Color? color; + + @override + State